{"generated_at":1794480616.2679431,"engine_count":632,"categories":[{"id":"reviews","title":"Reputation & Reviews"},{"id":"jobs","title":"Jobs & Hiring"},{"id":"real-estate","title":"Real Estate"},{"id":"ecommerce","title":"E-commerce & Marketplaces"},{"id":"social","title":"Social Media"},{"id":"travel","title":"Travel & Lodging"},{"id":"search-seo","title":"Search & SEO"},{"id":"finance","title":"Finance & Data"},{"id":"media","title":"Media, Film & Knowledge"},{"id":"utilities","title":"Utilities & AI"},{"id":"developer-tools","title":"Developer Tools"},{"id":"classifieds","title":"Classifieds & Second-hand"}],"unit":"credits","default_price":1,"rate_limits":{"ip":{"requests":30,"window_seconds":3},"key":{"requests":30,"window_seconds":3}},"engines":[{"name":"11st","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"11st API — 11번가 (Korea): search, full product records with option stock and seller rating, reviews and the 베스트 500 ranking","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/11st/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on 11st.co.kr (11번가). Each organic row carries the sell price and the discounted price, discount rate, seller and store, shipping fee, today-dispatch flag and cutoff hour, rating, review count, sales count and the site's badges; sponsored rows are returned apart in `ads`. Filters: sort (7), price range, free shipping, official/department stores, product type (used, overseas direct), top category. Every filter was measured against the unfiltered total; filters the site silently ignores are not offered.","required_params":["query"],"optional_params":["page","sort","min_price","max_price","free_shipping","official_store","product_type","category"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, Korean or Latin (e.g. 운동화, nike, 에어팟). Normalised with NFKC before sending.","on_invalid":"reject","example":"운동화","aliases":["q","keyword","kwd"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-24. The source serves 24 pages of about 84 organic rows; later pages repeat page 24, so they are refused.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":24},{"name":"sort","type":"enum","required":false,"description":"Sort order (the site's own sorts).","on_invalid":"reject","allowed_values":[{"value":"ranking","label":"11번가 랭킹순 (default: ads, sales and relevance)"},{"value":"popular","label":"11번가 인기순 (sales and relevance)"},{"value":"price_asc","label":"낮은 가격순"},{"value":"price_desc","label":"높은 가격순"},{"value":"sales","label":"누적 판매순"},{"value":"reviews","label":"많은 리뷰순"},{"value":"newest","label":"최신순"}],"default":"ranking","example":"price_asc"},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in KRW (the site's own price range filter; it acts on the site's discount price, so a row may show a final price a little outside the range — measured in BUILD-LOG).","on_invalid":"reject","example":30000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in KRW (see min_price).","on_invalid":"reject","example":50000,"minimum":0,"aliases":["price_max"]},{"name":"free_shipping","type":"boolean","required":false,"description":"Only free-shipping products (무료배송).","on_invalid":"reject","example":true},{"name":"official_store","type":"boolean","required":false,"description":"Only brand-official, certified and department-store sellers (공식·백화점몰).","on_invalid":"reject","example":true},{"name":"product_type","type":"enum","required":false,"description":"Product type filter (상품 유형).","on_invalid":"reject","allowed_values":[{"value":"used","label":"중고 (used)"},{"value":"global_direct","label":"해외직구 (overseas direct)"},{"value":"exclude_global_direct","label":"해외직구 제외 (no overseas direct)"}],"example":"used"},{"name":"category","type":"enum","required":false,"description":"Top-level category (searchCategoryLarge).","on_invalid":"reject","allowed_values":[{"value":"100001316","label":"패션의류"},{"value":"100002055","label":"패션잡화"},{"value":"100005475","label":"화장품/미용"},{"value":"100004750","label":"디지털/가전"},{"value":"100005941","label":"가구/인테리어"},{"value":"100005808","label":"출산/육아"},{"value":"100006456","label":"식품"},{"value":"100003066","label":"스포츠/레저"},{"value":"100002032","label":"생활/건강"},{"value":"100015973","label":"여가/생활편의"},{"value":"100015974","label":"도서"}],"example":"100003066"}],"returns":"results[] {product_id, title, url, image, brand, sell_price (판매가), final_price (the discounted price shown), discount_percent, instant_discount, price_from (true = option prices vary), currency, seller_name, seller_id, store_id, store_url, seller_badge, shipping_fee, free_shipping, shipping_text, today_dispatch, dispatch_cutoff_hour, delivery_badge, delivery_types[], rating (0-5), rating_scale, review_count, sales_count, sales_badge, sales_badge_min, point_reward, free_return, labels[], is_11st_lowest_price, is_30day_lowest_price, is_deal, is_official, sold_out, remaining_qty, category_id, adult} + ads[] (sponsored rows, same shape + ad_slot) + total (the source's count) + page + last_page + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"운동화"}},{"name":"product","description":"One 11st product in full: title, brand, category path, images; sell price, discounted price, seller / 11st instant discounts, coupon price when a coupon is shown, the maximum-benefit price (할인혜택가) and its breakdown, multi-buy discount; every option with its own stock count, price and sold-out flag; total stock; rating, satisfied %, review / Q&A / like counts; seller (id, store, satisfaction %, response rate, sales level, store likes); delivery (courier, fee, arrival promise, order cutoff, Jeju/island surcharge).","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"11st product number (digits), exactly as `product_id` in search / ranking rows, or a product URL (www.11st.co.kr/products/<id>).","on_invalid":"reject","example":"9165481054","aliases":["id","prdNo","url"]}],"returns":"product {product_id, title, url, images[], brand, brand_id, category_path[], category, catalog_id, market_type, sell_status, sold_out, sell_price, final_price, discount_percent, instant_discount_seller, instant_discount_11st, coupon_price, coupon_discount, market_price, max_benefit_price, max_benefit_discount_percent, price_breakdown[], multi_buy_discount, card_discount_text, lowest_price_label, currency, stock_qty, options[] {level, name, options[] {name, option_id, sell_status, sold_out, stock_qty, add_price, sell_price, final_price, discount_percent, selected, notice}}, rating, satisfied_pct, review_count, qna_count, like_count, category_best, promo_line, max_reward_points, seller {...}, delivery {...}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"9165481054"}},{"name":"reviews","description":"Buyer reviews of one 11st product, 10 per page: rating (1-5), text, date, author nickname, chosen option, helpful count, the reviewer's attribute answers, photo / video flags; plus the total and the positive / negative split.","required_params":["product_id"],"optional_params":["page","sort","rating","media_only"],"params":[{"name":"product_id","type":"string","required":true,"description":"11st product number (digits), exactly as `product_id` in search / ranking rows, or a product URL (www.11st.co.kr/products/<id>).","on_invalid":"reject","example":"9165481054","aliases":["id","prdNo","url"]},{"name":"page","type":"integer","required":false,"description":"Review page (10 per page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"추천순"},{"value":"newest","label":"최신순"}],"default":"recommended","example":"newest"},{"name":"rating","type":"enum","required":false,"description":"Rating bucket.","on_invalid":"reject","allowed_values":[{"value":"positive","label":"긍정적 별점 (4-5)"},{"value":"negative","label":"부정적 별점 (1-3)"}],"example":"negative"},{"name":"media_only","type":"boolean","required":false,"description":"Only photo / video reviews.","on_invalid":"reject","example":true}],"returns":"results[] {review_id, product_id, rating, text, date, author, option, helpful_count, evaluations[] {name, value}, images[], has_video} + total + positive_count + negative_count + page + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"9165481054"}},{"name":"ranking","description":"The 11st 베스트 500 sales ranking (top 40 positions per view): overall, by one of 15 category groups, by sub-category, and by shopper gender. Each row: rank, product id, title, struck-through price and price, discount, free-shipping flag, seller, likes.","required_params":[],"optional_params":["group","category","gender"],"params":[{"name":"group","type":"enum","required":false,"description":"Category group (cornerNo).","on_invalid":"reject","allowed_values":[{"value":"0","label":"전체"},{"value":"1","label":"신선식품"},{"value":"2","label":"가공식품"},{"value":"3","label":"e쿠폰/상품권"},{"value":"4","label":"브랜드패션"},{"value":"5","label":"생활용품"},{"value":"6","label":"의류"},{"value":"7","label":"잡화"},{"value":"8","label":"뷰티"},{"value":"9","label":"유아동"},{"value":"10","label":"가구"},{"value":"11","label":"레저/자동차"},{"value":"12","label":"디지털/가전"},{"value":"13","label":"도서/여행/취미"},{"value":"14","label":"해외직구"}],"default":"0","example":"8"},{"name":"category","type":"string","required":false,"description":"Sub-category id inside the group (dispCtgrNo, digits), e.g. 1001324 스킨케어 in group 8. Needs `group`.","on_invalid":"reject","example":"1001324"},{"name":"gender","type":"enum","required":false,"description":"Shopper gender view.","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체"},{"value":"men","label":"남성"},{"value":"women","label":"여성"}],"default":"all","example":"women"}],"returns":"results[] {rank, product_id, title, url, image, strike_price, price, discount_percent, currency, free_shipping, flags[], seller_name, seller_id, seller_url, like_count} + group + group_name + category + category_name + gender + subcategories[] {category, name} (the group's own sub-category ids)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group":"0"}}]},{"name":"130point","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"130point API - sold prices (comps) for trading cards and collectibles from eBay, including the real accepted Best Offer price, plus Fanatics Collect (PWCC), Goldin, Heritage, Pristine, MySlabs and Card Hobby sales, by keyword with date, price, sale-type, marketplace and location filters; and live auctions across the same marketplaces. No account.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/130point/v1","spec_available":true,"actions":[{"name":"search","description":"Sold listings matching a keyword across eBay (every eBay site, with the accepted price of Best Offer sales and the asking price it was accepted against), Fanatics Collect (formerly PWCC), Goldin, Heritage Auctions, Pristine Auction, MySlabs and Card Hobby: title, sold price and currency, sale type, bids, sale date, image and item link, with the grading company and grade read from the title. Filter by sold date range, price range, sale type (auction, fixed price, accepted best offer), marketplace and item location; graded or raw; sort by most recent or by price; optional conversion to one currency; per-currency min/median/max of the returned sales.","required_params":["query"],"optional_params":["marketplace","sale_type","sold_date_from","sold_date_to","price_min","price_max","item_location","sort","grader","grade","graded","currency","limit","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search, as typed into 130point (at least 4 characters): player or character, year, set, card number, grader and grade, e.g. '1986 fleer jordan psa 8'.","on_invalid":"reject","example":"charizard base set psa 9","aliases":["q","keyword"]},{"name":"marketplace","type":"array","required":false,"description":"One or more sources. Omit for all seven.","on_invalid":"reject","allowed_values":[{"value":"ebay","label":"eBay"},{"value":"fanatics","label":"Fanatics Collect (formerly PWCC)"},{"value":"goldin","label":"Goldin"},{"value":"heritage","label":"Heritage Auctions"},{"value":"pristine","label":"Pristine Auction"},{"value":"myslabs","label":"MySlabs"},{"value":"cardhobby","label":"Card Hobby (sold only)"}],"example":"ebay,goldin","aliases":["marketplaces","source"]},{"name":"sale_type","type":"enum","required":false,"description":"Only one way of selling.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Auction"},{"value":"fixed_price","label":"Buy It Now / fixed price"},{"value":"best_offer","label":"Best Offer accepted (eBay) — price is the accepted offer"}],"aliases":["buying_format"]},{"name":"sold_date_from","type":"string","required":false,"description":"Sold on or after (YYYY-MM-DD).","on_invalid":"reject","example":"2026-10-01","aliases":["date_from"]},{"name":"sold_date_to","type":"string","required":false,"description":"Sold on or before (YYYY-MM-DD).","on_invalid":"reject","example":"2026-10-31","aliases":["date_to"]},{"name":"price_min","type":"number","required":false,"description":"Lowest sold price, in the listing's own currency.","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest sold price, in the listing's own currency.","on_invalid":"reject","example":500,"minimum":0},{"name":"item_location","type":"enum","required":false,"description":"Where the eBay item was located (130point's item-location filter). Omit for worldwide.","on_invalid":"reject","allowed_values":[{"value":"CA","label":"Canada"},{"value":"GB","label":"United Kingdom"},{"value":"AU","label":"Australia"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"JP","label":"Japan"},{"value":"CN","label":"China"}]},{"name":"sort","type":"enum","required":false,"description":"Which 200 sales 130point returns, and in what order.","on_invalid":"reject","allowed_values":[{"value":"recent","label":"Most recent sales (the newest ~200)"},{"value":"price_desc","label":"Highest prices (reaches back years)"},{"value":"price_asc","label":"Lowest prices"}],"default":"recent"},{"name":"grader","type":"string","required":false,"description":"Grading company appended to the query the way 130point's own card filters do (PSA, BGS, CGC, SGC, TAG, ...).","on_invalid":"reject","example":"PSA"},{"name":"grade","type":"string","required":false,"description":"Grade appended to the query (e.g. 10, 9.5).","on_invalid":"reject","example":"10"},{"name":"graded","type":"enum","required":false,"description":"Keep graded or raw cards, judged from the title (applied to the returned rows).","on_invalid":"reject","allowed_values":[{"value":"any","label":"Graded and raw"},{"value":"graded","label":"Only titles naming a grading company"},{"value":"raw","label":"Only titles naming no grading company"}],"default":"any"},{"name":"currency","type":"string","required":false,"description":"Also give every price converted to this currency with 130point's own daily exchange rates (price stays in the listing's own currency).","on_invalid":"reject","example":"USD"},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-200). 130point returns at most 200 per search.","on_invalid":"reject","default":100,"minimum":1,"maximum":200},{"name":"page","type":"integer","required":false,"description":"Page through the (at most 200) results of the search.","on_invalid":"reject","default":1,"minimum":1,"maximum":200}],"returns":"query, filters{}, results[]{id, item_id, marketplace (ebay|fanatics|goldin|heritage|pristine|myslabs|cardhobby), marketplace_label, source_label (legacy label such as pwcc, else null), title, sold_price (the price paid; for a Best Offer the ACCEPTED offer), currency, sale_type (auction|fixed_price|best_offer_accepted), best_offer_accepted, list_price (the asking price a Best Offer was accepted against), list_price_currency, best_offer_discount_pct, bids, sold_at (UTC), url (affiliate parameters removed), ebay_site, bid_history_url, image, grading{company, grade, source: title}, price_converted, list_price_converted, converted_currency}, count, total_results, page, limit, has_more, stats{<currency>: {count, min, max, median, mean}}, marketplaces{<marketplace>: count}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":5},"example_params":{"query":"charizard base set psa 9","limit":20}},{"name":"live_search","description":"Live auctions matching a keyword on eBay, Fanatics Collect, Goldin, Heritage Auctions, Pristine Auction and MySlabs: title, current price and currency, bids, end time, image and item link, grading read from the title. Sort by ending soonest or highest price; filter by marketplace and item location; optional conversion to one currency.","required_params":["query"],"optional_params":["marketplace","item_location","sort","grader","grade","graded","currency","limit","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search, as typed into 130point (at least 4 characters): player or character, year, set, card number, grader and grade, e.g. '1986 fleer jordan psa 8'.","on_invalid":"reject","example":"charizard base set psa 9","aliases":["q","keyword"]},{"name":"marketplace","type":"array","required":false,"description":"One or more marketplaces. Omit for all six.","on_invalid":"reject","allowed_values":[{"value":"ebay","label":"eBay"},{"value":"fanatics","label":"Fanatics Collect (formerly PWCC)"},{"value":"goldin","label":"Goldin"},{"value":"heritage","label":"Heritage Auctions"},{"value":"pristine","label":"Pristine Auction"},{"value":"myslabs","label":"MySlabs"}],"example":"ebay,goldin,fanatics","aliases":["marketplaces","source"]},{"name":"item_location","type":"enum","required":false,"description":"Where the eBay item was located (130point's item-location filter). Omit for worldwide.","on_invalid":"reject","allowed_values":[{"value":"CA","label":"Canada"},{"value":"GB","label":"United Kingdom"},{"value":"AU","label":"Australia"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"JP","label":"Japan"},{"value":"CN","label":"China"}]},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"Ending soonest"},{"value":"price_desc","label":"Highest current price"}],"default":"ending_soonest"},{"name":"grader","type":"string","required":false,"description":"Grading company appended to the query the way 130point's own card filters do (PSA, BGS, CGC, SGC, TAG, ...).","on_invalid":"reject","example":"PSA"},{"name":"grade","type":"string","required":false,"description":"Grade appended to the query (e.g. 10, 9.5).","on_invalid":"reject","example":"10"},{"name":"graded","type":"enum","required":false,"description":"Keep graded or raw cards, judged from the title (applied to the returned rows).","on_invalid":"reject","allowed_values":[{"value":"any","label":"Graded and raw"},{"value":"graded","label":"Only titles naming a grading company"},{"value":"raw","label":"Only titles naming no grading company"}],"default":"any"},{"name":"currency","type":"string","required":false,"description":"Also give every price converted to this currency with 130point's own daily exchange rates (price stays in the listing's own currency).","on_invalid":"reject","example":"USD"},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-200). 130point returns at most 200 per search.","on_invalid":"reject","default":100,"minimum":1,"maximum":200},{"name":"page","type":"integer","required":false,"description":"Page through the (at most 200) results of the search.","on_invalid":"reject","default":1,"minimum":1,"maximum":200}],"returns":"query, filters{}, results[]{id, item_id, marketplace, marketplace_label, title, current_price, currency, listing_type, bids, ends_at (UTC), url, ebay_site, image, grading{company, grade, source}, price_converted, converted_currency}, count, total_results, page, limit, has_more, marketplaces{<marketplace>: count}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard psa 10","limit":20}}]},{"name":"1688","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"1688.com API scraper - live wholesale search and full product detail for 1688.com, Alibaba's China-domestic B2B marketplace. Every result carries the correct unit price, minimum order quantity, the quantity price ladder, supplier company and city; product detail adds per-variant price, stock and kg weight. No account, no browser.","version":"0.1.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/1688/v1","spec_available":true,"actions":[{"name":"search","description":"Search 1688 by keyword and get wholesale offers back. Chinese returns the richest results; English works. Every row carries the offer id and url, the title, the image gallery, the unit price in CNY with its unit, the seller's company name and years on 1688, BOTH repeat-purchase rates (the offer's own and the shop's - the single most useful trust signal on 1688), the product attribute pairs the seller published, the service tags, the category ids the offer sits under, and whether the row is a paid placement. 1688 fills this keyword feed largely with its own promoted listings, so for most keywords `is_ad` is true on every row - that is what 1688 marks, not a default; `category/offers` is the unpromoted surface. Two honest limits, both measured rather than assumed. This surface serves ONE shortlist of about 20 offers per keyword and does not paginate: `has_next` is always false, and calling it repeatedly returns a rotating selection that saturates near 38 distinct offers. And it carries no MOQ and no price ladder - `product/detail` has both. For depth, take `category_ids` off a row and page `category/offers`, which does paginate for real.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search 1688 for. Chinese returns by far the richest results (1688 is a China-domestic wholesale market); an English or pinyin term also matches. Returns wholesale offers with the correct unit price, minimum order quantity, quantity price ladder, supplier company and location.","on_invalid":"reject","example":"蓝牙耳机","aliases":["q","keyword","keywords","search"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many datacentre exits to try before giving up (1688 runs a per-exit request budget on search; a fresh exit clears it). Raise it only if you see transient block errors.","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"items[]{id, title, url, image, images[], video, price (number, CNY), price_display, currency, unit, sold_display, attributes[]{name, value}, service_tags[], offer_repurchase_rate, shop_repurchase_rate, seller{company, login_id, member_id, years_on_1688}, category_ids[], is_ad}, count, query, query_echo, has_next","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"蓝牙耳机"}},{"name":"category/offers","description":"Browse a 1688 category and page through it properly. This is the deep surface: consecutive pages were measured to share NO offer ids at all, 30 rows each, so you can walk a category rather than skim it. Every row carries the offer id and url, the title and image, the price in CNY, the MINIMUM ORDER QUANTITY, when the offer was listed, the supplier's fulfilment promises (collection-rate style guarantees) and any cross-border certifications on the listing. Get a category id from `categories`, or take `category_ids` off any `search` row to turn a keyword into a browsable category. Page size is fixed at 30 by 1688.","required_params":["category_id"],"optional_params":["page","max_rotations"],"params":[{"name":"category_id","type":"string","required":true,"description":"A 1688 category id. Get one from `categories`, or from any `search` row: each returns `category_ids` (broad to leaf) for the offer it describes.","on_invalid":"reject","example":"1031910","aliases":["category","categoryId","cat_id"]},{"name":"page","type":"integer","required":false,"description":"1-based page. This surface pages for real: consecutive pages were measured to share no offer ids at all, 30 rows each. Page size is fixed at 30 by the source.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200,"aliases":["pageNo","page_number"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many datacentre exits to try before giving up (1688 runs a per-exit request budget on search; a fresh exit clears it). Raise it only if you see transient block errors.","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"items[]{id, title, url, image, price, price_display, currency, moq, listed_on, fulfilment[], certifications[], sales}, count, category_id, page, has_next","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"1031910"}},{"name":"supplier/search","description":"Find VETTED FACTORIES that make something, rather than offers that sell it. This is 1688's own manufacturer shortlist and it answers the question a sourcing buyer actually has before contacting anyone: is this a real factory and is it any good. Each row carries the company name and location, years on 1688, HOW MANY WORKERS and the floor area in square metres, what it manufactures, its gold-manufacturer medal and level, its REPEAT-BUYER RATE, on-time and 30-day reply rates, whether a third party (SGS and similar) has audited it, and offer ids you can pass straight to `product/detail`. 🔴 Read this before you build on it: 1688 publishes a CURATED shortlist per keyword, not an index. Measured over 12 keywords, 8 returned factories and 4 returned none, with every call succeeding. An empty list is a real answer meaning 1688 has no vetted factory for that keyword; it is not an error and retrying will not change it. Expect a handful of rows, not a page.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search 1688 for. Chinese returns by far the richest results (1688 is a China-domestic wholesale market); an English or pinyin term also matches. Returns wholesale offers with the correct unit price, minimum order quantity, quantity price ladder, supplier company and location.","on_invalid":"reject","example":"蓝牙耳机","aliases":["q","keyword","keywords","search"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many datacentre exits to try before giving up (1688 runs a per-exit request budget on search; a fresh exit clears it). Raise it only if you see transient block errors.","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"items[]{name, member_id, url, location, years_on_1688, workers, floor_area_sqm, makes[], medal, medal_level, repeat_buyer_rate, on_time_rate, reply_rate_30d, third_party_audit, is_super_factory, offer_ids[]}, count, query, note","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"蓝牙耳机"}},{"name":"categories","description":"1688's category tree, TRANSLATED. 54 top-level categories over three levels, and 1688 translates the names itself, so a caller who does not read Chinese can still pick a category: ask for English, Russian, Spanish, Portuguese, French, German, Japanese or Korean and every node also carries its original Chinese name. Use the ids with `category/offers`. Ask for depth 1 for the 54 top categories, 2 for the useful middle (the default), 3 for the full tree.","required_params":[],"optional_params":["language","depth","max_rotations"],"params":[{"name":"language","type":"enum","required":false,"description":"Language for the category names. 1688 translates the tree itself, so a Russian or English caller does not have to read Chinese to pick a category. The original Chinese name is returned alongside as `name_zh` either way.","on_invalid":"reject","allowed_values":[{"value":"zh","label":"Chinese, as 1688 publishes it"},{"value":"en","label":"English"},{"value":"ru","label":"Russian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"}],"default":"en","example":"ru","aliases":["lang"]},{"name":"depth","type":"integer","required":false,"description":"How many levels of the category tree to return. The full three levels are about 2.4 MB; two levels is the useful default and one level is the 54 top categories.","on_invalid":"reject","default":2,"example":2,"minimum":1,"maximum":3},{"name":"max_rotations","type":"integer","required":false,"description":"How many datacentre exits to try before giving up (1688 runs a per-exit request budget on search; a fresh exit clears it). Raise it only if you see transient block errors.","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"items[]{id, name, name_zh, level, is_leaf, children[] | child_count}, count, language, depth","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"language":"ru","depth":1}},{"name":"product/detail","description":"Full detail for one 1688 offer, merged from the offer page and 1688's variant model in two calls. Returns the title, image gallery, the unit price in CNY, the price type (a shared quantity ladder vs per-variant pricing) and the full price ladder with the minimum quantity of each tier, the MOQ with its unit, total orderable stock, the mixed-batch terms sourcing buyers need, units sold, the full specification table (material, brand, model, ...), the supplier company with its member and login ids and storefront url, and EVERY sellable variant with its own price, stock (canBookCount, present on 100% of variants) and shipping weight in kg where the supplier published it (absent on many, returned as null - never inferred). Colour / size / spec axes are returned alongside the variants. A dead or invented offer id returns NOT_FOUND.","required_params":["offer_id"],"optional_params":["max_rotations"],"params":[{"name":"offer_id","type":"string","required":true,"description":"A 1688 offer id (the digits in `m.1688.com/offer/<id>.html`) or a full offer url. Every `search` row returns the id as `id`.","on_invalid":"reject","example":"864971848115","aliases":["id","offerId","product_id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many datacentre exits to try before giving up (1688 runs a per-exit request budget on search; a fresh exit clears it). Raise it only if you see transient block errors.","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"id, title, url, images[], price (number, CNY), price_display, currency, unit, price_type (rangePrice=a shared quantity ladder / skuPrice=priced per variant), price_tiers[]{min_qty, max_qty, price, price_display}, moq{quantity, unit}, stock, mix{supported, min_qty, min_amount}, sold_count, category{top_id, post_id}, attributes[]{name, value}, seller{member_id, user_id, login_id, name, url}, in_stock, variants{axes[]{name, values[]}, skus[]{sku_id, spec, price, discount_price, stock, sold_count, weight_kg}, count, price_range, price_type, ship_from_code}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"offer_id":"864971848115"}},{"name":"product/reviews","description":"Buyer reviews for one 1688 offer: the average star rating (out of 5), the positive-feedback percentage, the total review count, and a page of individual reviews with their text, the quantity bought, the variant, buyer photos and the date. 1688 masks buyer nicknames itself. Some offers have no reviews yet - that returns an empty list with a zero count, not an error.","required_params":["offer_id"],"optional_params":["max_rotations"],"params":[{"name":"offer_id","type":"string","required":true,"description":"A 1688 offer id (the digits in `m.1688.com/offer/<id>.html`) or a full offer url. Every `search` row returns the id as `id`.","on_invalid":"reject","example":"864971848115","aliases":["id","offerId","product_id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many datacentre exits to try before giving up (1688 runs a per-exit request budget on search; a fresh exit clears it). Raise it only if you see transient block errors.","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"rating (number, out of 5), rating_scale, good_percent (number), good_percent_display, review_count (number - a lower bound where 1688 prints '100+'), review_count_display, reviews[]{content, buyer, quantity, spec, images[], date, plus_user}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"offer_id":"864971848115"}}]},{"name":"1stdibs","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"1stDibs — luxury antique, vintage & design marketplace","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/1stdibs/v1","spec_available":true,"actions":[{"name":"search","description":"Search 1stDibs — antique and vintage furniture, lighting, fine art, fine jewellery, watches and fashion from vetted trade dealers worldwide. You must give EITHER `query` (free text, the site's own search) OR `category` (a category path such as 'furniture/seating/lounge-chairs'); `vertical` is a shorthand for the latter. Every other parameter is an optional filter and each one is verified against the source's own echo of what it applied, so a value the site does not know fails loudly instead of quietly returning the whole category. Prices are the dealer's USD list price; a row whose seller withholds the figure comes back with `price: null` and `price_status: \"upon_request\"` — never a zero.","required_params":[],"optional_params":["query","category","vertical","style","period","material","origin","creator","location","color","price_min","price_max","on_sale","sort","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the whole marketplace, exactly as the site's own search box takes it (e.g. 'eames lounge chair', 'cartier watch', 'murano chandelier'). Either `query` or `category` is required — see the action description.","on_invalid":"reject","example":"eames lounge chair","aliases":["q","keywords","search","term","text"]},{"name":"category","type":"string","required":false,"description":"A 1stDibs category path, 1-4 levels, as it appears in the site's own URL: 'furniture', 'furniture/seating', 'furniture/seating/lounge-chairs', 'jewelry/rings', 'art/paintings', 'furniture/lighting/chandeliers-pendant-lights'. Call the `filters` action to read the child categories of any level with their live counts. Either `query` or `category` is required.","on_invalid":"reject","example":"furniture/seating/lounge-chairs","value_pattern":"[a-z0-9][a-z0-9\\-]{0,60}(/[a-z0-9][a-z0-9\\-]{0,60}){0,3}","aliases":["category_path","cat","path","browse","taxonomy"]},{"name":"vertical","type":"enum","required":false,"description":"Shorthand for the top-level category when you do not want to name a path. Ignored when `category` is given.","on_invalid":"reject","allowed_values":[{"value":"furniture","label":"Furniture, lighting, rugs, decorative objects and built-ins"},{"value":"art","label":"Paintings, prints, photography, sculpture and other art"},{"value":"jewelry","label":"Fine jewellery and watches"},{"value":"fashion","label":"Vintage and designer fashion, handbags and accessories"}],"example":"furniture","aliases":["department","top_category"]},{"name":"style","type":"string","required":false,"description":"Design-style filter, by the slug 1stDibs uses in its own URLs ('art-deco', 'mid-century-modern', 'abstract', 'louis-xvi'). The available styles differ per category — read them from the `filters` action. A style the category does not have is rejected rather than silently ignored.","on_invalid":"reject","example":"art-deco","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["styles"]},{"name":"period","type":"string","required":false,"description":"Period filter, by the site's own slug: '18th-century-and-earlier', '19th-century', '20th-century', '21st-century-and-contemporary', or a decade like '1920s' … '1990s'. Read the live list from `filters`.","on_invalid":"reject","example":"20th-century","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["era","periods","date"]},{"name":"material","type":"string","required":false,"description":"Material / medium filter, by the site's own slug ('mahogany', 'brass', 'oil-paint', 'canvas', '18k-gold'). Read the live list from `filters`; for art this facet is labelled 'Medium'.","on_invalid":"reject","example":"mahogany","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["materials","medium"]},{"name":"origin","type":"string","required":false,"description":"Place-of-origin filter — where the piece was MADE — by the site's own slug ('austrian', 'italian', 'french', 'danish'). This is not the same thing as `location`, which is where the dealer ships it from.","on_invalid":"reject","example":"austrian","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["place_of_origin","made_in"]},{"name":"creator","type":"string","required":false,"description":"Restrict to one designer, maker, house or artist, by the site's own slug ('vahe-yeremyan', 'gio-ponti', 'hermes'). The `filters` action publishes the slugs with their counts for whatever scope you ask about.","on_invalid":"reject","example":"nestor-toro","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["designer","artist","maker","brand"]},{"name":"location","type":"string","required":false,"description":"Ships-from filter, by the site's own slug ('continental-us', 'europe', 'france-europe', 'england-united-kingdom', 'new-york-usa'). This is the dealer's location, not the place of manufacture. Read the live list from `filters`.","on_invalid":"reject","example":"france-europe","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["ships_from","country","region"]},{"name":"color","type":"string","required":false,"description":"Dominant-colour filter, by the site's own slug ('blue', 'gray', 'brown', 'gold'). 1stDibs derives it from the photography, so it is the site's judgement, not the dealer's.","on_invalid":"reject","example":"blue","value_pattern":"[a-z]{3,20}","aliases":["colour"]},{"name":"price_min","type":"number","required":false,"description":"Lowest USD price to include. 1stDibs lists in USD, so this filter is applied in USD by the source itself.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"number","required":false,"description":"Highest USD price to include, in USD. Combine with `price_min` for a band; either one alone works as an open-ended bound.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"on_sale","type":"boolean","required":false,"description":"True returns only items the dealer has marked down (the site's 'Sale Items' facet). Measured: 1,800 of 18,969 lounge chairs.","on_invalid":"reject","default":false,"example":true,"aliases":["sale","sale_only","discounted"]},{"name":"sort","type":"enum","required":false,"description":"Row order, using 1stDibs' own sort options. 'price-high' and 'price-low' rank by the USD list price.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"1stDibs' own default ranking"},{"value":"newest","label":"Most recently listed first"},{"value":"price-high","label":"Highest price first"},{"value":"price-low","label":"Lowest price first"},{"value":"popular","label":"Most viewed / most popular first"}],"default":"recommended","example":"price-high","aliases":["order","sort_by","order_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page. 1stDibs serves a window that ends at offset 6,000: the last reachable page is 6000/max_results + 1. Past it the source itself answers `page_exists: false` with no rows — narrow the query to reach deeper stock.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":6001},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-200. The source accepts more; 200 keeps one call under ~2 MB and ~2 s.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":200,"aliases":["first","limit","per_page","count","page_size","size"]}],"returns":"{query, category, total_available, page, page_size, page_exists, last_reachable_page, has_more, sort, page_kind, applied_filters[], page_title, results[]} — each result has item_id, url, title, vertical, category_code, category_path, category_url, price, currency, price_status, price_is_upon_request, price_type, discount_percent, price_quantity_note, converted_prices, is_sold, is_available, is_on_hold, is_new_listing, is_multi_sku, creation_date, period, style, place_of_origin, creators[], seller{seller_id, name, order_count, is_distinguished} (the last two are null on listing rows: the source publishes them on the item page and in `detail`/`seller`), ships_from_country, ships_from_city, dimensions_in{}, images[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"furniture/seating/lounge-chairs","max_results":10}},{"name":"detail","description":"One item — or up to ten in a single upstream call — in full: the dealer's description, the whole 1stDibs detail table (dimensions, materials and techniques, style, period, date of manufacture, place of origin, condition and condition notes, set size, reference numbers), the dealer's own shipping quote per destination region, the seller's profile numbers, the SKU, the six-month listing-view count, and the price cross-checked against the schema.org offer block the site publishes separately. When the two price witnesses disagree the disagreement is published in `price_mismatch`, not hidden.","required_params":["item"],"optional_params":[],"params":[{"name":"item","type":"string","required":true,"description":"A 1stDibs item id as the site prints it ('f_52078502' for furniture, 'a_18430382' art, 'j_30657952' jewelry, 'v_29932282' watches), or any 1stdibs.com item URL — the id is read out of the '/id-<id>/' segment. Up to 10 ids, comma-separated, are fetched in ONE upstream call.","on_invalid":"reject","example":"f_52078502","value_pattern":"[A-Za-z_0-9,\\s]+|https?://.*1stdibs\\.com/.*","aliases":["item_id","id","ids","item_ids","url","link","sku"]}],"returns":"{requested, found, missing[], items[]} — each item is the search row plus description, condition, condition_notes, materials[], styles[], periods[], origins[], date_of_manufacture, set_size, reference_numbers[], attributes{}, dimensions_display[], seller_location, breadcrumbs[], details[], shipping[], sku{}, listing_views_6m, schema_org_offer{} and price_mismatch.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"item":"f_52078502"}},{"name":"filters","description":"Every filter 1stDibs offers for a given scope, with its live option list and per-option result count — the only published place the filter SLUGS exist, so this is how you learn the values `search` takes. The facet set is category-dependent: art adds Orientation, Size, Art Subject and Frame Included, furniture adds Number in Set and Dimensions. It also returns the child categories of whatever level you ask about, so it doubles as the category browser. Takes the same `query`/`category` pair as `search`.","required_params":[],"optional_params":["query","category","vertical","style","period","material","origin","creator","location"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the whole marketplace, exactly as the site's own search box takes it (e.g. 'eames lounge chair', 'cartier watch', 'murano chandelier'). Either `query` or `category` is required — see the action description.","on_invalid":"reject","example":"eames lounge chair","aliases":["q","keywords","search","term","text"]},{"name":"category","type":"string","required":false,"description":"A 1stDibs category path, 1-4 levels, as it appears in the site's own URL: 'furniture', 'furniture/seating', 'furniture/seating/lounge-chairs', 'jewelry/rings', 'art/paintings', 'furniture/lighting/chandeliers-pendant-lights'. Call the `filters` action to read the child categories of any level with their live counts. Either `query` or `category` is required.","on_invalid":"reject","example":"furniture/seating/lounge-chairs","value_pattern":"[a-z0-9][a-z0-9\\-]{0,60}(/[a-z0-9][a-z0-9\\-]{0,60}){0,3}","aliases":["category_path","cat","path","browse","taxonomy"]},{"name":"vertical","type":"enum","required":false,"description":"Shorthand for the top-level category when you do not want to name a path. Ignored when `category` is given.","on_invalid":"reject","allowed_values":[{"value":"furniture","label":"Furniture, lighting, rugs, decorative objects and built-ins"},{"value":"art","label":"Paintings, prints, photography, sculpture and other art"},{"value":"jewelry","label":"Fine jewellery and watches"},{"value":"fashion","label":"Vintage and designer fashion, handbags and accessories"}],"example":"furniture","aliases":["department","top_category"]},{"name":"style","type":"string","required":false,"description":"Design-style filter, by the slug 1stDibs uses in its own URLs ('art-deco', 'mid-century-modern', 'abstract', 'louis-xvi'). The available styles differ per category — read them from the `filters` action. A style the category does not have is rejected rather than silently ignored.","on_invalid":"reject","example":"art-deco","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["styles"]},{"name":"period","type":"string","required":false,"description":"Period filter, by the site's own slug: '18th-century-and-earlier', '19th-century', '20th-century', '21st-century-and-contemporary', or a decade like '1920s' … '1990s'. Read the live list from `filters`.","on_invalid":"reject","example":"20th-century","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["era","periods","date"]},{"name":"material","type":"string","required":false,"description":"Material / medium filter, by the site's own slug ('mahogany', 'brass', 'oil-paint', 'canvas', '18k-gold'). Read the live list from `filters`; for art this facet is labelled 'Medium'.","on_invalid":"reject","example":"mahogany","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["materials","medium"]},{"name":"origin","type":"string","required":false,"description":"Place-of-origin filter — where the piece was MADE — by the site's own slug ('austrian', 'italian', 'french', 'danish'). This is not the same thing as `location`, which is where the dealer ships it from.","on_invalid":"reject","example":"austrian","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["place_of_origin","made_in"]},{"name":"creator","type":"string","required":false,"description":"Restrict to one designer, maker, house or artist, by the site's own slug ('vahe-yeremyan', 'gio-ponti', 'hermes'). The `filters` action publishes the slugs with their counts for whatever scope you ask about.","on_invalid":"reject","example":"nestor-toro","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["designer","artist","maker","brand"]},{"name":"location","type":"string","required":false,"description":"Ships-from filter, by the site's own slug ('continental-us', 'europe', 'france-europe', 'england-united-kingdom', 'new-york-usa'). This is the dealer's location, not the place of manufacture. Read the live list from `filters`.","on_invalid":"reject","example":"france-europe","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}","aliases":["ships_from","country","region"]}],"returns":"{query, category, total_available, filter_count, categories{}, filters[]} — each filter has name, label, value_count and values[] of {value, label, count, linkable, currency, hex_code}. `name` is exactly the `search` parameter it feeds where one exists.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"furniture/seating/lounge-chairs"}},{"name":"seller","description":"One dealer's storefront: their live inventory with the same row shape as `search`, plus the dealer's identity and the numbers 1stDibs publishes about them (company name, completed-order count, recognised-dealer flag, shipping country). Takes the storefront slug from a /dealers/<slug>/ URL.","required_params":["seller"],"optional_params":["sort","page","max_results"],"params":[{"name":"seller","type":"string","required":true,"description":"A dealer's storefront slug as it appears in a 1stdibs.com/dealers/<slug>/ URL (e.g. 'morentz'), or the full storefront URL. Returns that dealer's live inventory plus the dealer's own profile numbers.","on_invalid":"reject","example":"morentz","value_pattern":"[a-z0-9][a-z0-9\\-]{0,80}|https?://.*1stdibs\\.com/.*","aliases":["dealer","shop","store","storefront","seller_slug"]},{"name":"sort","type":"enum","required":false,"description":"Row order, using 1stDibs' own sort options. 'price-high' and 'price-low' rank by the USD list price.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"1stDibs' own default ranking"},{"value":"newest","label":"Most recently listed first"},{"value":"price-high","label":"Highest price first"},{"value":"price-low","label":"Lowest price first"},{"value":"popular","label":"Most viewed / most popular first"}],"default":"recommended","example":"price-high","aliases":["order","sort_by","order_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page. 1stDibs serves a window that ends at offset 6,000: the last reachable page is 6000/max_results + 1. Past it the source itself answers `page_exists: false` with no rows — narrow the query to reach deeper stock.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":6001},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-200. The source accepts more; 200 keeps one call under ~2 MB and ~2 s.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":200,"aliases":["first","limit","per_page","count","page_size","size"]}],"returns":"{seller_slug, seller{seller_id, name, order_count, is_distinguished, ships_from_country}, total_available, has_live_inventory, page, page_size, page_exists, has_more, results[]} — rows identical to `search`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller":"morentz","max_results":10}}]},{"name":"2dehands","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"2dehands / 2ememain Belgian classifieds","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/2dehands/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Belgian public classifieds; the first two pages are qualified.","required_params":["query"],"optional_params":["site","offset","page","max_results"],"params":[{"name":"query","type":"string","required":true,"description":"Source keyword query, not a seller or GTIN lookup.","on_invalid":"reject","example":"iphone","aliases":["q"]},{"name":"site","type":"enum","required":false,"description":"Belgian language surface; Dutch by default.","on_invalid":"reject","allowed_values":[{"value":"be_nl","label":"2dehands — Dutch"},{"value":"be_fr","label":"2ememain — French"}],"default":"be_nl","example":"be_nl"},{"name":"offset","type":"integer","required":false,"description":"First or second page: exactly 0 or 30.","on_invalid":"reject","allowed_values":[{"value":0,"label":"0"},{"value":30,"label":"30"}],"default":0,"example":30},{"name":"page","type":"integer","required":false,"description":"One-based page 1 or 2; alternative to offset. Conflicting values are rejected.","on_invalid":"reject","example":2,"minimum":1,"maximum":2},{"name":"max_results","type":"integer","required":false,"description":"Limit returned rows, up to the 30 source rows; does not change upstream pagination.","on_invalid":"reject","example":3,"minimum":1,"maximum":30}],"returns":"listings with resolvable item_id, title, EUR price and source price_type, seller, location, images, total and bounded pagination.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone","site":"be_nl"}},{"name":"listing","description":"Read meaningful detail by item_id from search or its canonical public URL. Supply item_id or url.","required_params":[],"optional_params":["item_id","url","site"],"params":[{"name":"item_id","type":"string","required":false,"description":"Live search item_id; supply this or url.","on_invalid":"reject","example":"m2448719601","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Canonical Belgian /v/ listing URL or relative path; supply this or item_id.","on_invalid":"reject","aliases":["vip_url"]},{"name":"site","type":"enum","required":false,"description":"Belgian language surface; Dutch by default.","on_invalid":"reject","allowed_values":[{"value":"be_nl","label":"2dehands — Dutch"},{"value":"be_fr","label":"2ememain — French"}],"default":"be_nl","example":"be_nl"}],"returns":"listing with verified identity, full published description, EUR price/type, gallery, category, public seller/profile, location, posting statistics and optional/null GTIN.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"m2448719601"}}]},{"name":"2gis","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"2GIS API — business search, business card, reviews, categories and cities from 2GIS (2gis.ru, 2gis.kz, 2gis.ae …) across Russia, Kazakhstan, Central Asia, the Caucasus and the Gulf: name, rubrics, address, coordinates, phones, emails, websites and social links as published, opening hours, rating, review count and paginated customer reviews","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/2gis/v1","spec_available":true,"actions":[{"name":"search","description":"Search 2GIS businesses by text and/or rubric in a city, or around a point. Up to 50 rows per page with phones, emails, websites, social links, hours, rating and review count; filters for photos, website and open-at time; sort by relevance, rating, name or distance. Either query or rubric_id is required.","required_params":[],"optional_params":["query","rubric_id","city","ll","radius","sort","has_photos","has_website","open_at","page","page_size","locale"],"params":[{"name":"query","type":"string","required":false,"description":"What to look for: a business name, brand or category in any language 2GIS indexes ('кофейня', 'стоматология', 'Starbucks', 'coffee'). Either query or rubric_id is required.","on_invalid":"reject","example":"кофейня","aliases":["q","text"]},{"name":"rubric_id","type":"string","required":false,"description":"Only businesses in this 2GIS rubric (category) id — from the `rubrics` action or a row's rubrics[].id (162 = coffee shops in Russia). Works with or without query.","on_invalid":"reject","example":"162"},{"name":"city","type":"string","required":false,"description":"2GIS region: its code (moscow, spb, novosibirsk, almaty, astana, tashkent, dubai, riyadh …), its numeric region_id, or its Russian name ('Москва'). The `cities` action lists all 207. Default moscow when neither city nor ll is given (meta.region_defaulted=true).","on_invalid":"reject","example":"moscow","aliases":["region"]},{"name":"ll","type":"string","required":false,"description":"Search around a point, 'lon,lat' (longitude FIRST). With radius it limits results to that circle; with sort=distance it orders nearest first.","on_invalid":"reject","example":"37.6173,55.7558","aliases":["point"]},{"name":"radius","type":"integer","required":false,"description":"Radius in metres around ll (1-40000). Requires ll.","on_invalid":"reject","example":1000,"minimum":1,"maximum":40000},{"name":"sort","type":"enum","required":false,"description":"Result order. distance needs ll.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"2GIS default order"},{"value":"rating","label":"Highest rated first"},{"value":"name","label":"Alphabetical"},{"value":"distance","label":"Nearest to ll first (needs ll)"}],"default":"relevance","example":"rating"},{"name":"has_photos","type":"boolean","required":false,"description":"Only businesses with photos (кофе Moscow: 18,426 → 9,660).","on_invalid":"reject","example":true},{"name":"has_website","type":"boolean","required":false,"description":"Only businesses with a website (кофе Moscow: 18,426 → 5,207).","on_invalid":"reject","example":true,"aliases":["has_site"]},{"name":"open_at","type":"string","required":false,"description":"Only businesses open at this weekday and local time, '<day>,<HH:MM>' with day mon..sun (кофе Moscow mon,23:30: 18,426 → 775).","on_invalid":"reject","example":"fri,23:30"},{"name":"page","type":"integer","required":false,"description":"Result page. meta.total / meta.total_pages say how far it goes; past the last page the answer is empty with meta.page_out_of_range=true.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-50 (2GIS's own site shows 12).","on_invalid":"reject","default":12,"example":12,"minimum":1,"maximum":50,"aliases":["limit"]},{"name":"locale","type":"string","required":false,"description":"Language of names and rubric labels, e.g. ru_RU, en_AE, ar_AE, ru_KZ, kk_KZ, uz_UZ. Default: the region's own locale.","on_invalid":"reject","example":"en_AE"}],"returns":"rows[]{org_id, name, name_primary, name_extension, brand_id, brand_name, brand_branch_count, address, full_address, address_comment, street, house, postcode, country, region, city, district, latitude, longitude, rubrics[], phones[]{number, display, comment}, emails[], websites[], social_links[]{type, url, handle}, other_contacts[], hours{mon..sun: ['HH:MM-HH:MM']}, is_24x7, hours_comment, rating, review_count, rating_count, brand_rating, brand_review_count, photo_count, main_photo_url, is_advertiser, updated_at, url} + meta{total, page, total_pages, has_more, region}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"кофейня","city":"moscow"}},{"name":"detail","description":"Full 2GIS business card by org_id (or firm url): everything a search row has plus the attribute list (average bill, cuisine, payment, amenities …), description, nearest metro stations and purpose.","required_params":[],"optional_params":["org_id","url","locale"],"params":[{"name":"org_id","type":"string","required":false,"description":"2GIS branch id — a search row's org_id, the number in 2gis.ru/<city>/firm/<id>.","on_invalid":"reject","example":"70000001113359188","aliases":["id","branch_id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a 2GIS business address (…/firm/<id>).","on_invalid":"reject","example":"https://2gis.ru/moscow/firm/70000001113359188"},{"name":"locale","type":"string","required":false,"description":"Language of names and rubric labels, e.g. ru_RU, en_AE, ar_AE, ru_KZ, kk_KZ, uz_UZ. Default: the region's own locale.","on_invalid":"reject","example":"en_AE"}],"returns":"org{… search row fields …, attributes[]{group, name, tag}, description, nearest_metro[]{station_id, distance_m}, purpose}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"org_id":"70000001113359188"}},{"name":"reviews","description":"Public customer reviews of one 2GIS business, newest first, up to 50 per page with cursor paging: star rating, text, dates, author name and review count, likes, photos and the business's reply.","required_params":["org_id"],"optional_params":["limit","cursor","sort"],"params":[{"name":"org_id","type":"string","required":true,"description":"2GIS branch id (search row org_id).","on_invalid":"reject","example":"70000001113359188","aliases":["id","branch_id"]},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-50.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"meta.next_cursor from the previous page; empty for the first page.","on_invalid":"reject","example":""},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (date written)"},{"value":"edited","label":"Most recently edited first"}],"default":"newest","example":"newest"}],"returns":"reviews[]{review_id, rating, text, date_created, date_edited, author_name, author_id, author_reviews_count, author_photo, likes_count, comments_count, is_verified, provider, photos[], business_reply, business_reply_date, org_id} + meta{branch_rating, review_count, next_cursor, has_more}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"org_id":"70000001113359188","limit":20}},{"name":"rubrics","description":"2GIS rubric (category) tree for a region: the 28-or-so top groups, or the rubrics under one group (parent_id), with how many branches and organisations each holds there.","required_params":[],"optional_params":["city","parent_id","locale"],"params":[{"name":"city","type":"string","required":false,"description":"Region code, id or Russian name (default moscow).","on_invalid":"reject","example":"moscow","aliases":["region"]},{"name":"parent_id","type":"string","required":false,"description":"A top-group rubric_id to list its rubrics; empty = top groups.","on_invalid":"reject","example":"5419"},{"name":"locale","type":"string","required":false,"description":"Language of names and rubric labels, e.g. ru_RU, en_AE, ar_AE, ru_KZ, kk_KZ, uz_UZ. Default: the region's own locale.","on_invalid":"reject","example":"en_AE"}],"returns":"rubrics[]{rubric_id, name, alias, type, parent_id, branch_count, org_count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"almaty"}},{"name":"cities","description":"Every region 2GIS covers (207 on 2026-11-03): region id, code, name, country, locale, time zone and centre point — the values `city` accepts.","required_params":[],"optional_params":["country","locale"],"params":[{"name":"country","type":"string","required":false,"description":"Only regions of this ISO country code (ru, kz, uz, kg, ae, sa …).","on_invalid":"reject","example":"kz"},{"name":"locale","type":"string","required":false,"description":"Language of region names: ru_RU (default) or en_AE, ar_AE …","on_invalid":"reject","example":"ru_RU"}],"returns":"cities[]{region_id, code, name, country_code, domain, locale, time_zone, latitude, longitude, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"kz"}}]},{"name":"2ndstreet","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"2nd STREET — Japan's largest second-hand chain (1.6M items, 971 shops) + US store","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/2ndstreet/v1","spec_available":true,"actions":[{"name":"search","description":"Search 2nd STREET. ONE ROW IS ONE PHYSICAL SECOND-HAND PIECE held by ONE NAMED SHOP — the chain buys outright and resells, so there is no seller, no variant and no stock count; the size IS the row and every Japanese row carries the `shop_id` that holds it. \n\nJAPAN: 60 rows a page, fixed (the source swallowed per_page/limit/count and served 60 when 120 was asked for), and the WHOLE result set is walkable — page 20,000 of the unfiltered catalogue still returned 60 real rows and the page after the last one returns an EMPTY grid, never a repeat. Prices are whole yen and TAX-INCLUDED: `税込` appears on every product page measured and `税抜` on none, and the grid price was checked against 12 product pages' own microdata (12/12 identical). Japanese text — size, condition, colour, material — is republished exactly as the source wrote it; nothing is translated.\n\nUNITED STATES: the storefront's search answers at most 1,000 results (it prints '1000 results found' for nike, jacket and even `*`) over 28 pages of 36, so a large query ends with `stop_reason: cap_reached`. Pass `collection` instead of `keyword` to walk a collection without that cap, up to 250 rows a page; that surface additionally publishes `tags` (which carry the US branch name), `images` and `compare_at_price_usd`, which the keyword surface does not print.","required_params":[],"optional_params":["market","keyword","category","brand","shop","prefecture","size","color","condition","flag","new_arrivals_only","discounted_only","store_transfer_only","price_min","price_max","sort","page","collection","per_page","available_only","us_price_min","us_price_max"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. `jp` is 2nd STREET Japan (www.2ndstreet.jp, 1,609,435 items across 971 shops, prices in whole yen, tax included) and is the default; `us` is the US web store (ec.2ndstreetusa.com, prices in USD with cents).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan — the chain itself"},{"value":"us","label":"United States web store"}],"default":"jp","example":"jp","aliases":["country","region"]},{"name":"keyword","type":"string","required":false,"description":"Free text over brand, item name and product code. Both scripts work and they are not the same query: measured ナイキ → 103,034 and NIKE → 103,096. Case is ignored (nike = NIKE, both 103,096). On the US store an unmatched word still returns a handful of fuzzy hits (zzzznotathing → 5), so an empty row set is rarer there than it looks.","on_invalid":"reject","example":"ナイキ","aliases":["q","query","search","kw"]},{"name":"category","type":"string","required":false,"description":"One 6-digit category id from the `categories` action — any level of the tree. Measured: 910001 メンズウェア 680,016 · 911008 トップス 117,394 · 810032 カーディガン 11,326. An unknown id returns 0 rows, not the catalogue. JAPAN ONLY.","on_invalid":"reject","example":"910001","value_pattern":"\\d{6}","aliases":["category_id"]},{"name":"brand","type":"array","required":false,"description":"One or more 6-digit brand ids from the `brands` action; repeat to OR them. Measured: 001106 (NIKE) → 101,310. 🔴 999999 is the chain's own その他ブランド bucket (119,435 items) and is NOT in the brand list. An empty or all-zero id is refused here because the source answers it with its entire catalogue. JAPAN ONLY.","on_invalid":"reject","example":"001106","aliases":["brands","brand_id"]},{"name":"shop","type":"array","required":false,"description":"One or more shop ids from the `stores` action — the branch physically holding the piece. Measured: 30251 → 2,296 on its own, and two shops together → 4,263. JAPAN ONLY.","on_invalid":"reject","example":"30251","aliases":["shops","shop_id"]},{"name":"prefecture","type":"array","required":false,"description":"One or more 2-digit prefecture codes (01 Hokkaido … 47 Okinawa) from `stores`. Measured: 13 (Tokyo) → 185,508, and 13+27 together → 327,816. JAPAN ONLY.","on_invalid":"reject","example":"13","aliases":["prefectures"]},{"name":"size","type":"array","required":false,"description":"One or more size ids from the `facets` action. Measured: id 1 (XXS) → 1,846, which is exactly the figure the source's own size list prints. JAPAN ONLY.","on_invalid":"reject","example":"5","aliases":["sizes","size_id"]},{"name":"color","type":"array","required":false,"description":"One or more of the shop's own 23 colour ids. Measured: 2 (ブラック) → 25,551. `facets` returns the id→Japanese-name list. JAPAN ONLY.","on_invalid":"reject","example":"2","aliases":["colors","color_id"]},{"name":"condition","type":"array","required":false,"description":"2nd STREET's own condition grades. Measured on the whole catalogue: A 7,819, B 82,621, C 11,225, D 3,131, NS 1,264 for keyword=ナイキ. The facet surface reports NS as grade `S`; both spellings are accepted. JAPAN ONLY.","on_invalid":"reject","allowed_values":[{"value":"A","label":"中古A — used, grade A"},{"value":"B","label":"中古B — used, grade B"},{"value":"C","label":"中古C — used, grade C"},{"value":"D","label":"中古D — used, grade D"},{"value":"NS","label":"新品・未使用品 — new / unused (the facet reports this grade as S)"}],"example":"A","aliases":["conditions","grade"]},{"name":"flag","type":"array","required":false,"description":"The chain's own extra switches. Only the three that were measured to BITE are offered: nflg 12,246 · dflg 19,243 · bflg 1,329,978 (of 1,609,435). Its form also prints aflg and rflg, which returned the whole catalogue unchanged, and eflg and sflg, which returned 0 on every query tried — all four are not published. JAPAN ONLY.","on_invalid":"reject","allowed_values":[{"value":"nflg","label":"新着入荷 — new arrivals (measured 12,246 of 1,609,435)"},{"value":"dflg","label":"すべての割引商品 — every discounted item (measured 19,243)"},{"value":"bflg","label":"店舗お取り寄せ可能 — can be transferred to another branch (measured 1,329,978)"}],"example":"dflg","aliases":["flags","other"]},{"name":"new_arrivals_only","type":"boolean","required":false,"description":"Shorthand for flag=nflg (新着入荷). JAPAN ONLY.","on_invalid":"reject","default":false,"aliases":["new_only"]},{"name":"discounted_only","type":"boolean","required":false,"description":"Shorthand for flag=dflg — every marked-down piece. JAPAN ONLY.","on_invalid":"reject","default":false,"aliases":["on_sale"]},{"name":"store_transfer_only","type":"boolean","required":false,"description":"Shorthand for flag=bflg — only pieces 2nd STREET will move to another branch for collection. This is the real shop-vs-online axis and it bites: 1,329,978 of 1,609,435 can be transferred, 279,457 cannot. JAPAN ONLY.","on_invalid":"reject","default":false,"aliases":["transferable_only"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in WHOLE YEN (JPY has no minor unit). Measured: ≥10,000 → 36,918 of 103,034. JAPAN ONLY — use us_price_min on the US store.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in whole yen. Measured: 0-3,000 → 614 of 103,034. JAPAN ONLY.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["max_price"]},{"name":"sort","type":"enum","required":false,"description":"Sort order. Omitted = 2nd STREET's own recommended order, which is REPRODUCIBLE: three identical calls returned the same 60 ids in the same order. The US store offers relevance and the two price orders only.","on_invalid":"reject","allowed_values":[{"value":"recommend","label":"2nd STREET's own recommended order (the default)"},{"value":"arrival","label":"Newest arrival first"},{"value":"cost-low","label":"Cheapest first"},{"value":"cost-high","label":"Dearest first"},{"value":"discount-high","label":"Biggest discount first"}],"default":"recommend","example":"cost-low","aliases":["sort_by","order_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Japan: 60 rows a page and no result ceiling — the last page of a 103,034-row query was 1,718 with exactly 14 rows, and the page after the last one is EMPTY rather than a repeat. US keyword search stops at page 28 (the 1,000-result cap); the US collection surface was walked to page 60 and refuses page 150 with HTTP 400.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50000,"aliases":["p"]},{"name":"collection","type":"string","required":false,"description":"A US collection handle from the `categories` action (e.g. `new-arrivals`, `nike-1`). Walks that collection instead of the keyword search, which lifts the 1,000-result cap and adds `tags`, `images` and `compare_at_price_usd` to each row. UNITED STATES ONLY.","on_invalid":"reject","example":"new-arrivals","aliases":["collection_handle"]},{"name":"per_page","type":"integer","required":false,"description":"Rows per page on the US collection surface, 1-250. Ignored elsewhere: the Japanese grid is a fixed 60 (120 was asked for and 60 came back) and the US keyword grid is a fixed 36. UNITED STATES + collection ONLY.","on_invalid":"reject","default":60,"example":250,"minimum":1,"maximum":250,"aliases":["limit","page_size"]},{"name":"available_only","type":"boolean","required":false,"description":"Only pieces the US store will ship right now (its own availability filter). UNITED STATES ONLY.","on_invalid":"reject","default":false,"aliases":["in_stock_only"]},{"name":"us_price_min","type":"number","required":false,"description":"Minimum price in US DOLLARS (decimal, e.g. 49.90) for the US store's own price filter. UNITED STATES ONLY.","on_invalid":"reject","example":50,"minimum":0},{"name":"us_price_max","type":"number","required":false,"description":"Maximum price in US dollars. UNITED STATES ONLY.","on_invalid":"reject","example":300,"minimum":0}],"returns":"{market, page, per_page, returned, total, pages_estimate, result_cap, filters_applied, heading, stop_reason, items:[{market, goods_id, shop_id, url, title, title_parts, brand, size, condition, condition_grade, price_jpy, price_display, price_tax_basis, currency, discount_pct, is_new_arrival, labels, image_url}]}  — US rows carry product_id, handle, sku, price_usd, price_minor, compare_at_price_usd, available, product_type, tags, shop_tag instead of the yen and shop fields.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"keyword":"ナイキ"}},{"name":"product","description":"One piece in full. JAPAN publishes, and this returns separately: the printed tax-inclusive price, the pre-markdown price (通常価格) with the discount percentage the page prints, and the shipping charge — either the flat ¥770 (tax included, its own label) or the marker that the piece carries 個別送料, an individual delivery charge, in which case `shipping_jpy` is null rather than guessed. The condition comes back three ways with no translation invented: `condition` is the source's own text (中古B), `condition_grade` is the source's OWN filter code (B), and `condition_note` is the sentence the page prints about that grade. Attributes (colour, pattern, material, model number, size) are parsed out of the page's own 商品の詳細 table, which is category-shaped — a laptop prints OS/CPU/memory where a jacket prints 柄 and 素材・生地 — so the whole table is also returned verbatim as `specs`, plus the tailor's measurements in cm as `measurements_cm` (a figure printed as `/` means not measured and is omitted, not 0). \n\n🔴 THE TWO STOCK SURFACES ARE KEPT APART: `available_online` is whether the page offers a cart, `store_transfer` is whether it offers 店舗取り寄せ to another branch, and `shop` is the branch that physically holds it, with its address, opening hours, buy-back hours and parking. A SOLD piece does not go OutOfStock — its id starts serving the shop's landing page with HTTP 200, and that is returned as NOT_FOUND here rather than as a success carrying somebody else's merchandise.\n\nUNITED STATES: price in dollars and in cents (the store publishes the same number both ways — 24990 and \"249.90\" — and they are never mixed), availability, the branch name from the product's own tags, and the Size/Color/Material/Condition table the store writes into the description.","required_params":["goods_id"],"optional_params":["market"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. `jp` is 2nd STREET Japan (www.2ndstreet.jp, 1,609,435 items across 971 shops, prices in whole yen, tax included) and is the default; `us` is the US web store (ec.2ndstreetusa.com, prices in USD with cents).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan — the chain itself"},{"value":"us","label":"United States web store"}],"default":"jp","example":"jp","aliases":["country","region"]},{"name":"goods_id","type":"string","required":true,"description":"Japan: the 13-digit goods id, or the whole product URL (https://www.2ndstreet.jp/goods/detail/goodsId/2319227341949/shopsId/30251 → 2319227341949). The shop id in the URL is NOT needed — the page resolves from the goods id alone. United States: the Shopify handle, which on this store IS the same 13-digit id (e.g. 2341550599643). A non-numeric Japanese id is refused here, because the source answers one with HTTP 200 and its landing page.","on_invalid":"reject","example":"2319227341949","value_pattern":"\\d{6,20}|https?://.*|/goods/detail/.*|[A-Za-z0-9_\\-]{1,120}","aliases":["id","product_id","item_id","url","product_url","handle"]}],"returns":"{market, goods_id, url, title, title_parts, brand, brand_id, price_jpy, price_display, price_tax_basis, currency, original_price_jpy, discount_pct, shipping_jpy, shipping_kind, condition, condition_grade, condition_note, availability, available_online, store_transfer, size, color, material, pattern, model_number, specs, measurements_cm, category_id, category_path, breadcrumb, suggested_gender, favourites, images, shop:{shop_id, name, url, address, opening_hours, buyback_hours, parking_spaces}, price_witnesses, price_witnesses_agree}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"goods_id":"2319227341949"}},{"name":"categories","description":"The shop's own category tree with its own item counts. JAPAN: 16 top-level departments over three levels, every node carrying the count the chain publishes for it — メンズウェア 680,072 · シューズ 256,471 · レディースウェア 199,572 · 服飾雑貨他 178,470 · バッグ 139,302 · 家電・ビジュアル・オーディオ 40,736 · スポーツ 32,666 · ホビー 27,098 · キッチン用品 20,184 · 楽器 6,828 · カメラ 6,413 · インテリア小物 6,730 · キッズ 6,244 · パソコン 5,975 · DIY用品 1,676 · 家具 1,071, and a catalogue total of 1,609,533 (2026-10-08). Names are Japanese because that is what the source publishes; no translation is invented. The same call also returns the 47 prefectures, the 11 sales areas and the 23-colour palette the search filters use.\n\nUNITED STATES: the store's collections with their handles — pass one back as `search(collection=…)`. 🔴 Their own `products_count` is republished as the source prints it and is NOT a measurement: the biggest collection claims 2,357,882 products on a store whose search surface caps at 1,000 and whose whole product list was walked to 15,000, so the figure is a Shopify smart-collection count, not a catalogue size.","required_params":[],"optional_params":["market","category","depth","page"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. `jp` is 2nd STREET Japan (www.2ndstreet.jp, 1,609,435 items across 971 shops, prices in whole yen, tax included) and is the default; `us` is the US web store (ec.2ndstreetusa.com, prices in USD with cents).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan — the chain itself"},{"value":"us","label":"United States web store"}],"default":"jp","example":"jp","aliases":["country","region"]},{"name":"category","type":"string","required":false,"description":"Return only this node and its children instead of the whole tree. JAPAN ONLY.","on_invalid":"reject","example":"910001","value_pattern":"\\d{6}","aliases":["category_id","parent"]},{"name":"depth","type":"integer","required":false,"description":"How many levels of children to include: 1 = departments only, 3 = the whole tree (the source has three). JAPAN ONLY.","on_invalid":"reject","default":3,"example":2,"minimum":1,"maximum":3},{"name":"page","type":"integer","required":false,"description":"1-based page of 250 collections. UNITED STATES ONLY.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":40,"aliases":["p"]}],"returns":"{market, total_goods, total_shops, new_goods_today, returned, categories:[{id, name, count, url, children:[…]}], prefectures:[{code, name, area_id}], areas:[{id, name}], colors:[{id, name}]}  — US: {market, returned, page, collections:[{id, handle, title, url, products_count, published_at, updated_at}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"jp"}},{"name":"brands","description":"2nd STREET Japan's whole brand dictionary — 14,980 brands, each with BOTH spellings the chain itself publishes (`brand` in Latin script, `brand_kana` in Japanese katakana; 14,980 of 14,980 rows carry both, measured) plus the id the `search(brand=…)` filter takes and the live item count. Biggest measured: NIKE/ナイキ 101,313 · THE NORTH FACE/ザノースフェイス 54,088 · LOUIS VUITTON/ルイヴィトン 35,509 · adidas/アディダス 26,169 · Levi's/リーバイス 24,333 · Supreme/シュプリーム 23,718. 4,180 brands currently show a count of 0 — they are in the dictionary with nothing in stock, which is an answer, so `min_count` is offered rather than silently dropping them.\n\nWith `keyword` this is also the chain's own brand look-up: it matches the katakana reading, so ナイキ returns NIKE, NIKE ACG and NIKE SB with their counts. 🔴 The id 999999 (その他ブランド, 119,435 items) is a real, usable filter value that this dictionary does not list. JAPAN ONLY — the US store publishes no brand index.","required_params":[],"optional_params":["market","keyword","min_count","limit","offset"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. `jp` is 2nd STREET Japan (www.2ndstreet.jp, 1,609,435 items across 971 shops, prices in whole yen, tax included) and is the default; `us` is the US web store (ec.2ndstreetusa.com, prices in USD with cents).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan — the chain itself"},{"value":"us","label":"United States web store"}],"default":"jp","example":"jp","aliases":["country","region"]},{"name":"keyword","type":"string","required":false,"description":"Look a brand up by its Japanese reading or its Latin name. Measured: ナイキ → NIKE 101,313, NIKE ACG 1,269, NIKE SB 454.","on_invalid":"reject","example":"ナイキ","aliases":["q","query","brand","search"]},{"name":"min_count","type":"integer","required":false,"description":"Drop brands with fewer than this many items in stock. 4,180 of 14,980 brands are currently at 0.","on_invalid":"reject","default":0,"example":1,"minimum":0,"aliases":["min_items"]},{"name":"limit","type":"integer","required":false,"description":"How many brands to return, 1-2000.","on_invalid":"reject","default":200,"example":200,"minimum":1,"maximum":2000,"aliases":["per_page","page_size"]},{"name":"offset","type":"integer","required":false,"description":"How many brands to skip, for walking the whole 14,980.","on_invalid":"reject","default":0,"example":0,"minimum":0,"aliases":["skip","start"]}],"returns":"{market, total_brands, returned, offset, limit, matched, brands:[{id, brand, brand_kana, count, url}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"keyword":"ナイキ"}},{"name":"facets","description":"What the chain's own search index says about a query BEFORE you page through it: the total, and the breakdown by brand, category, colour, condition grade and size, each with its own count. This is the same figure the result page prints (103,034 vs 103,036 on the grid, a live-index difference of 2) and it is the cheap way to size a query, measure a filter or build a facet UI without pulling 60-row pages. Takes exactly the same filters as `search`, so it also answers 'how much would this filter bite'. The colour buckets come back with the shop's own Japanese colour names attached, the condition buckets with the source's own 中古A/中古B/… labels, and the size buckets carry the label the index itself publishes (`XXS`, `L`, `28cm`); brand and category buckets are ids, resolvable with `brands` and `categories`. JAPAN ONLY.","required_params":[],"optional_params":["market","keyword","category","brand","shop","prefecture","size","color","condition","flag","price_min","price_max"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. `jp` is 2nd STREET Japan (www.2ndstreet.jp, 1,609,435 items across 971 shops, prices in whole yen, tax included) and is the default; `us` is the US web store (ec.2ndstreetusa.com, prices in USD with cents).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan — the chain itself"},{"value":"us","label":"United States web store"}],"default":"jp","example":"jp","aliases":["country","region"]},{"name":"keyword","type":"string","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"ナイキ","aliases":["q","query","search","kw"]},{"name":"category","type":"string","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"910001","value_pattern":"\\d{6}","aliases":["category_id"]},{"name":"brand","type":"array","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"001106","aliases":["brands","brand_id"]},{"name":"shop","type":"array","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"30251","aliases":["shops","shop_id"]},{"name":"prefecture","type":"array","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"13","aliases":["prefectures"]},{"name":"size","type":"array","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"5","aliases":["sizes","size_id"]},{"name":"color","type":"array","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"2","aliases":["colors","color_id"]},{"name":"condition","type":"array","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"A","aliases":["conditions","grade"]},{"name":"flag","type":"array","required":false,"description":"Same as `search`.","on_invalid":"reject","example":"dflg","aliases":["flags","other"]},{"name":"price_min","type":"integer","required":false,"description":"Same as `search`, whole yen.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Same as `search`, whole yen.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["max_price"]}],"returns":"{market, total, filters_applied, facets:{brands:[{id, count}], categories:[{id, count}], colors:[{id, name, count}], conditions:[{grade, label, count}], sizes:[{id, label, count}]}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"keyword":"ナイキ"}},{"name":"stores","description":"2nd STREET Japan's shop network. With no argument this returns the chain's own shop list — 985 entries with their ids and house names, against a headline figure of 971 shops that the chain publishes itself (the list carries a few non-trading placeholders, so both numbers are returned rather than one being quietly preferred) — together with the 47 prefectures, the 11 sales areas, the cities of each prefecture, and how many duty-free shops each prefecture has. With `prefecture` it returns that prefecture's shops only, from the chain's own per-prefecture endpoint: Tokyo (13) answers with 70 shops. Feed a `shop_id` straight back into `search(shop=…)` — it bites (30251 → 2,296 items) — or into `store` for that branch's full record. JAPAN ONLY: the US site's shop finder sits behind a JavaScript interstitial and publishes no catalogue.","required_params":[],"optional_params":["market","prefecture","name"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. `jp` is 2nd STREET Japan (www.2ndstreet.jp, 1,609,435 items across 971 shops, prices in whole yen, tax included) and is the default; `us` is the US web store (ec.2ndstreetusa.com, prices in USD with cents).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan — the chain itself"},{"value":"us","label":"United States web store"}],"default":"jp","example":"jp","aliases":["country","region"]},{"name":"prefecture","type":"string","required":false,"description":"A 2-digit prefecture code (01 Hokkaido … 13 Tokyo … 47 Okinawa). Omit for the whole network.","on_invalid":"reject","example":"13","value_pattern":"\\d{1,2}","aliases":["prefectures","pref"]},{"name":"name","type":"string","required":false,"description":"Keep only shops whose name contains this text (matched on the Japanese name the chain publishes).","on_invalid":"reject","example":"新宿","aliases":["shop_name","q"]}],"returns":"{market, total_shops_published, shops_listed, returned, prefecture, shops:[{shop_id, shop_name, house_name, url}], prefectures:[{code, name, area_id, tax_free_shops}], areas:[{id, name}], cities:{<prefecture>:[{id, name}]}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"prefecture":"13"}},{"name":"store","description":"One 2nd STREET branch in full, as its own page prints it: house name and shop name, shop type (トータルリユース, 買取専門店 …), whether it is a duty-free shop, its description, street address, telephone number, opening hours, buy-back reception hours, visiting buy-back hours where it offers them, parking spaces, the latitude and longitude from the map the page embeds, its area and prefecture, its photographs, and the two lists of goods it handles — what it SELLS and what it BUYS BACK, which are not the same list. Pair the `shop_id` with `search(shop=…)` to see what that branch has on sale right now. JAPAN ONLY.","required_params":["shop_id"],"optional_params":["market"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. `jp` is 2nd STREET Japan (www.2ndstreet.jp, 1,609,435 items across 971 shops, prices in whole yen, tax included) and is the default; `us` is the US web store (ec.2ndstreetusa.com, prices in USD with cents).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan — the chain itself"},{"value":"us","label":"United States web store"}],"default":"jp","example":"jp","aliases":["country","region"]},{"name":"shop_id","type":"string","required":true,"description":"The 5-digit shop id from `stores`, from any search row, or the whole shop URL (https://www.2ndstreet.jp/shop/details?shopsId=30251 → 30251).","on_invalid":"reject","example":"30251","value_pattern":"\\d{4,6}|https?://.*","aliases":["id","shop","url","shop_url"]}],"returns":"{market, shop_id, url, house_name, shop_name, shop_type, tax_free, description, address, phone, opening_hours, buyback_hours, visit_buyback_hours, parking_spaces, latitude, longitude, area, prefecture, buyback_queue_note, handles:{sells:[…], buys_back:[…]}, images, fields_raw}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"shop_id":"30251"}},{"name":"suggest","description":"The US store's own type-ahead: the products, the collections and the alternative search phrases it would offer a shopper mid-keystroke, each product already carrying its price, availability, image and the Size/Color/Material/Condition table the store writes into its description. Capped by the store at 10 results per kind (20 was asked for and 10 came back). UNITED STATES ONLY — the Japanese site has no suggest endpoint (its /searchapi/suggest answers 200 with an empty body); for Japan, `brands(keyword=…)` is the equivalent look-up and it matches the katakana reading.","required_params":["keyword"],"optional_params":["market","limit"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. `jp` is 2nd STREET Japan (www.2ndstreet.jp, 1,609,435 items across 971 shops, prices in whole yen, tax included) and is the default; `us` is the US web store (ec.2ndstreetusa.com, prices in USD with cents).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan — the chain itself"},{"value":"us","label":"United States web store"}],"default":"jp","example":"jp","aliases":["country","region"]},{"name":"keyword","type":"string","required":true,"description":"What the shopper has typed so far.","on_invalid":"reject","example":"nike","aliases":["q","query","term","prefix"]},{"name":"limit","type":"integer","required":false,"description":"How many of each kind to ask for, 1-10. The store refuses more.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":10,"aliases":["per_page","size"]}],"returns":"{market, keyword, limit, returned, products:[{product_id, handle, url, title, brand, product_type, price_usd, price_minor, available, image_url, attributes}], collections:[{id, handle, title, url}], queries:[{text, url}]}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"us","keyword":"nike"}}]},{"name":"999-md","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"999.md Moldova classifieds","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/999-md/v1","spec_available":true,"actions":[{"name":"search","description":"Search native Moldova classified listings; Romanian presentation, pages 1-2.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Published full-text search, 1-40 characters.","on_invalid":"reject","example":"iphone"},{"name":"page","type":"integer","required":false,"description":"Qualified native pagination pages 1-2; retain the same limit.","on_invalid":"reject","default":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"","on_invalid":"reject","default":10,"minimum":1,"maximum":20}],"returns":"query,page,limit,count,results[]{listing_id,url,title,price,currency,source_price,price_mode,down_payment,images,gtin},source_total,has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone","limit":3}},{"name":"listing_detail","description":"Read the requested primary native listing, description and public attributes.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Exact native numeric ID returned by search or canonical https://999.md/ro/<id> URL.","on_invalid":"reject","example":"88886722"}],"returns":"listing_id,url,title,price,currency,source_price,price_mode,down_payment,description,images,attributes,seller,gtin","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"88886722"}}]},{"name":"99acres","category":{"id":"real-estate","title":"Real Estate"},"title":"99acres — India property listings for sale, rent and PG, with lakh/crore prices in rupees, area by type, locality, poster and new-project units; then one listing in full: amenities, RERA, photos, specifications and the advertiser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/99acres/v1","spec_available":true,"actions":[{"name":"search","description":"Search 99acres listings by city, locality or free text, for sale, rent or PG, residential or commercial, with the filters the source applies itself (BHK, property type, price, area, poster, construction status, resale/new booking, furnishing, verified, posting age). 25 rows a page by default, up to 50. Each row says whether it is a featured placement, a builder's new-project unit or an ordinary listing. 🔴 Needs one of city_id, locality_id or query. No sort parameter is offered: none of the source's sort keys changed the order.","required_params":[],"optional_params":["city_id","locality_id","query","transaction","segment","property_type","bedrooms","price_min","price_max","area_min_sqft","area_max_sqft","posted_by","construction_status","sale_type","furnishing","verified","posted_since_days","page","limit"],"params":[{"name":"city_id","type":"integer","required":false,"description":"The source's numeric city id: 19 Pune, 12 Mumbai, 1 Delhi / NCR (measured). Any search echoes the resolved city in meta.resolved.cities, and `query` resolves a city or locality name for you. One of city_id, locality_id or query is required.","on_invalid":"reject","example":19,"minimum":1,"aliases":["city"]},{"name":"locality_id","type":"string","required":false,"description":"One or more locality ids, comma-separated (Baner, Pune = 1074). Every row carries its locality_id; meta.facets.LOCALITY_ID lists the city's localities with counts.","on_invalid":"reject","example":"1074","value_pattern":"\\d+(,\\d+)*"},{"name":"query","type":"string","required":false,"description":"Free text the source resolves itself to a city, locality or project ('mumbai', 'baner'). The resolution it applied is echoed in meta.resolved. Text the source cannot place is refused (INVALID_PARAM).","on_invalid":"reject","example":"baner","aliases":["q","keyword"]},{"name":"transaction","type":"enum","required":false,"description":"buy, rent or pg (paying guest / co-living). Rent and PG prices are monthly.","on_invalid":"reject","allowed_values":[{"value":"buy","label":"For sale (preference S)"},{"value":"rent","label":"For rent (preference R)"},{"value":"pg","label":"Paying guest / co-living (preference P)"}],"default":"buy","example":"buy"},{"name":"segment","type":"enum","required":false,"description":"residential or commercial.","on_invalid":"reject","allowed_values":[{"value":"residential","label":"Residential (res_com R)"},{"value":"commercial","label":"Commercial (res_com C)"}],"default":"residential","example":"residential"},{"name":"property_type","type":"string","required":false,"description":"The source's property-type id(s), comma-separated: 1 Residential Apartment, 2 Independent House/Villa, 3 Residential Land, 4 Builder Floor, 5 Farm House, 22 Serviced Apartment, 90 Studio Apartment (residential facet, 2026-10-14). Commercial ids differ — the `facets` block of any commercial search lists them with counts.","on_invalid":"reject","example":"1","value_pattern":"\\d+(,\\d+)*"},{"name":"bedrooms","type":"string","required":false,"description":"BHK count(s), comma-separated: 1-9 or 9+. '2,3' returns 2 BHK and 3 BHK.","on_invalid":"reject","example":"2,3","value_pattern":"([1-9]|9\\+)(,([1-9]|9\\+))*","aliases":["bhk"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in rupees (monthly rent for rent/pg). The source filters on its own price steps (5 L, 10 L … 1 Cr …; 1K … 10 L for rent); the bound is widened to the nearest step and meta.filters_applied says which. The source's band is loose — rows outside it come back flagged `outside_price_filter: true`.","on_invalid":"reject","example":5000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in rupees (monthly for rent/pg); widened to the nearest step like price_min.","on_invalid":"reject","example":10000000,"minimum":0},{"name":"area_min_sqft","type":"integer","required":false,"description":"Minimum area in square feet.","on_invalid":"reject","example":1000,"minimum":0},{"name":"area_max_sqft","type":"integer","required":false,"description":"Maximum area in square feet.","on_invalid":"reject","example":2000,"minimum":0},{"name":"posted_by","type":"enum","required":false,"description":"owner, dealer or builder — who posted the listing.","on_invalid":"reject","allowed_values":[{"value":"owner","label":"Owner"},{"value":"dealer","label":"Dealer / agent"},{"value":"builder","label":"Builder"}],"example":"owner","aliases":["seller_type"]},{"name":"construction_status","type":"enum","required":false,"description":"ready_to_move, under_construction or new_launch.","on_invalid":"reject","allowed_values":[{"value":"ready_to_move","label":"Ready to move"},{"value":"under_construction","label":"Under construction"},{"value":"new_launch","label":"New launch"}],"example":"ready_to_move"},{"name":"sale_type","type":"enum","required":false,"description":"resale or new_booking (sold by the builder).","on_invalid":"reject","allowed_values":[{"value":"resale","label":"Resale"},{"value":"new_booking","label":"New booking (from the builder)"}],"example":"resale"},{"name":"furnishing","type":"enum","required":false,"description":"furnished, semifurnished or unfurnished.","on_invalid":"reject","allowed_values":[{"value":"furnished","label":"Furnished"},{"value":"semifurnished","label":"Semi-furnished"},{"value":"unfurnished","label":"Unfurnished"}],"example":"furnished"},{"name":"verified","type":"boolean","required":false,"description":"true = only listings the site marks verified.","on_invalid":"reject","example":true},{"name":"posted_since_days","type":"integer","required":false,"description":"Only listings posted in the last N days: 1, 3, 7, 15 or 30.","on_invalid":"reject","allowed_values":[{"value":1,"label":"posted in the last 1 day(s)"},{"value":3,"label":"posted in the last 3 day(s)"},{"value":7,"label":"posted in the last 7 day(s)"},{"value":15,"label":"posted in the last 15 day(s)"},{"value":30,"label":"posted in the last 30 day(s)"}],"example":7},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows a page, up to 50 (the source's ceiling). Featured rows come on top of this count on page 1.","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":50}],"returns":"listings[{listing_id, spid, url, title, listing_kind (featured|project_unit|listing), product_type, transaction, segment, property_type, property_type_id, bedrooms, bathrooms, balconies, price_inr, price_max_inr, price_is_range, price_display, price_on_request, price_period, price_per_sqft_inr, price_per_unit_text, price_per_unit_inr, price_per_unit_label, price_per_unit_area_type, area{super_area_sqft, super_built_up_area_sqft, built_up_area_sqft, carpet_area_sqft, display_area_type, display_area, display_area_unit, display_area_text, secondary_area_text, area_range_min/max/unit}, locality, locality_id, locality_text, city, city_id, society, building_id, project_id, lat, lng, location_precision, floor, total_floors, furnishing, sale_type, ownership, age, verified, poster_rera_registered, posted_at, updated_at, posted_label, tags[], highlights[], description, photo_url, photo_count, seller{type, label, name, company, photo_url, rera_registered}, outside_price_filter}]; meta.total, meta.pagination, meta.facets (the source's own counts per filter value), meta.resolved, meta.filters_applied, meta.row_kinds","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"city_id":19,"transaction":"buy","bedrooms":"2","posted_by":"owner"}},{"name":"listing","description":"One listing in full by its listing_id: price in rupees (and range for project units) with negotiable / all-inclusive flags, brokerage, super / built-up / carpet area with units, plot length and breadth, floor, facing, overlooking, furnishing, ownership, availability, age, amenities, highlights, description, RERA, coordinates, every photo, posting / update / expiry dates and the advertiser (name, company, type, member since, office address, the phone as the site masks it).","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The listing_id of a search row (letter + digits, e.g. S94838160), or the listing's full 99acres URL.","on_invalid":"reject","example":"S94838160","value_pattern":"[A-Za-z]\\d{6,10}","aliases":["id","prop_id"]}],"returns":"listing{listing_id, spid, url, title, heading, transaction, segment, property_type, bedrooms, bathrooms, balconies, price_inr, price_max_inr, price_display, price_text, price_on_request, price_period, price_negotiable, price_all_inclusive, price_per_unit_area_inr, brokerage, area{super_area, super_area_unit, built_up_area, carpet_area, area_text, plot_length, plot_breadth}, floor, total_floors, facing, overlooking, furnishing, ownership, availability, age, sale_type, gated_community, corner_property, amenities[], highlights[], description, locality, city, address, lat, lng, verified, rera_type, rera{}, posted_on, updated_on, expires_on, images[], image_count, seller{type, name, company, member_since, address, phone_masked}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"S94838160"}}]},{"name":"a101","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"A101 API scraper — Turkish discount grocery chain (a101.com.tr): search A101 Kapıda groceries and A101 Ekstra products, list the Aldın Aldın and Haftanın Yıldızları campaigns, read a product — shelf price, struck price, campaign badges and dates, in-basket and multi-buy prices kept apart, unit price, barcodes, net weight, storage, origin, stock, description. Prices in TRY. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/a101/v1","spec_available":true,"actions":[{"name":"search","description":"Search A101's online shops by keyword: `kapida` (groceries and household at the delivery store's prices) or `ekstra` (electronics, home, fashion) — 60 products a page, Ekstra's sort orders. Each row: product id, title, brand, URL, image, shelf price, struck price and discount, campaign badges (Aldın Aldın, Haftanın Yıldızları …) with dates, and for Kapıda the conditional in-basket price, multi-buy price and unit price kept apart.","required_params":["query"],"optional_params":["channel","page","sort","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, in Turkish ('peynir', 'yumurta', 'deterjan', 'televizyon', 'kulaklık'). Brand and product words work; typos are tolerated by A101's search.","on_invalid":"reject","example":"peynir","aliases":["q","keyword"]},{"name":"channel","type":"enum","required":false,"description":"Which A101 online shop to search. Groceries (cheese, milk, detergent) are only in `kapida`; TVs, phones, furniture and clothes are in `ekstra`.","on_invalid":"reject","allowed_values":[{"value":"kapida","label":"A101 Kapıda — groceries and household, delivery-store prices"},{"value":"ekstra","label":"A101 Ekstra — electronics, home, fashion, shipped products"}],"default":"kapida"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. A101 serves 60 products per page; `total_pages` says how many exist.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Result order — Ekstra's own sort options. Kapıda's search has no working sort, so on `kapida` only `relevance` is accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"A101's recommended order"},{"value":"price_asc","label":"Lowest price first (Ekstra only)"},{"value":"price_desc","label":"Highest price first (Ekstra only)"},{"value":"newest","label":"Newest listings first (Ekstra only)"},{"value":"discount","label":"Biggest discount first (Ekstra only)"},{"value":"best_selling","label":"Best sellers first (Ekstra only)"}],"default":"relevance"},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When A101 has nothing matching the query it fills the page with unrelated products. They are dropped by default (`fallback_results_dropped` counts them); set true to also get them in `fallback_results`.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id, channel, title, brand, url, image, price (number, TRY — the shelf price; Kapıda: the delivery store's price), price_before_discount (struck price, null when none), discount_percent, currency=TRY, in_stock, campaigns[{code, label, site_name, starts_on, ends_on}], category, category_id, category_path[]; Kapıda only: sold_at_store, store_code, campaign_conditions[] (the site's campaign text), basket_offer{price, regular_price, code, label, condition, ends_on} (a price that applies only inside a qualifying basket — NOT the shelf price), multi_buy{min_quantity, unit_price, regular_unit_price, code, label, ends_on}, unit_price{price, per, label} (the site's own unit price), sales_unit, base_unit, max_order_quantity; Ekstra only: barcode (GTIN, check digit validated), sales_channels[], max_order_quantity, country_of_origin}, count, total_results (null when unknown), total_pages, page, page_size (60), has_more, channel, store_code (kapida), keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[] (only with include_fallback_results), page_notice","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"peynir","channel":"kapida"}},{"name":"product/detail","description":"One A101 product by id or URL, from Kapıda or Ekstra: shelf price, struck price and discount, campaign badges with dates, in-basket and multi-buy prices, unit price, barcodes, net and gross weight, storage condition, country of origin, shelf life, stock count (Ekstra), instalment offers (Ekstra), images, breadcrumb, description and specifications.","required_params":[],"optional_params":["product_id","url","channel","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"The A101 product id — `product_id` of a search or campaigns row ('12002661' Kapıda, '26077738' Ekstra).","on_invalid":"reject","example":"12002661","aliases":["id","sku"]},{"name":"url","type":"string","required":false,"description":"Alternative to `product_id`: an a101.com.tr product URL (…_p-<id> or /kapida/product/<id>).","on_invalid":"reject","example":"https://www.a101.com.tr/kapida/sut-urunleri-kahvaltilik/peynes-suzme-tam-yagli-taze-beyaz-peynir-500-g_p-12002661","aliases":["product_url"]},{"name":"channel","type":"enum","required":false,"description":"Which A101 shop the product id belongs to. `auto` looks in both; a URL decides it by itself.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Find the product in either shop"},{"value":"kapida","label":"A101 Kapıda"},{"value":"ekstra","label":"A101 Ekstra"}],"default":"auto"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{position, product_id, channel, title, brand, url, image, price (number, TRY — the shelf price; Kapıda: the delivery store's price), price_before_discount (struck price, null when none), discount_percent, currency=TRY, in_stock, campaigns[{code, label, site_name, starts_on, ends_on}], category, category_id, category_path[]; Kapıda only: sold_at_store, store_code, campaign_conditions[] (the site's campaign text), basket_offer{price, regular_price, code, label, condition, ends_on} (a price that applies only inside a qualifying basket — NOT the shelf price), multi_buy{min_quantity, unit_price, regular_unit_price, code, label, ends_on}, unit_price{price, per, label} (the site's own unit price), sales_unit, base_unit, max_order_quantity; Ekstra only: barcode (GTIN, check digit validated), sales_channels[], max_order_quantity, country_of_origin, barcodes[] (Kapıda: every barcode A101 lists), net_weight_g, gross_weight_g, storage_condition, shelf_life_days, private_label, return_days, description, breadcrumb[{id, name, url}], images[], campaign_period{name, starts_on, ends_on}; Ekstra: base_id, stock_count, stock_level, collections[], badges[], installments[{card, max_interest_free_installments}], max_interest_free_installments, specifications[{name, value}], variants[{product_id, size, color, price, in_stock, url}], product_page (false when only the search index could be read), other_channel_offer{channel, product_id, price, price_before_discount, discount_percent, in_stock, url, store_code} (the same product in the other A101 shop, at that shop's own price — prices differ between Kapıda and Ekstra; null when it is sold in one shop)}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"12002661"}},{"name":"campaigns","description":"The products of an A101 campaign page — Aldın Aldın, Haftanın Yıldızları, Aldın Aldın X, Aylık Fırsat, 10 TL ve üzeri sepette and Çok Al Az Öde on Kapıda; Aldın Aldın and Aldın Aldın Ekstra on Ekstra — 60 per page, with the same row fields as search.","required_params":[],"optional_params":["campaign","channel","page","max_rotations"],"params":[{"name":"campaign","type":"enum","required":false,"description":"Which A101 campaign to list. Each campaign exists in the channel(s) named in brackets.","on_invalid":"reject","allowed_values":[{"value":"aldin_aldin","label":"Aldın Aldın (kapida, ekstra)"},{"value":"haftanin_yildizlari","label":"Haftanın Yıldızları (kapida)"},{"value":"aldin_aldin_x","label":"Aldın Aldın X (kapida)"},{"value":"aylik_firsat","label":"Aylık Fırsat Ürünleri (kapida)"},{"value":"sepette_10_tl","label":"10 TL ve Üzeri Alışverişte Sepette (kapida)"},{"value":"cok_al_az_ode","label":"Çok Al Az Öde multi-buy (kapida)"},{"value":"aldin_aldin_ekstra","label":"Aldın Aldın Ekstra (ekstra)"}],"default":"aldin_aldin"},{"name":"channel","type":"enum","required":false,"description":"Which A101 online shop to search. Groceries (cheese, milk, detergent) are only in `kapida`; TVs, phones, furniture and clothes are in `ekstra`.","on_invalid":"reject","allowed_values":[{"value":"kapida","label":"A101 Kapıda — groceries and household, delivery-store prices"},{"value":"ekstra","label":"A101 Ekstra — electronics, home, fashion, shipped products"}],"default":"kapida"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. A101 serves 60 products per page; `total_pages` says how many exist.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id, channel, title, brand, url, image, price (number, TRY — the shelf price; Kapıda: the delivery store's price), price_before_discount (struck price, null when none), discount_percent, currency=TRY, in_stock, campaigns[{code, label, site_name, starts_on, ends_on}], category, category_id, category_path[]; Kapıda only: sold_at_store, store_code, campaign_conditions[] (the site's campaign text), basket_offer{price, regular_price, code, label, condition, ends_on} (a price that applies only inside a qualifying basket — NOT the shelf price), multi_buy{min_quantity, unit_price, regular_unit_price, code, label, ends_on}, unit_price{price, per, label} (the site's own unit price), sales_unit, base_unit, max_order_quantity; Ekstra only: barcode (GTIN, check digit validated), sales_channels[], max_order_quantity, country_of_origin}, count, total_results, total_pages, page, page_size (60), has_more, channel, campaign, campaign_code, campaign_page, store_code (kapida)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"suggest","description":"A101's own search autocomplete for a partial keyword in Kapıda or Ekstra: the top matching products with price and the category / brand suggestions the site shows.","required_params":["query"],"optional_params":["channel","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the user has typed so far (2+ characters).","on_invalid":"reject","example":"peyn","aliases":["q","keyword"]},{"name":"channel","type":"enum","required":false,"description":"Which A101 online shop to search. Groceries (cheese, milk, detergent) are only in `kapida`; TVs, phones, furniture and clothes are in `ekstra`.","on_invalid":"reject","allowed_values":[{"value":"kapida","label":"A101 Kapıda — groceries and household, delivery-store prices"},{"value":"ekstra","label":"A101 Ekstra — electronics, home, fashion, shipped products"}],"default":"kapida"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"products[]{position, product_id, channel, title, brand, url, image, price (number, TRY — the shelf price; Kapıda: the delivery store's price), price_before_discount (struck price, null when none), discount_percent, currency=TRY, in_stock, campaigns[{code, label, site_name, starts_on, ends_on}], category, category_id, category_path[]; Kapıda only: sold_at_store, store_code, campaign_conditions[] (the site's campaign text), basket_offer{price, regular_price, code, label, condition, ends_on} (a price that applies only inside a qualifying basket — NOT the shelf price), multi_buy{min_quantity, unit_price, regular_unit_price, code, label, ends_on}, unit_price{price, per, label} (the site's own unit price), sales_unit, base_unit, max_order_quantity; Ekstra only: barcode (GTIN, check digit validated), sales_channels[], max_order_quantity, country_of_origin}, categories[{name, count}], brands[{name, count}] (ekstra), total_results, channel, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"peynir"}}]},{"name":"abebooks","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"AbeBooks API — live data from abebooks.com, the world's marketplace for used, rare and out-of-print books (an Amazon company; tens of thousands of independent booksellers in 50+ countries, hundreds of millions of listings). Search the whole marketplace by keyword, title, author, publisher or ISBN with the dealers' own filters — signed, first edition, dust jacket, seller country, condition band, price, publication year, seller rating, listed-this-week — then open any ISBN for the COMPLETE ladder of competing seller offers: each copy's price, its shipping cost to the destination YOU name, its delivery window, the grade, the seller's own condition note, the shop's name, city, country and star rating, and the collectible attributes. Price and shipping are always separate fields, the currency is yours to choose, and nothing is quoted for a destination the API guessed.","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/abebooks/v1","spec_available":true,"actions":[{"name":"search","description":"Search the marketplace. Every row is ONE SELLER'S COPY, not a product — the same edition appears once per bookseller offering it, which is the point of this source. Give at least one of `query`, `title`, `author`, `publisher` or `isbn`, then narrow with any of the dealers' own filters. Every filter here was measured against an unfiltered control and every one of them bites.","required_params":[],"optional_params":["query","title","author","publisher","isbn","condition","seller_country","seller_region","language","binding","product_type","signed","first_edition","dust_jacket","with_photos","exclude_print_on_demand","free_shipping_to","min_seller_rating","min_price","max_price","year_min","year_max","listed_within","sort","page","per_page","currency","ship_to"],"params":[{"name":"query","type":"string","required":false,"description":"Free text over the whole listing — title, author, publisher and the seller's own description. At least one of `query`, `title`, `author`, `publisher` or `isbn` is required, exactly as the source's own advanced search demands. Because it reaches the seller's description, it is also how you find the things only a bookseller writes: 'inscribed to', 'association copy', 'provenance', 'dust jacket chipped'.","on_invalid":"reject","example":"dune frank herbert","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,160}","aliases":["q","keyword","keywords","search","kn"]},{"name":"title","type":"string","required":false,"description":"Title words only, which is how you avoid the keyword search matching an author's name or a seller's note. Measured: `author=herbert` with `title=dune` cut the catalogue to 9,489 listings.","on_invalid":"reject","example":"the old man and the sea","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,160}","aliases":["tn","book_title"]},{"name":"author","type":"string","required":false,"description":"Author words. Sellers type the byline themselves, so it arrives in many shapes ('Herbert, Frank', 'Frank Herbert', 'HERBERT'); a surname is the reliable input.","on_invalid":"reject","example":"hemingway","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,160}","aliases":["an","writer","contributor"]},{"name":"publisher","type":"string","required":false,"description":"Publisher words, again seller-typed. Measured: `query=dune` plus `publisher=chilton` cut 779,501 listings to 67 — which for Dune is precisely the 1965 Chilton first edition and its relatives.","on_invalid":"reject","example":"chilton","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,160}","aliases":["pn","imprint"]},{"name":"isbn","type":"string","required":false,"description":"Restrict the search to one ISBN, which turns `search` into the offer ladder for that edition. `detail` is the better call for that — it adds the agreed bibliographic record and the price summary — but this exists so you can combine an ISBN with the seller and condition filters in one request.","on_invalid":"reject","example":"9780140449136","value_pattern":"[0-9Xx][0-9Xx -]{8,19}","aliases":["isbn13","isbn10","barcode","ean","gtin"]},{"name":"condition","type":"enum","required":false,"description":"Keep only copies in one of the source's own five condition BANDS. AbeBooks grades a copy on a nine-step ladder (New, As New, Fine, Near Fine, Very Good, Good, Fair, Poor, Unspecified) but it filters on bands, so these are the bands and the rows still carry the exact grade as `condition` plus the seller's own word for it as `seller_condition`. Note how large `unspecified` is (103,154 on one measured query): an antiquarian dealer often describes a copy in prose instead of picking a grade, and that prose is in `seller_note`.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New only (measured bite: 779,501 -> 450,004 listings)"},{"value":"as_new_fine","label":"As New, Fine or Near Fine — the collector band (-> 168,121)"},{"value":"very_good_good","label":"Very Good or Good (-> 51,586)"},{"value":"fair_poor","label":"Fair or Poor — reading copies (-> 6,633)"},{"value":"unspecified","label":"the seller graded nothing (-> 103,154)"}],"example":"as_new_fine","aliases":["conditions","grade","cond"]},{"name":"seller_country","type":"enum","required":false,"description":"Keep only sellers in this country — the lever that actually controls what you pay to ship, because a copy in your own country is cheap to post and a copy abroad is not. These are the source's own two-letter codes, kept verbatim including its `uk` for the United Kingdom (`gb` is accepted and mapped). Measured bite: 779,501 listings -> 84,386 for `uk` and 263,033 for `de`, and 20 of 20 returned rows had the matching seller country.","on_invalid":"reject","allowed_values":[{"value":"dz","label":"Algeria"},{"value":"ar","label":"Argentina"},{"value":"am","label":"Armenia"},{"value":"au","label":"Australia"},{"value":"at","label":"Austria"},{"value":"bb","label":"Barbados"},{"value":"be","label":"Belgium"},{"value":"br","label":"Brazil"},{"value":"bg","label":"Bulgaria"},{"value":"ca","label":"Canada"},{"value":"cl","label":"Chile"},{"value":"cn","label":"China"},{"value":"cy","label":"Cyprus"},{"value":"cz","label":"Czech Republic"},{"value":"dk","label":"Denmark"},{"value":"ee","label":"Estonia"},{"value":"fi","label":"Finland"},{"value":"fr","label":"France"},{"value":"ge","label":"Georgia"},{"value":"de","label":"Germany"},{"value":"gr","label":"Greece"},{"value":"gp","label":"Guadeloupe"},{"value":"gu","label":"Guam"},{"value":"hk","label":"Hong Kong"},{"value":"hu","label":"Hungary"},{"value":"in","label":"India"},{"value":"ie","label":"Ireland"},{"value":"il","label":"Israel"},{"value":"it","label":"Italy"},{"value":"jp","label":"Japan"},{"value":"kr","label":"Korea, Republic of"},{"value":"lv","label":"Latvia"},{"value":"lt","label":"Lithuania"},{"value":"lu","label":"Luxembourg"},{"value":"mt","label":"Malta"},{"value":"mx","label":"Mexico"},{"value":"nl","label":"Netherlands"},{"value":"nz","label":"New Zealand"},{"value":"no","label":"Norway"},{"value":"pl","label":"Poland"},{"value":"pt","label":"Portugal"},{"value":"ro","label":"Romania"},{"value":"sg","label":"Singapore"},{"value":"si","label":"Slovenia"},{"value":"za","label":"South Africa"},{"value":"es","label":"Spain"},{"value":"se","label":"Sweden"},{"value":"ch","label":"Switzerland"},{"value":"tw","label":"Taiwan"},{"value":"th","label":"Thailand"},{"value":"tr","label":"Turkey"},{"value":"us","label":"U.S.A."},{"value":"uk","label":"United Kingdom"},{"value":"uy","label":"Uruguay"}],"example":"uk","aliases":["cty","country","from_country"]},{"name":"seller_region","type":"enum","required":false,"description":"Same idea, one level up: keep only sellers in a whole region. The source offers both a European Union set and a wider Europe set, and they are not the same thing. Measured bite for `er`: 779,501 -> 647,445.","on_invalid":"reject","allowed_values":[{"value":"ww","label":"Worldwide — every seller country"},{"value":"na","label":"North America (Canada, Mexico, U.S.A.)"},{"value":"sa","label":"South America (Argentina, Brazil, Chile, Uruguay)"},{"value":"eu","label":"European Union only"},{"value":"er","label":"Europe, EU plus Norway, Switzerland and the United Kingdom"},{"value":"oc","label":"Oceania (Australia, Guam, New Zealand)"},{"value":"as","label":"Asia, from Armenia to Thailand"}],"example":"er","aliases":["rgn","region"]},{"name":"language","type":"string","required":false,"description":"Keep only this language, as the three-letter code the source keys on (ISO 639-2). Measured bite: `DEU` cut 779,501 listings to 4,432 and 20 of 20 returned rows were DEU. Any three-letter code the source carries is accepted; the ones listed here are the ones seen on live listings, and `language_name` in the rows is our expansion of the source's code, not something the source publishes. Be aware the source also emits a bare `N` on some listings (86 of 300 rows across six measured queries, 9 of 50 on one map search) — it is not an ISO code and carries no language, so it is passed through unchanged with `language_name: null` rather than guessed at.","on_invalid":"reject","allowed_values":[{"value":"ENG","label":"English"},{"value":"FRA","label":"French"},{"value":"DEU","label":"German"},{"value":"SPA","label":"Spanish"},{"value":"ITA","label":"Italian"},{"value":"POR","label":"Portuguese"},{"value":"NLD","label":"Dutch"},{"value":"RUS","label":"Russian"},{"value":"JPN","label":"Japanese"},{"value":"ZHO","label":"Chinese"},{"value":"CHI","label":"Chinese (the source's older code)"},{"value":"ARA","label":"Arabic"},{"value":"HEB","label":"Hebrew"},{"value":"LAT","label":"Latin"},{"value":"GRC","label":"Ancient Greek"},{"value":"ELL","label":"Modern Greek"},{"value":"SWE","label":"Swedish"},{"value":"DAN","label":"Danish"},{"value":"NOR","label":"Norwegian"},{"value":"FIN","label":"Finnish"},{"value":"POL","label":"Polish"},{"value":"CES","label":"Czech"},{"value":"HUN","label":"Hungarian"},{"value":"TUR","label":"Turkish"},{"value":"UKR","label":"Ukrainian"},{"value":"KOR","label":"Korean"},{"value":"HIN","label":"Hindi"},{"value":"CAT","label":"Catalan"},{"value":"EUS","label":"Basque"},{"value":"CYM","label":"Welsh"},{"value":"GLE","label":"Irish"},{"value":"ISL","label":"Icelandic"},{"value":"RON","label":"Romanian"},{"value":"BUL","label":"Bulgarian"},{"value":"HRV","label":"Croatian"},{"value":"SRP","label":"Serbian"},{"value":"SLV","label":"Slovenian"},{"value":"SLK","label":"Slovak"},{"value":"LIT","label":"Lithuanian"},{"value":"LAV","label":"Latvian"},{"value":"EST","label":"Estonian"},{"value":"VIE","label":"Vietnamese"},{"value":"THA","label":"Thai"},{"value":"IND","label":"Indonesian"},{"value":"PER","label":"Persian"},{"value":"FAS","label":"Persian"},{"value":"SAN","label":"Sanskrit"},{"value":"ENM","label":"Middle English"},{"value":"FRM","label":"Middle French"},{"value":"ANG","label":"Old English"},{"value":"EPO","label":"Esperanto"},{"value":"MUL","label":"multiple languages"},{"value":"UND","label":"undetermined"}],"example":"DEU","value_pattern":"[A-Za-z]{3}","aliases":["lang","languages"]},{"name":"binding","type":"enum","required":false,"description":"Hardcover or softcover. The source filters on these two classes but does NOT normalise what the seller typed: one measured `hardcover` page returned 'Hardback' 12 times, 'Hardcover' once, 'hardcover' twice and nothing at all 5 times across 20 rows. So the rows give you both — `binding` is the seller's own string and `binding_class` is the class this filter works on.","on_invalid":"reject","allowed_values":[{"value":"hardcover","label":"hardcover / hardback (measured bite: 779,501 -> 144,727)"},{"value":"softcover","label":"softcover / paperback / mass market (-> 557,054)"}],"example":"hardcover","aliases":["bi","format","cover"]},{"name":"product_type","type":"enum","required":false,"description":"AbeBooks sells more than books, because the dealers on it do: maps, manuscripts, art prints, photographs, periodicals, comics and sheet music all have their own filter and their own token on the listing. Measured bite on one query: 740,348 books, 2,647 sheet music, 444 maps.","on_invalid":"reject","allowed_values":[{"value":"book","label":"a book (the overwhelming majority: 779,501 -> 740,348 on one measured query)"},{"value":"comic","label":"comic book"},{"value":"mag","label":"magazine or periodical"},{"value":"map","label":"map (-> 444 on the same query)"},{"value":"ms","label":"manuscript or paper collectible"},{"value":"music","label":"sheet music (-> 2,647)"},{"value":"art","label":"art print, poster or plate"},{"value":"photo","label":"photograph"}],"example":"map","aliases":["pt","type","media"]},{"name":"signed","type":"boolean","required":false,"description":"Keep only copies the seller has flagged as signed. Measured bite: 779,501 listings -> 16,568. The rows separate `is_signed` from `is_inscribed` because the trade does: a signature and a dedication to a named person are different objects and different money, and `inscription` carries the seller's own words.","on_invalid":"reject","example":true,"aliases":["sgnd","autographed"]},{"name":"first_edition","type":"boolean","required":false,"description":"Keep only copies flagged as a first edition. Measured bite: -> 37,871. It is the seller's claim, not a verified fact, and `edition` carries whatever the seller typed ('1st Edition', 'First Edition.', '1. Auflage', '1ère édition.').","on_invalid":"reject","example":true,"aliases":["fe","first"]},{"name":"dust_jacket","type":"boolean","required":false,"description":"Keep only copies with a dust jacket — for a 20th-century hardback the jacket is often most of the value. Measured bite: -> 11,485. Where the seller graded the jacket separately, the row carries `jacket_condition`.","on_invalid":"reject","example":true,"aliases":["dj","jacket"]},{"name":"with_photos","type":"boolean","required":false,"description":"Keep only copies the seller photographed, i.e. a picture of THIS copy rather than a stock cover. Measured bite: -> 490,759. On antiquarian queries the proportion is far higher (138 of 150 sampled rare listings had seller photos).","on_invalid":"reject","example":true,"aliases":["pics","with_pictures","has_images"]},{"name":"exclude_print_on_demand","type":"boolean","required":false,"description":"Drop print-on-demand reprints, which otherwise flood a search for an out-of-copyright title with new-made copies of a scan. Measured bite: -> 444,264, and on a narrow query 6,319 -> 4,883. Note the honest gap this exposes: the filter clearly knows which listings are print-on-demand, but the LISTING only ever published the negative assertion — `NOT_PRINT_ON_DEMAND` appeared on 550 of 550 sampled rows and no positive marker was ever seen. So `is_print_on_demand` on a row is `false` when the source asserts it and `null` when the source says nothing; use this filter rather than the row flag to exclude them.","on_invalid":"reject","example":true,"aliases":["xpod","no_pod"]},{"name":"free_shipping_to","type":"enum","required":false,"description":"Keep only listings that ship free to one of the two destinations the source offers this filter for. Measured bite for `us`: 779,501 -> 102,649. For any other destination there is no such filter, so read `free_shipping` on the rows instead — this engine does not invent a filter the source does not have.","on_invalid":"reject","allowed_values":[{"value":"us","label":"free shipping to the U.S.A."},{"value":"de","label":"free shipping to Germany"}],"example":"us","aliases":["fs"]},{"name":"min_seller_rating","type":"integer","required":false,"description":"Keep only sellers rated at least this many stars out of five. The source offers 2, 3, 4 and 5 — there is no 1, because that is everybody. Measured bite: 779,501 -> 658,104 at 5 stars and 777,672 at 2.","on_invalid":"reject","example":4,"minimum":2,"maximum":5,"aliases":["msr","rating"]},{"name":"min_price","type":"number","required":false,"description":"Lowest BOOK price, in the currency you asked for and in major units. It filters the book price, not the total — add `sort=total_price_asc` if what you care about is landed cost.","on_invalid":"reject","example":25,"minimum":0,"aliases":["prl","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest BOOK price, same units. Measured bite: 779,501 listings -> 14,170 at 5.","on_invalid":"reject","example":5,"minimum":0,"aliases":["prh","price_max"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest publication year, as the seller typed it. Measured bite: the window 1965-1970 cut 779,501 listings to 9,074. Sellers of antiquarian material do sometimes leave the year empty (32 of 400 sampled rows), and those rows cannot satisfy a year filter.","on_invalid":"reject","example":1965,"minimum":1,"maximum":2027,"aliases":["yrl","min_year","published_after"]},{"name":"year_max","type":"integer","required":false,"description":"Latest publication year, same scale as `year_min`.","on_invalid":"reject","example":1970,"minimum":1,"maximum":2027,"aliases":["yrh","max_year","published_before"]},{"name":"listed_within","type":"enum","required":false,"description":"Keep only listings added in the last N days — the one way to watch what is coming ONTO the market rather than what is sitting on it. Measured bite for `7day`: 779,501 -> 4,260.","on_invalid":"reject","allowed_values":[{"value":"1day","label":"listed in the past 24 hours"},{"value":"2day","label":"past 48 hours"},{"value":"3day","label":"past 3 days"},{"value":"5day","label":"past 5 days"},{"value":"7day","label":"past 7 days (measured bite: 779,501 -> 4,260)"},{"value":"10day","label":"past 10 days"},{"value":"14day","label":"past 14 days"},{"value":"21day","label":"past 21 days"},{"value":"30day","label":"past 30 days"},{"value":"60day","label":"past 60 days"},{"value":"90day","label":"past 90 days"}],"example":"7day","aliases":["recentlyadded","new_within"]},{"name":"sort","type":"enum","required":false,"description":"Row order. All twelve of the source's own sorts are offered, and the one worth knowing about is `total_price_asc`: it sorts by price PLUS shipping to your destination, which on this marketplace routinely reorders the ladder completely.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the source's own ranking (its default)"},{"value":"price_asc","label":"cheapest BOOK price first — ignores shipping"},{"value":"price_desc","label":"most expensive book price first"},{"value":"total_price_asc","label":"cheapest book price PLUS shipping first — the one a buyer wants"},{"value":"newest","label":"most recently listed first"},{"value":"seller_rating_desc","label":"best-rated seller first"},{"value":"title_asc","label":"title A-Z"},{"value":"title_desc","label":"title Z-A"},{"value":"year_asc","label":"oldest publication year first"},{"value":"year_desc","label":"newest publication year first"},{"value":"author_asc","label":"author A-Z"},{"value":"author_desc","label":"author Z-A"}],"default":"relevance","example":"total_price_asc","aliases":["sort_by","order","sortby"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The source's result window is 1800 listings per query, so `page` x `per_page` must stay at or below that — at 50 per page the last readable page is 36. Past it the source answers HTTP 200 with an empty page that looks exactly like the end of the results (measured: a full page at offset 1,780, zero rows at 1,800, 2,000, 5,000, 10,000 and 20,000), which is why this is rejected here with the real maximum instead. Narrow with a filter to reach deeper.","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["p","page_number"]},{"name":"per_page","type":"integer","required":false,"description":"Listings per page, 1-100. The source renders its whole page per request, so a bigger page is cheaper per row but heavier per call: measured payloads are 430 KB at 10 rows, 742 KB at 30, 1.06 MB at 50 and 1.86 MB at 100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","ds","page_size"]},{"name":"currency","type":"enum","required":false,"description":"Which currency to quote every price and every shipping cost in. AbeBooks converts for you — a seller's own list currency is never published on this surface, so every number you get back is a conversion and every row says so. Only these twelve work: probing nineteen codes on 2026-10-08 found that JPY, MXN, TRY, ZAR, BRL and INR are answered in USD with HTTP 200 and no warning, so an unsupported code is rejected here instead of being silently re-priced. Measured on one listing in one minute: USD 2.20 / GBP 1.71 / EUR 2.02 / CAD 3.23 / CZK 49.23.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US dollar — the site's default"},{"value":"GBP","label":"pound sterling"},{"value":"EUR","label":"euro"},{"value":"CAD","label":"Canadian dollar"},{"value":"AUD","label":"Australian dollar"},{"value":"CHF","label":"Swiss franc"},{"value":"DKK","label":"Danish krone"},{"value":"SEK","label":"Swedish krona"},{"value":"NOK","label":"Norwegian krone"},{"value":"NZD","label":"New Zealand dollar"},{"value":"PLN","label":"Polish zloty"},{"value":"CZK","label":"Czech koruna"}],"default":"USD","example":"GBP","aliases":["curr","cur","price_currency"]},{"name":"ship_to","type":"enum","required":false,"description":"🔴 THE MOST IMPORTANT PARAMETER ON THIS API. Shipping is quoted per destination, and AbeBooks guesses the destination from the caller's own network when nothing pins it — so this engine always pins it and always tells you which one it used. Measured on ONE listing in ONE minute, book price USD 2.20 throughout: shipping was USD 4.69 to the U.S.A., 40.00 to the United Kingdom, 35.00 to Turkey, 45.00 to Japan and 45.00 to Australia. On that listing the cheapest shipping is DOUBLE the price of the book, which is why `price` and `shipping_price` are separate fields and `total_price` is the one to sort on. ISO-3166 alpha-3; 107 codes were confirmed accepted by the source's own echo, and an unknown code is rejected here because the source answers it with the U.S.A. rate card and no warning.","on_invalid":"reject","allowed_values":[{"value":"USA","label":"U.S.A."},{"value":"GBR","label":"United Kingdom"},{"value":"CAN","label":"Canada"},{"value":"AUS","label":"Australia"},{"value":"NZL","label":"New Zealand"},{"value":"IRL","label":"Ireland"},{"value":"DEU","label":"Germany"},{"value":"FRA","label":"France"},{"value":"ITA","label":"Italy"},{"value":"ESP","label":"Spain"},{"value":"PRT","label":"Portugal"},{"value":"NLD","label":"Netherlands"},{"value":"BEL","label":"Belgium"},{"value":"LUX","label":"Luxembourg"},{"value":"CHE","label":"Switzerland"},{"value":"AUT","label":"Austria"},{"value":"DNK","label":"Denmark"},{"value":"SWE","label":"Sweden"},{"value":"NOR","label":"Norway"},{"value":"FIN","label":"Finland"},{"value":"ISL","label":"Iceland"},{"value":"POL","label":"Poland"},{"value":"CZE","label":"Czech Republic"},{"value":"SVK","label":"Slovakia"},{"value":"HUN","label":"Hungary"},{"value":"ROU","label":"Romania"},{"value":"BGR","label":"Bulgaria"},{"value":"GRC","label":"Greece"},{"value":"HRV","label":"Croatia"},{"value":"SVN","label":"Slovenia"},{"value":"EST","label":"Estonia"},{"value":"LVA","label":"Latvia"},{"value":"LTU","label":"Lithuania"},{"value":"MLT","label":"Malta"},{"value":"CYP","label":"Cyprus"},{"value":"TUR","label":"Turkey"},{"value":"RUS","label":"Russia"},{"value":"UKR","label":"Ukraine"},{"value":"ISR","label":"Israel"},{"value":"ARE","label":"United Arab Emirates"},{"value":"SAU","label":"Saudi Arabia"},{"value":"QAT","label":"Qatar"},{"value":"KWT","label":"Kuwait"},{"value":"ZAF","label":"South Africa"},{"value":"EGY","label":"Egypt"},{"value":"MAR","label":"Morocco"},{"value":"NGA","label":"Nigeria"},{"value":"KEN","label":"Kenya"},{"value":"IND","label":"India"},{"value":"PAK","label":"Pakistan"},{"value":"BGD","label":"Bangladesh"},{"value":"LKA","label":"Sri Lanka"},{"value":"CHN","label":"China"},{"value":"HKG","label":"Hong Kong"},{"value":"TWN","label":"Taiwan"},{"value":"JPN","label":"Japan"},{"value":"KOR","label":"Korea, Republic of"},{"value":"SGP","label":"Singapore"},{"value":"MYS","label":"Malaysia"},{"value":"THA","label":"Thailand"},{"value":"VNM","label":"Viet Nam"},{"value":"IDN","label":"Indonesia"},{"value":"PHL","label":"Philippines"},{"value":"MEX","label":"Mexico"},{"value":"BRA","label":"Brazil"},{"value":"ARG","label":"Argentina"},{"value":"CHL","label":"Chile"},{"value":"COL","label":"Colombia"},{"value":"PER","label":"Peru"},{"value":"URY","label":"Uruguay"},{"value":"CRI","label":"Costa Rica"},{"value":"PAN","label":"Panama"},{"value":"JAM","label":"Jamaica"},{"value":"BRB","label":"Barbados"},{"value":"TTO","label":"Trinidad and Tobago"},{"value":"VEN","label":"Venezuela"},{"value":"ECU","label":"Ecuador"},{"value":"BOL","label":"Bolivia"},{"value":"PRY","label":"Paraguay"},{"value":"GTM","label":"Guatemala"},{"value":"SRB","label":"Serbia"},{"value":"BIH","label":"Bosnia and Herzegovina"},{"value":"MKD","label":"North Macedonia"},{"value":"ALB","label":"Albania"},{"value":"MDA","label":"Moldova"},{"value":"GEO","label":"Georgia"},{"value":"ARM","label":"Armenia"},{"value":"AZE","label":"Azerbaijan"},{"value":"KAZ","label":"Kazakhstan"},{"value":"MNG","label":"Mongolia"},{"value":"NPL","label":"Nepal"},{"value":"KHM","label":"Cambodia"},{"value":"LAO","label":"Laos"},{"value":"MMR","label":"Myanmar"},{"value":"BHR","label":"Bahrain"},{"value":"OMN","label":"Oman"},{"value":"JOR","label":"Jordan"},{"value":"LBN","label":"Lebanon"},{"value":"TUN","label":"Tunisia"},{"value":"DZA","label":"Algeria"},{"value":"GHA","label":"Ghana"},{"value":"TZA","label":"Tanzania"},{"value":"UGA","label":"Uganda"},{"value":"ZWE","label":"Zimbabwe"},{"value":"MUS","label":"Mauritius"},{"value":"FJI","label":"Fiji"},{"value":"PNG","label":"Papua New Guinea"}],"default":"USA","example":"GBR","value_pattern":"[A-Za-z]{3}","aliases":["shipping_destination","destination","ship_to_country","shipdest"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. The seller block is a business identity — shop name, city, country, rating and storefront link — and carries no address, phone number or e-mail, so nothing is withheld either way. Some AbeBooks sellers are one-person shops trading under a personal name; that name is the trading name the marketplace itself publishes.","on_invalid":"reject","default":false}],"returns":"offers[]{listing_id, seller_sku, url, copies_available, title, author, authors[], illustrator, publisher, publish_year, edition, binding, binding_class, language, language_name, isbn13, isbn10, isbn_missing, barcode_ean (only when the code is not a Bookland ISBN), product_type, condition, condition_label, condition_rank, seller_condition, seller_note, jacket, jacket_condition, inscription, price, price_missing, shipping_price, free_shipping, total_price, currency, currency_symbol, ships_to, ships_to_country, shipping_options[]{price, currency, min_delivery_days, max_delivery_days}, is_first_edition, is_signed, is_inscribed, has_dust_jacket, is_rare, is_print_on_demand, has_seller_photos, attribute_codes[], images[], image_is_sellers_own, catalog_image, seller{id, name, city, state, country, country_name, rating_stars, rating_scale, storefront_url, contact_url, associations[], catalogs[]}, series{id, title, position, books_in_series, url}, listing_params{listing_id}}, summary{the price ladder on this page} + meta{total_estimate, total_is_estimate, page, per_page, max_page, currency, ship_to, filters_applied, source_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"dune frank herbert","per_page":20,"sort":"total_price_asc","currency":"USD","ship_to":"USA"}},{"name":"detail","description":"One ISBN, every seller offering it. This is the flagship call: the complete competing-offer ladder for an edition, with the price and the shipping cost kept apart, the landed total computed, the bibliographic record the sellers agree on, every spelling they disagree about, and a price summary over the page. Measured on ISBN 9780441172719: 129 offers from sellers in 20 countries, book prices from USD 2.20, shipping from 0.00 to 5.50 within the U.S.A. and 31 to 75 to the United Kingdom.","required_params":["isbn"],"optional_params":["condition","seller_country","seller_region","min_seller_rating","sort","page","per_page","currency","ship_to"],"params":[{"name":"isbn","type":"string","required":true,"description":"An ISBN-13 or an ISBN-10, dashes and spaces optional. The ISBN-10 is converted arithmetically to the ISBN-13 the source is keyed on (verified live: 0441172717 and 9780441172719 return the same 129 offers). The check digit is verified before the call, so a typo is rejected rather than answered with an empty result. A 13-digit non-Bookland barcode is accepted too. Remember that a book printed before about 1970 HAS no ISBN — for those, search by `title` and `author`.","on_invalid":"reject","example":"9780441172719","value_pattern":"[0-9Xx][0-9Xx -]{8,19}","aliases":["isbn13","isbn10","barcode","ean","gtin"]},{"name":"condition","type":"enum","required":false,"description":"Keep only copies in one of the source's own five condition BANDS. AbeBooks grades a copy on a nine-step ladder (New, As New, Fine, Near Fine, Very Good, Good, Fair, Poor, Unspecified) but it filters on bands, so these are the bands and the rows still carry the exact grade as `condition` plus the seller's own word for it as `seller_condition`. Note how large `unspecified` is (103,154 on one measured query): an antiquarian dealer often describes a copy in prose instead of picking a grade, and that prose is in `seller_note`.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New only (measured bite: 779,501 -> 450,004 listings)"},{"value":"as_new_fine","label":"As New, Fine or Near Fine — the collector band (-> 168,121)"},{"value":"very_good_good","label":"Very Good or Good (-> 51,586)"},{"value":"fair_poor","label":"Fair or Poor — reading copies (-> 6,633)"},{"value":"unspecified","label":"the seller graded nothing (-> 103,154)"}],"example":"as_new_fine","aliases":["conditions","grade","cond"]},{"name":"seller_country","type":"enum","required":false,"description":"Keep only sellers in this country — the lever that actually controls what you pay to ship, because a copy in your own country is cheap to post and a copy abroad is not. These are the source's own two-letter codes, kept verbatim including its `uk` for the United Kingdom (`gb` is accepted and mapped). Measured bite: 779,501 listings -> 84,386 for `uk` and 263,033 for `de`, and 20 of 20 returned rows had the matching seller country.","on_invalid":"reject","allowed_values":[{"value":"dz","label":"Algeria"},{"value":"ar","label":"Argentina"},{"value":"am","label":"Armenia"},{"value":"au","label":"Australia"},{"value":"at","label":"Austria"},{"value":"bb","label":"Barbados"},{"value":"be","label":"Belgium"},{"value":"br","label":"Brazil"},{"value":"bg","label":"Bulgaria"},{"value":"ca","label":"Canada"},{"value":"cl","label":"Chile"},{"value":"cn","label":"China"},{"value":"cy","label":"Cyprus"},{"value":"cz","label":"Czech Republic"},{"value":"dk","label":"Denmark"},{"value":"ee","label":"Estonia"},{"value":"fi","label":"Finland"},{"value":"fr","label":"France"},{"value":"ge","label":"Georgia"},{"value":"de","label":"Germany"},{"value":"gr","label":"Greece"},{"value":"gp","label":"Guadeloupe"},{"value":"gu","label":"Guam"},{"value":"hk","label":"Hong Kong"},{"value":"hu","label":"Hungary"},{"value":"in","label":"India"},{"value":"ie","label":"Ireland"},{"value":"il","label":"Israel"},{"value":"it","label":"Italy"},{"value":"jp","label":"Japan"},{"value":"kr","label":"Korea, Republic of"},{"value":"lv","label":"Latvia"},{"value":"lt","label":"Lithuania"},{"value":"lu","label":"Luxembourg"},{"value":"mt","label":"Malta"},{"value":"mx","label":"Mexico"},{"value":"nl","label":"Netherlands"},{"value":"nz","label":"New Zealand"},{"value":"no","label":"Norway"},{"value":"pl","label":"Poland"},{"value":"pt","label":"Portugal"},{"value":"ro","label":"Romania"},{"value":"sg","label":"Singapore"},{"value":"si","label":"Slovenia"},{"value":"za","label":"South Africa"},{"value":"es","label":"Spain"},{"value":"se","label":"Sweden"},{"value":"ch","label":"Switzerland"},{"value":"tw","label":"Taiwan"},{"value":"th","label":"Thailand"},{"value":"tr","label":"Turkey"},{"value":"us","label":"U.S.A."},{"value":"uk","label":"United Kingdom"},{"value":"uy","label":"Uruguay"}],"example":"uk","aliases":["cty","country","from_country"]},{"name":"seller_region","type":"enum","required":false,"description":"Same idea, one level up: keep only sellers in a whole region. The source offers both a European Union set and a wider Europe set, and they are not the same thing. Measured bite for `er`: 779,501 -> 647,445.","on_invalid":"reject","allowed_values":[{"value":"ww","label":"Worldwide — every seller country"},{"value":"na","label":"North America (Canada, Mexico, U.S.A.)"},{"value":"sa","label":"South America (Argentina, Brazil, Chile, Uruguay)"},{"value":"eu","label":"European Union only"},{"value":"er","label":"Europe, EU plus Norway, Switzerland and the United Kingdom"},{"value":"oc","label":"Oceania (Australia, Guam, New Zealand)"},{"value":"as","label":"Asia, from Armenia to Thailand"}],"example":"er","aliases":["rgn","region"]},{"name":"min_seller_rating","type":"integer","required":false,"description":"Keep only sellers rated at least this many stars out of five. The source offers 2, 3, 4 and 5 — there is no 1, because that is everybody. Measured bite: 779,501 -> 658,104 at 5 stars and 777,672 at 2.","on_invalid":"reject","example":4,"minimum":2,"maximum":5,"aliases":["msr","rating"]},{"name":"sort","type":"enum","required":false,"description":"Row order. All twelve of the source's own sorts are offered, and the one worth knowing about is `total_price_asc`: it sorts by price PLUS shipping to your destination, which on this marketplace routinely reorders the ladder completely.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the source's own ranking (its default)"},{"value":"price_asc","label":"cheapest BOOK price first — ignores shipping"},{"value":"price_desc","label":"most expensive book price first"},{"value":"total_price_asc","label":"cheapest book price PLUS shipping first — the one a buyer wants"},{"value":"newest","label":"most recently listed first"},{"value":"seller_rating_desc","label":"best-rated seller first"},{"value":"title_asc","label":"title A-Z"},{"value":"title_desc","label":"title Z-A"},{"value":"year_asc","label":"oldest publication year first"},{"value":"year_desc","label":"newest publication year first"},{"value":"author_asc","label":"author A-Z"},{"value":"author_desc","label":"author Z-A"}],"default":"relevance","example":"total_price_asc","aliases":["sort_by","order","sortby"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The source's result window is 1800 listings per query, so `page` x `per_page` must stay at or below that — at 50 per page the last readable page is 36. Past it the source answers HTTP 200 with an empty page that looks exactly like the end of the results (measured: a full page at offset 1,780, zero rows at 1,800, 2,000, 5,000, 10,000 and 20,000), which is why this is rejected here with the real maximum instead. Narrow with a filter to reach deeper.","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["p","page_number"]},{"name":"per_page","type":"integer","required":false,"description":"Listings per page, 1-100. The source renders its whole page per request, so a bigger page is cheaper per row but heavier per call: measured payloads are 430 KB at 10 rows, 742 KB at 30, 1.06 MB at 50 and 1.86 MB at 100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","ds","page_size"]},{"name":"currency","type":"enum","required":false,"description":"Which currency to quote every price and every shipping cost in. AbeBooks converts for you — a seller's own list currency is never published on this surface, so every number you get back is a conversion and every row says so. Only these twelve work: probing nineteen codes on 2026-10-08 found that JPY, MXN, TRY, ZAR, BRL and INR are answered in USD with HTTP 200 and no warning, so an unsupported code is rejected here instead of being silently re-priced. Measured on one listing in one minute: USD 2.20 / GBP 1.71 / EUR 2.02 / CAD 3.23 / CZK 49.23.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US dollar — the site's default"},{"value":"GBP","label":"pound sterling"},{"value":"EUR","label":"euro"},{"value":"CAD","label":"Canadian dollar"},{"value":"AUD","label":"Australian dollar"},{"value":"CHF","label":"Swiss franc"},{"value":"DKK","label":"Danish krone"},{"value":"SEK","label":"Swedish krona"},{"value":"NOK","label":"Norwegian krone"},{"value":"NZD","label":"New Zealand dollar"},{"value":"PLN","label":"Polish zloty"},{"value":"CZK","label":"Czech koruna"}],"default":"USD","example":"GBP","aliases":["curr","cur","price_currency"]},{"name":"ship_to","type":"enum","required":false,"description":"🔴 THE MOST IMPORTANT PARAMETER ON THIS API. Shipping is quoted per destination, and AbeBooks guesses the destination from the caller's own network when nothing pins it — so this engine always pins it and always tells you which one it used. Measured on ONE listing in ONE minute, book price USD 2.20 throughout: shipping was USD 4.69 to the U.S.A., 40.00 to the United Kingdom, 35.00 to Turkey, 45.00 to Japan and 45.00 to Australia. On that listing the cheapest shipping is DOUBLE the price of the book, which is why `price` and `shipping_price` are separate fields and `total_price` is the one to sort on. ISO-3166 alpha-3; 107 codes were confirmed accepted by the source's own echo, and an unknown code is rejected here because the source answers it with the U.S.A. rate card and no warning.","on_invalid":"reject","allowed_values":[{"value":"USA","label":"U.S.A."},{"value":"GBR","label":"United Kingdom"},{"value":"CAN","label":"Canada"},{"value":"AUS","label":"Australia"},{"value":"NZL","label":"New Zealand"},{"value":"IRL","label":"Ireland"},{"value":"DEU","label":"Germany"},{"value":"FRA","label":"France"},{"value":"ITA","label":"Italy"},{"value":"ESP","label":"Spain"},{"value":"PRT","label":"Portugal"},{"value":"NLD","label":"Netherlands"},{"value":"BEL","label":"Belgium"},{"value":"LUX","label":"Luxembourg"},{"value":"CHE","label":"Switzerland"},{"value":"AUT","label":"Austria"},{"value":"DNK","label":"Denmark"},{"value":"SWE","label":"Sweden"},{"value":"NOR","label":"Norway"},{"value":"FIN","label":"Finland"},{"value":"ISL","label":"Iceland"},{"value":"POL","label":"Poland"},{"value":"CZE","label":"Czech Republic"},{"value":"SVK","label":"Slovakia"},{"value":"HUN","label":"Hungary"},{"value":"ROU","label":"Romania"},{"value":"BGR","label":"Bulgaria"},{"value":"GRC","label":"Greece"},{"value":"HRV","label":"Croatia"},{"value":"SVN","label":"Slovenia"},{"value":"EST","label":"Estonia"},{"value":"LVA","label":"Latvia"},{"value":"LTU","label":"Lithuania"},{"value":"MLT","label":"Malta"},{"value":"CYP","label":"Cyprus"},{"value":"TUR","label":"Turkey"},{"value":"RUS","label":"Russia"},{"value":"UKR","label":"Ukraine"},{"value":"ISR","label":"Israel"},{"value":"ARE","label":"United Arab Emirates"},{"value":"SAU","label":"Saudi Arabia"},{"value":"QAT","label":"Qatar"},{"value":"KWT","label":"Kuwait"},{"value":"ZAF","label":"South Africa"},{"value":"EGY","label":"Egypt"},{"value":"MAR","label":"Morocco"},{"value":"NGA","label":"Nigeria"},{"value":"KEN","label":"Kenya"},{"value":"IND","label":"India"},{"value":"PAK","label":"Pakistan"},{"value":"BGD","label":"Bangladesh"},{"value":"LKA","label":"Sri Lanka"},{"value":"CHN","label":"China"},{"value":"HKG","label":"Hong Kong"},{"value":"TWN","label":"Taiwan"},{"value":"JPN","label":"Japan"},{"value":"KOR","label":"Korea, Republic of"},{"value":"SGP","label":"Singapore"},{"value":"MYS","label":"Malaysia"},{"value":"THA","label":"Thailand"},{"value":"VNM","label":"Viet Nam"},{"value":"IDN","label":"Indonesia"},{"value":"PHL","label":"Philippines"},{"value":"MEX","label":"Mexico"},{"value":"BRA","label":"Brazil"},{"value":"ARG","label":"Argentina"},{"value":"CHL","label":"Chile"},{"value":"COL","label":"Colombia"},{"value":"PER","label":"Peru"},{"value":"URY","label":"Uruguay"},{"value":"CRI","label":"Costa Rica"},{"value":"PAN","label":"Panama"},{"value":"JAM","label":"Jamaica"},{"value":"BRB","label":"Barbados"},{"value":"TTO","label":"Trinidad and Tobago"},{"value":"VEN","label":"Venezuela"},{"value":"ECU","label":"Ecuador"},{"value":"BOL","label":"Bolivia"},{"value":"PRY","label":"Paraguay"},{"value":"GTM","label":"Guatemala"},{"value":"SRB","label":"Serbia"},{"value":"BIH","label":"Bosnia and Herzegovina"},{"value":"MKD","label":"North Macedonia"},{"value":"ALB","label":"Albania"},{"value":"MDA","label":"Moldova"},{"value":"GEO","label":"Georgia"},{"value":"ARM","label":"Armenia"},{"value":"AZE","label":"Azerbaijan"},{"value":"KAZ","label":"Kazakhstan"},{"value":"MNG","label":"Mongolia"},{"value":"NPL","label":"Nepal"},{"value":"KHM","label":"Cambodia"},{"value":"LAO","label":"Laos"},{"value":"MMR","label":"Myanmar"},{"value":"BHR","label":"Bahrain"},{"value":"OMN","label":"Oman"},{"value":"JOR","label":"Jordan"},{"value":"LBN","label":"Lebanon"},{"value":"TUN","label":"Tunisia"},{"value":"DZA","label":"Algeria"},{"value":"GHA","label":"Ghana"},{"value":"TZA","label":"Tanzania"},{"value":"UGA","label":"Uganda"},{"value":"ZWE","label":"Zimbabwe"},{"value":"MUS","label":"Mauritius"},{"value":"FJI","label":"Fiji"},{"value":"PNG","label":"Papua New Guinea"}],"default":"USA","example":"GBR","value_pattern":"[A-Za-z]{3}","aliases":["shipping_destination","destination","ship_to_country","shipdest"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. The seller block is a business identity — shop name, city, country, rating and storefront link — and carries no address, phone number or e-mail, so nothing is withheld either way. Some AbeBooks sellers are one-person shops trading under a personal name; that name is the trading name the marketplace itself publishes.","on_invalid":"reject","default":false}],"returns":"book{title, author, publisher, publish_year, language, isbn13, isbn10, series, catalog_image, *_variants for every field the sellers spell differently}, offers[]{listing_id, seller_sku, url, copies_available, title, author, authors[], illustrator, publisher, publish_year, edition, binding, binding_class, language, language_name, isbn13, isbn10, isbn_missing, barcode_ean (only when the code is not a Bookland ISBN), product_type, condition, condition_label, condition_rank, seller_condition, seller_note, jacket, jacket_condition, inscription, price, price_missing, shipping_price, free_shipping, total_price, currency, currency_symbol, ships_to, ships_to_country, shipping_options[]{price, currency, min_delivery_days, max_delivery_days}, is_first_edition, is_signed, is_inscribed, has_dust_jacket, is_rare, is_print_on_demand, has_seller_photos, attribute_codes[], images[], image_is_sellers_own, catalog_image, seller{id, name, city, state, country, country_name, rating_stars, rating_scale, storefront_url, contact_url, associations[], catalogs[]}, series{id, title, position, books_in_series, url}, listing_params{listing_id}}, summary{price ladder} + meta{isbn13, total_offers, total_is_estimate, page, per_page, max_page, currency, ship_to}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"isbn":"9780441172719","per_page":20,"sort":"total_price_asc","currency":"GBP","ship_to":"GBR"}},{"name":"listing","description":"One seller's copy in full, by `listing_id`. Adds what the ladder does not carry: every photograph the bookseller took of THIS copy, the item's size and weight, the publisher's own synopsis of the work, the work's reader rating, and the shop's founding date and accepted payment methods. Note that the seller rating on this page is a PERCENTAGE while the search surface publishes STARS out of five (measured: vendor 61505917 reads 98 here and 5 there) — both are returned under their own name and the row says which scale it is.","required_params":["listing_id"],"optional_params":["currency","ship_to"],"params":[{"name":"listing_id","type":"integer","required":true,"description":"One seller's copy, by the id every `search` / `detail` row returns as `listing_id`. This is the only call that adds the things the ladder does not carry: every photograph the seller uploaded, the item's size and weight, the publisher's own synopsis of the work, the shop's founding date and the payment methods it accepts.","on_invalid":"reject","example":32181107131,"minimum":1,"aliases":["listing","id","offer_id","sku"]},{"name":"currency","type":"enum","required":false,"description":"Which currency to quote every price and every shipping cost in. AbeBooks converts for you — a seller's own list currency is never published on this surface, so every number you get back is a conversion and every row says so. Only these twelve work: probing nineteen codes on 2026-10-08 found that JPY, MXN, TRY, ZAR, BRL and INR are answered in USD with HTTP 200 and no warning, so an unsupported code is rejected here instead of being silently re-priced. Measured on one listing in one minute: USD 2.20 / GBP 1.71 / EUR 2.02 / CAD 3.23 / CZK 49.23.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US dollar — the site's default"},{"value":"GBP","label":"pound sterling"},{"value":"EUR","label":"euro"},{"value":"CAD","label":"Canadian dollar"},{"value":"AUD","label":"Australian dollar"},{"value":"CHF","label":"Swiss franc"},{"value":"DKK","label":"Danish krone"},{"value":"SEK","label":"Swedish krona"},{"value":"NOK","label":"Norwegian krone"},{"value":"NZD","label":"New Zealand dollar"},{"value":"PLN","label":"Polish zloty"},{"value":"CZK","label":"Czech koruna"}],"default":"USD","example":"GBP","aliases":["curr","cur","price_currency"]},{"name":"ship_to","type":"enum","required":false,"description":"🔴 THE MOST IMPORTANT PARAMETER ON THIS API. Shipping is quoted per destination, and AbeBooks guesses the destination from the caller's own network when nothing pins it — so this engine always pins it and always tells you which one it used. Measured on ONE listing in ONE minute, book price USD 2.20 throughout: shipping was USD 4.69 to the U.S.A., 40.00 to the United Kingdom, 35.00 to Turkey, 45.00 to Japan and 45.00 to Australia. On that listing the cheapest shipping is DOUBLE the price of the book, which is why `price` and `shipping_price` are separate fields and `total_price` is the one to sort on. ISO-3166 alpha-3; 107 codes were confirmed accepted by the source's own echo, and an unknown code is rejected here because the source answers it with the U.S.A. rate card and no warning.","on_invalid":"reject","allowed_values":[{"value":"USA","label":"U.S.A."},{"value":"GBR","label":"United Kingdom"},{"value":"CAN","label":"Canada"},{"value":"AUS","label":"Australia"},{"value":"NZL","label":"New Zealand"},{"value":"IRL","label":"Ireland"},{"value":"DEU","label":"Germany"},{"value":"FRA","label":"France"},{"value":"ITA","label":"Italy"},{"value":"ESP","label":"Spain"},{"value":"PRT","label":"Portugal"},{"value":"NLD","label":"Netherlands"},{"value":"BEL","label":"Belgium"},{"value":"LUX","label":"Luxembourg"},{"value":"CHE","label":"Switzerland"},{"value":"AUT","label":"Austria"},{"value":"DNK","label":"Denmark"},{"value":"SWE","label":"Sweden"},{"value":"NOR","label":"Norway"},{"value":"FIN","label":"Finland"},{"value":"ISL","label":"Iceland"},{"value":"POL","label":"Poland"},{"value":"CZE","label":"Czech Republic"},{"value":"SVK","label":"Slovakia"},{"value":"HUN","label":"Hungary"},{"value":"ROU","label":"Romania"},{"value":"BGR","label":"Bulgaria"},{"value":"GRC","label":"Greece"},{"value":"HRV","label":"Croatia"},{"value":"SVN","label":"Slovenia"},{"value":"EST","label":"Estonia"},{"value":"LVA","label":"Latvia"},{"value":"LTU","label":"Lithuania"},{"value":"MLT","label":"Malta"},{"value":"CYP","label":"Cyprus"},{"value":"TUR","label":"Turkey"},{"value":"RUS","label":"Russia"},{"value":"UKR","label":"Ukraine"},{"value":"ISR","label":"Israel"},{"value":"ARE","label":"United Arab Emirates"},{"value":"SAU","label":"Saudi Arabia"},{"value":"QAT","label":"Qatar"},{"value":"KWT","label":"Kuwait"},{"value":"ZAF","label":"South Africa"},{"value":"EGY","label":"Egypt"},{"value":"MAR","label":"Morocco"},{"value":"NGA","label":"Nigeria"},{"value":"KEN","label":"Kenya"},{"value":"IND","label":"India"},{"value":"PAK","label":"Pakistan"},{"value":"BGD","label":"Bangladesh"},{"value":"LKA","label":"Sri Lanka"},{"value":"CHN","label":"China"},{"value":"HKG","label":"Hong Kong"},{"value":"TWN","label":"Taiwan"},{"value":"JPN","label":"Japan"},{"value":"KOR","label":"Korea, Republic of"},{"value":"SGP","label":"Singapore"},{"value":"MYS","label":"Malaysia"},{"value":"THA","label":"Thailand"},{"value":"VNM","label":"Viet Nam"},{"value":"IDN","label":"Indonesia"},{"value":"PHL","label":"Philippines"},{"value":"MEX","label":"Mexico"},{"value":"BRA","label":"Brazil"},{"value":"ARG","label":"Argentina"},{"value":"CHL","label":"Chile"},{"value":"COL","label":"Colombia"},{"value":"PER","label":"Peru"},{"value":"URY","label":"Uruguay"},{"value":"CRI","label":"Costa Rica"},{"value":"PAN","label":"Panama"},{"value":"JAM","label":"Jamaica"},{"value":"BRB","label":"Barbados"},{"value":"TTO","label":"Trinidad and Tobago"},{"value":"VEN","label":"Venezuela"},{"value":"ECU","label":"Ecuador"},{"value":"BOL","label":"Bolivia"},{"value":"PRY","label":"Paraguay"},{"value":"GTM","label":"Guatemala"},{"value":"SRB","label":"Serbia"},{"value":"BIH","label":"Bosnia and Herzegovina"},{"value":"MKD","label":"North Macedonia"},{"value":"ALB","label":"Albania"},{"value":"MDA","label":"Moldova"},{"value":"GEO","label":"Georgia"},{"value":"ARM","label":"Armenia"},{"value":"AZE","label":"Azerbaijan"},{"value":"KAZ","label":"Kazakhstan"},{"value":"MNG","label":"Mongolia"},{"value":"NPL","label":"Nepal"},{"value":"KHM","label":"Cambodia"},{"value":"LAO","label":"Laos"},{"value":"MMR","label":"Myanmar"},{"value":"BHR","label":"Bahrain"},{"value":"OMN","label":"Oman"},{"value":"JOR","label":"Jordan"},{"value":"LBN","label":"Lebanon"},{"value":"TUN","label":"Tunisia"},{"value":"DZA","label":"Algeria"},{"value":"GHA","label":"Ghana"},{"value":"TZA","label":"Tanzania"},{"value":"UGA","label":"Uganda"},{"value":"ZWE","label":"Zimbabwe"},{"value":"MUS","label":"Mauritius"},{"value":"FJI","label":"Fiji"},{"value":"PNG","label":"Papua New Guinea"}],"default":"USA","example":"GBR","value_pattern":"[A-Za-z]{3}","aliases":["shipping_destination","destination","ship_to_country","shipdest"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. The seller block is a business identity — shop name, city, country, rating and storefront link — and carries no address, phone number or e-mail, so nothing is withheld either way. Some AbeBooks sellers are one-person shops trading under a personal name; that name is the trading name the marketplace itself publishes.","on_invalid":"reject","default":false}],"returns":"offer{the full row, with seller.rating_percent instead of rating_stars, plus images[], size, weight}, book{synopsis, book_rating{value, count, best, about}, format, image}, seller_profile{name, url, founded, payment_accepted[]}, witnesses{schema_org_price, schema_org_currency, schema_org_availability, agrees_with_listing}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":32181107131}},{"name":"seller","description":"One bookseller: the profile the marketplace states for the shop plus a page of its live inventory and the shelves it organises that inventory into. Use it to size a dealer, to watch a competitor's stock, or to pull a whole specialist catalogue. Measured: seller 61505917 ('Orion Tech', Kingwood TX, 5 stars) publishes 198,392 listings.","required_params":["seller_id"],"optional_params":["query","condition","sort","page","per_page","currency","ship_to"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"A bookseller, by the id every row returns as `seller.id`. Returns the shop's profile as the marketplace states it plus a page of its inventory and its own shelves. Measured: seller 61505917 publishes 198,392 listings.","on_invalid":"reject","example":61505917,"minimum":1,"aliases":["vendor_id","vendor","seller","bookseller_id"]},{"name":"query","type":"string","required":false,"description":"Free text over the whole listing — title, author, publisher and the seller's own description. At least one of `query`, `title`, `author`, `publisher` or `isbn` is required, exactly as the source's own advanced search demands. Because it reaches the seller's description, it is also how you find the things only a bookseller writes: 'inscribed to', 'association copy', 'provenance', 'dust jacket chipped'.","on_invalid":"reject","example":"dune frank herbert","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,160}","aliases":["q","keyword","keywords","search","kn"]},{"name":"condition","type":"enum","required":false,"description":"Keep only copies in one of the source's own five condition BANDS. AbeBooks grades a copy on a nine-step ladder (New, As New, Fine, Near Fine, Very Good, Good, Fair, Poor, Unspecified) but it filters on bands, so these are the bands and the rows still carry the exact grade as `condition` plus the seller's own word for it as `seller_condition`. Note how large `unspecified` is (103,154 on one measured query): an antiquarian dealer often describes a copy in prose instead of picking a grade, and that prose is in `seller_note`.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New only (measured bite: 779,501 -> 450,004 listings)"},{"value":"as_new_fine","label":"As New, Fine or Near Fine — the collector band (-> 168,121)"},{"value":"very_good_good","label":"Very Good or Good (-> 51,586)"},{"value":"fair_poor","label":"Fair or Poor — reading copies (-> 6,633)"},{"value":"unspecified","label":"the seller graded nothing (-> 103,154)"}],"example":"as_new_fine","aliases":["conditions","grade","cond"]},{"name":"sort","type":"enum","required":false,"description":"Row order. All twelve of the source's own sorts are offered, and the one worth knowing about is `total_price_asc`: it sorts by price PLUS shipping to your destination, which on this marketplace routinely reorders the ladder completely.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the source's own ranking (its default)"},{"value":"price_asc","label":"cheapest BOOK price first — ignores shipping"},{"value":"price_desc","label":"most expensive book price first"},{"value":"total_price_asc","label":"cheapest book price PLUS shipping first — the one a buyer wants"},{"value":"newest","label":"most recently listed first"},{"value":"seller_rating_desc","label":"best-rated seller first"},{"value":"title_asc","label":"title A-Z"},{"value":"title_desc","label":"title Z-A"},{"value":"year_asc","label":"oldest publication year first"},{"value":"year_desc","label":"newest publication year first"},{"value":"author_asc","label":"author A-Z"},{"value":"author_desc","label":"author Z-A"}],"default":"relevance","example":"total_price_asc","aliases":["sort_by","order","sortby"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The source's result window is 1800 listings per query, so `page` x `per_page` must stay at or below that — at 50 per page the last readable page is 36. Past it the source answers HTTP 200 with an empty page that looks exactly like the end of the results (measured: a full page at offset 1,780, zero rows at 1,800, 2,000, 5,000, 10,000 and 20,000), which is why this is rejected here with the real maximum instead. Narrow with a filter to reach deeper.","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["p","page_number"]},{"name":"per_page","type":"integer","required":false,"description":"Listings per page, 1-100. The source renders its whole page per request, so a bigger page is cheaper per row but heavier per call: measured payloads are 430 KB at 10 rows, 742 KB at 30, 1.06 MB at 50 and 1.86 MB at 100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","ds","page_size"]},{"name":"currency","type":"enum","required":false,"description":"Which currency to quote every price and every shipping cost in. AbeBooks converts for you — a seller's own list currency is never published on this surface, so every number you get back is a conversion and every row says so. Only these twelve work: probing nineteen codes on 2026-10-08 found that JPY, MXN, TRY, ZAR, BRL and INR are answered in USD with HTTP 200 and no warning, so an unsupported code is rejected here instead of being silently re-priced. Measured on one listing in one minute: USD 2.20 / GBP 1.71 / EUR 2.02 / CAD 3.23 / CZK 49.23.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US dollar — the site's default"},{"value":"GBP","label":"pound sterling"},{"value":"EUR","label":"euro"},{"value":"CAD","label":"Canadian dollar"},{"value":"AUD","label":"Australian dollar"},{"value":"CHF","label":"Swiss franc"},{"value":"DKK","label":"Danish krone"},{"value":"SEK","label":"Swedish krona"},{"value":"NOK","label":"Norwegian krone"},{"value":"NZD","label":"New Zealand dollar"},{"value":"PLN","label":"Polish zloty"},{"value":"CZK","label":"Czech koruna"}],"default":"USD","example":"GBP","aliases":["curr","cur","price_currency"]},{"name":"ship_to","type":"enum","required":false,"description":"🔴 THE MOST IMPORTANT PARAMETER ON THIS API. Shipping is quoted per destination, and AbeBooks guesses the destination from the caller's own network when nothing pins it — so this engine always pins it and always tells you which one it used. Measured on ONE listing in ONE minute, book price USD 2.20 throughout: shipping was USD 4.69 to the U.S.A., 40.00 to the United Kingdom, 35.00 to Turkey, 45.00 to Japan and 45.00 to Australia. On that listing the cheapest shipping is DOUBLE the price of the book, which is why `price` and `shipping_price` are separate fields and `total_price` is the one to sort on. ISO-3166 alpha-3; 107 codes were confirmed accepted by the source's own echo, and an unknown code is rejected here because the source answers it with the U.S.A. rate card and no warning.","on_invalid":"reject","allowed_values":[{"value":"USA","label":"U.S.A."},{"value":"GBR","label":"United Kingdom"},{"value":"CAN","label":"Canada"},{"value":"AUS","label":"Australia"},{"value":"NZL","label":"New Zealand"},{"value":"IRL","label":"Ireland"},{"value":"DEU","label":"Germany"},{"value":"FRA","label":"France"},{"value":"ITA","label":"Italy"},{"value":"ESP","label":"Spain"},{"value":"PRT","label":"Portugal"},{"value":"NLD","label":"Netherlands"},{"value":"BEL","label":"Belgium"},{"value":"LUX","label":"Luxembourg"},{"value":"CHE","label":"Switzerland"},{"value":"AUT","label":"Austria"},{"value":"DNK","label":"Denmark"},{"value":"SWE","label":"Sweden"},{"value":"NOR","label":"Norway"},{"value":"FIN","label":"Finland"},{"value":"ISL","label":"Iceland"},{"value":"POL","label":"Poland"},{"value":"CZE","label":"Czech Republic"},{"value":"SVK","label":"Slovakia"},{"value":"HUN","label":"Hungary"},{"value":"ROU","label":"Romania"},{"value":"BGR","label":"Bulgaria"},{"value":"GRC","label":"Greece"},{"value":"HRV","label":"Croatia"},{"value":"SVN","label":"Slovenia"},{"value":"EST","label":"Estonia"},{"value":"LVA","label":"Latvia"},{"value":"LTU","label":"Lithuania"},{"value":"MLT","label":"Malta"},{"value":"CYP","label":"Cyprus"},{"value":"TUR","label":"Turkey"},{"value":"RUS","label":"Russia"},{"value":"UKR","label":"Ukraine"},{"value":"ISR","label":"Israel"},{"value":"ARE","label":"United Arab Emirates"},{"value":"SAU","label":"Saudi Arabia"},{"value":"QAT","label":"Qatar"},{"value":"KWT","label":"Kuwait"},{"value":"ZAF","label":"South Africa"},{"value":"EGY","label":"Egypt"},{"value":"MAR","label":"Morocco"},{"value":"NGA","label":"Nigeria"},{"value":"KEN","label":"Kenya"},{"value":"IND","label":"India"},{"value":"PAK","label":"Pakistan"},{"value":"BGD","label":"Bangladesh"},{"value":"LKA","label":"Sri Lanka"},{"value":"CHN","label":"China"},{"value":"HKG","label":"Hong Kong"},{"value":"TWN","label":"Taiwan"},{"value":"JPN","label":"Japan"},{"value":"KOR","label":"Korea, Republic of"},{"value":"SGP","label":"Singapore"},{"value":"MYS","label":"Malaysia"},{"value":"THA","label":"Thailand"},{"value":"VNM","label":"Viet Nam"},{"value":"IDN","label":"Indonesia"},{"value":"PHL","label":"Philippines"},{"value":"MEX","label":"Mexico"},{"value":"BRA","label":"Brazil"},{"value":"ARG","label":"Argentina"},{"value":"CHL","label":"Chile"},{"value":"COL","label":"Colombia"},{"value":"PER","label":"Peru"},{"value":"URY","label":"Uruguay"},{"value":"CRI","label":"Costa Rica"},{"value":"PAN","label":"Panama"},{"value":"JAM","label":"Jamaica"},{"value":"BRB","label":"Barbados"},{"value":"TTO","label":"Trinidad and Tobago"},{"value":"VEN","label":"Venezuela"},{"value":"ECU","label":"Ecuador"},{"value":"BOL","label":"Bolivia"},{"value":"PRY","label":"Paraguay"},{"value":"GTM","label":"Guatemala"},{"value":"SRB","label":"Serbia"},{"value":"BIH","label":"Bosnia and Herzegovina"},{"value":"MKD","label":"North Macedonia"},{"value":"ALB","label":"Albania"},{"value":"MDA","label":"Moldova"},{"value":"GEO","label":"Georgia"},{"value":"ARM","label":"Armenia"},{"value":"AZE","label":"Azerbaijan"},{"value":"KAZ","label":"Kazakhstan"},{"value":"MNG","label":"Mongolia"},{"value":"NPL","label":"Nepal"},{"value":"KHM","label":"Cambodia"},{"value":"LAO","label":"Laos"},{"value":"MMR","label":"Myanmar"},{"value":"BHR","label":"Bahrain"},{"value":"OMN","label":"Oman"},{"value":"JOR","label":"Jordan"},{"value":"LBN","label":"Lebanon"},{"value":"TUN","label":"Tunisia"},{"value":"DZA","label":"Algeria"},{"value":"GHA","label":"Ghana"},{"value":"TZA","label":"Tanzania"},{"value":"UGA","label":"Uganda"},{"value":"ZWE","label":"Zimbabwe"},{"value":"MUS","label":"Mauritius"},{"value":"FJI","label":"Fiji"},{"value":"PNG","label":"Papua New Guinea"}],"default":"USA","example":"GBR","value_pattern":"[A-Za-z]{3}","aliases":["shipping_destination","destination","ship_to_country","shipdest"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. The seller block is a business identity — shop name, city, country, rating and storefront link — and carries no address, phone number or e-mail, so nothing is withheld either way. Some AbeBooks sellers are one-person shops trading under a personal name; that name is the trading name the marketplace itself publishes.","on_invalid":"reject","default":false}],"returns":"seller{id, name, city, state, country, country_name, rating_stars, rating_scale, storefront_url, contact_url, associations[], catalogs[]}, listings[]{listing_id, seller_sku, url, copies_available, title, author, authors[], illustrator, publisher, publish_year, edition, binding, binding_class, language, language_name, isbn13, isbn10, isbn_missing, barcode_ean (only when the code is not a Bookland ISBN), product_type, condition, condition_label, condition_rank, seller_condition, seller_note, jacket, jacket_condition, inscription, price, price_missing, shipping_price, free_shipping, total_price, currency, currency_symbol, ships_to, ships_to_country, shipping_options[]{price, currency, min_delivery_days, max_delivery_days}, is_first_edition, is_signed, is_inscribed, has_dust_jacket, is_rare, is_print_on_demand, has_seller_photos, attribute_codes[], images[], image_is_sellers_own, catalog_image, seller{id, name, city, state, country, country_name, rating_stars, rating_scale, storefront_url, contact_url, associations[], catalogs[]}, series{id, title, position, books_in_series, url}, listing_params{listing_id}}, summary{price ladder on this page} + meta{total_listings, total_is_estimate, page, per_page, max_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"seller_id":61505917,"per_page":20}},{"name":"isbn","description":"Up to 6 ISBNs in one call, each answered with the market summary a pricing job needs: how many sellers have it, the cheapest book price, the cheapest LANDED price including shipping to your destination, the price range, the condition spread, how many copies are new, signed or first editions, and a link to the cheapest copy. Your order is kept and the ISBNs nobody is offering are named.","required_params":["isbns"],"optional_params":["currency","ship_to"],"params":[{"name":"isbns","type":"array","required":true,"description":"Up to 6 ISBNs in ONE call, ISBN-13 or ISBN-10 mixed freely. For each one you get the number of sellers offering it, the cheapest book price, the cheapest price INCLUDING shipping to your destination, the price range, the condition spread and a link to the cheapest copy — the shape a repricing or buy-box job actually needs. Your order is preserved and ISBNs with no offer are named. Each ISBN costs one upstream request, so this is capped deliberately.","on_invalid":"reject","example":["9780441172719","9780140449136","0141182636"],"aliases":["isbn","isbn_list","barcodes"]},{"name":"currency","type":"enum","required":false,"description":"Which currency to quote every price and every shipping cost in. AbeBooks converts for you — a seller's own list currency is never published on this surface, so every number you get back is a conversion and every row says so. Only these twelve work: probing nineteen codes on 2026-10-08 found that JPY, MXN, TRY, ZAR, BRL and INR are answered in USD with HTTP 200 and no warning, so an unsupported code is rejected here instead of being silently re-priced. Measured on one listing in one minute: USD 2.20 / GBP 1.71 / EUR 2.02 / CAD 3.23 / CZK 49.23.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US dollar — the site's default"},{"value":"GBP","label":"pound sterling"},{"value":"EUR","label":"euro"},{"value":"CAD","label":"Canadian dollar"},{"value":"AUD","label":"Australian dollar"},{"value":"CHF","label":"Swiss franc"},{"value":"DKK","label":"Danish krone"},{"value":"SEK","label":"Swedish krona"},{"value":"NOK","label":"Norwegian krone"},{"value":"NZD","label":"New Zealand dollar"},{"value":"PLN","label":"Polish zloty"},{"value":"CZK","label":"Czech koruna"}],"default":"USD","example":"GBP","aliases":["curr","cur","price_currency"]},{"name":"ship_to","type":"enum","required":false,"description":"🔴 THE MOST IMPORTANT PARAMETER ON THIS API. Shipping is quoted per destination, and AbeBooks guesses the destination from the caller's own network when nothing pins it — so this engine always pins it and always tells you which one it used. Measured on ONE listing in ONE minute, book price USD 2.20 throughout: shipping was USD 4.69 to the U.S.A., 40.00 to the United Kingdom, 35.00 to Turkey, 45.00 to Japan and 45.00 to Australia. On that listing the cheapest shipping is DOUBLE the price of the book, which is why `price` and `shipping_price` are separate fields and `total_price` is the one to sort on. ISO-3166 alpha-3; 107 codes were confirmed accepted by the source's own echo, and an unknown code is rejected here because the source answers it with the U.S.A. rate card and no warning.","on_invalid":"reject","allowed_values":[{"value":"USA","label":"U.S.A."},{"value":"GBR","label":"United Kingdom"},{"value":"CAN","label":"Canada"},{"value":"AUS","label":"Australia"},{"value":"NZL","label":"New Zealand"},{"value":"IRL","label":"Ireland"},{"value":"DEU","label":"Germany"},{"value":"FRA","label":"France"},{"value":"ITA","label":"Italy"},{"value":"ESP","label":"Spain"},{"value":"PRT","label":"Portugal"},{"value":"NLD","label":"Netherlands"},{"value":"BEL","label":"Belgium"},{"value":"LUX","label":"Luxembourg"},{"value":"CHE","label":"Switzerland"},{"value":"AUT","label":"Austria"},{"value":"DNK","label":"Denmark"},{"value":"SWE","label":"Sweden"},{"value":"NOR","label":"Norway"},{"value":"FIN","label":"Finland"},{"value":"ISL","label":"Iceland"},{"value":"POL","label":"Poland"},{"value":"CZE","label":"Czech Republic"},{"value":"SVK","label":"Slovakia"},{"value":"HUN","label":"Hungary"},{"value":"ROU","label":"Romania"},{"value":"BGR","label":"Bulgaria"},{"value":"GRC","label":"Greece"},{"value":"HRV","label":"Croatia"},{"value":"SVN","label":"Slovenia"},{"value":"EST","label":"Estonia"},{"value":"LVA","label":"Latvia"},{"value":"LTU","label":"Lithuania"},{"value":"MLT","label":"Malta"},{"value":"CYP","label":"Cyprus"},{"value":"TUR","label":"Turkey"},{"value":"RUS","label":"Russia"},{"value":"UKR","label":"Ukraine"},{"value":"ISR","label":"Israel"},{"value":"ARE","label":"United Arab Emirates"},{"value":"SAU","label":"Saudi Arabia"},{"value":"QAT","label":"Qatar"},{"value":"KWT","label":"Kuwait"},{"value":"ZAF","label":"South Africa"},{"value":"EGY","label":"Egypt"},{"value":"MAR","label":"Morocco"},{"value":"NGA","label":"Nigeria"},{"value":"KEN","label":"Kenya"},{"value":"IND","label":"India"},{"value":"PAK","label":"Pakistan"},{"value":"BGD","label":"Bangladesh"},{"value":"LKA","label":"Sri Lanka"},{"value":"CHN","label":"China"},{"value":"HKG","label":"Hong Kong"},{"value":"TWN","label":"Taiwan"},{"value":"JPN","label":"Japan"},{"value":"KOR","label":"Korea, Republic of"},{"value":"SGP","label":"Singapore"},{"value":"MYS","label":"Malaysia"},{"value":"THA","label":"Thailand"},{"value":"VNM","label":"Viet Nam"},{"value":"IDN","label":"Indonesia"},{"value":"PHL","label":"Philippines"},{"value":"MEX","label":"Mexico"},{"value":"BRA","label":"Brazil"},{"value":"ARG","label":"Argentina"},{"value":"CHL","label":"Chile"},{"value":"COL","label":"Colombia"},{"value":"PER","label":"Peru"},{"value":"URY","label":"Uruguay"},{"value":"CRI","label":"Costa Rica"},{"value":"PAN","label":"Panama"},{"value":"JAM","label":"Jamaica"},{"value":"BRB","label":"Barbados"},{"value":"TTO","label":"Trinidad and Tobago"},{"value":"VEN","label":"Venezuela"},{"value":"ECU","label":"Ecuador"},{"value":"BOL","label":"Bolivia"},{"value":"PRY","label":"Paraguay"},{"value":"GTM","label":"Guatemala"},{"value":"SRB","label":"Serbia"},{"value":"BIH","label":"Bosnia and Herzegovina"},{"value":"MKD","label":"North Macedonia"},{"value":"ALB","label":"Albania"},{"value":"MDA","label":"Moldova"},{"value":"GEO","label":"Georgia"},{"value":"ARM","label":"Armenia"},{"value":"AZE","label":"Azerbaijan"},{"value":"KAZ","label":"Kazakhstan"},{"value":"MNG","label":"Mongolia"},{"value":"NPL","label":"Nepal"},{"value":"KHM","label":"Cambodia"},{"value":"LAO","label":"Laos"},{"value":"MMR","label":"Myanmar"},{"value":"BHR","label":"Bahrain"},{"value":"OMN","label":"Oman"},{"value":"JOR","label":"Jordan"},{"value":"LBN","label":"Lebanon"},{"value":"TUN","label":"Tunisia"},{"value":"DZA","label":"Algeria"},{"value":"GHA","label":"Ghana"},{"value":"TZA","label":"Tanzania"},{"value":"UGA","label":"Uganda"},{"value":"ZWE","label":"Zimbabwe"},{"value":"MUS","label":"Mauritius"},{"value":"FJI","label":"Fiji"},{"value":"PNG","label":"Papua New Guinea"}],"default":"USA","example":"GBR","value_pattern":"[A-Za-z]{3}","aliases":["shipping_destination","destination","ship_to_country","shipdest"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. The seller block is a business identity — shop name, city, country, rating and storefront link — and carries no address, phone number or e-mail, so nothing is withheld either way. Some AbeBooks sellers are one-person shops trading under a personal name; that name is the trading name the marketplace itself publishes.","on_invalid":"reject","default":false}],"returns":"books[]{isbn13, isbn10, found, offer_count, total_is_estimate, cheapest{price, shipping_price, total_price, condition, seller, listing_id, url}, cheapest_total{same shape}, price_range, total_price_range, conditions{}, new_offers, signed_offers, first_edition_offers, free_shipping_offers, book{bibliographic record}}, not_found[] + meta{requested, found, currency, ship_to}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"isbns":["9780441172719","9780140449136","0141182636"],"currency":"USD","ship_to":"USA"}},{"name":"filters","description":"The refinement vocabulary this marketplace actually has, with the exact tokens every filter accepts. Read this instead of guessing. It also states, in writing, the two things AbeBooks does NOT publish: there is no subject or category tree (its search returns no facets at all — `contextualFacets` was empty on every query measured, and `subject=` was tried and does not bite), and there are no facet counts, so no filter here can tell you how many listings it will match before you run it. Answered from measurement, with no upstream call, so it costs nothing and never fails.","required_params":[],"optional_params":[],"params":[{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. The seller block is a business identity — shop name, city, country, rating and storefront link — and carries no address, phone number or e-mail, so nothing is withheld either way. Some AbeBooks sellers are one-person shops trading under a personal name; that name is the trading name the marketplace itself publishes.","on_invalid":"reject","default":false}],"returns":"conditions[], condition_grades[], product_types[], bindings[], seller_countries[], seller_regions[], languages[], currencies[], shipping_destinations[], sorts[], listed_within[], collectible_flags[], seller_associations[], limits{result_window, max_per_page, max_isbns}, not_published{category_tree, facet_counts, seller_own_currency, seller_feedback_count}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"aboutyou","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"About You API scraper — aboutyou.de fashion shop: keyword search, category listings with brand and sale filters, and full product cards (price, struck price, per-size stock and seller, colour variants, attributes). No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/aboutyou/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search over the aboutyou.de catalogue in one shop section (women / men / kids), up to 100 rows a call (when the site sends the words to a brand or category page, that page's ~30 rows), with next_cursor for the next rows.","required_params":["query"],"optional_params":["gender","limit","cursor"],"params":[{"name":"query","type":"string","required":true,"description":"Search words in German or English (brand names work: 'nike air max'). The site sends some words straight to a brand or category page; the answer then says so in `resolved_to` and lists that page.","on_invalid":"reject","example":"rotes kleid","aliases":["q","keyword","term"]},{"name":"gender","type":"enum","required":false,"description":"Shop section the search runs in (the site's target group).","on_invalid":"reject","allowed_values":[{"value":"women","label":"Women"},{"value":"men","label":"Men"},{"value":"kids","label":"Kids"}],"default":"women","example":"women"},{"name":"limit","type":"integer","required":false,"description":"Rows to return, 1-100.","on_invalid":"reject","default":32,"example":32,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Continuation token from a previous search answer (`next_cursor`) to get the next rows. Use together with the same query and gender.","on_invalid":"reject","example":""}],"returns":"results[{position, product_id, title, brand, brand_id, url, price (shelf price, sale included, no coupon), original_price, discount_percent, coupon_price (only with a code), price_without_tax, currency, has_different_prices, sizes_available[], colour_variant_ids[], is_sponsored, is_sold_out, badges[], image}], count, query, gender, resolved_to (brand/category page the site sent the words to, else null), next_cursor, has_more, total_results (only when the site redirects to a listing; semantic search publishes no total)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"rotes kleid","gender":"women","limit":32}},{"name":"category","description":"One About You category, about 30 product tiles a page, with the brand and sale filters, plus the category's own facets: brands with product counts, colours with counts and the price range. Pass next_cursor back as cursor for the next rows (filters are carried by the cursor).","required_params":["category_id"],"optional_params":["brand","on_sale","cursor"],"params":[{"name":"category_id","type":"integer","required":true,"description":"About You category id: the number at the end of a /c/… URL (20258 = women's jeans, 20207 = women's shoes, 20202 = men).","on_invalid":"reject","example":20258,"aliases":["category"]},{"name":"brand","type":"string","required":false,"description":"Brand filter as `<slug>-<brand_id>` (the `filter_value` of a row in `brands`, e.g. levi-s-226). One brand per call.","on_invalid":"reject","example":"levi-s-226","aliases":["brand_filter"]},{"name":"on_sale","type":"boolean","required":false,"description":"true = only reduced items (the site's Sale filter).","on_invalid":"reject","example":true,"aliases":["sale"]},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from a previous category answer: returns the next rows of the same listing with the same filters (the cursor carries them).","on_invalid":"reject","example":""}],"returns":"results[{position, product_id, title, brand, brand_id, url, price (shelf price, sale included, no coupon), original_price, discount_percent, coupon_price (only with a code), price_without_tax, currency, has_different_prices, sizes_available[], colour_variant_ids[], is_sponsored, is_sold_out, badges[], image}], count, total_results (the source's own count, first page only), next_cursor, has_more, rows_before (continuation pages), category{id, name, url}, applied_filters, brands[{brand_id, name, slug, product_count, filter_value}], colours[{colour_id, name, product_count}], price_range{min, max, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":20258}},{"name":"product","description":"One full About You product card: title, brand, colour, price and struck price, every size with its stock quantity, article number and seller, colour variants, attributes, breadcrumbs and images.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"integer","required":true,"description":"About You product id (the number at the end of a /p/… URL, or product_id from search / category rows).","on_invalid":"reject","example":32191359,"aliases":["id"]}],"returns":"product{product_id, title, brand, brand_id, brand_url, url, master_key, colour, colour_ids[], price, original_price, discount_percent, coupon_price, price_without_tax, currency, has_different_prices, lowest_prior_price_hint, available, stock_quantity, sizes[{size_id, size, vendor_size, article_number, stock_quantity, available, price, original_price, low_stock_hint, seller, seller_text}], sellers[], sold_by_about_you, is_new, is_premium, is_sponsored, is_second_hand, is_exclusive, attributes[{group, values[]}], colour_variants[{product_id, colour, url, is_sold_out}], breadcrumbs[{category_id, name, url}], images[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":32191359}}]},{"name":"academic","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Academic Papers API — search scholarly papers, authors, citations, institutions and journals across OpenAlex, arXiv and Crossref (abstracts, DOIs, open-access PDFs)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/academic/v1","spec_available":true,"actions":[{"name":"search","description":"search papers (source=openalex|arxiv|crossref|all; cursor pagination, year/OA/type filters, match=title, fulltext=; first-class author_id/venue_id/institution_id/concept_id/topic_id filters for papers BY an entity)","required_params":["query"],"optional_params":["source","per_page","cursor","filter","sort","from_year","to_year","open_access","type","match","category","include_abstract","fulltext","author_id","venue_id","institution_id","concept_id","topic_id"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query.","on_invalid":"reject","example":"covid","aliases":["q"]},{"name":"source","type":"enum","required":false,"description":"Which backend(s) to search. Unknown values are rejected.","on_invalid":"reject","allowed_values":[{"value":"openalex","label":"OpenAlex (default, CC0)"},{"value":"arxiv","label":"arXiv preprints"},{"value":"crossref","label":"Crossref DOI metadata"},{"value":"all","label":"Merge all three (DOI-deduped)"}],"default":"openalex","example":"openalex"},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-200, default 25); clamped.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200,"aliases":["limit"]},{"name":"cursor","type":"string","required":false,"description":"OpenAlex cursor for deep pagination (use '*' for the first page, then meta.next_cursor).","on_invalid":"reject","example":"*"},{"name":"filter","type":"string","required":false,"description":"Advanced: raw OpenAlex (or Crossref) filter string, appended verbatim.","on_invalid":"reject","example":"is_oa:true"},{"name":"sort","type":"string","required":false,"description":"Sort key. OpenAlex accepts keys like cited_by_count:desc / publication_date:desc; arXiv accepts 'date'.","on_invalid":"reject","example":"cited_by_count:desc"},{"name":"from_year","type":"integer","required":false,"description":"Filter to papers published on or after this year.","on_invalid":"ignore","example":2019},{"name":"to_year","type":"integer","required":false,"description":"Filter to papers published on or before this year.","on_invalid":"ignore","example":2024},{"name":"open_access","type":"boolean","required":false,"description":"If true, restrict to open-access works (is_oa:true).","on_invalid":"ignore","default":false,"example":true},{"name":"type","type":"string","required":false,"description":"OpenAlex work type filter (e.g. article, book-chapter, dataset); passed through.","on_invalid":"reject","example":"article"},{"name":"match","type":"boolean","required":false,"description":"If true, closest-title match (title.search) instead of relevance search (OpenAlex source only).","on_invalid":"ignore","default":false,"example":false},{"name":"category","type":"string","required":false,"description":"arXiv subject category (source=arxiv); can stand in for `query`.","on_invalid":"reject","example":"cs.LG"},{"name":"include_abstract","type":"boolean","required":false,"description":"Include reconstructed abstracts in search results (default true).","on_invalid":"ignore","default":true,"example":true},{"name":"fulltext","type":"string","required":false,"description":"Full-text search within the paper body (OpenAlex fulltext.search).","on_invalid":"reject","example":"transformer architecture"},{"name":"start","type":"integer","required":false,"description":"arXiv offset pagination (0-10000); clamped.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":10000},{"name":"offset","type":"integer","required":false,"description":"Crossref offset pagination (0-10000); clamped.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":10000},{"name":"author_id","type":"string","required":false,"description":"Restrict to papers by this OpenAlex author id (filter=author.id:…). A convenience over the raw `filter` string.","on_invalid":"ignore","example":"A5023888391"},{"name":"venue_id","type":"string","required":false,"description":"Restrict to papers by this OpenAlex venue/source id (filter=primary_location.source.id:…). A convenience over the raw `filter` string.","on_invalid":"ignore","example":"S137773608"},{"name":"institution_id","type":"string","required":false,"description":"Restrict to papers by this OpenAlex institution id (filter=institutions.id:…). A convenience over the raw `filter` string.","on_invalid":"ignore","example":"I97018004"},{"name":"concept_id","type":"string","required":false,"description":"Restrict to papers by this OpenAlex concept id (filter=concepts.id:…). A convenience over the raw `filter` string.","on_invalid":"ignore","example":"C41008148"},{"name":"topic_id","type":"string","required":false,"description":"Restrict to papers by this OpenAlex topic id (filter=topics.id:…). A convenience over the raw `filter` string.","on_invalid":"ignore","example":"T10017"}],"returns":"results[] (title, doi, authors[], venue, year, cited_by_count, abstract, oa_pdf, sources_merged), count, next_cursor, source","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"covid"}},{"name":"paper_detail","description":"full paper (abstract/authors/affiliations/venue/year/DOI/OA-PDF/fields); id=OpenAlex|DOI|arXiv|PMID; cross-source abstract gap-fill","required_params":["id"],"optional_params":["enrich","raw","fill_abstract"],"params":[{"name":"id","type":"string","required":true,"description":"Paper id — OpenAlex id (W…), OR DOI (10.…), OR arXiv id, OR PMID.","on_invalid":"reject","example":"W3177828909","aliases":["doi","paper_id"]},{"name":"enrich","type":"boolean","required":false,"description":"Pull extra Crossref metadata (funders/license/references flag) for the paper.","on_invalid":"ignore","default":false,"example":true},{"name":"raw","type":"boolean","required":false,"description":"Attach the raw OpenAlex record under paper._raw_openalex.","on_invalid":"ignore","default":false,"example":false},{"name":"fill_abstract","type":"boolean","required":false,"description":"Gap-fill a missing OpenAlex abstract from arXiv/Crossref (default true).","on_invalid":"ignore","default":true,"example":true}],"returns":"paper{} — title, abstract, authors[]+affiliations, venue, year, doi, oa_pdf, fields, cited_by_count, sources_merged","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"W3177828909"}},{"name":"citations","description":"papers that cite this work (cursor-paginated)","required_params":["id"],"optional_params":["per_page","cursor"],"params":[{"name":"id","type":"string","required":true,"description":"Paper id — OpenAlex id (W…), OR DOI (10.…), OR arXiv id, OR PMID.","on_invalid":"reject","example":"W3177828909","aliases":["doi","paper_id"]},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-200, default 25); clamped.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200,"aliases":["limit"]},{"name":"cursor","type":"string","required":false,"description":"OpenAlex cursor for deep pagination (use '*' for the first page, then meta.next_cursor).","on_invalid":"reject","example":"*"}],"returns":"results[] (citing papers: id, title, year, …), count, next_cursor, cited_paper_id","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"W3009885589"}},{"name":"references","description":"works this paper references (hydrated)","required_params":["id"],"optional_params":["limit"],"params":[{"name":"id","type":"string","required":true,"description":"Paper id — OpenAlex id (W…), OR DOI (10.…), OR arXiv id, OR PMID.","on_invalid":"reject","example":"W3177828909","aliases":["doi","paper_id"]},{"name":"limit","type":"integer","required":false,"description":"Max records (1-200, default 50); clamped.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":200}],"returns":"results[] (referenced papers, hydrated), count, referenced_works_count, paper_id, stop_reason","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"W3009885589"}},{"name":"related","description":"OpenAlex-curated related works for a paper (co-cited / topically-adjacent), hydrated","required_params":["id"],"optional_params":["limit"],"params":[{"name":"id","type":"string","required":true,"description":"Paper id — OpenAlex id (W…), OR DOI (10.…), OR arXiv id, OR PMID.","on_invalid":"reject","example":"W3177828909","aliases":["doi","paper_id"]},{"name":"limit","type":"integer","required":false,"description":"Max records (1-200, default 25); clamped.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200}],"returns":"results[] (related papers, hydrated), count, related_works_count, paper_id, stop_reason","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"W3177828909"}},{"name":"author","description":"author search (query) or profile (id): works_count, h-index, affiliations; include_works for top papers","required_params":[],"optional_params":["id","query","include_works","works_limit","per_page"],"params":[{"name":"id","type":"string","required":false,"description":"OpenAlex author id for a profile. Supply `id` OR a `query`/`name`.","on_invalid":"reject","example":"A5023888391"},{"name":"query","type":"string","required":false,"description":"Search text → ranked list. Supply this OR `id`.","on_invalid":"reject","example":"stanford","aliases":["name"]},{"name":"include_works","type":"boolean","required":false,"description":"Profile only: also return the author's top works (highest-cited first).","on_invalid":"ignore","default":false,"example":true},{"name":"works_limit","type":"integer","required":false,"description":"Max top works when include_works=true (1-200).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-200, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":200,"aliases":["limit"]}],"returns":"profile: author{name,works_count,h_index,affiliations,top_works[]}; OR search: results[] (name, h_index, works_count), count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"yoshua bengio"}},{"name":"institution","description":"institution search/profile: ROR, country, geo, works/citation counts, h-index; include_works for the org's papers","required_params":[],"optional_params":["id","query","per_page","include_works","works_limit"],"params":[{"name":"id","type":"string","required":false,"description":"OpenAlex institution id for a profile. Supply `id` OR a `query`/`name`.","on_invalid":"reject","example":"I97018004"},{"name":"query","type":"string","required":false,"description":"Search text → ranked list. Supply this OR `id`.","on_invalid":"reject","example":"stanford","aliases":["name"]},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-200, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":200,"aliases":["limit"]},{"name":"include_works","type":"boolean","required":false,"description":"Profile only: also return the institution's top works (highest-cited first).","on_invalid":"ignore","default":false,"example":true},{"name":"works_limit","type":"integer","required":false,"description":"Max top works when include_works=true (1-200).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200}],"returns":"profile: institution{name,ror,country_code,geo,works_count,h_index,type,top_works[]?}; OR search: results[] (name, country_code, works_count), count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"stanford"}},{"name":"venue","description":"journal/venue search/profile: ISSN, publisher, OA/DOAJ, h-index, works/citation counts; include_works for the venue's papers","required_params":[],"optional_params":["id","query","per_page","include_works","works_limit"],"params":[{"name":"id","type":"string","required":false,"description":"OpenAlex venue/source id for a profile. Supply `id` OR a `query`/`name`.","on_invalid":"reject","example":"S137773608"},{"name":"query","type":"string","required":false,"description":"Search text → ranked list. Supply this OR `id`.","on_invalid":"reject","example":"stanford","aliases":["name"]},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-200, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":200,"aliases":["limit"]},{"name":"include_works","type":"boolean","required":false,"description":"Profile only: also return the venue's top works (highest-cited first).","on_invalid":"ignore","default":false,"example":true},{"name":"works_limit","type":"integer","required":false,"description":"Max top works when include_works=true (1-200).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200}],"returns":"profile: venue{name,issn_l,publisher,is_oa,is_in_doaj,h_index,works_count,top_works[]?}; OR search: results[] (name, issn_l), count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nature"}},{"name":"concept","description":"concept search (query) or profile (id): level, works/citation counts, description; include_works for papers. NOTE: OpenAlex froze the Concepts dataset (ancestors/related now empty) — use `topic` for the live subject hierarchy","required_params":[],"optional_params":["id","query","per_page","include_works","works_limit"],"params":[{"name":"id","type":"string","required":false,"description":"OpenAlex concept id for a profile. Supply `id` OR a `query`/`name`.","on_invalid":"reject","example":"C41008148"},{"name":"query","type":"string","required":false,"description":"Search text → ranked list. Supply this OR `id`.","on_invalid":"reject","example":"stanford","aliases":["name"]},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-200, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":200,"aliases":["limit"]},{"name":"include_works","type":"boolean","required":false,"description":"Profile only: also return the concept's top works (highest-cited first).","on_invalid":"ignore","default":false,"example":true},{"name":"works_limit","type":"integer","required":false,"description":"Max top works when include_works=true (1-200).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200}],"returns":"profile: concept{name,level,works_count,cited_by_count,description,wikidata,ancestors[],related_concepts[],top_works[]?}; OR search: results[] (name, level), count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"machine learning"}},{"name":"topic","description":"topic search (query) or profile (id): domain>field>subfield hierarchy, keywords, siblings, works/citation counts; include_works for papers (the live replacement for Concepts)","required_params":[],"optional_params":["id","query","per_page","include_works","works_limit"],"params":[{"name":"id","type":"string","required":false,"description":"OpenAlex topic id for a profile. Supply `id` OR a `query`/`name`.","on_invalid":"reject","example":"T10017"},{"name":"query","type":"string","required":false,"description":"Search text → ranked list. Supply this OR `id`.","on_invalid":"reject","example":"stanford","aliases":["name"]},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-200, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":200,"aliases":["limit"]},{"name":"include_works","type":"boolean","required":false,"description":"Profile only: also return the topic's top works (highest-cited first).","on_invalid":"ignore","default":false,"example":true},{"name":"works_limit","type":"integer","required":false,"description":"Max top works when include_works=true (1-200).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200}],"returns":"profile: topic{name,description,works_count,cited_by_count,keywords[],domain,field,subfield,siblings[],top_works[]?}; OR search: results[] (name), count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"protein folding"}},{"name":"autocomplete","description":"fast typeahead suggestions (works/authors/sources/institutions)","required_params":["q"],"optional_params":["entity"],"params":[{"name":"q","type":"string","required":true,"description":"Typeahead prefix.","on_invalid":"reject","example":"deep learn","aliases":["query"]},{"name":"entity","type":"enum","required":false,"description":"Which entity type to autocomplete. An unknown value falls back to 'works'.","on_invalid":"ignore","allowed_values":[{"value":"works","label":"Works / papers (default)"},{"value":"authors","label":"Authors"},{"value":"sources","label":"Venues / journals"},{"value":"institutions","label":"Institutions"},{"value":"concepts","label":"Concepts"},{"value":"topics","label":"Topics"}],"default":"works","example":"works"}],"returns":"suggestions[] (title, id, hint), count, entity","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"deep learn"}},{"name":"batch","description":"hydrate up to 200 papers by id/DOI in one call (RAG/ETL)","required_params":["ids"],"optional_params":["include_abstract","limit"],"params":[{"name":"ids","type":"array","required":true,"description":"Up to 200 paper ids/DOIs to hydrate (list or comma-separated).","on_invalid":"reject","example":"W3177828909,10.1038/s41586-021-03819-2"},{"name":"include_abstract","type":"boolean","required":false,"description":"Include reconstructed abstracts in the hydrated rows (default false for batch).","on_invalid":"ignore","default":false,"example":true},{"name":"limit","type":"integer","required":false,"description":"Max records (1-200, default 100); clamped.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":200}],"returns":"results[] (hydrated papers), count, requested","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"ids":"W3177828909,10.1038/s41586-021-03819-2"}}]},{"name":"agent-source","category":{"id":"utilities","title":"Utilities & AI"},"title":"Source Verification API — verify a claim, find the official source, and look up or compare pricing for the sources AI agents cite","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/agent-source/v1","spec_available":true,"actions":[{"name":"source_url","description":"Inspect a public URL for source-reliability: reachability, canonical + full redirect chain, title/publisher/published+updated dates, language, official-likelihood, and a stale/archived (wayback) signal.","required_params":["url"],"optional_params":["check_archive","official_for"],"params":[{"name":"url","type":"string","required":true,"description":"Public source URL to inspect (scheme optional — https:// is added). Private/loopback/metadata hosts are rejected.","on_invalid":"reject","example":"https://openai.com/api/pricing/","aliases":["link","u"]},{"name":"check_archive","type":"boolean","required":false,"description":"Query the Wayback Machine for the latest snapshot (stale/archived signal). Default true.","on_invalid":"ignore","default":true,"example":true},{"name":"official_for","type":"string","required":false,"description":"If set, also score whether the final URL is OFFICIAL for this curated provider (domain match).","on_invalid":"ignore","example":"openai","aliases":["provider"]}],"returns":"url, final_url, final_domain, accessible, status_code, redirect{chain,hops,redirected,loop}, blocked, metadata{title,site_name,published_at,updated_at,lang,author,canonical,json_ld_types}, official{provider,is_official,reason}, freshness{updated_at,archive{available,closest,snapshot_url,age_days},staleness}, render_mode","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://openai.com/api/pricing/","official_for":"openai"}},{"name":"official_source","description":"Resolve the OFFICIAL URL a curated provider publishes for a given need (pricing/docs/changelog/status/legal/model_card) + why it is official (domain match + domain age via whois). Curated whitelist only.","required_params":["entity"],"optional_params":["need_type","verify"],"params":[{"name":"entity","type":"string","required":true,"description":"Provider/entity name (free text accepted: 'OpenAI', 'claude', 'gemini', 'grok'). Resolved against the curated whitelist — see the `providers` action for the supported set.","on_invalid":"reject","example":"OpenAI","aliases":["provider","name","q"]},{"name":"need_type","type":"string","required":false,"description":"Which official resource you need. Default 'docs'. Use 'all' to return every known official URL for the entity.","on_invalid":"reject","allowed_values":[{"value":"pricing","label":"Official pricing page"},{"value":"docs","label":"Developer/API documentation"},{"value":"changelog","label":"Release notes / changelog"},{"value":"status","label":"Status / uptime page"},{"value":"legal","label":"Terms / legal / policies"},{"value":"model_card","label":"Model catalog / model card"}],"default":"docs","example":"docs","aliases":["need","type","kind"]},{"name":"verify","type":"boolean","required":false,"description":"Also live-check the official URL is reachable (adds a url-resolver inner-call + latency).","on_invalid":"ignore","default":false,"example":false}],"returns":"entity, provider, matched, official_url, need_type, official_domains, why_official{domain_match,domain_age_days,registrar}, all_sources{}, (verify) reachable/final_url, disclaimer","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"entity":"OpenAI","need_type":"pricing"}},{"name":"verify_claim","description":"Check whether one or more public source URLs support a factual claim — returns supported, contradicted, not_found, or unclear, along with the matching evidence snippet and a confidence level. Uses exact quote and number matching against the live page content. A source-evidence checker, not a general truth oracle.","required_params":["claim","url"],"optional_params":["urls"],"params":[{"name":"claim","type":"string","required":true,"description":"The factual claim to check against the source(s). Keep it specific (a number/quote verifies best).","on_invalid":"reject","example":"Claude Opus 4.5 input is $5 per million tokens","aliases":["statement","q"]},{"name":"url","type":"string","required":true,"description":"Public source URL to inspect (scheme optional — https:// is added). Private/loopback/metadata hosts are rejected.","on_invalid":"reject","example":"https://openai.com/api/pricing/","aliases":["link","u"]},{"name":"urls","type":"array","required":false,"description":"Up to 5 source URLs (array or comma-list). Combined with `url`; the best-supporting verdict wins.","on_invalid":"ignore","example":["https://docs.claude.com/en/docs/about-claude/pricing"]}],"returns":"claim, verdict, confidence, method, per_source[{url,final_url,accessible,verdict,confidence,evidence[{type,matched/snippet}],token_coverage}], best_source, note","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"claim":"Claude Opus 4.5 costs $5 per million input tokens","url":"https://docs.claude.com/en/docs/about-claude/pricing"}},{"name":"pricing_lookup","description":"Current developer/LLM pricing for a curated provider, parsed live from the provider's own pricing page/API. Each row: model, input/output per-1M-token USD, source_url, last_seen_at, unit, currency, normalization_notes.","required_params":["provider"],"optional_params":["model","limit"],"params":[{"name":"provider","type":"string","required":true,"description":"Curated provider key (or any alias). Structured pricing is available for: openai, anthropic, gemini, xai, openrouter. aws/gcp/azure return official_source but no structured pricing (compute-SKU pages — see normalization_notes).","on_invalid":"ignore","allowed_values":[{"value":"openai","label":"OpenAI"},{"value":"anthropic","label":"Anthropic"},{"value":"gemini","label":"Google Gemini"},{"value":"xai","label":"xAI"},{"value":"openrouter","label":"OpenRouter"},{"value":"aws","label":"AWS (Bedrock)"},{"value":"gcp","label":"Google Cloud (Vertex AI)"},{"value":"azure","label":"Azure (Azure OpenAI)"}],"example":"anthropic","aliases":["entity","name"]},{"name":"model","type":"string","required":false,"description":"Optional model-name filter (substring, case-insensitive), e.g. 'gpt-4o', 'opus', 'gemini-2.5-flash', 'grok-4'.","on_invalid":"ignore","example":"opus","aliases":["model_filter","filter"]},{"name":"limit","type":"integer","required":false,"description":"Max model rows to return.","on_invalid":"ignore","default":40,"example":40,"minimum":1,"maximum":60}],"returns":"provider, source_url, last_seen_at, unit, currency, pricing_available, models[{model,input_per_1m_usd,output_per_1m_usd,...}], count, normalization_notes, parse_surface","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"provider":"openrouter","model":"claude"}},{"name":"pricing_compare","description":"Compare current pricing across several curated providers (optionally filtered to a model substring) → normalized per-1M-token USD, cheapest-first, each traceable to its source_url + last_seen_at.","required_params":["providers"],"optional_params":["model"],"params":[{"name":"providers","type":"array","required":true,"description":"Up to 6 curated providers (array or comma-list) from: openai, anthropic, gemini, xai, openrouter.","on_invalid":"reject","example":["openai","anthropic","gemini"],"aliases":["provider","list"]},{"name":"model","type":"string","required":false,"description":"Optional model-name filter (substring, case-insensitive), e.g. 'gpt-4o', 'opus', 'gemini-2.5-flash', 'grok-4'.","on_invalid":"ignore","example":"opus","aliases":["model_filter","filter"]}],"returns":"providers_requested, model_filter, rows[{provider,model,input_per_1m_usd,output_per_1m_usd,source_url,last_seen_at}], cheapest_input, cheapest_output, errors[], unit, currency","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"providers":["openai","anthropic","gemini"]}},{"name":"providers","description":"List the curated provider whitelist + each provider's capabilities (which need_types and structured pricing are supported) and parse-surface metadata. The honest denominator for official_source / pricing.","required_params":[],"optional_params":["provider"],"params":[{"name":"provider","type":"string","required":false,"description":"Optional: return only this provider's detail.","on_invalid":"ignore","example":"openai","aliases":["entity","name"]}],"returns":"providers[{key,display,primary_domain,official_domains,need_types,pricing_supported,parse_surface,sources{}}], count, pricing_supported_providers, whitelist_policy","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"provider":"openai"}}]},{"name":"agoda","category":{"id":"travel","title":"Travel & Lodging"},"title":"Agoda API scraper — hotel data, guest reviews & destination lookup: search destinations, browse a city's popular hotels, pull a hotel's full record (name, star rating, address, coordinates, facilities, policies, nearby places, FAQ) and paginated guest reviews (score, pros/cons, reviewer country, room type, owner replies) from Agoda.com across Asia-Pacific and worldwide — no API key required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/agoda/v1","spec_available":true,"actions":[{"name":"destinations","description":"Resolve a free-text place ('Bangkok', 'Tokyo', 'Maldives', an airport or a landmark) into Agoda's destination ids. Returns matched cities, areas, airports, points of interest and hotels with their object_id, type and (for cities) the city_id + hotel count. Use this first to get the city_id the city_browse action needs.","required_params":["query"],"optional_params":["language"],"params":[{"name":"query","type":"string","required":true,"description":"Place to look up — a city, area, airport, landmark or hotel name.","on_invalid":"reject","example":"Bangkok","aliases":["q","text"]},{"name":"language","type":"string","required":false,"description":"Agoda locale for result names (e.g. en-us, th-th, ja-jp, zh-cn). Defaults to en-us.","on_invalid":"ignore","default":"en-us","example":"en-us"}],"returns":"suggestions[]{object_id, object_type_id, type, name, city_id, country_id, hotel_count, is_hotel}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Bangkok"}},{"name":"city_browse","description":"Browse a city's popular hotels and accommodation themes. Returns ~100 popular hotels (name + Agoda detail URL), property-type theme links (apartments, hostels, resorts…) and the city's travel guides. Pass a numeric city_id from the destinations action.","required_params":["city_id"],"optional_params":["language"],"params":[{"name":"city_id","type":"integer","required":true,"description":"Agoda city id (from the destinations action — e.g. 9395=Bangkok). Routes the listing geographically.","on_invalid":"reject","example":9395},{"name":"language","type":"string","required":false,"description":"Agoda locale (en-us, th-th, ja-jp…).","on_invalid":"ignore","default":"en-us","example":"en-us"}],"returns":"hotels[]{name, url} (~100) + theme_links[]{name, url} + travel_guides[]{name, url} + place_of_interest","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"city_id":9395}},{"name":"detail","description":"Full hotel record by hotel_id (or hotel URL): name, accommodation type, star rating, full address + city/country, coordinates, description, facilities (grouped), policies, important notes, nearby places of interest and the property FAQ.","required_params":[],"optional_params":["hotel_id","url","language"],"params":[{"name":"hotel_id","type":"integer","required":false,"description":"Agoda hotel id (the number in a hotel page's data-hotel-id, also the hotel_id in detail responses). Provide hotel_id OR url.","on_invalid":"ignore","example":294217},{"name":"url","type":"string","required":false,"description":"Full Agoda hotel page URL (the engine extracts the hotel id from it). Use this when you have the hotel link but not the numeric id.","on_invalid":"ignore","example":"https://www.agoda.com/the-okura-prestige-bangkok/hotel/bangkok-th.html"},{"name":"language","type":"string","required":false,"description":"Agoda locale (en-us, th-th, ja-jp…).","on_invalid":"ignore","default":"en-us","example":"en-us"}],"returns":"hotel{hotel_id, name, accommodation_type, star_rating, address{full, area, city, city_id, country, postal_code}, description, facilities[]{group, features[]}, policies, important_notes, nearby_places[]{name, distance, latitude, longitude}, faq[]{question, answer}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"hotel_id":294217}},{"name":"reviews","description":"Paginated guest reviews for one hotel (70 per page): star rating, title, separate positive/negative text, review date, reviewer country, traveler type, room type and length of stay, the owner's reply and helpful votes. The response also carries the hotel's overall score and total review count. Page with `page` until meta.has_more is false.","required_params":[],"optional_params":["hotel_id","url","page","sort_by","language"],"params":[{"name":"hotel_id","type":"integer","required":false,"description":"Agoda hotel id (the number in a hotel page's data-hotel-id, also the hotel_id in detail responses). Provide hotel_id OR url.","on_invalid":"ignore","example":294217},{"name":"url","type":"string","required":false,"description":"Full Agoda hotel page URL (the engine extracts the hotel id from it). Use this when you have the hotel link but not the numeric id.","on_invalid":"ignore","example":"https://www.agoda.com/the-okura-prestige-bangkok/hotel/bangkok-th.html"},{"name":"page","type":"integer","required":false,"description":"Review page (70 reviews each). Page until meta.has_more is false; meta.total_pages tells you how many.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"sort_by","type":"string","required":false,"description":"Review order: newest (default), rating_high, rating_low or most_helpful.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Most recent"},{"value":"rating_high","label":"Rating, high to low"},{"value":"rating_low","label":"Rating, low to high"},{"value":"most_helpful","label":"Most helpful"}],"default":"newest","example":"newest"},{"name":"language","type":"string","required":false,"description":"Agoda locale (en-us, th-th, ja-jp…).","on_invalid":"ignore","default":"en-us","example":"en-us"}],"returns":"reviews[]{review_id, rating, rating_text, title, text, positive_text, negative_text, date, reviewer_name, reviewer_country, traveler_type, room_type, length_of_stay, owner_reply, helpful_votes, photo_count} + summary{overall_score, score_text, total_reviews} + meta{page, total_pages, has_more, next_page}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"per_unit","credits":1,"per":70,"min":1},"example_params":{"hotel_id":294217}}]},{"name":"agriaffaires","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Agriaffaires / MachineryZone API — live used agricultural and construction machinery marketplace data from Europe's biggest machinery classifieds group (MB Diffusion): tractors, harvesters, sprayers, balers, telehandlers on Agriaffaires and excavators, loaders, dumpers, cranes and forklifts on MachineryZone, across 43 national hosts and 25 languages that share ONE catalogue priced in one currency. Search and filter on the fields a dealer or a valuation desk works with — category, manufacturer, model, year of construction, hour meter, engine power, price band, seller country and region, professional or private — then pull one listing in full with every technical property the seller typed, its price cross-checked against the page's own schema.org data, and the dealer behind it. Plus the category tree, live facet counts, autocomplete, the 8,000-strong dealer directory and the marketplace's own PRICE OBSERVATORY: the minimum, maximum and average asking price for a make, model and year. No login, no API key.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/agriaffaires/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse either marketplace. Combine free text with the typed filters the source supports natively — category, manufacturer, model, advert type, year of construction, hour meter, price band, seller country, region and department, professional or private, with a photo, posted this week — and sort by price, year, hours, model, manufacturer or listing date. 50 rows a page. 🔴 Depth is capped by the source at 200 pages = 10,000 rows per query and page 201 silently serves page 1, so narrow rather than page; the filters are measured to bite hard (22,115 rows -> 6,787 by a year and price window -> 947 by one manufacturer).","required_params":[],"optional_params":["site","market","query","keyword","model","category_id","manufacturer","manufacturer_id","listing_type","year_min","year_max","year_known","operating_hours_min","operating_hours_max","operating_hours_known","price_min","price_max","with_price_only","country","region_id","department_id","postcode","radius_km","seller_type","has_photo","has_video","posted_within_week","flash_deal","sort","page","include_facets"],"params":[{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]},{"name":"query","type":"string","required":false,"description":"Free-text search across the whole listing (title, model and description), exactly as the site's own search box does it. Either `query` or `category_id` is the normal starting point. Use `keyword` instead for a narrower match: measured on the same minute, `query=tracteur` answered 33,908 and `keyword=tracteur` 7,905 — the keyword form is title/model-weighted while this one also matches the seller's prose.","on_invalid":"reject","example":"tracteur","aliases":["q","search_word"]},{"name":"keyword","type":"string","required":false,"description":"A narrower text match than `query` (the site's `search[keyword]` field). Measured: 7,905 rows for 'tracteur' where `query` gave 33,908, and it still reaches other categories (a lorry carrying a tractor matched), so it is a text filter, not a category filter.","on_invalid":"reject","example":"john deere"},{"name":"model","type":"string","required":false,"description":"The model designation as the seller typed it (the site's own `search[modele]` field). Combine with `manufacturer` for a comparable set; use `price_index` when what you want is the market price band for that make and model rather than the rows.","on_invalid":"reject","example":"6R195"},{"name":"category_id","type":"integer","required":false,"description":"The marketplace's own category (tree) id — 702 is the farm tractor, 802 the fertiliser spreader. The id is language- and brand-invariant (702 answers 'Tracteur agricole' on .com and 'Traktor' on .de), which is why it, and not a slug, is the handle. Get ids from `categories`, `facets` or `suggest`. 🔴 The source will not accept a category together with other filters in one request and answers 200 with zero rows if you try, so this engine sends it first and the rest afterwards — which costs one extra upstream request when you combine them.","on_invalid":"reject","example":702,"minimum":1,"aliases":["rubric_id","tree_id"]},{"name":"manufacturer","type":"string","required":false,"description":"Manufacturer by NAME, resolved live against the source's own facet list for your query, so a misspelling is a clear error with the real options rather than a silently wrong answer. 🔴 Resolving costs one extra upstream request (the engine has to read the facet panel first); pass `manufacturer_id` from `facets` if you already know it and want the cheaper call.","on_invalid":"reject","example":"John Deere","aliases":["make","brand"]},{"name":"manufacturer_id","type":"integer","required":false,"description":"Manufacturer by the source's own facet id, as `facets` publishes it (7607 = John Deere). These ids are GLOBAL rather than per-category — measured: an unfiltered result page publishes 1,004 of them and John Deere is 7607 there and on the tractor category page alike — so one taken from any `facets` call works anywhere. 🔴 It is NOT the same id space as the price observatory's make id for the same brand (4039 for John Deere), and the observatory answers an EMPTY result rather than an error when given the wrong one, so the two are never interchanged.","on_invalid":"reject","example":7607,"minimum":1},{"name":"listing_type","type":"enum","required":false,"description":"What kind of advert. Defaults to everything, which MIXES offers with 'wanted' adverts and auctions — pass `sale` if you only want machines actually on offer. Measured on one query: 32,797 for sale, 829 wanted, 179 auctions, 97 rentals. The four ids behind these names are identical on both brands and in every language.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Vente / Offre — a machine offered for sale (the overwhelming majority)"},{"value":"wanted","label":"Recherche — someone LOOKING FOR a machine, not offering one"},{"value":"auction","label":"Enchères — an auction lot; its price row is the OPENING BID"},{"value":"rental","label":"Location — offered for RENT, and its figure is a HIRE RATE rather than a price. Measured: two rental tractors carry 259 and 170, their spec tables carry a price-per-hour row, a price-per-day row and a deposit row and NO sale-price row, and adding `with_price_only` to a rental query drops it from 60 rows to 0 — the source's own sale-price field is empty on every one of them. So a rental row publishes `rental_price` and leaves `price` null. 97 of 33,000 adverts on one measured query."}],"example":"sale"},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. 🔴 A YEAR, not a timestamp: this source takes 2015 and the filter bites (33,942 -> 24,718). A unix timestamp is ACCEPTED and answers 7,786 rows of nonsense, so the engine rejects anything that is not a plausible year instead of forwarding it.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive.","on_invalid":"reject","example":2024,"minimum":1900,"maximum":2100},{"name":"year_known","type":"boolean","required":false,"description":"Only listings whose year of construction is published at all. Useful because a year range on this source silently also drops the rows that have no year.","on_invalid":"reject","example":true},{"name":"operating_hours_min","type":"integer","required":false,"description":"Lowest hour-meter reading, inclusive. This is the machine's own hour counter (`h`), kept strictly separate from any odometer reading, which the source publishes as a distance property of its own.","on_invalid":"reject","example":0,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Highest hour-meter reading, inclusive.","on_invalid":"reject","example":4000,"minimum":0,"aliases":["hours_max"]},{"name":"operating_hours_known","type":"boolean","required":false,"description":"Only listings that publish an hour-meter reading at all.","on_invalid":"reject","example":true},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in EUR, VAT-excluded — the source's own reference price, which is the same number on every national host (it does not convert currency). Measured to bite exactly: a 30,000-90,000 band on the tractor category took 22,115 rows to 6,787.","on_invalid":"reject","example":30000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in EUR, VAT-excluded.","on_invalid":"reject","example":90000,"minimum":0},{"name":"with_price_only","type":"boolean","required":false,"description":"Only listings that publish a price. 🔴 'Price on request' is a STATE here, not a missing value: those rows come back with `price: null` and `price_on_request: true`, and dropping them loses machines that are genuinely for sale. Measured: 25,754 of 33,942 rows publish a price.","on_invalid":"reject","example":true},{"name":"country","type":"enum","required":false,"description":"Seller country, as an ISO-3166-1 alpha-2 code. 🔴 This is an enum and not a pass-through for a reason that was measured: the source takes a numeric area id of its own, and an id it does not know produces a DIFFERENT, WRONG result set rather than an error or an empty one (control 33,942 rows; France 15,230; bogus id 11,117; the string 'FR' 11,125 — all HTTP 200 with real rows). The ids behind these codes were read off the source's own select and are brand- and language-invariant.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE"},{"value":"AL","label":"AL"},{"value":"AM","label":"AM"},{"value":"AT","label":"AT"},{"value":"BA","label":"BA"},{"value":"BE","label":"BE"},{"value":"BG","label":"BG"},{"value":"CA","label":"CA"},{"value":"CH","label":"CH"},{"value":"CL","label":"CL"},{"value":"CN","label":"CN"},{"value":"CZ","label":"CZ"},{"value":"DE","label":"DE"},{"value":"DK","label":"DK"},{"value":"EE","label":"EE"},{"value":"ES","label":"ES"},{"value":"FR","label":"FR"},{"value":"GB","label":"GB"},{"value":"GR","label":"GR"},{"value":"HR","label":"HR"},{"value":"HU","label":"HU"},{"value":"ID","label":"ID"},{"value":"IE","label":"IE"},{"value":"IT","label":"IT"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"LV","label":"LV"},{"value":"MD","label":"MD"},{"value":"ME","label":"ME"},{"value":"MK","label":"MK"},{"value":"MU","label":"MU"},{"value":"MX","label":"MX"},{"value":"NL","label":"NL"},{"value":"NO","label":"NO"},{"value":"PA","label":"PA"},{"value":"PH","label":"PH"},{"value":"PL","label":"PL"},{"value":"PT","label":"PT"},{"value":"PY","label":"PY"},{"value":"RO","label":"RO"},{"value":"RS","label":"RS"},{"value":"RU","label":"RU"},{"value":"SE","label":"SE"},{"value":"SI","label":"SI"},{"value":"SK","label":"SK"},{"value":"TH","label":"TH"},{"value":"TW","label":"TW"},{"value":"UA","label":"UA"},{"value":"US","label":"US"}],"example":"FR","aliases":["location_country"]},{"name":"region_id","type":"integer","required":false,"description":"Seller region, by the source's own id, which `locations` publishes for a country. Requires `country`, and the engine checks the id against the source's own live region list for that country before sending it — see the note on `country` for why.","on_invalid":"reject","example":6199,"minimum":1},{"name":"department_id","type":"integer","required":false,"description":"Seller department / province, by the source's own id, which `locations` publishes for a region. Requires `region_id`.","on_invalid":"reject","example":6213,"minimum":1},{"name":"postcode","type":"string","required":false,"description":"Centre a radius search on a postcode YOU supply, together with `radius_km`. 🔴 The site's own 'around me' radius and its distance column are computed from the viewer's position, which for an API means the location of whichever server made the call — so neither is offered. A postcode you pass is a property of your question, not of our exit, which is why this form is.","on_invalid":"reject","example":"28140"},{"name":"radius_km","type":"integer","required":false,"description":"Radius in kilometres around `postcode`. Requires `postcode` and `country`.","on_invalid":"reject","example":100,"minimum":1,"maximum":1000},{"name":"seller_type","type":"enum","required":false,"description":"Whether the advert comes from a business or a private seller. Dealer adverts carry the company name, its town and its logo; private ones carry a location only.","on_invalid":"reject","allowed_values":[{"value":"professional","label":"dealers and distributors"},{"value":"private","label":"private sellers"}],"example":"professional"},{"name":"has_photo","type":"boolean","required":false,"description":"Only listings with at least one photo (measured 32,674 of 33,942).","on_invalid":"reject","example":true},{"name":"has_video","type":"boolean","required":false,"description":"Only listings with a video.","on_invalid":"reject","example":true},{"name":"posted_within_week","type":"boolean","required":false,"description":"Only listings published in the last seven days — the only recency window the source itself offers, so no other one is invented here. Pair it with `sort=newest` to watch a market.","on_invalid":"reject","example":true},{"name":"flash_deal","type":"boolean","required":false,"description":"Only the source's own 'flash sale' adverts.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. 🔴 The source also offers an ascending and a descending DISTANCE order; neither is exposed, because the distance it sorts on is measured from the caller's own position, which for an API is the server that made the request — the same reason no distance field is published. `dealer_price_ref_*` is likewise not offered: the source only reveals it to a logged-in professional.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"year_asc","label":"year_asc"},{"value":"year_desc","label":"year_desc"},{"value":"hours_asc","label":"hours_asc"},{"value":"hours_desc","label":"hours_desc"},{"value":"model_asc","label":"model_asc"},{"value":"model_desc","label":"model_desc"},{"value":"manufacturer_asc","label":"manufacturer_asc"},{"value":"manufacturer_desc","label":"manufacturer_desc"},{"value":"rental_price_asc","label":"rental_price_asc"},{"value":"rental_price_desc","label":"rental_price_desc"}],"default":"newest","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, 50 rows each. 🔴 The ceiling is 200 pages = 10,000 rows per query no matter what `total` says, and page 201 does not error — it answers a redirect back to PAGE 1, so a naive pager re-reads the first page forever. Asking beyond the ceiling is an error here. To go deeper, narrow: category, manufacturer, year, price and country all bite hard (22,115 -> 6,787 -> 947 on one measured chain).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the source's own live filter counts for this query in `meta.facets` — the categories, manufacturers, conditions and numeric ranges that actually have stock, with the ids the filters accept.","on_invalid":"reject","example":true}],"returns":"listings[]: listing_id, url, title, promoted (true for the source's own sponsored placements, 2 of the 52 cards on a category page), category, year, operating_hours, operating_hours_unit, engine_power, engine_power_unit, listing_type (classified | auction | rental | wanted | unknown) with listing_type_slug (the source's own word for it) and price_is naming WHICH figure came back — because they are different facts: an auction's is its OPENING BID (auction_start_price), a rental's is a HIRE RATE (rental_price), a wanted advert's is a buyer's budget, and only a for-sale advert has an asking `price`. A card that links through the source's own indirection route does not say which it is, so it comes back as `unknown` with the figure in other_type_price rather than guessed. price, auction_start_price, rental_price, other_type_price, currency, price_on_request, image, image_count, location_country, location_region, location_department, latitude, longitude (the MACHINE's own coordinates, which the source prints on private-seller cards only — about half of them; the distance it renders beside them is computed in the browser from the viewer's position and is therefore not published), seller_name, seller_type and specs[] (every measured value the card prints, each with the source's own unit id, the raw number, the unit that number is really in, and the unit LABEL the page printed — those last two disagree on the imperial hosts, which is why both are published). meta carries total, pagination (page, page_size, last_page, retrievable_max, has_more), filters_applied, market info, upstream_requests and any warnings; `facets` too when asked.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":4},"example_params":{"query":"tracteur","market":"fr","page":1}},{"name":"detail","description":"One listing in full, by id. Returns the machine (manufacturer, model, year of construction, condition, availability, hour meter, engine power), the price with its currency — cross-checked against the page's own schema.org product data and reported if the two disagree — every technical property the seller typed with the source's own label, the raw number, the real unit and the printed unit label, the seller's own description, the full gallery, the category breadcrumb and the business behind the advert. An auction's price row is returned as `auction_start_price`, never as an asking price.","required_params":["listing_id"],"optional_params":["site","market"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The numeric listing id, as `search` returns it and as it appears in the listing URL. 🔴 Both slugs in that URL are ignored by the source, so the id alone is enough; a listing that has gone answers NOT_FOUND rather than something else.","on_invalid":"reject","example":"46952423","value_pattern":"\\d{4,12}","aliases":["id","ad_id"]},{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]}],"returns":"listing{} with listing_id, url, title, listing_type (classified | auction), listing_type_slug, manufacturer, manufacturer_id (the price observatory's id for that brand, ready for `price_index`), model, year, condition, availability, operating_hours(+unit), engine_power(+unit), price, currency, price_on_request, auction_start_price, price_witness{schema_org_price, schema_org_currency, agreed}, description, specs[] (every row of the source's own spec table: its label in the market's language, the printed value, and where the source marked it up as a measurement the raw number, the unit that number is really in and the unit LABEL the page printed), images[], category, breadcrumb[] and seller{} (with contacts[]{name, languages[], phone, phone_display} as the page prints them).","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"46952423","market":"fr"}},{"name":"categories","description":"The marketplace's own category tree with the numeric ids every other action takes and the source's own live counts. Agriaffaires publishes some 320 categories under its machinery families, MachineryZone its own set; ids are language-invariant, so the id you get here works on all 43 hosts. 🔴 The tree lives on exactly one page (the homepage); result pages load it over AJAX and do not contain it, so this action reads the homepage for the hierarchy and the source's own facet list for the ids, and says in `meta` how many it could match.","required_params":[],"optional_params":["site","market"],"params":[{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]}],"returns":"categories[]: name, slug, url, category_id (null where the source's facet list does not carry that leaf for the current inventory), count. meta.ids_matched / meta.ids_missing say how complete the id join was.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"fr"}},{"name":"facets","description":"The source's own live filter vocabulary and counts for a query: which categories and manufacturers have stock and how much, which conditions, gearboxes, drive and equipment values exist for that category, and the real minimum and maximum of every numeric property it offers. 🔴 This is the action that keeps you out of this source's worst behaviour — a value it does not recognise does not error, it answers HTTP 200 with zero rows and a total of 0 — so take manufacturer ids and property values from here rather than guessing them.","required_params":[],"optional_params":["site","market","query","keyword","category_id","listing_type","country"],"params":[{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]},{"name":"query","type":"string","required":false,"description":"Free-text search across the whole listing (title, model and description), exactly as the site's own search box does it. Either `query` or `category_id` is the normal starting point. Use `keyword` instead for a narrower match: measured on the same minute, `query=tracteur` answered 33,908 and `keyword=tracteur` 7,905 — the keyword form is title/model-weighted while this one also matches the seller's prose.","on_invalid":"reject","example":"tracteur","aliases":["q","search_word"]},{"name":"keyword","type":"string","required":false,"description":"A narrower text match than `query` (the site's `search[keyword]` field). Measured: 7,905 rows for 'tracteur' where `query` gave 33,908, and it still reaches other categories (a lorry carrying a tractor matched), so it is a text filter, not a category filter.","on_invalid":"reject","example":"john deere"},{"name":"category_id","type":"integer","required":false,"description":"The marketplace's own category (tree) id — 702 is the farm tractor, 802 the fertiliser spreader. The id is language- and brand-invariant (702 answers 'Tracteur agricole' on .com and 'Traktor' on .de), which is why it, and not a slug, is the handle. Get ids from `categories`, `facets` or `suggest`. 🔴 The source will not accept a category together with other filters in one request and answers 200 with zero rows if you try, so this engine sends it first and the rest afterwards — which costs one extra upstream request when you combine them.","on_invalid":"reject","example":702,"minimum":1,"aliases":["rubric_id","tree_id"]},{"name":"listing_type","type":"enum","required":false,"description":"What kind of advert. Defaults to everything, which MIXES offers with 'wanted' adverts and auctions — pass `sale` if you only want machines actually on offer. Measured on one query: 32,797 for sale, 829 wanted, 179 auctions, 97 rentals. The four ids behind these names are identical on both brands and in every language.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Vente / Offre — a machine offered for sale (the overwhelming majority)"},{"value":"wanted","label":"Recherche — someone LOOKING FOR a machine, not offering one"},{"value":"auction","label":"Enchères — an auction lot; its price row is the OPENING BID"},{"value":"rental","label":"Location — offered for RENT, and its figure is a HIRE RATE rather than a price. Measured: two rental tractors carry 259 and 170, their spec tables carry a price-per-hour row, a price-per-day row and a deposit row and NO sale-price row, and adding `with_price_only` to a rental query drops it from 60 rows to 0 — the source's own sale-price field is empty on every one of them. So a rental row publishes `rental_price` and leaves `price` null. 97 of 33,000 adverts on one measured query."}],"example":"sale"},{"name":"country","type":"enum","required":false,"description":"Seller country, as an ISO-3166-1 alpha-2 code. 🔴 This is an enum and not a pass-through for a reason that was measured: the source takes a numeric area id of its own, and an id it does not know produces a DIFFERENT, WRONG result set rather than an error or an empty one (control 33,942 rows; France 15,230; bogus id 11,117; the string 'FR' 11,125 — all HTTP 200 with real rows). The ids behind these codes were read off the source's own select and are brand- and language-invariant.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE"},{"value":"AL","label":"AL"},{"value":"AM","label":"AM"},{"value":"AT","label":"AT"},{"value":"BA","label":"BA"},{"value":"BE","label":"BE"},{"value":"BG","label":"BG"},{"value":"CA","label":"CA"},{"value":"CH","label":"CH"},{"value":"CL","label":"CL"},{"value":"CN","label":"CN"},{"value":"CZ","label":"CZ"},{"value":"DE","label":"DE"},{"value":"DK","label":"DK"},{"value":"EE","label":"EE"},{"value":"ES","label":"ES"},{"value":"FR","label":"FR"},{"value":"GB","label":"GB"},{"value":"GR","label":"GR"},{"value":"HR","label":"HR"},{"value":"HU","label":"HU"},{"value":"ID","label":"ID"},{"value":"IE","label":"IE"},{"value":"IT","label":"IT"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"LV","label":"LV"},{"value":"MD","label":"MD"},{"value":"ME","label":"ME"},{"value":"MK","label":"MK"},{"value":"MU","label":"MU"},{"value":"MX","label":"MX"},{"value":"NL","label":"NL"},{"value":"NO","label":"NO"},{"value":"PA","label":"PA"},{"value":"PH","label":"PH"},{"value":"PL","label":"PL"},{"value":"PT","label":"PT"},{"value":"PY","label":"PY"},{"value":"RO","label":"RO"},{"value":"RS","label":"RS"},{"value":"RU","label":"RU"},{"value":"SE","label":"SE"},{"value":"SI","label":"SI"},{"value":"SK","label":"SK"},{"value":"TH","label":"TH"},{"value":"TW","label":"TW"},{"value":"UA","label":"UA"},{"value":"US","label":"US"}],"example":"FR","aliases":["location_country"]}],"returns":"facets{categories[] (category_id, label, count, slug — count is null for the sibling categories a leaf page lists instead of counted ones), make[] (value = the manufacturer_id `search` takes, label, count), type[] (the four advert-type ids), etat[], other[], countries[] (the source's own area id, its own localized name and the ISO-2 code `search` takes), numeric_properties[] (property, min, max, unit_label — the real floor and ceiling for that category), plus whatever further per-category groups that category publishes} and meta.total.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":702,"market":"fr"}},{"name":"suggest","description":"The site's own autocomplete for a typed prefix, in two buckets: whole search phrases people use, and categories with their numeric ids and live counts. Use it to turn what a user typed into values the `category_id` and `query` filters actually accept.","required_params":["query"],"optional_params":["site","market"],"params":[{"name":"query","type":"string","required":true,"description":"What the user has typed so far. The source wants at least three characters and answers in two buckets: whole search phrases and categories with their numeric ids and live counts — which is how you turn typing into values the filters accept.","on_invalid":"reject","example":"tract","aliases":["q","prefix"]},{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]}],"returns":"suggestions{categories[] (category_id, label, count), words[]}. Any further bucket the source returns is published under its own key with a warning rather than dropped.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"tracteur","market":"fr"}},{"name":"dealers","description":"The dealer directory — the supplier side of the marketplace. Company name, activity, country, town, department, how many further addresses the group has, the manufacturer ranges they carry and how many adverts they have online, 50 a page. Searchable by company name, filterable by country, and ordered by the source's own sort values — company name, or how many adverts a dealer has online.","required_params":[],"optional_params":["site","market","company","country","page","sort"],"params":[{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]},{"name":"company","type":"string","required":false,"description":"Filter the dealer directory by company name (the source's own `all_company` field).","on_invalid":"reject","example":"depussay","aliases":["name"]},{"name":"country","type":"enum","required":false,"description":"Seller country, as an ISO-3166-1 alpha-2 code. 🔴 This is an enum and not a pass-through for a reason that was measured: the source takes a numeric area id of its own, and an id it does not know produces a DIFFERENT, WRONG result set rather than an error or an empty one (control 33,942 rows; France 15,230; bogus id 11,117; the string 'FR' 11,125 — all HTTP 200 with real rows). The ids behind these codes were read off the source's own select and are brand- and language-invariant.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE"},{"value":"AL","label":"AL"},{"value":"AM","label":"AM"},{"value":"AT","label":"AT"},{"value":"BA","label":"BA"},{"value":"BE","label":"BE"},{"value":"BG","label":"BG"},{"value":"CA","label":"CA"},{"value":"CH","label":"CH"},{"value":"CL","label":"CL"},{"value":"CN","label":"CN"},{"value":"CZ","label":"CZ"},{"value":"DE","label":"DE"},{"value":"DK","label":"DK"},{"value":"EE","label":"EE"},{"value":"ES","label":"ES"},{"value":"FR","label":"FR"},{"value":"GB","label":"GB"},{"value":"GR","label":"GR"},{"value":"HR","label":"HR"},{"value":"HU","label":"HU"},{"value":"ID","label":"ID"},{"value":"IE","label":"IE"},{"value":"IT","label":"IT"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"LV","label":"LV"},{"value":"MD","label":"MD"},{"value":"ME","label":"ME"},{"value":"MK","label":"MK"},{"value":"MU","label":"MU"},{"value":"MX","label":"MX"},{"value":"NL","label":"NL"},{"value":"NO","label":"NO"},{"value":"PA","label":"PA"},{"value":"PH","label":"PH"},{"value":"PL","label":"PL"},{"value":"PT","label":"PT"},{"value":"PY","label":"PY"},{"value":"RO","label":"RO"},{"value":"RS","label":"RS"},{"value":"RU","label":"RU"},{"value":"SE","label":"SE"},{"value":"SI","label":"SI"},{"value":"SK","label":"SK"},{"value":"TH","label":"TH"},{"value":"TW","label":"TW"},{"value":"UA","label":"UA"},{"value":"US","label":"US"}],"example":"FR","aliases":["location_country"]},{"name":"page","type":"integer","required":false,"description":"Directory page, 50 dealers each.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400},{"name":"sort","type":"enum","required":false,"description":"Directory order, using the source's own five sort values. The default here is `name` rather than the source's `default`, because `default` is exactly that — an order the source does not name and does not document, so a caller paging through 2,600 dealers would be relying on something that can change under them. Pass `default` explicitly if you want the source's own ordering.","on_invalid":"reject","allowed_values":[{"value":"name","label":"company name A-Z"},{"value":"name_desc","label":"company name Z-A"},{"value":"listings_asc","label":"fewest adverts online first"},{"value":"listings_desc","label":"most adverts online first"},{"value":"default","label":"the source's own unspecified default order"}],"default":"name","example":"name"}],"returns":"dealers[]: dealer_id, name, url, activity, country, city, department, other_addresses, brands[], listings_online, logo. meta carries total and pagination.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"fr","page":1}},{"name":"dealer","description":"One dealer's public business profile by id: company name, activity, registration number where the source prints one, how long they have been on the marketplace, their own website, their follower count, the manufacturer ranges they carry and the breakdown of their stock by category with live counts, plus the named contact person and phone number the profile prints (`contacts[]`).","required_params":["dealer_id"],"optional_params":["site","market"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"The dealer's own numeric id, as `dealers` and `search` return it.","on_invalid":"reject","example":"10405","value_pattern":"\\d{2,12}","aliases":["account_id"]},{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]}],"returns":"dealer{dealer_id, name, url, activity (+ its language-proof slug), registration_number, member_since_text, website, followers, street, postcode, city, country, branches[] (every further address the group has, each with the source's own address id, town and department), brands[] (name + slug) and categories[] (category_id, label, count — their stock broken down by category with the source's own live counts)}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"dealer_id":"10405","market":"fr"}},{"name":"dealer_listings","description":"One dealer's actual stock, paged — the same row shape as `search`. Unlike some machinery marketplaces, this source's dealer pages carry REAL listings rather than login-walled placeholders (measured: 50 genuine rows with distinct ids, prices and years, over 13 pages for one dealer), so they are returned.","required_params":["dealer_id"],"optional_params":["site","market","page"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"The dealer's own numeric id, as `dealers` and `search` return it.","on_invalid":"reject","example":"10405","value_pattern":"\\d{2,12}","aliases":["account_id"]},{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]},{"name":"page","type":"integer","required":false,"description":"Page of this dealer's stock, 50 rows each; `meta.pagination.last_page` is the source's own last page for that dealer. The cap of 200 is carried over from the search route, where it was measured; the dealer route's own ceiling was not measured, and no dealer in the directory has anything close to 10,000 adverts online, so it has never been reached.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"listings[] in the `search` row shape, plus meta.total and pagination.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"dealer_id":"10405","market":"fr","page":1}},{"name":"price_index","description":"The marketplace's own PRICE OBSERVATORY — what a make, model and year actually sells for on this marketplace: minimum, maximum and average asking price plus how many listings the figure rests on. Call it with nothing for the rubric list, with `rubric_id` for its makes, with `rubric_id` + `make_id` for its models, and with `model` + `year` on top for the price band itself. 🔴 This sub-system keeps its own id space: rubric 510 and make 4039 are the farm tractor and John Deere here, while `search` calls the same two 702 and 7607 — and giving it a search id answers an EMPTY result rather than an error, so always take the ids from this action.","required_params":[],"optional_params":["site","market","rubric_id","make_id","model","year"],"params":[{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]},{"name":"rubric_id","type":"integer","required":false,"description":"The price observatory's own rubric id — 510 is the farm tractor. 🔴 NOT the search `category_id` for the same thing (702): the observatory keeps its own id space and answers an EMPTY result rather than an error when given the other one. Call this action with no parameters to get the rubric list.","on_invalid":"reject","example":510,"minimum":1},{"name":"make_id","type":"integer","required":false,"description":"The price observatory's own make id — 4039 is John Deere. 🔴 NOT the search facet's manufacturer id for the same brand (7607): measured, `/observatoire-prix/search/510/7607/6r195/2024` answers `{\"data\":[]}` while `.../510/4039/6r195/2024` answers the real price band. Requires `rubric_id`; with only `rubric_id` this action returns the make list.","on_invalid":"reject","example":4039,"minimum":1},{"name":"model","type":"string","required":false,"description":"The model, as the observatory spells it. Requires `rubric_id` and `make_id`; with only those two this action returns the model list, which is the spelling to use.","on_invalid":"reject","example":"6R195"},{"name":"year","type":"integer","required":false,"description":"Year of construction. With `rubric_id`, `make_id` and `model` this is what turns the call into the actual price band: minimum, maximum and average asking price plus how many listings that figure rests on.","on_invalid":"reject","example":2024,"minimum":1900,"maximum":2100}],"returns":"level says which step you are on: rubrics[] / makes[] / models[] each with id and name, or prices[] with year, price_min, price_max, price_average, number_classified and number_classified_online. Prices are the source's own reference currency (EUR), VAT-excluded, the same on every host.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"market":"fr"}},{"name":"locations","description":"The geography the filters accept, from the source itself: the countries this engine will take, then a country's regions and a region's departments with the ids `search` wants. 🔴 It exists because an area id the source does not know does not error — it answers a different, wrong result set — so the only safe ids are the ones it hands out itself.","required_params":[],"optional_params":["site","market","country","region_id"],"params":[{"name":"site","type":"enum","required":false,"description":"Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other.","on_invalid":"reject","allowed_values":[{"value":"agriaffaires","label":"Agriaffaires — agricultural machinery (brand code 'ag')"},{"value":"machineryzone","label":"MachineryZone — construction, earthmoving and handling (brand 'tp')"}],"default":"agriaffaires","example":"agriaffaires"},{"name":"market","type":"enum","required":false,"description":"Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"ar (agriaffaires, machineryzone)"},{"value":"br","label":"br (agriaffaires, machineryzone)"},{"value":"ca","label":"ca (agriaffaires)"},{"value":"ca_fr","label":"ca_fr (agriaffaires, machineryzone)"},{"value":"cn","label":"cn (agriaffaires)"},{"value":"cz","label":"cz (agriaffaires, machineryzone)"},{"value":"de","label":"de (agriaffaires, machineryzone)"},{"value":"es","label":"es (agriaffaires, machineryzone)"},{"value":"eu","label":"eu (machineryzone)"},{"value":"fi","label":"fi (agriaffaires, machineryzone)"},{"value":"fr","label":"fr (agriaffaires, machineryzone)"},{"value":"hu","label":"hu (machineryzone)"},{"value":"in","label":"in (machineryzone)"},{"value":"it","label":"it (agriaffaires, machineryzone)"},{"value":"lt","label":"lt (machineryzone)"},{"value":"nl","label":"nl (agriaffaires, machineryzone)"},{"value":"no","label":"no (agriaffaires, machineryzone)"},{"value":"pl","label":"pl (agriaffaires, machineryzone)"},{"value":"pt","label":"pt (agriaffaires, machineryzone)"},{"value":"ro","label":"ro (agriaffaires, machineryzone)"},{"value":"rs","label":"rs (machineryzone)"},{"value":"se","label":"se (agriaffaires, machineryzone)"},{"value":"tr","label":"tr (machineryzone)"},{"value":"ua","label":"ua (agriaffaires, machineryzone)"},{"value":"uk","label":"uk (agriaffaires)"},{"value":"us","label":"us (agriaffaires, machineryzone)"}],"default":"fr","example":"fr","aliases":["country_site","locale"]},{"name":"country","type":"enum","required":false,"description":"Country, as an ISO-3166-1 alpha-2 code. With no country this action returns the country list itself; with one it returns that country's regions; with `region_id` as well, that region's departments.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE"},{"value":"AL","label":"AL"},{"value":"AM","label":"AM"},{"value":"AT","label":"AT"},{"value":"BA","label":"BA"},{"value":"BE","label":"BE"},{"value":"BG","label":"BG"},{"value":"CA","label":"CA"},{"value":"CH","label":"CH"},{"value":"CL","label":"CL"},{"value":"CN","label":"CN"},{"value":"CZ","label":"CZ"},{"value":"DE","label":"DE"},{"value":"DK","label":"DK"},{"value":"EE","label":"EE"},{"value":"ES","label":"ES"},{"value":"FR","label":"FR"},{"value":"GB","label":"GB"},{"value":"GR","label":"GR"},{"value":"HR","label":"HR"},{"value":"HU","label":"HU"},{"value":"ID","label":"ID"},{"value":"IE","label":"IE"},{"value":"IT","label":"IT"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"LV","label":"LV"},{"value":"MD","label":"MD"},{"value":"ME","label":"ME"},{"value":"MK","label":"MK"},{"value":"MU","label":"MU"},{"value":"MX","label":"MX"},{"value":"NL","label":"NL"},{"value":"NO","label":"NO"},{"value":"PA","label":"PA"},{"value":"PH","label":"PH"},{"value":"PL","label":"PL"},{"value":"PT","label":"PT"},{"value":"PY","label":"PY"},{"value":"RO","label":"RO"},{"value":"RS","label":"RS"},{"value":"RU","label":"RU"},{"value":"SE","label":"SE"},{"value":"SI","label":"SI"},{"value":"SK","label":"SK"},{"value":"TH","label":"TH"},{"value":"TW","label":"TW"},{"value":"UA","label":"UA"},{"value":"US","label":"US"}],"example":"FR"},{"name":"region_id","type":"integer","required":false,"description":"Seller region, by the source's own id, which `locations` publishes for a country. Requires `country`, and the engine checks the id against the source's own live region list for that country before sending it — see the note on `country` for why.","on_invalid":"reject","example":6199,"minimum":1}],"returns":"level (countries | regions | departments) and locations[]: area_id plus name for a region or a department, or the ISO-2 code plus the source's own area id for the country list (whose localized names live in facets.countries).","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"fr","country":"FR"}}]},{"name":"airbnb","category":{"id":"travel","title":"Travel & Lodging"},"title":"Airbnb API scraper — search stays, listing details, host profile, guest reviews, prices and availability calendar (airbnb.com data, no account required)","version":"1.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/airbnb/v1","spec_available":true,"actions":[{"name":"stays.search","description":"Search Airbnb stays by location and dates with full filters: price range, guests, place/property type, bedrooms/beds/baths, amenities, instant-book, Superhost, free cancellation and host language (≈26 cards/page, cursor-paginated).","required_params":["query"],"optional_params":["checkin","checkout","adults","children","infants","price_min","price_max","room_type","property_type","min_bedrooms","min_beds","min_bathrooms","amenities","host_languages","instant_book","superhost","free_cancellation","pets_allowed","cursor","currency","locale"],"params":[{"name":"query","type":"string","required":true,"description":"Where to search — city/region free text ('Istanbul, Turkey', 'Paris, France', 'Malibu, CA').","on_invalid":"reject","example":"Istanbul, Turkey"},{"name":"checkin","type":"string","required":false,"description":"Check-in date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-03"},{"name":"checkout","type":"string","required":false,"description":"Check-out date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-08"},{"name":"adults","type":"integer","required":false,"description":"Number of adult guests.","on_invalid":"reject","default":1,"minimum":1,"maximum":16},{"name":"children","type":"integer","required":false,"description":"Number of children (ages 2–12).","on_invalid":"ignore","minimum":0,"maximum":15},{"name":"infants","type":"integer","required":false,"description":"Number of infants (under 2).","on_invalid":"ignore","minimum":0,"maximum":5},{"name":"price_min","type":"integer","required":false,"description":"Minimum total price for the stay, in `currency`.","on_invalid":"ignore","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum total price for the stay, in `currency`.","on_invalid":"ignore","minimum":0},{"name":"room_type","type":"string","required":false,"description":"Place type. One or more (comma-separated) of: entire_home, private_room, shared_room, hotel_room.","on_invalid":"ignore","example":"entire_home"},{"name":"property_type","type":"string","required":false,"description":"Property type. One or more (comma-separated) of: house, apartment, guesthouse, hotel.","on_invalid":"ignore","example":"apartment"},{"name":"min_bedrooms","type":"integer","required":false,"description":"Minimum number of bedrooms (0 = studio, 1–8).","on_invalid":"ignore","minimum":0,"maximum":8},{"name":"min_beds","type":"integer","required":false,"description":"Minimum number of beds (1–8).","on_invalid":"ignore","minimum":0,"maximum":8},{"name":"min_bathrooms","type":"integer","required":false,"description":"Minimum number of bathrooms (1–8).","on_invalid":"ignore","minimum":0,"maximum":8},{"name":"amenities","type":"string","required":false,"description":"Required amenities, comma-separated. Known values: wifi, kitchen, washer, dryer, air_conditioning, heating, pool, hot_tub, free_parking, ev_charger, tv, self_check_in, pets_allowed, gym, breakfast, dedicated_workspace, elevator, smoke_alarm, fireplace, bbq_grill, waterfront, beachfront.","on_invalid":"ignore","example":"wifi,kitchen,pool"},{"name":"host_languages","type":"string","required":false,"description":"Filter by host language(s), comma-separated (e.g. English, French, German, Spanish, Italian, Japanese).","on_invalid":"ignore","example":"English"},{"name":"instant_book","type":"boolean","required":false,"description":"Only listings that can be booked instantly (no host approval).","on_invalid":"ignore"},{"name":"superhost","type":"boolean","required":false,"description":"Only Guest-favorite / Superhost listings.","on_invalid":"ignore"},{"name":"free_cancellation","type":"boolean","required":false,"description":"Only listings offering free cancellation.","on_invalid":"ignore"},{"name":"pets_allowed","type":"boolean","required":false,"description":"Only listings that allow pets.","on_invalid":"ignore"},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"currency","type":"string","required":false,"description":"Price currency (ISO code: EUR, USD, GBP, TRY…).","on_invalid":"ignore","default":"EUR","example":"USD"},{"name":"locale","type":"string","required":false,"description":"Response language (en, de, tr, es…).","on_invalid":"ignore","default":"en","example":"en"},{"name":"include_raw","type":"boolean","required":false,"description":"Advanced: include the full raw response payload per listing card.","on_invalid":"ignore","default":false}],"returns":"items[]{id, name, rating, rating_label, price, coordinate{lat, lng}, badges, subtitle} + unique_count + meta.pagination{has_more, next_cursor, cursor_count}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"Istanbul, Turkey","checkin":"2026-12-03","checkout":"2026-12-08","adults":2}},{"name":"stays.detail","description":"Full listing details: title, property/room type, guest capacity, the six category sub-ratings, host card, complete amenity list, photo URLs, sleeping arrangement, house rules, description and map location. Returns a clean `parsed` summary plus the raw PDP payload.","required_params":["listing_id"],"optional_params":["currency","locale"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Airbnb listing ID — the number in the listing URL (airbnb.com/rooms/<listing_id>) or `id` from stays.search.","on_invalid":"reject","example":"1408102095235129361"},{"name":"currency","type":"string","required":false,"description":"Price currency (ISO code: EUR, USD, GBP, TRY…).","on_invalid":"ignore","default":"EUR","example":"USD"},{"name":"locale","type":"string","required":false,"description":"Response language (en, de, tr, es…).","on_invalid":"ignore","default":"en","example":"en"}],"returns":"parsed{listing_id, title, property_type, room_type, person_capacity, ratings{overall, review_count, accuracy, checkin, cleanliness, communication, location, value}, host{name, is_superhost, rating, review_count, years_hosting, highlights}, amenities[]{name, available}, photos[]{url, caption}, rooms[]{name, details}, house_rules[], description, location{city, lat, lng}} + raw (full PDP payload)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"1408102095235129361"}},{"name":"host.profile","description":"Host profile for a listing: host name, Superhost/verified status, overall host rating, total reviews, years hosting, response rate and host highlights.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Airbnb listing ID — the number in the listing URL (airbnb.com/rooms/<listing_id>) or `id` from stays.search.","on_invalid":"reject","example":"1408102095235129361"},{"name":"locale","type":"string","required":false,"description":"Response language (en, de, tr, es…).","on_invalid":"ignore","default":"en","example":"en"}],"returns":"host{name, is_superhost, is_verified, rating, review_count, years_hosting, highlights[], details[], listing_id, listing_title}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"1408102095235129361"}},{"name":"stays.reviews","description":"Listing reviews, paginated via offset/limit.","required_params":["listing_id"],"optional_params":["offset","limit","locale"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Airbnb listing ID — the number in the listing URL (airbnb.com/rooms/<listing_id>) or `id` from stays.search.","on_invalid":"reject","example":"1408102095235129361"},{"name":"limit","type":"integer","required":false,"description":"Reviews per call (1–50).","on_invalid":"reject","default":24,"minimum":1,"maximum":50},{"name":"offset","type":"integer","required":false,"description":"Skip this many reviews (offset paging; or use `cursor` = the next offset).","on_invalid":"ignore","default":0,"minimum":0},{"name":"cursor","type":"string","required":false,"description":"Next page: pass meta.pagination.next_cursor (= the next offset, handled automatically by 'Next').","on_invalid":"ignore"},{"name":"locale","type":"string","required":false,"description":"Response language (en, de, tr, es…).","on_invalid":"ignore","default":"en","example":"en"}],"returns":"reviews[]{id, comments, language, createdAt, localizedDate, reviewer, reviewee, responder, reviewHighlight} + count + meta.pagination{page, has_more, next_cursor}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"listing_id":"1408102095235129361"}},{"name":"stays.availability_calendar","description":"Availability calendar for a listing (up to 12 months ahead): per-day availability + min/max nights.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Airbnb listing ID — the number in the listing URL (airbnb.com/rooms/<listing_id>) or `id` from stays.search.","on_invalid":"reject","example":"1408102095235129361"},{"name":"month_count","type":"integer","required":false,"description":"How many months ahead (1–12).","on_invalid":"reject","default":12,"minimum":1,"maximum":12}],"returns":"months[]{month, days[{date, available, price}]} + day_count + blocked_vs_available + caps{requested_month_count, returned_month_count, calendar_cap_months}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"1408102095235129361","month_count":3}},{"name":"properties.search","description":"Alias of stays.search.","required_params":["query"],"optional_params":["checkin","checkout","adults","cursor","currency","locale"],"params":[{"name":"query","type":"string","required":true,"description":"Where to search — city/region free text ('Istanbul, Turkey', 'Paris, France', 'Malibu, CA').","on_invalid":"reject","example":"Istanbul, Turkey"},{"name":"checkin","type":"string","required":false,"description":"Check-in date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-03"},{"name":"checkout","type":"string","required":false,"description":"Check-out date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-08"},{"name":"adults","type":"integer","required":false,"description":"Number of adult guests.","on_invalid":"reject","default":1,"minimum":1,"maximum":16},{"name":"children","type":"integer","required":false,"description":"Number of children (ages 2–12).","on_invalid":"ignore","minimum":0,"maximum":15},{"name":"infants","type":"integer","required":false,"description":"Number of infants (under 2).","on_invalid":"ignore","minimum":0,"maximum":5},{"name":"price_min","type":"integer","required":false,"description":"Minimum total price for the stay, in `currency`.","on_invalid":"ignore","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum total price for the stay, in `currency`.","on_invalid":"ignore","minimum":0},{"name":"room_type","type":"string","required":false,"description":"Place type. One or more (comma-separated) of: entire_home, private_room, shared_room, hotel_room.","on_invalid":"ignore","example":"entire_home"},{"name":"property_type","type":"string","required":false,"description":"Property type. One or more (comma-separated) of: house, apartment, guesthouse, hotel.","on_invalid":"ignore","example":"apartment"},{"name":"min_bedrooms","type":"integer","required":false,"description":"Minimum number of bedrooms (0 = studio, 1–8).","on_invalid":"ignore","minimum":0,"maximum":8},{"name":"min_beds","type":"integer","required":false,"description":"Minimum number of beds (1–8).","on_invalid":"ignore","minimum":0,"maximum":8},{"name":"min_bathrooms","type":"integer","required":false,"description":"Minimum number of bathrooms (1–8).","on_invalid":"ignore","minimum":0,"maximum":8},{"name":"amenities","type":"string","required":false,"description":"Required amenities, comma-separated. Known values: wifi, kitchen, washer, dryer, air_conditioning, heating, pool, hot_tub, free_parking, ev_charger, tv, self_check_in, pets_allowed, gym, breakfast, dedicated_workspace, elevator, smoke_alarm, fireplace, bbq_grill, waterfront, beachfront.","on_invalid":"ignore","example":"wifi,kitchen,pool"},{"name":"host_languages","type":"string","required":false,"description":"Filter by host language(s), comma-separated (e.g. English, French, German, Spanish, Italian, Japanese).","on_invalid":"ignore","example":"English"},{"name":"instant_book","type":"boolean","required":false,"description":"Only listings that can be booked instantly (no host approval).","on_invalid":"ignore"},{"name":"superhost","type":"boolean","required":false,"description":"Only Guest-favorite / Superhost listings.","on_invalid":"ignore"},{"name":"free_cancellation","type":"boolean","required":false,"description":"Only listings offering free cancellation.","on_invalid":"ignore"},{"name":"pets_allowed","type":"boolean","required":false,"description":"Only listings that allow pets.","on_invalid":"ignore"},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"currency","type":"string","required":false,"description":"Price currency (ISO code: EUR, USD, GBP, TRY…).","on_invalid":"ignore","default":"EUR","example":"USD"},{"name":"locale","type":"string","required":false,"description":"Response language (en, de, tr, es…).","on_invalid":"ignore","default":"en","example":"en"},{"name":"include_raw","type":"boolean","required":false,"description":"Advanced: include the full raw response payload per listing card.","on_invalid":"ignore","default":false}],"returns":"items[]{id, name, rating, rating_label, price, coordinate{lat, lng}, badges, subtitle} + unique_count + meta.pagination{has_more, next_cursor, cursor_count}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"Istanbul, Turkey"}},{"name":"properties.detail","description":"Alias of stays.detail.","required_params":["listing_id"],"optional_params":["currency","locale"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Airbnb listing ID — the number in the listing URL (airbnb.com/rooms/<listing_id>) or `id` from stays.search.","on_invalid":"reject","example":"1408102095235129361"},{"name":"currency","type":"string","required":false,"description":"Price currency (ISO code: EUR, USD, GBP, TRY…).","on_invalid":"ignore","default":"EUR","example":"USD"},{"name":"locale","type":"string","required":false,"description":"Response language (en, de, tr, es…).","on_invalid":"ignore","default":"en","example":"en"}],"returns":"parsed{...} + raw (full PDP payload) — see stays.detail","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"1408102095235129361"}},{"name":"autocomplete","description":"Location autocomplete suggestions (raw passthrough).","required_params":[],"optional_params":[],"params":[{"name":"query","type":"string","required":false,"description":"Location text to complete.","on_invalid":"reject","example":"Istanbul"}],"returns":"raw.data.presentation.autoSuggestions{...}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Istanbul"}}]},{"name":"alcampo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Alcampo groceries","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/alcampo/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Alcampo online grocery catalogue (EUR). Alcampo prices follow the store that serves the delivery address (pass latitude/longitude).","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search text, up to 100 characters.","on_invalid":"reject","example":"leche","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Products requested per page, 1-48. The source can return fewer (duplicate rows across its groups are dropped).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page of the same call (same query, filters and location).","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the facets[id=brands] list of a previous answer.","on_invalid":"reject","example":"PRODUCTO ALCAMPO"},{"name":"on_offer","type":"boolean","required":false,"description":"Only products with a source promotion when true.","on_invalid":"reject","default":false},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Alcampo follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (Vaguada) and says store_defaulted=true.","on_invalid":"reject","example":41.387},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":2.17},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"08001"}],"returns":"Products with EUR shelf price, unit price, promotions, availability, brand, pack size, image and url; facets; next_cursor; location (region used, store_defaulted).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"leche","limit":24}},{"name":"category","description":"Browse one Alcampo category by its id from categories.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"Category UUID from the categories action.","on_invalid":"reject","example":"48c34870-c5a3-46c9-870b-590c66fe8848"},{"name":"limit","type":"integer","required":false,"description":"Products requested per page, 1-48. The source can return fewer (duplicate rows across its groups are dropped).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page of the same call (same query, filters and location).","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the facets[id=brands] list of a previous answer.","on_invalid":"reject","example":"PRODUCTO ALCAMPO"},{"name":"on_offer","type":"boolean","required":false,"description":"Only products with a source promotion when true.","on_invalid":"reject","default":false},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Alcampo follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (Vaguada) and says store_defaulted=true.","on_invalid":"reject","example":41.387},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":2.17},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"08001"}],"returns":"Same product rows as search, plus the source category product count.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"48c34870-c5a3-46c9-870b-590c66fe8848"}},{"name":"product","description":"Full Alcampo product sheet: description, ingredients, allergens, nutrition table, every label field, all images, promotions with terms.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Product id from search (`id`), or a www.compraonline.alcampo.es product URL.","on_invalid":"reject","example":"473577","aliases":["product_id","url"]},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Alcampo follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (Vaguada) and says store_defaulted=true.","on_invalid":"reject","example":41.387},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":2.17},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"08001"}],"returns":"The search row fields plus description, fields, ingredients, allergens, nutrition, breadcrumbs, images and gtin (only when the label prints an EAN).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"473577"}},{"name":"categories","description":"Alcampo category tree (top level and one child level) with the ids the category action takes.","required_params":[],"optional_params":[],"params":[],"returns":"Category tree: id, name, retailer_category_id, children.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"aldi-au","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Aldi Australia grocery shelf prices, Special Buys and product labels","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/aldi-au/v1","spec_available":true,"actions":[{"name":"search","description":"Search products, browse a category, read a Special Buys date, or page the whole online assortment.","required_params":[],"optional_params":["query","categoryKey","promotionKey","url","brandName","categoryTree","theme","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. Leave query, categoryKey and promotionKey all empty to page the whole online assortment.","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"categoryKey","type":"string","required":false,"description":"Category ID from categories. May be combined with query.","on_invalid":"reject","example":"960000000"},{"name":"promotionKey","type":"string","required":false,"description":"Special Buys date from promotions (YYYY-MM-DD). May include future on-sale products.","on_invalid":"reject","example":"2026-10-14"},{"name":"url","type":"string","required":false,"description":"An aldi.com.au listing URL (category, Special Buys date, search results or /products); its filters are applied. Explicit parameters win.","on_invalid":"reject","example":"https://www.aldi.com.au/special-buys/2026-10-14"},{"name":"brandName","type":"array","required":false,"description":"Exact brand values from facets; multiple values use source OR semantics.","on_invalid":"reject","example":["FARMDALE"]},{"name":"categoryTree","type":"array","required":false,"description":"Category facet IDs from the current search response.","on_invalid":"reject","example":["950000000"]},{"name":"theme","type":"array","required":false,"description":"Exact theme keys from promotions or facets, sent unmodified (some carry a trailing space).","on_invalid":"reject","example":["Gardening"]},{"name":"sort","type":"enum","required":false,"description":"Source ordering. Use price_asc for complete sweeps: relevance order is not stable between calls.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. Beyond the source total returns INVALID_PARAM.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"enum","required":false,"description":"Source supported page size.","on_invalid":"reject","allowed_values":[{"value":12,"label":"12"},{"value":16,"label":"16"},{"value":24,"label":"24"},{"value":30,"label":"30"},{"value":32,"label":"32"},{"value":48,"label":"48"},{"value":60,"label":"60"}],"default":30}],"returns":"Products with national AUD shelf and unit prices, pack size, deal ranges, Special Buys dates, pagination and live facets.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","limit":12}},{"name":"deals","description":"List a current Aldi deal range: Lower Prices, Super Savers or Limited Time Only.","required_params":[],"optional_params":["type","brandName","categoryTree","theme","sort","page","limit"],"params":[{"name":"type","type":"enum","required":false,"description":"Aldi deal range, resolved by name from the live category tree.","on_invalid":"reject","allowed_values":[{"value":"lower_prices","label":"Lower Prices"},{"value":"super_savers","label":"Super Savers"},{"value":"limited_time","label":"Limited Time Only"}],"default":"lower_prices"},{"name":"brandName","type":"array","required":false,"description":"Exact brand values from facets; multiple values use source OR semantics.","on_invalid":"reject","example":["FARMDALE"]},{"name":"categoryTree","type":"array","required":false,"description":"Category facet IDs from the current search response.","on_invalid":"reject","example":["950000000"]},{"name":"theme","type":"array","required":false,"description":"Exact theme keys from promotions or facets, sent unmodified (some carry a trailing space).","on_invalid":"reject","example":["Gardening"]},{"name":"sort","type":"enum","required":false,"description":"Source ordering. Use price_asc for complete sweeps: relevance order is not stable between calls.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. Beyond the source total returns INVALID_PARAM.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"enum","required":false,"description":"Source supported page size.","on_invalid":"reject","allowed_values":[{"value":12,"label":"12"},{"value":16,"label":"16"},{"value":24,"label":"24"},{"value":30,"label":"30"},{"value":32,"label":"32"},{"value":48,"label":"48"},{"value":60,"label":"60"}],"default":30}],"returns":"The deal range products with prices and pagination, plus the resolved source category.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brandName":["FARMDALE"]}},{"name":"promotions","description":"List current and upcoming Special Buys dates and their themes.","required_params":[],"optional_params":[],"params":[],"returns":"Campaign dates (use as promotionKey in search), titles, themes and Aldi URLs.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"product/detail","description":"Read the full public product record and label.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Retailer SKU from search, with leading zeros, or Aldi Australia product URL. Not a GTIN.","on_invalid":"reject","example":"000000000000398871","aliases":["product_id","url"]}],"returns":"Identity, prices, description, ingredients, allergens, nutrition, storage, origin, images, variants and availability flags.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"000000000000398871"}},{"name":"categories","description":"Get the live category tree, deal ranges marked.","required_params":[],"optional_params":[],"params":[],"returns":"Category IDs, names, URLs, deal_type and nested children.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"availability","description":"Indicative store stock for one product. id plus location, store_id, or latitude AND longitude.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Retailer SKU from search, with leading zeros, or Aldi Australia product URL. Not a GTIN.","on_invalid":"reject","example":"000000000000398871","aliases":["product_id","url"]},{"name":"location","type":"string","required":false,"description":"Suburb or town name for the public stock checker (a bare postcode returns no stores). Use one location mode.","on_invalid":"reject","example":"Parramatta"},{"name":"store_id","type":"string","required":false,"description":"Store reference returned by availability. Use one location mode.","on_invalid":"reject","example":"G660"},{"name":"latitude","type":"number","required":false,"description":"Latitude; requires longitude and excludes location/store_id.","on_invalid":"reject","example":-33.8688,"minimum":-90,"maximum":90},{"name":"longitude","type":"number","required":false,"description":"Longitude; requires latitude.","on_invalid":"reject","example":151.2093,"minimum":-180,"maximum":180},{"name":"radius","type":"integer","required":false,"description":"Source distance radius, with coordinates only.","on_invalid":"reject","default":50,"minimum":1,"maximum":50},{"name":"only_in_stock","type":"boolean","required":false,"description":"Source checkbox; returned indicators still govern interpretation.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"One-based stock-checker result page.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Stores per page; the source caps this at 10.","on_invalid":"reject","default":10,"minimum":1,"maximum":10}],"returns":"Paginated stores with source traffic-light stock indicators; MARKET_UNAVAILABLE when the source publishes no stock data for the product.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"000000000000711788","location":"Parramatta"}}]},{"name":"aldi-de","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ALDI SÜD Germany prices, weekly offers (Angebote) and product labels","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/aldi-de/v1","spec_available":true,"actions":[{"name":"search","description":"Search products, browse a category, read a dated offer (Angebote) or page the whole online assortment; optionally one store's range.","required_params":[],"optional_params":["query","categoryKey","promotionKey","url","brandName","categoryTree","theme","store_id","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword (German). Leave query, categoryKey and promotionKey all empty to page the whole online assortment.","on_invalid":"reject","example":"milch","aliases":["q"]},{"name":"categoryKey","type":"string","required":false,"description":"Category id from categories (or from a /produkte/.../k/<id> URL).","on_invalid":"reject","example":"1588161425467093"},{"name":"promotionKey","type":"string","required":false,"description":"Offer date YYYY-MM-DD from promotions (\"Angebote ab ...\").","on_invalid":"reject","example":"2026-10-19"},{"name":"url","type":"string","required":false,"description":"A https://www.aldi-sued.de listing URL (/produkte/.../k/<id>, /angebote/<date>, /suchergebnisse?q=, /produkte); its filters are applied, explicit parameters win.","on_invalid":"reject","example":"https://www.aldi-sued.de/produkte/milchprodukte-eier/k/1588161425467093"},{"name":"brandName","type":"array","required":false,"description":"Exact brand values from facets; several values use OR.","on_invalid":"reject","example":["MILSANI"]},{"name":"categoryTree","type":"array","required":false,"description":"Category facet keys from the current search response.","on_invalid":"reject"},{"name":"theme","type":"array","required":false,"description":"Exact theme keys from promotions or facets, sent unmodified.","on_invalid":"reject","example":["Markenartikel"]},{"name":"store_id","type":"string","required":false,"description":"Optional ALDI SÜD store id from the stores action. Narrows the listing to that store's range (prices are national and do not change). Unknown ids return INVALID_PARAM.","on_invalid":"reject","example":"BM62","aliases":["servicePoint"]},{"name":"sort","type":"enum","required":false,"description":"Ordering. Use price_asc for complete sweeps; an unknown sort is rejected because the source would silently ignore it.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. A page past the end returns INVALID_PARAM.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"enum","required":false,"description":"Page size; the source accepts only these values.","on_invalid":"reject","allowed_values":[{"value":12,"label":"12"},{"value":16,"label":"16"},{"value":24,"label":"24"},{"value":30,"label":"30"},{"value":32,"label":"32"},{"value":48,"label":"48"},{"value":60,"label":"60"}],"default":30}],"returns":"Products with EUR shelf price, unit price (Grundpreis) and its basis, was-price and discount on offers, deposit, pack size, brand, badges, offer start date, pagination and live facets.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milch","limit":12}},{"name":"offers","description":"List a current offer range Wochenangebote / Frischeprodukte im Angebot / Eigenmarken im Angebot / Markenprodukte im Angebot / Dauerhaft günstig / Produkte unter 1 € / Neuheiten.","required_params":[],"optional_params":["type","brandName","categoryTree","theme","store_id","sort","page","limit"],"params":[{"name":"type","type":"enum","required":false,"description":"Offer range, resolved by name from the live category tree.","on_invalid":"reject","allowed_values":[{"value":"weekly","label":"Wochenangebote"},{"value":"weekly_fresh","label":"Frischeprodukte im Angebot"},{"value":"weekly_own_brands","label":"Eigenmarken im Angebot"},{"value":"weekly_brands","label":"Markenprodukte im Angebot"},{"value":"permanent_low","label":"Dauerhaft günstig"},{"value":"under_1_eur","label":"Produkte unter 1 €"},{"value":"new","label":"Neuheiten"}],"default":"weekly"},{"name":"brandName","type":"array","required":false,"description":"Exact brand values from facets; several values use OR.","on_invalid":"reject","example":["MILSANI"]},{"name":"categoryTree","type":"array","required":false,"description":"Category facet keys from the current search response.","on_invalid":"reject"},{"name":"theme","type":"array","required":false,"description":"Exact theme keys from promotions or facets, sent unmodified.","on_invalid":"reject","example":["Markenartikel"]},{"name":"store_id","type":"string","required":false,"description":"Optional ALDI SÜD store id from the stores action. Narrows the listing to that store's range (prices are national and do not change). Unknown ids return INVALID_PARAM.","on_invalid":"reject","example":"BM62","aliases":["servicePoint"]},{"name":"sort","type":"enum","required":false,"description":"Ordering. Use price_asc for complete sweeps; an unknown sort is rejected because the source would silently ignore it.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. A page past the end returns INVALID_PARAM.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"enum","required":false,"description":"Page size; the source accepts only these values.","on_invalid":"reject","allowed_values":[{"value":12,"label":"12"},{"value":16,"label":"16"},{"value":24,"label":"24"},{"value":30,"label":"30"},{"value":32,"label":"32"},{"value":48,"label":"48"},{"value":60,"label":"60"}],"default":30}],"returns":"The range's products with prices, was-prices and pagination, plus the resolved category.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"type":"weekly","limit":12}},{"name":"promotions","description":"List current and upcoming offer dates (Angebote ab ...) and their themes.","required_params":[],"optional_params":[],"params":[],"returns":"Offer dates (use as promotionKey in search), titles, themes and storefront URLs.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"product/detail","description":"Read one product: prices, description and label.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"18-digit product id from search (keep the leading zeros) or a https://www.aldi-sued.de/produkt/... URL. A retailer id, not an EAN.","on_invalid":"reject","example":"000000000000329344","aliases":["product_id","url"]}],"returns":"Identity, prices, unit price, description, ingredients, allergens, nutrition, storage, origin, images and badges.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"000000000000329344"}},{"name":"categories","description":"Get the live category tree with the offer ranges marked.","required_params":[],"optional_params":[],"params":[],"returns":"Category ids, names, storefront URLs, offer_type and nested children.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"stores","description":"Find ALDI SÜD stores by town, postcode or coordinates (store ids for search).","required_params":[],"optional_params":["query","latitude","longitude","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Town, postcode or street for the store finder. Use query OR latitude+longitude.","on_invalid":"reject","example":"München","aliases":["location"]},{"name":"latitude","type":"number","required":false,"description":"Latitude; requires longitude. Results then carry a distance.","on_invalid":"reject","example":48.137,"minimum":-90,"maximum":90},{"name":"longitude","type":"number","required":false,"description":"Longitude; requires latitude.","on_invalid":"reject","example":11.575,"minimum":-180,"maximum":180},{"name":"page","type":"integer","required":false,"description":"One-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50}],"returns":"Stores with id, address, coordinates, distance (coordinate mode) and pagination.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"München"}}]},{"name":"aldi-uk","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Aldi UK grocery shelf prices and product labels","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/aldi-uk/v1","spec_available":true,"actions":[{"name":"search","description":"Search groceries, categories or dated campaigns; query, categoryKey or promotionKey is required.","required_params":[],"optional_params":["query","promotionKey","categoryKey","brandName","categoryTree","theme","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword, or use categoryKey for category browsing.","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"promotionKey","type":"string","required":false,"description":"Dated campaign key from promotions. May include future on-sale products.","on_invalid":"reject","example":"2026-10-08"},{"name":"categoryKey","type":"string","required":false,"description":"Category ID from categories. May be combined with query.","on_invalid":"reject","example":"1588161416978050"},{"name":"brandName","type":"array","required":false,"description":"Exact brand values from facets; multiple values use source OR semantics.","on_invalid":"reject","example":["COWBELLE"]},{"name":"categoryTree","type":"array","required":false,"description":"Category facet IDs from the current search response.","on_invalid":"reject","example":["1588161416978051001"]},{"name":"theme","type":"array","required":false,"description":"Exact campaign theme names from facets.","on_invalid":"reject","example":["Cupboard Fillers"]},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. Beyond the source total returns INVALID_PARAM.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"enum","required":false,"description":"Source supported page size.","on_invalid":"reject","allowed_values":[{"value":12,"label":"12"},{"value":16,"label":"16"},{"value":24,"label":"24"},{"value":30,"label":"30"},{"value":32,"label":"32"},{"value":48,"label":"48"},{"value":60,"label":"60"}],"default":30}],"returns":"products with published GBP pack/unit prices, promotions, category scope, pagination and live facets.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","brandName":["COWBELLE"],"limit":12}},{"name":"promotions","description":"Discover public dated campaigns and themes; grocery offers and merchandise are mixed.","required_params":[],"optional_params":[],"params":[],"returns":"Campaign keys, on-sale dates and themes for the search promotionKey filter.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"product/detail","description":"Read the full public product record and label.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Retailer SKU from search, with leading zeros, or Aldi UK product URL. Not a GTIN.","on_invalid":"reject","example":"000000000000543221","aliases":["product_id","url"]}],"returns":"Product identity, prices, description, label ingredients/allergens/nutrition/storage/usage, images, variants and source availability flags.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"000000000000543221"}},{"name":"categories","description":"Get the current category tree.","required_params":[],"optional_params":[],"params":[],"returns":"Source category IDs, names, URLs and nested children; SpecialBuys marked separately.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"availability","description":"Get indicative store stock. id plus location, store_id, or latitude AND longitude is required.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Retailer SKU from search, with leading zeros, or Aldi UK product URL. Not a GTIN.","on_invalid":"reject","example":"000000000000543221","aliases":["product_id","url"]},{"name":"location","type":"string","required":false,"description":"Town or postcode for the public stock checker. Use one location mode.","on_invalid":"reject","example":"London"},{"name":"store_id","type":"string","required":false,"description":"Store reference returned by availability. Use one location mode.","on_invalid":"reject","example":"C533"},{"name":"latitude","type":"number","required":false,"description":"Latitude; requires longitude and excludes location/store_id.","on_invalid":"reject","example":51.5074,"minimum":-90,"maximum":90},{"name":"longitude","type":"number","required":false,"description":"Longitude; requires latitude.","on_invalid":"reject","example":-0.1278,"minimum":-180,"maximum":180},{"name":"radius","type":"integer","required":false,"description":"Source distance radius in miles, with coordinates only.","on_invalid":"reject","default":50,"minimum":1,"maximum":50},{"name":"only_in_stock","type":"boolean","required":false,"description":"Source checkbox; returned indicators still govern interpretation.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"One-based stock-checker result page. Source may error beyond the total.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Stores per page; the source caps this at 10.","on_invalid":"reject","default":10,"minimum":1,"maximum":10}],"returns":"Paginated stores with source traffic-light indicators and labels; MARKET_UNAVAILABLE when no availability data is published.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"000000000000543221"}}]},{"name":"aldi-us","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ALDI US API scraper — aldi.us product search, categories, product detail, Weekly Ad, ALDI Finds and store locator with each store's in-store, pickup or delivery price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/aldi-us/v1","spec_available":true,"actions":[{"name":"search","description":"Search aldi.us at one ALDI store: price (in-store, pickup or delivery), was-price, unit price, stock level, brand, size and badges, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id","service_type"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in aldi.us search ('milk', 'specially selected').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"aldi.us pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose ALDI store prices the results (ALDI prices and range differ by store). Default 60174 (St. Charles, IL) — then `store_defaulted` is true.","on_invalid":"reject","example":"60174","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional ALDI store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"23593"},{"name":"service_type","type":"enum","required":false,"description":"Which of the store's ALDI price lists: delivery (default; the price aldi.us prints on its product pages), in_store (aldi.us's In-store shopping list prices; lower than delivery on 31 of 42 products measured) or pickup.","on_invalid":"reject","allowed_values":[{"value":"delivery","label":"Delivery price (what aldi.us prints by default)"},{"value":"in_store","label":"In-store price list"},{"value":"pickup","label":"Pickup price"}],"default":"delivery"}],"returns":"products[]{product_id (= id), item_id, name (= title), brand, size, url, image, currency, price, price_display, original_price (= was_price), discount_percent, savings, unit_price_text, price_is_estimate, estimated_weight_text, promotions[], deal_terms, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"60174"}},{"name":"category","description":"Every product of an aldi.us collection — a category (Milk, All Dairy & Eggs), an ALDI brand (Specially Selected) or a diet (Organic, Gluten Free) — priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id","service_type"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (n-milk-33852, rc-dairy-eggs-all, rc-organic, rc-specially-selected …) or an aldi.us /store/aldi/collections/<slug> URL.","on_invalid":"reject","example":"n-milk-33852","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose ALDI store prices the results (ALDI prices and range differ by store). Default 60174 (St. Charles, IL) — then `store_defaulted` is true.","on_invalid":"reject","example":"60174","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional ALDI store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"23593"},{"name":"service_type","type":"enum","required":false,"description":"Which of the store's ALDI price lists: delivery (default; the price aldi.us prints on its product pages), in_store (aldi.us's In-store shopping list prices; lower than delivery on 31 of 42 products measured) or pickup.","on_invalid":"reject","allowed_values":[{"value":"delivery","label":"Delivery price (what aldi.us prints by default)"},{"value":"in_store","label":"In-store price list"},{"value":"pickup","label":"Pickup price"}],"default":"delivery"}],"returns":"collection{id,name,slug,url}, products[]{product_id (= id), item_id, name (= title), brand, size, url, image, currency, price, price_display, original_price (= was_price), discount_percent, savings, unit_price_text, price_is_estimate, estimated_weight_text, promotions[], deal_terms, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-33852","postal_code":"60174"}},{"name":"offers","description":"ALDI's current offer lists at one store: the Weekly Ad, this week's or next week's ALDI Finds, or Price Drops.","required_params":[],"optional_params":["type","date","page","per_page","cursor","postal_code","store_id","service_type"],"params":[{"name":"type","type":"enum","required":false,"description":"Which ALDI offer list: weekly_ad, aldi_finds (this week's), upcoming_aldi_finds (next Wednesday's) or price_drops.","on_invalid":"reject","allowed_values":[{"value":"weekly_ad","label":"Weekly Ad"},{"value":"aldi_finds","label":"This week's ALDI Finds"},{"value":"upcoming_aldi_finds","label":"Upcoming ALDI Finds (next Wednesday)"},{"value":"price_drops","label":"Price Drops"}],"default":"weekly_ad"},{"name":"date","type":"string","required":false,"description":"Optional, aldi_finds only: the Wednesday an ALDI Finds list starts (YYYY-MM-DD).","on_invalid":"reject","example":"2026-10-14"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose ALDI store prices the results (ALDI prices and range differ by store). Default 60174 (St. Charles, IL) — then `store_defaulted` is true.","on_invalid":"reject","example":"60174","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional ALDI store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"23593"},{"name":"service_type","type":"enum","required":false,"description":"Which of the store's ALDI price lists: delivery (default; the price aldi.us prints on its product pages), in_store (aldi.us's In-store shopping list prices; lower than delivery on 31 of 42 products measured) or pickup.","on_invalid":"reject","allowed_values":[{"value":"delivery","label":"Delivery price (what aldi.us prints by default)"},{"value":"in_store","label":"In-store price list"},{"value":"pickup","label":"Pickup price"}],"default":"delivery"}],"returns":"type, collection{id,name ('Weekly Ad Oct 14 - Oct 20', 'All 10/14 ALDI Finds'),slug,url}, finds_date, products[]{product_id (= id), item_id, name (= title), brand, size, url, image, currency, price, price_display, original_price (= was_price), discount_percent, savings, unit_price_text, price_is_estimate, estimated_weight_text, promotions[], deal_terms, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"type":"weekly_ad","postal_code":"60174"}},{"name":"promotions","description":"Which ALDI offer lists are live now: Weekly Ad (with its dates), this week's and next week's ALDI Finds and Price Drops, each with its product count.","required_params":[],"optional_params":["postal_code","store_id","service_type"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose ALDI store prices the results (ALDI prices and range differ by store). Default 60174 (St. Charles, IL) — then `store_defaulted` is true.","on_invalid":"reject","example":"60174","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional ALDI store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"23593"},{"name":"service_type","type":"enum","required":false,"description":"Which of the store's ALDI price lists: delivery (default; the price aldi.us prints on its product pages), in_store (aldi.us's In-store shopping list prices; lower than delivery on 31 of 42 products measured) or pickup.","on_invalid":"reject","allowed_values":[{"value":"delivery","label":"Delivery price (what aldi.us prints by default)"},{"value":"in_store","label":"In-store price list"},{"value":"pickup","label":"Pickup price"}],"default":"delivery"}],"returns":"promotions[]{type,name,slug,url,finds_date,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"60174"}},{"name":"product/detail","description":"One ALDI product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id","service_type"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or an aldi.us /store/aldi/products/ URL.","on_invalid":"reject","example":"16902710","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose ALDI store prices the results (ALDI prices and range differ by store). Default 60174 (St. Charles, IL) — then `store_defaulted` is true.","on_invalid":"reject","example":"60174","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional ALDI store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"23593"},{"name":"service_type","type":"enum","required":false,"description":"Which of the store's ALDI price lists: delivery (default; the price aldi.us prints on its product pages), in_store (aldi.us's In-store shopping list prices; lower than delivery on 31 of 42 products measured) or pickup.","on_invalid":"reject","allowed_values":[{"value":"delivery","label":"Delivery price (what aldi.us prints by default)"},{"value":"in_store","label":"In-store price list"},{"value":"pickup","label":"Pickup price"}],"default":"delivery"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row: price, was-price, unit price, stock, nutrition) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"16902710","postal_code":"60174"}},{"name":"categories","description":"aldi.us departments (Fresh Produce, Dairy & Eggs …), a department's collections, a collection's sub-collections, and the ALDI brand and diet collections.","required_params":[],"optional_params":["department","slug","postal_code","store_id","service_type"],"params":[{"name":"department","type":"string","required":false,"description":"Optional department slug from the `departments` list (dairy-and-eggs, fresh-produce …): returns that department's collections. Without it: departments + ALDI brand and diet collections.","on_invalid":"reject","example":"dairy-and-eggs"},{"name":"slug","type":"string","required":false,"description":"Optional parent collection slug: returns its sub-collections.","on_invalid":"reject","example":"n-milk-33852","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose ALDI store prices the results (ALDI prices and range differ by store). Default 60174 (St. Charles, IL) — then `store_defaulted` is true.","on_invalid":"reject","example":"60174","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional ALDI store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"23593"},{"name":"service_type","type":"enum","required":false,"description":"Which of the store's ALDI price lists: delivery (default; the price aldi.us prints on its product pages), in_store (aldi.us's In-store shopping list prices; lower than delivery on 31 of 42 products measured) or pickup.","on_invalid":"reject","allowed_values":[{"value":"delivery","label":"Delivery price (what aldi.us prints by default)"},{"value":"in_store","label":"In-store price list"},{"value":"pickup","label":"Pickup price"}],"default":"delivery"}],"returns":"departments[]{slug,name,url}, collections[]{slug,name,url,children[]} — slugs feed `category`","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"department":"dairy-and-eggs"}},{"name":"stores","description":"ALDI stores around a US ZIP code, nearest first, with address, coordinates, distance and which services (in-store, pickup, delivery) aldi.us offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find ALDI stores around (nearest first).","on_invalid":"reject","example":"10001","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"postal_code":"10001"}}]},{"name":"alibaba","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Alibaba.com B2B Wholesale API — supplier product search, full wholesale product detail with quantity price tiers, MOQ, lead time and shipping weight, plus live buyer RFQs (what buyers are asking to purchase) from alibaba.com","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/alibaba/v1","spec_available":true,"actions":[{"name":"search","description":"Search alibaba.com wholesale listings by keyword — 48 supplier offers per page, each with its unit price (or price range), minimum order quantity, units sold, supplier company and country, review scores and certifications. Filter by price range, maximum MOQ, supplier country, minimum review score and verified suppliers; results come in Alibaba's own relevance order","required_params":["query"],"optional_params":["page","sort","min_price","max_price","min_order","max_order","supplier_country","category_id","verified_supplier","trade_assurance","min_review_score"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for on alibaba.com — a product keyword the way a buyer would type it ('led strip', 'corrugated carton box', 'nitrile gloves').","on_invalid":"reject","example":"led strip","aliases":["q","keyword","keywords","search","SearchText"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based, 48 offers per page (max 100). Page forward with next_page from the response.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order. 'relevance' — Alibaba's own ranking — is the only order alibaba.com's search offers. The former 'sales' and 'response_rate' orders were withdrawn when Alibaba replaced its search in November 2026 (the new search accepts and ignores them) and are now rejected with INVALID_PARAM. There is no price sort — use min_price / max_price to bound the range instead.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match — Alibaba's own default ranking"}],"default":"relevance","example":"relevance"},{"name":"min_price","type":"number","required":false,"description":"Lowest unit price to include, in the listing currency (USD).","on_invalid":"ignore","example":1,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest unit price to include, in the listing currency.","on_invalid":"ignore","example":50,"minimum":0},{"name":"min_order","type":"integer","required":false,"description":"WITHDRAWN — sending a value returns INVALID_PARAM. alibaba.com's search (replaced November 2026) has no minimum-MOQ filter any more: it accepts the old parameter and ignores it. max_order still works, and every row carries moq.quantity and moq.unit to filter on.","on_invalid":"ignore","minimum":0,"aliases":["min_moq"]},{"name":"max_order","type":"integer","required":false,"description":"Only listings whose minimum order quantity is at most this — the practical filter for buyers who cannot commit to a container load.","on_invalid":"ignore","example":100,"minimum":1,"aliases":["max_moq"]},{"name":"supplier_country","type":"string","required":false,"description":"Two-letter country code of the supplier (CN, IN, VN, TR, US, DE …). Alibaba is overwhelmingly Chinese suppliers; this is how you find the others.","on_invalid":"ignore","example":"CN","aliases":["country","supplier_location"]},{"name":"category_id","type":"string","required":false,"description":"WITHDRAWN — sending a value returns INVALID_PARAM. alibaba.com's search (replaced November 2026) ignores a category id. Put the category words in query instead ('led rope light' rather than category 201721001).","on_invalid":"ignore"},{"name":"verified_supplier","type":"boolean","required":false,"description":"Only suppliers Alibaba has inspected and verified on site (its 'Verified Supplier' programme).","on_invalid":"ignore","example":true,"aliases":["verified"]},{"name":"trade_assurance","type":"boolean","required":false,"description":"WITHDRAWN — true returns INVALID_PARAM (false is accepted and does nothing). alibaba.com's search (replaced November 2026) no longer applies a Trade Assurance filter to its results.","on_invalid":"ignore"},{"name":"min_review_score","type":"enum","required":false,"description":"Only suppliers at or above this review score (4, 4.5 or 5).","on_invalid":"reject","allowed_values":[{"value":"4","label":"4.0 and up"},{"value":"4.5","label":"4.5 and up"},{"value":"5","label":"5.0 only"}],"example":"4.5"}],"returns":"results[] — one supplier offer per row: product_id (Alibaba's own numeric id as a string; pass it straight to product_detail), title, url, image, images[], price{text, currency, min, max}, promotion_price, currency, moq{text, quantity, unit}, sold_count, rating, review_count, supplier_service_score, shipping_score, supplier{company_id, name, country, years_on_alibaba, verified, logo, url, profile_url}, certifications[], is_ad — plus page, page_size, total_estimate, has_more, next_page.\nprice is the card price: a tiered listing shows its cheapest and dearest tier here (min differs from max), and the complete tier-by-tier ladder is one product_detail call away. min equals max on a flat-priced listing. price is null on the minority of listings the supplier publishes as 'Contact for price'.\nmoq.quantity is the number and moq.unit is the unit it is counted in — pieces, meters, sets, kilograms, tons — and the two must be read together: '1 set' and '1000 pieces' are both moq.quantity values. Present on every row measured.\nis_ad is Alibaba's own paid-placement flag; roughly half of a page is sponsored and those rows are returned rather than silently dropped. sold_count is populated only on listings with recorded sales (about half of rows). rating/review_count are null on listings with no reviews yet (about one row in six).\nimage and images[] are the 300x300 card renditions the search grid shows; product_detail returns the full-size gallery. supplier.logo is always null: alibaba.com's current search no longer publishes the supplier logo (the key is kept so existing integrations do not break).\nOrdering: alibaba.com's search (replaced November 2026) is an AI-ranked search that reorders between identical calls, so two calls for the same page share most but not all rows, and a later page can repeat a few ids from an earlier one (0-9 of 48 measured). De-duplicate on product_id when paginating.\ntotal_estimate is Alibaba's own result count and it is an estimate — the same query reports noticeably different totals between calls, so paginate on has_more, not on arithmetic over the total. Results run out after roughly 70 pages of 48; past the end the response is ok with an empty results[].","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"led strip"}},{"name":"product_detail","description":"Full wholesale detail for one alibaba.com listing — the complete quantity price ladder, minimum order quantity, production lead time, gross weight and package dimensions, the full specification table, image gallery, variant matrix with native SKU ids and per-variant stock, certifications, and the supplier scorecard","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Alibaba's own numeric product id — the digits before '.html' in a /product-detail/ URL, and the same value this API returns as product_id. Pass either this or url.","on_invalid":"reject","example":"1600104532932","aliases":["id","productId","offer_id"]},{"name":"url","type":"string","required":false,"description":"Full alibaba.com product URL, used instead of product_id. Only alibaba.com hosts are accepted; the id is read out of the URL.","on_invalid":"reject","example":"https://www.alibaba.com/product-detail/x_1600104532932.html"}],"returns":"product{} — identity: product_id (Alibaba's own numeric id, returned as a string, identical to the id search returns), url, title, category_id, categories[] breadcrumb, brand, model_number, place_of_origin, ships_from.\nWholesale commercials: price_ladder[] {min_quantity, max_quantity, price, price_usd, formatted} — the quantity tiers, cheapest tier last; max_quantity is null on the open-ended top tier ('1000 and above'). price_usd is Alibaba's own USD conversion of that tier, so it stays comparable whatever currency the page was priced in. About one listing in six publishes no tiers at all — those return an empty price_ladder with price_range{min, max, min_usd, max_usd, text} instead, and price_on_request true when the supplier only invites an enquiry. currency is the currency the other price fields are quoted in.\nmoq{quantity, unit, text, customs_quantity, box_quantity} — the minimum order quantity and the unit it is counted in. Present on every product measured.\nlead_time[] {min_quantity, max_quantity, days} — the supplier's own production time in days, laddered by order size.\nshipping{gross_weight, weight_unit, package_dimensions{length, width, height, unit}, package_volume, packaging_details, port, selling_units, supply_ability, logistics_modes[], trade_price_type} — everything published that feeds a freight quote. gross_weight is per selling unit in kilograms and package_dimensions are centimetres. Both are null when the supplier left them blank, which happens on roughly a quarter of listings — a null here means 'not published', never zero. trade_price_type is the Incoterm the ladder is quoted on (FOB, EXW, CIF …). package_volume is a field Alibaba defines but suppliers do not fill; expect null.\nContent: images[] full gallery at the largest rendition, videos[], specifications[] {group, name, value, attribute_id} — the whole attribute table with Alibaba's own grouping, including the 'Packaging and delivery' group — certifications[] {certificate_id, name, number, type, validity, issuing_authority, images[]}, customizable.\nVariants: axes[] {attribute_id, name, type, values[{value_id, name, image, color}]} and variants[] {sku_id, attributes[], price, stock, unlimited_stock, in_stock}. sku_id is Alibaba's own SKU id as a string. price is ALWAYS null on a variant: Alibaba does not publish per-SKU prices on this marketplace — wholesale price is tiered by quantity at the product level, so price_ladder is the price for every variant. stock is null and unlimited_stock true on the many listings where the supplier declares unlimited capacity.\nTrust: sold_count, rating{product_rating, product_review_count, store_rating, store_review_count} — aggregates only, Alibaba publishes no review text on the product page — and supplier{company_id, name, country, city, years_on_alibaba, business_type, verified, gold_supplier, url, logo, response_time, on_time_delivery_rate, reorder_rate, store_rating, store_review_count, main_markets[], customization_abilities[]}.\nEither product_id or url is required.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"1600104532932"}},{"name":"rfq_search","description":"Search live buying requests (RFQs) posted by Alibaba buyers — the demand side of the marketplace. Each row is a purchase a real buyer is asking for right now, in their own words: what they want, how many, which country they are buying from and how long ago they posted it. Filter by keyword, buyer country, category and how recently it was posted; sort newest-first to work the board as a live feed","required_params":[],"optional_params":["query","page","sort","buyer_country","category_id","posted_within","with_attachments","open_only"],"params":[{"name":"query","type":"string","required":false,"description":"What the buyer is asking for, in the buyer's own words — 'led strip', 'nitrile gloves', 'cnc machining'. Leave it out to browse every open request on the board (183,000+ live requests), which is what sort='recent' with a buyer_country filter is for.","on_invalid":"reject","example":"led strip","aliases":["q","keyword","keywords","search","SearchText"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based, 20 requests per page (max 500). Page forward with next_page from the response.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order. 'relevance' is Alibaba's own Best Match mix; 'recent' puts the newest requests first and is the one to poll — its first page is typically minutes old.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Alibaba's own 'Best Match' order"},{"value":"recent","label":"Newest requests first"}],"default":"relevance","example":"recent"},{"name":"buyer_country","type":"string","required":false,"description":"Two-letter country code of the BUYER (US, IN, BR, DE, TR, AE …). Must be upper-case, and Alibaba spells the United Kingdom 'UK', not 'GB'. A code Alibaba does not recognise is rejected rather than silently ignored.","on_invalid":"reject","example":"US","aliases":["country","buyer_location"]},{"name":"category_id","type":"string","required":false,"description":"Alibaba sourcing category id to restrict the board to (1 Agriculture, 3 Apparel & Accessories, 66 Beauty, 8 Chemicals, 2829 Commercial Equipment & Machinery …). The ids are the same ones product_detail returns.","on_invalid":"ignore","example":"3","aliases":["categoryIds"]},{"name":"posted_within","type":"enum","required":false,"description":"Only requests posted inside this window. 'older_than_7d' is Alibaba's own inverse facet — it returns requests OLDER than a week, not newer.","on_invalid":"reject","allowed_values":[{"value":"1h","label":"Posted in the last hour"},{"value":"3h","label":"Posted in the last 3 hours"},{"value":"12h","label":"Posted in the last 12 hours"},{"value":"24h","label":"Posted in the last 24 hours"},{"value":"2d","label":"Posted in the last 2 days"},{"value":"3d","label":"Posted in the last 3 days"},{"value":"7d","label":"Posted in the last 7 days"},{"value":"older_than_7d","label":"Posted more than 7 days ago"}],"example":"24h","aliases":["posted","age"]},{"name":"with_attachments","type":"boolean","required":false,"description":"Only requests where the buyer attached a file — a drawing, a spec sheet or a reference photo.","on_invalid":"ignore","example":true,"aliases":["attachment"]},{"name":"open_only","type":"boolean","required":false,"description":"Only requests Alibaba still lists as open for quoting (its own 'Open RFQs' filter).","on_invalid":"ignore","example":true,"aliases":["availability","open"]}],"returns":"results[] — one buying request per row: rfq_id (Alibaba's own numeric id as a string), title, description, description_truncated, url, image, quantity, quantity_unit, buyer{name, country, country_code, level}, posted_ago_text, posted_hours_ago, posted_at_estimate, quote_slots_left (Alibaba's own \"Quotes left\" counter — how many more suppliers may still answer), has_attachments, rfq_level, rfq_star_level, rfq_star_max, tags[], expires_at, budget, budget_currency — plus query, page, page_size, total_estimate, has_more, next_page.\ndescription is the buyer's OWN text and it is what makes this surface worth reading — but Alibaba truncates it on the listing page at roughly 210 characters. description_truncated is true when it did (44 of 60 rows measured), and the full text is not published anywhere we can read without an account.\nquantity and quantity_unit must be read together and neither is normalised: the unit is whatever the buyer picked in their own language, so 'Piece/Pieces' and 'Meter/Meters' sit next to 'Caixa/Caixas' and 'Morgen/Morgen'. Both are present on every row measured across 10 categories.\nAlibaba publishes the posting time ONLY as a relative phrase. posted_ago_text is that phrase verbatim ('Just now', '22 minutes before', '4 days ago'); posted_hours_ago is it as a number; posted_at_estimate is a UTC timestamp derived from it and is an ESTIMATE — no more precise than the phrase, so a '1 days ago' row is accurate to the day, not the minute.\nexpires_at, budget and budget_currency are fields Alibaba defines but does not fill on this surface: null on 200 of 200 rows measured. A null here means 'not published', never zero and never 'no deadline'.\nbuyer.name is the contact name the buyer chose to publish publicly on the sourcing board; no email, phone or address is published there and none is returned. buyer.country is always present; buyer.country_code is Alibaba's own two-letter code and is null on the handful of rows where Alibaba writes a full country name in that slot instead. image is present on roughly a third to two-thirds of rows depending on the category — buyers often post no photo at all.\ntotal_estimate is Alibaba's own count for the filtered board. A query with no matches returns NOT_FOUND rather than an empty 200, and so does a page past the end of the result set — asked for a page it does not have, alibaba.com re-serves page 1, which this action detects rather than passing on.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"packaging box"}}]},{"name":"aliexpress","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"AliExpress API — product search, full product detail (SKU/variant prices, specs, images), buyer reviews, shipping rates, store catalogs and deals (region- and currency-aware)","version":"0.4.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/aliexpress/v1","spec_available":true,"actions":[{"name":"search","description":"Product search cards (price, sold_count, rating, store); filters sort/min_price/max_price/ship_from/free_shipping, paginated. country=RU searches AliExpress Russia (aliexpress.ru): RUB prices, Russian titles, store_name/store_url and a delivery_text line on every card; sort, min_price/max_price (in RUB) and free_shipping apply there, ship_from does not (reported in meta.filters_dropped)","required_params":[],"optional_params":["query","country","currency","page","max_pages","max_results","sort","min_price","max_price","ship_from","free_shipping"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (product keywords).","on_invalid":"reject","example":"usb c cable","aliases":["q","keyword"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match"},{"value":"orders","label":"Best selling (most orders)"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"newest","label":"Newest listed"},{"value":"default","label":"Best match (alias)"},{"value":"best_selling","label":"Best selling (alias)"},{"value":"price_asc","label":"Price: low to high (alias)"},{"value":"price_desc","label":"Price: high to low (alias)"}],"default":"best_match","example":"best_match"},{"name":"min_price","type":"number","required":false,"description":"Only items at or above this price (in `currency`).","on_invalid":"ignore","example":5,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Only items at or below this price (in `currency`).","on_invalid":"ignore","example":10,"minimum":0},{"name":"ship_from","type":"string","required":false,"description":"Only items shipped from this country (2-letter ISO code, e.g. CN, US, ES).","on_invalid":"ignore","example":"CN"},{"name":"free_shipping","type":"boolean","required":false,"description":"Only items with free shipping.","on_invalid":"ignore","default":false,"example":false},{"name":"country","type":"string","required":false,"description":"Ship-to country (2-letter ISO code, e.g. US, DE, TR). Changes prices, availability and shipping options. RUSSIA IS SUPPORTED: country=RU is served from AliExpress Russia (aliexpress.ru), the storefront Russian buyers actually use (the global site does not sell to Russia). With RU, `search` and `product_detail` work; prices are in RUB and titles in Russian whatever `currency`/`language` say (meta.currency_applied / meta.language_applied tell you), and Russian local-seller items carry ids like `1_187973544` — pass them back to product_detail exactly as search returned them. Other actions answer MARKET_UNAVAILABLE for RU at once.","on_invalid":"ignore","default":"US","example":"DE","aliases":["ship_to"]},{"name":"currency","type":"string","required":false,"description":"Currency for prices (3-letter ISO code, e.g. USD, EUR, TRY).","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"language","type":"string","required":false,"description":"Response language (2-letter code, e.g. de, es, fr, ru, pt, ja, ko, tr, it, ar). Independent of `country`: you can ship to US and read titles in German. Measured 2026-08-26 — 11 of 12 languages localise the title; `zh` often returns English because sellers do not publish a Chinese title. The code is passed through to AliExpress as given: one it does not recognise comes back in English rather than failing. `meta.language_sent` echoes what was sent.","on_invalid":"ignore","default":"en","example":"de","aliases":["lang","locale"]},{"name":"page","type":"integer","required":false,"description":"Page number to start from (easy paging: 1, 2, 3…). Measured ceiling: page 60 is the deepest page AliExpress still serves — page 100 comes back empty. Page until `meta.pagination.has_more` is false rather than probing for the end.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":60},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch in one call (1–10). AliExpress serves 46–60 results per page, so 10 pages is about 500 results and takes ~40s. Prefer `max_results` if you want a result count rather than a page count; larger values are capped at 10.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":10},{"name":"max_results","type":"integer","required":false,"description":"How many results to return (1–500). AliExpress serves 46–60 per page, so asking for more than about 50 fetches further pages — each one is another request against AliExpress, and 500 results takes ~40s, so ask for what you will use. Omit to get a single page. If you pass both `max_results` and `max_pages`, whichever budget is smaller wins.","on_invalid":"ignore","example":100,"minimum":1,"maximum":500,"aliases":["limit","max"]}],"returns":"results[]{product_id, title, url, image, images[], price, original_price, currency, discount_pct, price_formatted, sold_count, rating, sku_id, product_type, promo_tags[]} (store_name/store_url are null on search cards — AliExpress removed them upstream; use product_detail for the store) + related_searches[] + ranking_searches[] (AliExpress 'people also search for' / trending terms) (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"wireless earbuds","country":"US","currency":"USD"}},{"name":"product_detail","description":"(country=RU: served from AliExpress Russia — price range, every SKU variant with RUB price/stock/image, images, rating, review_count, sold_count, stock, category path, short description; store name, shipping, coupons are not published there and come back null) Full product + SKU-variant price/stock matrix + specs + images + video + store + shipping + rating + coupons + sale countdown + wishlist counts + item weight where the seller published one (empty when they did not — never guessed)","required_params":[],"optional_params":["product_id","url","country","currency","language","province","city"],"params":[{"name":"product_id","type":"string","required":false,"description":"AliExpress product ID — the digits in the product URL (…/item/<id>.html). Provide product_id OR url.","on_invalid":"reject","example":"3256808363596774","aliases":["productId","id"]},{"name":"url","type":"string","required":false,"description":"Full product URL — alternative to product_id.","on_invalid":"reject","example":"https://www.aliexpress.com/item/3256808363596774.html","aliases":["product_url"]},{"name":"country","type":"string","required":false,"description":"Ship-to country (2-letter ISO code, e.g. US, DE, TR). Changes prices, availability and shipping options. RUSSIA IS SUPPORTED: country=RU is served from AliExpress Russia (aliexpress.ru), the storefront Russian buyers actually use (the global site does not sell to Russia). With RU, `search` and `product_detail` work; prices are in RUB and titles in Russian whatever `currency`/`language` say (meta.currency_applied / meta.language_applied tell you), and Russian local-seller items carry ids like `1_187973544` — pass them back to product_detail exactly as search returned them. Other actions answer MARKET_UNAVAILABLE for RU at once.","on_invalid":"ignore","default":"US","example":"DE","aliases":["ship_to"]},{"name":"currency","type":"string","required":false,"description":"Currency for prices (3-letter ISO code, e.g. USD, EUR, TRY).","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"language","type":"string","required":false,"description":"Response language (2-letter code, e.g. de, es, fr, ru, pt, ja, ko, tr, it, ar). Independent of `country`: you can ship to US and read titles in German. Measured 2026-08-26 — 11 of 12 languages localise the title; `zh` often returns English because sellers do not publish a Chinese title. The code is passed through to AliExpress as given: one it does not recognise comes back in English rather than failing. `meta.language_sent` echoes what was sent.","on_invalid":"ignore","default":"en","example":"de","aliases":["lang","locale"]},{"name":"province","type":"string","required":false,"description":"Destination state/province, plain text (e.g. California, Berlin, Sao Paulo). Defaults to a major region of `country`. Affects delivery estimate and, for some warehouse-local items, whether shipping resolves at all. Measured: within the US the ETA shifts by state (California 3-8 days vs Alaska 4-14), so set it when you need a precise quote.","on_invalid":"ignore","example":"California","aliases":["state","region"]},{"name":"city","type":"string","required":false,"description":"Destination city, plain text. Optional and only refines the estimate; `province` is the field that actually resolves the address (measured: city alone does not).","on_invalid":"ignore","example":"Los Angeles"}],"returns":"product{product_id, title, price_min, price_max, currency, rating, review_count, sold_count, total_stock, images[], video_url, sku_variants[]{sku_id, props, price, stock, available, image, thumbnail}, sku_properties[]{name, values[], has_images, value_details[]{value_id, name, image, thumbnail, color_hex, ships_from_code, size_chart, size_measurements}}, specs[]{name,value}, store{store_id, shop_id, name, store_url, store_home, seller_id, seller_country, seller_open_time, seller_level, top_rated, logo, seller_feedback_count, seller_positive_rate, seller_score}, shipping{ship_to, shipping_cost, free, list_freight, delivery_estimate, delivery_eta, delivery_days_min, delivery_days_max, ship_from}, tags{choice, local_plus, scene_type}, interest_point{code, text, icon}, coupons[]{text, promotion_id}, sale{type, ends_at, countdown}, selling_points[], wishlist_count, store_wished_count, description_url, weight, weight_unit, weight_raw, weight_source} — STORE IDS: AliExpress numbers one seller TWICE and the two numbers are never the same (measured 2026-08-28 over 20 products / 8 distinct stores: 20/20 different). `store_id` is the storefront number — the digits in `store_url`, the id `store_info` reports as `canonical_store_id`, and the one to pass back into `store_info`. `shop_id` is AliExpress's internal shop number, which it uses in its own storefront app links. Both open the same shop, so neither is wrong, but they are different values and each now has its own name — before 2026-08-28 `store_id` carried the shop number while `store_url` carried the storefront number, so the two disagreed on every product. — STORE LOGO: null means this shop never uploaded one. AliExpress serves a single generic avatar in that case (4 of 8 stores in the sample above shared it byte-for-byte), and that placeholder is reported as null rather than echoed as if it were the shop's own branding. — SELLER FEEDBACK: `seller_feedback_count` counts feedback left on the SELLER, not reviews of this product — a store with 10 seller ratings can easily sell a product with 3,000 buyer reviews, and `review_count` is the product figure. When the seller has no feedback at all (3 of 8 stores measured), `seller_positive_rate` and `seller_score` are null: AliExpress sends 0.0/0 there, which reads as a 0% seller rather than an unrated one. `seller_positive_rate` is AliExpress's own published percentage and is NOT derivable from the counts - its positive-feedback tally is taken over a different window than the lifetime total, so that tally is not published rather than handed over as a number that invites the wrong division. — SKU IMAGES: `sku_variants[].image` is the full-size picture of that exact variant and `thumbnail` is the 120x120 swatch the site renders in its selector. AliExpress attaches a picture to visual dimensions only, so a variant gets one when it has a colour/style dimension and null when its dimensions are text (size, model, material). Measured over five multi-variant products: 135/135, 114/114, 52/52 and 21/21 variants carried an image; null is never a placeholder and is never borrowed from another variant. `sku_properties[].has_images` tells you up front which dimension is the visual one. Size dimensions instead carry `size_chart` (the seller's own EU/US/UK/JP/BR/KR/MX conversion) and `size_measurements` where published, — WEIGHT: AliExpress publishes no structured weight, so `weight` is read out of the seller's own attribute line and is null far more often than not. Measured 2026-08-07 over 212 live products across 12 categories: 5.7% carry a usable weight, a further 7.5% have a weight attribute whose contents are not one unambiguous mass, and 86.8% say nothing at all. Coverage is wildly uneven by category — beauty 27.8%, jewelry 16.7%, auto parts 11.8%, tools/hardware 11.1%, and 0.0% for apparel, electronics, home & kitchen, office, pet supplies, phone accessories, sports & outdoor and toys — so do not budget from an average. `weight` is a number and `weight_unit` is one of g/kg/lb/oz — never a bare number, never a unit you have to infer. It is null, NEVER 0 and never borrowed from another variant or listing, whenever the seller was silent or wrote something that is not one unambiguous mass (a range like '0.2-5g', a bound like 'Below 180g', a bare '2' with no unit, or junk). `weight_raw` is the seller's verbatim string and `weight_source` the attribute it came from, so you can audit any rejection instead of guessing whether the field was silent or unparseable.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"3256808363596774"}},{"name":"reviews","description":"Buyer reviews (paginated — fetch many pages in one call) + rating distribution","required_params":[],"optional_params":["product_id","url","page","max_pages","max_results","page_size","filter","review_sort","country","currency"],"params":[{"name":"product_id","type":"string","required":false,"description":"AliExpress product ID — the digits in the product URL (…/item/<id>.html). Provide product_id OR url.","on_invalid":"reject","example":"3256808363596774","aliases":["productId","id"]},{"name":"url","type":"string","required":false,"description":"Full product URL — alternative to product_id.","on_invalid":"reject","example":"https://www.aliexpress.com/item/3256808363596774.html","aliases":["product_url"]},{"name":"filter","type":"enum","required":false,"description":"Which reviews to return (passed to the upstream feedback API; the 3 listed are the documented values).","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All reviews"},{"value":"image","label":"With photos"},{"value":"additional","label":"With follow-up comments"}],"default":"all","example":"all"},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1–20; larger values are capped at 20).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":20,"aliases":["pageSize"]},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive review pages to gather in one call (1–20). Combine with page_size=20 to pull all reviews of a product (e.g. max_pages=10 → up to 200 reviews).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20},{"name":"review_sort","type":"string","required":false,"description":"Upstream sort key (advanced) — leave at the default.","on_invalid":"ignore","default":"complex_default"},{"name":"country","type":"string","required":false,"description":"Ship-to country (2-letter ISO code, e.g. US, DE, TR). Changes prices, availability and shipping options. RUSSIA IS SUPPORTED: country=RU is served from AliExpress Russia (aliexpress.ru), the storefront Russian buyers actually use (the global site does not sell to Russia). With RU, `search` and `product_detail` work; prices are in RUB and titles in Russian whatever `currency`/`language` say (meta.currency_applied / meta.language_applied tell you), and Russian local-seller items carry ids like `1_187973544` — pass them back to product_detail exactly as search returned them. Other actions answer MARKET_UNAVAILABLE for RU at once.","on_invalid":"ignore","default":"US","example":"DE","aliases":["ship_to"]},{"name":"currency","type":"string","required":false,"description":"Currency for prices (3-letter ISO code, e.g. USD, EUR, TRY).","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"language","type":"string","required":false,"description":"Response language (2-letter code, e.g. de, es, fr, ru, pt, ja, ko, tr, it, ar). Independent of `country`: you can ship to US and read titles in German. Measured 2026-08-26 — 11 of 12 languages localise the title; `zh` often returns English because sellers do not publish a Chinese title. The code is passed through to AliExpress as given: one it does not recognise comes back in English rather than failing. `meta.language_sent` echoes what was sent.","on_invalid":"ignore","default":"en","example":"de","aliases":["lang","locale"]},{"name":"page","type":"integer","required":false,"description":"Page number to start from (easy paging: 1, 2, 3…). Measured ceiling: page 60 is the deepest page AliExpress still serves — page 100 comes back empty. Page until `meta.pagination.has_more` is false rather than probing for the end.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":60},{"name":"max_results","type":"integer","required":false,"description":"How many reviews to return (1–400 — the ceiling is 20 per page × 20 pages). The engine works out how many review pages that costs. Use this instead of juggling `page_size` and `max_pages` yourself; if you pass both, the smaller budget wins.","on_invalid":"ignore","example":100,"minimum":1,"maximum":400,"aliases":["limit","max"]}],"returns":"reviews[]{rating, text, date, country, sku_info, logistics, images[], labels[]} + summary{total_reviews, total_pages, average_star, distribution{1..5}, positive/neutral/negative counts} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"3256808363596774","page_size":10}},{"name":"similar","description":"Products similar to a given item (search-backed 'more like this', seed product excluded), paginated","required_params":[],"optional_params":["product_id","url","query","page","max_pages","max_results","sort","country","currency"],"params":[{"name":"product_id","type":"string","required":false,"description":"AliExpress product ID — the digits in the product URL (…/item/<id>.html). Provide product_id OR url.","on_invalid":"reject","example":"3256808363596774","aliases":["productId","id"]},{"name":"url","type":"string","required":false,"description":"Full product URL — alternative to product_id.","on_invalid":"reject","example":"https://www.aliexpress.com/item/3256808363596774.html","aliases":["product_url"]},{"name":"query","type":"string","required":false,"description":"Optional seed keywords — overrides the product's own title (skips the detail lookup). Provide product_id/url OR query.","on_invalid":"ignore","example":"usb c cable","aliases":["q","keyword"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match"},{"value":"orders","label":"Best selling (most orders)"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"newest","label":"Newest listed"},{"value":"default","label":"Best match (alias)"},{"value":"best_selling","label":"Best selling (alias)"},{"value":"price_asc","label":"Price: low to high (alias)"},{"value":"price_desc","label":"Price: high to low (alias)"}],"default":"best_match","example":"best_match"},{"name":"country","type":"string","required":false,"description":"Ship-to country (2-letter ISO code, e.g. US, DE, TR). Changes prices, availability and shipping options. RUSSIA IS SUPPORTED: country=RU is served from AliExpress Russia (aliexpress.ru), the storefront Russian buyers actually use (the global site does not sell to Russia). With RU, `search` and `product_detail` work; prices are in RUB and titles in Russian whatever `currency`/`language` say (meta.currency_applied / meta.language_applied tell you), and Russian local-seller items carry ids like `1_187973544` — pass them back to product_detail exactly as search returned them. Other actions answer MARKET_UNAVAILABLE for RU at once.","on_invalid":"ignore","default":"US","example":"DE","aliases":["ship_to"]},{"name":"currency","type":"string","required":false,"description":"Currency for prices (3-letter ISO code, e.g. USD, EUR, TRY).","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"language","type":"string","required":false,"description":"Response language (2-letter code, e.g. de, es, fr, ru, pt, ja, ko, tr, it, ar). Independent of `country`: you can ship to US and read titles in German. Measured 2026-08-26 — 11 of 12 languages localise the title; `zh` often returns English because sellers do not publish a Chinese title. The code is passed through to AliExpress as given: one it does not recognise comes back in English rather than failing. `meta.language_sent` echoes what was sent.","on_invalid":"ignore","default":"en","example":"de","aliases":["lang","locale"]},{"name":"page","type":"integer","required":false,"description":"Page number to start from (easy paging: 1, 2, 3…). Measured ceiling: page 60 is the deepest page AliExpress still serves — page 100 comes back empty. Page until `meta.pagination.has_more` is false rather than probing for the end.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":60},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch in one call (1–10). AliExpress serves 46–60 results per page, so 10 pages is about 500 results and takes ~40s. Prefer `max_results` if you want a result count rather than a page count; larger values are capped at 10.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":10},{"name":"max_results","type":"integer","required":false,"description":"How many results to return (1–500). AliExpress serves 46–60 per page, so asking for more than about 50 fetches further pages — each one is another request against AliExpress, and 500 results takes ~40s, so ask for what you will use. Omit to get a single page. If you pass both `max_results` and `max_pages`, whichever budget is smaller wins.","on_invalid":"ignore","example":100,"minimum":1,"maximum":500,"aliases":["limit","max"]}],"returns":"results[]{product_id, title, url, image, images[], price, original_price, currency, discount_pct, price_formatted, sold_count, rating, sku_id, product_type, promo_tags[]} (store_name/store_url are null on search cards — AliExpress removed them upstream; use product_detail for the store) + seed_query + title — products like the given one (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.aliexpress.com/item/3256808363596774.html"}},{"name":"description","description":"Full product description text + images","required_params":[],"optional_params":["product_id","url","description_url","country","currency"],"params":[{"name":"product_id","type":"string","required":false,"description":"AliExpress product ID — the digits in the product URL (…/item/<id>.html). Provide product_id OR url.","on_invalid":"reject","example":"3256808363596774","aliases":["productId","id"]},{"name":"url","type":"string","required":false,"description":"Full product URL — alternative to product_id.","on_invalid":"reject","example":"https://www.aliexpress.com/item/3256808363596774.html","aliases":["product_url"]},{"name":"description_url","type":"string","required":false,"description":"Direct description URL from a previous product_detail response (advanced — skips one lookup).","on_invalid":"ignore"},{"name":"country","type":"string","required":false,"description":"Ship-to country (2-letter ISO code, e.g. US, DE, TR). Changes prices, availability and shipping options. RUSSIA IS SUPPORTED: country=RU is served from AliExpress Russia (aliexpress.ru), the storefront Russian buyers actually use (the global site does not sell to Russia). With RU, `search` and `product_detail` work; prices are in RUB and titles in Russian whatever `currency`/`language` say (meta.currency_applied / meta.language_applied tell you), and Russian local-seller items carry ids like `1_187973544` — pass them back to product_detail exactly as search returned them. Other actions answer MARKET_UNAVAILABLE for RU at once.","on_invalid":"ignore","default":"US","example":"DE","aliases":["ship_to"]},{"name":"currency","type":"string","required":false,"description":"Currency for prices (3-letter ISO code, e.g. USD, EUR, TRY).","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"language","type":"string","required":false,"description":"Response language (2-letter code, e.g. de, es, fr, ru, pt, ja, ko, tr, it, ar). Independent of `country`: you can ship to US and read titles in German. Measured 2026-08-26 — 11 of 12 languages localise the title; `zh` often returns English because sellers do not publish a Chinese title. The code is passed through to AliExpress as given: one it does not recognise comes back in English rather than failing. `meta.language_sent` echoes what was sent.","on_invalid":"ignore","default":"en","example":"de","aliases":["lang","locale"]},{"name":"province","type":"string","required":false,"description":"Destination state/province, plain text (e.g. California, Berlin, Sao Paulo). Defaults to a major region of `country`. Affects delivery estimate and, for some warehouse-local items, whether shipping resolves at all. Measured: within the US the ETA shifts by state (California 3-8 days vs Alaska 4-14), so set it when you need a precise quote.","on_invalid":"ignore","example":"California","aliases":["state","region"]},{"name":"city","type":"string","required":false,"description":"Destination city, plain text. Optional and only refines the estimate; `province` is the field that actually resolves the address (measured: city alone does not).","on_invalid":"ignore","example":"Los Angeles"}],"returns":"text + images[] + block_count + format","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.aliexpress.com/item/3256808363596774.html"}},{"name":"shipping","description":"Shipping options per destination country","required_params":[],"optional_params":["product_id","url","country","currency","language","province","city"],"params":[{"name":"product_id","type":"string","required":false,"description":"AliExpress product ID — the digits in the product URL (…/item/<id>.html). Provide product_id OR url.","on_invalid":"reject","example":"3256808363596774","aliases":["productId","id"]},{"name":"url","type":"string","required":false,"description":"Full product URL — alternative to product_id.","on_invalid":"reject","example":"https://www.aliexpress.com/item/3256808363596774.html","aliases":["product_url"]},{"name":"country","type":"string","required":false,"description":"Ship-to country (2-letter ISO code, e.g. US, DE, TR). Changes prices, availability and shipping options. RUSSIA IS SUPPORTED: country=RU is served from AliExpress Russia (aliexpress.ru), the storefront Russian buyers actually use (the global site does not sell to Russia). With RU, `search` and `product_detail` work; prices are in RUB and titles in Russian whatever `currency`/`language` say (meta.currency_applied / meta.language_applied tell you), and Russian local-seller items carry ids like `1_187973544` — pass them back to product_detail exactly as search returned them. Other actions answer MARKET_UNAVAILABLE for RU at once.","on_invalid":"ignore","default":"US","example":"DE","aliases":["ship_to"]},{"name":"currency","type":"string","required":false,"description":"Currency for prices (3-letter ISO code, e.g. USD, EUR, TRY).","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"language","type":"string","required":false,"description":"Response language (2-letter code, e.g. de, es, fr, ru, pt, ja, ko, tr, it, ar). Independent of `country`: you can ship to US and read titles in German. Measured 2026-08-26 — 11 of 12 languages localise the title; `zh` often returns English because sellers do not publish a Chinese title. The code is passed through to AliExpress as given: one it does not recognise comes back in English rather than failing. `meta.language_sent` echoes what was sent.","on_invalid":"ignore","default":"en","example":"de","aliases":["lang","locale"]},{"name":"province","type":"string","required":false,"description":"Destination state/province, plain text (e.g. California, Berlin, Sao Paulo). Defaults to a major region of `country`. Affects delivery estimate and, for some warehouse-local items, whether shipping resolves at all. Measured: within the US the ETA shifts by state (California 3-8 days vs Alaska 4-14), so set it when you need a precise quote.","on_invalid":"ignore","example":"California","aliases":["state","region"]},{"name":"city","type":"string","required":false,"description":"Destination city, plain text. Optional and only refines the estimate; `province` is the field that actually resolves the address (measured: city alone does not).","on_invalid":"ignore","example":"Los Angeles"}],"returns":"options[]{carrier, cost, currency, delivery estimate} + option_count (for the given ship-to `country`)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.aliexpress.com/item/3256808363596774.html"}},{"name":"store_info","description":"Store profile (+ live seller metrics when a query is supplied)","required_params":[],"optional_params":["store_id","store_url","query","country","currency"],"params":[{"name":"store_id","type":"string","required":false,"description":"AliExpress store ID — the digits in the store URL (…/store/<id>), i.e. `store.store_id` from product_detail. AliExpress's internal shop number (`store.shop_id`) also resolves to the same shop. Provide store_id OR store_url.","on_invalid":"reject","example":"1103576287","aliases":["storeId","shop_id","shopId"]},{"name":"store_url","type":"string","required":false,"description":"Full store URL — alternative to store_id.","on_invalid":"reject","example":"https://www.aliexpress.com/store/1103576287"},{"name":"query","type":"string","required":false,"description":"Any keyword the store sells — unlocks live seller metrics (score, positive rate, feedback count). Optional.","on_invalid":"reject","example":"earbuds"},{"name":"country","type":"string","required":false,"description":"Ship-to country (2-letter ISO code, e.g. US, DE, TR). Changes prices, availability and shipping options. RUSSIA IS SUPPORTED: country=RU is served from AliExpress Russia (aliexpress.ru), the storefront Russian buyers actually use (the global site does not sell to Russia). With RU, `search` and `product_detail` work; prices are in RUB and titles in Russian whatever `currency`/`language` say (meta.currency_applied / meta.language_applied tell you), and Russian local-seller items carry ids like `1_187973544` — pass them back to product_detail exactly as search returned them. Other actions answer MARKET_UNAVAILABLE for RU at once.","on_invalid":"ignore","default":"US","example":"DE","aliases":["ship_to"]},{"name":"currency","type":"string","required":false,"description":"Currency for prices (3-letter ISO code, e.g. USD, EUR, TRY).","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"language","type":"string","required":false,"description":"Response language (2-letter code, e.g. de, es, fr, ru, pt, ja, ko, tr, it, ar). Independent of `country`: you can ship to US and read titles in German. Measured 2026-08-26 — 11 of 12 languages localise the title; `zh` often returns English because sellers do not publish a Chinese title. The code is passed through to AliExpress as given: one it does not recognise comes back in English rather than failing. `meta.language_sent` echoes what was sent.","on_invalid":"ignore","default":"en","example":"de","aliases":["lang","locale"]},{"name":"province","type":"string","required":false,"description":"Destination state/province, plain text (e.g. California, Berlin, Sao Paulo). Defaults to a major region of `country`. Affects delivery estimate and, for some warehouse-local items, whether shipping resolves at all. Measured: within the US the ETA shifts by state (California 3-8 days vs Alaska 4-14), so set it when you need a precise quote.","on_invalid":"ignore","example":"California","aliases":["state","region"]},{"name":"city","type":"string","required":false,"description":"Destination city, plain text. Optional and only refines the estimate; `province` is the field that actually resolves the address (measured: city alone does not).","on_invalid":"ignore","example":"Los Angeles"}],"returns":"store{store_id, canonical_store_id, name, store_url, source} (+ seller_id, business_type, business_license_url, tab_count when AliExpress also serves the store's own profile data — best-effort, often unavailable) + seller_metrics{seller_score, seller_positive_rate, seller_feedback_count, seller_country, top_rated} — metrics only when `query` is given AND one of the store's own products can be found for it. An id that is not a store returns NOT_FOUND.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"store_id":"1103576287"}},{"name":"deals","description":"SuperDeals / discounted cards (search-derived, sorted by discount)","required_params":["query"],"optional_params":["min_discount","sort","page","max_pages","max_results","country","currency"],"params":[{"name":"query","type":"string","required":true,"description":"Product keywords to find deals for.","on_invalid":"reject","example":"earbuds","aliases":["q","keyword"]},{"name":"min_discount","type":"integer","required":false,"description":"Only items discounted at least this % off the original price.","on_invalid":"ignore","default":0,"example":30,"minimum":0,"maximum":99},{"name":"sort","type":"enum","required":false,"description":"How candidate items are ranked before the discount filter.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match"},{"value":"orders","label":"Best selling (most orders)"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"newest","label":"Newest listed"},{"value":"default","label":"Best match (alias)"},{"value":"best_selling","label":"Best selling (alias)"},{"value":"price_asc","label":"Price: low to high (alias)"},{"value":"price_desc","label":"Price: high to low (alias)"}],"default":"orders","example":"orders"},{"name":"country","type":"string","required":false,"description":"Ship-to country (2-letter ISO code, e.g. US, DE, TR). Changes prices, availability and shipping options. RUSSIA IS SUPPORTED: country=RU is served from AliExpress Russia (aliexpress.ru), the storefront Russian buyers actually use (the global site does not sell to Russia). With RU, `search` and `product_detail` work; prices are in RUB and titles in Russian whatever `currency`/`language` say (meta.currency_applied / meta.language_applied tell you), and Russian local-seller items carry ids like `1_187973544` — pass them back to product_detail exactly as search returned them. Other actions answer MARKET_UNAVAILABLE for RU at once.","on_invalid":"ignore","default":"US","example":"DE","aliases":["ship_to"]},{"name":"currency","type":"string","required":false,"description":"Currency for prices (3-letter ISO code, e.g. USD, EUR, TRY).","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"language","type":"string","required":false,"description":"Response language (2-letter code, e.g. de, es, fr, ru, pt, ja, ko, tr, it, ar). Independent of `country`: you can ship to US and read titles in German. Measured 2026-08-26 — 11 of 12 languages localise the title; `zh` often returns English because sellers do not publish a Chinese title. The code is passed through to AliExpress as given: one it does not recognise comes back in English rather than failing. `meta.language_sent` echoes what was sent.","on_invalid":"ignore","default":"en","example":"de","aliases":["lang","locale"]},{"name":"page","type":"integer","required":false,"description":"Page number to start from (easy paging: 1, 2, 3…). Measured ceiling: page 60 is the deepest page AliExpress still serves — page 100 comes back empty. Page until `meta.pagination.has_more` is false rather than probing for the end.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":60},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch in one call (1–10). AliExpress serves 46–60 results per page, so 10 pages is about 500 results and takes ~40s. Prefer `max_results` if you want a result count rather than a page count; larger values are capped at 10.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":10}],"returns":"results[]{product_id, title, url, image, images[], price, original_price, currency, discount_pct, price_formatted, sold_count, rating, sku_id, product_type, promo_tags[]} (store_name/store_url are null on search cards — AliExpress removed them upstream; use product_detail for the store) — only discounted items, sorted by discount_pct (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"wireless earbuds"}}]},{"name":"allegro","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Allegro API scraper — search Poland's #1 marketplace (allegro.pl): listings with price, condition, delivery & category filters, offer/product detail, category browse, related offers and a seller's full catalogue. Prices in PLN, results paginated.","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/allegro/v1","spec_available":true,"actions":[{"name":"search","description":"Search Allegro by keyword — returns offer cards with title, price (PLN), delivery cost, seller, rating, photos and offer URL. Supports price range, condition, free-delivery, sort and category filters, with page pagination.","required_params":["query"],"optional_params":["max_pages","sort","min_price","max_price","condition","free_delivery","category"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (offer keywords, Polish or any language).","on_invalid":"reject","example":"iphone 15"},{"name":"max_pages","type":"integer","required":false,"description":"How many result pages to fetch (1–10). Each page ≈ 60 offers.","on_invalid":"ignore","default":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Best match (Allegro default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"popularity","label":"Most popular"},{"value":"newest","label":"Most recently listed"}],"default":"relevance"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter, in PLN.","on_invalid":"ignore","example":100},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter, in PLN.","on_invalid":"ignore","example":2000},{"name":"condition","type":"enum","required":false,"description":"Item condition filter.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"Nowy (New)"},{"value":"used","label":"Używany (Used)"}],"example":"used"},{"name":"free_delivery","type":"boolean","required":false,"description":"Only offers with free delivery (darmowa dostawa).","on_invalid":"ignore"},{"name":"category","type":"string","required":false,"description":"Restrict to an Allegro category slug (the slug in a category URL, e.g. telefony-komorkowe-165).","on_invalid":"ignore","example":"telefony-komorkowe-165"}],"returns":"offers[]{id, title, url, price{amount,currency}, delivery_text, seller{login, super_seller, positive_feedback_percent}, rating, rating_count, images[], parameters[]} + total, last_page, pages_fetched","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 15"}},{"name":"category","description":"Browse an Allegro category without a keyword (the /kategoria/<slug> grid) — discover popular offers in a category. Supports price/condition/free-delivery/sort filters and page pagination.","required_params":["category"],"optional_params":["max_pages","sort","min_price","max_price","condition","free_delivery"],"params":[{"name":"category","type":"string","required":true,"description":"Any Allegro category: the numeric id (491), the slug (laptopy-491) or the full category URL. Use the `categories` action to find one by name. Department landing pages (like 'elektronika') have no offer grid and are rejected with that reason.","on_invalid":"reject","example":"laptopy-491"},{"name":"max_pages","type":"integer","required":false,"description":"How many category pages to fetch (1–10).","on_invalid":"ignore","default":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Allegro default"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"popularity","label":"Most popular"},{"value":"newest","label":"Most recently listed"}],"default":"relevance"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter, in PLN.","on_invalid":"ignore","example":100},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter, in PLN.","on_invalid":"ignore","example":2000},{"name":"condition","type":"enum","required":false,"description":"Item condition filter.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"Nowy (New)"},{"value":"used","label":"Używany (Used)"}],"example":"new"},{"name":"free_delivery","type":"boolean","required":false,"description":"Only offers with free delivery.","on_invalid":"ignore"}],"returns":"offers[] (same shape as search) + category_path, total, last_page, pages_fetched","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"laptopy-491"}},{"name":"offer","description":"Single Allegro offer/product detail by id or URL — title, price (PLN), main image and gallery, seller handle, and description.","required_params":[],"optional_params":["offer_id","offer_url","url"],"params":[{"name":"offer_id","type":"string","required":false,"description":"Allegro offer id — the digits in an offer URL (allegro.pl/oferta/<id>). Provide offer_id OR offer_url.","on_invalid":"reject","example":"18673156866"},{"name":"offer_url","type":"string","required":false,"description":"Full offer/product URL — alternative to offer_id.","on_invalid":"reject","example":"https://allegro.pl/oferta/18673156866","aliases":["url"]}],"returns":"offer{id, url, title, price{amount,currency}, price_string, image_url, images[], seller{login, listing_url}, description}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"offer_id":"18673156866"}},{"name":"seller_offers","description":"A seller's public active listings, paginated — every offer a seller (shop) has live. Provide the seller login (handle from a seller URL / a search result's seller.login).","required_params":["seller"],"optional_params":["max_pages","sort"],"params":[{"name":"seller","type":"string","required":true,"description":"Allegro seller login/handle (from allegro.pl/uzytkownik/<login> or a search result's seller.login).","on_invalid":"reject","example":"AppleOnly"},{"name":"max_pages","type":"integer","required":false,"description":"How many of the seller's listing pages to fetch (1–10).","on_invalid":"ignore","default":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Order within the seller's listings.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Default"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Most recent"}],"default":"relevance"}],"returns":"offers[] (same shape as search) + seller, total, last_page, pages_fetched","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"seller":"AppleOnly"}},{"name":"categories","description":"Find an Allegro category by name, or list the children of one. Returns the id you feed to `category` (and to search's `category` filter), the full path from the top of the tree, and whether it is a leaf. Allegro publishes 25 576 categories; this is how you find the right one without guessing a slug.","required_params":[],"optional_params":["query","parent_id","leaf_only","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Case-insensitive text matched against the category name and its path. Omit it to list the top of the tree, or to list the children of `parent_id`.","on_invalid":"ignore","example":"laptopy","aliases":["q","name"]},{"name":"parent_id","type":"string","required":false,"description":"List this category's direct children. Combine with `query` to search inside one branch.","on_invalid":"ignore","example":"491"},{"name":"leaf_only","type":"boolean","required":false,"description":"Only leaf categories, which are the ones that carry an offer grid.","on_invalid":"ignore","default":false},{"name":"limit","type":"integer","required":false,"description":"Maximum rows to return (1-500).","on_invalid":"ignore","default":50,"minimum":1,"maximum":500}],"returns":"categories[]{id, name, path, parent_id, leaf, url}, count, total","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"laptopy"}},{"name":"suggested","description":"Related/recommended Allegro offers for a keyword — a quick set of relevant offers (the first result page) useful for 'more like this' / market discovery.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to fetch related offers for.","on_invalid":"reject","example":"macbook air"}],"returns":"offers[] (same shape as search) + total","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 15"}}]},{"name":"altex","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Altex API — search Romania's largest electronics retailer (and Media Galaxy) and read products with RON prices, PRP, resealed units, per-store stock, sellers, specs and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/altex/v1","spec_available":true,"actions":[{"name":"search","description":"Search altex.ro (or mediagalaxy.ro) by keyword with the site's own brand, price (RON), in-stock, seller, store and rating filters and sorts. Each row: SKU, EAN, brand, title, URL, image, selling price, crossed-out price, PRP, cheapest resealed price, monthly instalment, stock status, stores holding stock, seller (Altex or marketplace) and average rating. The source stops search totals at 720.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search words, 3-50 characters (the site refuses shorter terms).","on_invalid":"reject","example":"laptop","aliases":["q","keyword","keywords","term"]},{"name":"brand","type":"string","required":false,"description":"Brand slug as the site writes it in its filter links (lower case: lenovo, samsung, hp, apple). Checked against the source's own filter echo — an unknown slug is refused (the source itself would silently return the whole listing).","on_invalid":"reject","example":"lenovo","aliases":["brand_slug"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in whole lei (RON), applied to the selling price.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in whole lei (RON), applied to the selling price.","on_invalid":"reject","example":3000,"minimum":0,"aliases":["max_price"]},{"name":"in_stock","type":"boolean","required":false,"description":"Only products in stock now (the site's own 'In stoc' switch). Without it, out-of-stock products are listed too, with their price.","on_invalid":"reject","default":false,"aliases":["only_in_stock","available"]},{"name":"seller_id","type":"integer","required":false,"description":"Only products on which this seller has an in-stock offer (a row's `seller.id` / `seller_ids`; 1 = Altex, 2 = Media Galaxy, other ids = marketplace sellers). The buy-box row can still be another seller's.","on_invalid":"reject","example":1,"minimum":1,"aliases":["seller"]},{"name":"store_id","type":"integer","required":false,"description":"Only products in stock at this store (the `store_id` from the stores action or a row's `store_ids_with_stock`).","on_invalid":"reject","example":1208,"minimum":1,"aliases":["in_store"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average rating is at least this many stars (1-5).","on_invalid":"reject","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orders that measurably change the result are offered.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (search default; category listings fall back to best_selling)"},{"value":"best_selling","label":"Best selling first (the category default, 'Cele mai vandute')"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"name_asc","label":"Name, A to Z"},{"value":"discount_desc","label":"Largest discount first, in lei (absolute, not percent)"},{"value":"review_count_desc","label":"Most reviewed first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Results page, 1-based. A page past the end returns no rows with page_beyond_end true.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-96 (the site shows 24/36/48; it serves at most 96).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":96,"aliases":["page_size","per_page","size"]},{"name":"site","type":"enum","required":false,"description":"Which shop front to read. altex (default) or mediagalaxy — the same group's second chain on the same catalogue. Measured on the same SKUs: identical prices and stock; the own-shop seller is Altex (id 1) on one and Media Galaxy (id 2) on the other, and the instalment figure can differ.","on_invalid":"reject","allowed_values":[{"value":"altex","label":"altex.ro (default)"},{"value":"mediagalaxy","label":"mediagalaxy.ro — the sister chain, same catalogue"}],"default":"altex","aliases":["shop","store_front"]}],"returns":"results[]{product_id, sku, title, brand, brand_id, url, url_key, image, ean, ean_codes[], short_description, currency (RON), price, was_price (crossed-out before price), discount_amount, discount_percent, discount_type (none|fixed|percentage|repositioning), recommended_retail_price (PRP), resealed_from_price (cheapest resealed unit — NOT an Omnibus price), resealed_count, installment_monthly_from, in_stock, availability (in_stock|supplier_stock|in_store_only|out_of_stock), display_unit, store_pickup_available, stores_with_stock, store_ids_with_stock[], preorder, end_of_life, has_gift, seller{id, name, type: retailer|marketplace}, seller_ids[], rating (average, 0-5), review_count} + total, total_capped, pages, page, limit, has_more, page_beyond_end, facets{brands[], categories[]}, search_term","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"laptop","limit":24}},{"name":"category","description":"List one altex.ro category (by its URL slug or page URL) with the same filters and sorts as search. Totals are exact (not capped). Default order: best selling.","required_params":[],"optional_params":[],"params":[{"name":"category","type":"string","required":false,"description":"Category slug from the site's URL (altex.ro/<slug>/cpl/), a product's `category_path[].url_key`, or a `url_key` from the categories action. One of category or url.","on_invalid":"reject","example":"laptop-home","aliases":["category_slug","url_key","slug"]},{"name":"url","type":"string","required":false,"description":"An altex.ro / mediagalaxy.ro category page URL (…/<slug>/cpl/).","on_invalid":"reject","example":"https://altex.ro/laptop-home/cpl/","aliases":["category_url","link"]},{"name":"brand","type":"string","required":false,"description":"Brand slug as the site writes it in its filter links (lower case: lenovo, samsung, hp, apple). Checked against the source's own filter echo — an unknown slug is refused (the source itself would silently return the whole listing).","on_invalid":"reject","example":"lenovo","aliases":["brand_slug"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in whole lei (RON), applied to the selling price.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in whole lei (RON), applied to the selling price.","on_invalid":"reject","example":3000,"minimum":0,"aliases":["max_price"]},{"name":"in_stock","type":"boolean","required":false,"description":"Only products in stock now (the site's own 'In stoc' switch). Without it, out-of-stock products are listed too, with their price.","on_invalid":"reject","default":false,"aliases":["only_in_stock","available"]},{"name":"seller_id","type":"integer","required":false,"description":"Only products on which this seller has an in-stock offer (a row's `seller.id` / `seller_ids`; 1 = Altex, 2 = Media Galaxy, other ids = marketplace sellers). The buy-box row can still be another seller's.","on_invalid":"reject","example":1,"minimum":1,"aliases":["seller"]},{"name":"store_id","type":"integer","required":false,"description":"Only products in stock at this store (the `store_id` from the stores action or a row's `store_ids_with_stock`).","on_invalid":"reject","example":1208,"minimum":1,"aliases":["in_store"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average rating is at least this many stars (1-5).","on_invalid":"reject","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orders that measurably change the result are offered.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (search default; category listings fall back to best_selling)"},{"value":"best_selling","label":"Best selling first (the category default, 'Cele mai vandute')"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"name_asc","label":"Name, A to Z"},{"value":"discount_desc","label":"Largest discount first, in lei (absolute, not percent)"},{"value":"review_count_desc","label":"Most reviewed first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Results page, 1-based. A page past the end returns no rows with page_beyond_end true.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-96 (the site shows 24/36/48; it serves at most 96).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":96,"aliases":["page_size","per_page","size"]},{"name":"site","type":"enum","required":false,"description":"Which shop front to read. altex (default) or mediagalaxy — the same group's second chain on the same catalogue. Measured on the same SKUs: identical prices and stock; the own-shop seller is Altex (id 1) on one and Media Galaxy (id 2) on the other, and the instalment figure can differ.","on_invalid":"reject","allowed_values":[{"value":"altex","label":"altex.ro (default)"},{"value":"mediagalaxy","label":"mediagalaxy.ro — the sister chain, same catalogue"}],"default":"altex","aliases":["shop","store_front"]}],"returns":"results[]{product_id, sku, title, brand, brand_id, url, url_key, image, ean, ean_codes[], short_description, currency (RON), price, was_price (crossed-out before price), discount_amount, discount_percent, discount_type (none|fixed|percentage|repositioning), recommended_retail_price (PRP), resealed_from_price (cheapest resealed unit — NOT an Omnibus price), resealed_count, installment_monthly_from, in_stock, availability (in_stock|supplier_stock|in_store_only|out_of_stock), display_unit, store_pickup_available, stores_with_stock, store_ids_with_stock[], preorder, end_of_life, has_gift, seller{id, name, type: retailer|marketplace}, seller_ids[], rating (average, 0-5), review_count} + total, total_capped, pages, page, limit, has_more, page_beyond_end, facets{brands[], categories[]}, category{id, name, url_key, path}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"laptop-home","sort":"price_asc","limit":24}},{"name":"product","description":"Full product record: every seller's offer with RON price, crossed-out price, PRP, green tax and stock; resealed units with their store; average rating and the star distribution; specifications; images; category path; extra services (warranty) with prices.","required_params":[],"optional_params":[],"params":[{"name":"sku","type":"string","required":false,"description":"Altex product code exactly as a search row's `sku` returns it (the page's 'Cod produs', e.g. SMTIP151BL), or pass `url`.","on_invalid":"reject","example":"SMTIP151BL","aliases":["product_code","cod_produs","id"]},{"name":"url","type":"string","required":false,"description":"An altex.ro or mediagalaxy.ro product page URL (…/cpd/<SKU>/).","on_invalid":"reject","example":"https://altex.ro/telefon-apple-iphone-15-5g-128gb-blue/cpd/SMTIP151BL/","aliases":["product_url","link"]},{"name":"site","type":"enum","required":false,"description":"Which shop front to read. altex (default) or mediagalaxy — the same group's second chain on the same catalogue. Measured on the same SKUs: identical prices and stock; the own-shop seller is Altex (id 1) on one and Media Galaxy (id 2) on the other, and the instalment figure can differ.","on_invalid":"reject","allowed_values":[{"value":"altex","label":"altex.ro (default)"},{"value":"mediagalaxy","label":"mediagalaxy.ro — the sister chain, same catalogue"}],"default":"altex","aliases":["shop","store_front"]}],"returns":"product{… all search-row fields, offers[]{seller, price, was_price, discount_*, recommended_retail_price, green_tax, package_price, in_stock, availability, available_in_store, display_unit}, offer_count, other_offers_count, question_count, rating_distribution{1..5}, description, specifications[]{group, name, value, code}, images[], category, category_path[], resealed_offers[]{sku, resealed_code, price, new_price, discount_percent, reasons[], store{name, city, region, address}}, services[]{type, sku, name, price}, brand_logo}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"SMTIP151BL"}},{"name":"availability","description":"Per-store stock for one product: every store the source lists as holding it, with the quantity (the source caps it at 6 — qty_capped means 6 or more), city, region, address and phone.","required_params":[],"optional_params":[],"params":[{"name":"sku","type":"string","required":false,"description":"Altex product code exactly as a search row's `sku` returns it (the page's 'Cod produs', e.g. SMTIP151BL), or pass `url`.","on_invalid":"reject","example":"SMTIP151BL","aliases":["product_code","cod_produs","id"]},{"name":"url","type":"string","required":false,"description":"An altex.ro or mediagalaxy.ro product page URL (…/cpd/<SKU>/).","on_invalid":"reject","example":"https://altex.ro/telefon-apple-iphone-15-5g-128gb-blue/cpd/SMTIP151BL/","aliases":["product_url","link"]},{"name":"site","type":"enum","required":false,"description":"Which shop front to read. altex (default) or mediagalaxy — the same group's second chain on the same catalogue. Measured on the same SKUs: identical prices and stock; the own-shop seller is Altex (id 1) on one and Media Galaxy (id 2) on the other, and the instalment figure can differ.","on_invalid":"reject","allowed_values":[{"value":"altex","label":"altex.ro (default)"},{"value":"mediagalaxy","label":"mediagalaxy.ro — the sister chain, same catalogue"}],"default":"altex","aliases":["shop","store_front"]}],"returns":"product{product_id, sku, title, brand, url, price, currency, in_stock, availability}, stores[]{store_id, name, network (altex|media_galaxy|brico), city, region, address, qty, qty_capped, phone}, stores_listed, store_ids_with_stock_count, qty_cap","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"SMTIP151BL"}},{"name":"reviews","description":"Written customer reviews of one product, newest or most helpful first, optionally only one star rating. Altex and Media Galaxy share the same reviews.","required_params":[],"optional_params":[],"params":[{"name":"sku","type":"string","required":false,"description":"Altex product code exactly as a search row's `sku` returns it (the page's 'Cod produs', e.g. SMTIP151BL), or pass `url`.","on_invalid":"reject","example":"SMTIP151BL","aliases":["product_code","cod_produs","id"]},{"name":"url","type":"string","required":false,"description":"An altex.ro or mediagalaxy.ro product page URL (…/cpd/<SKU>/).","on_invalid":"reject","example":"https://altex.ro/telefon-apple-iphone-15-5g-128gb-blue/cpd/SMTIP151BL/","aliases":["product_url","link"]},{"name":"rating","type":"integer","required":false,"description":"Only reviews with exactly this many stars (1-5).","on_invalid":"reject","example":5,"minimum":1,"maximum":5,"aliases":["stars"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"recent","label":"Newest first"},{"value":"most_helpful","label":"Most upvoted first"}],"default":"recent"},{"name":"page","type":"integer","required":false,"description":"Reviews page, 1-based.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-50.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["page_size","per_page"]},{"name":"site","type":"enum","required":false,"description":"Which shop front to read. altex (default) or mediagalaxy — the same group's second chain on the same catalogue. Measured on the same SKUs: identical prices and stock; the own-shop seller is Altex (id 1) on one and Media Galaxy (id 2) on the other, and the instalment figure can differ.","on_invalid":"reject","allowed_values":[{"value":"altex","label":"altex.ro (default)"},{"value":"mediagalaxy","label":"mediagalaxy.ro — the sister chain, same catalogue"}],"default":"altex","aliases":["shop","store_front"]}],"returns":"reviews[]{review_id, rating, title, body, author (display alias), date, verified_buyer, upvotes, downvotes, images[], replies[]{author, body, date, from_merchant}, from_merchant} + total_written_reviews, pages, page, limit, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"SMTIP151BL","limit":10}},{"name":"stores","description":"The chain's store directory (Altex, Media Galaxy and Brico stores): store id, network, city, region, address, coordinates, phone, manager, weekly opening hours. Optional city / region / network narrowing is applied to the full list.","required_params":[],"optional_params":[],"params":[{"name":"city","type":"string","required":false,"description":"Keep stores whose city contains this text (accent- and case-insensitive).","on_invalid":"reject","example":"Bucuresti"},{"name":"region","type":"string","required":false,"description":"Keep stores whose region (county) contains this text.","on_invalid":"reject","example":"Cluj","aliases":["county","judet"]},{"name":"network","type":"enum","required":false,"description":"Keep one store network.","on_invalid":"reject","allowed_values":[{"value":"altex","label":"Altex stores"},{"value":"media_galaxy","label":"Media Galaxy stores"},{"value":"brico","label":"Brico stores"}]},{"name":"site","type":"enum","required":false,"description":"Which shop front to read. altex (default) or mediagalaxy — the same group's second chain on the same catalogue. Measured on the same SKUs: identical prices and stock; the own-shop seller is Altex (id 1) on one and Media Galaxy (id 2) on the other, and the instalment figure can differ.","on_invalid":"reject","allowed_values":[{"value":"altex","label":"altex.ro (default)"},{"value":"mediagalaxy","label":"mediagalaxy.ro — the sister chain, same catalogue"}],"default":"altex","aliases":["shop","store_front"]}],"returns":"stores[]{store_id, internal_id, name, network, city, region, address, latitude, longitude, phone, manager, schedule[]{day, opens, closes}, ship_to_store, url, image} + total, total_unfiltered","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"city":"Bucuresti"}},{"name":"categories","description":"The full category tree, flattened: id, name, URL slug (feed it to the category action), parent, level and the readable path. Optional text match on name/path.","required_params":[],"optional_params":[],"params":[{"name":"match","type":"string","required":false,"description":"Keep categories whose name or path contains this text.","on_invalid":"reject","example":"laptop","aliases":["q","query"]},{"name":"site","type":"enum","required":false,"description":"Which shop front to read. altex (default) or mediagalaxy — the same group's second chain on the same catalogue. Measured on the same SKUs: identical prices and stock; the own-shop seller is Altex (id 1) on one and Media Galaxy (id 2) on the other, and the instalment figure can differ.","on_invalid":"reject","allowed_values":[{"value":"altex","label":"altex.ro (default)"},{"value":"mediagalaxy","label":"mediagalaxy.ro — the sister chain, same catalogue"}],"default":"altex","aliases":["shop","store_front"]}],"returns":"categories[]{category_id, name, url_key, parent_id, level, path, resealed_count} + total","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"match":"laptop"}}]},{"name":"altxyz","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Alt API — trading card values and sales from alt.xyz: card search with the Alt Value, graded population and last sale; one card with every grade's Alt Value and last sale; the card's full individual sales history from eBay, Fanatics Collect (PWCC), Goldin, Heritage, Alt, Pristine, CardHobby and more, with price, date, grade and marketplace; the Alt Value history; the last ~90 days of sales across all cards; live listings and Alt auctions with bids; a PSA / BGS / SGC / CGC certificate number → the card, its grade and every sale and listing Alt has of that slab. Pokémon, One Piece, Yu-Gi-Oh!, Magic, sports and pop-culture cards. USD. No login, no key.","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/altxyz/v1","spec_available":true,"actions":[{"name":"search","description":"Search Alt's card database (29.9 million cards) by keyword. Each row is one card with its set, number, year, variety and player / character, the total graded population and its last recorded sale (date, price, grade, marketplace). With `grade` (e.g. PSA 10) each row also carries that grade's Alt Value with its confidence band, its population and its last sale.","required_params":[],"optional_params":["query","category","year_min","year_max","grade","sort","enrich","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Card words: player / character, set, year, number, variety. Typo-tolerant. Empty = every card (browse with filters).","on_invalid":"reject","example":"charizard base set 1st edition","aliases":["q","keyword"]},{"name":"category","type":"enum","required":false,"description":"Only one category.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon"},{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"one_piece","label":"One Piece"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"magic","label":"Magic: The Gathering"},{"value":"tcg","label":"Other TCG"},{"value":"pop_culture","label":"Pop culture"},{"value":"combat_sports","label":"Combat sports"},{"value":"racing","label":"Racing"},{"value":"tennis","label":"Tennis"},{"value":"golf","label":"Golf"},{"value":"other","label":"Other"}],"example":"pokemon"},{"name":"year_min","type":"integer","required":false,"description":"Card year from (inclusive).","on_invalid":"reject","example":1999,"minimum":1800,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Card year to (inclusive).","on_invalid":"reject","example":2000,"minimum":1800,"maximum":2100},{"name":"grade","type":"string","required":false,"description":"One grade: grader + grade, e.g. PSA 10, PSA 9, BGS 9.5, CGC 10, CGC Pristine, BGS Black Label, SGC 10, PSA Authentic.","on_invalid":"reject","example":"PSA 10","value_pattern":"(?i)\\s*[A-Za-z][A-Za-z/]{1,7}[\\s\\-_]*(?:\\d{1,2}(?:\\.\\d)?|pri|pristine|bl|black ?label|auth|authentic)\\s*"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Alt's own relevance"},{"value":"pop_desc","label":"Highest graded population first"},{"value":"pop_asc","label":"Lowest graded population first"}],"default":"relevance","example":"pop_desc"},{"name":"enrich","type":"boolean","required":false,"description":"Add each card's last sale (and, with `grade`, its Alt Value and pop in that grade). false = card identity only, one request.","on_invalid":"reject","default":true,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"rows[]: card_id, name, year, set, number, variety, subject (player / character), category, category_code, print_run, url, pop (the population figure Alt's card index carries; it can differ from the sum of `card` population), external_sales_count, last_sale{date, price_usd, marketplace, source, grade, grade_key, sale_type, listing_url, sale_id} (newest completed sale of any grade), grades_with_sales, in_grade{grade, grade_key, alt_value, alt_value_low, alt_value_high, alt_value_confidence (0-100), pop, last_sale} (with `grade`). meta: total, page, limit, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"charizard base set 1st edition","grade":"PSA 10"}},{"name":"card","description":"One card in full by its card_id: identity, images, the graded population of every grade, a grade ladder with every grade's current Alt Value (and confidence band) and last sale, Alt's own active listings of the card, and — with `grade` — the headline Alt Value of that grade and the card's live external listings (eBay, Fanatics, Goldin …) in that grade.","required_params":["card_id"],"optional_params":["grade"],"params":[{"name":"card_id","type":"string","required":true,"description":"A search / sales / listings row's card_id as is (Alt's asset id), or an alt.xyz/research/<id> link.","on_invalid":"reject","example":"e5c5faea-533f-48fe-8013-a918d87a8b52","aliases":["id","asset_id","url"]},{"name":"grade","type":"string","required":false,"description":"One grade: grader + grade, e.g. PSA 10, PSA 9, BGS 9.5, CGC 10, CGC Pristine, BGS Black Label, SGC 10, PSA Authentic.","on_invalid":"reject","example":"PSA 10","value_pattern":"(?i)\\s*[A-Za-z][A-Za-z/]{1,7}[\\s\\-_]*(?:\\d{1,2}(?:\\.\\d)?|pri|pristine|bl|black ?label|auth|authentic)\\s*"}],"returns":"card{card_id, name, year, set, number, variety, subject (player / character), category, category_code, print_run, url, image, images[], pop_total, population[{grading_company, grade_number, grade, grade_key, pop}], grades[{grade, grade_key, grading_company, grade_number, alt_value, alt_value_low, alt_value_high, alt_value_confidence, pop, last_sale{…}}] (every grade with a recorded sale, highest Alt Value first), last_sale{…}, in_grade{…} (with `grade`), alt_listings[{listing_id, type, state, list_price_usd, min_offer_usd, ends_at, items[{grade, cert_number, alt_value, …}], url}], external_listings[] (with `grade`)}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"card_id":"e5c5faea-533f-48fe-8013-a918d87a8b52"}},{"name":"card_sales","description":"The card's individual sales history as Alt records it — with `grade`, every sale of that grade back to the first recorded one; without, the newest `per_grade` sales of every grade — from eBay, Fanatics Collect (incl. every PWCC venue), Goldin, Heritage, Alt, Pristine, CardHobby, MySlabs, Robert Edwards, Memory Lane and more — each with price, date, grade, marketplace and the listing link. Filter by grade, marketplace and dates.","required_params":["card_id"],"optional_params":["grade","marketplace","from","to","skipped","per_grade","sort","page","limit"],"params":[{"name":"card_id","type":"string","required":true,"description":"A search / sales / listings row's card_id as is (Alt's asset id), or an alt.xyz/research/<id> link.","on_invalid":"reject","example":"e5c5faea-533f-48fe-8013-a918d87a8b52","aliases":["id","asset_id","url"]},{"name":"grade","type":"string","required":false,"description":"One grade: grader + grade, e.g. PSA 10, PSA 9, BGS 9.5, CGC 10, CGC Pristine, BGS Black Label, SGC 10, PSA Authentic.","on_invalid":"reject","example":"PSA 10","value_pattern":"(?i)\\s*[A-Za-z][A-Za-z/]{1,7}[\\s\\-_]*(?:\\d{1,2}(?:\\.\\d)?|pri|pristine|bl|black ?label|auth|authentic)\\s*"},{"name":"marketplace","type":"enum","required":false,"description":"Only sales on one marketplace. fanatics = Fanatics Collect and every former PWCC venue (weekly, premier, monthly, fixed price).","on_invalid":"reject","allowed_values":[{"value":"ebay","label":"eBay"},{"value":"fanatics","label":"Fanatics Collect (incl. PWCC)"},{"value":"alt","label":"Alt"},{"value":"goldin","label":"Goldin"},{"value":"heritage","label":"Heritage Auctions"},{"value":"pristine","label":"Pristine Auction"},{"value":"cardhobby","label":"CardHobby"},{"value":"myslabs","label":"MySlabs"},{"value":"other","label":"Other auction houses (Robert Edwards, Memory Lane, Mile High, Lelands, SCP)"}],"example":"goldin","aliases":["source","auction_house"]},{"name":"from","type":"string","required":false,"description":"Sales on or after this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-01-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_from","start_date"]},{"name":"to","type":"string","required":false,"description":"Sales on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_to","end_date"]},{"name":"skipped","type":"enum","required":false,"description":"Sales Alt marks RELISTED or NOT_PAID (the buyer did not pay / the item came back): include (as the site shows them), exclude, or only.","on_invalid":"reject","allowed_values":[{"value":"include","label":"Every recorded sale incl. relisted / not-paid (the site's research view)"},{"value":"exclude","label":"Only the sales Alt counts (relisted and not-paid removed; listing-price-only rows are flagged and removed only without a grade)"},{"value":"only","label":"Only the relisted / not-paid ones"}],"default":"include","example":"exclude"},{"name":"per_grade","type":"integer","required":false,"description":"Without `grade`: how many of the newest sales of EACH grade to return (the site's own all-grades view shows 16). With `grade` the whole history of that grade is returned and this is ignored.","on_invalid":"reject","default":50,"example":100,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of the sales.","on_invalid":"reject","allowed_values":[{"value":"date_desc","label":"Newest sale first"},{"value":"date_asc","label":"Oldest sale first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"}],"default":"date_desc","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page of the filtered, sorted history, 1 = first.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Sales per page (1-1000).","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":1000,"aliases":["per_page"]}],"returns":"card{card_id, name, year, set, number, variety, subject (player / character), category, category_code, print_run, url}, rows[]: sale_id, date, price_usd, marketplace, marketplace_name, source (the venue as Alt names it, e.g. 'PWCC Weekly Auctions'), sale_type (AUCTION / BEST_OFFER / BUY_IT_NOW / FIXED_PRICE), grading_company, grade_number, grade, grade_key, autograph, listing_url, skipped_reason (RELISTED / NOT_PAID / null), subject_to_change, label. meta: total (after filters), total_unfiltered, by_marketplace{…} (after filters), first_date, last_date, page, limit, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"card_id":"e5c5faea-533f-48fe-8013-a918d87a8b52","grade":"PSA 9"}},{"name":"card_value_history","description":"The daily Alt Value of one card in one grade between two dates (default: the last 365 days), with Alt's error band for each day. Alt publishes about one year of daily values.","required_params":["card_id","grade"],"optional_params":["from","to"],"params":[{"name":"card_id","type":"string","required":true,"description":"A search / sales / listings row's card_id as is (Alt's asset id), or an alt.xyz/research/<id> link.","on_invalid":"reject","example":"e5c5faea-533f-48fe-8013-a918d87a8b52","aliases":["id","asset_id","url"]},{"name":"grade","type":"string","required":true,"description":"The grade whose Alt Value history you want: PSA 10, BGS 9.5, CGC Pristine …","on_invalid":"reject","example":"PSA 10","value_pattern":"(?i)\\s*[A-Za-z][A-Za-z/]{1,7}[\\s\\-_]*(?:\\d{1,2}(?:\\.\\d)?|pri|pristine|bl|black ?label|auth|authentic)\\s*"},{"name":"from","type":"string","required":false,"description":"First day (YYYY-MM-DD). Default: 365 days before `to`.","on_invalid":"reject","example":"2025-11-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_from","start_date"]},{"name":"to","type":"string","required":false,"description":"Last day (YYYY-MM-DD). Default: today.","on_invalid":"reject","example":"2026-10-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_to","end_date"]}],"returns":"card{card_id, name, url}, grade, grade_key, points[{date, alt_value, alt_value_low, alt_value_high}] oldest first, summary{first_date, last_date, first_value, last_value, high, low, change_pct}, ready_for_display (Alt's own flag)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"card_id":"e5c5faea-533f-48fe-8013-a918d87a8b52","grade":"PSA 9"}},{"name":"sales","description":"Sold listings across ALL cards from the last ~90 days (Alt's sold-listings feed): eBay, Fanatics Collect, Goldin, Heritage, Alt, Pristine, CardHobby, MySlabs. Filter by keyword, marketplace, category, grade, grading company, price, sale date, auction vs fixed price, or one card.","required_params":[],"optional_params":["query","marketplace","category","grade","grading_company","sale_format","min_price","max_price","from","to","card_id","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Card words. Empty = every sale (browse with filters).","on_invalid":"reject","example":"charizard","aliases":["q","keyword"]},{"name":"marketplace","type":"enum","required":false,"description":"Only one marketplace. fanatics = Fanatics Collect (incl. PWCC).","on_invalid":"reject","allowed_values":[{"value":"ebay","label":"eBay"},{"value":"fanatics","label":"Fanatics Collect (incl. PWCC)"},{"value":"alt","label":"Alt"},{"value":"goldin","label":"Goldin"},{"value":"heritage","label":"Heritage Auctions"},{"value":"pristine","label":"Pristine Auction"},{"value":"cardhobby","label":"CardHobby"},{"value":"myslabs","label":"MySlabs"}],"example":"fanatics","aliases":["source","auction_house"]},{"name":"category","type":"enum","required":false,"description":"Only one category.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon"},{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"one_piece","label":"One Piece"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"magic","label":"Magic: The Gathering"},{"value":"tcg","label":"Other TCG"},{"value":"pop_culture","label":"Pop culture"},{"value":"combat_sports","label":"Combat sports"},{"value":"racing","label":"Racing"},{"value":"tennis","label":"Tennis"},{"value":"golf","label":"Golf"},{"value":"other","label":"Other"}],"example":"pokemon"},{"name":"grade","type":"string","required":false,"description":"One grade: grader + grade, e.g. PSA 10, PSA 9, BGS 9.5, CGC 10, CGC Pristine, BGS Black Label, SGC 10, PSA Authentic.","on_invalid":"reject","example":"PSA 10","value_pattern":"(?i)\\s*[A-Za-z][A-Za-z/]{1,7}[\\s\\-_]*(?:\\d{1,2}(?:\\.\\d)?|pri|pristine|bl|black ?label|auth|authentic)\\s*"},{"name":"grading_company","type":"enum","required":false,"description":"Only one grading company.","on_invalid":"reject","allowed_values":[{"value":"PSA","label":"PSA"},{"value":"BGS","label":"Beckett (BGS)"},{"value":"CGC","label":"CGC"},{"value":"SGC","label":"SGC"},{"value":"TAG","label":"TAG"},{"value":"CSG","label":"CSG"},{"value":"BVG","label":"Beckett Vintage (BVG)"},{"value":"PSA/DNA","label":"PSA/DNA (autograph)"},{"value":"BCCG","label":"BCCG"}],"example":"PSA"},{"name":"sale_format","type":"enum","required":false,"description":"Only auction sales or only fixed-price / best-offer sales.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Sold at auction"},{"value":"fixed_price","label":"Sold fixed price / best offer"}],"example":"auction"},{"name":"min_price","type":"number","required":false,"description":"Price at least (USD).","on_invalid":"reject","example":1000,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Price at most (USD).","on_invalid":"reject","example":50000,"minimum":0},{"name":"from","type":"string","required":false,"description":"Sold on or after this date (YYYY-MM-DD). The feed holds the last ~90 days.","on_invalid":"reject","example":"2026-10-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_from","start_date"]},{"name":"to","type":"string","required":false,"description":"Sold on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-10-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_to","end_date"]},{"name":"card_id","type":"string","required":false,"description":"Only rows of one card (a search row's card_id).","on_invalid":"reject","example":"e5c5faea-533f-48fe-8013-a918d87a8b52","value_pattern":"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}","aliases":["asset_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"date_desc","label":"Newest sale first"},{"value":"date_asc","label":"Oldest sale first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"}],"default":"date_desc","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-50).","on_invalid":"reject","default":20,"example":50,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"rows[]: sale_id, sold_date, price_usd, marketplace, marketplace_name, source, sale_type, listing_type, title (the seller's own title), grading_company, grade_number, grade, grade_key, card_id, name, year, set, number, variety, subject, category, category_code, card_url, pop, serial_numbered, rookie_year, listing_url, lot_id, skipped_reason, image, images[], alt_url. meta: total, page, limit, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","marketplace":"goldin"}},{"name":"listings","description":"Live listings Alt indexes: Alt's own auctions and fixed-price listings plus eBay, Fanatics Collect, Goldin, Pristine and CardHobby listings, each with price or current bid, bids, watchers, end time, grade, population and the card's Alt Value as stored on the listing. The site's own sort options.","required_params":[],"optional_params":["query","marketplace","listing_type","category","grade","grading_company","min_price","max_price","min_alt_value","max_alt_value","card_id","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Card words. Empty = every live listing (browse with filters).","on_invalid":"reject","example":"charizard","aliases":["q","keyword"]},{"name":"marketplace","type":"enum","required":false,"description":"Only one marketplace. fanatics = Fanatics Collect (incl. PWCC).","on_invalid":"reject","allowed_values":[{"value":"ebay","label":"eBay"},{"value":"fanatics","label":"Fanatics Collect (incl. PWCC)"},{"value":"alt","label":"Alt"},{"value":"goldin","label":"Goldin"},{"value":"heritage","label":"Heritage Auctions"},{"value":"pristine","label":"Pristine Auction"},{"value":"cardhobby","label":"CardHobby"},{"value":"myslabs","label":"MySlabs"}],"example":"fanatics","aliases":["source","auction_house"]},{"name":"listing_type","type":"enum","required":false,"description":"Only auctions or only fixed-price listings; alt_* = Alt's own listings only.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Auctions (Alt + external)"},{"value":"fixed_price","label":"Fixed price / best offer (Alt + external)"},{"value":"alt_auction","label":"Alt's own auctions only"},{"value":"alt_fixed_price","label":"Alt's own fixed-price listings only"}],"example":"alt_auction"},{"name":"category","type":"enum","required":false,"description":"Only one category.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon"},{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"one_piece","label":"One Piece"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"magic","label":"Magic: The Gathering"},{"value":"tcg","label":"Other TCG"},{"value":"pop_culture","label":"Pop culture"},{"value":"combat_sports","label":"Combat sports"},{"value":"racing","label":"Racing"},{"value":"tennis","label":"Tennis"},{"value":"golf","label":"Golf"},{"value":"other","label":"Other"}],"example":"pokemon"},{"name":"grade","type":"string","required":false,"description":"One grade: grader + grade, e.g. PSA 10, PSA 9, BGS 9.5, CGC 10, CGC Pristine, BGS Black Label, SGC 10, PSA Authentic.","on_invalid":"reject","example":"PSA 10","value_pattern":"(?i)\\s*[A-Za-z][A-Za-z/]{1,7}[\\s\\-_]*(?:\\d{1,2}(?:\\.\\d)?|pri|pristine|bl|black ?label|auth|authentic)\\s*"},{"name":"grading_company","type":"enum","required":false,"description":"Only one grading company.","on_invalid":"reject","allowed_values":[{"value":"PSA","label":"PSA"},{"value":"BGS","label":"Beckett (BGS)"},{"value":"CGC","label":"CGC"},{"value":"SGC","label":"SGC"},{"value":"TAG","label":"TAG"},{"value":"CSG","label":"CSG"},{"value":"BVG","label":"Beckett Vintage (BVG)"},{"value":"PSA/DNA","label":"PSA/DNA (autograph)"},{"value":"BCCG","label":"BCCG"}],"example":"PSA"},{"name":"min_price","type":"number","required":false,"description":"Price at least (USD).","on_invalid":"reject","example":1000,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Price at most (USD).","on_invalid":"reject","example":50000,"minimum":0},{"name":"min_alt_value","type":"number","required":false,"description":"Alt Value (as stored on the listing) at least (USD).","on_invalid":"reject","example":100,"minimum":0},{"name":"max_alt_value","type":"number","required":false,"description":"Alt Value (as stored on the listing) at most (USD).","on_invalid":"reject","example":10000,"minimum":0},{"name":"card_id","type":"string","required":false,"description":"Only rows of one card (a search row's card_id).","on_invalid":"reject","example":"e5c5faea-533f-48fe-8013-a918d87a8b52","value_pattern":"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}","aliases":["asset_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own sort options).","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"recommended"},{"value":"price_desc","label":"price desc"},{"value":"price_asc","label":"price asc"},{"value":"ending_soonest","label":"ending soonest"},{"value":"newest","label":"newest"},{"value":"alt_value_desc","label":"alt value desc"},{"value":"alt_value_asc","label":"alt value asc"},{"value":"most_watched","label":"most watched"},{"value":"most_bids","label":"most bids"},{"value":"fewest_bids","label":"fewest bids"}],"default":"recommended","example":"ending_soonest"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-50).","on_invalid":"reject","default":20,"example":50,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"rows[]: listing_id, marketplace, marketplace_name, source, listing_type, is_alt_listing, title, price_usd (current bid on auctions), price_not_published, bid_count, watch_count, view_count, starts_at, ends_at, no_end_date, auction_name, auction_cycle_id, offers_disabled, grading_company, grade_number, grade, grade_key, card_id, name, year, set, number, variety, subject, category, category_code, card_url, pop, alt_value_at_listing, alt_value_low, alt_value_high, alt_value_confidence, price_minus_alt_value_usd, listing_indexed_at, listed_at, last_external_sale{marketplace, source, price_usd}, great_price, serial_numbered, rookie_year, listing_url, alt_url, image, images[]. meta: total, page, limit, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","listing_type":"alt_auction"}},{"name":"listing","description":"One listing by its listing_id. An Alt listing: price, minimum offer, state, end time, every item with grade, cert number and Alt Value, the auction's full bid history (price and time of every bid), views and the card's population. An external listing (live_…): marketplace, current bid, bids, buy-it-now price, end time, grade and the listing link.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"A listings row's listing_id as is (Alt listing id, or live_<id> for an external listing), or an alt.xyz/itm/<id> link.","on_invalid":"reject","example":"8fd4b09d-9a85-47b8-8723-7f7eebb8ea81","aliases":["id","url"]}],"returns":"listing{listing_id, kind (alt | external). alt: type (AUCTION / LISTING), state, list_price_usd, min_offer_usd, created_at, ends_at, items[{item_id, item_name, grade, grade_key, cert_number, serial, alt_value, card_id, image}], bids[{price_usd, at}] newest first, bid_history_events (price steps; the listings row's bid_count counts every bid and is larger), view_count, pop, auction_cycle_id, card_id, card_url, url. external: marketplace, source, ends_at, bid_count, highest_bid_usd, buy_it_now_usd, grade, listing_url, card identity}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"8fd4b09d-9a85-47b8-8723-7f7eebb8ea81"}},{"name":"sale","description":"One recorded sale by its sale_id: price in USD and as displayed, currency, fees, shipping, marketplace and auction name, grade and cert number, images, the listing link and the card.","required_params":["sale_id"],"optional_params":[],"params":[{"name":"sale_id","type":"string","required":true,"description":"A card_sales / sales row's sale_id, or an alt.xyz/itm/<id>/sold link.","on_invalid":"reject","example":"accb4108-8fe2-4983-87dd-6d81c1af8d2c","aliases":["id","url"]}],"returns":"sale{sale_id, date, price_usd (the sold price the site prints), usd_amount (Alt's usdAmount: on best-offer sales it can be the asking price, not the sold price), currency, fees_usd, shipping_usd, marketplace, marketplace_name, source, auction_name, sale_type, title, grading_company, grade_number, grade, grade_key, cert_number, autograph, listing_url, image, images[], skipped_reason, subject_to_change, alt_listing_id, card{…}, alt_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"sale_id":"accb4108-8fe2-4983-87dd-6d81c1af8d2c"}},{"name":"cert_lookup","description":"Look up one graded slab by its PSA, BGS or SGC certificate number: the card it is (card_id, name, set, year, number), the grade (with BGS subgrades and autograph grade), the card's current Alt Value and population in that grade, every recorded sale of THIS slab Alt has (price, date, marketplace, link) and its live listings. Alt records the cert on its own sales and listings and on some Heritage / Goldin sales; eBay and Fanatics sales are matched only when the seller wrote the cert number in the title (last ~90 days). A slab never sold or listed through those sources returns the card and grade with empty sales.","required_params":["cert_number"],"optional_params":["grading_company"],"params":[{"name":"cert_number","type":"string","required":true,"description":"The certificate number printed on the slab label (6-12 digits, leading zeros kept: BGS numbers start with 00), or a psacard.com/cert/<number> link. Alt resolves PSA, BGS and SGC numbers; CGC numbers are not resolved by Alt.","on_invalid":"reject","example":"43299127","aliases":["cert","certificate","cert_no"]},{"name":"grading_company","type":"enum","required":false,"description":"The grader of the slab. Optional: Alt identifies the grader from the number. Give it when one number exists at two graders (4272318 is an SGC Tom Brady, 04272318 a PSA Charizard) or when the leading zeros were dropped.","on_invalid":"reject","allowed_values":[{"value":"PSA","label":"PSA"},{"value":"BGS","label":"Beckett (BGS)"},{"value":"CGC","label":"CGC"},{"value":"SGC","label":"SGC"},{"value":"TAG","label":"TAG"},{"value":"CSG","label":"CSG"},{"value":"BVG","label":"Beckett Vintage (BVG)"},{"value":"PSA/DNA","label":"PSA/DNA (autograph)"},{"value":"BCCG","label":"BCCG"}],"example":"PSA"}],"returns":"cert{cert_number, cert_number_input, grading_company, grade_number, grade, grade_key, autograph_grade, qualifier, subgrades{centering, corners, edges, surfaces} (BGS), grader_cert_url}, card{card_id, name, year, set, number, variety, subject (player / character), category, category_code, print_run, url, image, images[]}, in_grade{grade, grade_key, alt_value, alt_value_low, alt_value_high, alt_value_confidence, pop, sales_recorded, last_sale{…} (newest sale of ANY copy in this grade)}, sales[{sale_id, date, price_usd, marketplace, marketplace_name, source, auction_name, sale_type, title, grade, grade_key, cert_number, currency, fees_usd, shipping_usd, listing_url, alt_url, image, skipped_reason, matched_by (cert_field | title)}] newest first, alt_listings[{listing_id, type, state, list_price_usd, min_offer_usd, ends_at, items[{cert_number, grade, alt_value, …}], url}], external_listings[] (listings row shape, matched_by title), other_matches[] (the same number at another grader, when Alt returns more than one). meta: sales_by_cert_field, sales_by_title, grade_sales_scanned, cert_numbers_tried.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"cert_number":"28249067"}}]},{"name":"alza","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Alza API scraper — search products, browse categories and read full product records (price with and without VAT, discounts, stock, rating, reviews, spec table) from Alza, Central Europe's largest electronics retailer, across 5 storefronts: Czechia, Slovakia, Hungary, Austria and Germany. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/alza/v1","spec_available":true,"actions":[{"name":"search","description":"Search one national Alza storefront by keyword and get 24 products per page with the price a shopper pays now (VAT included), the struck-through price and the discount, the financing offer, stock wording, customer rating on a 5-star scale, energy class and the number of colour/capacity variants. Sort by price, rating, bestseller or newest, and narrow by brand, price range, in-stock, on-sale, newly-added or well-rated. Every filter is applied by the storefront's own listing service and the response reports the exact resulting total.","required_params":["query"],"optional_params":["country","page","sort","brand","min_price","max_price","in_stock_only","discounted_only","new_arrivals_only","well_rated_only","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, exactly as a shopper would type it on the storefront. Alza often answers a keyword with its matching category or brand page; the response says which under `resolved_url` and `search_mode`.","on_invalid":"reject","example":"iphone 17","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which national Alza storefront to read. Currency, language, catalogue AND price follow the country — the same product really is priced differently on alza.at and alza.de, so pick the market you mean. alza.co.uk is not available: Alza stopped selling there on 27/5/2022 and publishes no catalogue.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — alza.cz (CZK)"},{"value":"sk","label":"Slovakia — alza.sk (EUR)"},{"value":"hu","label":"Hungary — alza.hu (HUF)"},{"value":"at","label":"Austria — alza.at (EUR)"},{"value":"de","label":"Germany — alza.de (EUR)"}],"default":"cz","example":"cz","aliases":["market"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. 24 products per page. `page_count` in the response is the real last page for this result set.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orderings the storefront itself offers, passed to its own listing service.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The storefront's own default order"},{"value":"bestseller","label":"Best selling first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating","label":"Best customer rating first"},{"value":"newest","label":"Newest first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Keep only one brand, spelled as the storefront spells it (matched case-insensitively against the brand facet the listing returns). The response always lists the available brands with their exact product counts in `brands[]`, so an unknown name is rejected with the list.","on_invalid":"reject","example":"Apple"},{"name":"min_price","type":"number","required":false,"description":"Lowest price to include, in the storefront's currency, VAT included (CZK for cz, HUF for hu, EUR for sk/at/de).","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price to include, in the storefront's currency, VAT included.","on_invalid":"reject","minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"Keep only products the storefront can deliver now.","on_invalid":"ignore","default":false},{"name":"discounted_only","type":"boolean","required":false,"description":"Keep only products currently on a reduced price — Alza's own 'sale and good prices' filter (price bombs, super prices, markdowns).","on_invalid":"ignore","default":false},{"name":"new_arrivals_only","type":"boolean","required":false,"description":"Keep only recently added products (the storefront's own 'news' filter).","on_invalid":"ignore","default":false},{"name":"well_rated_only","type":"boolean","required":false,"description":"Keep only products above the storefront's own customer-rating threshold. Alza exposes this as a single switch, not a star number, so this engine does not pretend to take one.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, product_code, title, url, image, currency, price (VAT included — what a logged-out shopper pays now), was_price (the struck-through price when the product is reduced), discount_percent (computed from those two prices), discount_percent_site + discount_label (the storefront's own badge, which can disagree — e.g. it prints '-4 %' for 43 990 → 41 990), is_discounted, monthly_instalment (financing, never a price), rating, rating_count, rating_scale (5), availability_text (the storefront's own wording, e.g. 'Skladem > 5 ks'), availability_code, energy_class (EU label where the product has one), variant_count, summary, badges[], open_box}, count, total_results (exact, from the storefront's own listing service), page, page_count, per_page (24), search_mode ('resolved' when Alza answered the keyword with one of its own category or brand pages — 11 of 16 sampled keywords do — or 'keyword' when it stayed on its free-text search page), filters_supported (false in 'keyword' mode, where the storefront itself offers no sorting or filtering; asking for one there is rejected rather than silently ignored), resolved_url, category_id, brands[]{id, name, product_count}, country, currency, filters_applied. In 'keyword' mode total_results reflects the storefront's own free-text result set, which was observed to plateau near 300 on broad queries; 'resolved' mode reports the category's exact total.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone","country":"cz"}},{"name":"category","description":"List the products of one Alza category page — from the site navigation, a product breadcrumb or a `search` response — 24 per page, with the same product fields as search and the same sorting and filters. Producer-filtered category URLs keep their brand restriction.","required_params":["category"],"optional_params":["country","page","sort","brand","min_price","max_price","in_stock_only","discounted_only","new_arrivals_only","well_rated_only","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"An Alza category page URL (…/<name>/<categoryId>.htm) or the bare numeric category id. A URL's host sets the country. Category URLs appear in the site navigation, in every product breadcrumb and in `resolved_url` from `search`. A producer-filtered URL (…/<categoryId>-v<producerId>.htm) keeps its brand restriction.","on_invalid":"reject","example":"https://www.alza.cz/iphone/18851638.htm","aliases":["category_url","url","category_id"]},{"name":"country","type":"enum","required":false,"description":"Which national Alza storefront to read. Currency, language, catalogue AND price follow the country — the same product really is priced differently on alza.at and alza.de, so pick the market you mean. alza.co.uk is not available: Alza stopped selling there on 27/5/2022 and publishes no catalogue.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — alza.cz (CZK)"},{"value":"sk","label":"Slovakia — alza.sk (EUR)"},{"value":"hu","label":"Hungary — alza.hu (HUF)"},{"value":"at","label":"Austria — alza.at (EUR)"},{"value":"de","label":"Germany — alza.de (EUR)"}],"default":"cz","example":"cz","aliases":["market"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. 24 products per page. `page_count` in the response is the real last page for this result set.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orderings the storefront itself offers, passed to its own listing service.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The storefront's own default order"},{"value":"bestseller","label":"Best selling first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating","label":"Best customer rating first"},{"value":"newest","label":"Newest first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Keep only one brand, spelled as the storefront spells it (matched case-insensitively against the brand facet the listing returns). The response always lists the available brands with their exact product counts in `brands[]`, so an unknown name is rejected with the list.","on_invalid":"reject","example":"Apple"},{"name":"min_price","type":"number","required":false,"description":"Lowest price to include, in the storefront's currency, VAT included (CZK for cz, HUF for hu, EUR for sk/at/de).","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price to include, in the storefront's currency, VAT included.","on_invalid":"reject","minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"Keep only products the storefront can deliver now.","on_invalid":"ignore","default":false},{"name":"discounted_only","type":"boolean","required":false,"description":"Keep only products currently on a reduced price — Alza's own 'sale and good prices' filter (price bombs, super prices, markdowns).","on_invalid":"ignore","default":false},{"name":"new_arrivals_only","type":"boolean","required":false,"description":"Keep only recently added products (the storefront's own 'news' filter).","on_invalid":"ignore","default":false},{"name":"well_rated_only","type":"boolean","required":false,"description":"Keep only products above the storefront's own customer-rating threshold. Alza exposes this as a single switch, not a star number, so this engine does not pretend to take one.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, product_code, title, url, image, currency, price (VAT included — what a logged-out shopper pays now), was_price (the struck-through price when the product is reduced), discount_percent (computed from those two prices), discount_percent_site + discount_label (the storefront's own badge, which can disagree — e.g. it prints '-4 %' for 43 990 → 41 990), is_discounted, monthly_instalment (financing, never a price), rating, rating_count, rating_scale (5), availability_text (the storefront's own wording, e.g. 'Skladem > 5 ks'), availability_code, energy_class (EU label where the product has one), variant_count, summary, badges[], open_box}, count, total_results (exact), page, page_count, per_page (24), category_id (authoritative — the slug in an Alza category URL is decorative and the storefront rewrites it to whatever the id names), category_url (as you passed it), producer_id, brands[]{id, name, product_count}, country, currency, filters_applied","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"https://www.alza.cz/iphone/18851638.htm"}},{"name":"product/detail","description":"The full Alza product record by id or URL: title, brand, manufacturer part number (and the EAN when the storefront's part number really is one), the price both including and excluding VAT, the struck-through price and discount, financing, stock wording and the schema.org availability, condition, the complete image gallery, the complete technical specification grouped exactly as the site groups it, the description, colour/capacity variants with their price difference and stock, the energy class, the breadcrumb, and the rating with both counts Alza publishes.","required_params":["product_id"],"optional_params":["country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Alza product id — the number after the -d in a product URL (…/iphone-17-pro-256gb-stribrna-d13078788.htm → 13078788). A full product URL is also accepted and its host sets the country. Every search/category row returns `product_id`.","on_invalid":"reject","example":"13078788","aliases":["id","url"]},{"name":"country","type":"enum","required":false,"description":"Which national Alza storefront to read. Currency, language, catalogue AND price follow the country — the same product really is priced differently on alza.at and alza.de, so pick the market you mean. alza.co.uk is not available: Alza stopped selling there on 27/5/2022 and publishes no catalogue.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — alza.cz (CZK)"},{"value":"sk","label":"Slovakia — alza.sk (EUR)"},{"value":"hu","label":"Hungary — alza.hu (HUF)"},{"value":"at","label":"Austria — alza.at (EUR)"},{"value":"de","label":"Germany — alza.de (EUR)"}],"default":"cz","example":"cz","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, product_code, title, url, brand, mpn, ean (only when the published part number is a valid EAN-13 — Alza publishes no gtin of its own), country, currency, price (VAT included), price_ex_vat (the storefront's own 'without VAT' figure), price_includes_vat, was_price, discount_percent, discount_percent_site, discount_label, is_discounted, monthly_instalment, availability_text, availability_schema, in_stock, condition, rating, rating_count (people who rated), review_count (people who wrote a review), rating_scale, description, images[], image_count, specs[]{group, attributes{name: value}}, spec_count, breadcrumb[], category_id, variants[]{name, options[]{product_id, value, url, price_difference, availability, selected}}, energy_class, delivery{stock_note, stock_detail, promise, exact_date_requires_address}}, country, currency","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"13078788","country":"cz"}},{"name":"product/reviews","description":"Customer reviews for one Alza product, newest first, straight from the storefront's own review feed: star rating, the reviewer's public nickname as the site prints it, what they liked and disliked as separate lists, the free text, the date, whether Alza verified the purchase, which variant was reviewed, any photos, and the shop's reply where there is one.","required_params":["product_id"],"optional_params":["country","limit","offset","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Alza product id — the number after the -d in a product URL (…/iphone-17-pro-256gb-stribrna-d13078788.htm → 13078788). A full product URL is also accepted and its host sets the country. Every search/category row returns `product_id`.","on_invalid":"reject","example":"13078788","aliases":["id","url"]},{"name":"country","type":"enum","required":false,"description":"Which national Alza storefront to read. Currency, language, catalogue AND price follow the country — the same product really is priced differently on alza.at and alza.de, so pick the market you mean. alza.co.uk is not available: Alza stopped selling there on 27/5/2022 and publishes no catalogue.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — alza.cz (CZK)"},{"value":"sk","label":"Slovakia — alza.sk (EUR)"},{"value":"hu","label":"Hungary — alza.hu (HUF)"},{"value":"at","label":"Austria — alza.at (EUR)"},{"value":"de","label":"Germany — alza.de (EUR)"}],"default":"cz","example":"cz","aliases":["market"]},{"name":"limit","type":"integer","required":false,"description":"How many reviews to return (1-50). The feed pages 10 at a time upstream; ask for more and the engine pages for you.","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"offset","type":"integer","required":false,"description":"How many reviews to skip, for paging through a long review list.","on_invalid":"reject","default":0,"minimum":0},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"reviews[]{rating, rating_scale, author (the public nickname the site prints), text, positives[], negatives[], date, verified_purchase, reviewed_variant, detail_note (the storefront's own 'reviewed on …, variant …' line, verbatim), reviewed_product, helpful_votes, images[], shop_reply, country_flag, translated}, count, total_reviews (what the feed will page through), offset, limit, product_id, country. Alza's review form has no headline field, so reviews carry no title.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"13078788"}}]},{"name":"amazon","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Amazon Product Data API — product detail, reviews, offers, search, best-sellers, and seller data across 19 Amazon marketplaces (amazon.com, .co.uk, .de, .co.jp and more)","version":"0.1.2","pii_redact_default":true,"mint_reusable":null,"base_path":"/amazon/v1","spec_available":true,"actions":[{"name":"product/detail","description":"full product page (title/price/currency/rating/count/brand/features/images/categories/variations/tech-specs/A+content/compare-similar) + top-8 inline reviews, by ASIN","required_params":["asin"],"optional_params":["marketplace","include_reviews","fields","exclude"],"params":[{"name":"asin","type":"string","required":true,"description":"Amazon product ID (ASIN) — the 10-character code in the product URL after /dp/.","on_invalid":"reject","example":"B0DGHMNQ5Z"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"product{asin, title, price, currency, currency_code (ISO-4217, derived from the marketplace rather than the symbol — '$' is four different currencies), list_price (the struck-through LIST price only — null when the page publishes none; never the per-unit price ('$0.24 / load'), never the Subscribe&Save 'one-time' price and never the used-buybox 'new condition' price, all three of which Amazon renders with the same CSS class), rating, brand (the brand as Amazon lists it in the product-overview table — for books, the primary author; read from markup that is the same in every marketplace, so a .de/.fr page returns 'soundcore', not the localized 'Visit the Store' link text), features[], images[], in_stock (normalised boolean; null only when the page says nothing AND carries no purchasable price), color, size (this ASIN's own variant values, lifted out of the variation map), parent_asin, attributes{weight{value,unit,grams,raw,key}, dimensions{length,width,height,depth,thickness,unit,axis_count,format,raw,key}, bsr[]{rank,category,is_primary}, model_number, part_number, manufacturer, first_available_raw, _source{}} — the TYPED form of tech_specs: weight arrives as a number in grams instead of a localized string like '4,5 Pfund', and `raw` is always kept. Unknown unit means grams is null, never guessed, asin_mismatch + served_asin (true when Amazon served a different member of the variation family than the ASIN you asked for — previously invisible; no field is removed when it is true), buybox_seller, fulfillment ('amazon' | 'merchant' | null), delivery_message, discount_pct, bought_past_month (+_raw), rating_histogram{5..1 as percentages}, description, variations, tech_specs{key:value}, aplus{images[],headings[],text}, compare_similar[]{asin,title,price,rating,image}, coupon (clippable coupon label e.g. '%10 kuponunu uygula', null when none), campaign (deal-badge ribbon e.g. 'Fırsat' / '90 günün en düşük fiyatı', null when none), gtin (GTIN-14, zero-padded from the printed UPC/EAN when Amazon prints only that — the inverse of product/gtin-to-asin), upc, ean, isbn, barcodes[] (every distinct code on the page; multipack listings print more than one) — all null when Amazon prints no barcode for this ASIN} + reviews[]{review_id,author,rating,title,date,location,verified,format,helpful_count,body,images[],marketplace} (top-8 inline, SIBLING of `product`, not nested inside it) + review_insights{summary, aspects[]{keyword,sentiment,positive,negative,mentions,mentions_positive_pct}, quotes[]{text,review_id,aspect}} (Amazon 'Customers say' AI review summary; null when the product has none) + total_review_count + average_rating","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"asin":"B0DGHMNQ5Z"}},{"name":"product/reviews","description":"Amazon product reviews by ASIN — the public reviews from the product page (and optionally merged + deduped across several marketplaces for more depth). Each review has author, rating, title, date, body, verified badge and helpful votes.","required_params":["asin"],"optional_params":["marketplace","marketplaces"],"params":[{"name":"asin","type":"string","required":true,"description":"Amazon product ID (ASIN) — the 10-character code in the product URL after /dp/.","on_invalid":"reject","example":"B0DGHMNQ5Z"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"},{"name":"marketplaces","type":"array","required":false,"description":"Merge + dedup reviews from several Amazon sites in one call (more depth than any single site). Overrides `marketplace`. Sites beyond the 19 listed are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"example":["com","co.uk","de"]}],"returns":"reviews[]{author, rating, title, date, location, verified, body, helpful_count, marketplace} + returned_count + total_review_count + average_rating + review_insights{summary, aspects[]{keyword,sentiment,positive,negative,mentions,mentions_positive_pct}, quotes[]{text,review_id,aspect}} (Amazon 'Customers say' AI review summary; null when absent)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"asin":"B0DGHMNQ5Z"}},{"name":"product/offers","description":"pinned buybox + all-offers (AOD aodAjaxMain): price/seller/condition/ships_from/delivery/prime, by ASIN","required_params":["asin"],"optional_params":["marketplace"],"params":[{"name":"asin","type":"string","required":true,"description":"Amazon product ID (ASIN) — the 10-character code in the product URL after /dp/.","on_invalid":"reject","example":"B0DGHMNQ5Z"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"pinned{price (the price you actually pay), total_price, unit_price, unit_count, unit_label, currency, currency_code, seller (the seller's NAME), condition, prime} + offers[]{same shape, plus ships_from and delivery} + offer_count. On multi-packs Amazon prints a per-unit price next to the pack price; both are returned separately and typed, so a '$4.20 per pack' next to a $20.99 pack can never be mistaken for the total.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"asin":"B0DGHMNQ5Z"}},{"name":"search","description":"product search with optional filters (price range, minimum rating, deals, brand) → results[]{asin,title,price,currency,rating,rating_count,image,sponsored}","required_params":["query"],"optional_params":["marketplace","page","max_results","sort","price_min","price_max","min_rating","deals","discount","prime","brand","brand_exact"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (product keywords).","on_invalid":"reject","example":"laptop"},{"name":"sort","type":"enum","required":false,"description":"Result ordering (the 6 listed are the live-verified Amazon sort keys; an unknown value falls back to Featured upstream).","on_invalid":"ignore","allowed_values":[{"value":"relevanceblender","label":"Featured (relevance)"},{"value":"price-asc-rank","label":"Price: low to high"},{"value":"price-desc-rank","label":"Price: high to low"},{"value":"review-rank","label":"Average customer review"},{"value":"date-desc-rank","label":"Newest arrivals"},{"value":"exact-aware-popularity-rank","label":"Best sellers"}],"default":"relevanceblender"},{"name":"price_min","type":"integer","required":false,"description":"Minimum price filter, in whole units of the marketplace currency (e.g. 100 = $100 on amazon.com). Combine with price_max for a range.","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price filter, in whole units of the marketplace currency (e.g. 300 = $300 on amazon.com). Use with price_min for a range.","on_invalid":"ignore","example":300,"minimum":0},{"name":"min_rating","type":"integer","required":false,"description":"Keep only products rated this many stars and up (1-4). 4 = '4 stars & up' is live-verified; lower tiers are best-effort and only the US site (marketplace=com) is verified.","on_invalid":"ignore","allowed_values":[{"value":1,"label":"1 star & up"},{"value":2,"label":"2 stars & up"},{"value":3,"label":"3 stars & up"},{"value":4,"label":"4 stars & up"}],"example":4},{"name":"deals","type":"boolean","required":false,"description":"When true, restrict to products with an active Amazon deal (Today's Deals). Live-verified on the US site.","on_invalid":"ignore","default":false},{"name":"discount","type":"boolean","required":false,"description":"Alias of `deals` — restrict to discounted/on-deal products.","on_invalid":"ignore","default":false},{"name":"prime","type":"boolean","required":false,"description":"When true, attempt to restrict to Prime-eligible items. BEST-EFFORT: Amazon no longer exposes a reliable Prime URL refinement, so this may be a no-op on some sites/queries.","on_invalid":"ignore","default":false},{"name":"brand","type":"string","required":false,"description":"Filter to a brand. BEST-EFFORT: passed as a keyword refinement (the brand is appended to the query) rather than a strict brand facet, so results are brand-narrowed but not brand-exclusive.","on_invalid":"ignore","example":"HP"},{"name":"brand_exact","type":"string","required":false,"description":"Filter to a brand STRICTLY, using Amazon's own brand refinement rather than a keyword. Use this when you need a brand-narrowed result set; use `brand` when you would rather keep near-matches. Measured on `running shoes`: unfiltered 5 of 48 rows were the brand, `brand` gave 46 of 48, `brand_exact` gave 48 of 48 per page and held at 100% on pages 1-3. HONEST LIMIT: on the page variant where Amazon returns 60 cards instead of 48 it pads the tail with related products (measured once in four runs: 51 of 60), so filter client-side if you need a hard guarantee. Both params may be sent together; `brand` is unchanged and keeps its old behaviour.","on_invalid":"ignore","example":"Nike"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-336). Amazon's page size depends on the query (measured: 48 products a page for 'coffee maker', 16 for 'laptop'), and asking for more than one page's worth fetches the further pages automatically — they are fetched TOGETHER, so 200 results cost roughly the time of one page, not four. 336 is Amazon's own ceiling: it stops serving results after page 7 (measured on every query tried), so there is nothing above 336 to return, and a query whose pages are small tops out sooner — ask for more than exists and you simply get everything there is. Amazon repeats some sponsored cards across pages and those duplicates are removed, so a narrow query can run out of DISTINCT products before the number you asked for: when that happens the response says so in `meta.pagination` (`requested`, `returned`, `shortfall`, `note`) and `meta.stop_reason` is `page_ceiling`/`exhausted`/`pages_failed` rather than `complete` — a short answer is never reported as a full one. OMIT IT to get exactly one page, byte-for-byte the behaviour you get today — `page` on its own is completely unchanged.","on_invalid":"ignore","example":100,"minimum":1,"maximum":336,"aliases":["limit","max"]}],"returns":"results[]{asin, title (the full listing title - the same text product/detail returns; never the brand line Amazon prints above it, null only when the card carries no readable title), brand (the brand line Amazon prints on the card, null when the card has none), price, currency, rating (average stars as the card prints them, in every marketplace language; NULL only when the product has no ratings yet — measured 22 of 364 rows across 12 marketplace/query samples, and each of those cards carries no star widget at all), rating_count, image, sponsored (the product title is the real title on sponsored rows too — the ad disclaimer is stripped), currency_code, in_stock (normalised boolean; a card with a purchasable price is in stock because Amazon only prints one when a featured offer exists, and null when neither a stock line nor a price is present), coupon (clippable coupon label, null when none), campaign (deal-badge ribbon e.g. 'Fırsat', null when none), availability (stock line as Amazon words it on the card — same vocabulary as product/detail, e.g. 'Only 4 left in stock - order soon.' / 'No featured offers available'; NULL on a normally-stocked card because Amazon only renders the line for low/no stock — it is never inferred), format (the card's own format as Amazon prints it, e.g. 'MP3 Music', 'Vinyl', 'Paperback', 'Kindle', 'Prime Video'; null when the card prints none), product_class ('digital_media' when the card is Amazon Digital Music, which product/detail answers with NOT_FOUND and the same error.detail.product_class, so you can skip that call; null otherwise — Kindle, Prime Video and Audible have detail pages and stay null)} + page + filters_applied (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"query":"laptop"}},{"name":"products_batch","description":"Look up MANY Amazon products in ONE call by ASIN — up to 40 per request → each product's title, current price and currency, star rating with review count, image, and any clippable coupon or deal badge. ONE upstream request serves the whole list (not one per ASIN), so this is the cheap way to refresh a price list or reconcile a catalogue against Amazon. IMPORTANT — this returns the SUMMARY card for each product, which is what Amazon publishes on a multi-product surface. For features, technical specifications, variations, barcodes, A+ content or reviews, use product/detail, which reads the full product page and costs one call per ASIN.","required_params":["asins"],"optional_params":["marketplace"],"params":[{"name":"asins","type":"array","required":true,"description":"Amazon ASINs to look up — up to 15 per call. Accepts a list, or a comma-separated string. Anything Amazon does not return comes back in `not_found` rather than being silently dropped, so a caller batching 15 can always tell which one went missing.","on_invalid":"reject","example":["B0DGHMNQ5Z","B01GJOMWVA","B0CKM9F15Z"],"aliases":["asin","asin_list","ids"]},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"products[]{asin, title, price, currency, currency_code, rating, rating_count, image, sponsored, coupon, campaign, availability, in_stock} + not_found[] (ASINs Amazon did not return — reported, never silently dropped) + requested + resolved","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":10},"example_params":{"asins":["B0DGHMNQ5Z","B01GJOMWVA","B0CKM9F15Z"]}},{"name":"category/browse","description":"Browse a department or sub-department by its Amazon browse NODE id and page through the grid — the catalogue-walking counterpart to `search`, for when you want everything in a category rather than everything matching a phrase. Node ids come from a category URL (the number after `node=` / `n%3A`). Pagination is page-native: keep asking for the next page while `has_next` is true; an empty page means you reached the end. There is deliberately NO total count — Amazon's own result-count value swings between identical requests, so publishing it would hand you a number you cannot rely on.","required_params":["node"],"optional_params":["marketplace","page"],"params":[{"name":"node","type":"string","required":true,"description":"Amazon browse node id (the number in a category URL after `node=`). 172282 = Electronics on .com.","on_invalid":"ignore","example":"172282"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1}],"returns":"results[]{asin, title, brand, price, currency, currency_code, rating, rating_count, image, in_stock, sponsored, coupon, campaign} + node + page + has_next","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"node":"172282"}},{"name":"bestsellers","description":"best-sellers ranking for a department (category slug required)","required_params":["category"],"optional_params":["marketplace","max_results"],"params":[{"name":"category","type":"string","required":true,"description":"Department slug from the bestsellers URL (amazon.com/gp/bestsellers/<slug>). REQUIRED — the all-departments root page is not server-rendered, so a department is needed to get a ranking. THE SLUGS DIFFER PER MARKETPLACE: amazon.com has no `garden` (use `home-garden` or `lawn-garden`) and amazon.de has no `electronics`, `sporting-goods` or `toys-and-games` (use `ce-de`, `sports`, `toys`). The dropdown lists the 15 slugs measured to work on amazon.com/.de/.fr/.co.uk/.it/.es alike; marketplace-specific slugs work too. A slug that is not a department on the marketplace you asked for returns INVALID_PARAM listing the slugs measured to work there — never an empty list.","on_invalid":"ignore","allowed_values":[{"value":"appliances","label":"Appliances"},{"value":"automotive","label":"Automotive"},{"value":"beauty","label":"Beauty"},{"value":"books","label":"Books"},{"value":"fashion","label":"Fashion"},{"value":"gift-cards","label":"Gift Cards"},{"value":"grocery","label":"Grocery"},{"value":"handmade","label":"Handmade"},{"value":"industrial","label":"Industrial & Scientific"},{"value":"kitchen","label":"Home & Kitchen"},{"value":"music","label":"CDs & Vinyl"},{"value":"musical-instruments","label":"Musical Instruments"},{"value":"pet-supplies","label":"Pet Supplies"},{"value":"software","label":"Software"},{"value":"videogames","label":"Video Games"}],"example":"electronics"},{"name":"max_results","type":"integer","required":false,"description":"How many ranked items to return (1-100). Amazon serves ~30 per page of a best-sellers / new-releases list and the list itself runs to 100, so asking for more than 30 fetches the further pages automatically — one upstream page per credit, about 30 items each. That makes this the cheapest discovery shape on this engine: `search` pages at roughly 15 products per upstream page. Paging stops the moment a page adds nothing new, so a short list never pays for empty pages, and `meta.pages_ok` always says how many pages actually answered.","on_invalid":"ignore","default":30,"example":100,"minimum":1,"maximum":100,"aliases":["limit","max"]},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"items[]{rank, asin, title (FULL title — this used to be cut at ~124 characters), price, currency_code, rating, image}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"category":"electronics","max_results":30}},{"name":"new-releases","description":"new-releases ranking for a department (category slug required)","required_params":["category"],"optional_params":["marketplace","max_results"],"params":[{"name":"category","type":"string","required":true,"description":"Department slug from the bestsellers URL (amazon.com/gp/bestsellers/<slug>). REQUIRED — the all-departments root page is not server-rendered, so a department is needed to get a ranking. THE SLUGS DIFFER PER MARKETPLACE: amazon.com has no `garden` (use `home-garden` or `lawn-garden`) and amazon.de has no `electronics`, `sporting-goods` or `toys-and-games` (use `ce-de`, `sports`, `toys`). The dropdown lists the 15 slugs measured to work on amazon.com/.de/.fr/.co.uk/.it/.es alike; marketplace-specific slugs work too. A slug that is not a department on the marketplace you asked for returns INVALID_PARAM listing the slugs measured to work there — never an empty list.","on_invalid":"ignore","allowed_values":[{"value":"appliances","label":"Appliances"},{"value":"automotive","label":"Automotive"},{"value":"beauty","label":"Beauty"},{"value":"books","label":"Books"},{"value":"fashion","label":"Fashion"},{"value":"gift-cards","label":"Gift Cards"},{"value":"grocery","label":"Grocery"},{"value":"handmade","label":"Handmade"},{"value":"industrial","label":"Industrial & Scientific"},{"value":"kitchen","label":"Home & Kitchen"},{"value":"music","label":"CDs & Vinyl"},{"value":"musical-instruments","label":"Musical Instruments"},{"value":"pet-supplies","label":"Pet Supplies"},{"value":"software","label":"Software"},{"value":"videogames","label":"Video Games"}],"example":"electronics"},{"name":"max_results","type":"integer","required":false,"description":"How many ranked items to return (1-100). Amazon serves ~30 per page of a best-sellers / new-releases list and the list itself runs to 100, so asking for more than 30 fetches the further pages automatically — one upstream page per credit, about 30 items each. That makes this the cheapest discovery shape on this engine: `search` pages at roughly 15 products per upstream page. Paging stops the moment a page adds nothing new, so a short list never pays for empty pages, and `meta.pages_ok` always says how many pages actually answered.","on_invalid":"ignore","default":30,"example":100,"minimum":1,"maximum":100,"aliases":["limit","max"]},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"items[]{rank, asin, title (FULL title — this used to be cut at ~124 characters), price, currency_code, rating, image}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"category":"electronics"}},{"name":"seller/profile","description":"seller profile (name, feedback %, lifetime ratings, rating)","required_params":["seller_id"],"optional_params":["marketplace"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Amazon seller ID — the code after seller= in a seller-page URL.","on_invalid":"reject","example":"A3A9OGKM04K3X0"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"seller_name + feedback_positive_pct + lifetime_ratings + rating","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"A3A9OGKM04K3X0"}},{"name":"autocomplete","description":"search autocomplete suggestions","required_params":["query"],"optional_params":["marketplace"],"params":[{"name":"query","type":"string","required":true,"description":"Partial search text to complete (e.g. 'lapt' → laptop…).","on_invalid":"reject","example":"lapt"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"suggestions[] (plain strings)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"laptop"}},{"name":"seller/products","description":"a seller's catalog/storefront by seller_id (paginated)","required_params":["seller_id"],"optional_params":["marketplace","page"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Amazon seller ID — the code after seller= in a seller-page URL.","on_invalid":"reject","example":"A3A9OGKM04K3X0"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1}],"returns":"results[]{asin, title, brand, price, currency, rating, rating_count, image, sponsored} + page (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"A3A9OGKM04K3X0"}},{"name":"seller/reviews","description":"seller FEEDBACK reviews (rating/text/rater/date) by seller_id","required_params":["seller_id"],"optional_params":["marketplace"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Amazon seller ID — the code after seller= in a seller-page URL.","on_invalid":"reject","example":"A3A9OGKM04K3X0"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"reviews[]{rating, text, rater, date} + returned_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"seller_id":"A3A9OGKM04K3X0"}},{"name":"deals","description":"Amazon deal-products (today's deals / goldbox): asin/title/price/image","required_params":[],"optional_params":["marketplace"],"params":[{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"items[]{asin, title (the product name only — the offer text Amazon prints inside the same element, e.g. '20% off Limited time deal $239.99 List: $299.99', is separated out), price, list_price, savings_pct, in_stock, url, image, rating (null on this surface: Amazon does not render stars on a deal card, and we do not invent one)}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"product/related","description":"Amazon related & recommended products by ASIN — the product-recommendation carousels from the Amazon product page grouped by relationship: 'Customers who viewed this item also viewed', 'Customers also bought', 'Products related to this item' and 'Frequently bought together'. Each recommended product comes with its ASIN, title, price, star rating and image — ideal for building 'you may also like' / cross-sell feeds.","required_params":["asin"],"optional_params":["marketplace"],"params":[{"name":"asin","type":"string","required":true,"description":"Amazon product ID (ASIN) — the 10-character code in the product URL after /dp/.","on_invalid":"reject","example":"B0DGHMNQ5Z"},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"}],"returns":"asin + groups{<relationship>: items[]} + related[] (flat, deduped) + group_count + item_count; each item{asin, title, price, currency, rating, image}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"asin":"0735211299"}},{"name":"gtin-to-asin","description":"Amazon barcode lookup — convert a product barcode (UPC, EAN, ISBN or GTIN) into the matching Amazon ASIN(s). Pass the 8-14 digit code from a physical product and get back the Amazon listing(s) it maps to (ASIN, title, price, rating, image) — for catalog matching, price checks and reconciling SKUs to Amazon products.","required_params":[],"optional_params":["gtin","marketplace","verify"],"params":[{"name":"gtin","type":"string","required":false,"description":"The product barcode to look up — a UPC (12 digits), EAN (13), ISBN-10/13 or GTIN-14. Hyphens/spaces are ignored.","on_invalid":"reject","example":"9780735211292","aliases":["upc","ean","isbn","barcode","code"]},{"name":"marketplace","type":"enum","required":false,"description":"Which Amazon site to query (sets language and currency). Dropdown = the 19 verified marketplaces; other Amazon sites (e.g. eg, com.be) and forms like 'amazon.de'/'DE' are also accepted and normalized by the engine.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"amazon.com — United States"},{"value":"co.uk","label":"amazon.co.uk — United Kingdom"},{"value":"de","label":"amazon.de — Germany"},{"value":"fr","label":"amazon.fr — France"},{"value":"it","label":"amazon.it — Italy"},{"value":"es","label":"amazon.es — Spain"},{"value":"co.jp","label":"amazon.co.jp — Japan"},{"value":"in","label":"amazon.in — India"},{"value":"ca","label":"amazon.ca — Canada"},{"value":"com.au","label":"amazon.com.au — Australia"},{"value":"com.mx","label":"amazon.com.mx — Mexico"},{"value":"com.br","label":"amazon.com.br — Brazil"},{"value":"com.tr","label":"amazon.com.tr — Türkiye"},{"value":"ae","label":"amazon.ae — United Arab Emirates"},{"value":"nl","label":"amazon.nl — Netherlands"},{"value":"se","label":"amazon.se — Sweden"},{"value":"pl","label":"amazon.pl — Poland"},{"value":"sg","label":"amazon.sg — Singapore"},{"value":"sa","label":"amazon.sa — Saudi Arabia"}],"default":"com"},{"name":"verify","type":"boolean","required":false,"description":"Also open the matched product's own page and check that it prints this barcode (verified=true/false). Adds one product-page fetch, about 3-4 s, and only when there is an organic match. Default false.","on_invalid":"ignore","default":false}],"returns":"gtin + asin (the first ORGANIC search result for the code; null when Amazon shows only sponsored ads, i.e. it has no listing for this barcode) + match_status ('search_match' | 'verified' | 'no_verified_match' | 'sponsored_only' | 'no_results') + verified (bool) + organic_match_count + verify_checked + matches[]{asin, title, brand, price, currency, rating, rating_count, image, sponsored, verified (true | false | null), page_barcodes} + match_count (all cards, ads included)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"gtin":"9780735211292"}}]},{"name":"americanas","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Americanas API scraper — americanas.com.br (Brazil): search, browse and full product detail from one of Brazil's largest marketplaces, with the card price, the PIX/a-vista price and the struck list price kept apart, interest-free instalments, the marketplace seller, every competing seller offer, EAN, specifications, variants and images. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/americanas/v1","spec_available":true,"actions":[{"name":"search","description":"Search Americanas by keyword. Every product comes with the card price, the PIX price and its discount, the struck list price, the best interest-free instalment plan, the seller (Americanas itself or a marketplace seller), how many sellers offer it, availability, EAN and category. Sort by price, best sellers, newest, discount or name; filter by brand, seller, price range, category path or any facet the site publishes.","required_params":["query"],"optional_params":["country","page","page_size","sort","brand","seller","min_price","max_price","category_path","facets","in_stock_only","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Words a shopper would type on Americanas (Portuguese).","on_invalid":"reject","example":"cafeteira eletrica","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Americanas sells in Brazil only (americanas.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — americanas.com.br (BRL)"}],"default":"br","example":"br"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Americanas serves only the first 2500 products of a result set: (page - 1) x page_size must be below 2500.","on_invalid":"reject","default":1,"minimum":1,"maximum":2500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, up to 50.","on_invalid":"reject","default":20,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Americanas' own sort orders. price_asc / price_desc order by the card price. `discount` is Americanas' own discount ranking: it correlates with but does not exactly equal discount_pct computed from the returned prices (measured 112 of 114 adjacent pairs descending). `name_asc` is ordered by Portuguese collation, so accented names sort as a Brazilian shopper expects. Americanas' 'mais vendidos' is not offered: the source accepts it and returns the relevance order unchanged.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Mais relevantes"},{"value":"price_asc","label":"Menor preco"},{"value":"price_desc","label":"Maior preco"},{"value":"newest","label":"Lancamentos"},{"value":"discount","label":"Maior desconto"},{"value":"name_asc","label":"Nome A-Z"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand, as it appears in the `brand` facet (e.g. mondial, philco).","on_invalid":"reject","example":"mondial"},{"name":"seller","type":"string","required":false,"description":"One marketplace seller, as it appears in the `sellername` facet (e.g. magazine-luiza; americanas-sa = sold by Americanas itself).","on_invalid":"reject","example":"magazine-luiza"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in BRL (reais). Americanas applies it to the card price.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in BRL (reais). Americanas applies it to the card price.","on_invalid":"reject","example":300,"minimum":0},{"name":"category_path","type":"string","required":false,"description":"Limit to a category path, as in a product's category_path or a americanas.com.br category URL (e.g. eletrodomesticos/fogao).","on_invalid":"reject","example":"eletrodomesticos/fogao"},{"name":"facets","type":"array","required":false,"description":"Extra filters as 'key/value' pairs taken from the `filters` action (e.g. genero/feminino, tamanho/41). Anything the site publishes as a facet.","on_invalid":"reject","example":["genero/feminino"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"true drops products Americanas lists as unavailable.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh attempts to make before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, sku_id, title, brand, url, image, price_brl (card price), pix_price_brl (the a-vista/PIX price the product page headlines), pix_discount_pct, list_price_brl, discount_pct, currency, installments{count, amount_brl, total_brl, interest_free, label}, seller{id, name, is_americanas}, marketplace, in_stock, offer_count, ean, reference, category, category_path[], promotions[]{name, discount_pct}}, count, total_results, max_reachable_results, page, page_size, has_more, stop_reason, unparsable_rows_dropped, sort, applied_filters, country, currency, query","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"cafeteira eletrica"}},{"name":"category","description":"Every product in an Americanas category, by category path or category URL, paged, with the same rows, sorts and filters as search.","required_params":["category"],"optional_params":["country","page","page_size","sort","brand","seller","min_price","max_price","facets","in_stock_only","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A category path (eletrodomesticos/fogao) or a americanas.com.br category URL. Up to 4 levels deep.","on_invalid":"reject","example":"eletrodomesticos/fogao","aliases":["category_url","category_path"]},{"name":"country","type":"enum","required":false,"description":"Americanas sells in Brazil only (americanas.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — americanas.com.br (BRL)"}],"default":"br","example":"br"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Americanas serves only the first 2500 products of a result set: (page - 1) x page_size must be below 2500.","on_invalid":"reject","default":1,"minimum":1,"maximum":2500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, up to 50.","on_invalid":"reject","default":20,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Americanas' own sort orders. price_asc / price_desc order by the card price. `discount` is Americanas' own discount ranking: it correlates with but does not exactly equal discount_pct computed from the returned prices (measured 112 of 114 adjacent pairs descending). `name_asc` is ordered by Portuguese collation, so accented names sort as a Brazilian shopper expects. Americanas' 'mais vendidos' is not offered: the source accepts it and returns the relevance order unchanged.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Mais relevantes"},{"value":"price_asc","label":"Menor preco"},{"value":"price_desc","label":"Maior preco"},{"value":"newest","label":"Lancamentos"},{"value":"discount","label":"Maior desconto"},{"value":"name_asc","label":"Nome A-Z"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand, as it appears in the `brand` facet (e.g. mondial, philco).","on_invalid":"reject","example":"mondial"},{"name":"seller","type":"string","required":false,"description":"One marketplace seller, as it appears in the `sellername` facet (e.g. magazine-luiza; americanas-sa = sold by Americanas itself).","on_invalid":"reject","example":"magazine-luiza"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in BRL (reais). Americanas applies it to the card price.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in BRL (reais). Americanas applies it to the card price.","on_invalid":"reject","example":300,"minimum":0},{"name":"facets","type":"array","required":false,"description":"Extra filters as 'key/value' pairs taken from the `filters` action (e.g. genero/feminino, tamanho/41). Anything the site publishes as a facet.","on_invalid":"reject","example":["genero/feminino"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"true drops products Americanas lists as unavailable.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh attempts to make before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, sku_id, title, brand, url, image, price_brl (card price), pix_price_brl (the a-vista/PIX price the product page headlines), pix_discount_pct, list_price_brl, discount_pct, currency, installments{count, amount_brl, total_brl, interest_free, label}, seller{id, name, is_americanas}, marketplace, in_stock, offer_count, ean, reference, category, category_path[], promotions[]{name, discount_pct}}, count, total_results, max_reachable_results, page, page_size, has_more, stop_reason, unparsable_rows_dropped, sort, applied_filters, country, currency, category_path","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"eletrodomesticos/fogao"}},{"name":"seller/products","description":"Everything a named Americanas marketplace seller lists, paged, with the same rows, sorts and filters as search. Seller names come from the `filters` action's sellername facet.","required_params":["seller"],"optional_params":["country","query","page","page_size","sort","brand","min_price","max_price","category_path","facets","in_stock_only","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"The seller name as it appears in the sellername facet.","on_invalid":"reject","example":"magazine-luiza"},{"name":"country","type":"enum","required":false,"description":"Americanas sells in Brazil only (americanas.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — americanas.com.br (BRL)"}],"default":"br","example":"br"},{"name":"query","type":"string","required":false,"description":"The keyword whose filters you want. Omit it to get a category's filters.","on_invalid":"reject","example":"cafeteira","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Americanas serves only the first 2500 products of a result set: (page - 1) x page_size must be below 2500.","on_invalid":"reject","default":1,"minimum":1,"maximum":2500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, up to 50.","on_invalid":"reject","default":20,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Americanas' own sort orders. price_asc / price_desc order by the card price. `discount` is Americanas' own discount ranking: it correlates with but does not exactly equal discount_pct computed from the returned prices (measured 112 of 114 adjacent pairs descending). `name_asc` is ordered by Portuguese collation, so accented names sort as a Brazilian shopper expects. Americanas' 'mais vendidos' is not offered: the source accepts it and returns the relevance order unchanged.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Mais relevantes"},{"value":"price_asc","label":"Menor preco"},{"value":"price_desc","label":"Maior preco"},{"value":"newest","label":"Lancamentos"},{"value":"discount","label":"Maior desconto"},{"value":"name_asc","label":"Nome A-Z"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand, as it appears in the `brand` facet (e.g. mondial, philco).","on_invalid":"reject","example":"mondial"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in BRL (reais). Americanas applies it to the card price.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in BRL (reais). Americanas applies it to the card price.","on_invalid":"reject","example":300,"minimum":0},{"name":"category_path","type":"string","required":false,"description":"Limit to a category path, as in a product's category_path or a americanas.com.br category URL (e.g. eletrodomesticos/fogao).","on_invalid":"reject","example":"eletrodomesticos/fogao"},{"name":"facets","type":"array","required":false,"description":"Extra filters as 'key/value' pairs taken from the `filters` action (e.g. genero/feminino, tamanho/41). Anything the site publishes as a facet.","on_invalid":"reject","example":["genero/feminino"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"true drops products Americanas lists as unavailable.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh attempts to make before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, sku_id, title, brand, url, image, price_brl (card price), pix_price_brl (the a-vista/PIX price the product page headlines), pix_discount_pct, list_price_brl, discount_pct, currency, installments{count, amount_brl, total_brl, interest_free, label}, seller{id, name, is_americanas}, marketplace, in_stock, offer_count, ean, reference, category, category_path[], promotions[]{name, discount_pct}}, count, total_results, max_reachable_results, page, page_size, has_more, stop_reason, unparsable_rows_dropped, sort, applied_filters, country, currency, seller","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"seller":"magazine-luiza"}},{"name":"product/detail","description":"The full Americanas product record by id or URL: title, brand, EAN, reference, the card price, the PIX price and its discount, the struck list price, the best interest-free instalment plan, the seller, EVERY competing seller offer with its own prices, availability, description, specifications, images, variants with their own ids and prices, category breadcrumb and release date.","required_params":["product_id"],"optional_params":["country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"An Americanas product id (the trailing number of a product URL) or the product URL itself.","on_invalid":"reject","example":"4895445","aliases":["id","url","sku"]},{"name":"country","type":"enum","required":false,"description":"Americanas sells in Brazil only (americanas.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — americanas.com.br (BRL)"}],"default":"br","example":"br"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh attempts to make before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, sku_id, title, brand, url, image, price_brl (card price), pix_price_brl (the a-vista/PIX price the product page headlines), pix_discount_pct, list_price_brl, discount_pct, currency, installments{count, amount_brl, total_brl, interest_free, label}, seller{id, name, is_americanas}, marketplace, in_stock, offer_count, ean, reference, category, category_path[], promotions[]{name, discount_pct}, description, specifications{name: value}, images[], variants[]{sku_id, name, ean, attributes, in_stock, price_brl, pix_price_brl}, variant_count, offers[]{seller{}, sku_id, price_brl, pix_price_brl, list_price_brl, installments{}, in_stock}, category_id, release_date, meta_description}, country, currency","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"4895445"}},{"name":"product/batch","description":"Up to 10 Americanas products in one call, each the same full record as product/detail. Ids that do not resolve are reported in not_found[] instead of failing the whole call.","required_params":["product_ids"],"optional_params":["country","max_rotations"],"params":[{"name":"product_ids","type":"array","required":true,"description":"Up to 10 Americanas product ids or product URLs in one call.","on_invalid":"reject","example":["4895445","2089027"],"aliases":["ids"]},{"name":"country","type":"enum","required":false,"description":"Americanas sells in Brazil only (americanas.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — americanas.com.br (BRL)"}],"default":"br","example":"br"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh attempts to make before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"products[]{…the product/detail shape…}, count, requested, not_found[], country, currency","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":5},"example_params":{"product_ids":["4895445","2089027"]}},{"name":"filters","description":"The filters Americanas itself offers for a keyword or a category — brands, sellers, price range, category tree and the per-category attributes (size, colour, gender…). Feed any of them back into search as `facets`.","required_params":[],"optional_params":["query","category","country","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"The keyword whose filters you want. Omit it to get a category's filters.","on_invalid":"reject","example":"cafeteira","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"A category path to get that category's filters.","on_invalid":"reject","example":"eletrodomesticos/fogao","aliases":["category_path","category_url"]},{"name":"country","type":"enum","required":false,"description":"Americanas sells in Brazil only (americanas.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — americanas.com.br (BRL)"}],"default":"br","example":"br"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh attempts to make before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"filters[]{key, label, type, values[]{value, label, count}}, price_range{min, max}, count, query, category_path, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"cafeteira"}},{"name":"search/suggest","description":"Americanas' own search-box completions for what a shopper has typed, with how often each term is searched and the department it belongs to.","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper has typed so far.","on_invalid":"reject","example":"gelad","aliases":["q","prefix"]},{"name":"country","type":"enum","required":false,"description":"Americanas sells in Brazil only (americanas.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — americanas.com.br (BRL)"}],"default":"br","example":"br"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh attempts to make before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"suggestions[]{term, search_count, department, position}, count, query, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"cafeteira eletrica"}}]},{"name":"andele-mandele","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Andele Mandele Latvia Second-Hand Marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/andele-mandele/v1","spec_available":true,"actions":[{"name":"search","description":"Search Andele Mandele, Latvia's second-hand marketplace for women's, men's and kids' clothing, shoes, home goods and vehicles, listed by private sellers. Free text plus the site's own filters (category, condition, size, colour and other attributes, brand, price, sale, reserved, sold) and its six sort orders. Nothing is required: no parameters browses the live catalogue.","required_params":[],"optional_params":["query","category_id","attribute_ids","brand_ids","min_price","max_price","on_sale","hide_reserved","sold_only","sort","page","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text as a Latvian shopper types it: `nike`, `kleita`, `reima kombinezons`, `lego`. Combine with `category_id` to search inside one category.","on_invalid":"reject","example":"nike","aliases":["q","search","text"]},{"name":"category_id","type":"integer","required":false,"description":"An Andele Mandele category id from `categories` (1 Dāmām / women, 2 Bērniem / kids, 54 Kungiem / men, 70 Mājai / home, 433 Transports; 3 = women's dresses, 16 = women's shoes). An id the site does not know returns 0 rows.","on_invalid":"reject","example":3,"minimum":1,"aliases":["category","catid"]},{"name":"attribute_ids","type":"array","required":false,"description":"Attribute value ids from `filters` for the same category: condition (19 new, 21 used-excellent, 220 used-good, 20 used-with-flaws, 22 vintage), size, colour, material, length … Ids of the SAME attribute are OR-ed (S or M), different attributes are AND-ed (S and new). Size ids are per size table: clothing S is 24, shoe 36 is 62.","on_invalid":"reject","example":[24,19],"aliases":["attributes"]},{"name":"brand_ids","type":"array","required":false,"description":"Brand ids from `brands` (ZARA 23, Massimo Dutti 106, Max Mara 61462) or a row's brand.id.","on_invalid":"reject","example":[23],"aliases":["brands","brand_id"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in euros.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in euros.","on_invalid":"reject","example":50,"minimum":0},{"name":"on_sale","type":"boolean","required":false,"description":"Only listings in a seller's time-limited sale (the site's -N% badge).","on_invalid":"reject","default":false,"example":false},{"name":"hide_reserved","type":"boolean","required":false,"description":"Leave out listings a buyer has reserved (the site's 'Nerādīt rezervētos').","on_invalid":"reject","default":false,"example":false},{"name":"sold_only","type":"boolean","required":false,"description":"Only listings that have sold (the site's 'Tikai pārdotās Pērles'): sold prices for market research. The site keeps a short recent window, not the full history.","on_invalid":"reject","default":false,"example":false},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's six: relevance (Aktuālie, the default), newest, popular, price_asc, price_desc, biggest_discount.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (site default)"},{"value":"newest","label":"Newest first"},{"value":"popular","label":"Most popular"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"biggest_discount","label":"Biggest sale discount"}],"default":"relevance","example":"newest","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"1-based page. `last_page` in the answer says where this result ends.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"enum","required":false,"description":"Rows per page: 48 (site default) or 96.","on_invalid":"reject","allowed_values":[{"value":48,"label":"48 rows"},{"value":96,"label":"96 rows"}],"default":48,"example":48,"aliases":["limit","per_page"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, total, total_display, page, page_size, last_page, has_more, sort, filters_applied, products[]}. Each product: {id, url, slug, price_eur, old_price_eur, old_price_kind (before_sale | original_retail), on_sale, sale_percent, currency, brand{id, name, slug}, shown_attributes[], favorites_count, applications_count, is_inactive, status_label, is_sold, is_reserved, image, images[]}. Search rows carry no title or seller (the site's cards do not): pass `id` to `product` for the full record.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":3,"attribute_ids":[24],"sort":"newest"}},{"name":"product","description":"One Andele Mandele listing in full: title and description (with the seller's original text when the site machine-translated it), current price, pre-sale price, the seller's stated original retail price, sale percent and expiry, condition, size, colours, material and every other attribute, brand, category path, views, likes, purchase requests, dates, every image, and the seller (username, name, country, rating with star breakdown, active listings, followers, member since, last seen, business flag).","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"integer","required":false,"description":"Andele Mandele product id: the `id` of a search row.","on_invalid":"reject","example":16184947,"aliases":["product_id"]},{"name":"url","type":"string","required":false,"description":"Or the product URL (https://www.andelemandele.lv/perle/<id>/<slug>/).","on_invalid":"reject","example":"https://www.andelemandele.lv/perle/16184947/ziemas-kombinezons-reima/"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, url, slug, title, title_original, description, description_original, is_machine_translated, status, is_sold, sold_at, is_reserved, price_eur, price_before_sale_eur, original_retail_price_eur, on_sale, sale{percent, price_eur, expires_at}, currency, ld_price_eur, price_mismatch, availability, category{id, name, parent_id}, breadcrumb[{name, url}], brand{id, name, slug, follower_count, product_count}, condition, size, colors[], material, attributes[{id, name, type, values[{id, name, hex}]}], views, favorites_count, applications_count, created_at, listed_at, is_promoted, image, images[], images_original[], image_count, related_listings_count, seller{id, username, first_name, last_name, profile_url, avatar, country, joined_at, last_seen_at, rating, rating_count, rating_stars, active_listings, follower_count, verification_level, is_business, flags[], about, status}}. Give `id` or `url`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.andelemandele.lv/perle/16184947/ziemas-kombinezons-reima/"}},{"name":"categories","description":"The whole Andele Mandele category tree (Dāmām / women, Bērniem / kids, Kungiem / men, Mājai / home, Transports) down to leaf categories, each with its live listing count and the `id` that `search` and `filters` take.","required_params":[],"optional_params":["include_pii"],"params":[{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{count, total_listings, categories[{id, name, level, parent_id, url, listing_count, children[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}},{"name":"filters","description":"The attributes a category is filtered by (condition, size table, colour, material, length, fuel, year …) with the value ids `search` takes as `attribute_ids`. Size tables differ by category, so look sizes up for the category you search.","required_params":["category_id"],"optional_params":["include_pii"],"params":[{"name":"category_id","type":"integer","required":true,"description":"A category id from `categories`.","on_invalid":"reject","example":16,"minimum":1,"aliases":["category","catid"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{category_id, attributes[{id, name, max_per_listing, values[{id, name}]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":16}},{"name":"brands","description":"Look up brand ids by name with the site's own brand autocomplete.","required_params":["query"],"optional_params":["include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"A brand name or its first letters.","on_invalid":"reject","example":"zara","aliases":["q","name"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, brands[{id, name}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"zara"}}]},{"name":"apartments","category":{"id":"real-estate","title":"Real Estate"},"title":"Apartments.com API — live US rental listings scraper: search apartments for rent by city, ZIP, neighbourhood or map box and get each building's rent range per bed count, amenities, address, coordinates, photos and leasing phone, plus property lookup by listing id — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/apartments/v1","spec_available":true,"actions":[{"name":"search","description":"Rental buildings in a place. Give a `location` ('Austin, TX', '78704', 'Downtown Chicago'), or a `bounding_box`, or `latitude`+`longitude`+`radius_miles`. Each row is a BUILDING with one entry per bed count in `floor_plans` — that is how apartments.com publishes rent, and flattening it would lose the price signal. `total_units` is the source's own count of available UNITS in the box, which is a different measure from the number of buildings returned.","required_params":[],"optional_params":["location","bounding_box","latitude","longitude","radius_miles","limit","page","sort","min_rent","max_rent","min_beds","max_beds","pets","amenities","has_3d_tour","has_video","specials_only"],"params":[{"name":"location","type":"string","required":false,"description":"Where to search: a US city and state ('Austin, TX'), a ZIP code ('78704'), a neighbourhood ('Downtown Chicago') or a street address. Resolved to a map box before the search runs. Pass `bounding_box` or `latitude`+`longitude` instead if you already have coordinates.","on_invalid":"reject","example":"Austin, TX","aliases":["query","q","city","postcode","zip"]},{"name":"bounding_box","type":"string","required":false,"description":"An explicit map box as 'south,west,north,east' (or an object with lower_right / upper_left). Skips the location lookup entirely.","on_invalid":"reject","example":"30.09866,-97.93838,30.51686,-97.56149","aliases":["bbox"]},{"name":"latitude","type":"number","required":false,"description":"Centre latitude. Used with `longitude` and `radius_miles`.","on_invalid":"reject","example":30.2672,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Centre longitude. Used with `latitude` and `radius_miles`.","on_invalid":"reject","example":-97.7431,"aliases":["lng","lon"]},{"name":"radius_miles","type":"number","required":false,"description":"Half-height of the box drawn around `latitude`/`longitude`, in miles.","on_invalid":"reject","default":5,"minimum":0.25,"maximum":50},{"name":"limit","type":"integer","required":false,"description":"How many buildings to return. The source serves 40 per page, so a larger limit costs one upstream page per 40.","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":200},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order. This is applied BY THE SOURCE — the page echoes it back — unlike the filters below, which this API applies to the rows.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Best match (source default)"},{"value":"rent_low_to_high","label":"Rent: low to high"},{"value":"rent_high_to_low","label":"Rent: high to low"},{"value":"newest","label":"Newest listings"},{"value":"recently_updated","label":"Recently updated"},{"value":"distance","label":"Distance from the box centre"},{"value":"3d_tour","label":"Has a 3D tour first"},{"value":"video","label":"Has video first"}],"default":"default"},{"name":"min_rent","type":"integer","required":false,"description":"Keep buildings whose rent range reaches this monthly rent in USD. Applied by this API to the returned rows. A building that publishes no rent ('Call for Rent') cannot be confirmed to match, so it is left out whenever a rent filter is set.","on_invalid":"reject","example":1000,"minimum":0},{"name":"max_rent","type":"integer","required":false,"description":"Keep buildings whose cheapest published rent is at or below this. Applied by this API to the returned rows. Buildings with no published rent are left out.","on_invalid":"reject","example":2500,"minimum":0},{"name":"min_beds","type":"integer","required":false,"description":"Keep buildings offering at least this many bedrooms (0 = studio). Applied by this API.","on_invalid":"reject","example":2,"minimum":0,"maximum":6},{"name":"max_beds","type":"integer","required":false,"description":"Keep buildings offering at most this many bedrooms. Applied by this API.","on_invalid":"reject","minimum":0,"maximum":6},{"name":"pets","type":"boolean","required":false,"description":"Keep only buildings whose amenity list mentions pets. The full pet policy is not published on this surface.","on_invalid":"ignore","default":false},{"name":"amenities","type":"array","required":false,"description":"Keep buildings whose amenity list contains all of these (case-insensitive substring match). Applied by this API to the short list the source publishes.","on_invalid":"reject","example":["In Unit Washer & Dryer"]},{"name":"has_3d_tour","type":"boolean","required":false,"description":"Keep only buildings with a 3D tour.","on_invalid":"ignore","default":false},{"name":"has_video","type":"boolean","required":false,"description":"Keep only buildings with a video.","on_invalid":"ignore","default":false},{"name":"specials_only","type":"boolean","required":false,"description":"Keep only buildings advertising a move-in special (free months, discounts).","on_invalid":"ignore","default":false}],"returns":"results[]{property_id, url, name, address, street, city, state, postal_code, floor_plans[]{beds, beds_label, rent_from, rent_to, rent_display, price_is_from}, rent_min, rent_max, beds_min, beds_max, amenities[], pet_policy_summary, specials[], phone, image, image_count, has_video, has_3d_tour}, total_units, new_unit_count, location{…}, bounding_box, page, limit, filters_applied_by","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX","limit":40}},{"name":"property/detail","description":"One building by its listing key or apartments.com URL: name, street address, city, state, coordinates, renter rating, the published rent range and bed range, the neighbourhood label and the main photo. The full floor-plan table, fee schedule and pet policy are NOT served on the open surface — see the API notes.","required_params":["property_id"],"optional_params":[],"params":[{"name":"property_id","type":"string","required":true,"description":"The building's apartments.com listing key (7 characters, e.g. 'pdh91xs') or its full apartments.com URL.","on_invalid":"reject","example":"pdh91xs","aliases":["id","listing_id","listing_key","url"]}],"returns":"property{property_id, name, url, street, city, state, latitude, longitude, rating, rent_display, rent_min, rent_max, beds_display, beds_min, beds_max, image, neighborhood}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"property_id":"pdh91xs"}},{"name":"locations","description":"Turn a typed place name into the ids, coordinates and map box that `search` takes — and the number of units each place currently has. Cities, ZIP codes, neighbourhoods, counties and street addresses all come back, each tagged with its type.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"What the renter typed: a city, a ZIP code, a neighbourhood or a street address.","on_invalid":"reject","example":"austin","aliases":["q","term"]},{"name":"limit","type":"integer","required":false,"description":"How many suggestions to return.","on_invalid":"reject","default":15,"minimum":1,"maximum":15}],"returns":"locations[]{location_id, display, type, city, state, postal_code, county, market, latitude, longitude, bounding_box, available_unit_count}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"austin"}}]},{"name":"app-store","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"App Store Reviews API — unified Apple App Store + Google Play reviews, ratings, top charts and ASO discovery","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/app-store/v1","spec_available":true,"actions":[{"name":"reviews","description":"unified Apple + Play reviews for one or more apps","required_params":[],"optional_params":["apps","appleAppId","googlePlayPackage","appName","stores","countries","maxReviews"],"params":[{"name":"apps","type":"array","required":false,"description":"Apps to fetch reviews for: an array of objects with any of {name, apple/appleAppId, play/googlePlayPackage}, or plain name strings. Alternative to the single-app id params.","on_invalid":"reject","example":[{"name":"WhatsApp","apple":"310633997","play":"com.whatsapp"}]},{"name":"appleAppId","type":"string","required":false,"description":"Apple numeric app id (single-app shortcut).","on_invalid":"reject","example":"310633997"},{"name":"googlePlayPackage","type":"string","required":false,"description":"Google Play package name (single-app shortcut).","on_invalid":"reject","example":"com.whatsapp"},{"name":"appName","type":"string","required":false,"description":"App name to search per store when ids aren't supplied.","on_invalid":"reject","example":"WhatsApp"},{"name":"stores","type":"array","required":false,"description":"Which app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.","on_invalid":"ignore","allowed_values":[{"value":"apple","label":"Apple App Store (iTunes)"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"countries","type":"array","required":false,"description":"Storefront country codes (2-letter, lowercase), e.g. ['us','gb']. Use 'all' for the Apple aggregate set. Omit for the default.","on_invalid":"ignore","example":["us"]},{"name":"maxReviews","type":"integer","required":false,"description":"Maximum reviews to collect per app/store (clamped to 100000).","on_invalid":"ignore","default":1000,"example":100,"minimum":1,"maximum":100000,"aliases":["max_reviews"]}],"returns":"kind='reviews', results[] (store, profile{name,app_id,rating,...}, reviews[] {rating, title, text, date, reviewer, version}, scraped_count, status), summary (success_rate_pct, total_reviews, …)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"apps":[{"name":"WhatsApp","apple":"310633997"}],"stores":["apple"],"countries":["us"],"maxReviews":100}},{"name":"search","description":"ranked app search results","required_params":["query"],"optional_params":["stores","country","count"],"params":[{"name":"query","type":"string","required":true,"description":"App search keyword (name or term).","on_invalid":"reject","example":"spotify","aliases":["appName","term"]},{"name":"stores","type":"array","required":false,"description":"Which app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.","on_invalid":"ignore","allowed_values":[{"value":"apple","label":"Apple App Store (iTunes)"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"country","type":"string","required":false,"description":"Storefront country code (2-letter, lowercase), e.g. 'us'.","on_invalid":"ignore","default":"us","example":"us"},{"name":"count","type":"integer","required":false,"description":"Maximum number of apps to return.","on_invalid":"ignore","default":50,"example":20,"minimum":1,"aliases":["maxResults"]}],"returns":"kind='discovery', results[]{store,query,apps[],count}, summary","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"spotify"}},{"name":"topCharts","description":"ranked chart/category apps","required_params":[],"optional_params":["stores","country","category","count","chart","device"],"params":[{"name":"chart","type":"enum","required":false,"description":"Which chart to pull. Apple supports top/new free/paid/grossing; Google Play maps to its equivalent top charts.","on_invalid":"ignore","allowed_values":[{"value":"topFree","label":"Top free"},{"value":"topPaid","label":"Top paid"},{"value":"topGrossing","label":"Top grossing"},{"value":"newFree","label":"New free (Apple)"},{"value":"newPaid","label":"New paid (Apple)"},{"value":"new","label":"New (Apple)"}],"default":"topFree","example":"topFree"},{"name":"category","type":"string","required":false,"description":"Genre/category filter: an Apple genre id (e.g. 6014=Games) or a Play category (e.g. GAME, SOCIAL). See listCategories for valid values.","on_invalid":"reject","example":"6014","aliases":["genre"]},{"name":"device","type":"enum","required":false,"description":"Apple-only: chart device variant (iPad has fewer chart feeds).","on_invalid":"ignore","allowed_values":[{"value":"iphone","label":"iPhone (Apple)"},{"value":"ipad","label":"iPad (Apple)"}],"default":"iphone","example":"iphone"},{"name":"stores","type":"array","required":false,"description":"Which app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.","on_invalid":"ignore","allowed_values":[{"value":"apple","label":"Apple App Store (iTunes)"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"country","type":"string","required":false,"description":"Storefront country code (2-letter, lowercase), e.g. 'us'.","on_invalid":"ignore","default":"us","example":"us"},{"name":"count","type":"integer","required":false,"description":"Maximum number of apps to return.","on_invalid":"ignore","default":50,"example":20,"minimum":1,"aliases":["maxResults"]}],"returns":"kind='discovery', results[]{store,chart,category,apps[],count,requested_count}, summary","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"chart":"topFree"}},{"name":"listCategories","description":"static genre/category list","required_params":[],"optional_params":["stores"],"params":[{"name":"stores","type":"array","required":false,"description":"Which app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.","on_invalid":"ignore","allowed_values":[{"value":"apple","label":"Apple App Store (iTunes)"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]}],"returns":"kind='discovery', results[]{store,categories[]{id,name},count}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"stores":["apple","google_play"]}},{"name":"appDetails","description":"full app profile","required_params":[],"optional_params":["appId","appleAppId","googlePlayPackage","stores","country","includeSimilarApps"],"params":[{"name":"appId","type":"string","required":false,"description":"App id to look up: Apple numeric id OR Play package name (appleAppId / googlePlayPackage also accepted).","on_invalid":"reject","example":"324684580","aliases":["appleAppId","googlePlayPackage","app_id"]},{"name":"stores","type":"array","required":false,"description":"Which app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.","on_invalid":"ignore","allowed_values":[{"value":"apple","label":"Apple App Store (iTunes)"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"country","type":"string","required":false,"description":"Storefront country code (2-letter, lowercase), e.g. 'us'.","on_invalid":"ignore","default":"us","example":"us"},{"name":"includeSimilarApps","type":"boolean","required":false,"description":"Play-only: also return similar/related apps for the app.","on_invalid":"ignore","default":false,"example":true,"aliases":["include_similar"]}],"returns":"kind='discovery', results[]{store,country,profile{...histogram},similar_apps[],status}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"stores":["apple"],"country":"us","appId":"324684580"}},{"name":"developerApps","description":"every other app published by the same developer","required_params":[],"optional_params":["appId","appleAppId","googlePlayPackage","stores","country","count"],"params":[{"name":"appId","type":"string","required":false,"description":"App id to look up: Apple numeric id OR Play package name (appleAppId / googlePlayPackage also accepted).","on_invalid":"reject","example":"324684580","aliases":["appleAppId","googlePlayPackage","app_id"]},{"name":"stores","type":"array","required":false,"description":"Which app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.","on_invalid":"ignore","allowed_values":[{"value":"apple","label":"Apple App Store (iTunes)"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"country","type":"string","required":false,"description":"Storefront country code (2-letter, lowercase), e.g. 'us'.","on_invalid":"ignore","default":"us","example":"us"},{"name":"count","type":"integer","required":false,"description":"Maximum number of apps to return.","on_invalid":"ignore","default":50,"example":20,"minimum":1,"aliases":["maxResults"]}],"returns":"kind='discovery', results[]{store,app_id,apps[],count,status}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"appId":"324684580"}},{"name":"similarApps","description":"related / similar apps for an app","required_params":[],"optional_params":["appId","appleAppId","googlePlayPackage","stores","country","count"],"params":[{"name":"appId","type":"string","required":false,"description":"App id to look up: Apple numeric id OR Play package name (appleAppId / googlePlayPackage also accepted).","on_invalid":"reject","example":"324684580","aliases":["appleAppId","googlePlayPackage","app_id"]},{"name":"stores","type":"array","required":false,"description":"Which app stores to query (array). Aliases like ios/app_store and play/android/google are accepted; unknown names are ignored. Omit to query both.","on_invalid":"ignore","allowed_values":[{"value":"apple","label":"Apple App Store (iTunes)"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"country","type":"string","required":false,"description":"Storefront country code (2-letter, lowercase), e.g. 'us'.","on_invalid":"ignore","default":"us","example":"us"},{"name":"count","type":"integer","required":false,"description":"Maximum number of apps to return.","on_invalid":"ignore","default":50,"example":20,"minimum":1,"aliases":["maxResults"]}],"returns":"kind='discovery', results[]{store,app_id,apps[],count,status} (Apple has no public similar feed — returns the developer's other apps)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"appId":"324684580"}}]},{"name":"aqar","category":{"id":"real-estate","title":"Real Estate"},"title":"Aqar — Saudi Arabia real-estate marketplace (sa.aqar.fm, sale + rent, SAR)","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/aqar/v1","spec_available":true,"actions":[{"name":"search","description":"Search Saudi Arabia's largest property marketplace by category (66 of them, each pairing a property type with sale/rent/booking), city, district, price, area, bedrooms, bathrooms, building age, street width, furnishing, amenities, advertiser type and free Arabic or English text. Every row carries the price WITH ITS PERIOD — Saudi rent is normally quoted per year, and this engine says so on each row instead of leaving a caller to assume monthly. Rows also carry the real first-publication time separately from the advertiser's bump time, coordinates, the REGA ad licence number and the advertising office.","required_params":[],"optional_params":["category","city","district_id","direction_id","keyword","price_min","price_max","rent_period","area_min","area_max","meter_price_min","meter_price_max","beds_min","rooms_min","livings_min","bathrooms_min","age_max","street_width_min","furnished","has_image","has_video","verified","elevator","pool","basement","duplex","near_metro","seller_type","user_id","created_after_days","bumped_after_days","sort","max_results","offset","lang","include_pii"],"params":[{"name":"category","type":"enum","required":false,"description":"Property type AND deal type in one value, exactly as aqar models it — 'apartment-for-rent' and 'apartment-for-sale' are two different categories, not one category plus a flag. 66 values, from 'villa-for-sale' to 'communication-towers-for-rent'. The numeric id the source uses is accepted too. Omit it (or pass 'all-real-estates') to search everything.","on_invalid":"reject","allowed_values":[{"value":"all-real-estates","label":"All real estates"},{"value":"apartment-for-rent","label":"Apartment for rent"},{"value":"apartment-for-sale","label":"Apartment for sale"},{"value":"apartments-for-booking","label":"Apartments for booking"},{"value":"banks-and-atms-for-rent","label":"Banks and atms for rent"},{"value":"banks-and-atms-for-sale","label":"Banks and atms for sale"},{"value":"big-flat-for-rent","label":"Big flat for rent"},{"value":"building-for-rent","label":"Building for rent"},{"value":"building-for-sale","label":"Building for sale"},{"value":"chalet-for-rent","label":"Chalet for rent"},{"value":"chalets-for-booking","label":"Chalets for booking"},{"value":"cinemas-for-rent","label":"Cinemas for rent"},{"value":"cinemas-for-sale","label":"Cinemas for sale"},{"value":"communication-towers-for-rent","label":"Communication towers for rent"},{"value":"communication-towers-for-sale","label":"Communication towers for sale"},{"value":"complexes-for-rent","label":"Complexes for rent"},{"value":"complexes-for-sale","label":"Complexes for sale"},{"value":"factories-for-rent","label":"Factories for rent"},{"value":"factories-for-sale","label":"Factories for sale"},{"value":"farm-for-sale","label":"Farm for sale"},{"value":"farms-for-booking","label":"Farms for booking"},{"value":"farms-for-rent","label":"Farms for rent"},{"value":"flat-for-sale","label":"Flat for sale"},{"value":"halls-for-booking","label":"Halls for booking"},{"value":"hospitals-for-rent","label":"Hospitals for rent"},{"value":"hospitals-for-sale","label":"Hospitals for sale"},{"value":"hotels-for-rent","label":"Hotels for rent"},{"value":"hotels-for-sale","label":"Hotels for sale"},{"value":"kiosks-for-rent","label":"Kiosks for rent"},{"value":"kiosks-for-sale","label":"Kiosks for sale"},{"value":"land-for-rent","label":"Land for rent"},{"value":"land-for-sale","label":"Land for sale"},{"value":"lounge-for-rent","label":"Lounge for rent"},{"value":"lounge-for-sale","label":"Lounge for sale"},{"value":"lounges-for-booking","label":"Lounges for booking"},{"value":"office-for-rent","label":"Office for rent"},{"value":"offices-for-sale","label":"Offices for sale"},{"value":"other","label":"Other"},{"value":"parking-for-rent","label":"Parking for rent"},{"value":"parking-for-sale","label":"Parking for sale"},{"value":"power-stations-for-rent","label":"Power stations for rent"},{"value":"power-stations-for-sale","label":"Power stations for sale"},{"value":"room-for-rent","label":"Room for rent"},{"value":"rooms-for-sale","label":"Rooms for sale"},{"value":"schools-for-rent","label":"Schools for rent"},{"value":"schools-for-sale","label":"Schools for sale"},{"value":"small-house-for-rent","label":"Small house for rent"},{"value":"small-house-for-sale","label":"Small house for sale"},{"value":"stations-for-rent","label":"Stations for rent"},{"value":"stations-for-sale","label":"Stations for sale"},{"value":"store-for-rent","label":"Store for rent"},{"value":"store-for-sale","label":"Store for sale"},{"value":"studios-for-booking","label":"Studios for booking"},{"value":"studios-for-rent","label":"Studios for rent"},{"value":"studios-for-sale","label":"Studios for sale"},{"value":"tent-for-rent","label":"Tent for rent"},{"value":"tents-for-booking","label":"Tents for booking"},{"value":"towers-for-rent","label":"Towers for rent"},{"value":"towers-for-sale","label":"Towers for sale"},{"value":"villa-for-rent","label":"Villa for rent"},{"value":"villa-for-sale","label":"Villa for sale"},{"value":"villas-for-booking","label":"Villas for booking"},{"value":"warehouse-for-rent","label":"Warehouse for rent"},{"value":"warehouses-for-sale","label":"Warehouses for sale"},{"value":"workshops-for-rent","label":"Workshops for rent"},{"value":"workshops-for-sale","label":"Workshops for sale"}],"example":"apartment-for-rent","aliases":["category_id","property_type","type"]},{"name":"city","type":"string","required":false,"description":"City name in English ('riyadh', 'jeddah', 'al khobar'), in Arabic ('الرياض'), or the source's numeric city_id. 96 cities carry stock; Riyadh 83,837 and Jeddah 41,570 are most of the market. Use the `cities` action for the full live list with counts.","on_invalid":"reject","example":"riyadh","value_pattern":"[\\w\\s'`\\-؀-ۿ]{2,48}","aliases":["city_id","location"]},{"name":"district_id","type":"integer","required":false,"description":"Narrow to one district (neighbourhood). Get ids and live counts from the `districts` action — e.g. An Narjis in Riyadh is 600 with 1,975 listings.","on_invalid":"reject","example":600,"aliases":["neighborhood_id","neighbourhood_id"]},{"name":"direction_id","type":"integer","required":false,"description":"Narrow to one quadrant of a city (North/East/West/South). Ids come from `districts`; North Riyadh is 4 with 10,720 listings.","on_invalid":"reject","example":4},{"name":"keyword","type":"string","required":false,"description":"Free text matched against the advertiser's own description. Arabic works and is what most listings are written in — 'فيلا' returned 1,420 of the 22,758 Riyadh rentals in the measurement. English text only matches the minority of listings with an English body.","on_invalid":"reject","example":"فيلا","aliases":["q","query","text"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in SAR, in the listing's own period.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price, in SAR. ⚠️ Saudi rent is normally quoted PER YEAR — a 60,000 ceiling on 'apartment-for-rent' means 60,000 a year, not a month. Each row says which with `price_period`.","on_invalid":"reject","example":80000,"minimum":0,"aliases":["max_price"]},{"name":"rent_period","type":"enum","required":false,"description":"Only keep listings priced per day / per month / per year. Most Saudi rentals are yearly; daily stock is holiday lets. Note the source also leaves this unset on many rows, and those rows are excluded when you filter on it.","on_invalid":"reject","allowed_values":[{"value":"daily","label":"Price is per day (3,952 listings site-wide at capture)"},{"value":"monthly","label":"Price is per month (5 listings site-wide at capture — rare in Saudi)"},{"value":"yearly","label":"Price is per year (27,149 listings site-wide — the Saudi norm)"}],"example":"yearly","aliases":["price_period"]},{"name":"area_min","type":"number","required":false,"description":"Smallest built/plot area in square metres.","on_invalid":"reject","example":120,"minimum":0,"aliases":["min_area"]},{"name":"area_max","type":"number","required":false,"description":"Largest area in square metres.","on_invalid":"reject","example":400,"minimum":0,"aliases":["max_area"]},{"name":"meter_price_min","type":"number","required":false,"description":"Lowest price per square metre, in SAR. Often null on rentals.","on_invalid":"reject","example":2000,"minimum":0},{"name":"meter_price_max","type":"number","required":false,"description":"Highest price per square metre, in SAR.","on_invalid":"reject","example":8000,"minimum":0},{"name":"beds_min","type":"integer","required":false,"description":"At least this many bedrooms.","on_invalid":"reject","example":3,"minimum":0,"maximum":50,"aliases":["bedrooms_min","min_beds"]},{"name":"rooms_min","type":"integer","required":false,"description":"At least this many rooms in total.","on_invalid":"reject","example":4,"minimum":0,"maximum":99},{"name":"livings_min","type":"integer","required":false,"description":"At least this many living rooms / salons.","on_invalid":"reject","example":1,"minimum":0,"maximum":20},{"name":"bathrooms_min","type":"integer","required":false,"description":"At least this many bathrooms.","on_invalid":"reject","example":2,"minimum":0,"maximum":50,"aliases":["wc_min"]},{"name":"age_max","type":"integer","required":false,"description":"Building age ceiling in years. 0 means brand new.","on_invalid":"reject","example":5,"minimum":0,"maximum":100},{"name":"street_width_min","type":"number","required":false,"description":"Minimum width in metres of the street the property faces — a standard Saudi land/villa criterion.","on_invalid":"reject","example":20,"minimum":0},{"name":"furnished","type":"enum","required":false,"description":"Only furnished (true) or only unfurnished (false).","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"has_image","type":"enum","required":false,"description":"Only listings with photos. 20,151 of the 22,758 control rows had at least one.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true","aliases":["has_photo","with_images"]},{"name":"has_video","type":"enum","required":false,"description":"Only listings with a walkthrough video — 9,304 of 22,758 in the control.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"verified","type":"enum","required":false,"description":"Only aqar-verified listings. ⚠️ Measured near-constant: 22,253 of 22,758 control rows are already verified, so this narrows almost nothing.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"elevator","type":"enum","required":false,"description":"Only buildings with a lift.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true","aliases":["lift"]},{"name":"pool","type":"enum","required":false,"description":"Only properties with a pool.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"basement","type":"enum","required":false,"description":"Only properties with a basement.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"duplex","type":"enum","required":false,"description":"Only duplex units.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"near_metro","type":"enum","required":false,"description":"Only properties the advertiser flagged as near a metro station.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"seller_type","type":"enum","required":false,"description":"Who is advertising. In the control query 4,206 of 22,758 rows were offices/agencies and 18,552 individuals.","on_invalid":"reject","allowed_values":[{"value":"office","label":"Real-estate office / agency"},{"value":"individual","label":"Private advertiser"}],"example":"office","aliases":["user_type","advertiser_type"]},{"name":"user_id","type":"integer","required":false,"description":"Only this advertiser's stock. The id comes back on every row as `seller.user_id` and is what the `agent` action takes.","on_invalid":"reject","example":815188},{"name":"created_after_days","type":"integer","required":false,"description":"🔴 The honest way to ask for NEW listings on this source: keep only ads first published within N days. Measured on the Riyadh rental control — 7 days → 1,775 of 22,758, 30 days → 7,052. Prefer this over sorting, because the source refuses to sort by creation date.","on_invalid":"reject","example":7,"minimum":1,"maximum":3650,"aliases":["new_within_days","posted_within_days"]},{"name":"bumped_after_days","type":"integer","required":false,"description":"Keep only ads the advertiser re-promoted within N days. This is activity, not newness.","on_invalid":"reject","example":2,"minimum":1,"maximum":3650},{"name":"sort","type":"enum","required":false,"description":"Result order. Only these were measured to actually reorder the set; 'newest' and 'oldest' are accepted as courtesy aliases and mapped to the bump order with a warning, because the source accepts a creation-date sort and then ignores it (ascending and descending return identical rows).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The source's own default order (promoted ads first)"},{"value":"recently_bumped","label":"Most recently re-promoted by the advertiser — the only working recency order"},{"value":"least_recently_bumped","label":"Least recently re-promoted"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"area_asc","label":"Smallest area first"},{"value":"area_desc","label":"Largest area first"}],"default":"relevance","example":"recently_bumped","aliases":["order","order_by"]},{"name":"max_results","type":"integer","required":false,"description":"How many rows to return. The source serves at most 70 per request — measured, and it never says so: size=100/200/500/1000 all returned exactly 70 and an identical body — so bigger asks are walked across pages, 70 at a time, inside the request budget.","on_invalid":"reject","default":70,"example":70,"minimum":1,"maximum":700,"aliases":["limit","size","count"]},{"name":"offset","type":"integer","required":false,"description":"Skip this many rows before collecting. There is no deep-paging ceiling on this source: offsets of 10,000 and 20,000 returned fresh rows, and an offset past the total returns an empty list instead of repeating the last page.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":100000,"aliases":["from","skip"]},{"name":"lang","type":"enum","required":false,"description":"Which description to put in the `description` field. Both `description_ar` and `description_en` are always returned when the advertiser wrote them; most listings are Arabic-only.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic (the source's native surface)"},{"value":"en","label":"English where available"}],"default":"ar","example":"en","aliases":["language"]},{"name":"include_pii","type":"enum","required":false,"description":"Include the advertiser's phone number and (on `detail`) the deed owner fields. Off by default. Measured 2026-10-06: the source withholds these from anonymous callers anyway (`phone` comes back as 0), so this flag mostly future-proofs the default.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"default":"false","example":"false"}],"returns":"`{rows[], summary, filters_applied}`. Each row: id, url, category + category_id, listing_kind (rent/sale/booking), description (+ description_ar / description_en), `title` — ⚠️ the source publishes NO title field, so this is the FIRST LINE of the advertiser's own description, verbatim, including any emphasis markers they typed — **price + currency + price_period (daily|monthly|yearly) + price_period_source + price_per_year**, meter_price, instalments, area_sqm, plot width/length, street_width_m, bedrooms, rooms, living_rooms, bathrooms, floor, age_years, property_type{villa_type, apartment_type, floor_type}, features{furnished, elevator, pool, driver_room, maid_room, near_metro, …}, location{address, city, city_ar, city_id, district, district_id, direction_id, region, lat, lng}, **created_at (the real first-publication time) and refreshed_at (the advertiser's bump)**, updated_at, photos[] + photo_count, has_video, verified, is_promoted, is_auction, licensing{ad_license_number, rega_licensed, deed_number, deed_area_sqm}, seller{user_id, name, company_name, rating, identity_verified, rega_id, advertiser_type}. `summary` carries BOTH of the source's totals: `total_results` (retrievable) and `index_count` (the index's own count), plus `counts_disagree`, `page_size`, `pages_fetched`, `has_more`, `sort`, `currency`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"apartment-for-rent","city":"riyadh","price_max":80000,"beds_min":2,"sort":"recently_bumped","max_results":20}},{"name":"detail","description":"The full record for one listing: the complete description, every photo and its caption, walkthrough videos, view and like counts, the room-by-room breakdown, internal vs external area, the extended amenity set, whether the deed is constrained or pawned, the REGA / off-plan / Ministry-of-Tourism licence numbers with the plan and parcel numbers, the national address, the agent's commission terms, auction state and booking rules. Takes the numeric id from a search row, or a full aqar listing URL.","required_params":["id"],"optional_params":["lang","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"Listing id as `search` returns it in `rows[].id` (e.g. 6776778). A full aqar listing URL works too — the id is read out of its slug.","on_invalid":"reject","example":"6776778","aliases":["listing_id","url","uri"]},{"name":"lang","type":"enum","required":false,"description":"Which description goes in `description`. Both languages are returned when the advertiser wrote them.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic (the source's native surface)"},{"value":"en","label":"English where available"}],"default":"ar","example":"en","aliases":["language"]},{"name":"include_pii","type":"enum","required":false,"description":"Include the advertiser's phone and the deed owner name/id. Off by default; measured, the source returns these as null/0 to anonymous callers anyway.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"default":"false","example":"false"}],"returns":"Everything a search row carries plus: the full description, every photo with its captions, walkthrough video URLs, views and likes, rooms_detail (apartments, kitchens, men's/women's majlis, bedroom/guest/driver room counts, floors), areas{internal_sqm, external_sqm}, the extended feature set (balcony, master bedroom, separate water/electricity meters, fibre optic, private parking, bank finance accepted, laundry room, A/C type, wifi), encumbrances{is_constrained, is_pawned, obligations, guarantees}, licensing{ad_license_number, off_plan_license_number, rega_license_url, mot_license_number, plan_no, parcel_no, rega_total_price, rega_meter_price}, the national-address street, postal code and building number, nearby_services[] with coordinates, commission{type, percentage, amount}, auction{is_auction, biddable, ends_at}, booking{minimum_days, check_in_hour, check_out_hour} and the canonical `url`/`uri`. Seller phone and deed-owner fields only with `include_pii=true`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"6776778"}},{"name":"count","description":"How many properties match a filter combination, without parsing a single row — one small request, built for market sizing and for watching a segment over time. 🔴 It returns BOTH numbers the source publishes, because they disagree: `total_results` is what you can actually page through and `index_count` is the index's own tally. Measured gap: 22,666 vs 22,760 on Riyadh apartments, and 1 vs 3,952 on daily-rate stock.","required_params":[],"optional_params":["category","city","district_id","direction_id","keyword","price_min","price_max","rent_period","area_min","area_max","meter_price_min","meter_price_max","beds_min","rooms_min","livings_min","bathrooms_min","age_max","street_width_min","furnished","has_image","has_video","verified","elevator","pool","basement","duplex","near_metro","seller_type","user_id","created_after_days","bumped_after_days"],"params":[{"name":"category","type":"enum","required":false,"description":"Property type AND deal type in one value, exactly as aqar models it — 'apartment-for-rent' and 'apartment-for-sale' are two different categories, not one category plus a flag. 66 values, from 'villa-for-sale' to 'communication-towers-for-rent'. The numeric id the source uses is accepted too. Omit it (or pass 'all-real-estates') to search everything.","on_invalid":"reject","allowed_values":[{"value":"all-real-estates","label":"All real estates"},{"value":"apartment-for-rent","label":"Apartment for rent"},{"value":"apartment-for-sale","label":"Apartment for sale"},{"value":"apartments-for-booking","label":"Apartments for booking"},{"value":"banks-and-atms-for-rent","label":"Banks and atms for rent"},{"value":"banks-and-atms-for-sale","label":"Banks and atms for sale"},{"value":"big-flat-for-rent","label":"Big flat for rent"},{"value":"building-for-rent","label":"Building for rent"},{"value":"building-for-sale","label":"Building for sale"},{"value":"chalet-for-rent","label":"Chalet for rent"},{"value":"chalets-for-booking","label":"Chalets for booking"},{"value":"cinemas-for-rent","label":"Cinemas for rent"},{"value":"cinemas-for-sale","label":"Cinemas for sale"},{"value":"communication-towers-for-rent","label":"Communication towers for rent"},{"value":"communication-towers-for-sale","label":"Communication towers for sale"},{"value":"complexes-for-rent","label":"Complexes for rent"},{"value":"complexes-for-sale","label":"Complexes for sale"},{"value":"factories-for-rent","label":"Factories for rent"},{"value":"factories-for-sale","label":"Factories for sale"},{"value":"farm-for-sale","label":"Farm for sale"},{"value":"farms-for-booking","label":"Farms for booking"},{"value":"farms-for-rent","label":"Farms for rent"},{"value":"flat-for-sale","label":"Flat for sale"},{"value":"halls-for-booking","label":"Halls for booking"},{"value":"hospitals-for-rent","label":"Hospitals for rent"},{"value":"hospitals-for-sale","label":"Hospitals for sale"},{"value":"hotels-for-rent","label":"Hotels for rent"},{"value":"hotels-for-sale","label":"Hotels for sale"},{"value":"kiosks-for-rent","label":"Kiosks for rent"},{"value":"kiosks-for-sale","label":"Kiosks for sale"},{"value":"land-for-rent","label":"Land for rent"},{"value":"land-for-sale","label":"Land for sale"},{"value":"lounge-for-rent","label":"Lounge for rent"},{"value":"lounge-for-sale","label":"Lounge for sale"},{"value":"lounges-for-booking","label":"Lounges for booking"},{"value":"office-for-rent","label":"Office for rent"},{"value":"offices-for-sale","label":"Offices for sale"},{"value":"other","label":"Other"},{"value":"parking-for-rent","label":"Parking for rent"},{"value":"parking-for-sale","label":"Parking for sale"},{"value":"power-stations-for-rent","label":"Power stations for rent"},{"value":"power-stations-for-sale","label":"Power stations for sale"},{"value":"room-for-rent","label":"Room for rent"},{"value":"rooms-for-sale","label":"Rooms for sale"},{"value":"schools-for-rent","label":"Schools for rent"},{"value":"schools-for-sale","label":"Schools for sale"},{"value":"small-house-for-rent","label":"Small house for rent"},{"value":"small-house-for-sale","label":"Small house for sale"},{"value":"stations-for-rent","label":"Stations for rent"},{"value":"stations-for-sale","label":"Stations for sale"},{"value":"store-for-rent","label":"Store for rent"},{"value":"store-for-sale","label":"Store for sale"},{"value":"studios-for-booking","label":"Studios for booking"},{"value":"studios-for-rent","label":"Studios for rent"},{"value":"studios-for-sale","label":"Studios for sale"},{"value":"tent-for-rent","label":"Tent for rent"},{"value":"tents-for-booking","label":"Tents for booking"},{"value":"towers-for-rent","label":"Towers for rent"},{"value":"towers-for-sale","label":"Towers for sale"},{"value":"villa-for-rent","label":"Villa for rent"},{"value":"villa-for-sale","label":"Villa for sale"},{"value":"villas-for-booking","label":"Villas for booking"},{"value":"warehouse-for-rent","label":"Warehouse for rent"},{"value":"warehouses-for-sale","label":"Warehouses for sale"},{"value":"workshops-for-rent","label":"Workshops for rent"},{"value":"workshops-for-sale","label":"Workshops for sale"}],"example":"apartment-for-rent","aliases":["category_id","property_type","type"]},{"name":"city","type":"string","required":false,"description":"City name in English ('riyadh', 'jeddah', 'al khobar'), in Arabic ('الرياض'), or the source's numeric city_id. 96 cities carry stock; Riyadh 83,837 and Jeddah 41,570 are most of the market. Use the `cities` action for the full live list with counts.","on_invalid":"reject","example":"riyadh","value_pattern":"[\\w\\s'`\\-؀-ۿ]{2,48}","aliases":["city_id","location"]},{"name":"district_id","type":"integer","required":false,"description":"Narrow to one district (neighbourhood). Get ids and live counts from the `districts` action — e.g. An Narjis in Riyadh is 600 with 1,975 listings.","on_invalid":"reject","example":600,"aliases":["neighborhood_id","neighbourhood_id"]},{"name":"direction_id","type":"integer","required":false,"description":"Narrow to one quadrant of a city (North/East/West/South). Ids come from `districts`; North Riyadh is 4 with 10,720 listings.","on_invalid":"reject","example":4},{"name":"keyword","type":"string","required":false,"description":"Free text matched against the advertiser's own description. Arabic works and is what most listings are written in — 'فيلا' returned 1,420 of the 22,758 Riyadh rentals in the measurement. English text only matches the minority of listings with an English body.","on_invalid":"reject","example":"فيلا","aliases":["q","query","text"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in SAR, in the listing's own period.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price, in SAR. ⚠️ Saudi rent is normally quoted PER YEAR — a 60,000 ceiling on 'apartment-for-rent' means 60,000 a year, not a month. Each row says which with `price_period`.","on_invalid":"reject","example":80000,"minimum":0,"aliases":["max_price"]},{"name":"rent_period","type":"enum","required":false,"description":"Only keep listings priced per day / per month / per year. Most Saudi rentals are yearly; daily stock is holiday lets. Note the source also leaves this unset on many rows, and those rows are excluded when you filter on it.","on_invalid":"reject","allowed_values":[{"value":"daily","label":"Price is per day (3,952 listings site-wide at capture)"},{"value":"monthly","label":"Price is per month (5 listings site-wide at capture — rare in Saudi)"},{"value":"yearly","label":"Price is per year (27,149 listings site-wide — the Saudi norm)"}],"example":"yearly","aliases":["price_period"]},{"name":"area_min","type":"number","required":false,"description":"Smallest built/plot area in square metres.","on_invalid":"reject","example":120,"minimum":0,"aliases":["min_area"]},{"name":"area_max","type":"number","required":false,"description":"Largest area in square metres.","on_invalid":"reject","example":400,"minimum":0,"aliases":["max_area"]},{"name":"meter_price_min","type":"number","required":false,"description":"Lowest price per square metre, in SAR. Often null on rentals.","on_invalid":"reject","example":2000,"minimum":0},{"name":"meter_price_max","type":"number","required":false,"description":"Highest price per square metre, in SAR.","on_invalid":"reject","example":8000,"minimum":0},{"name":"beds_min","type":"integer","required":false,"description":"At least this many bedrooms.","on_invalid":"reject","example":3,"minimum":0,"maximum":50,"aliases":["bedrooms_min","min_beds"]},{"name":"rooms_min","type":"integer","required":false,"description":"At least this many rooms in total.","on_invalid":"reject","example":4,"minimum":0,"maximum":99},{"name":"livings_min","type":"integer","required":false,"description":"At least this many living rooms / salons.","on_invalid":"reject","example":1,"minimum":0,"maximum":20},{"name":"bathrooms_min","type":"integer","required":false,"description":"At least this many bathrooms.","on_invalid":"reject","example":2,"minimum":0,"maximum":50,"aliases":["wc_min"]},{"name":"age_max","type":"integer","required":false,"description":"Building age ceiling in years. 0 means brand new.","on_invalid":"reject","example":5,"minimum":0,"maximum":100},{"name":"street_width_min","type":"number","required":false,"description":"Minimum width in metres of the street the property faces — a standard Saudi land/villa criterion.","on_invalid":"reject","example":20,"minimum":0},{"name":"furnished","type":"enum","required":false,"description":"Only furnished (true) or only unfurnished (false).","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"has_image","type":"enum","required":false,"description":"Only listings with photos. 20,151 of the 22,758 control rows had at least one.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true","aliases":["has_photo","with_images"]},{"name":"has_video","type":"enum","required":false,"description":"Only listings with a walkthrough video — 9,304 of 22,758 in the control.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"verified","type":"enum","required":false,"description":"Only aqar-verified listings. ⚠️ Measured near-constant: 22,253 of 22,758 control rows are already verified, so this narrows almost nothing.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"elevator","type":"enum","required":false,"description":"Only buildings with a lift.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true","aliases":["lift"]},{"name":"pool","type":"enum","required":false,"description":"Only properties with a pool.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"basement","type":"enum","required":false,"description":"Only properties with a basement.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"duplex","type":"enum","required":false,"description":"Only duplex units.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"near_metro","type":"enum","required":false,"description":"Only properties the advertiser flagged as near a metro station.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"example":"true"},{"name":"seller_type","type":"enum","required":false,"description":"Who is advertising. In the control query 4,206 of 22,758 rows were offices/agencies and 18,552 individuals.","on_invalid":"reject","allowed_values":[{"value":"office","label":"Real-estate office / agency"},{"value":"individual","label":"Private advertiser"}],"example":"office","aliases":["user_type","advertiser_type"]},{"name":"user_id","type":"integer","required":false,"description":"Only this advertiser's stock. The id comes back on every row as `seller.user_id` and is what the `agent` action takes.","on_invalid":"reject","example":815188},{"name":"created_after_days","type":"integer","required":false,"description":"🔴 The honest way to ask for NEW listings on this source: keep only ads first published within N days. Measured on the Riyadh rental control — 7 days → 1,775 of 22,758, 30 days → 7,052. Prefer this over sorting, because the source refuses to sort by creation date.","on_invalid":"reject","example":7,"minimum":1,"maximum":3650,"aliases":["new_within_days","posted_within_days"]},{"name":"bumped_after_days","type":"integer","required":false,"description":"Keep only ads the advertiser re-promoted within N days. This is activity, not newness.","on_invalid":"reject","example":2,"minimum":1,"maximum":3650}],"returns":"`{total_results, index_count, counts_disagree, count_gap, pages_at_70, currency, filters_applied}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"villa-for-sale","city":"jeddah"}},{"name":"categories","description":"The complete category vocabulary — 66 entries, each the pairing of a property type with sale, rent or booking — with the slug and numeric id that `search` and `count` take, in both Arabic and English, plus the search keywords the site itself associates with each one. Cheap lookup; call it once and cache.","required_params":[],"optional_params":[],"params":[],"returns":"`rows[]` of {id, slug, name_en, name_ar, plural_en, plural_ar, path, keywords[]}, plus `summary.total_results`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"cities","description":"Every Saudi city that carries stock, with its numeric city_id and a LIVE listing count, optionally for one category. 96 cities at capture: Riyadh 83,837, Jeddah 41,570, Dammam 8,523. Also returns the 13 administrative regions. This is the cheapest way to size the market by city.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"enum","required":false,"description":"Count cities for one category only. Omit for the whole catalogue.","on_invalid":"reject","allowed_values":[{"value":"all-real-estates","label":"All real estates"},{"value":"apartment-for-rent","label":"Apartment for rent"},{"value":"apartment-for-sale","label":"Apartment for sale"},{"value":"apartments-for-booking","label":"Apartments for booking"},{"value":"banks-and-atms-for-rent","label":"Banks and atms for rent"},{"value":"banks-and-atms-for-sale","label":"Banks and atms for sale"},{"value":"big-flat-for-rent","label":"Big flat for rent"},{"value":"building-for-rent","label":"Building for rent"},{"value":"building-for-sale","label":"Building for sale"},{"value":"chalet-for-rent","label":"Chalet for rent"},{"value":"chalets-for-booking","label":"Chalets for booking"},{"value":"cinemas-for-rent","label":"Cinemas for rent"},{"value":"cinemas-for-sale","label":"Cinemas for sale"},{"value":"communication-towers-for-rent","label":"Communication towers for rent"},{"value":"communication-towers-for-sale","label":"Communication towers for sale"},{"value":"complexes-for-rent","label":"Complexes for rent"},{"value":"complexes-for-sale","label":"Complexes for sale"},{"value":"factories-for-rent","label":"Factories for rent"},{"value":"factories-for-sale","label":"Factories for sale"},{"value":"farm-for-sale","label":"Farm for sale"},{"value":"farms-for-booking","label":"Farms for booking"},{"value":"farms-for-rent","label":"Farms for rent"},{"value":"flat-for-sale","label":"Flat for sale"},{"value":"halls-for-booking","label":"Halls for booking"},{"value":"hospitals-for-rent","label":"Hospitals for rent"},{"value":"hospitals-for-sale","label":"Hospitals for sale"},{"value":"hotels-for-rent","label":"Hotels for rent"},{"value":"hotels-for-sale","label":"Hotels for sale"},{"value":"kiosks-for-rent","label":"Kiosks for rent"},{"value":"kiosks-for-sale","label":"Kiosks for sale"},{"value":"land-for-rent","label":"Land for rent"},{"value":"land-for-sale","label":"Land for sale"},{"value":"lounge-for-rent","label":"Lounge for rent"},{"value":"lounge-for-sale","label":"Lounge for sale"},{"value":"lounges-for-booking","label":"Lounges for booking"},{"value":"office-for-rent","label":"Office for rent"},{"value":"offices-for-sale","label":"Offices for sale"},{"value":"other","label":"Other"},{"value":"parking-for-rent","label":"Parking for rent"},{"value":"parking-for-sale","label":"Parking for sale"},{"value":"power-stations-for-rent","label":"Power stations for rent"},{"value":"power-stations-for-sale","label":"Power stations for sale"},{"value":"room-for-rent","label":"Room for rent"},{"value":"rooms-for-sale","label":"Rooms for sale"},{"value":"schools-for-rent","label":"Schools for rent"},{"value":"schools-for-sale","label":"Schools for sale"},{"value":"small-house-for-rent","label":"Small house for rent"},{"value":"small-house-for-sale","label":"Small house for sale"},{"value":"stations-for-rent","label":"Stations for rent"},{"value":"stations-for-sale","label":"Stations for sale"},{"value":"store-for-rent","label":"Store for rent"},{"value":"store-for-sale","label":"Store for sale"},{"value":"studios-for-booking","label":"Studios for booking"},{"value":"studios-for-rent","label":"Studios for rent"},{"value":"studios-for-sale","label":"Studios for sale"},{"value":"tent-for-rent","label":"Tent for rent"},{"value":"tents-for-booking","label":"Tents for booking"},{"value":"towers-for-rent","label":"Towers for rent"},{"value":"towers-for-sale","label":"Towers for sale"},{"value":"villa-for-rent","label":"Villa for rent"},{"value":"villa-for-sale","label":"Villa for sale"},{"value":"villas-for-booking","label":"Villas for booking"},{"value":"warehouse-for-rent","label":"Warehouse for rent"},{"value":"warehouses-for-sale","label":"Warehouses for sale"},{"value":"workshops-for-rent","label":"Workshops for rent"},{"value":"workshops-for-sale","label":"Workshops for sale"}],"default":"all-real-estates","example":"apartment-for-rent","aliases":["category_id"]}],"returns":"`rows[]` of {city_id, name_en, name_ar, count, has_directions, uri} ordered by stock, `regions[]` of {admin_region_id, name_ar}, and `summary.total_results`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"villa-for-sale"}},{"name":"districts","description":"Every district (neighbourhood) of one city with a live listing count, plus the city's quadrants (North/East/West/South) with their own counts. These ids are what `search`'s `district_id` and `direction_id` take. Riyadh apartments split into 10,720 north / 7,678 east / 3,124 west, and An Narjis alone holds 1,975.","required_params":["city"],"optional_params":["category"],"params":[{"name":"city","type":"string","required":true,"description":"City name in English or Arabic, or the numeric city_id from `cities`.","on_invalid":"reject","example":"riyadh","aliases":["city_id"]},{"name":"category","type":"enum","required":false,"description":"District counts are per category on this source, so pick the one you will search.","on_invalid":"reject","allowed_values":[{"value":"all-real-estates","label":"All real estates"},{"value":"apartment-for-rent","label":"Apartment for rent"},{"value":"apartment-for-sale","label":"Apartment for sale"},{"value":"apartments-for-booking","label":"Apartments for booking"},{"value":"banks-and-atms-for-rent","label":"Banks and atms for rent"},{"value":"banks-and-atms-for-sale","label":"Banks and atms for sale"},{"value":"big-flat-for-rent","label":"Big flat for rent"},{"value":"building-for-rent","label":"Building for rent"},{"value":"building-for-sale","label":"Building for sale"},{"value":"chalet-for-rent","label":"Chalet for rent"},{"value":"chalets-for-booking","label":"Chalets for booking"},{"value":"cinemas-for-rent","label":"Cinemas for rent"},{"value":"cinemas-for-sale","label":"Cinemas for sale"},{"value":"communication-towers-for-rent","label":"Communication towers for rent"},{"value":"communication-towers-for-sale","label":"Communication towers for sale"},{"value":"complexes-for-rent","label":"Complexes for rent"},{"value":"complexes-for-sale","label":"Complexes for sale"},{"value":"factories-for-rent","label":"Factories for rent"},{"value":"factories-for-sale","label":"Factories for sale"},{"value":"farm-for-sale","label":"Farm for sale"},{"value":"farms-for-booking","label":"Farms for booking"},{"value":"farms-for-rent","label":"Farms for rent"},{"value":"flat-for-sale","label":"Flat for sale"},{"value":"halls-for-booking","label":"Halls for booking"},{"value":"hospitals-for-rent","label":"Hospitals for rent"},{"value":"hospitals-for-sale","label":"Hospitals for sale"},{"value":"hotels-for-rent","label":"Hotels for rent"},{"value":"hotels-for-sale","label":"Hotels for sale"},{"value":"kiosks-for-rent","label":"Kiosks for rent"},{"value":"kiosks-for-sale","label":"Kiosks for sale"},{"value":"land-for-rent","label":"Land for rent"},{"value":"land-for-sale","label":"Land for sale"},{"value":"lounge-for-rent","label":"Lounge for rent"},{"value":"lounge-for-sale","label":"Lounge for sale"},{"value":"lounges-for-booking","label":"Lounges for booking"},{"value":"office-for-rent","label":"Office for rent"},{"value":"offices-for-sale","label":"Offices for sale"},{"value":"other","label":"Other"},{"value":"parking-for-rent","label":"Parking for rent"},{"value":"parking-for-sale","label":"Parking for sale"},{"value":"power-stations-for-rent","label":"Power stations for rent"},{"value":"power-stations-for-sale","label":"Power stations for sale"},{"value":"room-for-rent","label":"Room for rent"},{"value":"rooms-for-sale","label":"Rooms for sale"},{"value":"schools-for-rent","label":"Schools for rent"},{"value":"schools-for-sale","label":"Schools for sale"},{"value":"small-house-for-rent","label":"Small house for rent"},{"value":"small-house-for-sale","label":"Small house for sale"},{"value":"stations-for-rent","label":"Stations for rent"},{"value":"stations-for-sale","label":"Stations for sale"},{"value":"store-for-rent","label":"Store for rent"},{"value":"store-for-sale","label":"Store for sale"},{"value":"studios-for-booking","label":"Studios for booking"},{"value":"studios-for-rent","label":"Studios for rent"},{"value":"studios-for-sale","label":"Studios for sale"},{"value":"tent-for-rent","label":"Tent for rent"},{"value":"tents-for-booking","label":"Tents for booking"},{"value":"towers-for-rent","label":"Towers for rent"},{"value":"towers-for-sale","label":"Towers for sale"},{"value":"villa-for-rent","label":"Villa for rent"},{"value":"villa-for-sale","label":"Villa for sale"},{"value":"villas-for-booking","label":"Villas for booking"},{"value":"warehouse-for-rent","label":"Warehouse for rent"},{"value":"warehouses-for-sale","label":"Warehouses for sale"},{"value":"workshops-for-rent","label":"Workshops for rent"},{"value":"workshops-for-sale","label":"Workshops for sale"}],"default":"apartment-for-rent","example":"apartment-for-rent","aliases":["category_id"]}],"returns":"`{districts[], directions[], summary}` — districts carry {district_id, name_ar, name_en, count, direction{direction_id, name_ar, name_en}} and directions carry {direction_id, name_ar, name_en, count}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"riyadh","category":"apartment-for-rent"}},{"name":"price_history","description":"Aqar's own half-yearly price series per district of a city, going back to 2015: for each period, how many deals were recorded and the average price per square metre. This is the market-trend dataset behind the site's district pages — one request returns every district of the city at once (Riyadh apartments: 137 KB covering the whole city). Use it for yield models, district ranking and time-series charts.","required_params":["city"],"optional_params":["category"],"params":[{"name":"city","type":"string","required":true,"description":"City name in English or Arabic, or the numeric city_id.","on_invalid":"reject","example":"riyadh","aliases":["city_id"]},{"name":"category","type":"enum","required":false,"description":"Which market to chart. Series exist for the main residential categories.","on_invalid":"reject","allowed_values":[{"value":"all-real-estates","label":"All real estates"},{"value":"apartment-for-rent","label":"Apartment for rent"},{"value":"apartment-for-sale","label":"Apartment for sale"},{"value":"apartments-for-booking","label":"Apartments for booking"},{"value":"banks-and-atms-for-rent","label":"Banks and atms for rent"},{"value":"banks-and-atms-for-sale","label":"Banks and atms for sale"},{"value":"big-flat-for-rent","label":"Big flat for rent"},{"value":"building-for-rent","label":"Building for rent"},{"value":"building-for-sale","label":"Building for sale"},{"value":"chalet-for-rent","label":"Chalet for rent"},{"value":"chalets-for-booking","label":"Chalets for booking"},{"value":"cinemas-for-rent","label":"Cinemas for rent"},{"value":"cinemas-for-sale","label":"Cinemas for sale"},{"value":"communication-towers-for-rent","label":"Communication towers for rent"},{"value":"communication-towers-for-sale","label":"Communication towers for sale"},{"value":"complexes-for-rent","label":"Complexes for rent"},{"value":"complexes-for-sale","label":"Complexes for sale"},{"value":"factories-for-rent","label":"Factories for rent"},{"value":"factories-for-sale","label":"Factories for sale"},{"value":"farm-for-sale","label":"Farm for sale"},{"value":"farms-for-booking","label":"Farms for booking"},{"value":"farms-for-rent","label":"Farms for rent"},{"value":"flat-for-sale","label":"Flat for sale"},{"value":"halls-for-booking","label":"Halls for booking"},{"value":"hospitals-for-rent","label":"Hospitals for rent"},{"value":"hospitals-for-sale","label":"Hospitals for sale"},{"value":"hotels-for-rent","label":"Hotels for rent"},{"value":"hotels-for-sale","label":"Hotels for sale"},{"value":"kiosks-for-rent","label":"Kiosks for rent"},{"value":"kiosks-for-sale","label":"Kiosks for sale"},{"value":"land-for-rent","label":"Land for rent"},{"value":"land-for-sale","label":"Land for sale"},{"value":"lounge-for-rent","label":"Lounge for rent"},{"value":"lounge-for-sale","label":"Lounge for sale"},{"value":"lounges-for-booking","label":"Lounges for booking"},{"value":"office-for-rent","label":"Office for rent"},{"value":"offices-for-sale","label":"Offices for sale"},{"value":"other","label":"Other"},{"value":"parking-for-rent","label":"Parking for rent"},{"value":"parking-for-sale","label":"Parking for sale"},{"value":"power-stations-for-rent","label":"Power stations for rent"},{"value":"power-stations-for-sale","label":"Power stations for sale"},{"value":"room-for-rent","label":"Room for rent"},{"value":"rooms-for-sale","label":"Rooms for sale"},{"value":"schools-for-rent","label":"Schools for rent"},{"value":"schools-for-sale","label":"Schools for sale"},{"value":"small-house-for-rent","label":"Small house for rent"},{"value":"small-house-for-sale","label":"Small house for sale"},{"value":"stations-for-rent","label":"Stations for rent"},{"value":"stations-for-sale","label":"Stations for sale"},{"value":"store-for-rent","label":"Store for rent"},{"value":"store-for-sale","label":"Store for sale"},{"value":"studios-for-booking","label":"Studios for booking"},{"value":"studios-for-rent","label":"Studios for rent"},{"value":"studios-for-sale","label":"Studios for sale"},{"value":"tent-for-rent","label":"Tent for rent"},{"value":"tents-for-booking","label":"Tents for booking"},{"value":"towers-for-rent","label":"Towers for rent"},{"value":"towers-for-sale","label":"Towers for sale"},{"value":"villa-for-rent","label":"Villa for rent"},{"value":"villa-for-sale","label":"Villa for sale"},{"value":"villas-for-booking","label":"Villas for booking"},{"value":"warehouse-for-rent","label":"Warehouse for rent"},{"value":"warehouses-for-sale","label":"Warehouses for sale"},{"value":"workshops-for-rent","label":"Workshops for rent"},{"value":"workshops-for-sale","label":"Workshops for sale"}],"default":"apartment-for-rent","example":"apartment-for-rent","aliases":["category_id"]}],"returns":"`rows[]` of {district_id, district, series[]{period, year, half, deal_count, avg_meter_price}} plus `summary.total_results` (districts) and `summary.points` (data points), `summary.currency`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"city":"riyadh","category":"apartment-for-rent"}},{"name":"agent","description":"The public profile of one advertising office or private advertiser — company name, commercial registration, REGA/BML brokerage licence, rating, how many listings they have live and archived, followers, completed deals, when they joined and when they were last seen — together with their current stock in the same request. The `user_id` comes back on every search row.","required_params":["user_id"],"optional_params":["max_results","include_pii"],"params":[{"name":"user_id","type":"integer","required":true,"description":"Advertiser id, as `search` returns it in `rows[].seller.user_id`.","on_invalid":"reject","example":815188,"aliases":["id","agent_id","office_id"]},{"name":"max_results","type":"integer","required":false,"description":"How many of their live listings to return alongside the profile. The source serves at most 70 per request.","on_invalid":"reject","default":20,"example":20,"minimum":0,"maximum":70,"aliases":["limit","listings"]},{"name":"include_pii","type":"enum","required":false,"description":"Include the office phone. Off by default; the source returns null to anonymous callers.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Yes"},{"value":"false","label":"No"}],"default":"false","example":"false"}],"returns":"`{agent{user_id, name, company_name, company_cr, about, logo, rating, identity_verified, verified, is_office, live_listings, archived_listings, followers, following, completed_deals, bml_license_number, bml_url, joined_at, last_seen_at, office_location{lat,lng}}, listings[], summary}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"user_id":815188}},{"name":"suggest","description":"Place autocomplete straight from the site's own search box: type a partial Arabic or English place name and get the matching Saudi places back. Useful to turn a user's free text into a place before searching.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Partial place name, Arabic or English (at least two characters).","on_invalid":"reject","example":"الرياض","aliases":["q","prefix","text"]}],"returns":"`rows[]` of {description, place_id} plus `summary.total_results`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"الرياض"}}]},{"name":"arabam","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"arabam.com — Turkish used cars, motorcycles, vans and commercial vehicles","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/arabam/v1","spec_available":true,"actions":[{"name":"search","description":"Search arabam.com's live used-vehicle listings in Turkey by category (cars, SUVs, motorcycles, vans, commercial, rental, damaged, classic, electric…), make/model, keyword, price, year, mileage, fuel, gearbox, body type, colour, seller type, condition, paint/replaced/tramer declaration, heavy-damage record, drivetrain, city and listing age, with nine sort orders. Returns the site's own total and facet counts and up to 50 rows per page.","required_params":[],"optional_params":["category","make_model","query","price_min","price_max","year_min","year_max","km_min","km_max","fuel","gear","body_type","color","seller_type","condition","damage_status","heavy_damage","drive","moto_type","tag","swap","listed_within_days","city_id","town_id","sort","page","page_size"],"params":[{"name":"category","type":"enum","required":false,"description":"Vehicle category on arabam.com (its own URL slug). Default otomobil (cars).","on_invalid":"reject","allowed_values":[{"value":"otomobil","label":"Cars (Otomobil)"},{"value":"arazi-suv-pick-up","label":"Off-road, SUV & pick-up"},{"value":"motosiklet","label":"Motorcycles"},{"value":"minivan-panelvan","label":"Minivans & panel vans"},{"value":"ticari-arac","label":"Commercial vehicles (buses, trucks, tow trucks…)"},{"value":"kiralik-araclar","label":"Rental vehicles"},{"value":"hasarli-araclar","label":"Damaged vehicles"},{"value":"traktor","label":"Tractors"},{"value":"tarim-is-makineleri","label":"Agricultural & construction machinery"},{"value":"klasik-araclar","label":"Classic vehicles"},{"value":"elektrikli-araclar","label":"Electric vehicles (scooters, e-bikes…)"},{"value":"atv-utv","label":"ATV & UTV"},{"value":"karavan","label":"Caravans"},{"value":"engelli-araci","label":"Vehicles for disabled drivers"}],"default":"otomobil","example":"otomobil"},{"name":"make_model","type":"string","required":false,"description":"Make, make-model or make-model-trim slug inside the category, exactly as arabam.com writes it in its URLs: 'ford', 'ford-focus', 'ford-focus-1-6-tdci'. Get them from the makes or suggest action.","on_invalid":"reject","example":"ford-focus","aliases":["slug"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword search in listing titles/descriptions (the site's own 'Anahtar Kelime').","on_invalid":"reject","example":"hatasız","aliases":["q","keyword","search_text"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price, Turkish lira.","on_invalid":"reject","example":500000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price, Turkish lira.","on_invalid":"reject","example":1000000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Oldest model year.","on_invalid":"reject","example":2020,"minimum":1900},{"name":"year_max","type":"integer","required":false,"description":"Newest model year.","on_invalid":"reject","example":2022,"minimum":1900},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading, km.","on_invalid":"reject","example":0,"minimum":0},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading, km.","on_invalid":"reject","example":50000,"minimum":0},{"name":"fuel","type":"array","required":false,"description":"Fuel type. Several may be passed comma-separated (OR).","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Benzin"},{"value":"diesel","label":"Dizel"},{"value":"electric","label":"Elektrik"},{"value":"hybrid","label":"Hibrit"},{"value":"lpg","label":"LPG"}],"example":"diesel"},{"name":"gear","type":"array","required":false,"description":"Gearbox. Several may be passed comma-separated.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Düz"},{"value":"automatic","label":"Otomatik"},{"value":"semi_automatic","label":"Yarı Otomatik"}],"example":"automatic","aliases":["transmission"]},{"name":"body_type","type":"array","required":false,"description":"Body type (cars, SUVs, damaged and rental categories). Comma-separated for several.","on_invalid":"reject","allowed_values":[{"value":"cabrio","label":"Cabrio"},{"value":"coupe","label":"Coupe"},{"value":"hatchback-3","label":"Hatchback/3"},{"value":"hatchback-5","label":"Hatchback/5"},{"value":"mpv","label":"MPV"},{"value":"pick-up","label":"Pick-up"},{"value":"roadster","label":"Roadster"},{"value":"sedan","label":"Sedan"},{"value":"station-wagon","label":"Station wagon"},{"value":"suv","label":"SUV"},{"value":"crossover","label":"Crossover"},{"value":"hard-top","label":"Hard top"},{"value":"panelvan","label":"Panelvan"},{"value":"jip","label":"Jip"}],"example":"sedan"},{"name":"color","type":"array","required":false,"description":"Exterior colour, arabam.com's own colour names as slugs (beyaz = white, siyah = black, gri-metalik = metallic grey…). Comma-separated for several.","on_invalid":"reject","allowed_values":[{"value":"altin","label":"Altın"},{"value":"bej","label":"Bej"},{"value":"beyaz","label":"Beyaz"},{"value":"bordo","label":"Bordo"},{"value":"fume","label":"Füme"},{"value":"gri","label":"Gri"},{"value":"gri-gumus","label":"Gri (Gümüş)"},{"value":"gri-metalik","label":"Gri (metalik)"},{"value":"gri-titanyum","label":"Gri (titanyum)"},{"value":"kahverengi","label":"Kahverengi"},{"value":"kirmizi","label":"Kırmızı"},{"value":"lacivert","label":"Lacivert"},{"value":"mavi","label":"Mavi"},{"value":"mavi-metalik","label":"Mavi (metalik)"},{"value":"mor","label":"Mor"},{"value":"pembe","label":"Pembe"},{"value":"sampanya","label":"Şampanya"},{"value":"sari","label":"Sarı"},{"value":"siyah","label":"Siyah"},{"value":"turkuaz","label":"Turkuaz"},{"value":"turuncu","label":"Turuncu"},{"value":"yesil","label":"Yeşil"},{"value":"yesil-metalik","label":"Yeşil (metalik)"},{"value":"diger","label":"Diğer"}],"example":"beyaz"},{"name":"seller_type","type":"array","required":false,"description":"Who sells: dealer (Galeriden), owner (Sahibinden), authorized_dealer, rent_a_car.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Galeriden"},{"value":"owner","label":"Sahibinden"},{"value":"authorized_dealer","label":"Yetkili Bayiden"},{"value":"rent_a_car","label":"Rent a Car"}],"example":"owner"},{"name":"condition","type":"array","required":false,"description":"Vehicle condition: used, new, imported_new, dealer_new.","on_invalid":"reject","allowed_values":[{"value":"used","label":"İkinci El"},{"value":"new","label":"Sıfır"},{"value":"imported_new","label":"Yurtdışından İthal Sıfır"},{"value":"dealer_new","label":"Yetkili Bayiden Sıfır"}],"example":"used"},{"name":"damage_status","type":"array","required":false,"description":"Paint / replaced-part / insurance-record (tramer) declaration, as the site filters it.","on_invalid":"reject","allowed_values":[{"value":"not_stated","label":"Belirtilmemiş"},{"value":"no_paint_no_replaced_no_tramer","label":"Boyasız, Değişensiz ve Tramersiz"},{"value":"no_paint_no_replaced","label":"Boyasız ve Değişensiz"},{"value":"no_paint","label":"Boyasız"},{"value":"no_replaced","label":"Değişensiz"},{"value":"no_tramer","label":"Tramersiz"}],"example":"no_paint_no_replaced"},{"name":"heavy_damage","type":"boolean","required":false,"description":"true = only vehicles with a heavy-damage record; false = only without one.","on_invalid":"reject","example":false},{"name":"drive","type":"array","required":false,"description":"Drivetrain.","on_invalid":"reject","allowed_values":[{"value":"front","label":"Önden Çekiş"},{"value":"rear","label":"Arkadan İtiş"},{"value":"4wd_permanent","label":"4WD (Sürekli)"},{"value":"awd_electronic","label":"AWD (Elektronik)"},{"value":"4x2_rear","label":"4x2 (Arkadan İtişli)"},{"value":"4x2_front","label":"4x2 (Önden Çekişli)"},{"value":"4x4","label":"4x4"}],"example":"rear"},{"name":"moto_type","type":"array","required":false,"description":"Motorcycle type (category motosiklet / elektrikli-araclar).","on_invalid":"reject","allowed_values":[{"value":"chopper-cruiser","label":"Chopper / Cruiser"},{"value":"commuter","label":"Commuter"},{"value":"cross-motocross","label":"Cross / Motocross"},{"value":"cub","label":"Cub"},{"value":"dort-tekerlekli","label":"Dört Tekerlekli"},{"value":"e-pikap","label":"E-Pikap"},{"value":"enduro-off-road","label":"Enduro / Off-Road"},{"value":"kar-motosikleti","label":"Kar Motosikleti"},{"value":"moped","label":"Moped"},{"value":"naked-roadstar","label":"Naked/ Roadstar"},{"value":"scooter-maxi-scooter","label":"Scooter / Maxi Scooter"},{"value":"sport-touring","label":"Sport Touring"},{"value":"super-sport","label":"Super Sport"},{"value":"touring","label":"Touring"},{"value":"trial","label":"Trial"},{"value":"triportor","label":"Triportör"},{"value":"uc-tekerlekli","label":"Üç Tekerlekli"}],"example":"scooter-maxi-scooter"},{"name":"tag","type":"enum","required":false,"description":"Special-listing tag: urgent, homepage_showcase, price_dropped, like_new.","on_invalid":"reject","allowed_values":[{"value":"urgent","label":"Acil"},{"value":"homepage_showcase","label":"Anasayfa Vitrin"},{"value":"price_dropped","label":"Fiyatı Düşen"},{"value":"like_new","label":"Yeni Gibi"}],"example":"price_dropped"},{"name":"swap","type":"boolean","required":false,"description":"true = seller accepts a trade-in (takas).","on_invalid":"reject","example":true},{"name":"listed_within_days","type":"integer","required":false,"description":"Only listings published in the last 1, 2, 3, 7 or 30 days.","on_invalid":"reject","allowed_values":[{"value":1,"label":"1"},{"value":2,"label":"2"},{"value":3,"label":"3"},{"value":7,"label":"7"},{"value":30,"label":"30"}],"example":7},{"name":"city_id","type":"integer","required":false,"description":"arabam.com city id (Ankara = 6, İzmir = 35, İstanbul Avrupa = 86, İstanbul Anadolu = 85). Every search answer lists the city ids with live counts in summary.facets.city.","on_invalid":"reject","example":6,"minimum":1},{"name":"town_id","type":"integer","required":false,"description":"arabam.com district (ilçe) id.","on_invalid":"reject","example":684,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Sort order: default (the site's own ranking), price_asc/desc, year_desc/asc, km_asc/desc, newest, oldest.","on_invalid":"reject","allowed_values":[{"value":"default","label":"default"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"year_desc","label":"year_desc"},{"value":"year_asc","label":"year_asc"},{"value":"km_asc","label":"km_asc"},{"value":"km_desc","label":"km_desc"},{"value":"newest","label":"newest"},{"value":"oldest","label":"oldest"}],"default":"default","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page. arabam.com serves at most 50 pages per query (2,500 rows at page_size 50): narrow the filters to reach further.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-50 (the site's own maximum is 50).","on_invalid":"reject","default":20,"example":50,"minimum":1,"maximum":50}],"returns":"`{rows[], summary{total_results, reachable_results, page, page_size, last_page, has_more, page_clamped, filters_applied, filters_echoed_by_source, rows_with_price_mismatch, facets{city, fuel, gear, body_type, color, seller_type, damage_status, heavy_damage, drive, condition, moto_type, listed_within_days}}}`. Each row: listing_id, url, title, model_name, make, series, category, category_path, year, km, km_display, color, fuel, gear, engine_cc_range, engine_hp_range, drive, condition, warranty, price, price_display, currency, price_before_drop, price_ld_json, price_mismatch, city, town, listed_at, updated_at, seller_kind, seller_member_id, dealer_slug, dealer_url, is_price_dropped, is_urgent, is_like_new, is_first_owner, is_fair_price, photo, properties[]{name, value} (category-specific rows the search page prints, e.g. trailer length).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"otomobil","make_model":"ford-focus","fuel":"diesel","page_size":20}},{"name":"detail","description":"The full listing by its arabam.com listing number (or URL): price and pre-drop price, every property row the page prints (category-specific: motorcycle cylinders, truck payload, rental monthly/weekly rent…), the per-part paint / locally-painted / replaced report with the seller's summary line, tramer statement, heavy-damage record, equipment list, technical summary, description, all photos, address and the seller: dealer firm, authorised person, licence number, membership tier and year, masked phone as the page shows it.","required_params":["listing_id"],"optional_params":["url"],"params":[{"name":"listing_id","type":"string","required":true,"description":"arabam.com listing number (İlan No) — the `listing_id` of a search row.","on_invalid":"reject","example":"44084960","aliases":["id","advert_id","ilan_no"]},{"name":"url","type":"string","required":false,"description":"Alternative to listing_id: the listing URL, e.g. https://www.arabam.com/ilan/<slug>/<slug>/44084960.","on_invalid":"reject","example":"https://www.arabam.com/ilan/44084960","aliases":["listing_url","link"]}],"returns":"One listing: listing_id, url, title, description, status, is_active, is_sold, make, series, model, model_name, category, category_path, category_id, year, km, fuel, gear, body_type, color, engine_cc_range, engine_hp_range, drive, condition, swap, seller_kind, heavy_damage_record, damage_summary, tramer{status, amount, amount_display, text, printed, amount_mismatch}, price, price_display, currency, price_before_drop, price_ld_json, price_mismatch, rent_monthly, rent_weekly, flags, listed_at, location{city, city_id, county, county_id, district, full_address}, properties[]{name, value}, technical_summary[], equipment[]{name, group_id}, expertise{declared, parts[]{part, code, status, status_label}, counts, summary_line, damage_summary_mismatch}, photos[], seller{name, member_id, kind, is_business, membership, membership_year, dealer{name, authorized_person, slug, url, logo, license_no}, phone_masked}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"25902780"}},{"name":"makes","description":"The children of a category node with live listing counts and the slugs `search` takes: the makes of a category, the models of a make (make_model=ford), or the engines/trims of a model (make_model=ford-focus).","required_params":[],"optional_params":["category","make_model"],"params":[{"name":"category","type":"enum","required":false,"description":"Vehicle category on arabam.com (its own URL slug). Default otomobil (cars).","on_invalid":"reject","allowed_values":[{"value":"otomobil","label":"Cars (Otomobil)"},{"value":"arazi-suv-pick-up","label":"Off-road, SUV & pick-up"},{"value":"motosiklet","label":"Motorcycles"},{"value":"minivan-panelvan","label":"Minivans & panel vans"},{"value":"ticari-arac","label":"Commercial vehicles (buses, trucks, tow trucks…)"},{"value":"kiralik-araclar","label":"Rental vehicles"},{"value":"hasarli-araclar","label":"Damaged vehicles"},{"value":"traktor","label":"Tractors"},{"value":"tarim-is-makineleri","label":"Agricultural & construction machinery"},{"value":"klasik-araclar","label":"Classic vehicles"},{"value":"elektrikli-araclar","label":"Electric vehicles (scooters, e-bikes…)"},{"value":"atv-utv","label":"ATV & UTV"},{"value":"karavan","label":"Caravans"},{"value":"engelli-araci","label":"Vehicles for disabled drivers"}],"default":"otomobil","example":"otomobil"},{"name":"make_model","type":"string","required":false,"description":"Make, make-model or make-model-trim slug inside the category, exactly as arabam.com writes it in its URLs: 'ford', 'ford-focus', 'ford-focus-1-6-tdci'. Get them from the makes or suggest action.","on_invalid":"reject","example":"ford-focus","aliases":["slug"]}],"returns":"`{rows[]{name, make_model, category_id, count, is_make, url}, summary{category, node, total}}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"otomobil"}},{"name":"suggest","description":"arabam.com's own autocomplete: turns free text ('passat', 'mt-07') into make/model categories with live counts and slugs for `search`, and matches dealer firms by name.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Text to complete: a make, model or dealer name (2+ characters).","on_invalid":"reject","example":"passat","aliases":["q","text"]}],"returns":"`{rows[]}`: vehicle rows {type: vehicle, text, path, category, make_model, category_id, count, url} and dealer rows {type: dealer, text, city, member_id, dealer_slug, url}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"passat"}}]},{"name":"argos","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Argos API scraper — argos.co.uk (UK): search and browse the catalogue, read the full product with price, was-price, multi-buy offers and Nectar points kept apart, specs, images, variants and breadcrumb; customer reviews, Q&A and special offers. Browserless.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/argos/v1","spec_available":true,"actions":[{"name":"search","description":"Search argos.co.uk by keyword. Each product carries the price, the was-price and saving of a price drop, the offer text, clearance flag, the search index's rating and review count, delivery and click & collect flags, delivery cost, seller type and variant options. Sort by price or rating; filter by brand, category, offers, new in or minimum rating. A misspelling with no matches is re-run against Argos's own spelling correction (reported in matched_query).","required_params":["query"],"optional_params":["page","page_size","sort","brands","category_id","offers_only","new_only","min_rating"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, as typed on argos.co.uk. When a misspelling returns nothing, Argos's own spelling correction is applied and reported in matched_query.","on_invalid":"reject","example":"kettle","aliases":["q","keyword","searchTerm"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-60).","on_invalid":"reject","default":24,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (the site's default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"rating","label":"Customer rating"}],"default":"relevance"},{"name":"brands","type":"array","required":false,"description":"Only these brands (names as shown in filters_available.brands).","on_invalid":"reject","example":["russell hobbs"],"aliases":["brand"]},{"name":"category_id","type":"string","required":false,"description":"Restrict to one Argos category id (from a breadcrumb or filters_available.category).","on_invalid":"reject","example":"29560","aliases":["category"]},{"name":"offers_only","type":"boolean","required":false,"description":"Only products on a special offer (price drop or multi-buy).","on_invalid":"reject","default":false},{"name":"new_only","type":"boolean","required":false,"description":"Only 'New in' products.","on_invalid":"reject","default":false},{"name":"min_rating","type":"enum","required":false,"description":"Minimum customer rating.","on_invalid":"reject","allowed_values":[{"value":"4","label":"4 stars or more"},{"value":"3","label":"3 stars or more"},{"value":"2","label":"2 stars or more"},{"value":"1","label":"1 star or more"}]}],"returns":"results[]{product_id, title, brand, url, image, price, currency, price_is_from, was_price, savings, discount_percent, offer_text, clearance, search_index_rating, rating_scale, search_index_review_count, has_variations, variant_options, deliverable, click_and_collect, free_delivery, delivery_cost, seller_type, fulfilment_agent, badges[]}, count, total_results, page, page_size, has_more, sort_applied, filters_applied[], filters_available[]{facet, label, values[]{id, label, count}}, sponsored_dropped, query, matched_query, category_applied{category_id, name}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"kettle"}},{"name":"product/detail","description":"One Argos product in full: price, was-price and saving, the offer text, every multi-buy offer it is part of (never subtracted from the price), Nectar points, rating and review count, availability, delivery and click & collect flags, delivery cost, EAN when published, images, videos, description, feature list and specifications, breadcrumb, size/colour variants with their own prices, badges and warranties.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"Argos catalogue number (7 digits, e.g. 3102039), a Tu clothing id (tuc…), a marketplace id, or an argos.co.uk/product/ URL.","on_invalid":"reject","example":"3102039","aliases":["id","catalogue_number","catalog_number","url"]}],"returns":"product{product_id, title, brand, url, ean, price, currency, was_price, savings, discount_percent, offer_text, multibuy_offers[]{offer_id, title, description, offer_type, mechanic, starts_at, ends_at, min_quantity, eligible_product_count}, nectar_points, nectar_multiplier, rating, rating_scale, review_count, availability, deliverable, click_and_collect, free_delivery, delivery_cost, delivery_cost_varies, end_of_line, made_to_order, max_quantity, age_restricted, seller_type, fulfilment_agent, images[], videos[], documents[], description, features[], specifications{}, breadcrumb[]{category_id, name, url}, category_id, variants[]{product_id, attributes{}, price, url}, badges[], warranties[], energy, dimensions, safety_text, exclusion_text}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"3102039"}},{"name":"product/reviews","description":"Customer reviews of one Argos product, paged, sortable and filterable by star rating, with the average, the 1-5 distribution, the recommend percentage and per-aspect averages.","required_params":["product_id"],"optional_params":["page","page_size","sort","rating"],"params":[{"name":"product_id","type":"string","required":true,"description":"Argos catalogue number (7 digits, e.g. 3102039), a Tu clothing id (tuc…), a marketplace id, or an argos.co.uk/product/ URL.","on_invalid":"reject","example":"3102039","aliases":["id","catalogue_number","catalog_number","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"oldest","label":"oldest"},{"value":"highest_rating","label":"highest rating"},{"value":"lowest_rating","label":"lowest rating"},{"value":"most_helpful","label":"most helpful"}],"default":"newest"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with exactly this star rating.","on_invalid":"reject","minimum":1,"maximum":5,"aliases":["stars"]}],"returns":"product_id, reviews[]{review_id, rating, rating_scale, title, text, author, author_location, submitted_at, recommended, syndicated, badges[], secondary_ratings{}, reviewer_context{}, helpful_votes, unhelpful_votes, photos[], responses[]}, count, total_results, rating, rating_scale, total_reviews, rating_distribution{1..5}, recommended_percent, secondary_rating_averages{}, rating_filter, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"3102039"}},{"name":"product/questions","description":"Customer questions about one Argos product with their answers (staff, brand and best-answer flags).","required_params":["product_id"],"optional_params":["page","page_size","sort"],"params":[{"name":"product_id","type":"string","required":true,"description":"Argos catalogue number (7 digits, e.g. 3102039), a Tu clothing id (tuc…), a marketplace id, or an argos.co.uk/product/ URL.","on_invalid":"reject","example":"3102039","aliases":["id","catalogue_number","catalog_number","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Questions per page (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Question order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"oldest","label":"oldest"}],"default":"newest"}],"returns":"product_id, questions[]{question_id, question, details, author, submitted_at, answer_count, answers[]{answer_id, text, author, submitted_at, best_answer, brand_answer, staff_answer, helpful_votes, unhelpful_votes}}, count, total_results, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"3102039"}},{"name":"category","description":"Every product in one Argos category, paged, with the same rows, sorting and filters as search.","required_params":["category_id"],"optional_params":["page","page_size","sort","brands","offers_only","new_only","min_rating"],"params":[{"name":"category_id","type":"string","required":true,"description":"Argos category id (the number after c: in a /browse/ URL, or from a breadcrumb).","on_invalid":"reject","example":"29560","aliases":["category","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-60).","on_invalid":"reject","default":24,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (the site's default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"rating","label":"Customer rating"}],"default":"relevance"},{"name":"brands","type":"array","required":false,"description":"Only these brands (names as shown in filters_available.brands).","on_invalid":"reject","example":["russell hobbs"],"aliases":["brand"]},{"name":"offers_only","type":"boolean","required":false,"description":"Only products on a special offer (price drop or multi-buy).","on_invalid":"reject","default":false},{"name":"new_only","type":"boolean","required":false,"description":"Only 'New in' products.","on_invalid":"reject","default":false},{"name":"min_rating","type":"enum","required":false,"description":"Minimum customer rating.","on_invalid":"reject","allowed_values":[{"value":"4","label":"4 stars or more"},{"value":"3","label":"3 stars or more"},{"value":"2","label":"2 stars or more"},{"value":"1","label":"1 star or more"}]}],"returns":"results[]{product_id, title, brand, url, image, price, currency, price_is_from, was_price, savings, discount_percent, offer_text, clearance, search_index_rating, rating_scale, search_index_review_count, has_variations, variant_options, deliverable, click_and_collect, free_delivery, delivery_cost, seller_type, fulfilment_agent, badges[]}, count, total_results, page, page_size, has_more, sort_applied, filters_applied[], filters_available[]{facet, label, values[]{id, label, count}}, sponsored_dropped, category_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"29560"}},{"name":"deals","description":"Products currently on a special offer at Argos (price drops and multi-buys), optionally narrowed by keyword, category or brand, with the same rows and sorting as search.","required_params":[],"optional_params":["query","category_id","brands","page","page_size","sort"],"params":[{"name":"query","type":"string","required":false,"description":"Optional keyword to narrow the offers.","on_invalid":"reject","example":"toys","aliases":["q","keyword"]},{"name":"category_id","type":"string","required":false,"description":"Restrict to one Argos category id (from a breadcrumb or filters_available.category).","on_invalid":"reject","example":"29560","aliases":["category"]},{"name":"brands","type":"array","required":false,"description":"Only these brands (names as shown in filters_available.brands).","on_invalid":"reject","example":["russell hobbs"],"aliases":["brand"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-60).","on_invalid":"reject","default":24,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (the site's default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"rating","label":"Customer rating"}],"default":"relevance"}],"returns":"results[]{product_id, title, brand, url, image, price, currency, price_is_from, was_price, savings, discount_percent, offer_text, clearance, search_index_rating, rating_scale, search_index_review_count, has_variations, variant_options, deliverable, click_and_collect, free_delivery, delivery_cost, seller_type, fulfilment_agent, badges[]}, count, total_results, page, page_size, has_more, sort_applied, filters_applied[], filters_available[]{facet, label, values[]{id, label, count}}, sponsored_dropped, query, category_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"toys"}}]},{"name":"arukereso","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Árukereső / Compari / Pazaruvaj API — price comparison for Hungary, Romania and Bulgaria: search, categories, every shop's offer with shipping, specs and price history","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/arukereso/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search across the whole catalogue of one country's site. Each row is a product with its lowest price ('from'), the number of shop offers, rating, review count, brand and category. Optional price range and sort.","required_params":["query"],"optional_params":["country","min_price","max_price","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, in any language the site understands (product names and brands work everywhere).","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword","st"]},{"name":"country","type":"enum","required":false,"description":"Which site: hu = arukereso.hu, ro = compari.ro, bg = pazaruvaj.com. The three share one product id space, so the same product_id works in every country where the product is listed.","on_invalid":"reject","allowed_values":[{"value":"hu","label":"Hungary — arukereso.hu, prices in HUF"},{"value":"ro","label":"Romania — compari.ro, prices in RON"},{"value":"bg","label":"Bulgaria — pazaruvaj.com, prices in EUR (lev figure kept as *_bgn)"}],"default":"hu","example":"hu","aliases":["market","site"]},{"name":"min_price","type":"number","required":false,"description":"Lowest 'from' price, in the site's currency (HUF / RON / EUR).","on_invalid":"reject","example":100000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest 'from' price, in the site's currency.","on_invalid":"reject","example":200000,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (site default)"},{"value":"popular","label":"Most popular"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating","label":"Best rated"},{"value":"name","label":"Name A-Z"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page. Search: 20 per page, at most 100 pages (the site's own pager limit). Category: 25 per page, last page in `last_page`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"{query, country, page, last_page, has_more, results[{product_id, row_type (product | shop_offer), title, url, brand, price_from, price_max, currency, offer_count, shop_name, outbound_url, rating_percent, review_count, category_id, category_path, image}], category_facets}. Both row types' product_id opens with product / offers / price_history.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 15","country":"hu"}},{"name":"category","description":"One category's product listing (e.g. 3277 = mobile phones), with the category's own product total, sort and paging. Category ids are shared by the three sites.","required_params":["category"],"optional_params":["country","sort","page"],"params":[{"name":"category","type":"string","required":true,"description":"Category id (the number after '-c' in a category URL, e.g. mobiltelefon-c3277 → 3277), the slug 'mobiltelefon-c3277', or the `category_id` of a search row.","on_invalid":"reject","example":"3277","aliases":["category_id","cid"]},{"name":"country","type":"enum","required":false,"description":"Which site: hu = arukereso.hu, ro = compari.ro, bg = pazaruvaj.com. The three share one product id space, so the same product_id works in every country where the product is listed.","on_invalid":"reject","allowed_values":[{"value":"hu","label":"Hungary — arukereso.hu, prices in HUF"},{"value":"ro","label":"Romania — compari.ro, prices in RON"},{"value":"bg","label":"Bulgaria — pazaruvaj.com, prices in EUR (lev figure kept as *_bgn)"}],"default":"hu","example":"hu","aliases":["market","site"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Most popular (site default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating","label":"Best rated"},{"value":"name","label":"Name A-Z"}],"default":"popular","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page. Search: 20 per page, at most 100 pages (the site's own pager limit). Category: 25 per page, last page in `last_page`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"{category_id, category_url, title, total, country, page, last_page, has_more, results[...same row shape as search]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"3277","country":"hu"}},{"name":"product","description":"One product page: title, brand, category path, lowest and highest current price, offer counts (paid / sponsored / free listings), rating (0-5 and 0-100) with review count, the full specification sheet, and the same product's best price on the two sister sites (converted by the site).","required_params":[],"optional_params":["product_id","url","country"],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id: the `product_id` of a search / category row, also the number after '-p' in a product URL (…/iphone-15-128gb-p996936880/). 'p996936880' is accepted too. Provide product_id OR url.","on_invalid":"reject","example":"996936880","aliases":["id","pid"]},{"name":"url","type":"string","required":false,"description":"A product URL from arukereso.hu, compari.ro or pazaruvaj.com; alternative to product_id (its host sets the country).","on_invalid":"reject","example":"https://www.arukereso.hu/mobiltelefon-c3277/apple/iphone-15-128gb-p996936880/","aliases":["product_url"]},{"name":"country","type":"enum","required":false,"description":"Which site: hu = arukereso.hu, ro = compari.ro, bg = pazaruvaj.com. The three share one product id space, so the same product_id works in every country where the product is listed.","on_invalid":"reject","allowed_values":[{"value":"hu","label":"Hungary — arukereso.hu, prices in HUF"},{"value":"ro","label":"Romania — compari.ro, prices in RON"},{"value":"bg","label":"Bulgaria — pazaruvaj.com, prices in EUR (lev figure kept as *_bgn)"}],"default":"hu","example":"hu","aliases":["market","site"]}],"returns":"{product_id, title, brand, url, category_id, category_path, lowest_price, highest_price, currency, offer_counts, rating, rating_percent, review_count, specs[{group, specs[{name, value}]}], other_countries[{country, url, price_converted}], image}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"996936880","country":"hu"}},{"name":"offers","description":"Every shop offer for one product, in the site's own order: shop, price, shipping fee and total (when the fee is stated), free-shipping flag, stock, delivery time, shop star rating and review count, trusted-shop badge, whether the row is a sponsored placement, and the click-through link.","required_params":[],"optional_params":["product_id","url","country"],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id: the `product_id` of a search / category row, also the number after '-p' in a product URL (…/iphone-15-128gb-p996936880/). 'p996936880' is accepted too. Provide product_id OR url.","on_invalid":"reject","example":"996936880","aliases":["id","pid"]},{"name":"url","type":"string","required":false,"description":"A product URL from arukereso.hu, compari.ro or pazaruvaj.com; alternative to product_id (its host sets the country).","on_invalid":"reject","example":"https://www.arukereso.hu/mobiltelefon-c3277/apple/iphone-15-128gb-p996936880/","aliases":["product_url"]},{"name":"country","type":"enum","required":false,"description":"Which site: hu = arukereso.hu, ro = compari.ro, bg = pazaruvaj.com. The three share one product id space, so the same product_id works in every country where the product is listed.","on_invalid":"reject","allowed_values":[{"value":"hu","label":"Hungary — arukereso.hu, prices in HUF"},{"value":"ro","label":"Romania — compari.ro, prices in RON"},{"value":"bg","label":"Bulgaria — pazaruvaj.com, prices in EUR (lev figure kept as *_bgn)"}],"default":"hu","example":"hu","aliases":["market","site"]}],"returns":"{product_id, title, country, currency, lowest_price, offer_count, offers[{position, offer_id, shop_id, shop_name, price, shipping_cost, total_price, free_shipping, shipping_text, in_stock, delivery_time, shop_rating_stars, shop_review_count, shop_trusted, listing_type, offer_title, click_url}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"996936880","country":"hu"}},{"name":"price_history","description":"The product's price chart as the site draws it: the lowest and the average shop price over time (points roughly monthly, then denser).","required_params":[],"optional_params":["product_id","url","country"],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id: the `product_id` of a search / category row, also the number after '-p' in a product URL (…/iphone-15-128gb-p996936880/). 'p996936880' is accepted too. Provide product_id OR url.","on_invalid":"reject","example":"996936880","aliases":["id","pid"]},{"name":"url","type":"string","required":false,"description":"A product URL from arukereso.hu, compari.ro or pazaruvaj.com; alternative to product_id (its host sets the country).","on_invalid":"reject","example":"https://www.arukereso.hu/mobiltelefon-c3277/apple/iphone-15-128gb-p996936880/","aliases":["product_url"]},{"name":"country","type":"enum","required":false,"description":"Which site: hu = arukereso.hu, ro = compari.ro, bg = pazaruvaj.com. The three share one product id space, so the same product_id works in every country where the product is listed.","on_invalid":"reject","allowed_values":[{"value":"hu","label":"Hungary — arukereso.hu, prices in HUF"},{"value":"ro","label":"Romania — compari.ro, prices in RON"},{"value":"bg","label":"Bulgaria — pazaruvaj.com, prices in EUR (lev figure kept as *_bgn)"}],"default":"hu","example":"hu","aliases":["market","site"]}],"returns":"{product_id, country, currency, series{<label>: [{date, price}]}, points_lowest, first_date, last_date}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"996936880","country":"hu"}}]},{"name":"asda","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ASDA API — UK grocery search and CIN product detail","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/asda/v1","spec_available":true,"actions":[{"name":"search","description":"Search the published grocery catalog by keyword and zero-based page.","required_params":["query"],"optional_params":["page","count","zone","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"Product search text.","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"Zero-based source page. Supported bounded range 0–50; accessible_pages is source-reported.","on_invalid":"reject","default":0,"minimum":0,"maximum":50},{"name":"count","type":"integer","required":false,"description":"Requested records, subject to source results.","on_invalid":"reject","default":20,"minimum":1,"maximum":50},{"name":"zone","type":"string","required":false,"description":"Published price zone; EN England, SC Scotland, WA Wales, NI Northern Ireland.","on_invalid":"reject","allowed_values":[{"value":"EN","label":"EN"},{"value":"SC","label":"SC"},{"value":"WA","label":"WA"},{"value":"NI","label":"NI"}],"default":"EN"},{"name":"store_id","type":"string","required":false,"description":"ASDA store identifier used for the published stock flag. Defaults to source store 4565; no delivery-slot guarantee.","on_invalid":"reject","default":"4565"}],"returns":"products, total, source page, accessible_pages, has_more. Product identity, GBP prices, unit price text, promotions and store stock status; no GTIN.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","count":20}},{"name":"product/detail","description":"Resolve the search CIN to the published product object: identity, regional price, unit/pack, media, store availability and published catalog attributes.","required_params":["id"],"optional_params":["zone","store_id"],"params":[{"name":"id","type":"string","required":true,"description":"CIN returned by search, not GTIN or image id.","on_invalid":"reject","example":"538241"},{"name":"zone","type":"string","required":false,"description":"Published price zone; EN England, SC Scotland, WA Wales, NI Northern Ireland.","on_invalid":"reject","allowed_values":[{"value":"EN","label":"EN"},{"value":"SC","label":"SC"},{"value":"WA","label":"WA"},{"value":"NI","label":"NI"}],"default":"EN"},{"name":"store_id","type":"string","required":false,"description":"ASDA store identifier used for the published stock flag. Defaults to source store 4565; no delivery-slot guarantee.","on_invalid":"reject","default":"4565"}],"returns":"Product object including source identity, GBP price/unit/pack, published image, store availability, taxonomy and ratings when published. detail_scope=published_catalog_object; no retail-label or GTIN promise.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"538241"}},{"name":"catalog/product","description":"Compatibility route for the same meaningful published CIN product detail.","required_params":["id"],"optional_params":["zone","store_id"],"params":[{"name":"id","type":"string","required":true,"description":"CIN returned by search; not an EAN or image identifier.","on_invalid":"reject","example":"538241"},{"name":"zone","type":"string","required":false,"description":"Published price zone; EN England, SC Scotland, WA Wales, NI Northern Ireland.","on_invalid":"reject","allowed_values":[{"value":"EN","label":"EN"},{"value":"SC","label":"SC"},{"value":"WA","label":"WA"},{"value":"NI","label":"NI"}],"default":"EN"},{"name":"store_id","type":"string","required":false,"description":"ASDA store identifier used for the published stock flag. Defaults to source store 4565; no delivery-slot guarantee.","on_invalid":"reject","default":"4565"}],"returns":"One catalog record with the same fields as search; ingredients, nutrition and GTIN not supplied.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"538241"}}]},{"name":"asos","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ASOS API scraper — product search, filters, sale & new-in browse, multi-region product detail (sizes/stock/prices), reviews & similar items across UK, US, DE, FR and global markets (asos.com)","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/asos/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword product search across the ASOS catalogue with filters (price, brand, colour, size, product type, sale, new-in, discount), sorting and offset/limit pagination.","required_params":["query"],"optional_params":["store","lang","currency","country","offset","limit","sort","min_price","max_price","brand","colour","color","size","product_type","on_sale","new_in_within","discount","channel","key_store_dataversion"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword (e.g. 'summer dress', 'nike trainers').","on_invalid":"reject","example":"summer dress"},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"},{"name":"lang","type":"string","required":false,"description":"Override the store's locale (advanced), e.g. en-GB, de-DE.","on_invalid":"reject"},{"name":"currency","type":"string","required":false,"description":"Override the store's currency (advanced), e.g. USD, EUR.","on_invalid":"reject"},{"name":"country","type":"string","required":false,"description":"Override ship-to country code (advanced), e.g. GB, US.","on_invalid":"reject"},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-200, default 48); clamped to 200.","on_invalid":"ignore","default":48,"example":48,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Sort order. Omit for relevance (default). Only these keys are valid.","on_invalid":"ignore","allowed_values":[{"value":"freshness","label":"Newest first"},{"value":"pricedesc","label":"Price: high to low"},{"value":"priceasc","label":"Price: low to high"}],"example":"freshness"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter (in the store's currency).","on_invalid":"ignore"},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter (in the store's currency).","on_invalid":"ignore"},{"name":"brand","type":"string","required":false,"description":"Filter by brand — name (e.g. 'Nike', 'ASOS DESIGN') or facet id. Names are auto-resolved to ids; call the 'filters' action to list options.","on_invalid":"reject","example":"Nike"},{"name":"colour","type":"string","required":false,"description":"Filter by colour — name (e.g. 'Black', 'Blue', 'Multi') or facet id.","on_invalid":"reject","example":"black","aliases":["color"]},{"name":"size","type":"string","required":false,"description":"Filter by size — label (e.g. 'M', 'UK 10', 'XS') or facet id.","on_invalid":"reject","example":"M"},{"name":"product_type","type":"string","required":false,"description":"Filter by product type facet id (e.g. 8416=Dresses); see 'filters'.","on_invalid":"reject"},{"name":"on_sale","type":"enum","required":false,"description":"Limit to marked-down items only.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"On sale / marked down"},{"value":"new_season","label":"New season (full price)"}]},{"name":"new_in_within","type":"enum","required":false,"description":"Limit to items added within this window (the site's 'New in' filter).","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Added today"},{"value":"yesterday","label":"Added yesterday"},{"value":"7d","label":"Last 7 days"},{"value":"14d","label":"Last 14 days"},{"value":"28d","label":"Last 28 days"}]},{"name":"discount","type":"enum","required":false,"description":"Minimum discount tier for marked-down items.","on_invalid":"ignore","allowed_values":[{"value":"20","label":"Up to 20%"},{"value":"30","label":"20-30%"},{"value":"40","label":"30-40%"},{"value":"50","label":"40-50%"},{"value":"60","label":"50-60%"},{"value":"60+","label":"60% or more"}]},{"name":"channel","type":"string","required":false,"description":"Client channel (advanced).","on_invalid":"reject","example":"desktop-web"},{"name":"key_store_dataversion","type":"string","required":false,"description":"Internal catalogue version token (advanced).","on_invalid":"reject"}],"returns":"products[] (id, name, price, brand, colour, images, in_stock, colour variants), facets[] (brands/colours/sizes/price/discount/product-type), total, offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dress"}},{"name":"category","description":"Browse all products in a category by category_id, with the same filters, sorting and pagination as search. Get category ids from the 'navigation' action.","required_params":["category_id"],"optional_params":["store","lang","currency","country","offset","limit","sort","min_price","max_price","brand","colour","color","size","product_type","on_sale","new_in_within","discount","channel"],"params":[{"name":"category_id","type":"integer","required":true,"description":"ASOS category id (the cid in a category URL; see navigation).","on_invalid":"reject","example":8799},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"},{"name":"lang","type":"string","required":false,"description":"Override the store's locale (advanced), e.g. en-GB, de-DE.","on_invalid":"reject"},{"name":"currency","type":"string","required":false,"description":"Override the store's currency (advanced), e.g. USD, EUR.","on_invalid":"reject"},{"name":"country","type":"string","required":false,"description":"Override ship-to country code (advanced), e.g. GB, US.","on_invalid":"reject"},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-200, default 48); clamped to 200.","on_invalid":"ignore","default":48,"example":48,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Sort order. Omit for relevance (default). Only these keys are valid.","on_invalid":"ignore","allowed_values":[{"value":"freshness","label":"Newest first"},{"value":"pricedesc","label":"Price: high to low"},{"value":"priceasc","label":"Price: low to high"}],"example":"freshness"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter (in the store's currency).","on_invalid":"ignore"},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter (in the store's currency).","on_invalid":"ignore"},{"name":"brand","type":"string","required":false,"description":"Filter by brand — name (e.g. 'Nike', 'ASOS DESIGN') or facet id. Names are auto-resolved to ids; call the 'filters' action to list options.","on_invalid":"reject","example":"Nike"},{"name":"colour","type":"string","required":false,"description":"Filter by colour — name (e.g. 'Black', 'Blue', 'Multi') or facet id.","on_invalid":"reject","example":"black","aliases":["color"]},{"name":"size","type":"string","required":false,"description":"Filter by size — label (e.g. 'M', 'UK 10', 'XS') or facet id.","on_invalid":"reject","example":"M"},{"name":"product_type","type":"string","required":false,"description":"Filter by product type facet id (e.g. 8416=Dresses); see 'filters'.","on_invalid":"reject"},{"name":"on_sale","type":"enum","required":false,"description":"Limit to marked-down items only.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"On sale / marked down"},{"value":"new_season","label":"New season (full price)"}]},{"name":"new_in_within","type":"enum","required":false,"description":"Limit to items added within this window (the site's 'New in' filter).","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Added today"},{"value":"yesterday","label":"Added yesterday"},{"value":"7d","label":"Last 7 days"},{"value":"14d","label":"Last 14 days"},{"value":"28d","label":"Last 28 days"}]},{"name":"discount","type":"enum","required":false,"description":"Minimum discount tier for marked-down items.","on_invalid":"ignore","allowed_values":[{"value":"20","label":"Up to 20%"},{"value":"30","label":"20-30%"},{"value":"40","label":"30-40%"},{"value":"50","label":"40-50%"},{"value":"60","label":"50-60%"},{"value":"60+","label":"60% or more"}]},{"name":"channel","type":"string","required":false,"description":"Client channel (advanced).","on_invalid":"reject","example":"desktop-web"}],"returns":"products[], facets[], category_name, category_id, total, offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"8799"}},{"name":"sale","description":"On-sale / marked-down products only. Provide a keyword (query) or a category_id; supports the same filters, sort and pagination as search.","required_params":[],"optional_params":["query","category_id","store","lang","currency","country","offset","limit","sort","min_price","max_price","brand","colour","color","size","product_type","discount"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to find sale items for (sale needs query OR category_id).","on_invalid":"reject","example":"dress"},{"name":"category_id","type":"integer","required":false,"description":"Category id to browse on sale (alternative to query).","on_invalid":"reject","example":8799},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"},{"name":"lang","type":"string","required":false,"description":"Override the store's locale (advanced), e.g. en-GB, de-DE.","on_invalid":"reject"},{"name":"currency","type":"string","required":false,"description":"Override the store's currency (advanced), e.g. USD, EUR.","on_invalid":"reject"},{"name":"country","type":"string","required":false,"description":"Override ship-to country code (advanced), e.g. GB, US.","on_invalid":"reject"},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-200, default 48); clamped to 200.","on_invalid":"ignore","default":48,"example":48,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Sort order. Omit for relevance (default). Only these keys are valid.","on_invalid":"ignore","allowed_values":[{"value":"freshness","label":"Newest first"},{"value":"pricedesc","label":"Price: high to low"},{"value":"priceasc","label":"Price: low to high"}],"example":"freshness"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter (in the store's currency).","on_invalid":"ignore"},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter (in the store's currency).","on_invalid":"ignore"},{"name":"brand","type":"string","required":false,"description":"Filter by brand — name (e.g. 'Nike', 'ASOS DESIGN') or facet id. Names are auto-resolved to ids; call the 'filters' action to list options.","on_invalid":"reject","example":"Nike"},{"name":"colour","type":"string","required":false,"description":"Filter by colour — name (e.g. 'Black', 'Blue', 'Multi') or facet id.","on_invalid":"reject","example":"black","aliases":["color"]},{"name":"size","type":"string","required":false,"description":"Filter by size — label (e.g. 'M', 'UK 10', 'XS') or facet id.","on_invalid":"reject","example":"M"},{"name":"product_type","type":"string","required":false,"description":"Filter by product type facet id (e.g. 8416=Dresses); see 'filters'.","on_invalid":"reject"},{"name":"on_sale","type":"enum","required":false,"description":"Limit to marked-down items only.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"On sale / marked down"},{"value":"new_season","label":"New season (full price)"}]},{"name":"new_in_within","type":"enum","required":false,"description":"Limit to items added within this window (the site's 'New in' filter).","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Added today"},{"value":"yesterday","label":"Added yesterday"},{"value":"7d","label":"Last 7 days"},{"value":"14d","label":"Last 14 days"},{"value":"28d","label":"Last 28 days"}]},{"name":"discount","type":"enum","required":false,"description":"Minimum discount tier for marked-down items.","on_invalid":"ignore","allowed_values":[{"value":"20","label":"Up to 20%"},{"value":"30","label":"20-30%"},{"value":"40","label":"30-40%"},{"value":"50","label":"40-50%"},{"value":"60","label":"50-60%"},{"value":"60+","label":"60% or more"}]}],"returns":"products[] (marked-down only) with price.previous + is_marked_down, facets[], total, offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dress"}},{"name":"new_in","description":"Newest arrivals — freshness-sorted products, optionally limited to a recent window (today / last 7 / 14 / 28 days). Provide a keyword (query) or a category_id.","required_params":[],"optional_params":["query","category_id","store","lang","currency","country","offset","limit","new_in_within","min_price","max_price","brand","colour","color","size","product_type"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword for new arrivals (new_in needs query OR category_id).","on_invalid":"reject","example":"trainers"},{"name":"category_id","type":"integer","required":false,"description":"Category id for new arrivals (e.g. 27108 = women's New In).","on_invalid":"reject","example":27108},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"},{"name":"lang","type":"string","required":false,"description":"Override the store's locale (advanced), e.g. en-GB, de-DE.","on_invalid":"reject"},{"name":"currency","type":"string","required":false,"description":"Override the store's currency (advanced), e.g. USD, EUR.","on_invalid":"reject"},{"name":"country","type":"string","required":false,"description":"Override ship-to country code (advanced), e.g. GB, US.","on_invalid":"reject"},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-200, default 48); clamped to 200.","on_invalid":"ignore","default":48,"example":48,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Sort order. Omit for relevance (default). Only these keys are valid.","on_invalid":"ignore","allowed_values":[{"value":"freshness","label":"Newest first"},{"value":"pricedesc","label":"Price: high to low"},{"value":"priceasc","label":"Price: low to high"}],"example":"freshness"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter (in the store's currency).","on_invalid":"ignore"},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter (in the store's currency).","on_invalid":"ignore"},{"name":"brand","type":"string","required":false,"description":"Filter by brand — name (e.g. 'Nike', 'ASOS DESIGN') or facet id. Names are auto-resolved to ids; call the 'filters' action to list options.","on_invalid":"reject","example":"Nike"},{"name":"colour","type":"string","required":false,"description":"Filter by colour — name (e.g. 'Black', 'Blue', 'Multi') or facet id.","on_invalid":"reject","example":"black","aliases":["color"]},{"name":"size","type":"string","required":false,"description":"Filter by size — label (e.g. 'M', 'UK 10', 'XS') or facet id.","on_invalid":"reject","example":"M"},{"name":"product_type","type":"string","required":false,"description":"Filter by product type facet id (e.g. 8416=Dresses); see 'filters'.","on_invalid":"reject"},{"name":"on_sale","type":"enum","required":false,"description":"Limit to marked-down items only.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"On sale / marked down"},{"value":"new_season","label":"New season (full price)"}]},{"name":"new_in_within","type":"enum","required":false,"description":"Limit to items added within this window (the site's 'New in' filter).","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Added today"},{"value":"yesterday","label":"Added yesterday"},{"value":"7d","label":"Last 7 days"},{"value":"14d","label":"Last 14 days"},{"value":"28d","label":"Last 28 days"}]},{"name":"discount","type":"enum","required":false,"description":"Minimum discount tier for marked-down items.","on_invalid":"ignore","allowed_values":[{"value":"20","label":"Up to 20%"},{"value":"30","label":"20-30%"},{"value":"40","label":"30-40%"},{"value":"50","label":"40-50%"},{"value":"60","label":"50-60%"},{"value":"60+","label":"60% or more"}]}],"returns":"products[] sorted newest-first, facets[], total, offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"trainers"}},{"name":"product","description":"full product detail (sizes/stock/description/images) by product_id or product_url","required_params":[],"optional_params":["product_id","product_url","store"],"params":[{"name":"product_id","type":"string","required":false,"description":"ASOS product id. (product needs product_id OR product_url.)","on_invalid":"reject","example":"210879654"},{"name":"product_url","type":"string","required":false,"description":"Full ASOS product URL (alternative to product_id).","on_invalid":"reject"},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"}],"returns":"product{} — name, brand, gender, product_type, price, description, care_info, size_and_fit, images, variants[] (size, brand_size, sku, ean, colour, in_stock, per-variant price)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"210879654"}},{"name":"products","description":"batch product detail for comma-separated product_ids","required_params":["product_ids"],"optional_params":["store"],"params":[{"name":"product_ids","type":"string","required":true,"description":"Comma-separated ASOS product ids (max 20).","on_invalid":"reject","example":"210879654,205000123"},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"}],"returns":"products[] — full detail per id (best-effort; failed ids skipped)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_ids":"210879654,205000123"}},{"name":"navigation","description":"category links from gender landing pages; format=tree returns nested path hierarchy","required_params":[],"optional_params":["gender","store","format"],"params":[{"name":"gender","type":"enum","required":false,"description":"Which landing page to read categories from.","on_invalid":"reject","allowed_values":[{"value":"women","label":"Women"},{"value":"men","label":"Men"}],"example":"women"},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"},{"name":"format","type":"enum","required":false,"description":"Output shape.","on_invalid":"ignore","allowed_values":[{"value":"flat","label":"Flat category list (default)"},{"value":"tree","label":"Nested path hierarchy"}],"example":"flat"}],"returns":"categories[] {id, name, url} (flat) OR tree[] nested (format=tree)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"gender":"women"}},{"name":"reviews","description":"product reviews + rating summary from PDP embedded ratings blob (paginated)","required_params":[],"optional_params":["product_id","product_url","offset","limit"],"params":[{"name":"product_id","type":"string","required":false,"description":"ASOS product id. (reviews needs product_id OR product_url.)","on_invalid":"reject","example":"210879654"},{"name":"product_url","type":"string","required":false,"description":"Full ASOS product URL (alternative to product_id).","on_invalid":"reject"},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"limit","type":"integer","required":false,"description":"Reviews per page (1-50, default 10).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"rating{summary, distribution}, reviews[], total, offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"210879654"}},{"name":"similar","description":"related products via same-brand search fallback (true mightLike API is account-gated)","required_params":[],"optional_params":["product_id","product_url","limit","store"],"params":[{"name":"product_id","type":"string","required":false,"description":"ASOS product id. (similar needs product_id OR product_url.)","on_invalid":"reject","example":"210879654"},{"name":"product_url","type":"string","required":false,"description":"Full ASOS product URL (alternative to product_id).","on_invalid":"reject"},{"name":"limit","type":"integer","required":false,"description":"Max similar products (1-200, default 12).","on_invalid":"ignore","default":12,"example":12,"minimum":1,"maximum":200},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"}],"returns":"products[] same-brand related items, brand, product_id, total","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"210879654","limit":6}},{"name":"filters","description":"available search/category facets (brands, colours, sizes, price ranges)","required_params":[],"optional_params":["query","category_id","store","lang","currency","country"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to get facets for. (filters needs query OR category_id.)","on_invalid":"reject","example":"dress"},{"name":"category_id","type":"integer","required":false,"description":"Category id to get facets for (alternative to query).","on_invalid":"reject","example":8799},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"},{"name":"lang","type":"string","required":false,"description":"Override the store's locale (advanced), e.g. en-GB, de-DE.","on_invalid":"reject"},{"name":"currency","type":"string","required":false,"description":"Override the store's currency (advanced), e.g. USD, EUR.","on_invalid":"reject"},{"name":"country","type":"string","required":false,"description":"Override ship-to country code (advanced), e.g. GB, US.","on_invalid":"reject"}],"returns":"facets[] (brands, colours, sizes, price ranges), total_products, category_name","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dress"}},{"name":"suggestions","description":"search autocomplete suggestions for partial query","required_params":["query"],"optional_params":["store","lang","currency","country"],"params":[{"name":"query","type":"string","required":true,"description":"Partial search text to autocomplete.","on_invalid":"reject","example":"dre"},{"name":"store","type":"enum","required":false,"description":"ASOS market/store — sets default language, currency and ship-to country.","on_invalid":"reject","allowed_values":[{"value":"COM","label":"UK / international (default)"},{"value":"GB","label":"United Kingdom"},{"value":"US","label":"United States"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"}],"default":"COM","example":"US"},{"name":"lang","type":"string","required":false,"description":"Override the store's locale (advanced), e.g. en-GB, de-DE.","on_invalid":"reject"},{"name":"currency","type":"string","required":false,"description":"Override the store's currency (advanced), e.g. USD, EUR.","on_invalid":"reject"},{"name":"country","type":"string","required":false,"description":"Override ship-to country code (advanced), e.g. GB, US.","on_invalid":"reject"}],"returns":"suggestions[] {term, result_count, group}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dre"}}]},{"name":"ats-jobs","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"ATS Job Boards API — pull company-direct job postings from Greenhouse, Lever, Ashby and Workable in one unified schema","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/ats-jobs/v1","spec_available":true,"actions":[{"name":"company_jobs","description":"all open jobs for a board → {jobs[]{id,title,url,company,location,locations,...}, count, total, company, ats_source}. `ats`=greenhouse|lever|ashby|workable + `company` (board token/subdomain).","required_params":["ats","company"],"optional_params":["limit","cursor","page"],"params":[{"name":"ats","type":"enum","required":true,"description":"Applicant-tracking system / job-board provider.","on_invalid":"reject","allowed_values":[{"value":"greenhouse","label":"Greenhouse — boards-api.greenhouse.io"},{"value":"lever","label":"Lever — api.lever.co"},{"value":"ashby","label":"Ashby — api.ashbyhq.com"},{"value":"workable","label":"Workable — apply/jobs.workable.com (only ATS with cross-company search)"}],"example":"greenhouse"},{"name":"company","type":"string","required":true,"description":"Board token / subdomain / org slug (e.g. greenhouse 'gitlab', lever 'spotify', ashby 'ramp'). Identifies one company's board.","on_invalid":"reject","example":"gitlab","aliases":["token","board"]},{"name":"limit","type":"integer","required":false,"description":"Max jobs to return (1-2000). Omit/0 = provider default (all).","on_invalid":"ignore","example":100,"minimum":1,"maximum":2000},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous response (provider-specific).","on_invalid":"ignore","example":"eyJvZmZzZXQiOjUwfQ=="},{"name":"page","type":"integer","required":false,"description":"Page number for providers that paginate by page (alternative to cursor).","on_invalid":"ignore","example":1,"minimum":1}],"returns":"jobs[]{id, title, url, company, location, locations, department, ...}, count, total, company, ats_source","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"ats":"greenhouse","company":"gitlab"}},{"name":"job_detail","description":"one fully-populated job (description + requirements/benefits) by `ats` + `company` + `job_id`.","required_params":["ats","company","job_id"],"optional_params":[],"params":[{"name":"ats","type":"enum","required":true,"description":"Applicant-tracking system / job-board provider.","on_invalid":"reject","allowed_values":[{"value":"greenhouse","label":"Greenhouse — boards-api.greenhouse.io"},{"value":"lever","label":"Lever — api.lever.co"},{"value":"ashby","label":"Ashby — api.ashbyhq.com"},{"value":"workable","label":"Workable — apply/jobs.workable.com (only ATS with cross-company search)"}],"example":"greenhouse"},{"name":"company","type":"string","required":true,"description":"Board token / subdomain / org slug (e.g. greenhouse 'gitlab', lever 'spotify', ashby 'ramp'). Identifies one company's board.","on_invalid":"reject","example":"gitlab","aliases":["token","board"]},{"name":"job_id","type":"string","required":true,"description":"The job's id within that ATS board (from a company_jobs result's jobs[].id). Ids are only valid while the posting is open, so an id from an old example may return NOT_FOUND once the role is filled. Call company_jobs for a current one.","on_invalid":"reject","example":"8556658002","aliases":["jobId","id"]}],"returns":"job{} — one fully-populated posting (description, requirements, benefits, location, ...)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"ats":"greenhouse","company":"gitlab","job_id":"8556658002"}},{"name":"search","description":"cross-company job search over the Workable aggregator (170K jobs) → jobs[]. `query` + (default `ats`=workable). Filter by `workplace` (remote/hybrid/on_site) and `location`, which the aggregator applies itself, and by `posted_within_days`, which it does not offer and we apply over the pages your budget allows. Cost is bounded by `max_pages` and the response reports `pages_read` and `budget_exhausted`, so a result cut short by the budget is never mistaken for one the source ran out of.","required_params":["query"],"optional_params":["ats","workplace","remote","location","posted_within_days","max_pages","limit","cursor","page"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text keyword for the Workable cross-company aggregator search.","on_invalid":"reject","example":"python engineer","aliases":["keywords"]},{"name":"ats","type":"enum","required":false,"description":"Applicant-tracking system for the cross-company search. Only 'workable' aggregates jobs across companies, so this is the sole value here and it is the default (you can omit it). To read ONE company's board on greenhouse, lever or ashby, use the `company_jobs` action instead.","on_invalid":"reject","allowed_values":[{"value":"workable","label":"Workable — apply/jobs.workable.com (only ATS with cross-company search)"}],"default":"workable","example":"workable"},{"name":"workplace","type":"enum","required":false,"description":"Restrict to one working arrangement. The aggregator applies this itself, so it costs nothing extra and narrows the result at source rather than after paging.","on_invalid":"reject","allowed_values":[{"value":"remote","label":"Remote"},{"value":"hybrid","label":"Hybrid"},{"value":"on_site","label":"On site"}],"example":"remote"},{"name":"remote","type":"boolean","required":false,"description":"Shorthand for workplace=remote. Ignored when `workplace` is given, since that is the same axis stated precisely.","on_invalid":"ignore","example":true},{"name":"location","type":"string","required":false,"description":"Free-text place, applied by the aggregator itself (so it is cheap). It matches how Workable writes the location, so a city name works; a bare country code does not, because the aggregator has no country parameter.","on_invalid":"ignore","example":"London"},{"name":"posted_within_days","type":"integer","required":false,"description":"Keep only jobs first posted within this many days. The aggregator offers NO date filter (postedAfter, createdAfter, since, dayRange and days are all accepted and all ignored), so this is applied on our side across the pages `max_pages` allows. Check `budget_exhausted` before concluding a window is empty.","on_invalid":"reject","example":7,"minimum":1,"maximum":365,"aliases":["posted_days"]},{"name":"max_pages","type":"integer","required":false,"description":"Hard cap on how many aggregator pages one search may read (20 jobs per page; default 5, ceiling 25). This is the cost control: a narrow filter can never walk the whole index. The response returns `pages_read` and `budget_exhausted` so the cost is knowable before the call and visible after it.","on_invalid":"ignore","default":5,"example":5,"minimum":1,"maximum":25,"aliases":["page_budget"]},{"name":"limit","type":"integer","required":false,"description":"Max jobs to return (1-2000). Omit/0 = provider default (all).","on_invalid":"ignore","example":100,"minimum":1,"maximum":2000},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor from a previous response (provider-specific).","on_invalid":"ignore","example":"eyJvZmZzZXQiOjUwfQ=="},{"name":"page","type":"integer","required":false,"description":"Page number for providers that paginate by page (alternative to cursor).","on_invalid":"ignore","example":1,"minimum":1}],"returns":"jobs[]{id, title, url, company, location, workplace_type, remote, posted_date, ...}, count, total (the SOURCE's count after the upstream filters only), query, ats_source, pages_read, page_budget, budget_exhausted, filters_applied, filters_applied_upstream[], filters_applied_locally[], dropped_by_date_filter","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"python engineer","ats":"workable"}},{"name":"providers","description":"the supported ATS providers + their capabilities","required_params":[],"optional_params":[],"params":[],"returns":"providers[] — the supported ATS keys (greenhouse, lever, ashby, workable)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"auchan","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Auchan API — live auchan.fr data for a chosen Auchan drive or click & collect store: product search, category listings and the current promotions with the store's price, old price and discount, unit price, multi-buy and Waaoh loyalty offers and stock; one product in full with EAN, Nutri-Score, nutrition table, ingredients, allergens and characteristics; Auchan stores near a French postcode; the category tree. No login, no loyalty card, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/auchan/v1","spec_available":true,"actions":[{"name":"search","description":"Search auchan.fr by keyword for one store, with the site's sorts and filters (promotion, Waaoh loyalty offer, new, Nutri-Score, rating). 30 products per page, priced for the store.","required_params":["query"],"optional_params":["store_id","page","sort","on_promotion","loyalty_offer","new_only","nutriscore","min_rating"],"params":[{"name":"query","type":"string","required":true,"description":"Search text as typed into auchan.fr's search box (French works best: 'lait', 'café moulu', 'couches').","on_invalid":"reject","example":"lait","aliases":["q","keyword","search","text"]},{"name":"store_id","type":"string","required":false,"description":"Auchan store number (drive, click & collect point or locker) from the `stores` action. Prices, assortment, promotions and stock are that store's. Without it the engine prices for its default store 975 (Auchan Drive Hypermarché Kremlin-Bicêtre, Paris area) and says store_defaulted: true.","on_invalid":"reject","example":"823","aliases":["store","store_reference","drive_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 30 products per page ('lait' at store 823: 292 products, 10 pages, no product repeated across pages 1-3).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Order, the site's own sort keys. Unknown values are refused.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Pertinence (site default)"},{"value":"price_asc","label":"Prix croissant"},{"value":"price_desc","label":"Prix décroissant"},{"value":"unit_price_asc","label":"Prix au kilo/litre croissant"},{"value":"unit_price_desc","label":"Prix au kilo/litre décroissant"},{"value":"rating_desc","label":"Mieux notés"},{"value":"brand_asc","label":"Marque A-Z"},{"value":"brand_desc","label":"Marque Z-A"},{"value":"best_sellers","label":"Meilleures ventes 7 jours"}],"default":"relevance","example":"price_asc"},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products with a promotion at this store (the site's 'En promotion' filter).","on_invalid":"reject","default":false,"example":true,"aliases":["promo","on_offer"]},{"name":"loyalty_offer","type":"boolean","required":false,"description":"Only products with a Waaoh loyalty offer (money credited to the loyalty account, 'cagnotté'; the till price does not change).","on_invalid":"reject","default":false,"example":true,"aliases":["waaoh"]},{"name":"new_only","type":"boolean","required":false,"description":"Only products the site marks 'Nouveauté'.","on_invalid":"reject","default":false,"example":true,"aliases":["new"]},{"name":"nutriscore","type":"enum","required":false,"description":"Only products with this Nutri-Score (old and new calculation both count).","on_invalid":"reject","allowed_values":[{"value":"a","label":"A"},{"value":"b","label":"B"},{"value":"c","label":"C"},{"value":"d","label":"D"},{"value":"e","label":"E"}],"example":"a"},{"name":"min_rating","type":"enum","required":false,"description":"Only products whose average customer rating is at least this many stars.","on_invalid":"reject","allowed_values":[{"value":"3","label":"3 stars and more"},{"value":"4","label":"4 stars and more"},{"value":"5","label":"5 stars"}],"example":"4"}],"returns":"data.products[]: product_id, uuid, offer_id, name, brand, title, url, image, pack_size, price (price charged now for one unit, EUR), regular_price, was_price (struck-through old price on an immediate reduction), discount_percent, currency, unit_price, unit (kg, l, pce…), promotions[] {label, type, loyalty, immediate, min_quantity, percent}, loyalty_offer (Waaoh 'cagnotté' text, never in price), availability, stock_quantity (the store's stock figure), delivery_promise, rating, review_count, new, sponsored, labels[] (Bio, AB, Filières…), priced, position. data.total (the site's count for this store and filters), data.pagination {page, last_page, has_more}, data.store {store_id, name, type, postal_code, city}, data.store_defaulted, data.query.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"lait","store_id":"823"}},{"name":"category","description":"List one Auchan category (aisle) for one store, with the same sorts and filters as search.","required_params":["category_id"],"optional_params":["store_id","page","sort","on_promotion","loyalty_offer","new_only","nutriscore","min_rating"],"params":[{"name":"category_id","type":"string","required":true,"description":"Auchan category id: the code after 'ca-' in a category URL (auchan.fr/oeufs-produits-laitiers/cremerie-oeufs-laits/ca-n0101 -> n0101), or a `category_id` from the categories action.","on_invalid":"reject","example":"n0101","aliases":["category","id"]},{"name":"store_id","type":"string","required":false,"description":"Auchan store number (drive, click & collect point or locker) from the `stores` action. Prices, assortment, promotions and stock are that store's. Without it the engine prices for its default store 975 (Auchan Drive Hypermarché Kremlin-Bicêtre, Paris area) and says store_defaulted: true.","on_invalid":"reject","example":"823","aliases":["store","store_reference","drive_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 30 products per page ('lait' at store 823: 292 products, 10 pages, no product repeated across pages 1-3).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Order, the site's own sort keys. Unknown values are refused.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Pertinence (site default)"},{"value":"price_asc","label":"Prix croissant"},{"value":"price_desc","label":"Prix décroissant"},{"value":"unit_price_asc","label":"Prix au kilo/litre croissant"},{"value":"unit_price_desc","label":"Prix au kilo/litre décroissant"},{"value":"rating_desc","label":"Mieux notés"},{"value":"brand_asc","label":"Marque A-Z"},{"value":"brand_desc","label":"Marque Z-A"},{"value":"best_sellers","label":"Meilleures ventes 7 jours"}],"default":"relevance","example":"price_asc"},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products with a promotion at this store (the site's 'En promotion' filter).","on_invalid":"reject","default":false,"example":true,"aliases":["promo","on_offer"]},{"name":"loyalty_offer","type":"boolean","required":false,"description":"Only products with a Waaoh loyalty offer (money credited to the loyalty account, 'cagnotté'; the till price does not change).","on_invalid":"reject","default":false,"example":true,"aliases":["waaoh"]},{"name":"new_only","type":"boolean","required":false,"description":"Only products the site marks 'Nouveauté'.","on_invalid":"reject","default":false,"example":true,"aliases":["new"]},{"name":"nutriscore","type":"enum","required":false,"description":"Only products with this Nutri-Score (old and new calculation both count).","on_invalid":"reject","allowed_values":[{"value":"a","label":"A"},{"value":"b","label":"B"},{"value":"c","label":"C"},{"value":"d","label":"D"},{"value":"e","label":"E"}],"example":"a"},{"name":"min_rating","type":"enum","required":false,"description":"Only products whose average customer rating is at least this many stars.","on_invalid":"reject","allowed_values":[{"value":"3","label":"3 stars and more"},{"value":"4","label":"4 stars and more"},{"value":"5","label":"5 stars"}],"example":"4"}],"returns":"data.products[]: product_id, uuid, offer_id, name, brand, title, url, image, pack_size, price (price charged now for one unit, EUR), regular_price, was_price (struck-through old price on an immediate reduction), discount_percent, currency, unit_price, unit (kg, l, pce…), promotions[] {label, type, loyalty, immediate, min_quantity, percent}, loyalty_offer (Waaoh 'cagnotté' text, never in price), availability, stock_quantity (the store's stock figure), delivery_promise, rating, review_count, new, sponsored, labels[] (Bio, AB, Filières…), priced, position. data.category {category_id, name}, data.subcategories[] {category_id, name, url}, data.total, data.pagination, data.store, data.store_defaulted.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"n0101","store_id":"823"}},{"name":"promotions","description":"The current promotions of one store (the site's 'Promos' shop): immediate reductions, multi-buy offers and Waaoh loyalty offers, 30 products per page.","required_params":[],"optional_params":["store_id","page","sort","loyalty_offer","new_only","nutriscore","min_rating"],"params":[{"name":"store_id","type":"string","required":false,"description":"Auchan store number (drive, click & collect point or locker) from the `stores` action. Prices, assortment, promotions and stock are that store's. Without it the engine prices for its default store 975 (Auchan Drive Hypermarché Kremlin-Bicêtre, Paris area) and says store_defaulted: true.","on_invalid":"reject","example":"823","aliases":["store","store_reference","drive_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 30 products per page ('lait' at store 823: 292 products, 10 pages, no product repeated across pages 1-3).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Order, the site's own sort keys. Unknown values are refused.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Pertinence (site default)"},{"value":"price_asc","label":"Prix croissant"},{"value":"price_desc","label":"Prix décroissant"},{"value":"unit_price_asc","label":"Prix au kilo/litre croissant"},{"value":"unit_price_desc","label":"Prix au kilo/litre décroissant"},{"value":"rating_desc","label":"Mieux notés"},{"value":"brand_asc","label":"Marque A-Z"},{"value":"brand_desc","label":"Marque Z-A"},{"value":"best_sellers","label":"Meilleures ventes 7 jours"}],"default":"relevance","example":"price_asc"},{"name":"loyalty_offer","type":"boolean","required":false,"description":"Only products with a Waaoh loyalty offer (money credited to the loyalty account, 'cagnotté'; the till price does not change).","on_invalid":"reject","default":false,"example":true,"aliases":["waaoh"]},{"name":"new_only","type":"boolean","required":false,"description":"Only products the site marks 'Nouveauté'.","on_invalid":"reject","default":false,"example":true,"aliases":["new"]},{"name":"nutriscore","type":"enum","required":false,"description":"Only products with this Nutri-Score (old and new calculation both count).","on_invalid":"reject","allowed_values":[{"value":"a","label":"A"},{"value":"b","label":"B"},{"value":"c","label":"C"},{"value":"d","label":"D"},{"value":"e","label":"E"}],"example":"a"},{"name":"min_rating","type":"enum","required":false,"description":"Only products whose average customer rating is at least this many stars.","on_invalid":"reject","allowed_values":[{"value":"3","label":"3 stars and more"},{"value":"4","label":"4 stars and more"},{"value":"5","label":"5 stars"}],"example":"4"}],"returns":"data.products[]: product_id, uuid, offer_id, name, brand, title, url, image, pack_size, price (price charged now for one unit, EUR), regular_price, was_price (struck-through old price on an immediate reduction), discount_percent, currency, unit_price, unit (kg, l, pce…), promotions[] {label, type, loyalty, immediate, min_quantity, percent}, loyalty_offer (Waaoh 'cagnotté' text, never in price), availability, stock_quantity (the store's stock figure), delivery_promise, rating, review_count, new, sponsored, labels[] (Bio, AB, Filières…), priced, position. data.total, data.pagination, data.store, data.store_defaulted.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"823"}},{"name":"product","description":"One Auchan product in full for one store: price, old price and discount, unit price, promotions and Waaoh offer, stock, EAN, Auchan reference, Nutri-Score, nutrition table, ingredients, allergens, characteristics (origin, legal name, storage…), category path, images, rating and review count.","required_params":["product_id"],"optional_params":["store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Auchan product id: the 'C' code after 'pr-' in a product URL (auchan.fr/.../pr-C1306935 -> C1306935), the `product_id` of a search row.","on_invalid":"reject","example":"C1306935","aliases":["id","pr","product"]},{"name":"store_id","type":"string","required":false,"description":"Auchan store number (drive, click & collect point or locker) from the `stores` action. Prices, assortment, promotions and stock are that store's. Without it the engine prices for its default store 975 (Auchan Drive Hypermarché Kremlin-Bicêtre, Paris area) and says store_defaulted: true.","on_invalid":"reject","example":"823","aliases":["store","store_reference","drive_id"]}],"returns":"data.product: product_id, uuid, offer_id, name, brand, title, description, url, pack_size, price, regular_price, was_price, discount_percent, currency, unit_price, unit, promotions[], loyalty_offer, availability, stock_quantity, ean, internal_ref, nutriscore, nutriscore_new_calculation, allergens, ingredients, characteristics[] {group, label, value}, nutrition {basis, rows[] {nutrient, per_100, daily_intake_percent}}, labels[], category_path[] {category_id, name}, images[], rating, review_count, priced. data.store, data.store_defaulted.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"C1306935","store_id":"823"}},{"name":"stores","description":"Auchan pickup stores (drives, click & collect points, lockers) near a French postcode or a point, nearest first, with the store_id the other actions take, address, distance, type and opening hours.","required_params":[],"optional_params":["postal_code","latitude","longitude"],"params":[{"name":"postal_code","type":"string","required":false,"description":"French 5-digit postcode; the stores near its town are returned, nearest first. Give postal_code, or latitude and longitude.","on_invalid":"reject","example":"59000","aliases":["zip","zip_code","postcode","code_postal"]},{"name":"latitude","type":"number","required":false,"description":"Latitude of the point to search around (with longitude).","on_invalid":"reject","example":50.6365,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Longitude of the point to search around (with latitude).","on_invalid":"reject","example":3.0635,"aliases":["lon","lng"]}],"returns":"data.stores[]: store_id, name, type (DRIVE | PICKUP_POINT | LOCKERS), channels[], address, postal_code, city, latitude, longitude, distance_km, open, closed, enabled, phone, hours[] {day, open, close}, url, seller_id, point_of_service_id. data.location {postal_code, city, latitude, longitude}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"59000"}},{"name":"categories","description":"Auchan's aisles: the top-level navigation ('Nos rayons'), or the sub-categories of one category with category_id.","required_params":[],"optional_params":["category_id"],"params":[{"name":"category_id","type":"string","required":false,"description":"Optional: list the sub-categories of this category instead of the top-level aisles.","on_invalid":"reject","example":"n01","aliases":["category","id"]}],"returns":"data.categories[]: category_id, name, url (+ group and kind on the top level). data.parent {category_id, name, total} when category_id is given.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"n01"}}]},{"name":"auchan-pl","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Auchan Polska groceries","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/auchan-pl/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Auchan Polska online grocery catalogue (PLN). Auchan zakupy online, Polska; promo_price and lowest_price_30d are published by the source.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search text, up to 100 characters.","on_invalid":"reject","example":"mleko","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Products requested per page, 1-48. The source can return fewer (duplicate rows across its groups are dropped).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page of the same call (same query, filters and location).","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the facets[id=brands] list of a previous answer.","on_invalid":"reject","example":"Auchan"},{"name":"on_offer","type":"boolean","required":false,"description":"Only products with a source promotion when true.","on_invalid":"reject","default":false},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Auchan Polska follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (Discovery) and says store_defaulted=true.","on_invalid":"reject","example":50.0614},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":19.9366},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"31-001"}],"returns":"Products with PLN shelf price, unit price, promotions, availability, brand, pack size, image and url; facets; next_cursor; location (region used, store_defaulted).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"mleko","limit":24}},{"name":"category","description":"Browse one Auchan Polska category by its id from categories.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"Category UUID from the categories action.","on_invalid":"reject","example":"4fb6bcba-60bc-4faf-bd08-0fae1dd8075c"},{"name":"limit","type":"integer","required":false,"description":"Products requested per page, 1-48. The source can return fewer (duplicate rows across its groups are dropped).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page of the same call (same query, filters and location).","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the facets[id=brands] list of a previous answer.","on_invalid":"reject","example":"Auchan"},{"name":"on_offer","type":"boolean","required":false,"description":"Only products with a source promotion when true.","on_invalid":"reject","default":false},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Auchan Polska follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (Discovery) and says store_defaulted=true.","on_invalid":"reject","example":50.0614},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":19.9366},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"31-001"}],"returns":"Same product rows as search, plus the source category product count.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"4fb6bcba-60bc-4faf-bd08-0fae1dd8075c"}},{"name":"product","description":"Full Auchan Polska product sheet: description, ingredients, allergens, nutrition table, every label field, all images, promotions with terms.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Product id from search (`id`), or a zakupy.auchan.pl product URL.","on_invalid":"reject","example":"00781532","aliases":["product_id","url"]},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Auchan Polska follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (Discovery) and says store_defaulted=true.","on_invalid":"reject","example":50.0614},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":19.9366},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"31-001"}],"returns":"The search row fields plus description, fields, ingredients, allergens, nutrition, breadcrumbs, images and gtin (only when the label prints an EAN).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"00781532"}},{"name":"categories","description":"Auchan Polska category tree (top level and one child level) with the ids the category action takes.","required_params":[],"optional_params":[],"params":[],"returns":"Category tree: id, name, retailer_category_id, children.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"auchan-pt","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Auchan Portugal API — supermarket prices by store: shelf price, promotion with dates, was price, PVPR, price per kg/litre, EAN, ingredients and nutrition from auchan.pt","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/auchan-pt/v1","spec_available":true,"actions":[{"name":"search","description":"Search Auchan Portugal's online shop: shelf price, was price and promotion dates, recommended retail price (PVPR), price per kg/l, brand, category, labels. `query` required; filters: category, brand, nutriscore, organic, national_product, min_price, max_price; sort; paging up to 100 per page. Rows are the online store's prices and range (`product` takes a store_id).","required_params":["query"],"optional_params":["category","brand","nutriscore","organic","national_product","min_price","max_price","sort","page","per_page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed in the Auchan shop (Portuguese works best).","on_invalid":"reject","example":"leite","aliases":["q","keyword","search","term"]},{"name":"category","type":"string","required":false,"description":"Auchan category id as `categories` returns it (e.g. produtos-lacteos, leite-uht, alimentacao-). An id the site does not know is rejected.","on_invalid":"reject","example":"produtos-lacteos","aliases":["cgid","category_id"]},{"name":"brand","type":"string","required":false,"description":"Brand as Auchan prints it (upper case, e.g. MIMOSA, AUCHAN, NESTLÉ).","on_invalid":"reject","example":"MIMOSA","aliases":["marca"]},{"name":"nutriscore","type":"enum","required":false,"description":"Nutri-Score letter A-E (the site's own facet).","on_invalid":"reject","allowed_values":[{"value":"A","label":"A"},{"value":"B","label":"B"},{"value":"C","label":"C"},{"value":"D","label":"D"},{"value":"E","label":"E"}]},{"name":"organic","type":"boolean","required":false,"description":"true = only the site's 'Biológico' family.","on_invalid":"reject","aliases":["biologico"]},{"name":"national_product","type":"boolean","required":false,"description":"true = only products the site labels 'Produto Nacional'.","on_invalid":"reject","aliases":["produto_nacional"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum shelf price in whole euros (the site's price filter takes whole euros only: 1.5 or 1.00 are silently ignored by auchan.pt, so they are rejected here).","on_invalid":"reject","example":1,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum shelf price in whole euros.","on_invalid":"reject","example":3,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"popular (site default) · relevance · best_seller · price_asc · price_desc · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"popular"},{"value":"relevance","label":"relevance"},{"value":"best_seller","label":"best_seller"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"popular","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100 (default 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100,"aliases":["limit","sz"]}],"returns":"store{store_id, store_name, store_defaulted, sourcing_codes[], resolved_from}, query, category, filters, sort, total, total_is_exact, total_note, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (PVPR), recommended_retail_price_text, discount_vs_recommended_text, currency, on_offer, promotion_window{text, from, to}, unit_price, unit_price_unit, unit_price_text, min_quantity_text, min_quantity_price, labels[], category_path, analytics_price, analytics_discount, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"leite"}},{"name":"category","description":"List one Auchan category (id from `categories`) with the same row fields, filters and paging as `search` — the way to walk the whole catalogue.","required_params":["category"],"optional_params":["brand","nutriscore","organic","national_product","min_price","max_price","sort","page","per_page"],"params":[{"name":"category","type":"string","required":false,"description":"Auchan category id as `categories` returns it (e.g. produtos-lacteos, leite-uht, alimentacao-). An id the site does not know is rejected.","on_invalid":"reject","example":"produtos-lacteos","aliases":["cgid","category_id"]},{"name":"brand","type":"string","required":false,"description":"Brand as Auchan prints it (upper case, e.g. MIMOSA, AUCHAN, NESTLÉ).","on_invalid":"reject","example":"MIMOSA","aliases":["marca"]},{"name":"nutriscore","type":"enum","required":false,"description":"Nutri-Score letter A-E (the site's own facet).","on_invalid":"reject","allowed_values":[{"value":"A","label":"A"},{"value":"B","label":"B"},{"value":"C","label":"C"},{"value":"D","label":"D"},{"value":"E","label":"E"}]},{"name":"organic","type":"boolean","required":false,"description":"true = only the site's 'Biológico' family.","on_invalid":"reject","aliases":["biologico"]},{"name":"national_product","type":"boolean","required":false,"description":"true = only products the site labels 'Produto Nacional'.","on_invalid":"reject","aliases":["produto_nacional"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum shelf price in whole euros (the site's price filter takes whole euros only: 1.5 or 1.00 are silently ignored by auchan.pt, so they are rejected here).","on_invalid":"reject","example":1,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum shelf price in whole euros.","on_invalid":"reject","example":3,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"popular (site default) · relevance · best_seller · price_asc · price_desc · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"popular"},{"value":"relevance","label":"relevance"},{"value":"best_seller","label":"best_seller"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"popular","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100 (default 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100,"aliases":["limit","sz"]}],"returns":"store{store_id, store_name, store_defaulted, sourcing_codes[], resolved_from}, query, category, filters, sort, total, total_is_exact, total_note, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (PVPR), recommended_retail_price_text, discount_vs_recommended_text, currency, on_offer, promotion_window{text, from, to}, unit_price, unit_price_unit, unit_price_text, min_quantity_text, min_quantity_price, labels[], category_path, analytics_price, analytics_discount, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"produtos-lacteos"}},{"name":"promotions","description":"Auchan products on promotion in the online store right now (the site's own promotions facet): offer price, was price, promotion dates, PVPR. Narrow with `query`, `category`, `brand`, filters.","required_params":[],"optional_params":["query","category","brand","nutriscore","organic","national_product","min_price","max_price","sort","page","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Optional search words inside the promotions.","on_invalid":"reject","example":"leite","aliases":["q","keyword","search","term"]},{"name":"category","type":"string","required":false,"description":"Auchan category id as `categories` returns it (e.g. produtos-lacteos, leite-uht, alimentacao-). An id the site does not know is rejected.","on_invalid":"reject","example":"produtos-lacteos","aliases":["cgid","category_id"]},{"name":"brand","type":"string","required":false,"description":"Brand as Auchan prints it (upper case, e.g. MIMOSA, AUCHAN, NESTLÉ).","on_invalid":"reject","example":"MIMOSA","aliases":["marca"]},{"name":"nutriscore","type":"enum","required":false,"description":"Nutri-Score letter A-E (the site's own facet).","on_invalid":"reject","allowed_values":[{"value":"A","label":"A"},{"value":"B","label":"B"},{"value":"C","label":"C"},{"value":"D","label":"D"},{"value":"E","label":"E"}]},{"name":"organic","type":"boolean","required":false,"description":"true = only the site's 'Biológico' family.","on_invalid":"reject","aliases":["biologico"]},{"name":"national_product","type":"boolean","required":false,"description":"true = only products the site labels 'Produto Nacional'.","on_invalid":"reject","aliases":["produto_nacional"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum shelf price in whole euros (the site's price filter takes whole euros only: 1.5 or 1.00 are silently ignored by auchan.pt, so they are rejected here).","on_invalid":"reject","example":1,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum shelf price in whole euros.","on_invalid":"reject","example":3,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"popular (site default) · relevance · best_seller · price_asc · price_desc · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"popular"},{"value":"relevance","label":"relevance"},{"value":"best_seller","label":"best_seller"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"popular","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100 (default 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100,"aliases":["limit","sz"]}],"returns":"store{store_id, store_name, store_defaulted, sourcing_codes[], resolved_from}, query, category, filters, sort, total, total_is_exact, total_note, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (PVPR), recommended_retail_price_text, discount_vs_recommended_text, currency, on_offer, promotion_window{text, from, to}, unit_price, unit_price_unit, unit_price_text, min_quantity_text, min_quantity_price, labels[], category_path, analytics_price, analytics_discount, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"leite"}},{"name":"product","description":"One Auchan product by the `product_id` a search row returns: price, was price or PVPR, discount %, promotions, price per kg/l, EAN, order limits, availability, delivery estimate, category, labels, images, ingredients and nutrition text. Optional store_id for that store's price.","required_params":["product_id"],"optional_params":["store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"The numeric product id a search row returns, or its https://www.auchan.pt/pt/…/<id>.html URL.","on_invalid":"reject","example":"3010403","aliases":["id","pid","url","product_url"]},{"name":"store_id","type":"string","required":false,"description":"Auchan store id from the `stores` action (click-and-collect store). The price then follows that store's price book (measured: bananas 0.54 € online and at hypermarket 010, 0.59 € at supermarkets B85 and B64). Omit for the online store (000); the response's `store` block says which.","on_invalid":"reject","example":"B85","aliases":["store","loja"]}],"returns":"product{product_id, name, brand, ean, short_description, description, price, price_unit, price_valid_until, regular_price, recommended_retail_price, discount_vs_recommended_pct, discount_pct, is_promotion, currency, promotions[]{id, name, callout, details, class, start, end}, promotion_badges[], unit_price, unit_price_unit, unit_price_text, min_quantity_text, average_weight, sales_unit, unit_measure, unit_quantity, step_quantity, min_order_quantity, max_order_quantity, available, online, availability_messages[], delivery_estimate, rating, category_id, category_name, labels[], images[], url}, label{ingredients, nutrition_text, attributes[]{label, value}}, store{…}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"3010403"}},{"name":"categories","description":"Auchan Portugal's category tree from the shop menu (three levels): id, name, URL, children. Ids feed `category` and the `category` filter.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"string","required":false,"description":"Return only this category's subtree; omit for the whole tree.","on_invalid":"reject","example":"alimentacao-","aliases":["cgid","category_id","parent"]}],"returns":"parent, total_categories, categories[]{category_id, name, url, path, depth, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"alimentacao-"}},{"name":"stores","description":"Auchan stores near a point, from the site's own store finder: id (for `store_id`), name, type, address, post code, coordinates, distance, phone, delivery types, opening hours.","required_params":["latitude","longitude"],"optional_params":["radius_km"],"params":[{"name":"latitude","type":"number","required":true,"description":"Latitude of the point (Portugal).","on_invalid":"reject","example":38.75,"aliases":["lat"]},{"name":"longitude","type":"number","required":true,"description":"Longitude of the point.","on_invalid":"reject","example":-9.15,"aliases":["lon","lng","long"]},{"name":"radius_km","type":"enum","required":false,"description":"Search radius in km: 15, 30, 50, 100 or 300 (the site's options).","on_invalid":"reject","allowed_values":[{"value":"15","label":"15"},{"value":"30","label":"30"},{"value":"50","label":"50"},{"value":"100","label":"100"},{"value":"300","label":"300"}],"default":"30","aliases":["radius"]}],"returns":"latitude, longitude, radius_km, total, stores[]{store_id, name, type, address, postal_code, city, locality, latitude, longitude, distance, distance_unit, phone, email, delivery_types, active_delivery_types, opening_hours, open_date}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"latitude":38.75,"longitude":-9.15}}]},{"name":"auctionet","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Auctionet — Nordic & European auction aggregator","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/auctionet/v1","spec_available":true,"actions":[{"name":"search","description":"Search Auctionet's whole catalogue — ~90 auction houses in Sweden, Denmark, Finland, Germany, Spain and the UK — either the live lots or the closed archive. Every filter is optional; with none you get the newest live lots. Each row carries its own currency: one page routinely mixes SEK, DKK, EUR and GBP, and nothing here is converted.","required_params":[],"optional_params":["query","status","country","house_id","category_id","sort","page","max_results","locale"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over lot title, description and catalogue number (e.g. 'rolex', 'orrefors vas', 'jugend lampa'). Leave it out to browse the whole catalogue newest-first.","on_invalid":"reject","example":"rolex","aliases":["q","keywords","search","term","text"]},{"name":"status","type":"enum","required":false,"description":"Which side of the catalogue to search. 'live' = lots still open for bidding; 'ended' = the closed archive, which holds both sold and unsold lots (read `is_sold` on each row).","on_invalid":"reject","allowed_values":[{"value":"live","label":"Lots still open for bidding (the site's default view)"},{"value":"ended","label":"Lots whose auction has closed — sold and unsold, the ~3.9M-lot archive"}],"default":"live","example":"ended","aliases":["is","state","phase"]},{"name":"country","type":"enum","required":false,"description":"Restrict to the auction houses of one country. Auctionet serves six.","on_invalid":"reject","allowed_values":[{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"FI","label":"Finland"},{"value":"DE","label":"Germany"},{"value":"ES","label":"Spain"},{"value":"GB","label":"United Kingdom"}],"example":"SE","aliases":["country_code","market","cc"]},{"name":"house_id","type":"integer","required":false,"description":"Restrict to one auction house, by its Auctionet id. Call the `houses` action to get the ids together with the house names and their lot counts.","on_invalid":"reject","example":239,"minimum":1,"aliases":["company_id","house","auction_house","seller_id"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one category, by its Auctionet id. Call the `categories` action for the full tree; a child id (e.g. 34 'Other clocks') narrows further than its parent (31 'Clocks & Watches').","on_invalid":"reject","example":31,"minimum":1,"aliases":["category","cat","category_ids"]},{"name":"sort","type":"enum","required":false,"description":"Row order. The estimate and bid orders are ranked by Auctionet across currencies, so the numbers you see are not monotonic in any single currency. 'sold_only_recent' additionally drops unsold lots.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Auctionet's own relevance ranking (default)"},{"value":"ending_soonest","label":"Closing soonest first"},{"value":"ending_latest","label":"Closing last first; on the archive, most recently closed first"},{"value":"estimate_low_first","label":"Lowest estimate first (Auctionet ranks across currencies)"},{"value":"estimate_high_first","label":"Highest estimate first (Auctionet ranks across currencies)"},{"value":"bid_low_first","label":"Lowest current bid first (Auctionet ranks across currencies)"},{"value":"bid_high_first","label":"Highest current bid first (Auctionet ranks across currencies)"},{"value":"fewest_bids","label":"Fewest bids first"},{"value":"most_bids","label":"Most bids first"},{"value":"sold_only_recent","label":"Most recently SOLD first — this one also drops unsold lots"}],"default":"relevance","example":"ending_soonest","aliases":["order","order_by","sort_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Auctionet serves at most 10,000 lots per query, so the last reachable page is 10000/max_results — narrow the query to go deeper.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-200 (Auctionet's own ceiling is 200).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":200,"aliases":["per_page","limit","count","page_size","size"]},{"name":"locale","type":"enum","required":false,"description":"Language for the category names Auctionet translates. Lot titles and descriptions are written by the auction house and are returned as written.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"sv","label":"Swedish"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"de","label":"German"},{"value":"es","label":"Spanish"},{"value":"nb","label":"Norwegian"},{"value":"fr","label":"French"},{"value":"nl","label":"Dutch"}],"default":"en","example":"en","aliases":["lang","language"]}],"returns":"{query, status, total_available, page, page_count, currencies, results[]} — each result has item_id, url, title, description, condition, house, house_id, location, category_id, category, currency, estimate_low, estimate_high, starting_bid, current_bid, final_bid, bid_count, next_bid_amount, reserve_amount, reserve_met, is_sold, status, ends_at, published_at, images.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex","max_results":10}},{"name":"detail","description":"One lot in full, live or from the archive, with its complete bid history (amount, bidder number and timestamp per bid). Takes the numeric lot id or any auctionet.com lot URL.","required_params":["item"],"optional_params":["locale"],"params":[{"name":"item","type":"string","required":true,"description":"The numeric Auctionet lot id, or a full lot URL such as https://auctionet.com/en/5336678-...","on_invalid":"reject","example":"5336678","value_pattern":"\\d{3,}|https?://.*auctionet\\.com/.*","aliases":["item_id","id","lot","lot_id","url","link"]},{"name":"locale","type":"enum","required":false,"description":"Language for the category names Auctionet translates. Lot titles and descriptions are written by the auction house and are returned as written.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"sv","label":"Swedish"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"de","label":"German"},{"value":"es","label":"Spanish"},{"value":"nb","label":"Norwegian"},{"value":"fr","label":"French"},{"value":"nl","label":"Dutch"}],"default":"en","example":"en","aliases":["lang","language"]}],"returns":"One lot object — the search row plus `bids` (newest first: amount, bidder, timestamp, is_auto) and `category_path`.","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"item":"5336678"}},{"name":"categories","description":"Auctionet's category tree — top-level categories with their children, each with the id the `category_id` filter takes. Names follow `locale`.","required_params":[],"optional_params":["locale"],"params":[{"name":"locale","type":"enum","required":false,"description":"Language for the category names Auctionet translates. Lot titles and descriptions are written by the auction house and are returned as written.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"sv","label":"Swedish"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"de","label":"German"},{"value":"es","label":"Spanish"},{"value":"nb","label":"Norwegian"},{"value":"fr","label":"French"},{"value":"nl","label":"Dutch"}],"default":"en","example":"en","aliases":["lang","language"]}],"returns":"{locale, count, categories[]} with {id, name, children[]} per node.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"locale":"en"}},{"name":"houses","description":"Which auction houses, countries and categories hold lots matching a query, each with its lot count. This is the only published place an auction-house id is paired with its name, so it is how you learn the `house_id` values the search filter takes. Call it with no query for the whole catalogue.","required_params":[],"optional_params":["query","status","country","locale"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over lot title, description and catalogue number (e.g. 'rolex', 'orrefors vas', 'jugend lampa'). Leave it out to browse the whole catalogue newest-first.","on_invalid":"reject","example":"rolex","aliases":["q","keywords","search","term","text"]},{"name":"status","type":"enum","required":false,"description":"Which side of the catalogue to search. 'live' = lots still open for bidding; 'ended' = the closed archive, which holds both sold and unsold lots (read `is_sold` on each row).","on_invalid":"reject","allowed_values":[{"value":"live","label":"Lots still open for bidding (the site's default view)"},{"value":"ended","label":"Lots whose auction has closed — sold and unsold, the ~3.9M-lot archive"}],"default":"live","example":"ended","aliases":["is","state","phase"]},{"name":"country","type":"enum","required":false,"description":"Restrict to the auction houses of one country. Auctionet serves six.","on_invalid":"reject","allowed_values":[{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"FI","label":"Finland"},{"value":"DE","label":"Germany"},{"value":"ES","label":"Spain"},{"value":"GB","label":"United Kingdom"}],"example":"SE","aliases":["country_code","market","cc"]},{"name":"locale","type":"enum","required":false,"description":"Language for the category names Auctionet translates. Lot titles and descriptions are written by the auction house and are returned as written.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"sv","label":"Swedish"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"de","label":"German"},{"value":"es","label":"Spanish"},{"value":"nb","label":"Norwegian"},{"value":"fr","label":"French"},{"value":"nl","label":"Dutch"}],"default":"en","example":"en","aliases":["lang","language"]}],"returns":"{query, status, total_available, houses_cover_all, houses[], countries[], categories[]} — each entry {id, name, item_count}.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex","status":"ended"}}]},{"name":"aukro","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Aukro CZ auctions and marketplace listings","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/aukro/v1","spec_available":true,"actions":[{"name":"search","description":"Search public Aukro.cz listings. The source can route a keyword to a category or a curated /lp/ landing page; the resolved path is returned and its listings are searched.","required_params":["query"],"optional_params":["page","page_size","sort"],"params":[{"name":"query","type":"string","required":true,"description":"Search text, 1–200 characters; source category and landing-page keyword routing is retained.","on_invalid":"reject","example":"iphone","aliases":["text","q"]},{"name":"page","type":"integer","required":false,"description":"One-based result page. Engine limit 100.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Requested source page size, from 1 to 60.","on_invalid":"reject","default":12,"example":12,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Result order. Omitted = the source default (relevance; most_bids on curated landing pages). The source re-orders equally relevant rows on every request, so relevance pages can overlap or skip rows; to walk every page use ending_soon, newest, price_asc, price_desc or most_bids (pages are disjoint and complete). most_bids is the source bidder ranking, where fixed-price rows rank by their buyer count.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (source default; pages can overlap)"},{"value":"ending_soon","label":"Ending soonest"},{"value":"newest","label":"Newest listed"},{"value":"price_asc","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"},{"value":"most_bids","label":"Most bids (fixed-price rows rank by buyers)"}],"example":"ending_soon"}],"returns":"listings with source IDs, canonical URL, title, source currency price and auction/fixed basis, source seller, condition attributes, image and location; total, source_total_pages, last_supported_page, has_more, applied sort and resolved_category (category slug or lp/<slug> landing page).","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","page":1,"page_size":12}},{"name":"detail","description":"Meaningful public listing detail by a listing_id returned by search.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Numeric Aukro item ID returned by search; not a GTIN.","on_invalid":"reject","example":"7135869879","aliases":["item_id"]}],"returns":"Full description, original gallery, source auction/fixed price, optional active buy-now price, state/times, quantity, bidder count, seller identity, categories, attributes and shipping/payment options. GTIN optional/null when unpublished; shipping excludes checkout fees.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"7135869879"}}]},{"name":"autocasion","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Autocasion Spain vehicle listings","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/autocasion/v1","spec_available":true,"actions":[{"name":"search","description":"Search native Spanish brand result pages","required_params":[],"optional_params":[],"params":[{"name":"query","type":"enum","required":true,"description":"Qualified native brand slug: bmw or audi","on_invalid":"reject","allowed_values":[{"value":"bmw","label":"BMW"},{"value":"audi","label":"Audi"}],"example":"bmw"},{"name":"page","type":"integer","required":false,"description":"Native source page; shallow paging verified","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100}],"returns":"Native page items, matching total, next_page and clamp status","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"bmw","page":1}},{"name":"listing","description":"Meaningful vehicle detail for canonical search ID","required_params":[],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Canonical vehicle URL returned as search id; not the numeric source_id","on_invalid":"reject","example":"https://www.autocasion.com/coches-segunda-mano/bmw-serie-1-ocasion/116d-8-ref20399160"}],"returns":"Native cash price, separate financing, description, vehicle details, equipment and available public seller","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"https://www.autocasion.com/coches-segunda-mano/bmw-serie-1-ocasion/116d-8-ref20399160"}}]},{"name":"autochek","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Autochek used-car marketplace — Nigeria, Kenya, Ghana, Uganda, Côte d'Ivoire","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/autochek/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Autochek used-car listings in one market. Price is an integer in that market's own currency and the currency is returned as a separate field — figures are never converted between markets. Ten filters were each measured against an unfiltered control in two different markets and all ten bite.","required_params":["country"],"optional_params":["query","make_id","body_type_id","transmission","fuel","condition","state","city","warranty_only","auction_only","featured_only","page","limit"],"params":[{"name":"country","type":"enum","required":true,"description":"Autochek market to search. Only the five markets Autochek itself operates are served; the group's other country links (Senegal, Morocco, Egypt) are partner sites with no Autochek inventory and are rejected. Verified live 2026-10-06.","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (NGN)"},{"value":"ke","label":"Kenya (KES)"},{"value":"gh","label":"Ghana (GHS)"},{"value":"ug","label":"Uganda (UGX)"},{"value":"ci","label":"Côte d'Ivoire (XOF)"}],"example":"ng","aliases":["market"]},{"name":"query","type":"string","required":false,"description":"Free-text match over the listing title, e.g. 'corolla', 'land cruiser', 'cx-5'. Measured: Nigeria 9 253 unfiltered → 667 for 'corolla'.","on_invalid":"reject","example":"corolla"},{"name":"make_id","type":"integer","required":false,"description":"Numeric make id from the `makes` action (Toyota = 106, Honda = 45, Mercedes-Benz = 70). Make NAMES are not accepted by the source. Measured over 50 rows: Honda 50/50 and Mercedes-Benz 50/50 pure, Toyota 49/50 — the source groups one Lexus under Toyota.","on_invalid":"reject","example":106,"minimum":1},{"name":"body_type_id","type":"integer","required":false,"description":"Numeric body-type id from the `body_types` action (SUV = 3, Sedan = 8, Hatchback = 5).","on_invalid":"reject","example":3,"minimum":1},{"name":"transmission","type":"enum","required":false,"description":"Gearbox as the source labels it. `manual` also returns the rows the source labels `simulated-manual` (measured).","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"automatic"},{"value":"manual","label":"manual"},{"value":"cvt","label":"cvt"},{"value":"simulated-manual","label":"simulated manual"},{"value":"duplex","label":"duplex"}],"example":"automatic"},{"name":"fuel","type":"enum","required":false,"description":"Fuel as the source labels it.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"diesel","label":"diesel"},{"value":"hybrid-petrol","label":"hybrid petrol"}],"example":"diesel","aliases":["fuel_type"]},{"name":"condition","type":"enum","required":false,"description":"Import/condition class: `foreign` = imported used, `local` = locally used, `new` = brand new.","on_invalid":"reject","allowed_values":[{"value":"foreign","label":"foreign"},{"value":"local","label":"local"},{"value":"new","label":"new"}],"example":"foreign","aliases":["selling_condition"]},{"name":"state","type":"string","required":false,"description":"State/region name exactly as the source spells it ('Lagos', 'Nairobi', 'Accra'). See the `locations` action.","on_invalid":"reject","example":"Lagos"},{"name":"city","type":"string","required":false,"description":"City/area name exactly as the source spells it ('Lekki'). See the `locations` action.","on_invalid":"reject","example":"Lekki"},{"name":"warranty_only","type":"boolean","required":false,"description":"Keep only listings the source flags as warranty-backed.","on_invalid":"reject","example":true},{"name":"auction_only","type":"boolean","required":false,"description":"Keep only listings the source flags as auction stock.","on_invalid":"reject","example":true},{"name":"featured_only","type":"boolean","required":false,"description":"Keep only listings the source flags as featured.","on_invalid":"reject","example":true},{"name":"page","type":"integer","required":false,"description":"1-based page. Past the last page the source returns an honest empty window rather than repeating the last one.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (source default window is 24).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["per_page"]}],"returns":"country,currency,page,limit,count,source_total,last_page,has_more,filters_applied,results[]{listing_id,url,title,make,model,year,price,price_before,currency,monthly_installment,financing_available,loan_value,mileage,mileage_unit,transmission,fuel,engine_displacement_cc,engine_type,body_type_id,condition,inspected,accidented,warranty,auction,featured,sold,grade_score,listing_score,city,state,seller_id,listed_at,summary,image,images}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"ng","limit":10}},{"name":"listing_detail","description":"Full public detail for one listing by the `listing_id` that search returns: the search fields plus make/model ids, trim, drive, partially masked VIN, both colours, the dealer name and age, the feature list, every published photo and the market's financing terms.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Opaque listing id from search, e.g. 'r6HW7G352'. The complete Autochek car URL is also accepted.","on_invalid":"reject","example":"r6HW7G352","aliases":["car_id","id","url"]}],"returns":"listing_id,country,url,title,make,model,make_id,model_id,trim,wheel_drive,year,price,price_before,currency,monthly_installment,loan_value,financing_terms,mileage,mileage_unit,transmission,fuel,engine_displacement_cc,engine_type,condition,vin,exterior_color,interior_color,owner_type,seller_name,seller_since,city,state,grade_score,inspected,accidented,warranty,damage_count,features[],images[]{url,label},created_at,updated_at,listed_at","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"r6HW7G352"}},{"name":"makes","description":"The marketplace's published make reference list with the numeric ids the `make_id` search filter needs. The list is group-wide, not per market — the source accepts a country parameter here and ignores it (measured: NG and KE return the identical 257 rows), so no country filter is offered.","required_params":[],"optional_params":["page","limit"],"params":[{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-500. The whole list is 257 rows.","on_invalid":"reject","default":100,"example":500,"minimum":1,"maximum":500,"aliases":["per_page"]}],"returns":"page,limit,count,source_total,last_page,has_more,results[]{id,name}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":100}},{"name":"models","description":"Model reference list: every model the marketplace knows, with its id and its make. Filterable by `make_id`. Note the source has NO working model filter on search — a model id that provably exists in the inventory (Corolla = 1891, carried by 5 of 6 sampled Nigerian Toyotas) returns 0 results, so no `model_id` search filter is offered. Narrow by model with `query` instead, which is measured to work.","required_params":[],"optional_params":["make_id","page","limit"],"params":[{"name":"make_id","type":"integer","required":false,"description":"Restrict to one make's models (Toyota = 106).","on_invalid":"reject","example":106,"minimum":1},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-500.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":500,"aliases":["per_page"]}],"returns":"page,limit,count,source_total,last_page,has_more,results[]{id,name,make{id,name}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"make_id":106}},{"name":"body_types","description":"The 21 published body types with the numeric ids the `body_type_id` search filter needs (SUV = 3, Sedan = 8, Hatchback = 5).","required_params":[],"optional_params":["page","limit"],"params":[{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-500. The whole list is 21 rows.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":500,"aliases":["per_page"]}],"returns":"page,limit,count,source_total,last_page,has_more,results[]{id,name}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"locations","description":"The state or city reference list, giving the exact spellings the `state` and `city` search filters expect. Cities carry their state. Like the make list this reference is group-wide and NOT country-scoped — the source ignores a country parameter here (measured), so the list mixes all markets and no country filter is offered.","required_params":[],"optional_params":["kind","state_id","page","limit"],"params":[{"name":"kind","type":"enum","required":false,"description":"Which reference list to return.","on_invalid":"reject","allowed_values":[{"value":"state","label":"States / regions"},{"value":"city","label":"Cities / areas"}],"default":"state","example":"state"},{"name":"state_id","type":"integer","required":false,"description":"With `kind=city`, restrict to one state's cities.","on_invalid":"reject","example":25,"minimum":1},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-500.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":500,"aliases":["per_page"]}],"returns":"page,limit,count,source_total,last_page,has_more,results[]{id,name,state{id,name}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"kind":"state"}}]},{"name":"autodoc","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Autodoc API — the vehicle-fitment car-parts catalogue: pick a car down to its exact engine variant, then get every part that fits it with price, OE cross-reference, manufacturer specifications, EAN, images, rating and reviews — plus part-number and OE-number lookup across 6.7 million parts, on the UK storefront (GBP), the German one (EUR) or the Spanish one (EUR). No key, account or cookie required","version":"1.4.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/autodoc/v1","spec_available":true,"actions":[{"name":"vehicle_lookup","description":"Walk Autodoc's vehicle tree — this is where every other action starts, because car parts are only meaningful against a specific car. Call it with no parameters for every maker (176: the popular ones flagged `popular: true`, the rest from Autodoc's full maker page, each with `model_count`); add `maker` for that maker's model families; add `model` for the generations (the chassis codes: E82, F20, W204); add `generation` for the actual engine variants, each with Autodoc's numeric vehicle id. Add `vehicle` (or pass a `vehicle_url`) and you get the car itself — its full factory description (engine, kW/hp, fuel, build years, engine code) plus every part category Autodoc stocks for it, ready to feed straight into `search`. Set `market` to `de` or `es` to walk that storefront's tree instead; the slugs are the same on all, so a vehicle resolved on one market can be used on the other.","required_params":[],"optional_params":["market","maker","model","generation","vehicle","vehicle_url"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom (GBP) — autodoc.co.uk"},{"value":"de","label":"Germany (EUR) — autodoc.de"},{"value":"es","label":"Spain (EUR) — autodoc.es"}],"default":"uk","example":"de","aliases":["country","store","domain","site","region"]},{"name":"maker","type":"string","required":false,"description":"The car manufacturer, as the slug Autodoc uses in its own URLs — `bmw`, `vw`, `audi`, `mercedes-benz`, `ford`, `vauxhall`, `toyota`, `renault`. Call `vehicle_lookup` with no parameters to get the full list of makers (176) with their exact slugs; never guess one. Autodoc publishes no open numeric id for a maker (that lives behind a route this API cannot reach), so the slug IS the key.","on_invalid":"reject","example":"bmw","aliases":["make","brand_maker","manufacturer","maker_slug"]},{"name":"model","type":"string","required":false,"description":"The model family slug, as returned by `vehicle_lookup` for your maker — note Autodoc uses German slugs for some families even on the UK site (`1er-reihe` is the BMW 1 Series, `3er-reihe` the 3 Series). Requires `maker`.","on_invalid":"reject","example":"1er-reihe","aliases":["model_slug","series"]},{"name":"generation","type":"string","required":false,"description":"The generation / body slug — the chassis code most owners know their car by (`1-coupe-e82`, `1-e87`, `1-f20`). Returned by `vehicle_lookup` for your model. Requires `maker` and `model`.","on_invalid":"reject","example":"1-coupe-e82","aliases":["gen","generation_slug","chassis"]},{"name":"vehicle","type":"string","required":false,"description":"The exact engine variant — this is what makes a fitment answer true, and `search` REQUIRES it. Pass either the full slug `vehicle_lookup` returns (`12272-118-d`) or just Autodoc's numeric vehicle id (`12272`); both resolve to the same car. Requires `maker`, `model` and `generation`, because Autodoc's vehicle URLs are hierarchical — the id alone has no page of its own. NOTE: this is the ONLY way to scope parts to a car. Autodoc's `?carId=` query parameter looks like it should work and is silently ignored (measured: identical results with it, without it, and with a nonsense value).","on_invalid":"reject","example":"12272-118-d","aliases":["vehicle_id","car_id","carId","engine","vehicle_slug"]},{"name":"vehicle_url","type":"string","required":false,"description":"A full Autodoc vehicle URL instead of the four path parameters — the shortest way to re-use a vehicle you already resolved. Accepted by both `vehicle_lookup` and `search`. Either storefront's spelling works (`autodoc.co.uk/spares/…` or `autodoc.de/ersatzteile/…`) and the URL's own domain SETS the market, so you do not have to pass `market` as well; passing a URL from one storefront together with `market` set to the other is refused rather than silently resolved to one of them.","on_invalid":"ignore","example":"https://www.autodoc.de/ersatzteile/bmw/1er-reihe/1-coupe-e82/12272-118-d","aliases":["url_vehicle"]}],"returns":"level ('makers'|'models'|'generations'|'vehicles'|'vehicle') + items[] whose shape follows the level: makers/models/generations are {slug, name, url, path} (plus maker_id where Autodoc publishes one; makers also carry `popular` — on the storefront's front maker page or only on its full maker page — and `model_count`, the storefront's own tally) and vehicles are {vehicle_id, vehicle_slug, engine_slug, name, engine_label, kw, hp, ccm, fuel, years, url, path} — the full factory spec of each engine variant (engine_label is the whole description, kw/hp/ccm are integers, fuel is Autodoc's own word in the storefront's language, years is the month-precise build window '09.2009-10.2013'; any of the six is null where Autodoc did not publish that row, never invented). At the deepest level you additionally get vehicle{vehicle_id, vehicle_slug, engine_slug, name, description, maker, model, generation, url} and categories[]{slug, category_id, name, url, vehicle_scoped} — the part categories Autodoc stocks for that exact car. meta.pagination is absent here: Autodoc publishes each tree level whole, on one page. HONEST LIMITS: makers, models and generations have no numeric id in Autodoc's public HTML (those ids exist only behind a route this API cannot reach), so their SLUG is the identifier and `maker_id` is null unless the page happened to publish it. `vehicle_id` is always present and is Autodoc's own. A slug that does not exist is a typed NOT_FOUND, not an empty list — Autodoc answers a bad slug with HTTP 200 and the parent page, and this API checks the page's own canonical URL rather than reporting that as zero results. A generation with no engine variants (e.g. IVECO Daily IV Kipper) is a real empty: the storefront's page and its own engine selector list nothing either; meta.notes says so.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"vehicle_url":"https://www.autodoc.de/ersatzteile/bmw/1er-reihe/1-coupe-e82/12272-118-d"}},{"name":"search","description":"The parts that FIT one exact car, in one part category — the question this API exists to answer. Give a `category` (from the `categories` action, or better from the `categories[]` that a `vehicle_lookup` on your vehicle returns) plus the full vehicle: `maker` + `model` + `generation` + `vehicle`, or a single `vehicle_url`. You get Autodoc's own fitment listing — every brand that makes that part for that car, with price, RRP, rating, review count, the manufacturer's part number, the key specifications and the image — 20 per page. THE VEHICLE IS NOT OPTIONAL, and that is Autodoc's data model rather than a limit of this API: a parts list only exists for one exact engine variant. Autodoc's category page, maker page, model page and generation page are all real pages that carry NO product listing whatsoever (measured: 0 parts at every level above the engine variant, 20 at it). Omitting the vehicle returns MISSING_PARAM rather than an empty result set that would cost you a call and tell you nothing. `market` decides which storefront is priced: `uk` (GBP), `de` or `es` (EUR). The same vehicle and the same category work on all three — what changes is the price, the currency and the language of the copy.","required_params":["category"],"optional_params":["maker","model","generation","vehicle","market","vehicle_url","page","max_results"],"params":[{"name":"category","type":"string","required":true,"description":"Which part category to list, as Autodoc's own category slug WITH its numeric id suffix — `brake-pad-set-10130`, `brake-disc-10132`, `air-filter-10360`, `shock-absorber-10175`. Call the `categories` action for all 199 with their ids. The number is the real identifier and the words are decoration: Autodoc resolves `anything-10130` to brake pads, so a slug whose words and id disagree will silently serve the id's category. A bare slug with no id (`brake-pad-set`) is accepted and redirected by Autodoc, and this API reports the category it actually landed on in `category.slug`.","on_invalid":"reject","example":"brake-pad-set-10130","aliases":["category_slug","part","part_category","c"]},{"name":"maker","type":"string","required":false,"description":"The car manufacturer, as the slug Autodoc uses in its own URLs — `bmw`, `vw`, `audi`, `mercedes-benz`, `ford`, `vauxhall`, `toyota`, `renault`. Call `vehicle_lookup` with no parameters to get the full list of makers (176) with their exact slugs; never guess one. Autodoc publishes no open numeric id for a maker (that lives behind a route this API cannot reach), so the slug IS the key.","on_invalid":"reject","example":"bmw","aliases":["make","brand_maker","manufacturer","maker_slug"]},{"name":"model","type":"string","required":false,"description":"The model family slug, as returned by `vehicle_lookup` for your maker — note Autodoc uses German slugs for some families even on the UK site (`1er-reihe` is the BMW 1 Series, `3er-reihe` the 3 Series). Requires `maker`.","on_invalid":"reject","example":"1er-reihe","aliases":["model_slug","series"]},{"name":"generation","type":"string","required":false,"description":"The generation / body slug — the chassis code most owners know their car by (`1-coupe-e82`, `1-e87`, `1-f20`). Returned by `vehicle_lookup` for your model. Requires `maker` and `model`.","on_invalid":"reject","example":"1-coupe-e82","aliases":["gen","generation_slug","chassis"]},{"name":"vehicle","type":"string","required":false,"description":"The exact engine variant — this is what makes a fitment answer true, and `search` REQUIRES it. Pass either the full slug `vehicle_lookup` returns (`12272-118-d`) or just Autodoc's numeric vehicle id (`12272`); both resolve to the same car. Requires `maker`, `model` and `generation`, because Autodoc's vehicle URLs are hierarchical — the id alone has no page of its own. NOTE: this is the ONLY way to scope parts to a car. Autodoc's `?carId=` query parameter looks like it should work and is silently ignored (measured: identical results with it, without it, and with a nonsense value).","on_invalid":"reject","example":"12272-118-d","aliases":["vehicle_id","car_id","carId","engine","vehicle_slug"]},{"name":"market","type":"enum","required":false,"description":"Which Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom (GBP) — autodoc.co.uk"},{"value":"de","label":"Germany (EUR) — autodoc.de"},{"value":"es","label":"Spain (EUR) — autodoc.es"}],"default":"uk","example":"de","aliases":["country","store","domain","site","region"]},{"name":"vehicle_url","type":"string","required":false,"description":"A full Autodoc vehicle URL instead of the four path parameters — the shortest way to re-use a vehicle you already resolved. Accepted by both `vehicle_lookup` and `search`. Either storefront's spelling works (`autodoc.co.uk/spares/…` or `autodoc.de/ersatzteile/…`) and the URL's own domain SETS the market, so you do not have to pass `market` as well; passing a URL from one storefront together with `market` set to the other is refused rather than silently resolved to one of them.","on_invalid":"ignore","example":"https://www.autodoc.de/ersatzteile/bmw/1er-reihe/1-coupe-e82/12272-118-d","aliases":["url_vehicle"]},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-based). Autodoc serves 20 parts per page. Page until `meta.pagination.has_more` is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"max_results","type":"integer","required":false,"description":"How many parts to return in total (1-200). Anything above 20 costs one extra upstream page fetch per additional 20 results, and each Autodoc page is roughly 650KB, so ask for what you will use.","on_invalid":"ignore","default":20,"minimum":1,"maximum":200,"aliases":["limit","max","count"]}],"returns":"parts[]{article_id, article_number, url, title, brand, brand_slug, brand_id, category_name, category_generic_id, price, price_was, rrp, currency, on_sale, rating, rating_stars_out_of_10, review_count, image, images_360_url, specifications[]{name,value}, units_left, in_stock, fits_selected_vehicle} + category{slug, category_id, name, url} + vehicle{...} when you scoped to one. meta.fitment is always 'vehicle' (this action cannot run unscoped) and meta.scope echoes the four path segments that produced the answer, meta.pagination{page, per_page, returned, pages_fetched, has_more, next_page, known_pages_at_least} carries the counts. HONEST LIMITS: Autodoc publishes NO result total anywhere on the page — its pagination strip is a sliding window — so `total_results` is null and `known_pages_at_least` is a lower bound, never a total. `units_left` is Autodoc's own 'ending soon' counter and is null on most rows; it is not a warehouse stock figure and no such figure is published. `in_stock` on a card is true when that counter is above 0 and NULL when it is 0 — 0 appears both on out-of-stock parts and on in-stock kits, so the card cannot tell; `product_detail` is authoritative. meta.completeness_pct is the share of what exists (up to `max_results`): an exhausted listing of 2 parts is 100. `rating` is on a 0-5 scale for consistency with `product_detail`; Autodoc's own listing number is 0-10 and is returned verbatim beside it as `rating_stars_out_of_10`. There is no `sort` parameter because Autodoc's `?sort=` is a no-op (measured: identical price sequence with and without it) and publishing a filter that does not bite is worse than not having one.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"brake-pad-set-10130","maker":"bmw","model":"1er-reihe","generation":"1-coupe-e82","vehicle":"12272-118-d","max_results":20}},{"name":"product_detail","description":"One part in full, by Autodoc's numeric article id (or its URL). Returns the complete image gallery and the 360-degree photo set, the manufacturer's own specification table verbatim (fitting position, dimensions, material, WVA number, weight, EAN), the manufacturer part number, brand, price with currency, availability, shipping cost and return window, the aggregate rating and the customer reviews inline — and, the two fields that matter most in this industry, the full OE cross-reference (every vehicle-manufacturer part number this part replaces) and the equivalent parts Autodoc sells alongside it. `market` picks the storefront — the same `article_id` is the same part on both, priced in GBP on `uk` and EUR on `de`, and `currency` always reports what the page itself said.","required_params":[],"optional_params":["article_id","url","market","max_reviews"],"params":[{"name":"article_id","type":"string","required":false,"description":"Autodoc's own numeric part id, exactly as every other action here returns it. This is the ONLY key `product_detail` needs — the brand in the URL is decoration and Autodoc redirects `/anything/7999106` to the right part. Provide `article_id` or `url`.","on_invalid":"reject","example":"7999106","aliases":["id","pid","product_id","articleId","part_id","autodoc_id"]},{"name":"url","type":"string","required":false,"description":"A full Autodoc part URL — an alternative to `article_id`. Either storefront's domain works and the domain SETS the market, so `autodoc.de/ridex/7999106` returns the same part priced in EUR.","on_invalid":"ignore","example":"https://www.autodoc.co.uk/ridex/7999106","aliases":["product_url","part_url"]},{"name":"market","type":"enum","required":false,"description":"Which Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom (GBP) — autodoc.co.uk"},{"value":"de","label":"Germany (EUR) — autodoc.de"},{"value":"es","label":"Spain (EUR) — autodoc.es"}],"default":"uk","example":"de","aliases":["country","store","domain","site","region"]},{"name":"max_reviews","type":"integer","required":false,"description":"How many of the part's inline reviews to return (0-100). Autodoc publishes roughly 25 on the page itself; there is no second page of them on this route, so asking for more does not fetch more.","on_invalid":"ignore","default":25,"minimum":0,"maximum":100}],"returns":"part{article_id, article_number, sku, url, title, subtitle, brand, category_name, breadcrumb[]{name,url}, description, price, currency, price_valid_until, availability, in_stock, item_condition, shipping_cost, shipping_currency, shipping_label, return_days, rating, rating_best, rating_count, reviews[]{author, text, rating, rating_best}, images[], image, image_count, images_360_url, specifications[]{name,value}, ean, weight_kg, oem_numbers[], oem_references[]{oem_number, vehicle_maker}, compatible_makers[]{maker_id, name}, fits_vehicles[], equivalent_parts[]{article_id, brand_id, category_id, category_generic_id, price, price_was, rating}}. meta.coverage reports which of the high-value fields this particular part carries, so you can see the completeness of the row you were given instead of trusting an average. FIELD NOTES: `ean` and `weight_kg` are lifted out of the manufacturer's spec table by name — they are rows in `specifications`, not separate fields at source, and null means the manufacturer supplied neither (about a third of parts). A car part has NO size/colour variant matrix; the equivalents of one are `oem_references` (what it replaces) and `equivalent_parts` (what replaces it), and both are returned. `compatible_makers` is the list of vehicle makers this part fits; the per-model expansion of that list is loaded by a route this API cannot reach, so it is deliberately absent rather than half-filled. Reviewer names are initials because that is how Autodoc publishes them. Autodoc publishes no stock quantity, and `in_stock` is its own In/OutOfStock flag (from the schema.org offer, or — for out-of-stock parts, whose offer omits it — from the page's buy box; `availability_source` says which). `units_left` is Autodoc's 'ending soon' counter, not a stock level. `weight_kg` is only the manufacturer's own spec row: Autodoc publishes no shipping weight (shipping is a flat per-order rate plus a bulky-goods surcharge on flagged items). meta.extra.timing (every action): clearance ('memory'|'redis' = warm, 'solved'|'waited' = this call paid a Cloudflare clearance, ~14 s), cold_start, fetches, fetch_ms, total_ms.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"article_id":"7999106"}},{"name":"part_search","description":"Autodoc's own catalogue-wide search, across roughly 6.7 million parts. Built for the lookup this trade actually does: paste a manufacturer part number (`1987474465`, `402B0071`) and get that part plus its alternatives, or type plain English (`brake pads`, `wiper blades`) for a normal keyword result set. Results are not scoped to a car — use `search` when you need fitment, and `oem_lookup` when the number you hold came off the vehicle manufacturer's own part. Set `market` to `de` or `es` to search that storefront (EUR). Free text is matched by the STOREFRONT'S OWN search, which only understands its own language: Spanish text on `es`, German on `de`, English on `uk` (measured: 'pastillas de freno' on es = 20/20 brake-pad sets; the same text on de = air fresheners, as on autodoc.de itself). Part numbers work on every market.","required_params":["query"],"optional_params":["market","page","max_results"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for in Autodoc's own site search. This endpoint is built for the way the trade actually works: a MANUFACTURER PART NUMBER (`1987474465`, `402B0071`) returns that exact part plus the alternatives, an OE number often resolves too, and plain English (`brake pads`, `oil filter`) returns a normal keyword result set. Results are NOT scoped to a vehicle — this is the catalogue-wide search. To ask 'what fits MY car', use `search` with a vehicle instead. If you specifically have a VEHICLE MAKER's original number, `oem_lookup` is the better endpoint.","on_invalid":"reject","example":"1987474465","aliases":["q","keyword","search","text","part_number","number"]},{"name":"market","type":"enum","required":false,"description":"Which Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom (GBP) — autodoc.co.uk"},{"value":"de","label":"Germany (EUR) — autodoc.de"},{"value":"es","label":"Spain (EUR) — autodoc.es"}],"default":"uk","example":"de","aliases":["country","store","domain","site","region"]},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-based). Autodoc serves 20 parts per page. Page until `meta.pagination.has_more` is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"max_results","type":"integer","required":false,"description":"How many parts to return in total (1-200). Anything above 20 costs one extra upstream page fetch per additional 20 results, and each Autodoc page is roughly 650KB, so ask for what you will use.","on_invalid":"ignore","default":20,"minimum":1,"maximum":200,"aliases":["limit","max","count"]}],"returns":"parts[] (the same card shape as `search`) + query{text, resolved_title}. meta.pagination as in `search`. HONEST LIMITS: no result total is published, so `total_results` is null. A term Autodoc does not carry returns HTTP 200 with zero parts and `meta.notes` saying so — an honest empty, not a failure. `search` and `part_search` return the SAME `article_id` for the same part, so results from either can be fed straight into `product_detail`.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"1987474465"}},{"name":"oem_lookup","description":"Cross-reference a vehicle manufacturer's ORIGINAL part number to everything Autodoc sells as a replacement for it. Give BMW's 34216774692 and get the Brembo, TRW, Bosch, ATE and budget-brand equivalents, each with price, rating and the manufacturer's own part number. This is the endpoint a workshop or a parts reseller uses, and it is the reverse of the `oem_numbers` list `product_detail` returns for a part. Set `market` to `de` or `es` for that storefront's prices (EUR); the OE number and the parts it resolves to are the same on all three.","required_params":["oem_number"],"optional_params":["market","page","max_results"],"params":[{"name":"oem_number","type":"string","required":true,"description":"A vehicle manufacturer's ORIGINAL part number (BMW 34216774692, VAG 1K0615301AA). Returns every aftermarket part Autodoc sells as a replacement for it — the cross-reference this industry runs on. Spaces and dots are ignored. A number Autodoc does not carry returns a typed NOT_FOUND rather than the catalogue landing page it actually serves.","on_invalid":"reject","example":"34216774692","aliases":["oem","oe","oe_number","number","q"]},{"name":"market","type":"enum","required":false,"description":"Which Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom (GBP) — autodoc.co.uk"},{"value":"de","label":"Germany (EUR) — autodoc.de"},{"value":"es","label":"Spain (EUR) — autodoc.es"}],"default":"uk","example":"de","aliases":["country","store","domain","site","region"]},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-based). Autodoc serves 20 parts per page. Page until `meta.pagination.has_more` is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"max_results","type":"integer","required":false,"description":"How many parts to return in total (1-200). Anything above 20 costs one extra upstream page fetch per additional 20 results, and each Autodoc page is roughly 650KB, so ask for what you will use.","on_invalid":"ignore","default":20,"minimum":1,"maximum":200,"aliases":["limit","max","count"]}],"returns":"parts[] (the same card shape as `search`) + oem{number, normalised, resolved_title, url}. HONEST LIMITS: Autodoc answers an OE number it does not carry with HTTP 200 and its catalogue landing page — which would look like a working result set — so this action checks the page identity and returns a typed NOT_FOUND instead. Supplier part numbers do NOT resolve here (that is what `part_search` is for); only vehicle-manufacturer OE numbers do.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"oem_number":"34216774692"}},{"name":"categories","description":"Autodoc's part-category vocabulary — all 199 leaf categories with the slug and numeric id the `search` action needs, so a caller never has to guess one. Optionally filter with `group` (`brake`, `filter`, `suspension`). `market` picks the storefront, which is what decides the LANGUAGE of the slugs and names — the numeric ids are the same category on both, and a uk slug passed to a de `search` resolves correctly because the number is what Autodoc keys on. Cached hard: this list barely moves.","required_params":[],"optional_params":["market","group"],"params":[{"name":"group","type":"string","required":false,"description":"Optional substring filter over the category list (`brake`, `filter`, `suspension`, `oil`). Case-insensitive, matched against both the category name and its slug. Omit to get all 199. NOTE this matches the words of the storefront you asked for: on `market=de` the names and slugs are German, so `filter` still works (Ölfilter/Luftfilter) but `oil` returns nothing and `öl`/`brems` are what match (measured: `oil` -> 17 categories on uk, 0 on de). Filter on `category_id` instead when you need a market-independent answer — the ids are the same categories on both storefronts.","on_invalid":"ignore","example":"brake","aliases":["section","filter"]},{"name":"market","type":"enum","required":false,"description":"Which Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom (GBP) — autodoc.co.uk"},{"value":"de","label":"Germany (EUR) — autodoc.de"},{"value":"es","label":"Spain (EUR) — autodoc.es"}],"default":"uk","example":"de","aliases":["country","store","domain","site","region"]}],"returns":"categories[]{slug, category_id, name, url}. NOTE these are the catalogue-wide categories. The set Autodoc actually stocks for one specific car is narrower and comes back from `vehicle_lookup` when you pass a vehicle — prefer that list when you have a car, because it cannot contain a category that car has no parts in.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"group":"brake"}}]},{"name":"autolina","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"autolina.ch API — live car listings from Switzerland: ~91,000 new and used cars, vans, campers and classics from ~2,300 Swiss dealers and private sellers. Search by make, model, model group, version text, condition (new / used / demo / classic / pre-registered), fuel (incl. every hybrid type), gearbox, drive, body, colour, canton, price in CHF, mileage, year, horsepower and seats; then pull one listing in full: asking price and new-car list price in CHF, leasing rate, specs, consumption and CO2, battery range, warranty, MFK inspection, equipment, description, photos and the seller with the contact details the listing prints. Plus makes with live counts, models per make, dealer profiles and the dealer directory. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/autolina/v1","spec_available":true,"actions":[{"name":"search","description":"Search autolina.ch's car listings with the filters the source applies natively: make (name or id), model, model group, free text on the version line, condition, fuel, gearbox, drive, body type, colour, canton, price (CHF), mileage, year of first registration, horsepower, seats, listing age, photos-only, MFK-inspected and one dealer's stock. 1-100 rows a page. Every enum is a closed list: an unknown value is rejected instead of silently returning the whole catalogue.","required_params":[],"optional_params":["make","make_id","model_id","model_group_id","query","condition","fuel","body_type","transmission","drive","exterior_color","canton","price_min","price_max","mileage_min","mileage_max","year_min","year_max","power_hp_min","power_hp_max","seats_min","listed_within_days","with_photos_only","mfk_inspected","dealer_id","sort","page","limit"],"params":[{"name":"make","type":"string","required":false,"description":"Make by name or slug as the site writes it (vw, bmw, mercedes-benz, skoda, tesla). Resolved against the site's live make list; an unknown make is rejected, never ignored. Use `make_id` to skip the lookup.","on_invalid":"reject","example":"vw","aliases":["brand"]},{"name":"make_id","type":"string","required":false,"description":"Make id(s) from the `makes` action (52 = VW, 13 = BMW), comma-separated for several.","on_invalid":"reject","example":"52","value_pattern":"\\d+(\\s*,\\s*\\d+)*"},{"name":"model_id","type":"string","required":false,"description":"Model id(s) from the `models` action (609 = VW Golf). Search rows carry the same `model_id`.","on_invalid":"reject","example":"609","value_pattern":"\\d+(\\s*,\\s*\\d+)*"},{"name":"model_group_id","type":"string","required":false,"description":"Model group id(s) from the `models` action — e.g. 74 = 'GOLF (alle)', which covers Golf, Golf Variant, Golf Plus, Golf Sportsvan and Golf Cabriolet.","on_invalid":"reject","example":"74","value_pattern":"\\d+(\\s*,\\s*\\d+)*"},{"name":"query","type":"string","required":false,"description":"Free text matched against the listing's version line (e.g. 'golf gti', 'tdi', 'amg', 'long range'). Several words must all appear.","on_invalid":"reject","example":"golf gti","aliases":["q","keyword","version"]},{"name":"condition","type":"array","required":false,"description":"Vehicle condition as the source classifies it. One value or several comma-separated (any of them).","on_invalid":"reject","allowed_values":[{"value":"new","label":"New car (Neuwagen)"},{"value":"used","label":"Used (Occasion / Gebraucht)"},{"value":"classic","label":"Classic / oldtimer (Oldtimer)"},{"value":"demo","label":"Ex-demonstrator (Vorführwagen)"},{"value":"pre_registered","label":"Pre-registered new car (Neues Fahrzeug mit Tageszulassung)"}],"example":"used","value_pattern":"(?i)\\s*(new|used|classic|demo|pre_registered)\\s*(\\s*[,;|]\\s*(new|used|classic|demo|pre_registered)\\s*)*"},{"name":"fuel","type":"array","required":false,"description":"Fuel / drive energy. One value or several comma-separated (any of them).","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol (Benzin)"},{"value":"diesel","label":"Diesel (Diesel)"},{"value":"electric","label":"Electric (Elektro)"},{"value":"cng","label":"Natural gas (CNG) / petrol (Erdgas (CNG) / Benzin)"},{"value":"lpg","label":"Liquid gas (LPG) / petrol (Flüssiggas (LPG) / Benzin)"},{"value":"bioethanol","label":"Bioethanol (Bioethanol)"},{"value":"full_hybrid_petrol","label":"Full hybrid petrol/electric (Voll-Hybrid Benzin/Elektro)"},{"value":"full_hybrid_diesel","label":"Full hybrid diesel/electric (Voll-Hybrid Diesel/Elektro)"},{"value":"hydrogen","label":"Hydrogen (Wasserstoff)"},{"value":"mild_hybrid_petrol","label":"Mild hybrid petrol/electric (Mild-Hybrid Benzin/Elektro)"},{"value":"plugin_hybrid_petrol","label":"Plug-in hybrid petrol/electric (Plug-in-Hybrid Benzin/Elektro)"},{"value":"mild_hybrid_diesel","label":"Mild hybrid diesel/electric (Mild-Hybrid Diesel/Elektro)"},{"value":"plugin_hybrid_diesel","label":"Plug-in hybrid diesel/electric (Plug-in-Hybrid Diesel/Elektro)"}],"example":"electric","value_pattern":"(?i)\\s*(petrol|diesel|electric|cng|lpg|bioethanol|full_hybrid_petrol|full_hybrid_diesel|hydrogen|mild_hybrid_petrol|plugin_hybrid_petrol|mild_hybrid_diesel|plugin_hybrid_diesel)\\s*(\\s*[,;|]\\s*(petrol|diesel|electric|cng|lpg|bioethanol|full_hybrid_petrol|full_hybrid_diesel|hydrogen|mild_hybrid_petrol|plugin_hybrid_petrol|mild_hybrid_diesel|plugin_hybrid_diesel)\\s*)*","aliases":["fuel_type"]},{"name":"body_type","type":"array","required":false,"description":"Body type. One value or several comma-separated (any of them).","on_invalid":"reject","allowed_values":[{"value":"cabriolet","label":"Cabriolet (Cabriolet)"},{"value":"coupe","label":"Coupé (Coupé)"},{"value":"suv","label":"SUV / off-roader (SUV / Geländewagen)"},{"value":"small_car","label":"Small car (Kleinwagen)"},{"value":"estate","label":"Estate (Kombi)"},{"value":"saloon","label":"Saloon (Limousine)"},{"value":"pickup","label":"Pick-up (Pick-up)"},{"value":"van","label":"Van / MPV (Van / Minivan)"},{"value":"commercial","label":"Commercial vehicle (Nutzfahrzeug)"},{"value":"camper","label":"Camper (Wohnmobil)"}],"example":"suv","value_pattern":"(?i)\\s*(cabriolet|coupe|suv|small_car|estate|saloon|pickup|van|commercial|camper)\\s*(\\s*[,;|]\\s*(cabriolet|coupe|suv|small_car|estate|saloon|pickup|van|commercial|camper)\\s*)*","aliases":["body"]},{"name":"transmission","type":"array","required":false,"description":"Gearbox. One value or several comma-separated (any of them).","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic (Automatik)"},{"value":"manual","label":"Manual (Handschaltung)"}],"example":"automatic","value_pattern":"(?i)\\s*(automatic|manual)\\s*(\\s*[,;|]\\s*(automatic|manual)\\s*)*","aliases":["gearbox"]},{"name":"drive","type":"array","required":false,"description":"Driven wheels. One value or several comma-separated (any of them).","on_invalid":"reject","allowed_values":[{"value":"all_wheel","label":"All-wheel drive (Allradantrieb)"},{"value":"rear_wheel","label":"Rear-wheel drive (Hinterradantrieb)"},{"value":"front_wheel","label":"Front-wheel drive (Vorderradantrieb)"}],"example":"all_wheel","value_pattern":"(?i)\\s*(all_wheel|rear_wheel|front_wheel)\\s*(\\s*[,;|]\\s*(all_wheel|rear_wheel|front_wheel)\\s*)*","aliases":["drivetrain"]},{"name":"exterior_color","type":"array","required":false,"description":"Exterior colour, one value or several comma-separated.","on_invalid":"reject","allowed_values":[{"value":"anthracite","label":"anthracite"},{"value":"beige","label":"beige"},{"value":"blue","label":"blue"},{"value":"bordeaux","label":"bordeaux"},{"value":"brown","label":"brown"},{"value":"yellow","label":"yellow"},{"value":"gold","label":"gold"},{"value":"gray","label":"gray"},{"value":"green","label":"green"},{"value":"pink","label":"pink"},{"value":"orange","label":"orange"},{"value":"red","label":"red"},{"value":"black","label":"black"},{"value":"silver","label":"silver"},{"value":"turquoise","label":"turquoise"},{"value":"violet","label":"violet"},{"value":"white","label":"white"},{"value":"other","label":"other"}],"example":"black","value_pattern":"(?i)\\s*(anthracite|beige|blue|bordeaux|brown|yellow|gold|gray|green|pink|orange|red|black|silver|turquoise|violet|white|other)\\s*(\\s*[,;|]\\s*(anthracite|beige|blue|bordeaux|brown|yellow|gold|gray|green|pink|orange|red|black|silver|turquoise|violet|white|other)\\s*)*","aliases":["color","colour"]},{"name":"canton","type":"array","required":false,"description":"Seller's canton as a two-letter code (ZH, BE, VD, GE, TI …; FL = Liechtenstein), one or several comma-separated.","on_invalid":"reject","allowed_values":[{"value":"AG","label":"AG"},{"value":"AI","label":"AI"},{"value":"AR","label":"AR"},{"value":"BE","label":"BE"},{"value":"BL","label":"BL"},{"value":"BS","label":"BS"},{"value":"FR","label":"FR"},{"value":"GE","label":"GE"},{"value":"GL","label":"GL"},{"value":"GR","label":"GR"},{"value":"JU","label":"JU"},{"value":"LU","label":"LU"},{"value":"NE","label":"NE"},{"value":"NW","label":"NW"},{"value":"OW","label":"OW"},{"value":"SG","label":"SG"},{"value":"SH","label":"SH"},{"value":"SO","label":"SO"},{"value":"SZ","label":"SZ"},{"value":"TG","label":"TG"},{"value":"TI","label":"TI"},{"value":"UR","label":"UR"},{"value":"VD","label":"VD"},{"value":"VS","label":"VS"},{"value":"ZG","label":"ZG"},{"value":"ZH","label":"ZH"},{"value":"FL","label":"FL"}],"example":"ZH","value_pattern":"(?i)\\s*(AG|AI|AR|BE|BL|BS|FR|GE|GL|GR|JU|LU|NE|NW|OW|SG|SH|SO|SZ|TG|TI|UR|VD|VS|ZG|ZH|FL)\\s*(\\s*[,;|]\\s*(AG|AI|AR|BE|BL|BS|FR|GE|GL|GR|JU|LU|NE|NW|OW|SG|SH|SO|SZ|TG|TI|UR|VD|VS|ZG|ZH|FL)\\s*)*","aliases":["region","state"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in CHF (inclusive).","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in CHF (inclusive).","on_invalid":"reject","example":30000,"minimum":0},{"name":"mileage_min","type":"integer","required":false,"description":"Fewest kilometres (inclusive).","on_invalid":"reject","example":0,"minimum":0,"aliases":["km_min"]},{"name":"mileage_max","type":"integer","required":false,"description":"Most kilometres (inclusive).","on_invalid":"reject","example":50000,"minimum":0,"aliases":["km_max"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of first registration (inclusive).","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest year of first registration (inclusive).","on_invalid":"reject","example":2024,"minimum":1900,"maximum":2100},{"name":"power_hp_min","type":"integer","required":false,"description":"Lowest power in hp (PS), inclusive.","on_invalid":"reject","example":150,"minimum":0,"aliases":["hp_min"]},{"name":"power_hp_max","type":"integer","required":false,"description":"Highest power in hp (PS), inclusive. Any power filter returns only listings that state their power.","on_invalid":"reject","example":300,"minimum":0,"aliases":["hp_max"]},{"name":"seats_min","type":"integer","required":false,"description":"Fewest seats (inclusive).","on_invalid":"reject","example":7,"minimum":1,"maximum":99},{"name":"listed_within_days","type":"enum","required":false,"description":"Only listings put online in the last N days.","on_invalid":"reject","allowed_values":[{"value":"1","label":"listed in the last 1 day(s)"},{"value":"2","label":"listed in the last 2 day(s)"},{"value":"3","label":"listed in the last 3 day(s)"},{"value":"7","label":"listed in the last 7 day(s)"},{"value":"14","label":"listed in the last 14 day(s)"},{"value":"30","label":"listed in the last 30 day(s)"}],"example":"7"},{"name":"with_photos_only","type":"boolean","required":false,"description":"Only listings that have at least one photo.","on_invalid":"reject","default":false,"example":true},{"name":"mfk_inspected","type":"boolean","required":false,"description":"Only cars that passed the Swiss MFK inspection (frisch ab MFK).","on_invalid":"reject","default":false,"example":true},{"name":"dealer_id","type":"string","required":false,"description":"Only one seller's stock: `seller.seller_id` of a listing or `dealer_id` of the `dealers` action.","on_invalid":"reject","example":"9990","value_pattern":"\\d{1,10}","aliases":["seller_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's default order (newest listing first, with premium placement)"},{"value":"newest","label":"Newest listing first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"mileage_asc","label":"Fewest kilometres first"},{"value":"mileage_desc","label":"Most kilometres first"},{"value":"year_asc","label":"Oldest first registration first"},{"value":"year_desc","label":"Newest first registration first"},{"value":"make_asc","label":"Make and model A-Z"},{"value":"make_desc","label":"Make and model Z-A"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number. The source serves every matching row (no depth cap below the total was found), so page × limit can reach the total.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"listings[]: listing_id, url, title, source_title, make, make_id, make_slug, model, model_id, model_slug, version, condition (new|used|classic|demo|pre_registered), condition_code, is_new_listing (the site's 'recently listed' badge — NOT the condition), price (asking price, integer CHF), currency, lease_rate_monthly, lease_type, first_registration (ISO date), year, construction_year, mileage_km, power_hp, power_kw, engine_ccm, fuel, fuel_code, transmission, transmission_code, drive, drive_code, body_type, body_type_code, exterior_color, exterior_color_code, interior_color, location{postcode, city, canton, country}, seller{type (dealer|private), name, logo}, is_premium, quality_seals[], image, images[], video_url, updated_at. meta: total, total_is_exact, pagination{page, limit, last_page, has_more}, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"vw","model_group_id":"74","fuel":"petrol","year_min":2018,"sort":"price_asc"}},{"name":"listing","description":"One listing in full by its id: make, model and version, condition, asking price and the new-car list price in CHF, monthly leasing rate, first registration, mileage, power in hp and kW, engine size, cylinders, gears, doors, seats, weights, fuel consumption, CO2, energy label, Euro norm, battery capacity and range, warranty, MFK inspection date, part-exchange and WIR payment, standard and optional equipment, the seller's description, every photo, views, dates, and the seller (dealer or private) with the address, phone, WhatsApp and e-mail the listing page prints. A removed listing returns NOT_FOUND.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The `listing_id` of a search row, passed as is (or the number at the end of an autolina.ch/auto/… URL).","on_invalid":"reject","example":"5000000","value_pattern":"\\d{1,10}","aliases":["id","car_id"]}],"returns":"listing{} with the search-row fields plus description, new_price, gross_price, doors, seats, cylinders, gears, kerb_weight_kg, total_weight_kg, trailer_load_braked_kg, fuel_consumption, fuel_consumption_combined_l100km, co2_g_km, energy_efficiency, euronorm, battery_capacity_kwh, battery_range_km, inspection_date, mfk_inspected, warranty{has_warranty, type, text}, part_exchange_possible, wir_payment, financing, eurotax_code, chassis_number, dealer_reference, equipment{standard[], optional[]}, thumbnails[], views, created_at, updated_at, is_online, seller{type, dealer_id, seller_id, name, street, postcode, city, canton, phone, mobile_phone, whatsapp, email, logo, profile_url, offers_test_drive}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"5000000"}},{"name":"makes","description":"Every make on autolina.ch with its live listing count — the ids `search` takes as make_id and `models` takes as make.","required_params":[],"optional_params":[],"params":[],"returns":"makes[{make_id, name, slug, count}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"models","description":"The models of one make with their model groups — the ids `search` takes as model_id and model_group_id.","required_params":["make"],"optional_params":[],"params":[{"name":"make","type":"string","required":false,"description":"Make id (from `makes`) or the make's name/slug (vw, bmw, mercedes-benz).","on_invalid":"reject","example":"vw","aliases":["brand","make_id"]}],"returns":"make{make_id, name, slug}, models[{model_id, name, slug, model_group_id, model_group}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"bmw"}},{"name":"dealer","description":"One dealer's profile: address, canton, phone, WhatsApp, e-mail, website, about text and the makes it has in stock. Its listings: `search` with dealer_id.","required_params":["dealer_id"],"optional_params":[],"params":[{"name":"dealer_id","type":"string","required":true,"description":"Dealer id: `seller.dealer_id` of a listing or `dealer_id` of the `dealers` action.","on_invalid":"reject","example":"9990","value_pattern":"\\d{1,10}","aliases":["seller_id","id"]}],"returns":"dealer{dealer_id, name, url, street, postcode, city, canton, phone, mobile_phone, whatsapp, email, website, logo, banner, about, subscription_expired, has_dealer_page, makes_in_stock[{make_id, name, slug, models_in_stock}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"dealer_id":"9990"}},{"name":"dealers","description":"The dealer directory (~2,300 Swiss dealers), 1-100 a page, optionally by part of the name, by make sold or by quality seal.","required_params":[],"optional_params":["query","make_id","quality_seal_id","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Part of the dealer's name.","on_invalid":"reject","example":"emil frey","aliases":["q","name"]},{"name":"make_id","type":"integer","required":false,"description":"Only dealers selling this make (id from `makes`).","on_invalid":"reject","example":13,"minimum":1},{"name":"quality_seal_id","type":"enum","required":false,"description":"Only dealers carrying this quality seal.","on_invalid":"reject","allowed_values":[{"value":"22","label":"AGVS | UPSA member"},{"value":"23","label":"Garage Plus"},{"value":"24","label":"CarXpert"}],"example":"22"},{"name":"page","type":"integer","required":false,"description":"Page number. The source serves every matching row (no depth cap below the total was found), so page × limit can reach the total.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Dealers per page, 1-100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"dealers[{dealer_id, name, url, street, postcode, city, canton, quality_seals[], makes[]}]; meta.total, meta.pagination.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"garage"}}]},{"name":"automobile-it","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Automobile.it Italy cars","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/automobile-it/v1","spec_available":true,"actions":[{"name":"search","description":"Search native Fiat or Volkswagen car sale listings in Italy.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"enum","required":true,"description":"Supported native brand route, not arbitrary keyword text.","on_invalid":"reject","allowed_values":[{"value":"fiat","label":"Fiat"},{"value":"volkswagen","label":"Volkswagen"}],"example":"fiat"},{"name":"page","type":"integer","required":false,"description":"Native pages 1/2 only.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Locally truncate the native page; advancing skips omitted rows.","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":24}],"returns":"Canonical car listing IDs, original EUR asking price, source vehicle facts and dealer names.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"fiat","page":1,"limit":3}},{"name":"product/detail","description":"Read the canonical car listing returned by search.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Copy results[].id or canonical URL. Numeric source_id alone is insufficient.","on_invalid":"reject","example":"uboldo-fiat-panda-1-2-easypower-lounge/180506605"}],"returns":"Selected car asking price, full description, grouped vehicle specifications and published dealer profile/contact.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"uboldo-fiat-panda-1-2-easypower-lounge/180506605"}}]},{"name":"automobile-tn","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Automobile.tn Tunisia New & Used Cars","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/automobile-tn/v1","spec_available":true,"actions":[{"name":"search","description":"Search used-car adverts on Automobile.tn (Tunisia): brand, model, keyword, price, year, mileage, fiscal power, fuel, gearbox, body, drivetrain, governorate, dealer vs private, and the site's sort orders. 12 adverts per page; the site's own total and per-filter counts come back with every page. Nothing is required: no parameters browses every live advert.","required_params":[],"optional_params":["query","brand","model","price_min","price_max","year_min","year_max","mileage_min","mileage_max","fiscal_power_min","fiscal_power_max","fuel","gearbox","body_type","drivetrain","governorate","seller_type","price_type","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed in the site's 'Mots clefs' box.","on_invalid":"reject","example":"golf","aliases":["q","keyword"]},{"name":"brand","type":"string","required":false,"description":"Brand slug (see `makes`), e.g. audi, mercedes-benz, kia.","on_invalid":"reject","example":"volkswagen","aliases":["make"]},{"name":"model","type":"string","required":false,"description":"Model slug within `brand` (see `makes` with a brand), e.g. golf-8, q5, tucson. Needs `brand`.","on_invalid":"reject","example":"golf-8"},{"name":"price_min","type":"integer","required":false,"description":"Minimum asking price, TND.","on_invalid":"reject","example":30000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum asking price, TND.","on_invalid":"reject","example":90000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Oldest model year.","on_invalid":"reject","example":2018,"minimum":1900},{"name":"year_max","type":"integer","required":false,"description":"Newest model year.","on_invalid":"reject","example":2024,"minimum":1900},{"name":"mileage_min","type":"integer","required":false,"description":"Minimum mileage, km.","on_invalid":"reject","example":0,"minimum":0,"aliases":["km_min"]},{"name":"mileage_max","type":"integer","required":false,"description":"Maximum mileage, km.","on_invalid":"reject","example":100000,"minimum":0,"aliases":["km_max"]},{"name":"fiscal_power_min","type":"integer","required":false,"description":"Minimum fiscal horsepower (CV).","on_invalid":"reject","example":5},{"name":"fiscal_power_max","type":"integer","required":false,"description":"Maximum fiscal horsepower (CV).","on_invalid":"reject","example":9},{"name":"fuel","type":"array","required":false,"description":"Energy (one or a comma list).","on_invalid":"reject","allowed_values":[{"value":"essence","label":"essence"},{"value":"diesel","label":"diesel"},{"value":"mild_hybrid_petrol","label":"mild hybrid petrol"},{"value":"hybrid_petrol","label":"hybrid petrol"},{"value":"plugin_hybrid_petrol","label":"plugin hybrid petrol"},{"value":"mild_hybrid_diesel","label":"mild hybrid diesel"},{"value":"hybrid_diesel","label":"hybrid diesel"},{"value":"plugin_hybrid_diesel","label":"plugin hybrid diesel"},{"value":"electric","label":"electric"}],"example":"diesel"},{"name":"gearbox","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic"}],"example":"automatic"},{"name":"body_type","type":"array","required":false,"description":"Body style (one or a comma list).","on_invalid":"reject","allowed_values":[{"value":"city_car","label":"city car"},{"value":"suv","label":"suv"},{"value":"compact","label":"compact"},{"value":"sedan","label":"sedan"},{"value":"coupe","label":"coupe"},{"value":"van","label":"van"},{"value":"mpv","label":"mpv"},{"value":"pickup","label":"pickup"},{"value":"convertible","label":"convertible"},{"value":"other","label":"other"}],"example":"suv"},{"name":"drivetrain","type":"enum","required":false,"description":"Driven wheels: fwd (traction), rwd (propulsion), awd (intégrale).","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"fwd"},{"value":"rwd","label":"rwd"},{"value":"awd","label":"awd"}],"example":"awd"},{"name":"governorate","type":"array","required":false,"description":"Tunisian governorate (one or a comma list; accents optional).","on_invalid":"reject","allowed_values":[{"value":"ariana","label":"Ariana"},{"value":"beja","label":"Beja"},{"value":"ben arous","label":"Ben Arous"},{"value":"bizerte","label":"Bizerte"},{"value":"gabes","label":"Gabes"},{"value":"gafsa","label":"Gafsa"},{"value":"jendouba","label":"Jendouba"},{"value":"kairouan","label":"Kairouan"},{"value":"kasserine","label":"Kasserine"},{"value":"kebili","label":"Kebili"},{"value":"la manouba","label":"La Manouba"},{"value":"le kef","label":"Le Kef"},{"value":"mahdia","label":"Mahdia"},{"value":"medenine","label":"Medenine"},{"value":"monastir","label":"Monastir"},{"value":"nabeul","label":"Nabeul"},{"value":"sfax","label":"Sfax"},{"value":"sidi bouzid","label":"Sidi Bouzid"},{"value":"siliana","label":"Siliana"},{"value":"sousse","label":"Sousse"},{"value":"tataouine","label":"Tataouine"},{"value":"tozeur","label":"Tozeur"},{"value":"tunis","label":"Tunis"},{"value":"zaghouan","label":"Zaghouan"}],"example":"tunis","value_pattern":"[^\\W\\d_]+(?:[ '\\-][^\\W\\d_]+)*"},{"name":"seller_type","type":"enum","required":false,"description":"pro = dealer/showroom, private = individual.","on_invalid":"reject","allowed_values":[{"value":"pro","label":"pro"},{"value":"private","label":"private"}],"example":"private"},{"name":"price_type","type":"enum","required":false,"description":"regular price, under leasing, or duty unpaid ('non dédouané').","on_invalid":"reject","allowed_values":[{"value":"regular","label":"regular"},{"value":"leased","label":"leased"},{"value":"duty_unpaid","label":"duty unpaid"}],"example":"regular"},{"name":"sort","type":"enum","required":false,"description":"Order. updated = the site's default (last refreshed first).","on_invalid":"reject","allowed_values":[{"value":"updated","label":"updated"},{"value":"popular","label":"popular"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"mileage_asc","label":"mileage asc"},{"value":"mileage_desc","label":"mileage desc"},{"value":"year_asc","label":"year asc"},{"value":"year_desc","label":"year desc"},{"value":"oldest","label":"oldest"},{"value":"newest","label":"newest"}],"default":"updated","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"{total, page, page_size 12, last_page, page_clamped, has_more, sort, filters_applied, listings[], facets{brand[], model[], fuel[], gearbox[], body_type[], drivetrain[], governorate[], seller_type[], color[], price_type[]}}. Each listing: id, url, brand_slug, model_slug, title, version, price_tnd, price_label, currency, mileage_km, year, gearbox, drivetrain, fiscal_power_cv, fuel, governorate, summary, price_rating, price_rating_code, image.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"volkswagen","fuel":"essence","sort":"price_asc"}},{"name":"listing","description":"One used-car advert in full: asking price (with the site's price rating), mileage, first registration, fuel, gearbox, fiscal power, drivetrain, body, condition, previous owners, colours, upholstery, seats, doors, engine size, every equipment item by group, the seller's description, all photos, and the seller block (dealer name, logo, address, stock page; phone for everyone). Pass `url` or `id`.","required_params":[],"optional_params":["url","id","include_pii"],"params":[{"name":"url","type":"string","required":false,"description":"Advert URL, https://www.automobile.tn/fr/occasion/<brand>/<model>/<id> (from `search`). One request.","on_invalid":"reject","example":"https://www.automobile.tn/fr/occasion/audi/q5/131079"},{"name":"id","type":"string","required":false,"description":"Advert id alone (digits). Resolved through the site's own sitemap first: one extra request.","on_invalid":"reject","example":"131079","aliases":["listing_id"]}],"returns":"{id, url, title, version, price_tnd, price_label, price_ld_json, price_mismatch, currency, price_rating, price_rating_code, mileage_km, mileage_ld_json, first_registration, year, fuel, gearbox, fiscal_power_cv, drivetrain, body_type, condition, previous_owners, published_date, governorate, brand, model, exterior_color, interior_color, upholstery, seats, doors, engine_cc, main_specs{}, spec_groups{}, equipment{group: []}, equipment_count, description, images[], images_count, seller{type, name, phone, logo, address, stock_url, slug}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.automobile.tn/fr/occasion/audi/q5/131079"}},{"name":"makes","description":"Brands that have live used-car adverts on Automobile.tn with their counts — or, with `brand`, that brand's models with counts. These are the slugs `search` takes.","required_params":[],"optional_params":["brand"],"params":[{"name":"brand","type":"string","required":false,"description":"Brand slug: returns that brand's models with live counts instead of the brand list.","on_invalid":"reject","example":"audi","aliases":["make"]}],"returns":"{brand, total, makes[{slug, name, count}]} or {brand, total, models[{slug, name, count}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"audi"}},{"name":"new_search","description":"Search Automobile.tn's NEW-car price list (every model sold new in Tunisia): brand, keyword, list-price range, fuel, gearbox, body, drivetrain, seats, fiscal power. Each card is a model with its 'from' price (cheapest version), any promo (old price + the site's discount), and a USD duty-free price where the importer publishes one. 24 models per page.","required_params":[],"optional_params":["query","brand","price_min","price_max","fiscal_power_min","fiscal_power_max","seats_min","seats_max","fuel","gearbox","body_type","drivetrain","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword.","on_invalid":"reject","example":"peugeot","aliases":["q","keyword"]},{"name":"brand","type":"string","required":false,"description":"Brand slug (see `new_brands`).","on_invalid":"reject","example":"hyundai","aliases":["make"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum list price, TND.","on_invalid":"reject","example":50000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum list price, TND.","on_invalid":"reject","example":80000,"minimum":0},{"name":"fiscal_power_min","type":"integer","required":false,"description":"Minimum fiscal horsepower (CV).","on_invalid":"reject","example":4},{"name":"fiscal_power_max","type":"integer","required":false,"description":"Maximum fiscal horsepower (CV).","on_invalid":"reject","example":6},{"name":"seats_min","type":"integer","required":false,"description":"Minimum seats.","on_invalid":"reject","example":7},{"name":"seats_max","type":"integer","required":false,"description":"Maximum seats.","on_invalid":"reject","example":9},{"name":"fuel","type":"array","required":false,"description":"Energy (one or a comma list).","on_invalid":"reject","allowed_values":[{"value":"essence","label":"essence"},{"value":"diesel","label":"diesel"},{"value":"hybrid","label":"hybrid"},{"value":"plugin_hybrid","label":"plugin hybrid"},{"value":"mild_hybrid","label":"mild hybrid"},{"value":"electric","label":"electric"},{"value":"electric_reev","label":"electric reev"}],"example":"electric"},{"name":"gearbox","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic"}],"example":"automatic"},{"name":"body_type","type":"array","required":false,"description":"Body style (one or a comma list).","on_invalid":"reject","allowed_values":[{"value":"city_car","label":"city car"},{"value":"compact","label":"compact"},{"value":"sedan","label":"sedan"},{"value":"suv","label":"suv"},{"value":"coupe","label":"coupe"},{"value":"mpv","label":"mpv"},{"value":"van","label":"van"},{"value":"pickup","label":"pickup"},{"value":"convertible","label":"convertible"},{"value":"minibus","label":"minibus"}],"example":"suv"},{"name":"drivetrain","type":"enum","required":false,"description":"Driven wheels.","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"fwd"},{"value":"rwd","label":"rwd"},{"value":"awd","label":"awd"}],"example":"awd"},{"name":"sort","type":"enum","required":false,"description":"Order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"popular","label":"popular"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"{total, page, page_size 24, last_page, page_clamped, has_more, sort, filters_applied, models[], facets{fuel[], gearbox[], body_type[], drivetrain[], warranty[]}}. Each model: card_id, name, url, brand_slug, model_slug, single_version_slug, price_from_tnd (cheapest version), price_old_tnd, discount_tnd (the site's badge), discount_computed_tnd, price_usd_duty_free, badge, currency, image.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"body_type":"suv","price_max":120000,"sort":"price_asc"}},{"name":"new_brands","description":"Every brand in Automobile.tn's new-car price list, with slug and logo.","required_params":[],"optional_params":[],"params":[],"returns":"{brand_count, brands[{slug, name, url, logo}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"new_versions","description":"All versions (trims) of one new model with each version's list price, promo old price, version id and spec-sheet url, plus the official importer's name, address, phone and fax. Pass `brand`+`model` or `url`.","required_params":[],"optional_params":["brand","model","url"],"params":[{"name":"brand","type":"string","required":false,"description":"Brand slug.","on_invalid":"reject","example":"peugeot","aliases":["make"]},{"name":"model","type":"string","required":false,"description":"Model slug (from `new_search` / a model card url).","on_invalid":"reject","example":"2008"},{"name":"url","type":"string","required":false,"description":"Model page URL instead of brand+model.","on_invalid":"reject","example":"https://www.automobile.tn/fr/neuf/peugeot/2008"}],"returns":"{brand_slug, model_slug, url, title, image, version_count, versions[{version_id, name, url, version_slug, price_tnd, price_old_tnd, discount_computed_tnd, badge, currency}], importer{name, address, phones[], fax[]}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"peugeot","model":"2008"}},{"name":"new_version","description":"Full spec sheet of one new-car version: list price TTC (and USD duty-free price where published), availability, warranty, body, seats, doors, cylinders, fuel, fiscal power, horsepower, torque, engine size, gearbox, gears, drivetrain, dimensions, boot, 0-100, top speed, consumption and every equipment line, plus the importer. Pass `url` or `brand`+`model`+`version`.","required_params":[],"optional_params":["url","brand","model","version"],"params":[{"name":"url","type":"string","required":false,"description":"Version page URL (from `new_versions` or a single-version model card).","on_invalid":"reject","example":"https://www.automobile.tn/fr/neuf/peugeot/208/1.2-l-style"},{"name":"brand","type":"string","required":false,"description":"Brand slug (with model + version).","on_invalid":"reject","example":"peugeot","aliases":["make"]},{"name":"model","type":"string","required":false,"description":"Model slug.","on_invalid":"reject","example":"208"},{"name":"version","type":"string","required":false,"description":"Version slug.","on_invalid":"reject","example":"1.2-l-style"}],"returns":"{version_id, url, brand_slug, model_slug, version_slug, model_name, version_name, price_tnd, price_old_tnd, price_usd_duty_free, price_ld_json, price_mismatch, currency, availability, body_type, warranty, seats, doors, cylinders, fuel, fiscal_power_cv, power_hp, torque_nm, torque_rpm, engine_cc, gearbox, gears, drivetrain, length_mm, width_mm, height_mm, boot_l, acceleration_0_100_s, top_speed_kmh, consumption_mixed_l100, spec_groups{group: {label: value|true}}, image, importer{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.automobile.tn/fr/neuf/peugeot/208/1.2-l-style"}}]},{"name":"autoria","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"AUTO.RIA — Ukraine vehicle marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/autoria/v1","spec_available":true,"actions":[{"name":"search","description":"Search AUTO.RIA and get FULL listings back, not ids: price in all three currencies AUTO.RIA publishes, odometer in kilometres, year, trim, modification, generation, body style, colour, region and city, VIN and plate where the seller publishes them, every photo URL, the accident/credit/customs flags the site prints, and the seller block (dealer name, dealer page and badges, or the private seller's own site id and the site's own masked phone). Covers all eight vehicle categories and the used, new and on-order surfaces. At least one of `make`, `model`, `region`, `city`, `year_from`, `year_to`, `price_from_usd`, `price_to_usd`, `fuel`, `gearbox`, `body_type_id`, `seller_type`, `mileage_from_km`, `mileage_to_km`, `engine_from_l`, `engine_to_l`, `accident_history`, `has_video`, `has_photo`, `vin_verified` or `auction_possible` is normally wanted — calling with none of them returns the whole category, newest/most-relevant first, which is a valid but very broad answer.","required_params":[],"optional_params":["category","listing_type","make","model","year_from","year_to","price_from_usd","price_to_usd","mileage_from_km","mileage_to_km","engine_from_l","engine_to_l","fuel","gearbox","body_type_id","region","city","seller_type","accident_history","has_video","has_photo","vin_verified","auction_possible","sort","page","max_results"],"params":[{"name":"category","type":"enum","required":false,"description":"Which vehicle catalogue to search. Each one is a separate surface with its own inventory; live totals measured 2026-10-01 are in the labels.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"moto","label":"Motorbikes & scooters"},{"value":"water","label":"Boats & watercraft"},{"value":"special","label":"Special machinery"},{"value":"trailers","label":"Trailers"},{"value":"trucks","label":"Trucks & vans"},{"value":"buses","label":"Buses"},{"value":"agricultural","label":"Agricultural machinery"}],"default":"cars","example":"cars","aliases":["vehicle_type","category_id"]},{"name":"listing_type","type":"enum","required":false,"description":"Which AUTO.RIA surface to read. `used` = second-hand stock already in Ukraine (317,695 live) · `new` = new vehicles from dealers/importers (7,399) · `order` = offered to order or in transit (4,330) · `all` = the three together (325,095). New-car adverts are numbered in their OWN id range and are read through their own surface; `search` handles that per row, so a mixed `all` page still returns the right vehicle for every id in it.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Second-hand vehicles already in Ukraine"},{"value":"new","label":"New vehicles from official/importing dealers"},{"value":"order","label":"Vehicles offered to order / in transit"},{"value":"all","label":"Every surface at once"}],"default":"used","example":"used","aliases":["condition","surface"]},{"name":"make","type":"string","required":false,"description":"Manufacturer. Accepts the AUTO.RIA make name as `makes` returns it (e.g. `Audi`, `Volkswagen`) or its numeric id (e.g. `6`). A name costs one extra lookup; the id does not. An unknown name is rejected with the nearest matches named.","on_invalid":"reject","example":"Audi","value_pattern":"[0-9A-Za-zЀ-ӿ .&_/+-]{1,40}","aliases":["brand","marka","make_id"]},{"name":"model","type":"string","required":false,"description":"Model, as `models` returns it (e.g. `Q7`) or its numeric id. Requires `make`. Resolving a model NAME costs one extra lookup.","on_invalid":"reject","example":"Q7","value_pattern":"[0-9A-Za-zЀ-ӿ .&_/+-]{1,40}","aliases":["model_id"]},{"name":"year_from","type":"integer","required":false,"description":"Earliest model year, inclusive. Site parameter `s_yers[0]`.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2030,"aliases":["year_min"]},{"name":"year_to","type":"integer","required":false,"description":"Latest model year, inclusive. Site parameter `po_yers[0]`.","on_invalid":"reject","example":2024,"minimum":1900,"maximum":2030,"aliases":["year_max"]},{"name":"price_from_usd","type":"integer","required":false,"description":"Lowest asking price in US dollars. The site's price filter is denominated in USD — verified by rows: `price_from_usd=60000` returned cars priced $61,000–$285,000 and `price_to_usd=900` returned $320–$900.","on_invalid":"reject","example":5000,"minimum":0,"maximum":10000000,"aliases":["min_price","price_min_usd"]},{"name":"price_to_usd","type":"integer","required":false,"description":"Highest asking price in US dollars (see `price_from_usd`).","on_invalid":"reject","example":20000,"minimum":0,"maximum":10000000,"aliases":["max_price","price_max_usd"]},{"name":"mileage_from_km","type":"integer","required":false,"description":"Lowest odometer reading in KILOMETRES. AUTO.RIA's own filter is denominated in thousands of km, so this is divided by 1000 before it is sent and therefore rounds down to the nearest 1,000 km.","on_invalid":"reject","example":50000,"minimum":0,"maximum":3000000,"aliases":["min_mileage_km"]},{"name":"mileage_to_km","type":"integer","required":false,"description":"Highest odometer reading in kilometres (see `mileage_from_km` for the 1,000 km rounding).","on_invalid":"reject","example":150000,"minimum":0,"maximum":3000000,"aliases":["max_mileage_km"]},{"name":"engine_from_l","type":"number","required":false,"description":"Smallest engine displacement in litres. Site parameter `engineVolumeFrom`.","on_invalid":"reject","example":2.0,"minimum":0,"maximum":30},{"name":"engine_to_l","type":"number","required":false,"description":"Largest engine displacement in litres. Site parameter `engineVolumeTo`.","on_invalid":"reject","example":3.0,"minimum":0,"maximum":30},{"name":"fuel","type":"enum","required":false,"description":"Fuel / drivetrain. Live row counts for the cars category are in the labels. Fuel ids 7 and 9 exist in the site's numbering but return 0 rows, so they are not offered.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol — 138,039 live"},{"value":"diesel","label":"Diesel — 94,505"},{"value":"gas","label":"Gas only — 946"},{"value":"gas-petrol","label":"LPG + petrol — 52,499"},{"value":"hybrid","label":"Hybrid (HEV) — 6,163"},{"value":"electric","label":"Electric — 15,782"},{"value":"methane","label":"CNG + petrol — 233"},{"value":"phev","label":"Plug-in hybrid (PHEV) — 2,208"},{"value":"mhev","label":"Mild hybrid (MHEV) — 815"},{"value":"reev","label":"Range-extender hybrid (REEV) — 39"}],"example":"diesel","aliases":["fuel_type"]},{"name":"gearbox","type":"enum","required":false,"description":"Transmission, from the site's own gearbox list.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual"},{"value":"automatic","label":"Automatic — 147,896 live"},{"value":"tiptronic","label":"Tiptronic"},{"value":"robot","label":"Robot / dual-clutch"},{"value":"cvt","label":"CVT"},{"value":"reducer","label":"Reduction gear"}],"example":"automatic","aliases":["transmission"]},{"name":"body_type_id","type":"integer","required":false,"description":"Body style id. The valid ids for a category come from `reference` with `list=body_types` (for cars: 3 saloon, 4 hatchback, 5 SUV/crossover, 8 MPV …). An unknown id returns 0 rows rather than an error.","on_invalid":"reject","example":5,"minimum":1,"aliases":["body_id","body_style_id"]},{"name":"region","type":"string","required":false,"description":"Oblast / region. Accepts the name as `regions` returns it or its numeric id (e.g. `10` = Kyiv region). Resolving a name costs one extra lookup.","on_invalid":"reject","example":"10","value_pattern":"[0-9A-Za-zЀ-ӿ .'`-]{1,40}","aliases":["state","oblast","region_id"]},{"name":"city","type":"string","required":false,"description":"City. Accepts the name as `regions` with a `region` returns it, or its numeric id (`10` = Kyiv). Resolving a name requires `region` and costs one extra lookup.","on_invalid":"reject","example":"10","value_pattern":"[0-9A-Za-zЀ-ӿ .'`-]{1,40}","aliases":["city_id"]},{"name":"seller_type","type":"enum","required":false,"description":"Who is selling. Both values were confirmed against the rows they return, not just against the total.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private sellers — 296,866 live, 5/5 sampled rows carry no dealer block"},{"value":"dealer","label":"Dealers — 20,840 live, 5/5 sampled rows carry a named dealer"}],"example":"dealer","aliases":["seller"]},{"name":"accident_history","type":"enum","required":false,"description":"Filter on AUTO.RIA's own accident flag. `none` = never in an accident (233,031 live, every sampled row flagged false) · `had_accident` = has accident history (84,673, every sampled row flagged true).","on_invalid":"reject","allowed_values":[{"value":"none","label":"Never in an accident — 233,031 live, 5/5 rows damage=false"},{"value":"had_accident","label":"Has accident history — 84,673 live, 5/5 rows damage=true"}],"example":"none"},{"name":"has_video","type":"boolean","required":false,"description":"Only ads with a video (8,256 live in the cars category).","on_invalid":"reject","example":true},{"name":"has_photo","type":"boolean","required":false,"description":"Only ads with at least one photo (316,322 of 317,695 live — almost all of them, so this filter rarely changes much.","on_invalid":"reject","example":true},{"name":"vin_verified","type":"boolean","required":false,"description":"Only ads whose VIN AUTO.RIA has checked (275,895 live; every sampled row carried a VIN).","on_invalid":"reject","example":true},{"name":"auction_possible","type":"boolean","required":false,"description":"Only sellers open to bidding/haggling (198,149 live; every sampled row carried the flag).","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. `relevance` sends no sort key and uses AUTO.RIA's own ranking — measured stable (two identical calls shared 20/20 ids; three pages of 100 gave 300 rows, 300 unique). `newest` drifts slightly while you page, because ads keep arriving: four pages of 100 gave 400 rows and 399 unique. `price_asc` and `price_desc` share 0 of 20 rows, so they are genuinely opposite orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"AUTO.RIA's own ranking (stable, default)"},{"value":"newest","label":"Newest ad first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"}],"default":"relevance","example":"newest","aliases":["order","order_by"]},{"name":"page","type":"integer","required":false,"description":"1-based result page. Deep paging works: page 500 at 20 rows a page still answered 20 fresh ids.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000},{"name":"max_results","type":"integer","required":false,"description":"Rows to return, 1–40. Each row is a full listing payload, so this is also the number of upstream listing reads. For ids only — thousands of them, up to 100 a page — use `search_ids` instead.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":40,"aliases":["limit"]}],"returns":"{results[], total_available, returned, page, category, listing_type, sort} — `total_available` is AUTO.RIA's own exact count for the query, not a page estimate. Rows carry `price_usd/uah/eur`, `price_currency`, `price_display_usd` + `price_conflict`, `mileage_km` + `mileage_text` + `mileage_conflict`, `fuel`/`engine_capacity_l`, `vin`, `plate_number`, `photo_urls[]`, `is_sold`/`is_active`/`from_archive` and `seller{}`.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"cars","max_results":5}},{"name":"search_ids","description":"The same search, but it returns only AUTO.RIA's own exact total and the advert ids — one upstream request and about 3 KB, whatever the page size. Use it to size a market, to page through tens of thousands of ads cheaply, or to feed `listings`. At least one of `make`, `model`, `region`, `city`, `year_from`, `year_to`, `price_from_usd`, `price_to_usd`, `fuel`, `gearbox`, `body_type_id`, `seller_type`, `mileage_from_km`, `mileage_to_km`, `engine_from_l`, `engine_to_l`, `accident_history`, `has_video`, `has_photo`, `vin_verified` or `auction_possible` is normally wanted — calling with none of them returns the whole category, newest/most-relevant first, which is a valid but very broad answer.","required_params":[],"optional_params":["category","listing_type","make","model","year_from","year_to","price_from_usd","price_to_usd","mileage_from_km","mileage_to_km","engine_from_l","engine_to_l","fuel","gearbox","body_type_id","region","city","seller_type","accident_history","has_video","has_photo","vin_verified","auction_possible","sort","page","max_results"],"params":[{"name":"category","type":"enum","required":false,"description":"Which vehicle catalogue to search. Each one is a separate surface with its own inventory; live totals measured 2026-10-01 are in the labels.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"moto","label":"Motorbikes & scooters"},{"value":"water","label":"Boats & watercraft"},{"value":"special","label":"Special machinery"},{"value":"trailers","label":"Trailers"},{"value":"trucks","label":"Trucks & vans"},{"value":"buses","label":"Buses"},{"value":"agricultural","label":"Agricultural machinery"}],"default":"cars","example":"cars","aliases":["vehicle_type","category_id"]},{"name":"listing_type","type":"enum","required":false,"description":"Which AUTO.RIA surface to read. `used` = second-hand stock already in Ukraine (317,695 live) · `new` = new vehicles from dealers/importers (7,399) · `order` = offered to order or in transit (4,330) · `all` = the three together (325,095). New-car adverts are numbered in their OWN id range and are read through their own surface; `search` handles that per row, so a mixed `all` page still returns the right vehicle for every id in it.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Second-hand vehicles already in Ukraine"},{"value":"new","label":"New vehicles from official/importing dealers"},{"value":"order","label":"Vehicles offered to order / in transit"},{"value":"all","label":"Every surface at once"}],"default":"used","example":"used","aliases":["condition","surface"]},{"name":"make","type":"string","required":false,"description":"Manufacturer. Accepts the AUTO.RIA make name as `makes` returns it (e.g. `Audi`, `Volkswagen`) or its numeric id (e.g. `6`). A name costs one extra lookup; the id does not. An unknown name is rejected with the nearest matches named.","on_invalid":"reject","example":"Audi","value_pattern":"[0-9A-Za-zЀ-ӿ .&_/+-]{1,40}","aliases":["brand","marka","make_id"]},{"name":"model","type":"string","required":false,"description":"Model, as `models` returns it (e.g. `Q7`) or its numeric id. Requires `make`. Resolving a model NAME costs one extra lookup.","on_invalid":"reject","example":"Q7","value_pattern":"[0-9A-Za-zЀ-ӿ .&_/+-]{1,40}","aliases":["model_id"]},{"name":"year_from","type":"integer","required":false,"description":"Earliest model year, inclusive. Site parameter `s_yers[0]`.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2030,"aliases":["year_min"]},{"name":"year_to","type":"integer","required":false,"description":"Latest model year, inclusive. Site parameter `po_yers[0]`.","on_invalid":"reject","example":2024,"minimum":1900,"maximum":2030,"aliases":["year_max"]},{"name":"price_from_usd","type":"integer","required":false,"description":"Lowest asking price in US dollars. The site's price filter is denominated in USD — verified by rows: `price_from_usd=60000` returned cars priced $61,000–$285,000 and `price_to_usd=900` returned $320–$900.","on_invalid":"reject","example":5000,"minimum":0,"maximum":10000000,"aliases":["min_price","price_min_usd"]},{"name":"price_to_usd","type":"integer","required":false,"description":"Highest asking price in US dollars (see `price_from_usd`).","on_invalid":"reject","example":20000,"minimum":0,"maximum":10000000,"aliases":["max_price","price_max_usd"]},{"name":"mileage_from_km","type":"integer","required":false,"description":"Lowest odometer reading in KILOMETRES. AUTO.RIA's own filter is denominated in thousands of km, so this is divided by 1000 before it is sent and therefore rounds down to the nearest 1,000 km.","on_invalid":"reject","example":50000,"minimum":0,"maximum":3000000,"aliases":["min_mileage_km"]},{"name":"mileage_to_km","type":"integer","required":false,"description":"Highest odometer reading in kilometres (see `mileage_from_km` for the 1,000 km rounding).","on_invalid":"reject","example":150000,"minimum":0,"maximum":3000000,"aliases":["max_mileage_km"]},{"name":"engine_from_l","type":"number","required":false,"description":"Smallest engine displacement in litres. Site parameter `engineVolumeFrom`.","on_invalid":"reject","example":2.0,"minimum":0,"maximum":30},{"name":"engine_to_l","type":"number","required":false,"description":"Largest engine displacement in litres. Site parameter `engineVolumeTo`.","on_invalid":"reject","example":3.0,"minimum":0,"maximum":30},{"name":"fuel","type":"enum","required":false,"description":"Fuel / drivetrain. Live row counts for the cars category are in the labels. Fuel ids 7 and 9 exist in the site's numbering but return 0 rows, so they are not offered.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol — 138,039 live"},{"value":"diesel","label":"Diesel — 94,505"},{"value":"gas","label":"Gas only — 946"},{"value":"gas-petrol","label":"LPG + petrol — 52,499"},{"value":"hybrid","label":"Hybrid (HEV) — 6,163"},{"value":"electric","label":"Electric — 15,782"},{"value":"methane","label":"CNG + petrol — 233"},{"value":"phev","label":"Plug-in hybrid (PHEV) — 2,208"},{"value":"mhev","label":"Mild hybrid (MHEV) — 815"},{"value":"reev","label":"Range-extender hybrid (REEV) — 39"}],"example":"diesel","aliases":["fuel_type"]},{"name":"gearbox","type":"enum","required":false,"description":"Transmission, from the site's own gearbox list.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual"},{"value":"automatic","label":"Automatic — 147,896 live"},{"value":"tiptronic","label":"Tiptronic"},{"value":"robot","label":"Robot / dual-clutch"},{"value":"cvt","label":"CVT"},{"value":"reducer","label":"Reduction gear"}],"example":"automatic","aliases":["transmission"]},{"name":"body_type_id","type":"integer","required":false,"description":"Body style id. The valid ids for a category come from `reference` with `list=body_types` (for cars: 3 saloon, 4 hatchback, 5 SUV/crossover, 8 MPV …). An unknown id returns 0 rows rather than an error.","on_invalid":"reject","example":5,"minimum":1,"aliases":["body_id","body_style_id"]},{"name":"region","type":"string","required":false,"description":"Oblast / region. Accepts the name as `regions` returns it or its numeric id (e.g. `10` = Kyiv region). Resolving a name costs one extra lookup.","on_invalid":"reject","example":"10","value_pattern":"[0-9A-Za-zЀ-ӿ .'`-]{1,40}","aliases":["state","oblast","region_id"]},{"name":"city","type":"string","required":false,"description":"City. Accepts the name as `regions` with a `region` returns it, or its numeric id (`10` = Kyiv). Resolving a name requires `region` and costs one extra lookup.","on_invalid":"reject","example":"10","value_pattern":"[0-9A-Za-zЀ-ӿ .'`-]{1,40}","aliases":["city_id"]},{"name":"seller_type","type":"enum","required":false,"description":"Who is selling. Both values were confirmed against the rows they return, not just against the total.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private sellers — 296,866 live, 5/5 sampled rows carry no dealer block"},{"value":"dealer","label":"Dealers — 20,840 live, 5/5 sampled rows carry a named dealer"}],"example":"dealer","aliases":["seller"]},{"name":"accident_history","type":"enum","required":false,"description":"Filter on AUTO.RIA's own accident flag. `none` = never in an accident (233,031 live, every sampled row flagged false) · `had_accident` = has accident history (84,673, every sampled row flagged true).","on_invalid":"reject","allowed_values":[{"value":"none","label":"Never in an accident — 233,031 live, 5/5 rows damage=false"},{"value":"had_accident","label":"Has accident history — 84,673 live, 5/5 rows damage=true"}],"example":"none"},{"name":"has_video","type":"boolean","required":false,"description":"Only ads with a video (8,256 live in the cars category).","on_invalid":"reject","example":true},{"name":"has_photo","type":"boolean","required":false,"description":"Only ads with at least one photo (316,322 of 317,695 live — almost all of them, so this filter rarely changes much.","on_invalid":"reject","example":true},{"name":"vin_verified","type":"boolean","required":false,"description":"Only ads whose VIN AUTO.RIA has checked (275,895 live; every sampled row carried a VIN).","on_invalid":"reject","example":true},{"name":"auction_possible","type":"boolean","required":false,"description":"Only sellers open to bidding/haggling (198,149 live; every sampled row carried the flag).","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. `relevance` sends no sort key and uses AUTO.RIA's own ranking — measured stable (two identical calls shared 20/20 ids; three pages of 100 gave 300 rows, 300 unique). `newest` drifts slightly while you page, because ads keep arriving: four pages of 100 gave 400 rows and 399 unique. `price_asc` and `price_desc` share 0 of 20 rows, so they are genuinely opposite orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"AUTO.RIA's own ranking (stable, default)"},{"value":"newest","label":"Newest ad first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"}],"default":"relevance","example":"newest","aliases":["order","order_by"]},{"name":"page","type":"integer","required":false,"description":"1-based result page. Deep paging works: page 500 at 20 rows a page still answered 20 fresh ids.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000},{"name":"max_results","type":"integer","required":false,"description":"Ids to return, 1–100. 100 is the site's own page ceiling: asking for 101, 150, 200 or 500 all returned exactly 100.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":100,"aliases":["limit","countpage"]}],"returns":"{listing_ids[], total_available, returned, page, category, listing_type, sort}.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"cars","make":"6","max_results":50}},{"name":"listing","description":"One AUTO.RIA advert in full, by id. Returns everything the advert page publishes: the three-currency price with the seller's own currency named, the odometer in kilometres, trim and modification, VIN and plate where published, every photo URL, the accident/credit/customs/abroad flags, and the seller. A SOLD or ARCHIVED advert is a successful answer carrying `is_sold`, `sold_at_utc`, `is_active` and `from_archive` — only an id AUTO.RIA has never issued returns NOT_FOUND.","required_params":["listing_id"],"optional_params":["listing_type"],"params":[{"name":"listing_id","type":"string","required":true,"description":"AUTO.RIA advert id, as `search` / `search_ids` return it (e.g. `38876558`). New-car ids are shorter (`2085460`) and resolve through the same call.","on_invalid":"reject","example":"38876558","value_pattern":"\\d{1,12}","aliases":["id","auto_id","advert_id"]},{"name":"listing_type","type":"enum","required":false,"description":"Which id namespace the advert id belongs to. AUTO.RIA numbers NEW-car adverts separately from second-hand ones and the two ranges OVERLAP: id 2085460 is a Peugeot 2008 among the new cars and an archived Subaru Forester among the used ones, and both answer HTTP 200. Pass `new` for an id that came out of a `new` search; `used` (the default) covers ids from `used`, `order` and `all` searches. `search` routes every id automatically, so this only matters when you bring your own id.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Second-hand / on-order advert ids"},{"value":"new","label":"New-car advert ids"}],"default":"used","example":"used"}],"returns":"One row in the same shape `search` returns.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"38876558"}},{"name":"listings","description":"Up to 25 adverts in one call, in the same shape as `listing`, and cheaper per advert than 25 single calls. Ids AUTO.RIA does not know come back in `not_found` instead of failing the call; if the upstream cuts the batch short, the rows it did return are still returned and the shortfall is reported in `meta`.","required_params":["listing_ids"],"optional_params":["listing_type"],"params":[{"name":"listing_ids","type":"string","required":true,"description":"Up to 25 AUTO.RIA advert ids, comma-separated. Ids that do not exist are reported in `not_found` rather than failing the call.","on_invalid":"reject","example":"38876558,40419902,40299426","value_pattern":"[\\d, ]{1,400}","aliases":["ids"]},{"name":"listing_type","type":"enum","required":false,"description":"Which id namespace the advert id belongs to. AUTO.RIA numbers NEW-car adverts separately from second-hand ones and the two ranges OVERLAP: id 2085460 is a Peugeot 2008 among the new cars and an archived Subaru Forester among the used ones, and both answer HTTP 200. Pass `new` for an id that came out of a `new` search; `used` (the default) covers ids from `used`, `order` and `all` searches. `search` routes every id automatically, so this only matters when you bring your own id.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Second-hand / on-order advert ids"},{"value":"new","label":"New-car advert ids"}],"default":"used","example":"used"}],"returns":"{results[], not_found[], requested, returned}.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_ids":"38876558,40419902,40299426"}},{"name":"makes","description":"Every manufacturer AUTO.RIA lists for a vehicle category, with the id the `make` filter takes. 500+ entries for cars, including Chinese EV brands most catalogues do not carry.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"enum","required":false,"description":"Which vehicle catalogue to search. Each one is a separate surface with its own inventory; live totals measured 2026-10-01 are in the labels.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"moto","label":"Motorbikes & scooters"},{"value":"water","label":"Boats & watercraft"},{"value":"special","label":"Special machinery"},{"value":"trailers","label":"Trailers"},{"value":"trucks","label":"Trucks & vans"},{"value":"buses","label":"Buses"},{"value":"agricultural","label":"Agricultural machinery"}],"default":"cars","example":"cars","aliases":["vehicle_type","category_id"]}],"returns":"{results[{id, name}], returned, category}.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"cars"}},{"name":"models","description":"Every model AUTO.RIA lists under one manufacturer, with the id the `model` filter takes.","required_params":["make"],"optional_params":["category"],"params":[{"name":"make","type":"string","required":false,"description":"Manufacturer. Accepts the AUTO.RIA make name as `makes` returns it (e.g. `Audi`, `Volkswagen`) or its numeric id (e.g. `6`). A name costs one extra lookup; the id does not. An unknown name is rejected with the nearest matches named.","on_invalid":"reject","example":"Audi","value_pattern":"[0-9A-Za-zЀ-ӿ .&_/+-]{1,40}","aliases":["brand","marka","make_id"]},{"name":"category","type":"enum","required":false,"description":"Which vehicle catalogue to search. Each one is a separate surface with its own inventory; live totals measured 2026-10-01 are in the labels.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"moto","label":"Motorbikes & scooters"},{"value":"water","label":"Boats & watercraft"},{"value":"special","label":"Special machinery"},{"value":"trailers","label":"Trailers"},{"value":"trucks","label":"Trucks & vans"},{"value":"buses","label":"Buses"},{"value":"agricultural","label":"Agricultural machinery"}],"default":"cars","example":"cars","aliases":["vehicle_type","category_id"]}],"returns":"{results[{id, name}], returned, make, make_id, category}.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"6"}},{"name":"regions","description":"Ukraine's oblasts with the ids the `region` filter takes. Pass `region` to get that oblast's cities with the ids the `city` filter takes instead.","required_params":[],"optional_params":["region"],"params":[{"name":"region","type":"string","required":false,"description":"Oblast / region. Accepts the name as `regions` returns it or its numeric id (e.g. `10` = Kyiv region). Resolving a name costs one extra lookup.","on_invalid":"reject","example":"10","value_pattern":"[0-9A-Za-zЀ-ӿ .'`-]{1,40}","aliases":["state","oblast","region_id"]}],"returns":"{results[{id, name}], returned, level} — `level` is `regions` or `cities`.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"region":"10"}},{"name":"reference","description":"AUTO.RIA's own closed lists, so nobody has to guess an id: vehicle categories, body styles, gearbox types and drive types. Drive type is returned on every listing but is NOT filterable — measured, and said here rather than discovered by a customer.","required_params":["list"],"optional_params":["category"],"params":[{"name":"list","type":"enum","required":true,"description":"Which reference list to return.","on_invalid":"reject","allowed_values":[{"value":"categories","label":"Vehicle categories"},{"value":"body_types","label":"Body styles for the category"},{"value":"gearboxes","label":"Gearbox types for the category"},{"value":"drive_types","label":"Drive types (returned on rows, NOT filterable)"}],"example":"body_types"},{"name":"category","type":"enum","required":false,"description":"Which vehicle catalogue to search. Each one is a separate surface with its own inventory; live totals measured 2026-10-01 are in the labels.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"moto","label":"Motorbikes & scooters"},{"value":"water","label":"Boats & watercraft"},{"value":"special","label":"Special machinery"},{"value":"trailers","label":"Trailers"},{"value":"trucks","label":"Trucks & vans"},{"value":"buses","label":"Buses"},{"value":"agricultural","label":"Agricultural machinery"}],"default":"cars","example":"cars","aliases":["vehicle_type","category_id"]}],"returns":"{results[{id, name, parent_id?}], returned, list, category}.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"list":"body_types"}}]},{"name":"autoscout24","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"AutoScout24 API — search and view used and new car listings across Europe on autoscout24 (price, mileage, specs, dealer info and deal ratings)","version":"1.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/autoscout24/v1","spec_available":true,"actions":[{"name":"search","description":"Paginated car search by make (+ model/filters) across EU TLDs; deal signals priceEvaluation+superDeal","required_params":[],"optional_params":["make","model","model_group","country","page","sort","desc","price_min","price_max","year_min","year_max","mileage_min","mileage_max","fuel","transmission","body_type","zip","radius","power_min","power_max","super_deal","seller_type","offer_type"],"params":[{"name":"make","type":"string","required":false,"description":"Vehicle make/brand slug (e.g. bmw, audi, volkswagen). Empty = all makes. An unknown make is refused (INVALID_PARAM).","on_invalid":"reject","example":"bmw"},{"name":"model","type":"string","required":false,"description":"Model within the make: the slug (golf, golf-gti, 320, c-klasse, model-3) or the numeric `id` from the models action. Needs make. Applied exactly as the country's own site applies it (on .de 'golf' covers the whole Golf range; on .at/.it the Golf model only). An unknown model is refused (INVALID_PARAM), never answered unfiltered.","on_invalid":"reject","example":"320"},{"name":"model_group","type":"string","required":false,"description":"Model line, broader than model: 'golf' = every Golf (Golf, Variant, GTI, Plus …). Accepts a model_groups/model_lines slug or id from the models action. Needs make; with model, the model must belong to it.","on_invalid":"reject","example":"3er"},{"name":"country","type":"enum","required":false,"description":"AutoScout24 country edition (TLD) — each is a separate marketplace.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"it","label":"Italy"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"at","label":"Austria"},{"value":"be","label":"Belgium"},{"value":"ch","label":"Switzerland"},{"value":"pl","label":"Poland"},{"value":"ro","label":"Romania"},{"value":"hr","label":"Croatia"},{"value":"lu","label":"Luxembourg"}],"default":"de","example":"de"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Sort key (closed list; the site answers 0 rows for keys it does not know). distance needs zip.","on_invalid":"ignore","allowed_values":[{"value":"standard","label":"The site's default order"},{"value":"price","label":"Price"},{"value":"age","label":"Newest listing first"},{"value":"mileage","label":"Mileage"},{"value":"power","label":"Power"},{"value":"year","label":"First registration"},{"value":"distance","label":"Distance from zip (needs zip)"}],"example":"price"},{"name":"desc","type":"boolean","required":false,"description":"Sort descending (true) instead of ascending.","on_invalid":"ignore","example":true},{"name":"price_min","type":"integer","required":false,"description":"Minimum price (local currency).","on_invalid":"ignore","example":5000},{"name":"price_max","type":"integer","required":false,"description":"Maximum price (local currency).","on_invalid":"ignore","example":30000},{"name":"year_min","type":"integer","required":false,"description":"Earliest first-registration year.","on_invalid":"ignore","example":2015},{"name":"year_max","type":"integer","required":false,"description":"Latest first-registration year.","on_invalid":"ignore","example":2024},{"name":"mileage_min","type":"integer","required":false,"description":"Minimum mileage (km).","on_invalid":"ignore"},{"name":"mileage_max","type":"integer","required":false,"description":"Maximum mileage (km).","on_invalid":"ignore","example":100000},{"name":"fuel","type":"enum","required":false,"description":"Fuel code(s), comma-separated for several: B petrol, D diesel, E electric, 2 electric/petrol hybrid, 3 electric/diesel hybrid, L LPG, C CNG, H hydrogen, M ethanol, O other. Names (petrol, diesel, electric, lpg, cng …) are accepted.","on_invalid":"ignore","allowed_values":[{"value":"B","label":"Petrol (Benzin)"},{"value":"D","label":"Diesel"},{"value":"E","label":"Electric"},{"value":"2","label":"Electric/petrol hybrid"},{"value":"3","label":"Electric/diesel hybrid"},{"value":"L","label":"LPG (Autogas)"},{"value":"C","label":"CNG (natural gas)"},{"value":"H","label":"Hydrogen"},{"value":"M","label":"Ethanol"},{"value":"O","label":"Other"}],"example":"D"},{"name":"transmission","type":"enum","required":false,"description":"Gearbox: A automatic, M manual, S semi-automatic (automatic/manual/semi_automatic accepted).","on_invalid":"ignore","allowed_values":[{"value":"A","label":"Automatic"},{"value":"M","label":"Manual"},{"value":"S","label":"Semi-automatic"}],"example":"A"},{"name":"body_type","type":"enum","required":false,"description":"Body type code: 1 small car, 2 convertible, 3 coupe, 4 SUV/off-road/pickup, 5 estate, 6 sedan, 12 van/minibus, 13 transporter, 7 other (names like suv, estate, sedan accepted).","on_invalid":"ignore","allowed_values":[{"value":"1","label":"Small car"},{"value":"2","label":"Convertible"},{"value":"3","label":"Coupe"},{"value":"4","label":"SUV / off-road / pickup"},{"value":"5","label":"Estate"},{"value":"6","label":"Sedan"},{"value":"12","label":"Van / minibus"},{"value":"13","label":"Transporter"},{"value":"7","label":"Other"}]},{"name":"zip","type":"string","required":false,"description":"Postal code centre for a radius search (country of the selected edition). An unknown zip is refused. Rows the site marks search_result_type 'Deliverable' (home delivery) can lie outside the radius.","on_invalid":"reject","example":"10115"},{"name":"radius","type":"integer","required":false,"description":"Search radius (km) around zip. Without it the site uses 200 km.","on_invalid":"ignore","example":50},{"name":"power_min","type":"integer","required":false,"description":"Minimum engine power (kW).","on_invalid":"ignore"},{"name":"power_max","type":"integer","required":false,"description":"Maximum engine power (kW).","on_invalid":"ignore"},{"name":"super_deal","type":"boolean","required":false,"description":"Only listings flagged superDeal (priced well below market).","on_invalid":"ignore","example":true},{"name":"seller_type","type":"enum","required":false,"description":"Seller type: D dealer, P private (dealer/private accepted).","on_invalid":"ignore","allowed_values":[{"value":"D","label":"Dealer"},{"value":"P","label":"Private"}],"example":"D"},{"name":"offer_type","type":"enum","required":false,"description":"Offer type: U used, N new, J annual car (Jahreswagen), O classic, D demonstration car, S pre-registered (used/new/annual/classic/demo/pre_registered accepted).","on_invalid":"ignore","allowed_values":[{"value":"U","label":"Used"},{"value":"N","label":"New"},{"value":"J","label":"Annual car (Jahreswagen)"},{"value":"O","label":"Classic / oldtimer"},{"value":"D","label":"Demonstration car"},{"value":"S","label":"Pre-registered (day registration)"}]}],"returns":"listings[] (priceEvaluation + superDeal per card), page, total, total_pages, has_more, next_page","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"volkswagen","model":"golf","seller_type":"P","country":"at"}},{"name":"listing","description":"Full listing detail by url/path or id (description, prices, vehicle, images, seller, leasing, warranty)","required_params":[],"optional_params":["url","path","id","country"],"params":[{"name":"url","type":"string","required":false,"description":"Full AS24 listing URL or site-relative path (from a search result's url/path).","on_invalid":"reject","example":"/angebote/bmw-318-318i-touring-attiva-benzin-cat_ma13mo1640-fb7acb22-cce5-4ab1-8340-7dbe9160bca9"},{"name":"path","type":"string","required":false,"description":"Site-relative listing path (alternative to url).","on_invalid":"reject"},{"name":"id","type":"string","required":false,"description":"AS24 listing id (alternative to url/path).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"AutoScout24 country edition (TLD) — each is a separate marketplace.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"it","label":"Italy"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"at","label":"Austria"},{"value":"be","label":"Belgium"},{"value":"ch","label":"Switzerland"},{"value":"pl","label":"Poland"},{"value":"ro","label":"Romania"},{"value":"hr","label":"Croatia"},{"value":"lu","label":"Luxembourg"}],"default":"de","example":"de"}],"returns":"listing{} — full detail (vehicle, prices, equipment, seller, images, leasing, warranty)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"/angebote/bmw-318-318i-touring-attiva-benzin-cat_ma13mo1640-fb7acb22-cce5-4ab1-8340-7dbe9160bca9","country":"de"}},{"name":"makes","description":"Vehicle makes taxonomy from search hub page","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"AutoScout24 country edition (TLD) — each is a separate marketplace.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"it","label":"Italy"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"at","label":"Austria"},{"value":"be","label":"Belgium"},{"value":"ch","label":"Switzerland"},{"value":"pl","label":"Poland"},{"value":"ro","label":"Romania"},{"value":"hr","label":"Croatia"},{"value":"lu","label":"Luxembourg"}],"default":"de","example":"de"}],"returns":"makes[] — {id, name, slug} for every supported brand","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de"}},{"name":"models","description":"Models taxonomy for a make — the values search takes as model / model_group","required_params":["make"],"optional_params":["country"],"params":[{"name":"make","type":"string","required":true,"description":"Vehicle make/brand slug to list models for (e.g. bmw).","on_invalid":"reject","example":"bmw"},{"name":"country","type":"enum","required":false,"description":"AutoScout24 country edition (TLD) — each is a separate marketplace.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"it","label":"Italy"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"at","label":"Austria"},{"value":"be","label":"Belgium"},{"value":"ch","label":"Switzerland"},{"value":"pl","label":"Poland"},{"value":"ro","label":"Romania"},{"value":"hr","label":"Croatia"},{"value":"lu","label":"Luxembourg"}],"default":"de","example":"de"}],"returns":"models[], model_groups[], model_lines[] (each {id, name, slug}) for the make","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"volkswagen"}},{"name":"filter_options","description":"Available filter dimensions (fuel, body, transmission, etc.) from taxonomy blob","required_params":[],"optional_params":["make","country"],"params":[{"name":"make","type":"string","required":false,"description":"Optional make to scope the filter options to.","on_invalid":"reject","example":"bmw"},{"name":"country","type":"enum","required":false,"description":"AutoScout24 country edition (TLD) — each is a separate marketplace.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"it","label":"Italy"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"at","label":"Austria"},{"value":"be","label":"Belgium"},{"value":"ch","label":"Switzerland"},{"value":"pl","label":"Poland"},{"value":"ro","label":"Romania"},{"value":"hr","label":"Croatia"},{"value":"lu","label":"Luxembourg"}],"default":"de","example":"de"}],"returns":"filters{} — available filter dimensions and their option codes","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"bmw"}},{"name":"seller_listings","description":"Listings for a dealer/private seller by customer id (cid)","required_params":["cid"],"optional_params":["country","page","seller_id"],"params":[{"name":"cid","type":"string","required":true,"description":"AS24 dealer/seller customer id (cid) — from a listing's seller block.","on_invalid":"reject","example":"12345"},{"name":"country","type":"enum","required":false,"description":"AutoScout24 country edition (TLD) — each is a separate marketplace.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"it","label":"Italy"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"at","label":"Austria"},{"value":"be","label":"Belgium"},{"value":"ch","label":"Switzerland"},{"value":"pl","label":"Poland"},{"value":"ro","label":"Romania"},{"value":"hr","label":"Croatia"},{"value":"lu","label":"Luxembourg"}],"default":"de","example":"de"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"seller_id","type":"string","required":false,"description":"Alias for cid (accepted interchangeably).","on_invalid":"reject"}],"returns":"listings[] for this seller, page, total, total_pages, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"cid":"12345"}},{"name":"browse_links","description":"SEO browse graph: cities, body types, model lines, top models (interlinking from search page)","required_params":[],"optional_params":["make","country"],"params":[{"name":"make","type":"string","required":false,"description":"Optional make to scope the browse graph to.","on_invalid":"reject","example":"bmw"},{"name":"country","type":"enum","required":false,"description":"AutoScout24 country edition (TLD) — each is a separate marketplace.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"it","label":"Italy"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"at","label":"Austria"},{"value":"be","label":"Belgium"},{"value":"ch","label":"Switzerland"},{"value":"pl","label":"Poland"},{"value":"ro","label":"Romania"},{"value":"hr","label":"Croatia"},{"value":"lu","label":"Luxembourg"}],"default":"de","example":"de"}],"returns":"groups[] — SEO browse graph (cities, body types, model lines, top models)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"bmw"}}]},{"name":"autotrader","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"AutoTrader UK, Canada, South Africa and Australia API — search used and new car listings on autotrader.co.uk with full advert detail: price, price indicator, mileage, spec, images and dealer reviews (US market: use the cars-com engine)","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/autotrader/v1","spec_available":true,"actions":[{"name":"search","description":"Car listings: ca/za/au support make, model and page (prices CAD/ZAR/AUD; mileage km). UK filters and postcode use a UK centroid if omitted","required_params":[],"optional_params":["make","model","postcode","min_price","max_price","min_year","max_year","min_mileage","max_mileage","fuel","body_type","transmission","radius","page","market"],"params":[{"name":"make","type":"string","required":false,"description":"Vehicle make / manufacturer (e.g. 'BMW', 'Ford').","on_invalid":"ignore","example":"BMW"},{"name":"model","type":"string","required":false,"description":"Vehicle model (e.g. '3 Series'). Use together with make.","on_invalid":"ignore","example":"3 Series"},{"name":"postcode","type":"string","required":false,"description":"UK postcode to anchor the location-based search (defaults to a central England postcode if omitted).","on_invalid":"ignore","example":"SW1A 1AA","aliases":["zip"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in GBP.","on_invalid":"ignore","example":5000,"minimum":0,"aliases":["price_from"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in GBP.","on_invalid":"ignore","example":25000,"minimum":0,"aliases":["price_to"]},{"name":"min_year","type":"integer","required":false,"description":"Earliest year of manufacture.","on_invalid":"ignore","example":2018,"minimum":1900,"maximum":2100,"aliases":["year_from"]},{"name":"max_year","type":"integer","required":false,"description":"Latest year of manufacture.","on_invalid":"ignore","example":2024,"minimum":1900,"maximum":2100,"aliases":["year_to"]},{"name":"min_mileage","type":"integer","required":false,"description":"Minimum mileage (miles).","on_invalid":"ignore","example":0,"minimum":0},{"name":"max_mileage","type":"integer","required":false,"description":"Maximum mileage (miles).","on_invalid":"ignore","example":60000,"minimum":0},{"name":"fuel","type":"enum","required":false,"description":"Fuel type. Common values shown; other AutoTrader fuel labels are also accepted (forwarded to the FilterName enum).","on_invalid":"ignore","allowed_values":[{"value":"Petrol","label":"Petrol"},{"value":"Diesel","label":"Diesel"},{"value":"Electric","label":"Electric"},{"value":"Hybrid","label":"Hybrid"},{"value":"Plug-in Hybrid","label":"Plug-in Hybrid"}],"example":"Petrol","aliases":["fuel_type"]},{"name":"body_type","type":"enum","required":false,"description":"Body style. Common values shown; other AutoTrader body labels are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"Hatchback","label":"Hatchback"},{"value":"Saloon","label":"Saloon"},{"value":"Estate","label":"Estate"},{"value":"SUV","label":"SUV"},{"value":"Coupe","label":"Coupe"},{"value":"Convertible","label":"Convertible"},{"value":"MPV","label":"MPV"}],"example":"SUV"},{"name":"transmission","type":"enum","required":false,"description":"Gearbox type.","on_invalid":"ignore","allowed_values":[{"value":"Manual","label":"Manual"},{"value":"Automatic","label":"Automatic"}],"example":"Automatic"},{"name":"radius","type":"integer","required":false,"description":"Search radius in miles around the postcode.","on_invalid":"ignore","example":50,"minimum":0,"aliases":["distance"]},{"name":"page","type":"integer","required":false,"description":"Results page (paginated). Default 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"market","type":"enum","required":false,"description":"Marketplace region. uk, ca, za and au return listings; us is currently unavailable (use the cars-com engine for US).","on_invalid":"ignore","allowed_values":[{"value":"ca","label":"Canada (autotrader.ca)"},{"value":"za","label":"South Africa (autotrader.co.za)"},{"value":"au","label":"Australia (autotrader.com.au)"},{"value":"uk","label":"United Kingdom — AutoTrader UK (autotrader.co.uk)"},{"value":"us","label":"United States — AutoTrader US (autotrader.com) — use the cars-com engine instead"}],"default":"uk","example":"uk","aliases":["country"]}],"returns":"listings[]{advertId, title, price, rrp, make, model, year, mileage, vehicleLocation, sellerType, images, fpaLink, ...}, page_info{page, page_count, total_results}, market","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"BMW","model":"3 Series","postcode":"SW1A 1AA","market":"uk"}},{"name":"listing_detail","description":"Full advert (price+priceIndicator+deviation, mileage, full spec [fuel/trans/body/doors/seats/engine], description, images[], dealer+reviews+address)","required_params":[],"optional_params":["id","url","postcode","market"],"params":[{"name":"id","type":"string","required":false,"description":"AutoTrader advert id (CA: UUID; other markets: digits). Use a search listing's advertId, or provide its full url.","on_invalid":"reject","example":"202401011234567","aliases":["advert_id","advertId","listing_id","listingId"]},{"name":"url","type":"string","required":false,"description":"Full advert URL for the selected market, as an alternative to id.","on_invalid":"ignore","example":"https://www.autotrader.co.uk/car-details/202401011234567","aliases":["fpa_url"]},{"name":"postcode","type":"string","required":false,"description":"UK postcode to anchor the location-based search (defaults to a central England postcode if omitted).","on_invalid":"ignore","example":"SW1A 1AA","aliases":["zip"]},{"name":"market","type":"enum","required":false,"description":"Marketplace region. uk, ca, za and au return listings; us is currently unavailable (use the cars-com engine for US).","on_invalid":"ignore","allowed_values":[{"value":"ca","label":"Canada (autotrader.ca)"},{"value":"za","label":"South Africa (autotrader.co.za)"},{"value":"au","label":"Australia (autotrader.com.au)"},{"value":"uk","label":"United Kingdom — AutoTrader UK (autotrader.co.uk)"},{"value":"us","label":"United States — AutoTrader US (autotrader.com) — use the cars-com engine instead"}],"default":"uk","example":"uk","aliases":["country"]}],"returns":"listing{price, priceIndicatorRating, priceDeviation, mileage, registration, year, specification{make,model,fuel,transmission,bodyType,doors,seats,engine}, description, images[], dealer{name,reviews,location}}, market","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.autotrader.co.uk/car-details/202401011234567"}}]},{"name":"autovit","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Autovit Romania vehicle listings","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/autovit/v1","spec_available":true,"actions":[{"name":"search","description":"Search the qualified native BMW or Volkswagen passenger-car listings.","required_params":["make"],"optional_params":["page","limit"],"params":[{"name":"make","type":"string","required":true,"description":"","on_invalid":"reject","allowed_values":[{"value":"bmw","label":"BMW"},{"value":"volkswagen","label":"Volkswagen"}],"example":"bmw"},{"name":"page","type":"integer","required":false,"description":"","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":24}],"returns":"Canonical listing ids, native advertised price and currency, vehicle facts and public seller names. Prices may have purchase conditions.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"make":"bmw","page":1,"limit":2}},{"name":"product/detail","description":"Read a canonical public vehicle listing.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"","on_invalid":"reject","example":"autoturisme/anunt/bmw-seria-5-ID7HOxJY.html"}],"returns":"Native advertised price, meaningful description, specifications and public seller profile. Encrypted phone/VIN are not plaintext.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"autoturisme/anunt/bmw-seria-5-ID7HOxJY.html"}}]},{"name":"avito","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Avito.ru API scraper - Russia's largest classifieds site: goods, cars and real estate search with location, price, seller-type and category filters, and the full ad record with parameters, seller rating and views. No account, no browser; private sellers' personal data withheld.","version":"0.1.5","pii_redact_default":true,"mint_reusable":null,"base_path":"/avito/v1","spec_available":true,"actions":[{"name":"search","description":"Search Avito.ru, Russia's largest classifieds site, by keyword and/or category anywhere in Russia or in one city or region: price in RUB (free, unpublished, 'from' and salary-range prices labelled), seller type, name, rating and reviews, address and nearby metro, images, description snippet, parameters summary, delivery and reserved flags, paid-placement flags. Filter by location, category, price, private or company seller and Avito delivery; sort by newest, relevance or price.","required_params":[],"optional_params":["query","location","category","price_min","price_max","seller_type","delivery_only","category_detection","sort","page","include_sponsored","include_fallback_results","include_pii","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into Avito's search box (Russian or Latin).","on_invalid":"reject","example":"диван"},{"name":"location","type":"string","required":false,"description":"Avito location slug (moskva, sankt-peterburg, kazan, moskovskaya_oblast …), a major city name (Москва) or 'all' for all of Russia. The locations action finds slugs.","on_invalid":"reject","default":"all","example":"moskva"},{"name":"category","type":"string","required":false,"description":"Category node id, Russian name or path from the categories action (mebel_i_interer, telefony/mobilnye_telefony, vakansii, predlozheniya_uslug).","on_invalid":"reject","example":"mebel_i_interer"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in RUB.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in RUB.","on_invalid":"reject","minimum":0},{"name":"seller_type","type":"enum","required":false,"description":"private (individuals) or company (shops and businesses).","on_invalid":"reject","allowed_values":[{"value":"private","label":"private"},{"value":"company","label":"company"}]},{"name":"delivery_only","type":"boolean","required":false,"description":"Only ads with Avito Delivery.","on_invalid":"reject"},{"name":"category_detection","type":"boolean","required":false,"description":"Avito turns many keywords into a category + filters (iphone → Телефоны/Apple). true (default) follows Avito like the site does; false keeps the plain keyword search.","on_invalid":"reject","default":true},{"name":"sort","type":"enum","required":false,"description":"newest (default), relevance (Avito's default order, where paid rows rank first), price_asc, price_desc, discount (goods: biggest discount first).","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"discount","label":"discount"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (50 rows per page). Avito stops at page 30 (1,500 rows).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":30},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep rows with paid placement ('Продвинуто', view boosts), flagged is_promoted. Off by default: they are dropped and counted in sponsored_dropped.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When Avito finds nothing it pads the page with unrelated ads; return them separately in fallback_results.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' names, typed addresses and exact coordinates, which are withheld by default.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Avito refuses (0 = engine default).","on_invalid":"ignore","default":0,"minimum":0,"maximum":20}],"returns":"listings[]{ad_id, title, url, category{category_id, name, slug, root_category_id}, subtitle, price, price_min, price_max, price_is_from, currency, price_text, price_period, is_free, price_not_published, price_before_discount, discount_percent, price_lowered, price_per_unit{value, unit}, published_at, location{location_id, name, address, nearby[], slug, name_source}, coordinates{lat, lng, precision}, coordinates_withheld, address_as_typed, seller{type, type_label, has_shop, name, name_withheld, name_hidden_by_avito, profile_id, profile_url, rating, rating_scale, reviews_count, closed_ads_count, reseller_likely, reseller_reasons[], info[], badges[]}, images[], images_count, has_video, description_snippet, params_summary, badges[], development_name, realty_type{category_type, transaction_type, rent_term}, is_promoted, paid_services[], is_xl, is_reserved, delivery_available, delivery_text, is_verified_item}, count, total, pageable_total, page, has_more, sort_applied, location, filters_applied, query_interpreted_as{category_path, note}, sponsored_dropped, promoted_on_page, fallback_results_dropped, fallback_results[], search_url","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"диван","location":"moskva"}},{"name":"cars/search","description":"Search Avito Auto - used and new cars anywhere in Russia or in one city: price (dealer 'from' prices with the price before discount), make/model, parameters summary (engine, power, gearbox, drive, body), dealer or private seller with rating, address, images and paid-placement flags. Filter by make, model, used/new, year, mileage, fuel, drive, price and seller type; sort by newest, price, year or mileage.","required_params":[],"optional_params":["location","make","model","condition","year_min","year_max","mileage_min","mileage_max","fuel","drive","price_min","price_max","seller_type","query","sort","page","include_sponsored","include_pii","max_rotations"],"params":[{"name":"location","type":"string","required":false,"description":"Avito location slug (moskva, sankt-peterburg, kazan, moskovskaya_oblast …), a major city name (Москва) or 'all' for all of Russia. The locations action finds slugs.","on_invalid":"reject","default":"all","example":"moskva"},{"name":"make","type":"string","required":false,"description":"Make as it appears in Avito URLs (toyota, lada_vaz, bmw, geely, haval).","on_invalid":"reject","example":"toyota"},{"name":"model","type":"string","required":false,"description":"Model slug as in Avito URLs (camry, granta, x5); needs make.","on_invalid":"reject","example":"camry"},{"name":"condition","type":"enum","required":false,"description":"used or new cars.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used"},{"value":"new","label":"new"}]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year (needs make).","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest year (needs make).","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest mileage, km (needs make).","on_invalid":"reject","minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Highest mileage, km (needs make).","on_invalid":"reject","minimum":0},{"name":"fuel","type":"array","required":false,"description":"petrol, diesel, gas, hybrid, electric (needs make).","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"gas","label":"gas"},{"value":"hybrid","label":"hybrid"},{"value":"diesel","label":"diesel"},{"value":"electric","label":"electric"}]},{"name":"drive","type":"array","required":false,"description":"front, rear, all_wheel (needs make).","on_invalid":"reject","allowed_values":[{"value":"rear","label":"rear"},{"value":"front","label":"front"},{"value":"all_wheel","label":"all_wheel"}]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in RUB.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in RUB.","on_invalid":"reject","minimum":0},{"name":"seller_type","type":"enum","required":false,"description":"private owners or dealers (needs make).","on_invalid":"reject","allowed_values":[{"value":"private","label":"private"},{"value":"company","label":"company"}]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into Avito's search box (Russian or Latin).","on_invalid":"reject","example":"диван"},{"name":"sort","type":"enum","required":false,"description":"newest (default), relevance (Avito's default order, where paid rows rank first), price_asc, price_desc, year_desc, mileage_asc.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"year_desc","label":"year_desc"},{"value":"mileage_asc","label":"mileage_asc"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (50 rows per page). Avito stops at page 30 (1,500 rows).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":30},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep rows with paid placement ('Продвинуто', view boosts), flagged is_promoted. Off by default: they are dropped and counted in sponsored_dropped.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' names, typed addresses and exact coordinates, which are withheld by default.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Avito refuses (0 = engine default).","on_invalid":"ignore","default":0,"minimum":0,"maximum":20}],"returns":"listings[]{ad_id, title, url, category{category_id, name, slug, root_category_id}, subtitle, price, price_min, price_max, price_is_from, currency, price_text, price_period, is_free, price_not_published, price_before_discount, discount_percent, price_lowered, price_per_unit{value, unit}, published_at, location{location_id, name, address, nearby[], slug, name_source}, coordinates{lat, lng, precision}, coordinates_withheld, address_as_typed, seller{type, type_label, has_shop, name, name_withheld, name_hidden_by_avito, profile_id, profile_url, rating, rating_scale, reviews_count, closed_ads_count, reseller_likely, reseller_reasons[], info[], badges[]}, images[], images_count, has_video, description_snippet, params_summary, badges[], development_name, realty_type{category_type, transaction_type, rent_term}, is_promoted, paid_services[], is_xl, is_reserved, delivery_available, delivery_text, is_verified_item}, count, total, pageable_total, page, has_more, sort_applied, location, filters_applied, query_interpreted_as{category_path, note}, sponsored_dropped, promoted_on_page, fallback_results_dropped, fallback_results[], search_url","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"toyota","location":"moskva"}},{"name":"real_estate/search","description":"Search Avito Real Estate - apartments, rooms, houses, land, garages and commercial property for sale, long-term or daily rent: price or rent per month/day, price per m², address with nearby metro and walking time, residential complex, agency/developer/owner, images and paid-placement flags. Filter by transaction, property type, rooms, area, new-build or resale, seller type and price.","required_params":["transaction"],"optional_params":["location","property_type","rooms","area_min","area_max","market","seller_type","price_min","price_max","query","sort","page","include_sponsored","include_pii","max_rotations"],"params":[{"name":"transaction","type":"enum","required":true,"description":"sale, rent_long (long-term rent), rent_daily (daily rent), rent (both rent kinds; land, garages and commercial property).","on_invalid":"reject","allowed_values":[{"value":"sale","label":"sale"},{"value":"rent_long","label":"rent_long"},{"value":"rent_daily","label":"rent_daily"},{"value":"rent","label":"rent"}],"example":"rent_long"},{"name":"location","type":"string","required":false,"description":"Avito location slug (moskva, sankt-peterburg, kazan, moskovskaya_oblast …), a major city name (Москва) or 'all' for all of Russia. The locations action finds slugs.","on_invalid":"reject","default":"all","example":"moskva"},{"name":"property_type","type":"enum","required":false,"description":"apartment (default), room, house, land, garage, commercial.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"apartment"},{"value":"room","label":"room"},{"value":"house","label":"house"},{"value":"land","label":"land"},{"value":"garage","label":"garage"},{"value":"commercial","label":"commercial"}],"default":"apartment"},{"name":"rooms","type":"array","required":false,"description":"Apartments: studio, 1-9, 10_plus, open_plan.","on_invalid":"reject","allowed_values":[{"value":"studio","label":"studio"},{"value":"1","label":"1"},{"value":"2","label":"2"},{"value":"3","label":"3"},{"value":"4","label":"4"},{"value":"5","label":"5"},{"value":"6","label":"6"},{"value":"7","label":"7"},{"value":"8","label":"8"},{"value":"9","label":"9"},{"value":"10_plus","label":"10_plus"},{"value":"open_plan","label":"open_plan"}]},{"name":"area_min","type":"integer","required":false,"description":"Apartments: smallest total area, m².","on_invalid":"reject","minimum":0},{"name":"area_max","type":"integer","required":false,"description":"Apartments: largest total area, m².","on_invalid":"reject","minimum":0},{"name":"market","type":"enum","required":false,"description":"Apartments for sale: secondary (resale) or new_build.","on_invalid":"reject","allowed_values":[{"value":"secondary","label":"secondary"},{"value":"new_build","label":"new_build"}]},{"name":"seller_type","type":"enum","required":false,"description":"Apartments for sale: private, developer, agency. Apartments for rent: owner, agency.","on_invalid":"reject","allowed_values":[{"value":"private","label":"private"},{"value":"developer","label":"developer"},{"value":"agency","label":"agency"},{"value":"owner","label":"owner"}]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in RUB.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in RUB.","on_invalid":"reject","minimum":0},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into Avito's search box (Russian or Latin).","on_invalid":"reject","example":"диван"},{"name":"sort","type":"enum","required":false,"description":"newest (default), relevance (Avito's default order, where paid rows rank first), price_asc, price_desc.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (50 rows per page). Avito stops at page 30 (1,500 rows).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":30},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep rows with paid placement ('Продвинуто', view boosts), flagged is_promoted. Off by default: they are dropped and counted in sponsored_dropped.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' names, typed addresses and exact coordinates, which are withheld by default.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Avito refuses (0 = engine default).","on_invalid":"ignore","default":0,"minimum":0,"maximum":20}],"returns":"listings[]{ad_id, title, url, category{category_id, name, slug, root_category_id}, subtitle, price, price_min, price_max, price_is_from, currency, price_text, price_period, is_free, price_not_published, price_before_discount, discount_percent, price_lowered, price_per_unit{value, unit}, published_at, location{location_id, name, address, nearby[], slug, name_source}, coordinates{lat, lng, precision}, coordinates_withheld, address_as_typed, seller{type, type_label, has_shop, name, name_withheld, name_hidden_by_avito, profile_id, profile_url, rating, rating_scale, reviews_count, closed_ads_count, reseller_likely, reseller_reasons[], info[], badges[]}, images[], images_count, has_video, description_snippet, params_summary, badges[], development_name, realty_type{category_type, transaction_type, rent_term}, is_promoted, paid_services[], is_xl, is_reserved, delivery_available, delivery_text, is_verified_item}, count, total, pageable_total, page, has_more, sort_applied, location, filters_applied, query_interpreted_as{category_path, note}, sponsored_dropped, promoted_on_page, fallback_results_dropped, fallback_results[], search_url","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"transaction":"rent_long","location":"sankt-peterburg"}},{"name":"listing","description":"The full Avito ad by id or URL, in any category: title, status, price (from/range/free/unpublished labelled, price before discount), full description, every published parameter with its Russian label and grouped building/rent-terms/house-rules/requirements blocks, car and property summaries, Avito's own market price estimate for apartments, all images, address with nearby metro, seller type, shop name, rating, reviews, reply time and verification, view counts and expiry date.","required_params":["ad_id"],"optional_params":["include_pii","max_rotations"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The Avito ad id (the digits at the end of an ad URL) or the full URL.","on_invalid":"reject","example":"8341164961"},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' names, typed addresses and exact coordinates, which are withheld by default.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Avito refuses (0 = engine default).","on_invalid":"ignore","default":0,"minimum":0,"maximum":20}],"returns":"listing{ad_id, title, url, status, closed_status_text, category{}, breadcrumbs[], price, price_min, price_max, price_is_from, currency, price_text, price_period, is_free, price_not_published, price_before_discount, discount_percent, price_lowered, price_per_unit{}, published_or_raised_text, expires_at, description, params[]{attribute_id, name, value}, param_groups{building[], rent_terms[], house_rules[], requirements[], …}, vehicle{year, mileage_km, generation, modification, engine, gearbox, drive, body_type, colour, condition, owners, vin}, property{rooms, area_m2, kitchen_area_m2, living_area_m2, floor, renovation, market_estimate{estimated, lowest, highest, verdict}}, images[], images_count, location{location_id, name, slug, address, district, nearby[]}, coordinates{lat, lng, precision, radius_m}, seller{type, type_label, has_shop, name, name_withheld, profile_id, profile_url, shop_name, contact_person, on_avito_since, on_avito_since_date (YYYY-MM), rating, rating_scale, reviews_count, reseller_likely, reseller_reasons[], reply_time, is_verified, inn_verified, phone_available, phone_masked}, views{total, today}, delivery_available, is_reserved}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"ad_id":"8341164961"}},{"name":"categories","description":"Avito's category tree (591 nodes: transport, real estate, jobs, services, electronics, home, fashion, hobbies, animals, business) with node ids, Russian names and the paths the search action takes.","required_params":[],"optional_params":["query"],"params":[{"name":"query","type":"string","required":false,"description":"Optional filter on the category name or path.","on_invalid":"reject","example":"диван"}],"returns":"categories[]{node_id, category_id, name, path, level, parent_node_id}, count, source","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"диван"}},{"name":"locations","description":"Find Avito location slugs (cities, towns and regions) for the location parameter: search by Russian or Latin name; Avito's own lookup adds the region and location id.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Town or region name (Russian or transliterated), at least 2 letters.","on_invalid":"reject","example":"казань"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Avito refuses (0 = engine default).","on_invalid":"ignore","default":0,"minimum":0,"maximum":20}],"returns":"locations[]{slug, name, region, location_id, source}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"диван"}},{"name":"suggest","description":"Avito's own search-box suggestions for what a user is typing, with the category and filters Avito would apply for each.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The text typed so far (max 64 characters).","on_invalid":"reject","example":"айфо"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Avito refuses (0 = engine default).","on_invalid":"ignore","default":0,"minimum":0,"maximum":20}],"returns":"suggestions[]{query, category_id, filters{}}, related_words[], count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"диван"}}]},{"name":"avito-ma","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Avito.ma API scraper — Morocco's largest classifieds marketplace: keyword and category search across second-hand goods, cars, real estate, jobs and services, filtered by city, district, price range, private-vs-professional seller and Avito's own ad flags; full ad detail with the vertical's own attributes and the public seller profile, plus live category and city resolvers — French/Arabic listings, prices in dirham, no key required","version":"1.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/avito-ma/v1","spec_available":true,"actions":[{"name":"search","description":"Search Avito.ma by keyword and/or category, narrowed by city, district, price range, seller type and Avito's own ad flags. Covers every vertical on the site — phones, cars, apartments, furniture, jobs, services — and returns Avito's own result page (about 35-38 rows) with the total, the price both as a number and as the string the card prints, the seller's profile and phone number as the card publishes them and that vertical's own attribute rows. Every filter is verified against Avito's own parse of the request, so a value Avito does not understand is reported instead of quietly returning the whole catalogue. `ad_type` picks the sale, rent, holiday-rent or flat-share tree of a category (1010 + rent = apartments to let) and every row is checked to be of that type. Avito's new-development project cards (no ad id, not bound by the district filter) come back separately in `projects[]`, never mixed into `listings[]`. Give at least one of `q` or `category`.","required_params":[],"optional_params":["q","category","city","area","ad_type","price_min","price_max","seller_type","ad_options","page","lang"],"params":[{"name":"q","type":"string","required":false,"description":"Free-text keyword. Avito.ma's own search is French/Arabic and matches the ad title and body ('iphone', 'appartement', 'voiture occasion', 'شقة'). Optional: give `category` instead to browse a whole section. At least one of `q` or `category` is required.","on_invalid":"ignore","example":"iphone","aliases":["query","keyword","search"]},{"name":"category","type":"integer","required":false,"description":"Avito.ma category id — a root (7100 Market, 1000 Immobilier, 2000 Véhicules, 6000 Entreprise) or a leaf (5010 phones, 2010 used cars, 2040 vehicle parts, 1010 apartments). Property leaf ids are shared by the sale, rent, holiday-rent and flat-share trees (1010 = apartments in all four): add `ad_type` to pick the tree, otherwise the sale tree is used. Call the `categories` action for the live tree with every id.","on_invalid":"ignore","example":5010,"aliases":["category_id"]},{"name":"city","type":"string","required":false,"description":"One Moroccan city, as its Avito slug or its name — 'casablanca', 'Marrakech', 'fes' (Avito strips the accents: Fès → fes, Béni Mellal → beni_mellal). Common English/French spellings are mapped: Fez, Marrakesh, Tangier, Casa, Tetuan, El Aaiun, Al Hoceima, Chaouen, Mazagan. The `locations` action lists every one Avito publishes with its slug and its live ad count. A city Avito does not know is rejected, never silently widened to the whole country.","on_invalid":"ignore","example":"casablanca","aliases":["city_slug","ville"]},{"name":"area","type":"string","required":false,"description":"A district inside the chosen city ('maarif', 'medina_de_rabat'). Requires `city`. Take it from the `locations` action, which lists every city's districts.","on_invalid":"ignore","example":"maarif","aliases":["area_slug","district","secteur"]},{"name":"ad_type","type":"enum","required":false,"description":"Which tree of a `category` to search: for sale, long-term rent, holiday rent or flat-share. With category 1010 (apartments), 'rent' returns apartments to let (tree 1300), 'holiday_rent' holiday lets (1500), 'shared_rent' flat-shares (1400). Also works on cars (2100 + rent = car rental) and trucks. Needs a `category`: Avito's keyword search across all categories does not filter by ad type, so a rent type without a category is rejected. A category that does not exist in that ad type (5010 phones + rent) is rejected too — never answered with the wrong ad type. Each row echoes its own `ad_type` (SELL, LET, VAC_RENT, CO_RENT).","on_invalid":"ignore","allowed_values":[{"value":"sell","label":"For sale (à vendre) — the site default"},{"value":"rent","label":"Long-term rent (à louer) — property (1300 tree), cars (2020 / 2100), trucks and machinery"},{"value":"holiday_rent","label":"Holiday / daily rent (location de vacances) — property (1500 tree)"},{"value":"shared_rent","label":"Flat-share (colocation) — property (1400 tree)"}],"default":"sell","example":"rent","aliases":["type"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price, in the currency the ads publish (Moroccan dirham, printed 'DH'). Either bound may be given alone.","on_invalid":"ignore","example":1000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price, in the currency the ads publish.","on_invalid":"ignore","example":2000,"minimum":0},{"name":"seller_type","type":"enum","required":false,"description":"Restrict to private individuals or to professional sellers/shops. Each returned row echoes its own `seller_type`.","on_invalid":"ignore","allowed_values":[{"value":"private","label":"Private individuals only (Particuliers)"},{"value":"professional","label":"Professional sellers and shops only (Professionnels)"}],"example":"private"},{"name":"ad_options","type":"enum","required":false,"description":"One of Avito's own ad flags: only ads with a price, only ads with a photo, only promotions, only urgent ads.","on_invalid":"ignore","allowed_values":[{"value":"has_price","label":"Only ads that publish a price"},{"value":"has_image","label":"Only ads with a photo or a video"},{"value":"hotdeal","label":"Only ads flagged as a promotion (bonne affaire)"},{"value":"urgent","label":"Only ads the seller marked urgent"}],"example":"has_price","aliases":["ad_option"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Avito serves about 35-38 rows a page and the page size is not adjustable. Page forward with meta.next_page; consecutive pages of a live feed overlap by a row or two.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"lang","type":"enum","required":false,"description":"Interface language for the category and location names Avito prints. Ad titles and bodies are whatever the seller wrote, in French or Arabic, either way.","on_invalid":"ignore","allowed_values":[{"value":"fr","label":"French (the site default)"},{"value":"ar","label":"Arabic"}],"default":"fr","example":"fr"}],"returns":"listings[]{ad_id, list_id, url, title, description, price, price_display, currency, price_matches_display, old_price, old_price_display, monthly_payment, ad_type, ad_type_label, category_id, category_name, category_path[]{id,name}, city_id, city, area_id, area, address, latitude, longitude, posted_at, seller_type, seller{seller_id, name, is_verified, is_ecommerce, registered_since, active_listings_count, logo, phone_verified, phone_contact_type, address, website}, phone, image, images[], image_count, is_premium, is_highlighted, is_urgent, is_hot_deal, is_promoted, offers_shipping, attributes[]{id,label,value,display,unit,section,code}} + projects[]{kind, title, url, city, area, price, price_display, currency, rooms, bathrooms, size, image} + meta{total, page, has_more, next_page, promoted_count, project_count, filters_applied[], resolved{city, area, category_id, keyword, ad_type}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"iphone","category":5010}},{"name":"detail","description":"One Avito.ma ad in full, by its `list_id` or by its address: title, the whole body text, price with the currency the ad publishes, category path, city and district, posting time, the complete photo gallery, the seller profile with its store id and listing count, the phone number the page publishes, and the ad's own attribute rows — storage and condition for a phone, year, mileage, gearbox and fuel for a car, rooms, surface and floor for an apartment. A removed or expired ad answers NOT_FOUND (Avito redirects it to a search page with HTTP 200, which this engine detects).","required_params":[],"optional_params":["list_id","url","lang"],"params":[{"name":"list_id","type":"string","required":false,"description":"The ad's `list_id` from a search result — the number that ends an avito.ma ad address. Give this or `url`.","on_invalid":"ignore","example":"56251043","aliases":["id","ad_id"]},{"name":"url","type":"string","required":false,"description":"Full avito.ma ad address, either the short /vi/<id>.htm form or the long friendly one. Use `list_id` when you already have the number.","on_invalid":"ignore","example":"https://www.avito.ma/vi/56251043.htm"},{"name":"lang","type":"enum","required":false,"description":"Interface language for the category and location names Avito prints. Ad titles and bodies are whatever the seller wrote, in French or Arabic, either way.","on_invalid":"ignore","allowed_values":[{"value":"fr","label":"French (the site default)"},{"value":"ar","label":"Arabic"}],"default":"fr","example":"fr"}],"returns":"listing{ad_id, list_id, url, title, description, price, price_display, currency, price_matches_display, old_price, old_price_display, ad_type (SELL|LET|VAC_RENT|CO_RENT, as in search), ad_type_code (the page's own s|u|v|w), ad_type_label, category_id, category_name, category_path[], vertical, city_id, city, area_id, area, address, latitude, longitude, posted_at, seller_type (STORE|PRIVATE, as in search), seller_type_code (the page's own shop|private), seller{...}, phone (as the page publishes it; null when Avito hides it), image, images[], videos[], is_premium, is_urgent, is_hot_deal, offers_shipping, has_hidden_phone, attributes[]{id,label,value,display,unit,section,code}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.avito.ma/vi/56251043.htm"}},{"name":"categories","description":"The live Avito.ma category tree — an all-categories root plus the four sections (Avito Market, Immobilier, Véhicules, Entreprise) with every branch and leaf below them — 153 nodes, 140 distinct ids on 2026-11-03 (property leaves such as 1010 appear once in each of the sale, rent, flat-share and holiday-rent trees) — each with its id, its French name, its ad type (sell, let, vac_rent, co_rent), the `ad_type` value `search` needs to reach that exact node, and the url slug Avito uses for it. Use it to get the `category` id that `search` takes.","required_params":[],"optional_params":["lang"],"params":[{"name":"lang","type":"enum","required":false,"description":"Interface language for the category and location names Avito prints. Ad titles and bodies are whatever the seller wrote, in French or Arabic, either way.","on_invalid":"ignore","allowed_values":[{"value":"fr","label":"French (the site default)"},{"value":"ar","label":"Arabic"}],"default":"fr","example":"fr"}],"returns":"categories[]{category_id, name, ad_type, search_ad_type, url_slug, children[]…} + meta{total, node_count, distinct_category_ids}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"lang":"fr"}},{"name":"locations","description":"Every city and town Avito.ma publishes — about 600 (595 on 2026-11-03) — with its id, the slug `search` takes, the live number of ads in it, and the districts inside it. This is the live filter block Avito builds its own city picker from, so the ad counts are current.","required_params":[],"optional_params":["city","lang"],"params":[{"name":"city","type":"string","required":false,"description":"Return only this city (by slug, name or id) and its districts. Omit for all of them.","on_invalid":"ignore","example":"casablanca","aliases":["city_id","city_slug"]},{"name":"lang","type":"enum","required":false,"description":"Interface language for the category and location names Avito prints. Ad titles and bodies are whatever the seller wrote, in French or Arabic, either way.","on_invalid":"ignore","allowed_values":[{"value":"fr","label":"French (the site default)"},{"value":"ar","label":"Arabic"}],"default":"fr","example":"fr"}],"returns":"cities[]{city_id, name, slug, ad_count, areas[]{area_id, name, slug}} + meta{total}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"casablanca"}}]},{"name":"backmarket","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Back Market API — live refurbished-electronics marketplace data from 15 Back Market storefronts (backmarket.com, .de, .co.uk, .it, .nl, .be, .at, .pt, .fi, .ie, .gr, .sk, .se, .co.jp, .com.au). Search the catalogue of refurbished iPhones, Android phones, MacBooks, laptops, tablets, watches, consoles and audio, then pull every seller offer for one product: the price in that market's currency, Back Market's own condition grade and the price step between grades, stock, warranty months, the new-retail reference price, the product rating and Back Market's own repairability and longevity scores. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/backmarket/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse one Back Market storefront. `market` picks the storefront and therefore the catalogue, the price list and the currency. Give `query` for keyword search, or leave it out and use `brand` / `model` / `category_id` / `grade` / `storage` / `colour` / `price_min` / `price_max` / `deals_only` to walk a slice of the catalogue — every one of those filters was measured against the unfiltered total in the same run and every one changes it. `total` is the storefront's own exact count for the request, so an ignored filter is impossible to miss. Each row carries Back Market's own condition grade (name, numeric value and the storefront's own label), the live price with the market's currency AND the price string the site itself printed, the separate new-retail reference price, stock, warranty months and the seller's numeric id. 🔴 Only about 1000 rows are retrievable per query however large `total` is — `pagination` says where the floor is.","required_params":[],"optional_params":["market","query","brand","model","colour","storage","grade","price_min","price_max","deals_only","category_id","sort","page","page_size","include_facets"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Back Market storefront to read. This picks the catalogue, the price list, the currency and the language of the condition-grade label, so it is the single most important parameter: the same phone is a different price and a different currency in every market. 15 storefronts are supported and each one was verified live. backmarket.fr and backmarket.es exist but their search back end refused every probe, so they are not offered and answer MARKET_UNAVAILABLE instead of pretending.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (backmarket.de, EUR)"},{"value":"us","label":"United States (backmarket.com, USD)"},{"value":"gb","label":"United Kingdom (backmarket.co.uk, GBP)"},{"value":"it","label":"Italy (backmarket.it, EUR)"},{"value":"nl","label":"Netherlands (backmarket.nl, EUR)"},{"value":"be","label":"Belgium (backmarket.be, EUR)"},{"value":"at","label":"Austria (backmarket.at, EUR)"},{"value":"pt","label":"Portugal (backmarket.pt, EUR)"},{"value":"fi","label":"Finland (backmarket.fi, EUR)"},{"value":"ie","label":"Ireland (backmarket.ie, EUR)"},{"value":"gr","label":"Greece (backmarket.gr, EUR)"},{"value":"sk","label":"Slovakia (backmarket.sk, EUR)"},{"value":"se","label":"Sweden (backmarket.se, SEK)"},{"value":"jp","label":"Japan (backmarket.co.jp, JPY)"},{"value":"au","label":"Australia (backmarket.com.au, AUD)"}],"default":"de","example":"de","aliases":["country"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as typed into the site's own search box ('iphone 13', 'macbook air m1', 'galaxy s22'). Either `query` or a filter such as `brand`, `model` or `category_id` should be given; calling with neither is allowed and walks the whole catalogue of that market, which is what `total` will tell you.","on_invalid":"reject","example":"iphone 13","aliases":["q","keyword"]},{"name":"brand","type":"string","required":false,"description":"Manufacturer, lower-case, as the source's own prefix-free brand key spells it ('apple', 'samsung', 'google', 'lenovo', 'dell'). Measured to bite: 310 rows unfiltered, 69 with brand=apple on backmarket.de.","on_invalid":"reject","example":"apple"},{"name":"model","type":"string","required":false,"description":"Exact model name, lower-case ('iphone 13', 'iphone 13 pro', 'galaxy s21'). This is a whole-value match on the source's own model key, not a substring search — 'iphone 13' does NOT include 'iphone 13 pro'. Use `query` for loose matching.","on_invalid":"reject","example":"iphone 13"},{"name":"colour","type":"string","required":false,"description":"Colour exactly as that storefront prints it, which means it is in that market's language ('Gold', 'Mitternacht', 'Sierrablau' on backmarket.de). Read the available values out of `facets.color` in the response of an unfiltered call.","on_invalid":"reject","example":"Gold","aliases":["color"]},{"name":"storage","type":"string","required":false,"description":"Storage capacity exactly as the source prints it, including the unit and the space: '64 GB', '128 GB', '256 GB', '512 GB', '1 TB'. Measured to bite: 310 → 37 for '256 GB'.","on_invalid":"reject","example":"256 GB"},{"name":"grade","type":"enum","required":false,"description":"Back Market's appearance grade, named by the source's own market-independent numeric value. 🔴 The storefront's WORDING for the same value differs per market and is returned separately as `grade_label`: value 12 prints as 'Gut' on backmarket.de, 'Fair' on backmarket.com and 'Buono' on backmarket.it — all measured live. Filter and compare on `grade`/`grade_value`; show `grade_label` to a human. This is the defining attribute of a refurbished marketplace: the same device is a different price in every grade (one live iPhone 13 128 GB: good 258, excellent 289, very good 289.99, premium 365 EUR). The numeric `grade_value` returned on every row is market-independent; the `grade_label` is in that storefront's language. Measured to bite: 310 → 30 for premium.","on_invalid":"reject","allowed_values":[{"value":"premium","label":"Premium — grade value 9, the top appearance grade"},{"value":"excellent","label":"Excellent — grade value 10"},{"value":"very_good","label":"Very good — grade value 11"},{"value":"good","label":"Good — grade value 12, the most affordable grade"}],"example":"excellent"},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, in that market's own currency (see `currency` in the response). Measured to bite: 310 → 24 for 300–500 EUR on backmarket.de.","on_invalid":"reject","example":200,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, in that market's own currency. Measured to bite: 310 → 289 for price_max=300 on backmarket.de.","on_invalid":"reject","example":500,"minimum":0},{"name":"deals_only","type":"boolean","required":false,"description":"Only products that currently carry a Back Market deal or seller flash sale. Measured to bite: 310 → 38 on backmarket.de.","on_invalid":"reject","default":false,"example":true},{"name":"category_id","type":"integer","required":false,"description":"Numeric category id, as returned by the `categories` action and on every row as `category_id` (2 = Smartphone). Measured to bite: 310 → 37 for 2.","on_invalid":"reject","example":2},{"name":"sort","type":"enum","required":false,"description":"Result order. Each value is a separate index on the source's side, so the order is the storefront's own and not re-sorted here. Verified live: the same query's first prices were 258/250/360 by default, 13.45/16.99/17.00 ascending and 1006/801/652 descending.","on_invalid":"reject","allowed_values":[{"value":"best_sellers","label":"Back Market's own default relevance/best-sales order"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"best_sellers","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. 🔴 Only about 1000 rows are retrievable per query no matter how large `total` is — the whole backmarket.de catalogue reports total 18141 but serves 42 pages of 24. `pagination.last_page`, `pagination.retrievable_max` and `pagination.has_more` in the response say exactly where the floor is. Past the last page the source returns 0 rows; it does not repeat the last page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1..100. The storefront's own grid uses 24. A larger page does not raise the ~1000-row retrievable ceiling, it only uses fewer pages to reach it (measured: 42×24, 20×50, 10×100).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100},{"name":"include_facets","type":"boolean","required":false,"description":"Return the storefront's own live facet counts and price statistics alongside the rows (every brand, model, colour, storage, grade and category with its count, plus min/max/avg price). This is what lets you build a filter UI or find the real spelling of a colour in that market's language. Turn it off for a smaller response.","on_invalid":"reject","default":true,"example":true}],"returns":"products[]{product_id, offer_id, listing_id, title, model_name, url, image, market, price, currency, price_display, price_new_reference, price_new_reference_display, discount_pct_vs_new, has_deal, flash_sale_discount_pct, grade, grade_value, grade_label, condition, brand, model, colour, category, category_id, connector, sim_lock, specs_summary, colour_options, stock, warranty_months, seller_id, rating, rating_count, scores} + meta{market, locale, currency, total, rows, pagination{page, page_size, last_page, retrievable_max, has_more}, filters_applied, facets, price_stats, index, attempts, warnings}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 13","market":"de","page_size":24}},{"name":"detail","description":"Every live seller offer for ONE product in one market, by `product_id`. This is the action that makes Back Market worth querying: a product page is a competition between sellers and grades, and this returns the whole ladder in one call — each offer with its own condition grade, its own price in the market's currency, its own stock, its own warranty and its own seller id, cheapest first. On top of that it returns the product itself: title, brand, model, colour, storage summary, category, the colour options the source lists, the new-retail reference price, the product rating with its review count and Back Market's own repairability, camera, performance, screen and longevity scores. `price_range`, `grades_available` and `sellers_count` are computed from the offers in the same response. A product id that is not live in that market answers NOT_FOUND — never an empty success (verified against a non-existent UUID, which the source answers with total 0).","required_params":["product_id"],"optional_params":["market","grade"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product UUID, as returned in `product_id` on every search row and as the last path segment of a Back Market product URL (backmarket.de/de-de/p/iphone-13-128-gb-ohne-vertrag/<THIS>). A full product URL is also accepted and the id is taken out of it.","on_invalid":"reject","example":"ef5660d2-6883-4b81-b47d-86e5720687ef","value_pattern":"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}","aliases":["id","uuid"]},{"name":"market","type":"enum","required":false,"description":"Which Back Market storefront to read. This picks the catalogue, the price list, the currency and the language of the condition-grade label, so it is the single most important parameter: the same phone is a different price and a different currency in every market. 15 storefronts are supported and each one was verified live. backmarket.fr and backmarket.es exist but their search back end refused every probe, so they are not offered and answer MARKET_UNAVAILABLE instead of pretending.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (backmarket.de, EUR)"},{"value":"us","label":"United States (backmarket.com, USD)"},{"value":"gb","label":"United Kingdom (backmarket.co.uk, GBP)"},{"value":"it","label":"Italy (backmarket.it, EUR)"},{"value":"nl","label":"Netherlands (backmarket.nl, EUR)"},{"value":"be","label":"Belgium (backmarket.be, EUR)"},{"value":"at","label":"Austria (backmarket.at, EUR)"},{"value":"pt","label":"Portugal (backmarket.pt, EUR)"},{"value":"fi","label":"Finland (backmarket.fi, EUR)"},{"value":"ie","label":"Ireland (backmarket.ie, EUR)"},{"value":"gr","label":"Greece (backmarket.gr, EUR)"},{"value":"sk","label":"Slovakia (backmarket.sk, EUR)"},{"value":"se","label":"Sweden (backmarket.se, SEK)"},{"value":"jp","label":"Japan (backmarket.co.jp, JPY)"},{"value":"au","label":"Australia (backmarket.com.au, AUD)"}],"default":"de","example":"de","aliases":["country"]},{"name":"grade","type":"enum","required":false,"description":"Back Market's appearance grade, named by the source's own market-independent numeric value. 🔴 The storefront's WORDING for the same value differs per market and is returned separately as `grade_label`: value 12 prints as 'Gut' on backmarket.de, 'Fair' on backmarket.com and 'Buono' on backmarket.it — all measured live. Filter and compare on `grade`/`grade_value`; show `grade_label` to a human. This is the defining attribute of a refurbished marketplace: the same device is a different price in every grade (one live iPhone 13 128 GB: good 258, excellent 289, very good 289.99, premium 365 EUR). The numeric `grade_value` returned on every row is market-independent; the `grade_label` is in that storefront's language. Measured to bite: 310 → 30 for premium.","on_invalid":"reject","allowed_values":[{"value":"premium","label":"Premium — grade value 9, the top appearance grade"},{"value":"excellent","label":"Excellent — grade value 10"},{"value":"very_good","label":"Very good — grade value 11"},{"value":"good","label":"Good — grade value 12, the most affordable grade"}],"example":"excellent"}],"returns":"product{product_id, title, url, image, market, currency, brand, model, colour, category, category_id, specs_summary, colour_options, rating, rating_count, scores, price_min, price_max, price_min_display, price_new_reference, grades_available[], sellers_count, offers_count, offers[]{product_id, offer_id, listing_id, title, model_name, url, image, market, price, currency, price_display, price_new_reference, price_new_reference_display, discount_pct_vs_new, has_deal, flash_sale_discount_pct, grade, grade_value, grade_label, condition, brand, model, colour, category, category_id, connector, sim_lock, specs_summary, colour_options, stock, warranty_months, seller_id, rating, rating_count, scores}} + meta{market, locale, currency, total, index, attempts}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"ef5660d2-6883-4b81-b47d-86e5720687ef","market":"de"}},{"name":"categories","description":"The live category tree of one storefront, read off the storefront's own navigation: every universe (Smartphones, Laptops, Tablets, Audio, Gaming, Household …) with its child categories, each with the id you can pass back as `category_id` and the title in that market's own language. Cheap lookup action — one small request, no product data. Use it to discover what a market actually sells before searching it.","required_params":[],"optional_params":["market"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Back Market storefront to read. This picks the catalogue, the price list, the currency and the language of the condition-grade label, so it is the single most important parameter: the same phone is a different price and a different currency in every market. 15 storefronts are supported and each one was verified live. backmarket.fr and backmarket.es exist but their search back end refused every probe, so they are not offered and answer MARKET_UNAVAILABLE instead of pretending.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (backmarket.de, EUR)"},{"value":"us","label":"United States (backmarket.com, USD)"},{"value":"gb","label":"United Kingdom (backmarket.co.uk, GBP)"},{"value":"it","label":"Italy (backmarket.it, EUR)"},{"value":"nl","label":"Netherlands (backmarket.nl, EUR)"},{"value":"be","label":"Belgium (backmarket.be, EUR)"},{"value":"at","label":"Austria (backmarket.at, EUR)"},{"value":"pt","label":"Portugal (backmarket.pt, EUR)"},{"value":"fi","label":"Finland (backmarket.fi, EUR)"},{"value":"ie","label":"Ireland (backmarket.ie, EUR)"},{"value":"gr","label":"Greece (backmarket.gr, EUR)"},{"value":"sk","label":"Slovakia (backmarket.sk, EUR)"},{"value":"se","label":"Sweden (backmarket.se, SEK)"},{"value":"jp","label":"Japan (backmarket.co.jp, JPY)"},{"value":"au","label":"Australia (backmarket.com.au, AUD)"}],"default":"de","example":"de","aliases":["country"]}],"returns":"categories[]{id, name, title, type, children[]{id, name, title, type, image}} + meta{market, locale, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"de"}},{"name":"markets","description":"The storefronts this engine serves, with each one's host, locale and ISO currency — every value verified against a live query of that storefront, plus the two storefronts that exist but whose search back end refuses us and the two hostnames that do not resolve at all. No network call, no credit-worthy work: this is the honest coverage map, including the parts that go against us.","required_params":[],"optional_params":[],"params":[],"returns":"markets[]{market, host, locale, currency, status} + meta{supported, walled, nonexistent}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"baidu","category":{"id":"search-seo","title":"Search & SEO"},"title":"Baidu Search API — web, news, image & video results and suggestions (百度搜索 SERP)","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/baidu/v1","spec_available":true,"actions":[{"name":"search","description":"Baidu web search results for a query: ranked organic results with the REAL destination URL (not Baidu's redirect), snippet, source and date; sponsored results with the advertiser's landing page; related searches; top stories; shopping cards; Baidu Baike knowledge panel; Baidu's AI answer; Baidu Hot Search (百度热搜). Filters: results per page (10-50), page/offset, time window or custom date range, site and file type, plus Baidu's own query operators.","required_params":["q"],"optional_params":["page","num","offset","time_period","date_from","date_to","gpc","site","file_type","scope","resolve_links"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Chinese, English…). Baidu's own operators work inside it: site:zhihu.com, intitle:word, filetype:pdf, \"exact phrase\", -word.","on_invalid":"reject","example":"笔记本电脑","aliases":["query","keyword","wd"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (num results per page), up to 76.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":76},{"name":"num","type":"integer","required":false,"description":"Results per page, 10-50 (Baidu's `rn`). Values outside the range are clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":10,"maximum":50,"aliases":["rn","results_per_page"]},{"name":"offset","type":"integer","required":false,"description":"Absolute result offset (Baidu's `pn`), an alternative to page. offset=10 with num=10 is page 2.","on_invalid":"reject","example":0,"minimum":0,"maximum":750,"aliases":["pn","start"]},{"name":"time_period","type":"enum","required":false,"description":"Only pages Baidu dates inside this window (Baidu's time filter).","on_invalid":"reject","allowed_values":[{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past 7 days"},{"value":"month","label":"Past 30 days"},{"value":"year","label":"Past 365 days"}],"example":"week","aliases":["tbs"]},{"name":"date_from","type":"string","required":false,"description":"Custom date range start (YYYY-MM-DD, China time). Use with date_to.","on_invalid":"reject","example":"2026-10-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}"},{"name":"date_to","type":"string","required":false,"description":"Custom date range end (YYYY-MM-DD, inclusive).","on_invalid":"reject","example":"2026-10-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}"},{"name":"gpc","type":"string","required":false,"description":"Raw Baidu time filter (stf=<from_epoch>,<to_epoch>|stftype=1 or 2), for callers who already build it. time_period and date_from/date_to are the simpler forms.","on_invalid":"reject","example":"stf=1793000000,1793600000|stftype=2","value_pattern":"stf=\\d{9,11},\\d{9,11}\\|stftype=[12]"},{"name":"site","type":"string","required":false,"description":"Restrict results to one site or domain (adds site:<domain> to the query).","on_invalid":"reject","example":"zhihu.com","value_pattern":"[A-Za-z0-9.\\-]{3,100}"},{"name":"file_type","type":"enum","required":false,"description":"Only documents of this type (adds filetype:<type> to the query).","on_invalid":"reject","allowed_values":[{"value":"pdf","label":"PDF"},{"value":"doc","label":"Word (doc/docx)"},{"value":"xls","label":"Excel (xls/xlsx)"},{"value":"ppt","label":"PowerPoint (ppt/pptx)"},{"value":"rtf","label":"RTF"},{"value":"txt","label":"Text"}],"example":"pdf"},{"name":"scope","type":"enum","required":false,"description":"Where the query words must appear.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Anywhere on the page (default)"},{"value":"title","label":"Query words must be in the page title (intitle:)"},{"value":"url","label":"Query words must be in the URL (inurl:)"}],"default":"all","example":"title"},{"name":"resolve_links","type":"boolean","required":false,"description":"Also follow Baidu's redirect for results whose real URL Baidu did not print (widget cards, top stories). Web results already carry the real URL in `url`. Adds up to a second; ad click links are never followed.","on_invalid":"reject","default":false,"example":false}],"returns":"search_parameters, organic_results[] (position, type, title, url = real destination, link = Baidu redirect, domain, snippet, source, date, date_text, baidu_property), ads[] (position, placement top|middle|bottom, title, landing_url, domain, description), related_searches[] (query, link), top_stories[] (title, url, source, date, snippet, thumbnail), shopping_results[] (title, price, currency, store, sales, url), knowledge_graph{title, type, description, image, link}, ai_overview{title, sections[]{heading, text}, sources[]{title, source, link}}, hot_searches[] (rank, query, pinned), pagination{current_page, results_per_page, page_offset, next_page_offset, total_pages}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"q":"笔记本电脑"}},{"name":"news","description":"Baidu News (百度资讯) results: headline, real article URL, publisher, snippet, publish time and thumbnail, 10 per page, by relevance or newest first. Includes Baidu's own count of matching articles.","required_params":["q"],"optional_params":["page","sort"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Chinese, English…). Baidu's own operators work inside it: site:zhihu.com, intitle:word, filetype:pdf, \"exact phrase\", -word.","on_invalid":"reject","example":"比亚迪","aliases":["query","keyword","wd"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (10 articles per page), up to 76.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":76},{"name":"sort","type":"enum","required":false,"description":"Order of news results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant first (Baidu default)"},{"value":"date","label":"Newest first"}],"default":"relevance","example":"date"}],"returns":"search_parameters, total_results, news_results[] (position, title, url, domain, source, snippet, date, date_text, thumbnail), pagination{current_page, next_page_offset}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"q":"比亚迪"}},{"name":"images","description":"Baidu Images (百度图片) results: original image URL, thumbnail, size, format, title and the page the image was found on, 30 per page, plus Baidu's total image count.","required_params":["q"],"optional_params":["page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Chinese, English…). Baidu's own operators work inside it: site:zhihu.com, intitle:word, filetype:pdf, \"exact phrase\", -word.","on_invalid":"reject","example":"熊猫","aliases":["query","keyword","wd"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (30 images per page), up to 76.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":76}],"returns":"search_parameters, total_results, has_more, image_results[] (position, title, original, thumbnail, source_page, domain, width, height, format, is_gif)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"熊猫"}},{"name":"videos","description":"Baidu Video search (百度视频) results: video title, the real video page URL (Bilibili, Haokan, iQIYI, Xigua…), duration, platform, publish date and thumbnail, about 10 per page.","required_params":["q"],"optional_params":["page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Chinese, English…). Baidu's own operators work inside it: site:zhihu.com, intitle:word, filetype:pdf, \"exact phrase\", -word.","on_invalid":"reject","example":"iphone 17","aliases":["query","keyword","wd"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (about 10 videos per page), up to 30.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":30}],"returns":"search_parameters, video_results[] (position, title, url, domain, link, duration, source, date, thumbnail)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"iphone 17"}},{"name":"suggest","description":"Baidu search autocomplete: the query completions Baidu offers as you type. Fast and cheap — useful for Chinese keyword research.","required_params":["q"],"optional_params":[],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Chinese, English…). Baidu's own operators work inside it: site:zhihu.com, intitle:word, filetype:pdf, \"exact phrase\", -word.","on_invalid":"reject","example":"笔记本","aliases":["query","keyword","wd"]}],"returns":"search_parameters, suggestions[] (ordered list of completions)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"笔记本"}},{"name":"resolve_link","description":"Turn a Baidu redirect link (https://www.baidu.com/link?url=…) into the destination URL it points to. Ad click links (baidu.php) are not followed.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"A Baidu redirect link (https://www.baidu.com/link?url=…), as returned in `link`.","on_invalid":"reject","example":"https://www.baidu.com/link?url=…","aliases":["link"]}],"returns":"link, url, domain","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.baidu.com/link?url=…"}}]},{"name":"barcode","category":{"id":"utilities","title":"Utilities & AI"},"title":"Barcode Lookup API — GTIN/EAN/UPC/ISBN to product data (title, brand, images, nutrition, retailer offers) via Open Food Facts and UPCitemdb, with check-digit validation","version":"1.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/barcode/v1","spec_available":true,"actions":[{"name":"lookup","description":"Barcode → one merged product: title/brand/category/image/description + dimensions/model + PACKAGE WEIGHT as an explicit {weight, weight_unit} pair (plus weight_grams, weight_type, weight_source and a weight_confidence flag) + retailer offers&prices (UPCitemdb) + net content + nutrition/ingredients/allergens if food (OFF). Includes check-digit validation, GTIN-13 normalization and issuing-country. source=auto merges them, and falls back to go-upc — US general merchandise, retailer private label, apparel and footwear — for barcodes the first two do not carry. Weight is published by roughly 1 barcode in 5 (1 in 3 with deep_weight=true) — when no source states one, weight is null, never 0 and never borrowed from a similar product.","required_params":["barcode"],"optional_params":["source","off_db","deep_weight"],"params":[{"name":"barcode","type":"string","required":true,"description":"The barcode to look up: UPC-A (12), EAN-13 (13), EAN-8 (8), GTIN-14, or ISBN-13 (978/979…). Spaces/dashes are stripped; check digit is validated (mod-10). Aliases: upc, ean, gtin, isbn, code.","on_invalid":"reject","example":"5449000000996","aliases":["upc","ean","gtin","isbn","code"]},{"name":"source","type":"enum","required":false,"description":"Which source(s) to query for lookup/batch. 'auto' walks them in cost order and stops at the first hit: Open Food Facts, then UPCitemdb, then go-upc, then the retail tier. A lookup the open databases can answer never touches the slower tiers.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"All sources, merged (default) — food fields from OFF, commerce fields from UPCitemdb, and go-upc as a last-resort fallback that runs only if the first two found nothing"},{"value":"off","label":"Open Food/Beauty/Products Facts only (food/nutrition)"},{"value":"upcitemdb","label":"UPCitemdb only (general products + retailer prices)"},{"value":"goupc","label":"go-upc only — US general merchandise / retailer private-label / apparel (title, brand, category, image, description; no prices, no weight)"},{"value":"retail","label":"US retailers (target.com, then ebay.com) matched by GTIN and VERIFIED against the retailer's own published barcode. Target additionally carries package_weight + package_dimensions. Slowest tier — 'auto' reaches it only when every open database missed"}],"default":"auto","example":"auto"},{"name":"off_db","type":"enum","required":false,"description":"Which Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.","on_invalid":"reject","allowed_values":[{"value":"food","label":"Open Food Facts (food & beverage)"},{"value":"beauty","label":"Open Beauty Facts (cosmetics)"},{"value":"petfood","label":"Open Pet Food Facts"},{"value":"products","label":"Open Products Facts (generic non-food)"}],"default":"food","example":"food"},{"name":"deep_weight","type":"boolean","required":false,"description":"Spend ONE extra upstream call, per barcode, to chase a weight the product page did not publish. Measured on 61 retailer-sourced barcodes: weight coverage 19.7% off (default, 1 call) → 29.5% on (2 calls). Off by default so the cheap path stays one call. Read weight_confidence before trusting the value either way.","on_invalid":"ignore","default":false,"example":true,"aliases":["weight_deep","extra_weight"]}],"returns":"product{barcode, gtin13, gtin_type, valid_check_digit, issuing_country, title, brand, category, description, image, images[], weight, weight_unit (g|kg|oz|lb), weight_grams, weight_type (package|net_content), weight_source, weight_raw, weight_confidence (medium|low|null), weight_flags[], net_content{value, unit, grams, is_volume}, nutrition{} (if food), ingredients, allergens[], offers[] (merchant/price), price_lowest/highest, sources[], field_source{}, resolution_level (full = name+brand+image | partial = some fields), restricted_distribution + restricted_distribution_note (only for store-internal GS1 020-029 / 040-049 / 200-299 codes: UPCitemdb is not used for them, and an Open Food Facts match may belong to any retailer)}. When no catalogue lists the barcode the answer stays ok:false / NOT_FOUND — never a hollow product — and error.detail carries {resolution_level: 'identifier_only', identifier{barcode, gtin13, gtin_type, valid_check_digit, gs1_prefix, issuing_country, is_isbn}} so a malformed code is distinguishable from a valid one nobody currently lists.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"barcode":"5449000000996"}},{"name":"batch","description":"Up to 20 barcodes in one call → array of merged products (input order preserved), each with its own source/validation. The competitor caps at 10.","required_params":["barcodes"],"optional_params":["source","off_db","deep_weight"],"params":[{"name":"barcodes","type":"array","required":true,"description":"Up to 20 barcodes — a JSON array or a comma-separated string (competitor caps batch at 10; we allow 20). Each is normalized + validated; results preserve input order with per-item source.","on_invalid":"reject","example":"5449000000996,0885909950805","aliases":["upcs","eans","gtins","codes"]},{"name":"source","type":"enum","required":false,"description":"Which source(s) to query for lookup/batch. 'auto' walks them in cost order and stops at the first hit: Open Food Facts, then UPCitemdb, then go-upc, then the retail tier. A lookup the open databases can answer never touches the slower tiers.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"All sources, merged (default) — food fields from OFF, commerce fields from UPCitemdb, and go-upc as a last-resort fallback that runs only if the first two found nothing"},{"value":"off","label":"Open Food/Beauty/Products Facts only (food/nutrition)"},{"value":"upcitemdb","label":"UPCitemdb only (general products + retailer prices)"},{"value":"goupc","label":"go-upc only — US general merchandise / retailer private-label / apparel (title, brand, category, image, description; no prices, no weight)"},{"value":"retail","label":"US retailers (target.com, then ebay.com) matched by GTIN and VERIFIED against the retailer's own published barcode. Target additionally carries package_weight + package_dimensions. Slowest tier — 'auto' reaches it only when every open database missed"}],"default":"auto","example":"auto"},{"name":"off_db","type":"enum","required":false,"description":"Which Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.","on_invalid":"reject","allowed_values":[{"value":"food","label":"Open Food Facts (food & beverage)"},{"value":"beauty","label":"Open Beauty Facts (cosmetics)"},{"value":"petfood","label":"Open Pet Food Facts"},{"value":"products","label":"Open Products Facts (generic non-food)"}],"default":"food","example":"food"},{"name":"deep_weight","type":"boolean","required":false,"description":"Spend ONE extra upstream call, per barcode, to chase a weight the product page did not publish. Measured on 61 retailer-sourced barcodes: weight coverage 19.7% off (default, 1 call) → 29.5% on (2 calls). Off by default so the cheap path stays one call. Read weight_confidence before trusting the value either way.","on_invalid":"ignore","default":false,"example":true,"aliases":["weight_deep","extra_weight"]}],"returns":"products[] (one per input barcode: found bool + checked bool + resolution_level + merged product with the same weight/weight_unit block as lookup; a not-found entry carries identifier{} — the decoded, verified barcode — instead of a product; store-internal codes carry restricted_distribution + restricted_distribution_note on the entry, found or not), requested, found_count, weight_found_count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"barcodes":"5449000000996,0885909950805"}},{"name":"search","description":"Free-text product-name search across the open databases → product cards with pagination. Optional category scope. (Competitor: keyword/title/category search.)","required_params":["query"],"optional_params":["category","off_db","source","page","page_size"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text product-name keyword search (matches title across the open databases). Aliases: q, search, name, title.","on_invalid":"reject","example":"coca cola zero","aliases":["q","search","name","title"]},{"name":"category","type":"string","required":false,"description":"Optional Open-Food-Facts category tag to scope a search/brand query (e.g. 'sodas', 'chocolate-spreads', 'biscuits').","on_invalid":"reject","example":"chocolate-spreads"},{"name":"off_db","type":"enum","required":false,"description":"Which Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.","on_invalid":"reject","allowed_values":[{"value":"food","label":"Open Food Facts (food & beverage)"},{"value":"beauty","label":"Open Beauty Facts (cosmetics)"},{"value":"petfood","label":"Open Pet Food Facts"},{"value":"products","label":"Open Products Facts (generic non-food)"}],"default":"food","example":"food"},{"name":"source","type":"enum","required":false,"description":"Which source(s) to query for lookup/batch. 'auto' walks them in cost order and stops at the first hit: Open Food Facts, then UPCitemdb, then go-upc, then the retail tier. A lookup the open databases can answer never touches the slower tiers.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"All sources, merged (default) — food fields from OFF, commerce fields from UPCitemdb, and go-upc as a last-resort fallback that runs only if the first two found nothing"},{"value":"off","label":"Open Food/Beauty/Products Facts only (food/nutrition)"},{"value":"upcitemdb","label":"UPCitemdb only (general products + retailer prices)"},{"value":"goupc","label":"go-upc only — US general merchandise / retailer private-label / apparel (title, brand, category, image, description; no prices, no weight)"},{"value":"retail","label":"US retailers (target.com, then ebay.com) matched by GTIN and VERIFIED against the retailer's own published barcode. Target additionally carries package_weight + package_dimensions. Slowest tier — 'auto' reaches it only when every open database missed"}],"default":"auto","example":"auto"},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped 1-1000). Page forward with meta.next_page. Note: Open Food Facts throttles deep pages, so a deep page may take an extra moment while the engine retries.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-50, default 20); out-of-range values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit","per_page"]}],"returns":"products[] (barcode, title, brand, category, image, nutriscore), count, page, page_count, has_more, next_page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nutella"}},{"name":"by_brand","description":"All products for a brand/manufacturer → product cards with pagination. (Competitor: brand + manufacturer search.)","required_params":["brand"],"optional_params":["category","off_db","page","page_size"],"params":[{"name":"brand","type":"string","required":true,"description":"Brand or manufacturer name → that brand's products. Aliases: manufacturer, brand_name.","on_invalid":"reject","example":"nutella","aliases":["manufacturer","brand_name"]},{"name":"category","type":"string","required":false,"description":"Optional Open-Food-Facts category tag to scope a search/brand query (e.g. 'sodas', 'chocolate-spreads', 'biscuits').","on_invalid":"reject","example":"chocolate-spreads"},{"name":"off_db","type":"enum","required":false,"description":"Which Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.","on_invalid":"reject","allowed_values":[{"value":"food","label":"Open Food Facts (food & beverage)"},{"value":"beauty","label":"Open Beauty Facts (cosmetics)"},{"value":"petfood","label":"Open Pet Food Facts"},{"value":"products","label":"Open Products Facts (generic non-food)"}],"default":"food","example":"food"},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped 1-1000). Page forward with meta.next_page. Note: Open Food Facts throttles deep pages, so a deep page may take an extra moment while the engine retries.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-50, default 20); out-of-range values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit","per_page"]}],"returns":"products[] (this brand's items), brand, count, page, page_count, has_more, next_page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"coca-cola"}},{"name":"by_prefix","description":"GS1 company-prefix (partial-barcode) search → products whose barcode starts with the given 6+ digits, plus the decoded issuing country. (Competitor: `491234*` partial method.)","required_params":["prefix"],"optional_params":["off_db","page","page_size"],"params":[{"name":"prefix","type":"string","required":true,"description":"A GS1 company prefix — the first 6+ digits of a barcode (the competitor's `491234*` partial-barcode method). Returns products whose barcode starts with these digits + the decoded issuing country.","on_invalid":"reject","example":"5449000","aliases":["gs1_prefix","company_prefix"]},{"name":"off_db","type":"enum","required":false,"description":"Which Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.","on_invalid":"reject","allowed_values":[{"value":"food","label":"Open Food Facts (food & beverage)"},{"value":"beauty","label":"Open Beauty Facts (cosmetics)"},{"value":"petfood","label":"Open Pet Food Facts"},{"value":"products","label":"Open Products Facts (generic non-food)"}],"default":"food","example":"food"},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped 1-1000). Page forward with meta.next_page. Note: Open Food Facts throttles deep pages, so a deep page may take an extra moment while the engine retries.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-50, default 20); out-of-range values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit","per_page"]}],"returns":"products[] (barcode starts-with prefix), prefix, issuing_country, prefix_basis (GTIN-13 | GTIN-12 (UPC-A) | GTIN-8 (EAN-8) | ambiguous), issuing_country_alt{} (only when a short prefix reads differently as a UPC-A with its unprinted leading zero), count, page, has_more, next_page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"prefix":"5449000"}},{"name":"by_mpn","description":"Manufacturer-Part-Number / model lookup → products with that MPN/model (UPCitemdb keyword index over the MPN). Exact model/mpn matches are surfaced first. Closes the competitor's mpn query-method (the proprietary mpn= DB-index isn't on the open tier, but the keyword index resolves real MPNs — Logitech 910-005565, Sony WH-1000XM4, Canon 2727C002 all verified).","required_params":["mpn"],"optional_params":["page","page_size"],"params":[{"name":"mpn","type":"string","required":true,"description":"Manufacturer Part Number / model number → matching products. Aliases: model, model_number, part_number. Results whose model/mpn field equals the query are surfaced first (exact_match=true).","on_invalid":"reject","example":"910-005565","aliases":["model","model_number","part_number","mpn_number"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped 1-1000). Page forward with meta.next_page. Note: Open Food Facts throttles deep pages, so a deep page may take an extra moment while the engine retries.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-50, default 20); out-of-range values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit","per_page"]}],"returns":"products[] (exact-mpn first, each w/ matched_mpn + exact_match bool), mpn, exact_match_count, count, page, page_count, has_more, next_page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"mpn":"910-005565"}},{"name":"validate","description":"Validate + decode a barcode WITHOUT a network call: mod-10 check digit, GTIN type, GTIN-13 normalization, GS1 issuing country, ISBN/Bookland detection. (We EXCEED the competitor here — it has no standalone validate.)","required_params":["barcode"],"optional_params":[],"params":[{"name":"barcode","type":"string","required":true,"description":"The barcode to look up: UPC-A (12), EAN-13 (13), EAN-8 (8), GTIN-14, or ISBN-13 (978/979…). Spaces/dashes are stripped; check digit is validated (mod-10). Aliases: upc, ean, gtin, isbn, code.","on_invalid":"reject","example":"5449000000996","aliases":["upc","ean","gtin","isbn","code"]}],"returns":"valid, gtin_type, digits, gtin13, check_digit, expected_check_digit, issuing_country, is_isbn, reason (if invalid)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"barcode":"40123455"}}]},{"name":"bazaraki","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Bazaraki API — Cyprus's largest classifieds site (bazaraki.com): search cars, real estate for sale and rent, jobs, electronics and services by category, district, price and each category's own filters (make/model, year, mileage, fuel, gearbox; bedrooms, area, furnishing), and read one ad in full — EUR price, every listed attribute, photos, publish date, views and the seller (private or business, active ad count). No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bazaraki/v1","spec_available":true,"actions":[{"name":"search","description":"Search live ads: by category path, text, district, seller, EUR price band and the category's own filters, sorted newest / cheapest / most expensive / by relevance, 30 rows a page.","required_params":[],"optional_params":["category","query","city","seller_id","price_min","price_max","sort","filters","page"],"params":[{"name":"category","type":"string","required":false,"description":"A category `path` exactly as the categories action returns it, e.g. `real-estate-to-rent/apartments-flats`, `car-motorbikes-boats-and-parts/cars-trucks-and-vans/bmw` (brand) or `.../bmw/3-series` (model). A bazaraki.com category URL is accepted too. Omit it to search every category. An unknown path is rejected (the site itself would silently return the whole site).","on_invalid":"reject","example":"car-motorbikes-boats-and-parts/cars-trucks-and-vans","aliases":["category_path","rubric_path"]},{"name":"query","type":"string","required":false,"description":"Free-text search over titles and descriptions. With a query the total is capped by the source at ~999 (measured: 997 BMW matches in Cars while the BMW category holds 1 520), so `total_is_exact` turns false at 990-999.","on_invalid":"reject","example":"toyota yaris","aliases":["q","keyword","search"]},{"name":"city","type":"enum","required":false,"description":"One of Cyprus's five districts (measured in Cars: Limassol 5 671 of 12 574).","on_invalid":"reject","allowed_values":[{"value":"nicosia","label":"Nicosia (Lefkosia) district"},{"value":"limassol","label":"Limassol (Lemesos) district"},{"value":"larnaca","label":"Larnaca (Larnaka) district"},{"value":"paphos","label":"Paphos (Pafos) district"},{"value":"famagusta","label":"Famagusta (Ammochostos) district"}],"example":"limassol","aliases":["district","location"]},{"name":"seller_id","type":"integer","required":false,"description":"Only this seller's ads — the `seller.id` of any row (measured: one dealer's 56 car ads out of 12 574).","on_invalid":"reject","example":11516581,"minimum":1,"aliases":["user_id"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (measured in Cars: 10 001-20 000 → 3 062 of 12 574).","on_invalid":"reject","example":10000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR.","on_invalid":"reject","example":20000,"minimum":0,"aliases":["max_price"]},{"name":"sort","type":"enum","required":false,"description":"Row order. Default: `newest`, or `relevance` when a query is given. The source always lists paid VIP rows first, then TOP, then regular, and sorts INSIDE each block — see `promotion_type`.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (the source's default without a query)"},{"value":"cheapest","label":"Cheapest first (promoted rows still come first on page 1)"},{"value":"expensive","label":"Most expensive first (promoted rows still come first on page 1)"},{"value":"relevance","label":"Text relevance (the source's default WITH a query; needs `query`)"}],"example":"cheapest","aliases":["ordering","order"]},{"name":"filters","type":"object","required":false,"description":"Category filters by the category's own vocabulary (the `filters` action lists them): {key: value}. A key is the filter slug with or without `attrs__` (`fuel-type`, `attrs__number-of-bedrooms`); ranges take `<slug>_min` / `<slug>_max` (`year_min`, `mileage_max`, `area_min`). A value is the published label (`Electric`, `2021`, `SUV`) or the source's code; multi-choice filters take a list (`{\"body-type\": [\"SUV\", \"Hatchback\"]}`). Needs `category`. Unknown keys/values are rejected.","on_invalid":"reject","example":{"fuel-type":"Electric","year_min":"2021"},"aliases":["attrs"]},{"name":"page","type":"integer","required":false,"description":"Page number, 30 rows a page (the source's own size). Past the last page the source answers 0 rows; `has_more` says when to stop.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5000}],"returns":"rows[]: id, slug, url, title, price (EUR), price_display, price_display_matches, price_description, city, area, published, category_id, features[], images[], promoted, promotion, seller{id,name,is_business,verified}; plus total, total_is_exact, page, has_more, category{}, applied{}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"car-motorbikes-boats-and-parts/cars-trucks-and-vans","city":"limassol","sort":"cheapest"}},{"name":"listing","description":"One ad in full: title, description, EUR price (with the page's own ld+json offer price as a check), every attribute the ad lists, photos, publish date, views, location and the seller block.","required_params":["id"],"optional_params":["slug"],"params":[{"name":"id","type":"integer","required":true,"description":"The ad's numeric id — the `id` of a search row, or the number in `bazaraki.com/adv/<id>_<slug>/`. A full ad URL is accepted too.","on_invalid":"reject","example":6789207,"minimum":1,"aliases":["ad_id","advert_id"]},{"name":"slug","type":"string","required":false,"description":"Optional: the row's `slug`. Saves one small lookup; resolved from the id when absent.","on_invalid":"reject","example":"cars-other-electric-2026"}],"returns":"id, slug, url, title, description, price, currency, price_display, price_matches_ld_offer, price_kind, date_raised, date_modified, published, views, favorites, city, area, latitude, longitude, categories[], features[{name,value,values}], images[], vin, seller{id,name,account_name,is_business,is_company,verified,active_ads,posting_since,profile_url,website,contact_channels}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":6789207}},{"name":"categories","description":"The category tree, one level at a time, with live ad counts: the top level, or the sub-categories of a given category path (brands under Cars, models under a brand, property types).","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"string","required":false,"description":"A category `path`; omit it for the top level. Returns that category and its sub-categories with live ad counts (brands under Cars, models under a brand).","on_invalid":"reject","example":"car-motorbikes-boats-and-parts/cars-trucks-and-vans","aliases":["category_path","rubric_path","parent"]}],"returns":"category{id,name,path,ancestors,total_ads}, rows[]: id, name, path, count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"car-motorbikes-boats-and-parts/cars-trucks-and-vans"}},{"name":"filters","description":"The filters one category offers (the vocabulary `search.filters` accepts): key, type and every choice with its label.","required_params":["category"],"optional_params":[],"params":[{"name":"category","type":"string","required":true,"description":"A category `path` from the categories action.","on_invalid":"reject","example":"car-motorbikes-boats-and-parts/cars-trucks-and-vans","aliases":["category_path","rubric_path"]}],"returns":"category{}, rows[]: slug, name, type, keys[], multi, free_number, choices[{value,label}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"car-motorbikes-boats-and-parts/cars-trucks-and-vans"}}]},{"name":"bazos","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Bazos API scraper — search the Czech (bazos.cz) and Slovak (bazos.sk) classifieds: keyword and category search with postal-code radius, price band and sort, full ad detail with photos, and a per-market category/subcategory resolver. Prices come back in the market's own currency (CZK / EUR) with the source string beside every number, and negotiable or unpriced ads return null rather than a fake zero. No account, public logged-out data only; ad text is returned as the seller wrote it.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/bazos/v1","spec_available":true,"actions":[{"name":"search","description":"Search Bazos classifieds by keyword and/or category, with subcategory, postal-code radius, price band, five sorts and paging (20 ads per page). Paid TOP ads are returned in the position Bazos puts them and flagged `promoted: true` — they are not always on topic, so they are labelled rather than hidden or passed off as hits.","required_params":[],"optional_params":["market","query","category","subcategory","sort","postal_code","radius_km","price_min","price_max","page"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Bazos catalogue to read. The two are separate marketplaces with separate listings, separate category slugs and separate currencies; an unsupported value is rejected, never substituted.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — bazos.cz, prices in CZK"},{"value":"sk","label":"Slovakia — bazos.sk, prices in EUR"}],"default":"cz","example":"cz"},{"name":"query","type":"string","required":false,"description":"Keyword Bazos matches against ad titles and bodies. Optional when `category` is given (then the whole category is browsed).","on_invalid":"reject","example":"iphone","aliases":["keyword","q"]},{"name":"category","type":"string","required":false,"description":"Bazos rubrika slug. 🔴 The Czech and Slovak slugs differ (dum/dom, motorky/motocykle, nabytek/nabytok, obleceni/oblecenie, prace/praca, zvirata/zvierata, ostatni/ostatne) — call `categories` for the market you are querying.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (cz)"},{"value":"auto","label":"Auto (sk)"},{"value":"deti","label":"Deti (sk)"},{"value":"deti","label":"Děti (cz)"},{"value":"dom","label":"Dom a záhrada (sk)"},{"value":"dum","label":"Dům a zahrada (cz)"},{"value":"elektro","label":"Elektro (cz)"},{"value":"elektro","label":"Elektro (sk)"},{"value":"foto","label":"Foto (cz)"},{"value":"foto","label":"Foto (sk)"},{"value":"hudba","label":"Hudba (cz)"},{"value":"hudba","label":"Hudba (sk)"},{"value":"knihy","label":"Knihy (cz)"},{"value":"knihy","label":"Knihy (sk)"},{"value":"mobil","label":"Mobily (cz)"},{"value":"mobil","label":"Mobily (sk)"},{"value":"motocykle","label":"Motocykle (sk)"},{"value":"motorky","label":"Motorky (cz)"},{"value":"nabytek","label":"Nábytek (cz)"},{"value":"nabytok","label":"Nábytok (sk)"},{"value":"obleceni","label":"Oblečení (cz)"},{"value":"oblecenie","label":"Oblečenie (sk)"},{"value":"ostatne","label":"Ostatné (sk)"},{"value":"ostatni","label":"Ostatní (cz)"},{"value":"pc","label":"PC (cz)"},{"value":"pc","label":"PC (sk)"},{"value":"praca","label":"Práca (sk)"},{"value":"prace","label":"Práce (cz)"},{"value":"reality","label":"Reality (cz)"},{"value":"reality","label":"Reality (sk)"},{"value":"sluzby","label":"Služby (cz)"},{"value":"sluzby","label":"Služby (sk)"},{"value":"sport","label":"Sport (cz)"},{"value":"sport","label":"Šport (sk)"},{"value":"stroje","label":"Stroje (cz)"},{"value":"stroje","label":"Stroje (sk)"},{"value":"vstupenky","label":"Vstupenky (cz)"},{"value":"vstupenky","label":"Vstupenky (sk)"},{"value":"zvierata","label":"Zvieratá (sk)"},{"value":"zvirata","label":"Zvířata (cz)"}],"example":"mobil","value_pattern":"[a-z]{2,12}"},{"name":"subcategory","type":"string","required":false,"description":"Subcategory slug inside `category`, e.g. 'apple' under 'mobil' or 'audi' under 'auto'. Get the list from the `categories` action with a `category`. Requires `category`.","on_invalid":"reject","example":"apple","value_pattern":"[a-z0-9-]{1,40}"},{"name":"sort","type":"enum","required":false,"description":"Result order. Note: the two price sorts make Bazos drop ads whose price is a word ('Dohodou', 'Nabidnete', 'V textu'), so the reported total shrinks; meta reports that.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first — Bazos' own default, paid TOP ads on top"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"most_viewed","label":"Most viewed first"},{"value":"least_viewed","label":"Least viewed first"}],"default":"newest","example":"price_asc"},{"name":"postal_code","type":"string","required":false,"description":"Five-digit postal code to centre the search on (Czech or Slovak, matching `market`). Combined with `radius_km`. A code Bazos does not know is rejected, not silently ignored.","on_invalid":"reject","example":"60200","value_pattern":"\\d{5}"},{"name":"radius_km","type":"integer","required":false,"description":"Search radius in km around `postal_code`. Ignored by Bazos when no postal code is given.","on_invalid":"reject","default":25,"example":25,"minimum":0,"maximum":500},{"name":"price_min","type":"integer","required":false,"description":"Lowest price to include, a whole number in the market's currency (CZK for cz, EUR for sk). Bazos' own price fields are whole numbers.","on_invalid":"reject","example":5000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price to include, a whole number in the market's currency (CZK for cz, EUR for sk). Bazos' own price fields are whole numbers.","on_invalid":"reject","example":20000,"minimum":0},{"name":"page","type":"integer","required":false,"description":"1-based page. Bazos serves 20 ads per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"market, currency, query/category/subcategory echo, total_results (+ the source's own printed string), page, page_size, has_more, and listings[] with listing_id, url, title, description_excerpt, image, price, price_currency, price_kind (fixed|free|negotiable|in_text|absent), price_text, locality, postal_code, views, posted_date, promoted, promoted_label and category.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"cz","query":"iphone"}},{"name":"listing","description":"Full detail of one Bazos ad: title, complete description, price, locality, view count, posting date, breadcrumb and every photo. Accepts the ad URL, or a listing_id together with its category.","required_params":[],"optional_params":["market","url","listing_id","category"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Bazos catalogue to read. The two are separate marketplaces with separate listings, separate category slugs and separate currencies; an unsupported value is rejected, never substituted.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — bazos.cz, prices in CZK"},{"value":"sk","label":"Slovakia — bazos.sk, prices in EUR"}],"default":"cz","example":"cz"},{"name":"url","type":"string","required":false,"description":"Full Bazos ad address, exactly as `search` returns it. The simplest handle — it already carries the category and the market.","on_invalid":"reject","example":"https://mobil.bazos.cz/inzerat/224930267/iphone-16-pro-max-256-gb-black-titanium-krabicka-kabel.php"},{"name":"listing_id","type":"string","required":false,"description":"Numeric ad id. Needs `category` as well, because the category is the host of the address on Bazos. Prefer `url`.","on_invalid":"reject","example":"224930267","value_pattern":"\\d{4,12}"},{"name":"category","type":"string","required":false,"description":"Rubrika slug that hosts the ad — required with `listing_id`, ignored when `url` is given.","on_invalid":"reject","example":"mobil","value_pattern":"[a-z]{2,12}"}],"returns":"listing_id, url, title, description, price, price_currency, price_kind, price_text, locality, postal_code, views, posted_date, promoted, promoted_label, category, breadcrumb[], images[], image_count and seller.display_name. The description is returned as written (contacts typed into it included); the click-to-reveal phone is not fetched.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://mobil.bazos.cz/inzerat/224930267/iphone-16-pro-max-256-gb-black-titanium-krabicka-kabel.php"}},{"name":"categories","description":"The market's own category tree — the resolver `search` needs, because Czech and Slovak Bazos use different slugs for the same rubrika. With no `category` it returns the 20 rubriky with the live totals Bazos prints; with a `category` it returns that rubrika's subcategories.","required_params":[],"optional_params":["market","category"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Bazos catalogue to read. The two are separate marketplaces with separate listings, separate category slugs and separate currencies; an unsupported value is rejected, never substituted.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — bazos.cz, prices in CZK"},{"value":"sk","label":"Slovakia — bazos.sk, prices in EUR"}],"default":"cz","example":"cz"},{"name":"category","type":"string","required":false,"description":"Omit to list the market's 20 rubriky with their live totals; pass a rubrika slug to list ITS subcategories instead.","on_invalid":"reject","example":"mobil","value_pattern":"[a-z]{2,12}"}],"returns":"market, and either categories[] (slug, label, url, total_listings, listings_last_24h) or category{} plus subcategories[] (slug, label, url).","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"cz"}}]},{"name":"bestbuy","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Best Buy US and Canada search and product detail API; US retains all existing actions","version":"0.7.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/bestbuy/v1","spec_available":true,"actions":[{"name":"search","description":"Canada: source English query search with CAD offer prices, SKU, media and published merchant fields; page1..100/max_results1..24, relevance only. Stock on search cards is null when not published. US: Search Best Buy by keyword → a paginated, sortable, filterable list of products with name, brand, model, current & regular price, savings, star rating + review count, stock status, image gallery, variants, category, seller type (Best Buy itself vs a marketplace seller), and the product link. Narrow with friendly filters: brand, min_price/max_price, min_rating, condition. NOTE: the full category breadcrumb (category_path) is not published on Best Buy's result grid - grid rows carry the product_type labels instead. For the breadcrumb, use product_detail for one product or products_batch for up to 15 at a time.","required_params":["query"],"optional_params":["country","max_results","page","sort","brand","min_price","max_price","min_rating","condition","category","include_sponsored"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"query","type":"string","required":true,"description":"What to search for on Best Buy (product keywords, brand, or model).","on_invalid":"reject","example":"macbook air","aliases":["q"]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return. MAXIMUM 240 — that is the published ceiling, so there is nothing to probe for. Spans result pages automatically (24/page, 10 pages). Measured 2026-08-07 on 'laptop': 24/48/96/144/192 came back exact and 240 came back 226, because Best Buy's own grid repeats a few products across deep pages and duplicates are dropped — so treat 240 as an upper bound, not a promise of exactly 240 rows. Above 240 the value is clamped to 240 rather than rejected.","on_invalid":"ignore","default":24,"minimum":1,"maximum":240},{"name":"page","type":"integer","required":false,"description":"Result page to start from (1-based; ~24 products/page). Combine with max_results to walk past the 240-per-call ceiling: page=11 starts where a 240-result call ended.","on_invalid":"ignore","default":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"best_selling","label":"Best selling"},{"value":"best_discount","label":"Biggest discount"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"rating","label":"Customer rating"},{"value":"newest","label":"New arrivals"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Filter to one brand (e.g. Apple, HP, Samsung, Sony). Use the exact brand name as Best Buy shows it.","on_invalid":"ignore","example":"Apple"},{"name":"min_price","type":"number","required":false,"description":"Lowest price to include (USD). Combine with max_price for a price window.","on_invalid":"ignore","example":500,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price to include (USD).","on_invalid":"ignore","example":1000,"minimum":0,"aliases":["price_max"]},{"name":"min_rating","type":"enum","required":false,"description":"Only products at or above this customer rating.","on_invalid":"ignore","allowed_values":[{"value":"5","label":"5 stars only"},{"value":"4","label":"4 stars & up"},{"value":"3","label":"3 stars & up"},{"value":"2","label":"2 stars & up"},{"value":"top_rated","label":"Top-Rated only"}]},{"name":"condition","type":"enum","required":false,"description":"Only products in this condition. Maps to Best Buy's own Condition filter on its search page (New / Open-Box / Refurbished, plus Pre-Owned where Best Buy lists it), so the narrowing is done by Best Buy itself. Measured 2026-10-24 on 'apple ipad 11 inch': condition=new returned 44 rows, all with condition 'new'. Empty = all conditions.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"Brand new"},{"value":"open_box","label":"Open-Box"},{"value":"refurbished","label":"Refurbished"},{"value":"pre_owned","label":"Pre-Owned / used"}]},{"name":"category","type":"string","required":false,"description":"Advanced: restrict results with a raw Best Buy facet token (escape hatch for power users). Discover the available facets for a keyword with the `categories` action. Most users want the brand / min_price / max_price / min_rating / condition filters instead.","on_invalid":"ignore","example":"Apple","aliases":["filter","qp"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Best Buy mixes paid placements into its result grid. By default they are returned in their real grid position and marked `sponsored: true` so you can tell them apart. Set to false to return organic results only.","on_invalid":"ignore","default":true,"aliases":["sponsored"]}],"returns":"Canada: results[]{sku,name,brand,model,country,currency,price{current,regular,currency,savings,savings_pct},rating,availability,image,images,url,seller,seller_id,seller_details,seller_type,condition,category_id,category_ids,description_short} + source paging/count metadata. US: results[]{sku, name, brand, model, sponsored, price{current, regular, savings, savings_pct}, rating{average, review_count}, availability{in_stock, ship_by}, image, images[], variants{types, options[]}, open_box{available, from_price, condition_codes[]} (present when an open-box version is also on sale), seller_type ('1P' = sold by Best Buy itself, '3P' = a marketplace seller) + seller_id + seller (a name only for 1P - Best Buy publishes no name for marketplace sellers on any surface, so 3P rows carry the type and id and a null name), product_type[], url, condition (Best Buy's own condition label: 'new', 'refurbished', 'refurbished excellent', 'refurbished good', ... - null only when Best Buy publishes none)} + meta{page, pages_fetched, sort, filter, grid_size, with_price, incomplete, with_condition, stock_unknown, sponsored_count, has_next, dropped_incomplete, dropped_incomplete_skus[]}. Rows the grid leaves unrendered are filled from Best Buy's product data (name, brand, price, rating, condition, images, seller); their availability.in_stock stays null because Best Buy does not publish stock there (counted in stock_unknown). A row that cannot be filled at all is dropped, never returned as an empty shell: its sku is listed in dropped_incomplete_skus. `has_next` tells you whether another page exists: true means increment `page` for more, false means this was the last page. Requesting a page beyond the last returns NOT_FOUND with has_next:false and is NOT billed - the end-of-results signal, not an error to retry.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"ca","query":"laptop","max_results":3}},{"name":"product_detail","description":"Canada: actual product-by-SKU/Canada URL detail with source identity, CAD prices, stock, media, description, specifications and optional UPC/merchant/condition. US: Get the full product card for one Best Buy item by its product number, URL, or product-id → name, brand, model, current/regular price + savings, clearance/sale flags & special offers, stock status, star rating with a 5★-to-1★ breakdown, what customers like/dislike, image gallery, color/storage/carrier variants, and the category breadcrumb.","required_params":[],"optional_params":["country","sku","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sku","type":"string","required":false,"description":"Best Buy product number. Accepts the 7-digit SKU (e.g. 6565837), OR the product-id from the page URL (the code like JJGCQ8VCFQ), OR a full bestbuy.com product link — any of the three works.","on_invalid":"reject","example":"6565837","aliases":["skuId","sku_id","product_id","id"]},{"name":"url","type":"string","required":false,"description":"A full bestbuy.com product page URL (alternative to the product number).","on_invalid":"reject","example":"https://www.bestbuy.com/product/apple-macbook-air/JJGCQYXQ58/sku/6565837","aliases":["product_url"]}],"returns":"Canada: product with same core card fields plus description, specifications, upc, condition, included_items, weight and dimensions when published. Availability uses isAvailableOnline; source order flags retained separately. UPC is a source identifier, not a guaranteed manufacturer GTIN for refurbished listings. US: product{sku, name, brand, model, price{current, regular, savings, savings_pct, pricing_type, offers[]}, availability{in_stock, button_text}, rating{average, review_count, breakdown, verified_purchase_count}, customers_say{pros[], cons[]}, image, images[], variants{types, options[]}, category_path[] (the full breadcrumb, root first: Computers & Tablets > Laptops > All Laptops > Chromebooks > Touchscreen Chromebooks), product_type[], url, condition, open_box{available, from_price, condition_codes[]} (present when Best Buy also sells this product open-box; null when it does not), seller_type ('1P' = sold by Best Buy itself, '3P' = a marketplace seller) + seller_id + seller (the seller's NAME, which Best Buy publishes only for its own 1P listings - a 3P listing returns its type and id and a null name, never a made-up one), upc (the product's barcode), weight (as printed, e.g. '3.99 pounds'), weight_value + weight_unit (the same weight as a number plus its unit, e.g. 3.99 + 'POUND' — units seen in a 381-product sample: POUND, OUNCE, GRAM; both are null, never guessed, if the printed string cannot be parsed), dimensions{Product Height/Width/Depth}, specifications[]{name, value, group}, spec_count, description, features[], included_items[], manufacturer, reviews[] (the top-5 customer reviews inline: rating, author, pros, cons, helpful_count, photos, verified/incentivized flags - the full feed is on the `reviews` action)}. SHIPPING WEIGHT: `weight` is Best Buy's own printed string and is unchanged; `weight_value` (number) and `weight_unit` (POUND | OUNCE | GRAM | KILOGRAM) are the parsed pair for rate calculations. Whenever a printed weight exists the pair is present too — null if the string could not be parsed with certainty, because a wrong unit is worse than no weight.","cacheable":true,"cache_ttl_seconds":7200,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"6571043"}},{"name":"products_batch","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Look up MANY Best Buy products in ONE call by product number — up to 15 per request → each product's barcode (UPC), name, brand, price, rating, images, full technical specifications, shipping weight and package dimensions. Built for enriching a whole catalogue or price list at once instead of one product at a time.","required_params":["skus"],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"skus","type":"array","required":true,"description":"Best Buy product numbers to look up — up to 15 per call. Accepts a list, or a comma-separated string. Anything Best Buy does not resolve comes back in `not_found` rather than being silently dropped.","on_invalid":"reject","example":["6679152","6588292","6408356"],"aliases":["sku","sku_ids","ids"]}],"returns":"products[]{sku, upc, name, brand, price{current, regular}, in_stock, availability{in_stock, button_state, button_text}, rating{average, review_count}, images[], url, condition, weight, weight_value, weight_unit, dimensions, specifications[]{name, value, group}, spec_count, description, features[], included_items[], manufacturer} + not_found[] (skus Best Buy did not resolve)","cacheable":true,"cache_ttl_seconds":7200,"pricing":{"mode":"flat","credits":5},"example_params":{"skus":["6679152","6588292","6408356"]}},{"name":"reviews","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get customer reviews for a Best Buy product → each review's star rating, title, full text, author, date, pros & cons, verified-purchase / incentivized flags, how long they've owned it, helpful-vote counts, and any customer photos. Paginated.","required_params":[],"optional_params":["country","sku","url","page","page_size","sort"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sku","type":"string","required":false,"description":"Best Buy product number. Accepts the 7-digit SKU (e.g. 6565837), OR the product-id from the page URL (the code like JJGCQ8VCFQ), OR a full bestbuy.com product link — any of the three works.","on_invalid":"reject","example":"6565837","aliases":["skuId","sku_id","product_id","id"]},{"name":"url","type":"string","required":false,"description":"A full bestbuy.com product page URL (alternative to the product number).","on_invalid":"reject","example":"https://www.bestbuy.com/product/apple-macbook-air/JJGCQYXQ58/sku/6565837","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"Page of reviews to return.","on_invalid":"ignore","default":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (max 100).","on_invalid":"ignore","default":20,"minimum":1,"maximum":100,"aliases":["pageSize"]},{"name":"sort","type":"enum","required":false,"description":"How to order the reviews.","on_invalid":"ignore","allowed_values":[{"value":"MOST_RECENT","label":"Newest first"},{"value":"MOST_HELPFUL","label":"Most helpful first"},{"value":"HIGHEST_RATING","label":"Highest rating first"},{"value":"LOWEST_RATING","label":"Lowest rating first"}],"default":"MOST_RECENT"}],"returns":"{sku, total_reviews, total_pages, page, rating_breakdown, reviews[]{rating, title, text, author, submitted_at, recommended, pros, cons, days_of_ownership, helpful_count, verified_purchaser, incentivized, photos[]}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"6565837"}},{"name":"review_summary","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get the review snapshot for a Best Buy product → average rating, total review count, verified-purchase count, the full 5★-to-1★ rating breakdown, and a 'what customers say' summary of the most-mentioned pros and cons — in a single call.","required_params":[],"optional_params":["country","sku","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sku","type":"string","required":false,"description":"Best Buy product number. Accepts the 7-digit SKU (e.g. 6565837), OR the product-id from the page URL (the code like JJGCQ8VCFQ), OR a full bestbuy.com product link — any of the three works.","on_invalid":"reject","example":"6565837","aliases":["skuId","sku_id","product_id","id"]},{"name":"url","type":"string","required":false,"description":"A full bestbuy.com product page URL (alternative to the product number).","on_invalid":"reject","example":"https://www.bestbuy.com/product/apple-macbook-air/JJGCQYXQ58/sku/6565837","aliases":["product_url"]}],"returns":"{sku, total_reviews, average_rating, verified_purchase_count, rating_breakdown{5,4,3,2,1}, customers_say{pros[], cons[]}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"6565837"}},{"name":"search_suggestions","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get Best Buy search autocomplete suggestions for a partial query → the suggested search terms (with spell-correction), just like the dropdown under the search box.","required_params":["query"],"optional_params":["country","limit"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"query","type":"string","required":true,"description":"The partial search text to autocomplete (e.g. 'lapt').","on_invalid":"reject","example":"lapt","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"How many suggestions to return (1–20).","on_invalid":"ignore","default":11,"minimum":1,"maximum":20,"aliases":["count"]}],"returns":"{query, suggestions[]{term, categories[]{name, id}, product_skus[]}, corrected_query, correctly_spelled}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"laptop"}},{"name":"popular_terms","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get Best Buy's currently trending / most-popular search terms (no input needed).","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"}],"returns":"{terms[]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ca"}},{"name":"price","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get the live pricing for a Best Buy product by SKU → current price, regular price, savings, clearance/sale flags and special offers (from Best Buy's pricing API).","required_params":["sku"],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sku","type":"string","required":true,"description":"The Best Buy product SKU (7-digit number, e.g. 6565837).","on_invalid":"reject","example":"6565837","aliases":["skuId","sku_id","id"]}],"returns":"{sku, pricing{current, regular, savings, savings_pct, pricing_type, currency, button_state, button_text, in_stock, condition, offers[], name, brand}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"6571043"}},{"name":"gifts","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get the Gift-With-Purchase offers for a Best Buy product by SKU → each promotional offer (e.g. 'Apple TV Up to 1 Month GWP') and the free gift SKUs that come with it.","required_params":["sku"],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sku","type":"string","required":true,"description":"The Best Buy product SKU to check for gift-with-purchase.","on_invalid":"reject","example":"6565837","aliases":["skuId","sku_id","id"]}],"returns":"{sku, offers[]{offer_id, name}, gifts[]{sku, quantity, name, offer_id}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"6571043"}},{"name":"description","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get a Best Buy product's full description and complete technical specifications by SKU → the marketing description plus every spec (name/value pairs: connectivity, dimensions, features, etc.). The deep product detail that lives on the product page.","required_params":[],"optional_params":["country","sku","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sku","type":"string","required":false,"description":"The Best Buy product SKU (7-digit, e.g. 6505727).","on_invalid":"reject","example":"6505727","aliases":["skuId","sku_id","id"]},{"name":"url","type":"string","required":false,"description":"A full bestbuy.com /product/ URL (alternative to the SKU).","on_invalid":"ignore","example":"https://www.bestbuy.com/product/x/J7XSRH5CXG/sku/6505727","aliases":["product_url"]}],"returns":"{sku, description, description_short, features[], included_items[], specifications[]{name, value, group}, spec_count, weight, weight_value, weight_unit, dimensions, upc}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.bestbuy.com/product/x/J7XSRH5CXG/sku/6505727"}},{"name":"deals","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Browse Best Buy's current deals — on-sale and clearance products site-wide, sorted by biggest discount by default → each product's name, brand, current & regular price, the amount and percent saved, star rating, stock status, image and link. Great for a 'today's best deals' / price-drop feed. (To find deals within a category, use search with sort=best_discount.)","required_params":[],"optional_params":["country","sort","max_results","page","include_sponsored"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sort","type":"enum","required":false,"description":"How to order the deals (default: biggest discount).","on_invalid":"ignore","allowed_values":[{"value":"best_discount","label":"Biggest discount"},{"value":"best_selling","label":"Best selling"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"rating","label":"Customer rating"},{"value":"newest","label":"New arrivals"}],"default":"best_discount"},{"name":"max_results","type":"integer","required":false,"description":"How many deal products to return. MAXIMUM 240 (24/page, 10 pages), the same published ceiling as search. Measured 2026-08-07: 96 returned 96, 240 returned 180 — the deals grid is a finite list, so 240 is an upper bound rather than a guarantee. Above 240 the value is clamped, not rejected.","on_invalid":"ignore","default":24,"minimum":1,"maximum":240},{"name":"page","type":"integer","required":false,"description":"Result page to start from (1-based; ~24/page).","on_invalid":"ignore","default":1,"minimum":1},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep Best Buy's paid placements (marked `sponsored: true`) in the results. Set to false for organic deals only.","on_invalid":"ignore","default":true,"aliases":["sponsored"]}],"returns":"results[]{sku, name, brand, sponsored, price{current, regular, savings, savings_pct}, rating{average, review_count}, availability, image, url} + meta{record_count, with_savings, with_price, sponsored_count, sort, page, has_next (true = increment page for more; false = last page)}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ca"}},{"name":"trending","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get Best Buy's trending-right-now search terms — what shoppers are searching for at the moment (distinct from popular_terms, which is all-time most-popular). No input needed.","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"}],"returns":"{terms[]}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ca"}},{"name":"qa","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Get the customer questions & answers for a Best Buy product → each question with its author, date, and every answer (text, author, date, helpful-vote count, and which answer was voted best). Great for pre-purchase research. Paginated.","required_params":[],"optional_params":["country","sku","url","page","page_size","sort"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sku","type":"string","required":false,"description":"Best Buy product number. Accepts the 7-digit SKU (e.g. 6565837), OR the product-id from the page URL (the code like JJGCQ8VCFQ), OR a full bestbuy.com product link — any of the three works.","on_invalid":"reject","example":"6565837","aliases":["skuId","sku_id","product_id","id"]},{"name":"url","type":"string","required":false,"description":"A full bestbuy.com product page URL (alternative to the product number).","on_invalid":"reject","example":"https://www.bestbuy.com/product/apple-macbook-air/JJGCQYXQ58/sku/6565837","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"Page of questions to return.","on_invalid":"ignore","default":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Questions per page (max 100).","on_invalid":"ignore","default":10,"minimum":1,"maximum":100,"aliases":["pageSize"]},{"name":"sort","type":"enum","required":false,"description":"How to order the questions.","on_invalid":"ignore","allowed_values":[{"value":"MOST_RECENT","label":"Newest first"},{"value":"MOST_HELPFUL","label":"Most helpful first"}],"default":"MOST_RECENT"}],"returns":"{sku, total_questions, page, page_size, questions[]{id, question, detail, author, submitted_at, answer_count, helpful_count, is_featured, photos[], answers[]{id, text, author, submitted_at, helpful_count, is_best_answer, is_brand, from_best_buy_member}}}","cacheable":true,"cache_ttl_seconds":7200,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"6565837"}},{"name":"store_availability","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Check whether a Best Buy product (by SKU) is available to buy for a given ZIP code (and optionally a specific store) → an available flag plus the live buy-button status (e.g. Add to Cart / Sold Out / Pre-Order). Useful for retail-arbitrage and local-stock checks.","required_params":["sku"],"optional_params":["country","zip","store_id"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"sku","type":"string","required":true,"description":"The Best Buy product SKU (7-digit number, e.g. 6505727).","on_invalid":"reject","example":"6505727","aliases":["skuId","sku_id","id"]},{"name":"zip","type":"string","required":false,"description":"The US ZIP code to check availability for (defaults to 10001 / New York if omitted).","on_invalid":"ignore","default":"10001","example":"10001","aliases":["zip_code","postal_code","postalCode"]},{"name":"store_id","type":"string","required":false,"description":"Optional Best Buy store number to check a specific store. Omit to check general availability for the ZIP.","on_invalid":"ignore","example":"1531","aliases":["storeId"]}],"returns":"{sku, zip, store_id, available, button_state, status_text}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"6505727","zip":"10001"}},{"name":"categories","description":"US-only action; country=ca returns MARKET_UNAVAILABLE. Discover the categories and filter facets available for a Best Buy keyword search → the category sub-paths (each with a category id you can browse) plus every filterable facet (Brand, Price, Customer Rating, and category-specific attributes) with their values and product counts. Use it to learn what you can filter by before calling search.","required_params":["query"],"optional_params":["country","category"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. Default US preserves existing actions and parameters. Canada supports English query search, page1..100, max_results1..24 and actual SKU/product URL detail; other actions/advanced filters are US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing actions)"},{"value":"ca","label":"Canada (search and product_detail)"}],"default":"us","example":"ca"},{"name":"query","type":"string","required":true,"description":"The keyword to discover categories & filters for (e.g. 'laptop', 'tv', 'headphones').","on_invalid":"reject","example":"laptop","aliases":["q"]},{"name":"category","type":"string","required":false,"description":"Advanced: narrow to a sub-category first (raw facet token) to discover its deeper facets.","on_invalid":"ignore","aliases":["filter","qp"]}],"returns":"{query, categories[]{name, category_path, count}, filters[]{field, display_name, values[]{value, count, category_path}}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"laptop"}}]},{"name":"bestprice","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"BestPrice.gr API — Greek price-comparison data scraper: product search, category browsing, and every Greek shop's price for one product (lowest and highest price, shop name, availability) from bestprice.gr — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bestprice/v1","spec_available":true,"actions":[{"name":"search","description":"Search BestPrice by keyword. Returns the product grid: title, the price BestPrice shows (the lowest across shops), how many shops carry it, and the product id you feed to `product`. A row is either a compared product (`listing_type: product`) or a single shop's listing with no product page (`shop_offer`: `offer_id` and `merchant_id`, `product_id` null). BestPrice answers many queries by redirecting to a category or brand page (\"Oxford\" goes to children's oxford shoes, \"samsung\" to the Samsung brand page); when it does, `redirected_to` names that page, because the rows are its grid and may not be what the query meant. Only the FIRST page of a grid is served to us: BestPrice redirects deeper pages back to page 1, so `page` above 1 returns no rows and `page_available: false` rather than the same rows again.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, in Greek or English. A BARCODE does NOT work here — BestPrice's text index does not carry barcodes (measured: 0 rows for 12 of 12 EANs that BestPrice publishes on its own pages). Use the `barcode` action for an EAN/GTIN/UPC.","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword","term"]},{"name":"page","type":"integer","required":false,"description":"1-based page of the grid (16 products a page, measured 2026-10-13). BestPrice currently serves only page 1 to us; a deeper page answers with no rows and page_available=false.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows to return from the page (1-24). The source serves 24 a page; use `page` for more.","on_invalid":"ignore","default":24,"minimum":1,"maximum":24}],"returns":"products[]{listing_type (product|shop_offer), product_id, offer_id, merchant_id, url, title, price_eur, currency, category_id, shop_count, image}, page, limit, query, redirected_to{type (category|brand), id, title, url} (only when BestPrice redirected), page_available (false when a deeper page was not served)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone"}},{"name":"barcode","description":"Find a product by its BARCODE (EAN-13, EAN-8, UPC-12 or GTIN-14) and get the BestPrice product id, so a catalogue can be matched on barcodes instead of names. Keyword `search` cannot do this: BestPrice's text index has no barcodes in it. Each row carries `match_type`: `barcode_exact` means BestPrice itself declared an exact barcode match (measured 25 of 25 correct, no false positive), `text_match` means it fell back to a fuzzy name match and MAY be a different product. By default only exact matches are returned. Coverage is partial and honest: 25 of 36 barcodes taken off BestPrice's own product pages resolved (3/3 in electronics, appliances, laptops, toys and tools; 1/3 in supermarket and beauty), so an empty answer means BestPrice's barcode index does not carry that code — not an error. Feed the returned `product_id` to `product` for every Greek shop's price.","required_params":["barcode"],"optional_params":["strict","limit"],"params":[{"name":"barcode","type":"string","required":true,"description":"The barcode: EAN-13 (8806091024749), EAN-8, UPC-12 or GTIN-14. Spaces and hyphens are ignored. A 13-digit code that misses is retried zero-padded to 14 automatically.","on_invalid":"reject","example":"8806091024749","value_pattern":"[\\d\\s-]{8,20}","aliases":["ean","gtin","upc","code","barcode_number"]},{"name":"strict","type":"boolean","required":false,"description":"true (default): return ONLY rows BestPrice declared an exact barcode match for. false: also return its fuzzy name matches, marked `match_type: text_match` — useful for review, but 2 of 6 measured fuzzy rows were a DIFFERENT product, so do not treat one as a barcode match.","on_invalid":"ignore","default":true,"example":true},{"name":"limit","type":"integer","required":false,"description":"Rows to return (1-8). The source's own ceiling is 8; a barcode normally resolves to exactly one.","on_invalid":"ignore","default":8,"example":8,"minimum":1,"maximum":8}],"returns":"products[]{product_id, url, title, brand, model, variant, category_id, category_title, price_from_eur, currency, offer_count, availability, rating, rating_count, image, match_type (barcode_exact|text_match), match_confidence}, barcode, barcode_queried, strict, exact_match","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"barcode":"8806091024749"}},{"name":"product","description":"One product with EVERY shop offer: the shop name, its price, availability and the price band across the market (lowest, highest, how many shops). This is the whole point of a price-comparison source. It also returns the product's BARCODE (`gtin`, with `gtin_type` naming the key it came from) — published on 36 of 36 pages measured across 12 categories — so a catalogue can be matched on barcodes even for the codes BestPrice's `barcode` lookup does not carry.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"The numeric product id, or a bestprice.gr product URL.","on_invalid":"reject","example":"2159006120","aliases":["id","url"]}],"returns":"product{product_id, url, title, brand, gtin, gtin_type, mpn, sku, category_path, price_low_eur, price_high_eur, offer_count (what the market has), offers_listed (how many this response carries), rating, rating_count, offers[]{shop, price_eur, currency, url, availability, condition}}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"2162499899"}},{"name":"category","description":"Browse one category's grid without a keyword. Same rows as `search`. Take the category id from a search row's `category_id` or from a category URL.","required_params":["category_id"],"optional_params":["page","limit","query"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric category id (806), or a bestprice.gr category URL.","on_invalid":"reject","example":"806","aliases":["category","cid","url"]},{"name":"query","type":"string","required":false,"description":"Optional keyword to narrow the category.","on_invalid":"ignore","example":"iphone","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"1-based page of the grid (16 products a page, measured 2026-10-13). BestPrice currently serves only page 1 to us; a deeper page answers with no rows and page_available=false.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows to return from the page (1-24). The source serves 24 a page; use `page` for more.","on_invalid":"ignore","default":24,"minimum":1,"maximum":24}],"returns":"products[] (same shape as search), page, limit, category_id","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"806"}}]},{"name":"bidspotter","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"BidSpotter API - industrial & commercial auction catalogues, lots and live bids (bidspotter.com, bidspotter.co.uk)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bidspotter/v1","spec_available":true,"actions":[{"name":"auctions","description":"Auction catalogues on BidSpotter, one clean row per auction: title, auctioneer, date and time (UTC and as shown), type (timed / live webcast / tender), status (upcoming, ending now, closed …), location and address, lot categories with counts, image and catalogue link. Filter by auction type, country, state, auctioneer, category or association; current or past auctions; 60 per page with the site's own total.","required_params":[],"optional_params":["site","status","auction_type","country","state","auctioneer","category","master_category","association","sort","page","exclude_closed","include_facets"],"params":[{"name":"site","type":"enum","required":false,"description":"Which BidSpotter marketplace. bidspotter.com and bidspotter.co.uk list different auctions.","on_invalid":"reject","allowed_values":[{"value":"us","label":"bidspotter.com — worldwide, mostly US & Canada (default)"},{"value":"uk","label":"bidspotter.co.uk — the separate UK marketplace"}],"default":"us"},{"name":"status","type":"enum","required":false,"description":"Current (incl. today's just-closed) or past auctions.","on_invalid":"reject","allowed_values":[{"value":"current","label":"Current and upcoming auctions (default)"},{"value":"past","label":"Past auctions"}],"default":"current"},{"name":"auction_type","type":"enum","required":false,"description":"Only timed online auctions, live webcasts, tenders or catalogue-only sales.","on_invalid":"reject","allowed_values":[{"value":"timed","label":"Timed online auction"},{"value":"live","label":"Live webcast auction"},{"value":"tender","label":"Tender online"},{"value":"catalogue","label":"Catalogue only (bidspotter.co.uk)"}]},{"name":"country","type":"string","required":false,"description":"Country of the auction, by name as the site lists it (United States, Canada, United Kingdom …; include_facets lists them).","on_invalid":"reject","example":"United States"},{"name":"state","type":"string","required":false,"description":"State / county, by name (include_facets lists them).","on_invalid":"reject","example":"Texas"},{"name":"auctioneer","type":"string","required":false,"description":"Auctioneer by its exact name on the site (include_facets lists them).","on_invalid":"reject","example":"Myron Bowling Auctioneers"},{"name":"category","type":"string","required":false,"description":"Lot category code (FRK = Forklifts, CAR = Cars, MCT = Machine Tools & Tools …; auctions[].categories[].code or include_facets).","on_invalid":"reject","example":"FRK"},{"name":"master_category","type":"string","required":false,"description":"Top category code (IAC = Industrial & commercial, COV = Automotive & vehicles, MET = Metalworking, CAT = Food & beverage equipment …).","on_invalid":"reject","example":"IAC"},{"name":"association","type":"string","required":false,"description":"Auctioneer association code (NAA, IAA, MDNA, AED, RICS).","on_invalid":"reject","example":"NAA"},{"name":"sort","type":"enum","required":false,"description":"Order: date (default) or auctioneer.","on_invalid":"reject","allowed_values":[{"value":"date","label":"Auction date (default)"},{"value":"auctioneer","label":"Auctioneer name"}]},{"name":"page","type":"integer","required":false,"description":"Page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"exclude_closed","type":"boolean","required":false,"description":"Drop rows whose status is closed (today's finished sales stay on the current list). Paging and totals stay the site's own.","on_invalid":"reject","default":false},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the site's filter values with counts (auctioneers, countries, states, categories …) — use them as filter values.","on_invalid":"reject","default":false}],"returns":"auctions[]{auction_ref, auction_id, title, description, auctioneer{name, slug, url}, auction_type (timed|live_webcast|tender|catalogue_only), auction_type_label, status (upcoming|ending_now|ends_today|live_now|closed|…), status_label, date_text, date_utc, bidding_opens_at, closes_at, location, address{street, locality, region, postal_code, country}, image, categories[]{code, name, lot_count}, url, lots_url}, count, total_results, total_pages, page, has_more, excluded_closed, filters_applied, facets?","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"lots","description":"The lots of one BidSpotter auction catalogue with the auction itself: every lot's number, title, description, image, opening price, current bid, bid count, next minimum bid, reserve met, closing time and location, plus the auction's dates, currency, buyer's premium, sales tax, venue address and auctioneer contact. Filter by keyword, category or brand; sort by lot number, closing time or bid.","required_params":[],"optional_params":["url","auction_ref","site","page","page_size","sort","query","category","brand","include_bids","include_facets"],"params":[{"name":"url","type":"string","required":false,"description":"A bidspotter.com or bidspotter.co.uk catalogue URL (any page of it), as in auctions[].url.","on_invalid":"reject","example":"https://www.bidspotter.com/en-us/auction-catalogues/witham/catalogue-id-witham10196"},{"name":"auction_ref","type":"string","required":false,"description":"The catalogue id (the part after catalogue-id- in its URL), as in auctions[].auction_ref. Use with site; the auctioneer is looked up.","on_invalid":"reject","example":"witham10196","aliases":["catalogue_id"]},{"name":"site","type":"enum","required":false,"description":"Which BidSpotter marketplace. bidspotter.com and bidspotter.co.uk list different auctions.","on_invalid":"reject","allowed_values":[{"value":"us","label":"bidspotter.com — worldwide, mostly US & Canada (default)"},{"value":"uk","label":"bidspotter.co.uk — the separate UK marketplace"}],"default":"us"},{"name":"page","type":"integer","required":false,"description":"Page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"enum","required":false,"description":"Lots per page, as the site offers (60 or 120).","on_invalid":"reject","allowed_values":[{"value":"60","label":"60 lots per page (default)"},{"value":"120","label":"120 lots per page"}],"default":"60"},{"name":"sort","type":"enum","required":false,"description":"Order of lots (webcasts support lot_number and newest only).","on_invalid":"reject","allowed_values":[{"value":"lot_number","label":"Lot number (default)"},{"value":"newest","label":"Most recently listed"},{"value":"end_date","label":"Closing soonest (timed auctions)"},{"value":"low_bid","label":"Lowest bid first (timed)"},{"value":"high_bid","label":"Highest bid first (timed)"}]},{"name":"query","type":"string","required":false,"description":"Only lots matching these words inside this catalogue.","on_invalid":"reject","example":"land rover","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Only this lot category code (facets: categories).","on_invalid":"reject","example":"CAR"},{"name":"brand","type":"string","required":false,"description":"Only this brand, as the site lists it (facets: brands).","on_invalid":"reject","example":"Land Rover"},{"name":"include_bids","type":"boolean","required":false,"description":"Read the live bid state (current bid, bid count, next minimum bid, reserve met, closing time) from the site's bid service: one extra small request. false = only what the page itself carries (no bid counts).","on_invalid":"reject","default":true},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the site's filter values with counts (auctioneers, countries, states, categories …) — use them as filter values.","on_invalid":"reject","default":false}],"returns":"auction{auction_ref, auction_id, title, description, url, lots_url, image, auctioneer{name, slug, url, phone, email, logo}, auction_type, auction_type_label, status, status_label, date_text, date_utc, bidding_opens_at, closes_at, currency, buyers_premium_pct, sales_tax_pct, location, venue_address{street, locality, region, postal_code, country}, terms_url, important_info_url}, lots[]{lot_id, lot_number, title, description (the card's snippet), description_truncated, url, image, image_count, auction_ref, auction_id, auctioneer{name, slug, url}, auction_type (timed|live_webcast), bidding_type, currency, is_featured, opening_price, current_bid, next_minimum_bid, bid_count (timed), buy_it_now_price, has_reserve, reserve_met, quantity, starts_at, ends_at (UTC, timed), sale_date_text (webcast), closed, hammer_price (closed lots, only when the auctioneer publishes results), passed (closed unsold, when published), results_published, location, bids_source (live|page)}, count, total_results, total_pages, page, page_size, has_more, bids_status (ok|partial|unavailable|not_requested|not_applicable), filters_applied, facets?","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.bidspotter.com/en-us/auction-catalogues/witham/catalogue-id-witham10196"}},{"name":"lot","description":"One BidSpotter lot in full: title, lot number, the whole description, every image, current bid, bid count, opening price, next minimum bid, reserve met, buy-it-now, start and closing time, hammer price when sold and published, lot location, buyer's premium, sales tax, payment methods, removal / pickup notes, watchers, previous and next lot, the auction and the auctioneer's contact.","required_params":[],"optional_params":["url","auction_ref","lot_id","site","include_bids"],"params":[{"name":"url","type":"string","required":false,"description":"A bidspotter.com / bidspotter.co.uk lot URL (lots[].url).","on_invalid":"reject","example":"https://www.bidspotter.com/en-us/auction-catalogues/witham/catalogue-id-witham10196/lot-3930bb91-e312-4b7e-a996-b4ef00bb0b4e"},{"name":"auction_ref","type":"string","required":false,"description":"The catalogue id (the part after catalogue-id- in its URL), as in auctions[].auction_ref. Use with site; the auctioneer is looked up.","on_invalid":"reject","example":"witham10196","aliases":["catalogue_id"]},{"name":"lot_id","type":"string","required":false,"description":"The lot's UUID (lots[].lot_id); with auction_ref instead of url.","on_invalid":"reject","example":"3930bb91-e312-4b7e-a996-b4ef00bb0b4e"},{"name":"site","type":"enum","required":false,"description":"Which BidSpotter marketplace. bidspotter.com and bidspotter.co.uk list different auctions.","on_invalid":"reject","allowed_values":[{"value":"us","label":"bidspotter.com — worldwide, mostly US & Canada (default)"},{"value":"uk","label":"bidspotter.co.uk — the separate UK marketplace"}],"default":"us"},{"name":"include_bids","type":"boolean","required":false,"description":"Read the live bid state (current bid, bid count, next minimum bid, reserve met, closing time) from the site's bid service: one extra small request. false = only what the page itself carries (no bid counts).","on_invalid":"reject","default":true}],"returns":"lot{lot_id, lot_number, title, description, url, images[], image, image_count, auction_ref, auction_id, auction_type, auction{auction_ref, title, url, lots_url, date_text, date_utc, venue_address[]}, auctioneer{name, slug, url, phone, logo}, auction_date_text, location, payment_methods, buyers_premium_pct, sales_tax_pct, hammer_price_published, watchers, previous_lot{lot_id, lot_number, title, url}, next_lot{…}, removal_info, currency, opening_price, current_bid, next_minimum_bid, bid_count, buy_it_now_price, has_reserve, reserve_met, quantity, starts_at, ends_at, bidding_opens_text, bidding_ends_text, closed, hammer_price, passed, bids_source}, bids_status","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.bidspotter.com/en-us/auction-catalogues/witham/catalogue-id-witham10196/lot-3930bb91-e312-4b7e-a996-b4ef00bb0b4e"}},{"name":"search","description":"Search lots across every BidSpotter auction by keyword (forklift, cnc lathe, john deere …), narrowed by country, state, auction type, auctioneer, category or brand. Each row is a lot with its auction and auctioneer, prices, current bid, bid count and closing time, with the site's own total. Matching is the site's (fuzzy: forklift also finds fork lift / lift truck).","required_params":["query"],"optional_params":["query","site","country","state","auction_type","auctioneer","category","master_category","brand","sort","page","include_bids","include_facets"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search lot titles and descriptions for.","on_invalid":"reject","example":"forklift","aliases":["q","keyword"]},{"name":"site","type":"enum","required":false,"description":"Which BidSpotter marketplace. bidspotter.com and bidspotter.co.uk list different auctions.","on_invalid":"reject","allowed_values":[{"value":"us","label":"bidspotter.com — worldwide, mostly US & Canada (default)"},{"value":"uk","label":"bidspotter.co.uk — the separate UK marketplace"}],"default":"us"},{"name":"country","type":"string","required":false,"description":"Lot country, by name (facets: countries).","on_invalid":"reject","example":"United States"},{"name":"state","type":"string","required":false,"description":"Lot state / county, by name (facets: states).","on_invalid":"reject","example":"Ohio"},{"name":"auction_type","type":"enum","required":false,"description":"Only timed or only webcast lots.","on_invalid":"reject","allowed_values":[{"value":"timed","label":"Timed online"},{"value":"live","label":"Live webcast"}]},{"name":"auctioneer","type":"string","required":false,"description":"Auctioneer by its exact name (facets: auctioneers).","on_invalid":"reject"},{"name":"category","type":"string","required":false,"description":"Lot category code (facets: categories).","on_invalid":"reject","example":"FRK"},{"name":"master_category","type":"string","required":false,"description":"Top category code (facets: master_categories).","on_invalid":"reject","example":"IAC"},{"name":"brand","type":"string","required":false,"description":"Brand, as the site lists it (facets: brands).","on_invalid":"reject","example":"Toyota"},{"name":"sort","type":"enum","required":false,"description":"Order: relevance (default), auction_date, auction_house, newest.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (default)"},{"value":"auction_date","label":"Auction date"},{"value":"auction_house","label":"Auction house"},{"value":"newest","label":"Most recently listed"}]},{"name":"page","type":"integer","required":false,"description":"Page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"include_bids","type":"boolean","required":false,"description":"Read the live bid state (current bid, bid count, next minimum bid, reserve met, closing time) from the site's bid service: one extra small request. false = only what the page itself carries (no bid counts).","on_invalid":"reject","default":true},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the site's filter values with counts (auctioneers, countries, states, categories …) — use them as filter values.","on_invalid":"reject","default":false}],"returns":"results[]{lot_id, lot_number, title, description (the card's snippet), description_truncated, url, image, image_count, auction_ref, auction_id, auctioneer{name, slug, url}, auction_type (timed|live_webcast), bidding_type, currency, is_featured, opening_price, current_bid, next_minimum_bid, bid_count (timed), buy_it_now_price, has_reserve, reserve_met, quantity, starts_at, ends_at (UTC, timed), sale_date_text (webcast), closed, hammer_price (closed lots, only when the auctioneer publishes results), passed (closed unsold, when published), results_published, location, bids_source (live|page)}, count, total_results, total_pages, page, has_more, bids_status, filters_applied, facets?","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"forklift","include_bids":false}},{"name":"bids","description":"Live bid state for up to 120 BidSpotter lots in one call (timed and webcast): current bid, bid count, opening price, next minimum bid, reserve met, closing time and closed. For watching lots you already know without re-reading the catalogue.","required_params":["lot_ids"],"optional_params":["lot_ids","site"],"params":[{"name":"lot_ids","type":"array","required":true,"description":"Lot UUIDs (lots[].lot_id), up to 120.","on_invalid":"reject","example":["3930bb91-e312-4b7e-a996-b4ef00bb0b4e","5530e1e2-2ea8-40fb-9481-b4ef00bb2fee"]},{"name":"site","type":"enum","required":false,"description":"Which BidSpotter marketplace. bidspotter.com and bidspotter.co.uk list different auctions.","on_invalid":"reject","allowed_values":[{"value":"us","label":"bidspotter.com — worldwide, mostly US & Canada (default)"},{"value":"uk","label":"bidspotter.co.uk — the separate UK marketplace"}],"default":"us"}],"returns":"bids[]{lot_id, auction_type (timed|live_webcast), currency, opening_price, current_bid, next_minimum_bid, bid_count (timed), has_reserve, reserve_met, quantity, starts_at, ends_at, closed}, count, not_found[]  (hammer prices: lots / lot, which honour the auctioneer's publish setting)","cacheable":true,"cache_ttl_seconds":30,"pricing":{"mode":"flat","credits":1},"example_params":{"lot_ids":["3930bb91-e312-4b7e-a996-b4ef00bb0b4e","5530e1e2-2ea8-40fb-9481-b4ef00bb2fee"]}}]},{"name":"bienici","category":{"id":"real-estate","title":"Real Estate"},"title":"Bien'ici API scraper — French real-estate portal: property search by town or postcode, price, surface, rooms, transaction and property type, and the full listing (price, price per m², surface, rooms, energy and GHG class, heating, charges, fees, photos, agency). No account, no browser.","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/bienici/v1","spec_available":true,"actions":[{"name":"search","description":"Search Bien'ici (bienici.com) property listings for sale or rent in France: price (from-price on new-build programmes), price per m², surface, land, rooms, bedrooms, floor, energy and GHG class, heating, building year, charges and deposit, agency fees, town, postcode, district and map position, agency, photos and description. Filter by transaction, property type, town or postcode, price, surface, rooms, bedrooms, new build and keywords; sort by relevance, newest, price or surface; paginated.","required_params":["transaction"],"optional_params":["query","property_type","city","zipcode","price_min","price_max","surface_min","surface_max","rooms_min","rooms_max","bedrooms_min","new_build","sort","page","limit","page_token","include_pii","max_rotations"],"params":[{"name":"transaction","type":"enum","required":true,"description":"sale or rent.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"For rent"}],"example":"sale"},{"name":"query","type":"string","required":false,"description":"Keywords that must all appear in the title or description (accents and case ignored). bienici has no keyword search of its own, so the engine scans results for matches; total is then null and next_page_token resumes the scan.","on_invalid":"reject","example":"terrasse"},{"name":"property_type","type":"array","required":false,"description":"One or more of apartment, house, land, parking, building, office, commercial, loft, townhouse, castle, new_build_programme, other. Default: all.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"apartment"},{"value":"house","label":"house"},{"value":"land","label":"land"},{"value":"parking","label":"parking"},{"value":"building","label":"building"},{"value":"office","label":"office"},{"value":"commercial","label":"commercial"},{"value":"loft","label":"loft"},{"value":"townhouse","label":"townhouse"},{"value":"castle","label":"castle"},{"value":"new_build_programme","label":"new_build_programme"},{"value":"other","label":"other"}]},{"name":"city","type":"string","required":false,"description":"Town name, e.g. Lyon, Bordeaux, Paris.","on_invalid":"reject","example":"Lyon"},{"name":"zipcode","type":"string","required":false,"description":"5-digit French postcode (alone or with city).","on_invalid":"reject","example":"69003"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent, charges included, for rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent, charges included, for rentals).","on_invalid":"reject","minimum":0},{"name":"surface_min","type":"number","required":false,"description":"Smallest living surface, m².","on_invalid":"reject","minimum":0},{"name":"surface_max","type":"number","required":false,"description":"Largest living surface, m².","on_invalid":"reject","minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Fewest rooms (pièces).","on_invalid":"reject","minimum":1,"maximum":20},{"name":"rooms_max","type":"integer","required":false,"description":"Most rooms (pièces).","on_invalid":"reject","minimum":1,"maximum":20},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms.","on_invalid":"reject","minimum":1,"maximum":20},{"name":"new_build","type":"boolean","required":false,"description":"true: new-build only; false: existing homes only.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"relevance, newest, price_asc, price_desc, surface_asc or surface_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"newest","label":"newest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"surface_asc","label":"surface_asc"},{"value":"surface_desc","label":"surface_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (bienici serves the first 2,500 results of a search).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2500},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100},{"name":"page_token","type":"string","required":false,"description":"With query (or a postcode inside a multi-postcode town): the next_page_token of the previous page, to continue the scan.","on_invalid":"reject"},{"name":"include_pii","type":"boolean","required":false,"description":"Also return the contact person's name/phone and an independent agent's name.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, reference, title, url, status, price, currency, price_is_from, price_max, price_not_published, price_has_decreased, published_at, updated_at, location{city, zipcode, district, department_id, country, latitude, longitude, coordinates_precision, coordinates_radius_m}, seller{type, account_type, name, siren, has_phone}, thumbnail, image_count, images[], description, property{property_type, transaction, is_new_build, surface_m2, surface_max_m2, land_surface_m2, rooms, bedrooms, bathrooms, shower_rooms, toilets, floor, floors_in_building, elevator, balcony, terrace, garden, pool, cellar, parking_spaces, features[], energy_class, ghg_class, energy_consumption_kwh_m2, ghg_emissions_kg_m2, annual_energy_cost_min, annual_energy_cost_max, heating_type, building_year, orientation, furnished, available_from, price_per_m2, rent_excluding_charges, monthly_charges, charges_included, security_deposit, rental_fees, agency_fees_paid_by, agency_fees_pct, price_excluding_fees, annual_condo_charges, rent_control{…}, virtual_tour_url, …}}, count, total, page, limit, has_more, next_page_token, sort_applied, location_applied{name, type, postal_codes}, text_match{mode, scanned, matched}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"transaction":"sale","city":"Lyon"}},{"name":"listing","description":"One Bien'ici listing by id or URL: price, price per m², surface, land, rooms, bedrooms, bathrooms, floor, elevator, energy (DPE) and GHG class with kWh and CO2 figures and the annual energy bill range, heating, building year, charges, deposit, fees, rent control, transaction and property type, town, postcode, district, map position and its precision, photos, description, publication date and the agency (name, RCS).","required_params":["ad_id"],"optional_params":["include_pii","max_rotations"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The bienici ad id (the last part of an ad URL, e.g. ag691943-549827780) or the full ad URL.","on_invalid":"reject","example":"ag691943-549827780","aliases":["url","id"]},{"name":"include_pii","type":"boolean","required":false,"description":"Also return the contact person's name/phone and an independent agent's name.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{ad_id, reference, title, url, status, price, currency, price_is_from, price_max, price_not_published, price_has_decreased, published_at, updated_at, location{city, zipcode, district, department_id, country, latitude, longitude, coordinates_precision, coordinates_radius_m}, seller{type, account_type, name, siren, has_phone}, thumbnail, image_count, images[], description, property{property_type, transaction, is_new_build, surface_m2, surface_max_m2, land_surface_m2, rooms, bedrooms, bathrooms, shower_rooms, toilets, floor, floors_in_building, elevator, balcony, terrace, garden, pool, cellar, parking_spaces, features[], energy_class, ghg_class, energy_consumption_kwh_m2, ghg_emissions_kg_m2, annual_energy_cost_min, annual_energy_cost_max, heating_type, building_year, orientation, furnished, available_from, price_per_m2, rent_excluding_charges, monthly_charges, charges_included, security_deposit, rental_fees, agency_fees_paid_by, agency_fees_pct, price_excluding_fees, annual_condo_charges, rent_control{…}, virtual_tour_url, …}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"ad_id":"ag691943-549827780"}}]},{"name":"bigbasket","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"BigBasket API — India's Tata online supermarket (incl. BB Now): price, MRP, discount, unit price, pack sizes, stock per PIN code, full product data","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bigbasket/v1","spec_available":true,"actions":[{"name":"search","description":"Search bigbasket AS SEEN FROM ONE PIN CODE (a search term, or a category / brand page): products with selling price, MRP, discount, unit price (per 100 g / per litre ...), pack size and the price of every other pack size, stock state, brand, category path, EAN, rating and the shelf offer text. Filters: brand, price band, discount band, minimum rating; six sort orders. `pincode` and one of `query` / `category` / `brand` are required.","required_params":["pincode"],"optional_params":["query","category","brand","price_band","discount_band","min_rating","sort","page"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: bigbasket's catalogue, prices and stock depend on it (Bangalore 560004 and Mumbai 400020 give different totals and prices). Echoed.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"query","type":"string","required":false,"description":"What to search for, as typed in the bigbasket search box.","on_invalid":"reject","example":"atta","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"A category slug (row category.leaf/mid/top slugs or `categories`): lists that category. Not combined with `query`.","on_invalid":"reject","example":"atta-whole-wheat","aliases":["category_slug"]},{"name":"brand","type":"string","required":false,"description":"A brand slug as rows return it in `brand_slug`. Alone: the brand's page; with `query` or `category`: a brand filter.","on_invalid":"reject","example":"aashirvaad","aliases":["brand_slug"]},{"name":"price_band","type":"enum","required":false,"description":"Selling-price band, as the site offers it. The source matches the product family, so a row whose shown pack is outside the band can appear (counted in rows_outside_price_filter).","on_invalid":"reject","allowed_values":[{"value":"under_20","label":"Less than Rs 20"},{"value":"21_50","label":"Rs 21 to Rs 50"},{"value":"51_100","label":"Rs 51 to Rs 100"},{"value":"101_200","label":"Rs 101 to Rs 200"},{"value":"201_500","label":"Rs 201 to Rs 500"},{"value":"over_500","label":"More than Rs 500"}]},{"name":"discount_band","type":"enum","required":false,"description":"Discount band off MRP.","on_invalid":"reject","allowed_values":[{"value":"upto_5","label":"Upto 5%"},{"value":"5_10","label":"5% - 10%"},{"value":"10_15","label":"10% - 15%"},{"value":"15_25","label":"15% - 25%"},{"value":"over_25","label":"More than 25%"}]},{"name":"min_rating","type":"enum","required":false,"description":"Minimum product star rating.","on_invalid":"reject","allowed_values":[{"value":"3","label":"3 Star"},{"value":"4","label":"4 Star"},{"value":"5","label":"5 Star"}]},{"name":"sort","type":"enum","required":false,"description":"Result order as bigbasket sorts (not strictly monotonic).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (default)"},{"value":"price_asc","label":"Price - Low to High"},{"value":"price_desc","label":"Price - High to Low"},{"value":"saving_desc","label":"Rupee Saving - High to Low"},{"value":"saving_asc","label":"Rupee Saving - Low to High"},{"value":"discount_desc","label":"% Off - High to Low"}],"default":"relevance","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Page number (40 rows per search page, 48 per category / brand page).","on_invalid":"reject","default":1,"minimum":1}],"returns":"pincode, location{city_id}, serviceable, query, category, brand, total (the source's own count), page, last_page, has_next, returned, substituted_results (true = the source found nothing and filled the page with its own suggestions), substituted_for, rows_outside_price_filter (with price_band), results[]{product_id (-> product.product_id), name, brand, brand_slug, pack_size, pack_description, url, image, image_count, ean (check-digit-valid GTIN only), ean_code_raw, price, mrp, discount_percent, discount_text, currency, unit_price{amount, per}, unit_price_consistent, offer_text, offer_type, in_stock, availability_code, not_for_sale, button, eta, is_best_value, category{top, top_slug, mid, mid_slug, leaf, leaf_id}, rating{average, ratings, reviews}, food_type, other_packs[]{product_id, pack_size, url, price, mrp, discount_percent, discount_text, unit_price, unit_price_consistent, in_stock, availability_code, is_best_value}, store_id, rank}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"atta","pincode":"400020"}},{"name":"product","description":"One bigbasket product at one PIN code, by the `product_id` a search row returns (or its bigbasket.com/pd/ URL): price, MRP, discount, unit price, stock, pack size, EAN, brand, breadcrumb, rating and review counts, images, the product page sections (about, ingredients, nutritional facts, storage, other info incl. manufacturer and best-before), tags — plus EVERY pack size of the product with its own price and stock.","required_params":["pincode","product_id"],"optional_params":[],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code. REQUIRED, echoed.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"product_id","type":"string","required":true,"description":"The product's `product_id` exactly as a search row returns it, or its https://www.bigbasket.com/pd/<id>/... URL.","on_invalid":"reject","example":"30006887","aliases":["id","sku","url","product_url"]}],"returns":"pincode, location, serviceable, product{product_id, name, brand, pack_size, url, ean, ean_code_raw, ean_on_page, price, mrp, discount_percent, discount_text, unit_price, unit_price_consistent, offer_text, in_stock, availability_code, category, rating, food_type, breadcrumb[], images[], description, ingredients, nutrition, storage, other_info, sections{}, tags[]}, packs[]{product_id, pack_size, url, price, mrp, discount_percent, discount_text, unit_price, in_stock, availability_code, is_best_value}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"30006887","pincode":"400020"}},{"name":"pincode","description":"Whether bigbasket delivers to a PIN code and how: the place it resolves to, the serviceability of each bigbasket service (bb-b2c slot delivery, bbnow quick delivery ...), and for the located visitor the stores (service areas) with their delivery promise ('Get it in 10 mins') and the next available slot.","required_params":["pincode"],"optional_params":[],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code.","on_invalid":"reject","example":"560001","aliases":["pin","pin_code","postal_code","zip"]}],"returns":"pincode, place, lat, lng, area, city, state, serviceable, services{<service>: <state>}, location{city_id}, stores[]{store_id, services[], eta, eta_message}, next_slots[]{store_id, message, eta_minutes, slot_time, slots_full}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"pincode":"560001"}},{"name":"categories","description":"bigbasket's category tree (top level > sub > leaf) with slugs for search.category.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{name, slug, id, url, children[]{...}}, count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}}]},{"name":"bigweb","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"BIGWEB API — Japanese trading-card shop BIGWEB / BIG MAGIC (bigweb.co.jp): selling prices per condition with stock and the shop's buy-back prices (買取価格) with how many it takes, for 29 games including Magic: The Gathering, Pokémon, Yu-Gi-Oh!, One Piece, Duel Masters and Weiß Schwarz. JPY, no login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bigweb/v1","spec_available":true,"actions":[{"name":"search","description":"Search BIGWEB's products for one game by card name or card number, set, rarity, colour, condition, language, the game's own extra filters, curated lists and reduced prices; sort by price, newest or syllabary. One row per card and condition, with the yen price and stock.","required_params":["game"],"optional_params":["keyword","set_id","rarity_id","color_id","condition_id","language_id","attribute_id","attribute2_id","feature_id","boxes_only","singles_only","sort","page","in_stock","on_sale"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: the shop's slug (mtg, pokemon, yugioh, onepiece, dm, ws, lorcana, …). The numeric id from `games` also works. Common names such as duel_masters or one_piece are accepted.","on_invalid":"reject","allowed_values":[{"value":"mtg","label":"マジック・ザ・ギャザリング — Magic: The Gathering"},{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"dm","label":"デュエルマスターズ — Duel Masters"},{"value":"union","label":"UNION ARENA — Union Arena"},{"value":"onepiece","label":"ONE PIECEカードゲーム — One Piece Card Game"},{"value":"dbscg","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Card Game Fusion World"},{"value":"bs","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"fftcg","label":"ファイナルファンタジーTCG — Final Fantasy TCG"},{"value":"gundamgcg","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"ultraman","label":"ウルトラマンカードゲーム — Ultraman Card Game"},{"value":"vg","label":"ヴァンガード — Cardfight!! Vanguard"},{"value":"fe","label":"ファイアーエムブレム — Fire Emblem Cipher"},{"value":"supply","label":"汎用サプライ — Generic card supplies (sleeves, deck boxes)"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"ws","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"wix","label":"WIXOSS-ウィクロス- — WIXOSS"},{"value":"zx","label":"Z/X ゼクス — Z/X -Zillions of enemy X-"},{"value":"character-supply","label":"キャラクターサプライ — Character card supplies"},{"value":"lorcana","label":"Disney Lorcana — Disney Lorcana"},{"value":"eiketsu","label":"英傑大戦 — Eiketsu Taisen"},{"value":"sangokushi","label":"三国志大戦 — Sangokushi Taisen"},{"value":"lycee","label":"Lycee — Lycee Overture"},{"value":"rebirth","label":"Reバース — Rebirth for you"},{"value":"evolve","label":"Shadowverse EVOLVE — Shadowverse: Evolve"},{"value":"sc","label":"クルセイド — Crusade"},{"value":"godzilla","label":"GODZILLA — Godzilla Card Game"},{"value":"ganba","label":"ガンバレジェンズ — Ganbarizing Legends"}],"example":"pokemon"},{"name":"keyword","type":"string","required":false,"description":"Card name (Japanese; English for MTG / Lorcana) or printed card number such as 288/SM-P, QCCU-JP170 or OP10-033 — the shop's own search matches both.","on_invalid":"reject","example":"ピカチュウ","aliases":["q","query","card_number","name"]},{"name":"set_id","type":"string","required":false,"description":"One set id, or several comma-separated (the `sets` action lists them).","on_invalid":"reject","example":"8533","aliases":["cardset","set"]},{"name":"rarity_id","type":"string","required":false,"description":"Rarity id(s), comma-separated. The `filters` action lists this game's ids and names.","on_invalid":"reject","example":"3007","aliases":["rarity"]},{"name":"color_id","type":"string","required":false,"description":"Colour / element / attribute id(s), whatever this game's colour filter is (`filters`).","on_invalid":"reject","example":"1609","aliases":["colour_id","color"]},{"name":"condition_id","type":"string","required":false,"description":"Physical condition id(s) from `filters`, in the games that sell by condition (Pokémon, MTG, Yu-Gi-Oh!, Duel Masters, Weiß Schwarz, Lorcana …).","on_invalid":"reject","example":"620","aliases":["condition"]},{"name":"language_id","type":"string","required":false,"description":"Printed language id(s) from `filters`; only MTG and Lorcana have them.","on_invalid":"reject","example":"2","aliases":["language","lang"]},{"name":"attribute_id","type":"string","required":false,"description":"The game's first extra filter id(s), e.g. One Piece card type (LEADER / CHARACTER …), Yu-Gi-Oh! theme, Duel Masters team, Weiß Schwarz card type. `filters` names it per game.","on_invalid":"reject","example":"684"},{"name":"attribute2_id","type":"string","required":false,"description":"The game's second extra filter id(s), e.g. One Piece attribute (打 / 斬 / 射 …). `filters` names it.","on_invalid":"reject","example":"876"},{"name":"feature_id","type":"integer","required":false,"description":"Only the cards of one curated list (`features` gives the ids). With buyback_search it returns what the shop pays for that list's cards, e.g. the 【強化買取中!!】 list on the sale side.","on_invalid":"reject","example":176,"minimum":1,"maximum":99999999,"aliases":["recommend_id"]},{"name":"boxes_only","type":"boolean","required":false,"description":"Only sealed boxes and sets.","on_invalid":"reject","default":false,"example":true},{"name":"singles_only","type":"boolean","required":false,"description":"Drop sealed boxes and sets from the rows of this page. Applied after the page is read; meta.removed_box_rows says how many were dropped.","on_invalid":"reject","default":false,"example":true},{"name":"sort","type":"enum","required":false,"description":"Order of the rows. Price sorts include sold-out products whose price the shop hides; combine with in_stock when you only want prices you can buy at.","on_invalid":"reject","allowed_values":[{"value":"default","label":"the shop's own order"},{"value":"price_asc","label":"price, lowest first"},{"value":"price_desc","label":"price, highest first"},{"value":"newest","label":"newest products first"},{"value":"oldest","label":"oldest products first"},{"value":"name","label":"Japanese syllabary (五十音順)"},{"value":"shelf","label":"shop management number (管理番号順)"}],"default":"default","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number; each page holds 100 products (the shop's fixed size). meta.last_page says how many.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5000},{"name":"in_stock","type":"boolean","required":false,"description":"Drop sold-out products from the rows of this page, as the shop's own 在庫あり switch does. A page keeps its position in the full list, so it can return fewer than 100 rows; meta.removed_sold_out_rows says how many were dropped.","on_invalid":"reject","default":false,"example":true},{"name":"on_sale","type":"boolean","required":false,"description":"Only products at a reduced price (the shop's セール品 list); list_price_jpy holds the old price.","on_invalid":"reject","default":false,"example":true,"aliases":["bargain"]}],"returns":"rows[]: id (product id: one per card AND condition; give it to `card`), game, game_name, name (as the shop writes it; English for MTG / Lorcana), name_ja (MTG / Lorcana), name_kana (Sangokushi), card_number (the printed number, read from where this game keeps it), set{id, name, code, preorder}, rarity{id, name, code}, regulation_mark (Pokémon), condition (physical condition as the shop writes it — プレイ用, 特価[傷含む], ニアミント, FOILプレイド …; null for games sold in one condition), condition_id, condition_code (NM/PLD/HP/SIGNED, MTG), is_foil (MTG), language + language_code (the printed language, MTG / Lorcana), attributes{…} (this game's other filters by their meaning: card_type, attribute, theme, team, clan …), graded + grader + grade (slabs such as 【PSA10鑑定品】), variant (the shop's edition / promo tag), note (the shop's remark, HTML removed), displayed_at_store[]{store, quantity}, is_box, is_supply, image, price_jpy (null when the shop prints none: sold out and price hidden), list_price_jpy (before reduction), on_sale, points (loyalty points), stock, in_stock, is_preorder, url, buyback_url, currency. meta: total (the shop's own count), page, per_page, last_page, has_more, sort, filters_applied, removed_sold_out_rows, removed_box_rows, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"game":"pokemon","keyword":"ピカチュウ"}},{"name":"buyback_search","description":"BIGWEB's web buy-back list (買取) for one game: what the shop PAYS per card and condition and how many copies it takes; the same name, number, set, rarity and condition filters as search, sorted by buy price if you want. BIG MAGIC's walk-in stores may pay differently.","required_params":["game"],"optional_params":["keyword","set_id","rarity_id","color_id","condition_id","language_id","attribute_id","attribute2_id","feature_id","boxes_only","singles_only","sort","page"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: the shop's slug (mtg, pokemon, yugioh, onepiece, dm, ws, lorcana, …). The numeric id from `games` also works. Common names such as duel_masters or one_piece are accepted.","on_invalid":"reject","allowed_values":[{"value":"mtg","label":"マジック・ザ・ギャザリング — Magic: The Gathering"},{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"dm","label":"デュエルマスターズ — Duel Masters"},{"value":"union","label":"UNION ARENA — Union Arena"},{"value":"onepiece","label":"ONE PIECEカードゲーム — One Piece Card Game"},{"value":"dbscg","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Card Game Fusion World"},{"value":"bs","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"fftcg","label":"ファイナルファンタジーTCG — Final Fantasy TCG"},{"value":"gundamgcg","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"ultraman","label":"ウルトラマンカードゲーム — Ultraman Card Game"},{"value":"vg","label":"ヴァンガード — Cardfight!! Vanguard"},{"value":"fe","label":"ファイアーエムブレム — Fire Emblem Cipher"},{"value":"supply","label":"汎用サプライ — Generic card supplies (sleeves, deck boxes)"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"ws","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"wix","label":"WIXOSS-ウィクロス- — WIXOSS"},{"value":"zx","label":"Z/X ゼクス — Z/X -Zillions of enemy X-"},{"value":"character-supply","label":"キャラクターサプライ — Character card supplies"},{"value":"lorcana","label":"Disney Lorcana — Disney Lorcana"},{"value":"eiketsu","label":"英傑大戦 — Eiketsu Taisen"},{"value":"sangokushi","label":"三国志大戦 — Sangokushi Taisen"},{"value":"lycee","label":"Lycee — Lycee Overture"},{"value":"rebirth","label":"Reバース — Rebirth for you"},{"value":"evolve","label":"Shadowverse EVOLVE — Shadowverse: Evolve"},{"value":"sc","label":"クルセイド — Crusade"},{"value":"godzilla","label":"GODZILLA — Godzilla Card Game"},{"value":"ganba","label":"ガンバレジェンズ — Ganbarizing Legends"}],"example":"pokemon"},{"name":"keyword","type":"string","required":false,"description":"Card name (Japanese; English for MTG / Lorcana) or printed card number such as 288/SM-P, QCCU-JP170 or OP10-033 — the shop's own search matches both.","on_invalid":"reject","example":"ピカチュウ","aliases":["q","query","card_number","name"]},{"name":"set_id","type":"string","required":false,"description":"One set id, or several comma-separated (the `sets` action lists them).","on_invalid":"reject","example":"8533","aliases":["cardset","set"]},{"name":"rarity_id","type":"string","required":false,"description":"Rarity id(s), comma-separated. The `filters` action lists this game's ids and names.","on_invalid":"reject","example":"3007","aliases":["rarity"]},{"name":"color_id","type":"string","required":false,"description":"Colour / element / attribute id(s), whatever this game's colour filter is (`filters`).","on_invalid":"reject","example":"1609","aliases":["colour_id","color"]},{"name":"condition_id","type":"string","required":false,"description":"Physical condition id(s) from `filters`, in the games that sell by condition (Pokémon, MTG, Yu-Gi-Oh!, Duel Masters, Weiß Schwarz, Lorcana …).","on_invalid":"reject","example":"620","aliases":["condition"]},{"name":"language_id","type":"string","required":false,"description":"Printed language id(s) from `filters`; only MTG and Lorcana have them.","on_invalid":"reject","example":"2","aliases":["language","lang"]},{"name":"attribute_id","type":"string","required":false,"description":"The game's first extra filter id(s), e.g. One Piece card type (LEADER / CHARACTER …), Yu-Gi-Oh! theme, Duel Masters team, Weiß Schwarz card type. `filters` names it per game.","on_invalid":"reject","example":"684"},{"name":"attribute2_id","type":"string","required":false,"description":"The game's second extra filter id(s), e.g. One Piece attribute (打 / 斬 / 射 …). `filters` names it.","on_invalid":"reject","example":"876"},{"name":"feature_id","type":"integer","required":false,"description":"Only the cards of one curated list (`features` gives the ids). With buyback_search it returns what the shop pays for that list's cards, e.g. the 【強化買取中!!】 list on the sale side.","on_invalid":"reject","example":176,"minimum":1,"maximum":99999999,"aliases":["recommend_id"]},{"name":"boxes_only","type":"boolean","required":false,"description":"Only sealed boxes and sets.","on_invalid":"reject","default":false,"example":true},{"name":"singles_only","type":"boolean","required":false,"description":"Drop sealed boxes and sets from the rows of this page. Applied after the page is read; meta.removed_box_rows says how many were dropped.","on_invalid":"reject","default":false,"example":true},{"name":"sort","type":"enum","required":false,"description":"Order of the rows. Price sorts include sold-out products whose price the shop hides; combine with in_stock when you only want prices you can buy at.","on_invalid":"reject","allowed_values":[{"value":"default","label":"the shop's own order"},{"value":"price_asc","label":"price, lowest first"},{"value":"price_desc","label":"price, highest first"},{"value":"newest","label":"newest products first"},{"value":"oldest","label":"oldest products first"},{"value":"name","label":"Japanese syllabary (五十音順)"},{"value":"shelf","label":"shop management number (管理番号順)"}],"default":"default","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number; each page holds 100 products (the shop's fixed size). meta.last_page says how many.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5000}],"returns":"rows[]: id (product id: one per card AND condition; give it to `card`), game, game_name, name (as the shop writes it; English for MTG / Lorcana), name_ja (MTG / Lorcana), name_kana (Sangokushi), card_number (the printed number, read from where this game keeps it), set{id, name, code, preorder}, rarity{id, name, code}, regulation_mark (Pokémon), condition (physical condition as the shop writes it — プレイ用, 特価[傷含む], ニアミント, FOILプレイド …; null for games sold in one condition), condition_id, condition_code (NM/PLD/HP/SIGNED, MTG), is_foil (MTG), language + language_code (the printed language, MTG / Lorcana), attributes{…} (this game's other filters by their meaning: card_type, attribute, theme, team, clan …), graded + grader + grade (slabs such as 【PSA10鑑定品】), variant (the shop's edition / promo tag), note (the shop's remark, HTML removed), displayed_at_store[]{store, quantity}, is_box, is_supply, image, buyback_price_jpy (what the shop PAYS), buy_limit (the most copies it takes), buying, url, sale_url, currency. meta: total, page, per_page, last_page, has_more, sort, filters_applied, removed_box_rows, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"game":"mtg","keyword":"Lightning Bolt"}},{"name":"card","description":"One BIGWEB product in full: sale price and stock, what the shop pays for it and how many it takes, description — plus the same card in its other conditions on both sides.","required_params":["product_id"],"optional_params":["include_other_conditions"],"params":[{"name":"product_id","type":"string","required":true,"description":"A BIGWEB product id (a row's `id`) or a bigweb.co.jp card URL (/products/<game>/cardViewer/<id>).","on_invalid":"reject","example":"726157","aliases":["id","url"]},{"name":"include_other_conditions","type":"boolean","required":false,"description":"Also return the same card (same name, number and set) in its other conditions, on both the sale and the buy-back side. Each condition is a separate product at BIGWEB.","on_invalid":"reject","default":true,"example":false}],"returns":"card{id (product id: one per card AND condition; give it to `card`), game, game_name, name (as the shop writes it; English for MTG / Lorcana), name_ja (MTG / Lorcana), name_kana (Sangokushi), card_number (the printed number, read from where this game keeps it), set{id, name, code, preorder}, rarity{id, name, code}, regulation_mark (Pokémon), condition (physical condition as the shop writes it — プレイ用, 特価[傷含む], ニアミント, FOILプレイド …; null for games sold in one condition), condition_id, condition_code (NM/PLD/HP/SIGNED, MTG), is_foil (MTG), language + language_code (the printed language, MTG / Lorcana), attributes{…} (this game's other filters by their meaning: card_type, attribute, theme, team, clan …), graded + grader + grade (slabs such as 【PSA10鑑定品】), variant (the shop's edition / promo tag), note (the shop's remark, HTML removed), displayed_at_store[]{store, quantity}, is_box, is_supply, image, price_jpy (null when the shop prints none: sold out and price hidden), list_price_jpy (before reduction), on_sale, points (loyalty points), stock, in_stock, is_preorder, url, buyback_url, currency, buyback_price_jpy, buy_limit, buying, buyback_status (buying / not_buying), description}, other_conditions[] (same fields, one row per other condition). meta: other_conditions_total.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"726157"}},{"name":"sets","description":"Every set / expansion BIGWEB lists for one game, in the shop's order, with its code — the ids `search` takes as set_id.","required_params":["game"],"optional_params":[],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: the shop's slug (mtg, pokemon, yugioh, onepiece, dm, ws, lorcana, …). The numeric id from `games` also works. Common names such as duel_masters or one_piece are accepted.","on_invalid":"reject","allowed_values":[{"value":"mtg","label":"マジック・ザ・ギャザリング — Magic: The Gathering"},{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"dm","label":"デュエルマスターズ — Duel Masters"},{"value":"union","label":"UNION ARENA — Union Arena"},{"value":"onepiece","label":"ONE PIECEカードゲーム — One Piece Card Game"},{"value":"dbscg","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Card Game Fusion World"},{"value":"bs","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"fftcg","label":"ファイナルファンタジーTCG — Final Fantasy TCG"},{"value":"gundamgcg","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"ultraman","label":"ウルトラマンカードゲーム — Ultraman Card Game"},{"value":"vg","label":"ヴァンガード — Cardfight!! Vanguard"},{"value":"fe","label":"ファイアーエムブレム — Fire Emblem Cipher"},{"value":"supply","label":"汎用サプライ — Generic card supplies (sleeves, deck boxes)"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"ws","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"wix","label":"WIXOSS-ウィクロス- — WIXOSS"},{"value":"zx","label":"Z/X ゼクス — Z/X -Zillions of enemy X-"},{"value":"character-supply","label":"キャラクターサプライ — Character card supplies"},{"value":"lorcana","label":"Disney Lorcana — Disney Lorcana"},{"value":"eiketsu","label":"英傑大戦 — Eiketsu Taisen"},{"value":"sangokushi","label":"三国志大戦 — Sangokushi Taisen"},{"value":"lycee","label":"Lycee — Lycee Overture"},{"value":"rebirth","label":"Reバース — Rebirth for you"},{"value":"evolve","label":"Shadowverse EVOLVE — Shadowverse: Evolve"},{"value":"sc","label":"クルセイド — Crusade"},{"value":"godzilla","label":"GODZILLA — Godzilla Card Game"},{"value":"ganba","label":"ガンバレジェンズ — Ganbarizing Legends"}],"example":"pokemon"}],"returns":"sets[]{id, name, code, preorder, box_set, game}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"yugioh"}},{"name":"filters","description":"This game's filter vocabulary: rarities, colours, physical conditions, languages and the game's extra filters (card type, attribute, theme, team …), with the ids search takes.","required_params":["game"],"optional_params":[],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: the shop's slug (mtg, pokemon, yugioh, onepiece, dm, ws, lorcana, …). The numeric id from `games` also works. Common names such as duel_masters or one_piece are accepted.","on_invalid":"reject","allowed_values":[{"value":"mtg","label":"マジック・ザ・ギャザリング — Magic: The Gathering"},{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"dm","label":"デュエルマスターズ — Duel Masters"},{"value":"union","label":"UNION ARENA — Union Arena"},{"value":"onepiece","label":"ONE PIECEカードゲーム — One Piece Card Game"},{"value":"dbscg","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Card Game Fusion World"},{"value":"bs","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"fftcg","label":"ファイナルファンタジーTCG — Final Fantasy TCG"},{"value":"gundamgcg","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"ultraman","label":"ウルトラマンカードゲーム — Ultraman Card Game"},{"value":"vg","label":"ヴァンガード — Cardfight!! Vanguard"},{"value":"fe","label":"ファイアーエムブレム — Fire Emblem Cipher"},{"value":"supply","label":"汎用サプライ — Generic card supplies (sleeves, deck boxes)"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"ws","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"wix","label":"WIXOSS-ウィクロス- — WIXOSS"},{"value":"zx","label":"Z/X ゼクス — Z/X -Zillions of enemy X-"},{"value":"character-supply","label":"キャラクターサプライ — Character card supplies"},{"value":"lorcana","label":"Disney Lorcana — Disney Lorcana"},{"value":"eiketsu","label":"英傑大戦 — Eiketsu Taisen"},{"value":"sangokushi","label":"三国志大戦 — Sangokushi Taisen"},{"value":"lycee","label":"Lycee — Lycee Overture"},{"value":"rebirth","label":"Reバース — Rebirth for you"},{"value":"evolve","label":"Shadowverse EVOLVE — Shadowverse: Evolve"},{"value":"sc","label":"クルセイド — Crusade"},{"value":"godzilla","label":"GODZILLA — Godzilla Card Game"},{"value":"ganba","label":"ガンバレジェンズ — Ganbarizing Legends"}],"example":"pokemon"}],"returns":"game, rarities[]{id, name}, colors[]{id, name}, color_label, conditions[]{id, name}, languages[]{id, name}, attributes[]{key, label, param, options[]{id, name}}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon"}},{"name":"features","description":"The shop's curated lists for one game, with their first products: pick-ups, recommended cards, the 【強化買取中!!】 list of cards it wants to buy, and on the buy-back side the sets it is buying now.","required_params":["game"],"optional_params":["side"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: the shop's slug (mtg, pokemon, yugioh, onepiece, dm, ws, lorcana, …). The numeric id from `games` also works. Common names such as duel_masters or one_piece are accepted.","on_invalid":"reject","allowed_values":[{"value":"mtg","label":"マジック・ザ・ギャザリング — Magic: The Gathering"},{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"dm","label":"デュエルマスターズ — Duel Masters"},{"value":"union","label":"UNION ARENA — Union Arena"},{"value":"onepiece","label":"ONE PIECEカードゲーム — One Piece Card Game"},{"value":"dbscg","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Card Game Fusion World"},{"value":"bs","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"fftcg","label":"ファイナルファンタジーTCG — Final Fantasy TCG"},{"value":"gundamgcg","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"ultraman","label":"ウルトラマンカードゲーム — Ultraman Card Game"},{"value":"vg","label":"ヴァンガード — Cardfight!! Vanguard"},{"value":"fe","label":"ファイアーエムブレム — Fire Emblem Cipher"},{"value":"supply","label":"汎用サプライ — Generic card supplies (sleeves, deck boxes)"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"ws","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"wix","label":"WIXOSS-ウィクロス- — WIXOSS"},{"value":"zx","label":"Z/X ゼクス — Z/X -Zillions of enemy X-"},{"value":"character-supply","label":"キャラクターサプライ — Character card supplies"},{"value":"lorcana","label":"Disney Lorcana — Disney Lorcana"},{"value":"eiketsu","label":"英傑大戦 — Eiketsu Taisen"},{"value":"sangokushi","label":"三国志大戦 — Sangokushi Taisen"},{"value":"lycee","label":"Lycee — Lycee Overture"},{"value":"rebirth","label":"Reバース — Rebirth for you"},{"value":"evolve","label":"Shadowverse EVOLVE — Shadowverse: Evolve"},{"value":"sc","label":"クルセイド — Crusade"},{"value":"godzilla","label":"GODZILLA — Godzilla Card Game"},{"value":"ganba","label":"ガンバレジェンズ — Ganbarizing Legends"}],"example":"pokemon"},{"name":"side","type":"enum","required":false,"description":"Which curated lists to return.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"the shop's sale lists"},{"value":"buyback","label":"the lists on its buy-back page"}],"default":"sale","example":"buyback"}],"returns":"rows[]{feature_id (give to search or buyback_search as feature_id), title, side, products[] (as search rows, or buy-back rows), products_shown}.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon"}},{"name":"suggest","description":"Product names matching part of a name, grouped by product type, as in the shop's search box.","required_params":["keyword"],"optional_params":["game"],"params":[{"name":"keyword","type":"string","required":true,"description":"Part of a name; returns the matching product names, grouped by product type.","on_invalid":"reject","example":"ピカチュウ","aliases":["q","query"]},{"name":"game","type":"enum","required":false,"description":"Optional: limit to one game.","on_invalid":"reject","allowed_values":[{"value":"mtg","label":"マジック・ザ・ギャザリング — Magic: The Gathering"},{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"dm","label":"デュエルマスターズ — Duel Masters"},{"value":"union","label":"UNION ARENA — Union Arena"},{"value":"onepiece","label":"ONE PIECEカードゲーム — One Piece Card Game"},{"value":"dbscg","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Card Game Fusion World"},{"value":"bs","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"fftcg","label":"ファイナルファンタジーTCG — Final Fantasy TCG"},{"value":"gundamgcg","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"ultraman","label":"ウルトラマンカードゲーム — Ultraman Card Game"},{"value":"vg","label":"ヴァンガード — Cardfight!! Vanguard"},{"value":"fe","label":"ファイアーエムブレム — Fire Emblem Cipher"},{"value":"supply","label":"汎用サプライ — Generic card supplies (sleeves, deck boxes)"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"ws","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"wix","label":"WIXOSS-ウィクロス- — WIXOSS"},{"value":"zx","label":"Z/X ゼクス — Z/X -Zillions of enemy X-"},{"value":"character-supply","label":"キャラクターサプライ — Character card supplies"},{"value":"lorcana","label":"Disney Lorcana — Disney Lorcana"},{"value":"eiketsu","label":"英傑大戦 — Eiketsu Taisen"},{"value":"sangokushi","label":"三国志大戦 — Sangokushi Taisen"},{"value":"lycee","label":"Lycee — Lycee Overture"},{"value":"rebirth","label":"Reバース — Rebirth for you"},{"value":"evolve","label":"Shadowverse EVOLVE — Shadowverse: Evolve"},{"value":"sc","label":"クルセイド — Crusade"},{"value":"godzilla","label":"GODZILLA — Godzilla Card Game"},{"value":"ganba","label":"ガンバレジェンズ — Ganbarizing Legends"}],"example":"yugioh"}],"returns":"rows[]{shape, names[]}.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"keyword":"ピカチュウ"}},{"name":"games","description":"The games BIGWEB lists, with their slugs and which filters each game has.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]{game, game_id, name, name_en, sells_by_condition, has_language, extra_filters[], sale_url, buyback_url}.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"bilbasen","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Bilbasen Denmark vehicle listings","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bilbasen/v1","spec_available":true,"actions":[{"name":"search","description":"Search Danish retail vehicle advertisements","required_params":[],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Source free-text vehicle search, 1–120 characters","on_invalid":"reject","example":"bmw"},{"name":"page","type":"integer","required":false,"description":"Page number; shallow paging qualified","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Source page size","on_invalid":"reject","default":10,"example":3,"minimum":1,"maximum":30}],"returns":"items, matching total, source next_page and pagination","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"bmw","page":1,"limit":3}},{"name":"listing","description":"Full published vehicle advertisement by search ID","required_params":[],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Numeric ID returned by search","on_invalid":"reject","example":"6967931"}],"returns":"Native asking amount/display, DKK, full description, vehicle details, gallery and available public seller","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"6967931"}}]},{"name":"billiger","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"billiger.de API — German price comparison: search, categories, every shop's price with shipping, product specs and grades, price history","version":"0.1.3","pii_redact_default":false,"mint_reusable":null,"base_path":"/billiger/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on billiger.de (Germany, EUR). Rows are catalogue products (lowest price, number of prices compared, overall rating), product families (`row_type: baseproduct`, several variants) and single shop offers (`row_type: offer`, with shop, marketplace seller and shipping). Filter by brand, category, shop, price range and in-stock (ids come from `facets` of an earlier call). Some queries are turned into a category page by the site itself (`redirected_to`); a category page lists catalogue products only.","required_params":["query"],"optional_params":["sort","page","page_size","brand_id","category_filter","shop_id","price_min","price_max","in_stock_only","row_types"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, e.g. `kaffeevollautomat delonghi`, `kopfhörer`, `lego technic`, or an EAN.","on_invalid":"reject","example":"kaffeevollautomat delonghi","aliases":["q","keyword","searchstring"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"billiger.de relevance"},{"value":"popularity","label":"Most popular first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page. A page past the last returns no rows (`page_beyond_last: true`).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Rows per page: 48, 72 or 96 (the site's own choices).","on_invalid":"reject","default":48,"example":48,"minimum":48,"maximum":96,"aliases":["size"]},{"name":"brand_id","type":"string","required":false,"description":"Brand id from `facets.brand[].id` of an earlier call (2451932 = De'Longhi).","on_invalid":"reject","example":"2451932","aliases":["brand"]},{"name":"category_filter","type":"string","required":false,"description":"Category id from `facets.category[].id` (narrows a search to one category).","on_invalid":"reject","example":"3551","aliases":["category_facet"]},{"name":"shop_id","type":"string","required":false,"description":"Shop id from `facets.shop[].id`: only items this shop sells.","on_invalid":"reject","example":"10992","aliases":["shop"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (the source's own price index).","on_invalid":"reject","example":300,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR.","on_invalid":"reject","example":500,"minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only items marked immediately deliverable (sofort lieferbar).","on_invalid":"reject","default":false,"aliases":["available_only"]},{"name":"row_types","type":"enum","required":false,"description":"Which rows: everything, only catalogue products, or only single shop offers. Each view has its own total (kopfhörer: all 61 635, products 6 767, offers 86 889). Not applied when the site turns the query into a category page (`redirected_to`), which lists products only.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Products, product families and single offers"},{"value":"products","label":"Catalogue products and families only"},{"value":"offers","label":"Single shop offers only"}],"default":"all"}],"returns":"results[]{row_type (product|baseproduct|offer), product_id, baseproduct_id, offer_id (the id of its own type, others null), title, url, image, price, price_is_from, price_mismatch, currency, offer_count, overall_rating, rating_count, has_variants, energy_class, shop{id, name, marketplace} (offer rows), seller (offer rows), shipping_cost (offer rows)} + count + total (the source's own count for this view) + shop_count + page + page_size + has_more + page_beyond_last + facets{brand[], category[], shop[], availability[], paymentmethod[], price_range[]} + redirected_to + category_path[] + query + sort","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"kaffeevollautomat delonghi"}},{"name":"category","description":"One billiger.de category listing (e.g. 3551 = Kaffeevollautomaten): the same rows as `search`, with the same filters, sort and paging. A top-level category (e.g. 100165 Kaffeegeräte) is a landing page with no total.","required_params":["category_id"],"optional_params":["sort","page","page_size","brand_id","shop_id","price_min","price_max","in_stock_only"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric billiger.de category id: from `category_path[].category_id` of `product`, from a facet, or from /show/kategorie/<id>.htm.","on_invalid":"reject","example":"3551","aliases":["category","k"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"billiger.de relevance"},{"value":"popularity","label":"Most popular first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page. A page past the last returns no rows (`page_beyond_last: true`).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Rows per page: 48, 72 or 96 (the site's own choices).","on_invalid":"reject","default":48,"example":48,"minimum":48,"maximum":96,"aliases":["size"]},{"name":"brand_id","type":"string","required":false,"description":"Brand id from `facets.brand[].id` of an earlier call (2451932 = De'Longhi).","on_invalid":"reject","example":"2451932","aliases":["brand"]},{"name":"shop_id","type":"string","required":false,"description":"Shop id from `facets.shop[].id`: only items this shop sells.","on_invalid":"reject","example":"10992","aliases":["shop"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (the source's own price index).","on_invalid":"reject","example":300,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR.","on_invalid":"reject","example":500,"minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only items marked immediately deliverable (sofort lieferbar).","on_invalid":"reject","default":false,"aliases":["available_only"]}],"returns":"results[]{same row shape as search} + count + total + page + page_size + has_more + page_beyond_last + facets + category{category_id, name, url} + category_path[] + sort","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"3551"}},{"name":"product","description":"One product (or product family) on billiger.de: title, brand, EAN, colour, category path, image, description, lowest and highest price and number of offers, the billiger.de overall grade (German school grade, 1 best) and its star equivalent, the user rating and the test-report rating with their counts, the popularity rank in its category, editorial pros and cons, the full spec sheet, every professional test report (publisher, grade, pros, cons) and, for a family, every variant with its own id, EAN and price range.","required_params":[],"optional_params":["product_id","baseproduct_id"],"params":[{"name":"product_id","type":"string","required":false,"description":"billiger.de product id: `product_id` of a search / category row (row_type product), or the number in a product URL (/products/<id>-… or /pricelist/<id>-…). Give this OR `baseproduct_id`.","on_invalid":"reject","example":"3443116743","aliases":["id","p"]},{"name":"baseproduct_id","type":"string","required":false,"description":"billiger.de product-family id: `baseproduct_id` of a row with row_type baseproduct, or the number in /baseproducts/<id>-… or /basepricelist/<id>-…. A family groups the variants (colour, storage); its offers and history span all of them. Give this OR `product_id`.","on_invalid":"reject","example":"114326","aliases":["family_id"]}],"returns":"product{row_type, product_id, baseproduct_id, title, url, brand, gtin, color, variant_attributes, category, category_path[]{category_id, name}, image, description, price_min, price_max, price_now, offer_count, currency, overall_grade, overall_grade_label, overall_rating, user_rating, user_rating_count, test_report_rating, test_report_count, popularity_rank{rank, category}, pros[], cons[], key_specs[], specs[]{group, label, value}, test_reports[]{title, date, publisher, grade_display, grade_scale, grade, rating (5 stars), pros, cons}, variants[]{product_id, title, url, gtin, color, size, price_min, price_max, offer_count}, variant_count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"3443116743"}},{"name":"offers","description":"Every shop's offer for one product (or family) on billiger.de, one row per shop in billiger.de's order: shop (name, id, star rating and rating count, marketplace, Trusted Shops), marketplace seller, condition, price, price without voucher and the voucher code where the price needs one, crossed-out price, shipping cost, total price including shipping, delivery time, free-return days, and how many more offers the same shop has. Sort by price or by total price incl. shipping, only in-stock, new or used / refurbished. One row per shop: with sort=total_price each row is that shop's cheapest total and the first row is the cheapest total on billiger.de.","required_params":[],"optional_params":["product_id","baseproduct_id","sort","in_stock_only","condition","max_offers"],"params":[{"name":"product_id","type":"string","required":false,"description":"billiger.de product id: `product_id` of a search / category row (row_type product), or the number in a product URL (/products/<id>-… or /pricelist/<id>-…). Give this OR `baseproduct_id`.","on_invalid":"reject","example":"3443116743","aliases":["id","p"]},{"name":"baseproduct_id","type":"string","required":false,"description":"billiger.de product-family id: `baseproduct_id` of a row with row_type baseproduct, or the number in /baseproducts/<id>-… or /basepricelist/<id>-…. A family groups the variants (colour, storage); its offers and history span all of them. Give this OR `product_id`.","on_invalid":"reject","example":"114326","aliases":["family_id"]},{"name":"sort","type":"enum","required":false,"description":"Offer order.","on_invalid":"reject","allowed_values":[{"value":"price","label":"Item price, cheapest first (billiger.de default)"},{"value":"total_price","label":"Price including shipping, cheapest first across all shops"}],"default":"price"},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only offers marked immediately deliverable.","on_invalid":"reject","default":false,"aliases":["available_only"]},{"name":"condition","type":"enum","required":false,"description":"New offers, or used / refurbished ones.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used","label":"Used and refurbished"}],"default":"new"},{"name":"max_offers","type":"integer","required":false,"description":"How many shop rows to return; billiger.de serves 20 per request, more rows cost more requests. One row per shop; a shop's other offers are only counted in more_offers_from_shop.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"product{product_id, baseproduct_id, title, url, price_min, price_max, offer_count} + offers[]{position, offer_id, product_id, title, condition (new|used|refurbished|b_stock), condition_text, price, price_without_voucher, voucher_code, voucher_terms, original_price, shipping_cost, total_price, total_price_source (printed|price_plus_shipping), total_mismatch, currency, delivery_time, free_return_days, badges[], info[], shop{id, name, url, rating, rating_count, marketplace, trusted_shops}, seller, more_offers_from_shop} + count + has_more + cheapest_price + cheapest_total_price + sort + condition","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"3443116743"}},{"name":"offer","description":"One single shop offer billiger.de lists without a product page (`row_type: offer` rows of search / category): title, shop, marketplace seller, price, shipping, total incl. shipping, delivery time, image, category path.","required_params":["offer_id"],"optional_params":[],"params":[{"name":"offer_id","type":"string","required":true,"description":"`offer_id` of a search / category row with row_type offer, or the number in /offers/<id>.","on_invalid":"reject","example":"3046341211","aliases":["id"]}],"returns":"offer{row_type=offer, offer_id, title, url, image, condition, price, price_without_voucher, voucher_code, original_price, shipping_cost, total_price, total_price_source, total_mismatch, currency, delivery_time, free_return_days, badges[], info[], shop{id, name, url, rating, rating_count, marketplace, trusted_shops}, seller, category_path[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"offer_id":"3046341211"}},{"name":"price_history","description":"billiger.de's own price history for one product: the lowest price on every day, the lowest / highest / median in the range, the site's own verdict on the current price per period (e.g. 'Aktuell hoher Preis' with its typical band), and with `time_range: all` the separate daily lines it draws for the big marketplaces (eBay, Kaufland, Otto, …). Single-day drops far below the band are kept as published and flagged `suspect_low`.","required_params":["product_id"],"optional_params":["time_range"],"params":[{"name":"product_id","type":"string","required":false,"description":"billiger.de product id: `product_id` of a search / category row (row_type product), or the number in a product URL (/products/<id>-… or /pricelist/<id>-…). Give this OR `baseproduct_id`.","on_invalid":"reject","example":"3443116743","aliases":["id","p"]},{"name":"time_range","type":"enum","required":false,"description":"How far back. 1m / 3m / 6m come with the product page; `all` is one more request and adds the per-marketplace lines.","on_invalid":"reject","allowed_values":[{"value":"1m","label":"Last 31 days"},{"value":"3m","label":"Last 91 days"},{"value":"6m","label":"Last 181 days"},{"value":"all","label":"Everything billiger.de keeps (measured: since April 2025)"}],"default":"6m","aliases":["range"]}],"returns":"product{product_id, baseproduct_id, title, url, price_now} + time_range + currency + points[]{date, price, suspect_low} + count + first_date + last_date + lowest_in_range{date, price} + lowest_in_range_excluding_suspect + highest_in_range + median_in_range + suspect_point_count + price_assessment[]{days, assessment, type, typical_low, typical_high, current_price} + shop_lines[]{shop, points[], count} (time_range all) + identity{page_product_id, layer_title_matches, last_point_equals_price_now}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"3443116743","time_range":"6m"}}]},{"name":"bim","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"BİM API scraper — Turkey's largest discount grocery chain (bim.com.tr): the weekly Aktüel Ürünler and İndirim leaflets with every product, its campaign price, struck price and BİM's own discount percent, package size, brand, features, instalments and images; upcoming leaflets days before they start; the leaflet sheets as images; and BİM's public store finder. Prices in TRY. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bim/v1","spec_available":true,"actions":[{"name":"leaflets","description":"Every leaflet BİM is publishing right now — the recent ones, the one on shelf today, and the UPCOMING ones (BİM puts the next week's sheets up days early). Each entry carries the leaflet key you pass to `leaflet/products`, its family (`aktuel` special-buy sheet or `indirim` price-cut sheet), BİM's own date label, the start and end dates, and whether it is current, upcoming or past. This is the only legitimate source of a leaflet key: BİM keeps no archive.","required_params":[],"optional_params":["type","max_rotations"],"params":[{"name":"type","type":"enum","required":false,"description":"Which leaflet family to list. BİM runs both at once.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Both leaflet families"},{"value":"aktuel","label":"Aktüel Ürünler — the dated special-buy sheets"},{"value":"indirim","label":"İndirim — the price-cut sheets that run over a date range"}],"default":"all"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a request on a fresh exit (1-8, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":8}],"returns":"leaflets[{leaflet_key, type, date_label (BİM's own text), starts_on, ends_on (ISO; the YEAR is inferred — BİM prints day and month only), year_inferred, weekday, is_current, days_from_today, status (current|upcoming|today|past — `current` is the sheet BİM's own site is showing), url}], count, current_leaflet_key, today (Istanbul date), types_present[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"all"}},{"name":"leaflet/products","description":"Every product on one BİM leaflet: title, brand, campaign price in TRY, the struck price and BİM's discount percent where BİM prints them, package size, feature bullets, interest-free instalments, image and product URL. Pick the leaflet by `leaflet_key`, by `date` (future dates included), or leave both out for the sheet on shelf today. An unknown key is rejected, never answered with the wrong week.","required_params":[],"optional_params":["leaflet_key","date","type","max_rotations"],"params":[{"name":"leaflet_key","type":"integer","required":false,"description":"The leaflet's own id, exactly as `leaflets` returns it. 🔴 BİM keeps no archive: only the keys `leaflets` currently lists answer — any other key silently renders the current leaflet, and this engine rejects that with NOT_FOUND rather than returning the wrong week's products.","on_invalid":"reject","example":1667,"minimum":1},{"name":"date","type":"string","required":false,"description":"Instead of `leaflet_key`: an ISO date. Returns the leaflet BİM publishes for that day — for `indirim`, the sheet whose date range covers it (BİM runs a long sheet and a weekly one at the same time, and the one starting nearest your date wins; use `leaflets` + `leaflet_key` to pick the other). Future dates work: BİM publishes upcoming leaflets days ahead.","on_invalid":"reject","example":"2026-11-13"},{"name":"type","type":"enum","required":false,"description":"Which leaflet family. Used when you give a `date`, or on its own to get that family's current leaflet. Ignored when `leaflet_key` is given.","on_invalid":"reject","allowed_values":[{"value":"aktuel","label":"Aktüel Ürünler — the dated special-buy sheets (no struck price)"},{"value":"indirim","label":"İndirim — the price-cut sheets (struck price + BİM's discount %)"}],"default":"aktuel"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a request on a fresh exit (1-8, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":8}],"returns":"leaflet{leaflet_key, type, date_label, starts_on, ends_on, year_inferred, weekday, is_current, days_from_today, status, url}, products[]{position, product_id, title, brand (null when BİM left its brand field empty — the brand is then often inside the title and is NOT split out), package_size, features[], price (number, TRY), price_before_discount (the struck price — null on every `aktuel` leaflet because BİM does not print one there; filled on `indirim`), discount_percent (BİM's own printed figure, which truncates), discount_percent_calculated (the exact arithmetic, null when there is no struck price), currency=TRY, campaign_type, max_interest_free_installments, image, slug, url}, count, products_with_struck_price, products_without_price[] (BİM prints no price for these — it hides a 0,00 price button), banner_tiles (advert tiles inside BİM's grid, never counted as products), price_range{min, max}, currency=TRY, source_publishes_struck_price (false on every `aktuel` leaflet — BİM does not print one there)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"aktuel"}},{"name":"product/detail","description":"One BİM leaflet product by its URL or slug: title, price, struck price and discount where BİM prints them, package size, the feature list (the product page often carries more bullets than the leaflet tile), every image, instalments — plus which leaflet it belongs to and its brand, read from that leaflet. A product whose leaflet has expired returns NOT_FOUND rather than BİM's silent homepage.","required_params":[],"optional_params":["url","slug","include_brand","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"A BİM product URL, as `leaflet/products` returns it in `url`. ⚠️ BİM product pages live only while their leaflet does — take a fresh URL from `leaflet/products` rather than storing one.","on_invalid":"reject","example":"https://www.bim.com.tr/aktuel-urunler/darel-calisma-masasi-14-9/aktuel.aspx","aliases":["product_url"]},{"name":"slug","type":"string","required":false,"description":"Alternative to `url`: just the slug part, as `leaflet/products` returns it in `slug`.","on_invalid":"reject","example":"darel-calisma-masasi-14-9"},{"name":"include_brand","type":"boolean","required":false,"description":"BİM's product page does not publish the brand — only the leaflet listing does. Left true, the engine also reads the product's leaflet so `brand` and the leaflet's date are filled (one extra request). Set false for the page alone; `brand` is then null because it was not read, and `brand_source` says so.","on_invalid":"reject","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a request on a fresh exit (1-8, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":8}],"returns":"product{product_id, title, brand, brand_source (leaflet|not_requested — BİM's product page never publishes a brand), package_size, features[], price, price_before_discount, discount_percent, discount_percent_calculated, currency=TRY, max_interest_free_installments, image, images[], slug, url}, leaflet{leaflet_key, type, date_label, starts_on, ends_on, is_current, status, url} (null when include_brand=false)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.bim.com.tr/aktuel-urunler/darel-calisma-masasi-14-9/aktuel.aspx"}},{"name":"posters","description":"BİM's leaflet sheets as images — the scanned Aktüel, İndirim and Kırtasiye posters, each with BİM's date label, a cover image, every page image in order and BİM's own download link. This is the printed sheet; `leaflet/products` is the same campaign as structured rows.","required_params":[],"optional_params":["type","max_rotations"],"params":[{"name":"type","type":"enum","required":false,"description":"Which poster tab to return.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every poster BİM publishes"},{"value":"aktuel","label":"Aktüel sheets"},{"value":"indirim","label":"İndirim sheets"},{"value":"kirtasiye","label":"Kırtasiye (stationery) sheets"}],"default":"all"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a request on a fresh exit (1-8, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":8}],"returns":"posters[{type (aktuel|indirim|kirtasiye), label, starts_on, ends_on, cover_image, page_images[], page_count, download_url}], count, counts_by_type{}, total_pages","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"all"}},{"name":"stores","description":"BİM's public store finder. With no parameters it returns the 81 provinces; with a `city` it returns that province's districts; with both it returns the stores — branch name and street address. Works by name or by BİM's own numeric ids.","required_params":[],"optional_params":["city","county","max_rotations"],"params":[{"name":"city","type":"string","required":false,"description":"Province name or BİM's numeric province id. Leave it out to get the list of all 81 provinces BİM serves.","on_invalid":"reject","example":"İstanbul"},{"name":"county","type":"string","required":false,"description":"District name or BİM's numeric district id. Leave it out to get the districts of `city`. 🔴 BİM's store finder needs a district — a province on its own returns no stores, not all of them.","on_invalid":"reject","example":"Kadıköy","aliases":["district"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a request on a fresh exit (1-8, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":8}],"returns":"level (cities|counties|stores), cities[{id, name}] or counties[{id, name}] or stores[{name, address, city, county}], count, reported_count (BİM's own 'Listelenen Mağaza Sayısı'), city{id, name}, county{id, name}. BİM does not publish coordinates, telephone numbers or opening hours for its stores.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"İstanbul","county":"Kadıköy"}},{"name":"brands","description":"BİM's own-label brands. With no parameters it returns BİM's eleven product categories; with a `category` it returns that category's own-label brand names and logos. BİM publishes brand names and logos here only — there are no products or prices on this surface.","required_params":[],"optional_params":["category","max_rotations"],"params":[{"name":"category","type":"string","required":false,"description":"A category slug or numeric id from this action's own `categories` list. Leave it out to get the category list itself.","on_invalid":"reject","example":"sut-ve-sut-urunleri"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a request on a fresh exit (1-8, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":8}],"returns":"level (categories|brands), categories[{category_id, slug, name, url}] or brands[{name, logo}], count, category{category_id, slug, name}, description (BİM's own category text)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"sut-ve-sut-urunleri"}}]},{"name":"bing","category":{"id":"search-seo","title":"Search & SEO"},"title":"Bing Search API — web, news, image & video search results (SERP scraper)","version":"3.0.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/bing/v1","spec_available":true,"actions":[{"name":"search","description":"Bing web search results: ranked organic pages with title, URL, snippet, date and site name, plus ads, related searches, people-also-ask questions and a knowledge panel when Bing shows them. Filter by country and language (mkt, or gl + hl), SafeSearch and recency; up to 50 results per call; paginate with page or first. Every result set is verified against a second read of Bing's index before it is returned, so you never receive confident-looking rows about a different subject. A query with no matches returns 404; a temporary failure returns a retryable error, never a false 404.","required_params":["q"],"optional_params":["engine","depth","mkt","gl","hl","count","page","first","safe","freshness","device"],"params":[{"name":"q","type":"string","required":true,"description":"Search query. Search operators such as site:example.com and \"exact phrase\" are applied.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"engine","type":"enum","required":false,"description":"Which search index to query. Leave on auto for Bing.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Bing (default). Every result set is verified against a second read of Bing's index before it is returned."},{"value":"bing","label":"Same as auto."},{"value":"brave","label":"Brave Search — a different, independent index."},{"value":"gnews","label":"Google News RSS — a keyless door into GOOGLE's index. Despite the name it is not a news index: site: and \"exact phrase\" both apply, and it returns ordinary web pages with a publication date on every row. No snippet."},{"value":"gemini","label":"Google's own index through Google's Gemini grounding API. The only backend here with date operators (after:2026-06-01, before:2020-01-01). About 5 results per request (more with depth=deep), URL + domain only, site: is dropped. Seconds, not milliseconds."},{"value":"yandex","label":"Yandex — currently unavailable (coming soon)"}],"default":"auto","example":"auto"},{"name":"depth","type":"enum","required":false,"description":"engine=gemini only. Ignored by the other backends.","on_invalid":"ignore","allowed_values":[{"value":"exact","label":"Run your query once — about 5 results in roughly 10 seconds."},{"value":"deep","label":"Keep searching around your query and return everything found (tens of results, ~30 s; may drift from the exact query)."}],"default":"exact","example":"exact"},{"name":"mkt","type":"string","required":false,"description":"Bing market as lang-COUNTRY (e.g. en-US, en-GB, de-DE, fr-FR, ja-JP). Sets the country and language of the results. If omitted it is built from gl + hl (default en-US).","on_invalid":"ignore","example":"en-US","aliases":["market"]},{"name":"gl","type":"string","required":false,"description":"Country as a 2-letter ISO-3166 code (us, gb, de, in, br, …). `cc` is accepted as the same parameter.","on_invalid":"ignore","example":"us","aliases":["cc","country"]},{"name":"hl","type":"string","required":false,"description":"Language as an ISO-639 code (en, de, fr, …). `setlang` is accepted as the same parameter.","on_invalid":"ignore","example":"en","aliases":["setlang","lang"]},{"name":"count","type":"integer","required":false,"description":"How many results to return (1-50, default 10). Above 10 the engine reads several result pages at once.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50,"aliases":["num"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (about 10 items per page).","on_invalid":"ignore","example":2,"minimum":1},{"name":"first","type":"integer","required":false,"description":"1-based result offset (alternative to page; first=11 is page 2).","on_invalid":"ignore","example":11,"minimum":1,"aliases":["start"]},{"name":"safe","type":"enum","required":false,"description":"SafeSearch level. An unrecognized value is ignored.","on_invalid":"ignore","allowed_values":[{"value":"off","label":"No filtering"},{"value":"moderate","label":"Moderate"},{"value":"strict","label":"Strict"}],"example":"moderate","aliases":["safesearch"]},{"name":"freshness","type":"enum","required":false,"description":"Restrict results to a recency window. Short forms (24h, 7d, 30d, d/w/m) are accepted; an unrecognized value is ignored.","on_invalid":"ignore","allowed_values":[{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past 7 days"},{"value":"month","label":"Past 30 days"}],"example":"week","value_pattern":"(?i)(d|w|m|h|1h|24h|1d|7d|30d|31d|today|past_(hour|day|week|month))","aliases":["time_range"]},{"name":"device","type":"enum","required":false,"description":"Device profile.","on_invalid":"ignore","allowed_values":[{"value":"desktop","label":"Desktop results (default)"},{"value":"mobile","label":"Accepted for compatibility; results are the desktop ranking (meta.device_applied=false)"}],"example":"desktop"}],"returns":"engine, query, mkt, page, page_offset, total_estimate, count, results[] (position, title, url, displayed_url, domain, site_name, favicon, snippet, date), related_searches[], people_also_ask[] (question), ads[] (position, block, title, url, displayed_url, domain, description), knowledge_panel{title, description, url}, answer_box","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"best laptop 2026","gl":"us"}},{"name":"news","description":"Bing News articles for a keyword — title, URL, source, snippet, publish age and thumbnail, newest first. Filter by country/language and recency (past hour, day, week, month); up to 100 articles per call. Bing News only indexes recent articles, so an old or very niche topic can legitimately return 404.","required_params":["q"],"optional_params":["mkt","gl","hl","count","freshness"],"params":[{"name":"q","type":"string","required":true,"description":"Search query. Search operators such as site:example.com and \"exact phrase\" are applied.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"mkt","type":"string","required":false,"description":"Bing market as lang-COUNTRY (e.g. en-US, en-GB, de-DE, fr-FR, ja-JP). Sets the country and language of the results. If omitted it is built from gl + hl (default en-US).","on_invalid":"ignore","example":"en-US","aliases":["market"]},{"name":"gl","type":"string","required":false,"description":"Country as a 2-letter ISO-3166 code (us, gb, de, in, br, …). `cc` is accepted as the same parameter.","on_invalid":"ignore","example":"us","aliases":["cc","country"]},{"name":"hl","type":"string","required":false,"description":"Language as an ISO-639 code (en, de, fr, …). `setlang` is accepted as the same parameter.","on_invalid":"ignore","example":"en","aliases":["setlang","lang"]},{"name":"count","type":"integer","required":false,"description":"How many articles to return (1-100, default 15). ","on_invalid":"ignore","default":15,"example":15,"minimum":1,"maximum":100,"aliases":["num"]},{"name":"freshness","type":"enum","required":false,"description":"Restrict results to a recency window. Short forms (24h, 7d, 30d, d/w/m) are accepted; an unrecognized value is ignored.","on_invalid":"ignore","allowed_values":[{"value":"hour","label":"Past hour"},{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past 7 days"},{"value":"month","label":"Past 30 days"}],"example":"week","value_pattern":"(?i)(d|w|m|h|1h|24h|1d|7d|30d|31d|today|past_(hour|day|week|month))","aliases":["time_range"]}],"returns":"engine, query, mkt, count, news[] (position, title, url, source, snippet, published, thumbnail_url)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"tesla","gl":"us"}},{"name":"images","description":"Bing image search — full-size image URL, the page it appears on, title, thumbnail and (when available) pixel size and description. About 35 images per page; paginate with page or first.","required_params":["q"],"optional_params":["mkt","gl","hl","count","page","first","safe"],"params":[{"name":"q","type":"string","required":true,"description":"Search query. Search operators such as site:example.com and \"exact phrase\" are applied.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"mkt","type":"string","required":false,"description":"Bing market as lang-COUNTRY (e.g. en-US, en-GB, de-DE, fr-FR, ja-JP). Sets the country and language of the results. If omitted it is built from gl + hl (default en-US).","on_invalid":"ignore","example":"en-US","aliases":["market"]},{"name":"gl","type":"string","required":false,"description":"Country as a 2-letter ISO-3166 code (us, gb, de, in, br, …). `cc` is accepted as the same parameter.","on_invalid":"ignore","example":"us","aliases":["cc","country"]},{"name":"hl","type":"string","required":false,"description":"Language as an ISO-639 code (en, de, fr, …). `setlang` is accepted as the same parameter.","on_invalid":"ignore","example":"en","aliases":["setlang","lang"]},{"name":"count","type":"integer","required":false,"description":"How many images to return (1-60, default 35). ","on_invalid":"ignore","default":35,"example":35,"minimum":1,"maximum":60,"aliases":["num"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (about 35 items per page).","on_invalid":"ignore","example":2,"minimum":1},{"name":"first","type":"integer","required":false,"description":"1-based result offset (alternative to page; first=11 is page 2).","on_invalid":"ignore","example":11,"minimum":1,"aliases":["start"]},{"name":"safe","type":"enum","required":false,"description":"SafeSearch level. An unrecognized value is ignored.","on_invalid":"ignore","allowed_values":[{"value":"off","label":"No filtering"},{"value":"moderate","label":"Moderate"},{"value":"strict","label":"Strict"}],"example":"moderate","aliases":["safesearch"]}],"returns":"engine, query, mkt, page_offset, count, images[] (position, title, image_url, source_url, thumbnail_url, domain, width, height, description)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"eiffel tower at night","gl":"us"}},{"name":"videos","description":"Bing video search — watch-page URL, title, thumbnail, duration and hosting platform (YouTube, TikTok, Dailymotion, …) for every result; publisher/channel, views, upload age and description when Bing shows them. About 30 videos per page.","required_params":["q"],"optional_params":["mkt","gl","hl","count","page","first","safe"],"params":[{"name":"q","type":"string","required":true,"description":"Search query. Search operators such as site:example.com and \"exact phrase\" are applied.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"mkt","type":"string","required":false,"description":"Bing market as lang-COUNTRY (e.g. en-US, en-GB, de-DE, fr-FR, ja-JP). Sets the country and language of the results. If omitted it is built from gl + hl (default en-US).","on_invalid":"ignore","example":"en-US","aliases":["market"]},{"name":"gl","type":"string","required":false,"description":"Country as a 2-letter ISO-3166 code (us, gb, de, in, br, …). `cc` is accepted as the same parameter.","on_invalid":"ignore","example":"us","aliases":["cc","country"]},{"name":"hl","type":"string","required":false,"description":"Language as an ISO-639 code (en, de, fr, …). `setlang` is accepted as the same parameter.","on_invalid":"ignore","example":"en","aliases":["setlang","lang"]},{"name":"count","type":"integer","required":false,"description":"How many videos to return (1-60, default 30). ","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":60,"aliases":["num"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (about 30 items per page).","on_invalid":"ignore","example":2,"minimum":1},{"name":"first","type":"integer","required":false,"description":"1-based result offset (alternative to page; first=11 is page 2).","on_invalid":"ignore","example":11,"minimum":1,"aliases":["start"]},{"name":"safe","type":"enum","required":false,"description":"SafeSearch level. An unrecognized value is ignored.","on_invalid":"ignore","allowed_values":[{"value":"off","label":"No filtering"},{"value":"moderate","label":"Moderate"},{"value":"strict","label":"Strict"}],"example":"moderate","aliases":["safesearch"]}],"returns":"engine, query, mkt, page_offset, count, videos[] (position, title, url, duration, platform always present; thumbnail_url, publisher, views, published, description when shown)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"how to make pizza","gl":"us"}},{"name":"autocomplete","description":"Bing search autocomplete — the query suggestions Bing shows while typing. Fast and cheap; useful for keyword research.","required_params":["q"],"optional_params":["mkt","gl","hl"],"params":[{"name":"q","type":"string","required":true,"description":"Search query. Search operators such as site:example.com and \"exact phrase\" are applied.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"mkt","type":"string","required":false,"description":"Bing market as lang-COUNTRY (e.g. en-US, en-GB, de-DE, fr-FR, ja-JP). Sets the country and language of the results. If omitted it is built from gl + hl (default en-US).","on_invalid":"ignore","example":"en-US","aliases":["market"]},{"name":"gl","type":"string","required":false,"description":"Country as a 2-letter ISO-3166 code (us, gb, de, in, br, …). `cc` is accepted as the same parameter.","on_invalid":"ignore","example":"us","aliases":["cc","country"]},{"name":"hl","type":"string","required":false,"description":"Language as an ISO-639 code (en, de, fr, …). `setlang` is accepted as the same parameter.","on_invalid":"ignore","example":"en","aliases":["setlang","lang"]}],"returns":"engine, query, mkt, count, suggestions[] (ordered list of query suggestions)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"best lap","gl":"us"}}]},{"name":"blinkit","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Blinkit API — India's 10-minute grocery app: dark-store price, MRP, discount, live stock, ETA and full product data per PIN code or GPS point","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/blinkit/v1","spec_available":true,"actions":[{"name":"search","description":"Search blinkit AS SEEN FROM ONE DELIVERY LOCATION (the dark store that serves it): products with selling price, MRP, discount, pack size and the other pack sizes, live stock count, the store (merchant) id, delivery ETA in minutes, brand, rating and a sponsored flag. `query` and a location (`pincode`, or `lat`+`lon`) are required.","required_params":["query"],"optional_params":["pincode","lat","lon","page"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the blinkit search box.","on_invalid":"reject","example":"atta","aliases":["q","keyword","search"]},{"name":"pincode","type":"string","required":false,"description":"6-digit Indian PIN code to shop from. Give `pincode` OR `lat`+`lon` (one is required): blinkit serves every location from one dark store, so the catalogue, prices and stock depend on it. Resolved through blinkit's own location search and accepted only if the place's postal code is this PIN. Echoed.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"lat","type":"number","required":false,"description":"Delivery latitude (WGS84). Use with `lon` instead of `pincode`.","on_invalid":"reject","example":"19.0176"},{"name":"lon","type":"number","required":false,"description":"Delivery longitude (WGS84). Use with `lat` instead of `pincode`.","on_invalid":"reject","example":"72.8562","aliases":["lng"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-5 (about 12 rows each). Pages follow the source's own next-page link, so page N costs N upstream searches.","on_invalid":"reject","default":1,"minimum":1,"maximum":5}],"returns":"query, location{pincode, lat, lon, address, locality, city, state, postal_code}, serviceable, eta_minutes, total (items the source will page through), exact_match_count (the source's direct matches), search_method (basic | similarity), page, has_next, returned, repeated_from_earlier_pages, non_product_tiles_skipped, results[]{product_id (-> product.product_id), name, brand, pack_size, price, mrp, discount_percent, discount_text, price_text, mrp_text, price_text_matches, currency, inventory, in_stock, product_state, merchant_id, merchant_type, eta_identifier, eta_minutes, group_id, rating{average, count, count_text}, sponsored, similar_result (an item appended after the direct matches ran out), repeated_from_earlier_page, image, image_count, url, variants[]{product_id, pack_size, price, mrp, discount_percent, inventory, in_stock}, rank}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"atta","pincode":"400020"}},{"name":"product","description":"One blinkit product at one delivery location, by the `product_id` a search row returns (or its blinkit.com/prn/.../prid/<id> URL): price, MRP, discount, live stock count, whether this dark store sells it at all, store id, ETA, pack size and the other pack sizes with their prices, breadcrumb, images, description, shelf life, country of origin, FSSAI licence, manufacturer and every product attribute the page carries.","required_params":["product_id"],"optional_params":["pincode","lat","lon"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product's `product_id` exactly as a search row returns it, or its https://blinkit.com/prn/<slug>/prid/<id> URL.","on_invalid":"reject","example":"68482","aliases":["id","prid","url","product_url"]},{"name":"pincode","type":"string","required":false,"description":"6-digit Indian PIN code to shop from. Give `pincode` OR `lat`+`lon` (one is required): blinkit serves every location from one dark store, so the catalogue, prices and stock depend on it. Resolved through blinkit's own location search and accepted only if the place's postal code is this PIN. Echoed.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"lat","type":"number","required":false,"description":"Delivery latitude (WGS84). Use with `lon` instead of `pincode`.","on_invalid":"reject","example":"19.0176"},{"name":"lon","type":"number","required":false,"description":"Delivery longitude (WGS84). Use with `lat` instead of `pincode`.","on_invalid":"reject","example":"72.8562","aliases":["lng"]}],"returns":"location{...}, serviceable, product{product_id, name, brand, pack_size, available_at_store, price, mrp, discount_percent, price_text, additional_charges, currency, inventory, in_stock, product_state, merchant_id, merchant_type, eta_minutes, group_id, category_ids{l0, l1, l2}, breadcrumb[], images[], description, shelf_life, country_of_origin, fssai_license, manufacturer, attributes[]{name, value, shown_to_customer}, url, variants[]{product_id, pack_size, price_text, price, selected}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"68482","pincode":"400020"}},{"name":"store","description":"Whether blinkit delivers to a location and how fast: the resolved address and postal code, serviceable yes/no, the delivery promise in minutes, and the dark stores (merchant ids) serving it with the minutes per service (express, longtail, large order, pharmacy ...).","required_params":[],"optional_params":["pincode","lat","lon"],"params":[{"name":"pincode","type":"string","required":false,"description":"6-digit Indian PIN code to shop from. Give `pincode` OR `lat`+`lon` (one is required): blinkit serves every location from one dark store, so the catalogue, prices and stock depend on it. Resolved through blinkit's own location search and accepted only if the place's postal code is this PIN. Echoed.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"lat","type":"number","required":false,"description":"Delivery latitude (WGS84). Use with `lon` instead of `pincode`.","on_invalid":"reject","example":"19.0176"},{"name":"lon","type":"number","required":false,"description":"Delivery longitude (WGS84). Use with `lat` instead of `pincode`.","on_invalid":"reject","example":"72.8562","aliases":["lng"]}],"returns":"location{pincode, lat, lon, address, locality, city, state, postal_code}, serviceable, eta_minutes, eta_title, stores[]{merchant_id, services{<service>: minutes}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"pincode":"110001"}}]},{"name":"blocket","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Blocket API — Nordic second-hand classifieds (Blocket Sweden, FINN Norway, Tori Finland, DBA Denmark): search listings, read the full listing and browse categories, in local currency. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/blocket/v1","spec_available":true,"actions":[{"name":"search","description":"Search second-hand listings on Blocket (se), FINN (no), Tori (fi) or DBA (dk) by keyword, category or region: listing id, title, price in local currency (null for give-aways), free/give-away flag, municipality, publication time, private or business seller, shipping and buy-now availability, brand, images and attributes, with the true total and category/region counts. Filter by price, condition, seller type, ad type, shipping and ads published today; sort by relevance, newest or price.","required_params":[],"optional_params":["query","country","category","location","page","sort","price_min","price_max","condition","seller_type","listing_type","shipping","published_today","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword, in the site's language (cykel, sykkel, polkupyörä, cykel). Optional when `category` or `location` is given.","on_invalid":"reject","example":"cykel","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Nordic marketplace: se = Blocket, no = FINN torget, fi = Tori, dk = DBA. Prices come back in that country's currency; listing ids belong to one site.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — Blocket (SEK)"},{"value":"no","label":"Norway — FINN torget (NOK)"},{"value":"fi","label":"Finland — Tori (EUR)"},{"value":"dk","label":"Denmark — DBA (DKK)"}],"default":"se","example":"se","aliases":["site","market"]},{"name":"category","type":"string","required":false,"description":"Category code from `categories` or a search's `category_facets` — 0.<id> (top level, e.g. 0.69 sport), 1.<id>.<id> (sub-category) or 2.<id>.<id>.<id> (leaf, e.g. 2.69.3963.257 bicycles). The codes are shared by all four sites; the names are localised.","on_invalid":"reject","example":"0.69"},{"name":"location","type":"string","required":false,"description":"Region code from a search's `region_facets` (e.g. 0.300001 Stockholm on Blocket, 0.20003 Akershus on FINN). Region codes are per country.","on_invalid":"reject","example":"0.300001"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50 (53 listings per page). The sites stop at page 50 whatever the total.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Order of results. Anything else is rejected (the sites silently fall back to relevance).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (site default)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Lowest price first — give-away ads come first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price, whole units of the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price, whole units of the country's currency.","on_invalid":"reject","minimum":0},{"name":"condition","type":"enum","required":false,"description":"Item condition, on the sites' shared five-step scale.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New, unused"},{"value":"like_new","label":"Like new"},{"value":"good","label":"Good, gently used"},{"value":"fair","label":"Fair, visibly used"},{"value":"needs_repair","label":"Needs repair"}]},{"name":"seller_type","type":"enum","required":false,"description":"Only private sellers or only businesses.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private person"},{"value":"business","label":"Business / shop"}]},{"name":"listing_type","type":"enum","required":false,"description":"Kind of ad. Give-away ads have no price.","on_invalid":"reject","allowed_values":[{"value":"sell","label":"For sale"},{"value":"give_away","label":"Given away for free"},{"value":"wanted","label":"Wanted (buyer ads)"}]},{"name":"shipping","type":"enum","required":false,"description":"Only ads that can be shipped through the site's own delivery service, or only free shipping.","on_invalid":"reject","allowed_values":[{"value":"shipping","label":"Can be shipped (Blocket Frakt / FINN Fiks ferdig / ToriDiili / DBA Fiks færdig)"},{"value":"free_shipping","label":"Seller pays shipping"}]},{"name":"published_today","type":"boolean","required":false,"description":"Only ads published today.","on_invalid":"reject"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, url, price (number, null when none is published or the ad is a give-away), currency, is_free, listing_type (sell|give_away|wanted), listing_type_label, location (municipality), coordinates{lat, lon} (the ad's map position as the site publishes it, private and business sellers alike; null when the site has none), listed_at (ISO, UTC), seller_type (private|business), seller_name (businesses only — the site publishes no name for private sellers), brand, shipping_available, buy_now, free_shipping, image, images[], image_count, attributes[]{id, label (the site's own label; null only when the site names it nowhere), value}, labels[]}, count, total_results, page, last_page, has_more, sort_applied, filters_applied[]{filter, label, values}, category_facets[]{category, name, count}, region_facets[]{location, name, count}, country, site, currency, query","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"cykel","country":"se"}},{"name":"listing","description":"The full listing by id or URL: title, full description, price and currency, give-away flag, status (active or sold), condition on the five-step scale, category path with its search code, all attributes (size, brand, model…), every image with dimensions, postal code, city and map position, last-edited time, shipping and buy-now availability, and the seller — for businesses the shop name, organisation id, company registry link, address, phone, website and their other listings; for private sellers the seller type and the site's seller id (the sites show no private seller name to logged-out visitors).","required_params":["listing_id"],"optional_params":["country","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Listing id (the number at the end of …/recommerce/forsale/item/26612110) or the full listing URL — a URL also sets the country.","on_invalid":"reject","example":"26612110","aliases":["id","ad_id","item_id","finnkode","url"]},{"name":"country","type":"enum","required":false,"description":"Which Nordic marketplace: se = Blocket, no = FINN torget, fi = Tori, dk = DBA. Prices come back in that country's currency; listing ids belong to one site.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — Blocket (SEK)"},{"value":"no","label":"Norway — FINN torget (NOK)"},{"value":"fi","label":"Finland — Tori (EUR)"},{"value":"dk","label":"Denmark — DBA (DKK)"}],"default":"se","example":"se","aliases":["site","market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, title, url, status (active|sold|inactive), status_label (the site's own text for a sold ad, e.g. \"Såld\"; null for active and inactive ads — the site prints no status text for them), price (null for give-aways or when none is published), currency, is_free, listing_type, listing_type_label, condition{code (new|like_new|good|fair|needs_repair), label, value_id}, description (as written by the seller), category, category_path[]{id, name}, category_search_code, attributes[]{id, label, value, value_id}, images[]{url, width, height}, image_count, location{postal_code, city, country_code, street_address, lat, lon} (as the site publishes them; null when absent), edited_at, seller{type, id, name (businesses), organisation_id, shop_url, website_url, company_registry_url, logo_url, address{street, city, postal_code}, verified_identity, has_phone, phone (the business shop's phone), selling_points[]}, shipping{shipping_available, buy_now, free_shipping}, is_webstore, seller_other_listings[]{listing_id, title, price, location, url, image}, country, site}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"26612110"}},{"name":"categories","description":"The marketplace category tree of one site with live listing counts — three levels, each node with the code to pass as `category` to search. Optionally counted for a keyword.","required_params":[],"optional_params":["country","query","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Nordic marketplace: se = Blocket, no = FINN torget, fi = Tori, dk = DBA. Prices come back in that country's currency; listing ids belong to one site.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — Blocket (SEK)"},{"value":"no","label":"Norway — FINN torget (NOK)"},{"value":"fi","label":"Finland — Tori (EUR)"},{"value":"dk","label":"Denmark — DBA (DKK)"}],"default":"se","example":"se","aliases":["site","market"]},{"name":"query","type":"string","required":false,"description":"Optional keyword: counts are then for that keyword.","on_invalid":"reject","example":"cykel","aliases":["q"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"categories[]{category, name, count, level, search_param, children[]}, count, total_results, region_facets[]{location, name, count}, country, site, query","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"se"}}]},{"name":"bluesky","category":{"id":"social","title":"Social Media"},"title":"Bluesky API scraper — public Bluesky profiles, posts, threads, replies, likes, reposts, quotes, followers/following, lists, custom feeds and starter packs, plus authenticated post search and timeline (AT Protocol / bsky.app)","version":"0.3.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bluesky/v1","spec_available":true,"actions":[{"name":"profile","description":"actor profile: did/handle/displayName/desc/followers/follows/posts counts/avatar/banner/labels (+ batch via 'actors' <=25). Requires actor OR actors (engine-enforced; required_params=() so the actors-only batch isn't rejected by the gateway literal-key validator).","required_params":[],"optional_params":["actor","actors"],"params":[{"name":"actor","type":"string","required":false,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"actors","type":"array","required":false,"description":"Batch mode: up to 25 handles/DIDs (array or comma-separated string). When given, returns a profiles[] batch instead of a single profile.","on_invalid":"ignore","example":["bsky.app","jay.bsky.team"]}],"returns":"single: did, handle, display_name, description, followers_count, follows_count, posts_count, avatar, banner, labels, verified, pinned_post — OR (with `actors`) profiles[] + count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"actor":"bsky.app"}},{"name":"author_feed","description":"an actor's posts (full record+embed+counts), cursor-paginated; filter=posts_no_replies|posts_with_replies|posts_with_media|posts_and_author_threads","required_params":["actor"],"optional_params":["limit","filter","cursor"],"params":[{"name":"actor","type":"string","required":true,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"filter","type":"enum","required":false,"description":"Which of the author's posts to include.","on_invalid":"reject","allowed_values":[{"value":"posts_no_replies","label":"Posts, no replies (default)"},{"value":"posts_with_replies","label":"Posts and replies"},{"value":"posts_with_media","label":"Posts with media only"},{"value":"posts_and_author_threads","label":"Posts and the author's own threads"}],"default":"posts_no_replies","example":"posts_with_replies"},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-200, default 30). Auto-paginated; larger values are clamped to 200.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":200},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"posts[] (uri, text, author, like/repost/reply/quote counts, embed, tags), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"actor":"bsky.app","limit":30}},{"name":"search_actors","description":"search users by name/handle/bio (cursor); typeahead=true for fast suggest","required_params":["q"],"optional_params":["limit","cursor","typeahead"],"params":[{"name":"q","type":"string","required":true,"description":"Search query (keywords; also accepted as 'query').","on_invalid":"reject","example":"news","aliases":["query"]},{"name":"typeahead","type":"boolean","required":false,"description":"true = fast as-you-type suggestions (no pagination); false = full search.","on_invalid":"ignore","example":false},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-100, default 25). Auto-paginated; larger values are clamped to 100.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"actors[] (did, handle, display_name, description, avatar, verified), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"news","limit":25}},{"name":"thread","description":"a post + its reply tree (recursive) + parent","required_params":["uri"],"optional_params":["depth","parent_height"],"params":[{"name":"uri","type":"string","required":true,"description":"The post's at:// AT-URI (or a bsky.app/profile/<did>/post/<rkey> URL). Get it from a post's `uri` field.","on_invalid":"reject","example":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l","aliases":["post"]},{"name":"depth","type":"integer","required":false,"description":"How many levels of replies to include below the post (0-100).","on_invalid":"ignore","default":6,"example":6,"minimum":0,"maximum":100},{"name":"parent_height","type":"integer","required":false,"description":"How many parent posts above the target to include (0-100).","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":100}],"returns":"root{post, replies[] (recursive)}, parent, reply_total","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"uri":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l","depth":3}},{"name":"post_detail","description":"hydrate one or more posts by at:// URI (<=25): record/embed/like+repost+reply+quote counts","required_params":["uris"],"optional_params":[],"params":[{"name":"uris","type":"array","required":true,"description":"One or more post at:// AT-URIs (array or comma-separated string, up to 25). A single 'uri' is also accepted.","on_invalid":"reject","example":["at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l"],"aliases":["uri"]}],"returns":"posts[] (full normalized post each), count, requested","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"uris":["at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l"]}},{"name":"likes","description":"actors who liked a post (cursor); cid auto-used if given","required_params":["uri"],"optional_params":["cid","limit","cursor"],"params":[{"name":"uri","type":"string","required":true,"description":"The post's at:// AT-URI (or a bsky.app/profile/<did>/post/<rkey> URL). Get it from a post's `uri` field.","on_invalid":"reject","example":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l","aliases":["post"]},{"name":"cid","type":"string","required":false,"description":"Optional post content-id (a post's `cid`). Speeds up the lookup; auto-resolved from the URI when omitted.","on_invalid":"ignore","example":"bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq"},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-500, default 50). Auto-paginated; larger values are clamped to 500.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"likes[] (actor did/handle/display_name + liked_at), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"uri":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l","cid":"bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq","limit":25}},{"name":"reposts","description":"actors who reposted a post (cursor)","required_params":["uri"],"optional_params":["cid","limit","cursor"],"params":[{"name":"uri","type":"string","required":true,"description":"The post's at:// AT-URI (or a bsky.app/profile/<did>/post/<rkey> URL). Get it from a post's `uri` field.","on_invalid":"reject","example":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l","aliases":["post"]},{"name":"cid","type":"string","required":false,"description":"Optional post content-id (a post's `cid`). Speeds up the lookup; auto-resolved from the URI when omitted.","on_invalid":"ignore","example":"bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq"},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-500, default 50). Auto-paginated; larger values are clamped to 500.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"reposted_by[] (actor did/handle/display_name), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"uri":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l","cid":"bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq","limit":25}},{"name":"followers","description":"actors following the subject (cursor)","required_params":["actor"],"optional_params":["limit","cursor"],"params":[{"name":"actor","type":"string","required":true,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-2000, default 100). Auto-paginated; larger values are clamped to 2000.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":2000},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"subject, followers[] (actor objects), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"actor":"bsky.app","limit":50}},{"name":"follows","description":"actors the subject follows (cursor)","required_params":["actor"],"optional_params":["limit","cursor"],"params":[{"name":"actor","type":"string","required":true,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-2000, default 100). Auto-paginated; larger values are clamped to 2000.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":2000},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"subject, follows[] (actor objects), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"actor":"bsky.app","limit":10}},{"name":"quotes","description":"Accounts/posts that QUOTE a given post (quote-posts), cursor-paginated. The other half of a post's engagement alongside likes and reposts.","required_params":["uri"],"optional_params":["cid","limit","cursor"],"params":[{"name":"uri","type":"string","required":true,"description":"The post's at:// AT-URI (or a bsky.app/profile/<did>/post/<rkey> URL). Get it from a post's `uri` field.","on_invalid":"reject","example":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l","aliases":["post"]},{"name":"cid","type":"string","required":false,"description":"Optional post content-id (a post's `cid`). Speeds up the lookup; auto-resolved from the URI when omitted.","on_invalid":"ignore","example":"bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq"},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-200, default 50). Auto-paginated; larger values are clamped to 200.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":200},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"posts[] (each quoting post, full normalized), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"uri":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l","cid":"bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq","limit":25}},{"name":"suggested_follows","description":"Accounts suggested from a given account — Bluesky's 'who to follow next' / similar-accounts set. Not paginated (a fixed suggestion set, ~10-50 actors).","required_params":["actor"],"optional_params":["limit"],"params":[{"name":"actor","type":"string","required":true,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-100, default 25). Auto-paginated; larger values are clamped to 100.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"suggestions[] (actor objects), count, is_fallback","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"actor":"bsky.app"}},{"name":"lists","description":"The curated/moderation lists an account CREATED (user-curated lists + mute/block mod-lists), cursor-paginated.","required_params":["actor"],"optional_params":["limit","cursor"],"params":[{"name":"actor","type":"string","required":true,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-500, default 50). Auto-paginated; larger values are clamped to 500.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"lists[] (uri, name, purpose, description, list_item_count, creator), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"actor":"nytimes.com","limit":10}},{"name":"list","description":"A single list's metadata plus its MEMBERS (the accounts on the list), members cursor-paginated.","required_params":["list"],"optional_params":["limit","cursor"],"params":[{"name":"list","type":"string","required":true,"description":"A list's at:// AT-URI (e.g. at://did:plc:…/app.bsky.graph.list/<rkey>), or a bsky.app/profile/<did>/lists/<rkey> URL. Get it from the `lists` action.","on_invalid":"reject","example":"at://did:plc:eclio37ymobqex2ncko63h4r/app.bsky.graph.list/3lbl2hyzmfy2u","aliases":["list_uri","uri"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-2000, default 100). Auto-paginated; larger values are clamped to 2000.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":2000},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"list (metadata), members[] (actor objects), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"list":"at://did:plc:eclio37ymobqex2ncko63h4r/app.bsky.graph.list/3lbl2hyzmfy2u","limit":20}},{"name":"list_feed","description":"The feed of posts authored by the members of a list (a list used as a custom timeline), cursor-paginated.","required_params":["list"],"optional_params":["limit","cursor"],"params":[{"name":"list","type":"string","required":true,"description":"A list's at:// AT-URI (e.g. at://did:plc:…/app.bsky.graph.list/<rkey>), or a bsky.app/profile/<did>/lists/<rkey> URL. Get it from the `lists` action.","on_invalid":"reject","example":"at://did:plc:eclio37ymobqex2ncko63h4r/app.bsky.graph.list/3lbl2hyzmfy2u","aliases":["list_uri","uri"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-200, default 30). Auto-paginated; larger values are clamped to 200.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":200},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"posts[] (from list members, full normalized), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"list":"at://did:plc:eclio37ymobqex2ncko63h4r/app.bsky.graph.list/3lbl2hyzmfy2u","limit":15}},{"name":"actor_feeds","description":"The custom feed generators an account CREATED (its published feeds), cursor-paginated.","required_params":["actor"],"optional_params":["limit","cursor"],"params":[{"name":"actor","type":"string","required":true,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-500, default 50). Auto-paginated; larger values are clamped to 500.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"feeds[] (uri, display_name, description, like_count, creator), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"actor":"bsky.app","limit":10}},{"name":"feed_generator","description":"One custom feed generator's metadata plus its live online/valid status (is the feed service up).","required_params":["feed"],"optional_params":[],"params":[{"name":"feed","type":"string","required":true,"description":"A feed-generator's at:// URI (…/app.bsky.feed.generator/<rkey>) or its bsky.app/profile/<id>/feed/<rkey> share URL. Get it from `actor_feeds` or `popular_feeds`.","on_invalid":"reject","example":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot","aliases":["feed_uri","uri"]}],"returns":"feed-generator view + is_online, is_valid","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"feed":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot"}},{"name":"popular_feeds","description":"Discover popular custom feed generators — pass `q` to search feeds by name/topic, or omit for the platform-wide popular list. Cursor-paginated.","required_params":[],"optional_params":["q","limit","cursor"],"params":[{"name":"q","type":"string","required":false,"description":"Optional search query to filter popular feeds by name/topic. Omit for the platform-wide popular list.","on_invalid":"ignore","example":"news","aliases":["query"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-100, default 50). Auto-paginated; larger values are clamped to 100.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"feeds[] (feed-generator views), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"news","limit":10}},{"name":"get_feed","description":"The posts served BY a custom feed generator (e.g. a Discover/What's-Hot/topic feed) by its at:// URI, cursor-paginated. Public — no account required.","required_params":["feed"],"optional_params":["limit","cursor"],"params":[{"name":"feed","type":"string","required":true,"description":"A feed-generator's at:// URI (e.g. a custom/discover feed). Get it from a profile's associated feedgens or a feed's share URL.","on_invalid":"reject","example":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot","aliases":["feed_uri","uri"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-200, default 30). Auto-paginated; larger values are clamped to 200.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":200},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"feed, posts[] from that feed generator, count, cursor","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"feed":"at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot","limit":20}},{"name":"starter_packs","description":"The starter packs an account CREATED (shareable onboarding bundles of accounts + feeds), cursor-paginated.","required_params":["actor"],"optional_params":["limit","cursor"],"params":[{"name":"actor","type":"string","required":true,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-500, default 50). Auto-paginated; larger values are clamped to 500.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"starter_packs[] (uri, name, description, creator, list_item_count, join counts), count, cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"actor":"bsky.app","limit":10}},{"name":"starter_pack","description":"One starter pack's full detail: its underlying list, sample member profiles and any bundled feeds.","required_params":["starter_pack"],"optional_params":[],"params":[{"name":"starter_pack","type":"string","required":true,"description":"A starter-pack at:// URI (…/app.bsky.graph.starterpack/<rkey>) or a bsky.app/starter-pack/<id>/<rkey> URL. Get it from the `starter_packs` action.","on_invalid":"reject","example":"at://did:plc:ragtjsm2j2vknwkz3zp4oxrd/app.bsky.graph.starterpack/3m4j33zq7sz2m","aliases":["starterPack","uri"]}],"returns":"starter-pack view + list, members[] (sample), feeds[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"starter_pack":"at://did:plc:ragtjsm2j2vknwkz3zp4oxrd/app.bsky.graph.starterpack/3m4j33zq7sz2m"}},{"name":"search_posts","description":"Search Bluesky posts by keyword or hashtag — filter by sort order, date range, author, language, domain or tag. Requires an app-password; returns a clear error if none is configured.","required_params":["q"],"optional_params":["sort","limit","cursor","since","until","author","mentions","lang","domain","url","tag"],"params":[{"name":"q","type":"string","required":true,"description":"Search query (keywords; also accepted as 'query').","on_invalid":"reject","example":"news","aliases":["query"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering for post search.","on_invalid":"reject","allowed_values":[{"value":"top","label":"Top / most relevant (default)"},{"value":"latest","label":"Most recent first"}],"default":"top","example":"latest"},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-100, default 25). Auto-paginated; larger values are clamped to 100.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""},{"name":"since","type":"string","required":false,"description":"Only posts at/after this time (ISO-8601 or YYYY-MM-DD).","on_invalid":"ignore","example":"2024-01-01T00:00:00Z"},{"name":"until","type":"string","required":false,"description":"Only posts at/before this time (ISO-8601 or YYYY-MM-DD).","on_invalid":"ignore","example":"2024-12-31T23:59:59Z"},{"name":"author","type":"string","required":false,"description":"Restrict to posts by this account (handle or DID).","on_invalid":"ignore","example":"bsky.app"},{"name":"mentions","type":"string","required":false,"description":"Restrict to posts mentioning this account (handle or DID).","on_invalid":"ignore","example":"bsky.app"},{"name":"lang","type":"string","required":false,"description":"Restrict to posts in this language (BCP-47 code, e.g. en, tr, ja).","on_invalid":"ignore","example":"en"},{"name":"domain","type":"string","required":false,"description":"Restrict to posts linking to this domain.","on_invalid":"ignore","example":"nasa.gov"},{"name":"url","type":"string","required":false,"description":"Restrict to posts linking to this exact URL.","on_invalid":"ignore","example":"https://bsky.app"},{"name":"tag","type":"string","required":false,"description":"Restrict to posts with this hashtag (without the #).","on_invalid":"ignore","example":"art"}],"returns":"posts[] (full normalized post each), hits_total, count, cursor","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"bluesky","sort":"top","limit":25}},{"name":"get_actor_likes","description":"posts an actor liked (authed; the AppView serves the authenticated account's own likes). Defaults to the logged-in handle.","required_params":[],"optional_params":["actor","limit","cursor"],"params":[{"name":"actor","type":"string","required":false,"description":"A Bluesky account — its handle (e.g. bsky.app), a did:plc:… DID, or a bsky.app/profile/<…> URL. The AppView resolves all three.","on_invalid":"reject","example":"bsky.app","aliases":["handle","did"]},{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-200, default 30). Auto-paginated; larger values are clamped to 200.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":200},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"actor, posts[] the account liked, count, cursor (authed)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":20}},{"name":"timeline","description":"the authenticated account's home timeline (authed)","required_params":[],"optional_params":["limit","cursor","algorithm"],"params":[{"name":"limit","type":"integer","required":false,"description":"Max records to return (1-200, default 30). Auto-paginated; larger values are clamped to 200.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":200},{"name":"algorithm","type":"string","required":false,"description":"Optional timeline algorithm key (server-defined; omit for the default).","on_invalid":"ignore","example":"reverse-chronological"},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's `cursor`. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"posts[] from the account's home timeline, count, cursor (authed)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":20}}]},{"name":"boekwinkeltjes","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Boekwinkeltjes — Dutch & Belgian second-hand and antiquarian books","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/boekwinkeltjes/v1","spec_available":true,"actions":[{"name":"search","description":"Search every copy on offer across 11,264 Dutch and Belgian second-hand and antiquarian bookshops and private sellers. ONE ROW IS ONE COPY from ONE seller at ONE price, not a catalogue title: the same ISBN appears once per shelf it sits on, which is what makes the price spread visible. `query` takes a title, an author, a publisher or an ISBN. 🔴 Search rows do NOT carry an ISBN — the source's result table has no ISBN column; call `book` with the row's `book_id` for ISBN, language, condition and the full seller block. 50 copies per page (measured constant on 12 sampled pages); the site's own ceiling is page 200, i.e. at most 10,000 copies per query.","required_params":["query"],"optional_params":["page","sort","order","condition","language","seller_country","price_min","price_max","zip","distance_km","with_image","shipping_cost_listed","added_last_week","with_total"],"params":[{"name":"query","type":"string","required":true,"description":"Title, author, publisher or ISBN. The site matches on all of them; an ISBN-13 matches the exact edition.","on_invalid":"reject","example":"tolkien","aliases":["q","keyword","keywords","isbn","title"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The source refuses page 201 with a 404, so 200 is the hard ceiling.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Sort key. Omitted = the source's own default order.","on_invalid":"reject","allowed_values":[{"value":"title","label":"Title"},{"value":"author","label":"Author"},{"value":"publisher","label":"Publisher"},{"value":"particulars","label":"Particulars text"},{"value":"price","label":"Price"},{"value":"shop","label":"Shop name"},{"value":"newest","label":"Most recently listed"},{"value":"updated","label":"Most recently changed"}],"example":"price","aliases":["sort_by","order_by"]},{"name":"order","type":"enum","required":false,"description":"Sort direction. Only meaningful together with `sort`.","on_invalid":"reject","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"default":"asc","aliases":["sort_order","direction"]},{"name":"condition","type":"enum","required":false,"description":"Second-hand or new. Measured on query=tolkien: 1,983 used + 446 new = 2,429 unfiltered, so the two are the complete halves of the catalogue.","on_invalid":"reject","allowed_values":[{"value":"any","label":"Both (default)"},{"value":"used","label":"Second-hand only"},{"value":"new","label":"New only"}],"default":"any","example":"used","aliases":["book_condition"]},{"name":"language","type":"enum","required":false,"description":"Language OF THE BOOK (not of the seller). 56 codes, the source's own. Measured on query=tolkien: GB 801, DE 61 of 2,429.","on_invalid":"reject","allowed_values":[{"value":"NL","label":"Dutch"},{"value":"GB","label":"English"},{"value":"DE","label":"German"},{"value":"FR","label":"French"},{"value":"MET","label":"multilingual"},{"value":"AF","label":"Afrikaans"},{"value":"ES","label":"Spanish"},{"value":"NO","label":"Norwegian"},{"value":"SE","label":"Swedish"},{"value":"DK","label":"Danish"},{"value":"FS","label":"Frisian"},{"value":"AL","label":"Albanian"},{"value":"AD","label":"Catalan"},{"value":"AR","label":"Arabic"},{"value":"BA","label":"Bashkir"},{"value":"BY","label":"Belarusian"},{"value":"BS","label":"Bosnian"},{"value":"BG","label":"Bulgarian"},{"value":"IM","label":"Manx"},{"value":"EO","label":"Esperanto"},{"value":"EE","label":"Estonian"},{"value":"FO","label":"Faroese"},{"value":"FA","label":"Persian"},{"value":"FI","label":"Finnish"},{"value":"GR","label":"Greek"},{"value":"GM","label":"Germanic languages"},{"value":"HU","label":"Hungarian"},{"value":"IW","label":"Hebrew"},{"value":"IS","label":"Icelandic"},{"value":"ID","label":"Indonesian"},{"value":"IE","label":"Irish"},{"value":"IT","label":"Italian"},{"value":"JP","label":"Japanese"},{"value":"YH","label":"Yiddish"},{"value":"HR","label":"Croatian"},{"value":"LV","label":"Latvian"},{"value":"LA","label":"Latin"},{"value":"LT","label":"Lithuanian"},{"value":"LU","label":"Luxembourgish"},{"value":"MK","label":"Macedonian"},{"value":"MT","label":"Maltese"},{"value":"ZH","label":"Mandarin / Chinese"},{"value":"ME","label":"Montenegrin"},{"value":"NG","label":"Ndonga"},{"value":"OS","label":"Ossetian"},{"value":"UA","label":"Ukrainian"},{"value":"PL","label":"Polish"},{"value":"PT","label":"Portuguese"},{"value":"RO","label":"Romanian"},{"value":"RU","label":"Russian"},{"value":"RS","label":"Serbian"},{"value":"SI","label":"Slovenian"},{"value":"SK","label":"Slovak"},{"value":"CZ","label":"Czech"},{"value":"TR","label":"Turkish"},{"value":"CY","label":"Welsh"}],"example":"GB","aliases":["book_language","lang"]},{"name":"seller_country","type":"enum","required":false,"description":"Country the SELLER ships from. Measured on query=tolkien: NL 2,393, BE 470 of 2,429.","on_invalid":"reject","allowed_values":[{"value":"NL","label":"Netherlands"},{"value":"BE","label":"Belgium"},{"value":"FR","label":"France"},{"value":"GB","label":"United Kingdom"},{"value":"WW","label":"rest of the world"}],"example":"BE","aliases":["country","seller_from"]},{"name":"price_min","type":"number","required":false,"description":"Minimum asking price in EUR.","on_invalid":"reject","example":50,"minimum":0,"aliases":["min_price","prijsvan"]},{"name":"price_max","type":"number","required":false,"description":"Maximum asking price in EUR.","on_invalid":"reject","example":5,"minimum":0,"aliases":["max_price","prijstot"]},{"name":"zip","type":"string","required":false,"description":"Dutch or Belgian postcode used as the centre for `distance_km`.","on_invalid":"reject","example":"1012","aliases":["zipcode","postcode","postal_code"]},{"name":"distance_km","type":"enum","required":false,"description":"Only sellers within this many km of `zip`. The source offers these steps only. Measured: zip=1012 + 10 km → 72 copies of 2,429; 150 km → 1,673.","on_invalid":"reject","allowed_values":[{"value":"2.5","label":"within 2.5 km"},{"value":"5","label":"within 5 km"},{"value":"10","label":"within 10 km"},{"value":"25","label":"within 25 km"},{"value":"50","label":"within 50 km"},{"value":"75","label":"within 75 km"},{"value":"150","label":"within 150 km"}],"example":"10","aliases":["distance","radius_km"]},{"name":"with_image","type":"boolean","required":false,"description":"Only listings with a photo. Measured: 1,652 of 2,429.","on_invalid":"reject","default":false,"aliases":["has_image","only_with_image"]},{"name":"shipping_cost_listed","type":"boolean","required":false,"description":"Only listings that DO charge shipping — the source's own switch is \"show only with shipping costs\", so this is the opposite of free shipping. Measured: 1,606 of 2,429.","on_invalid":"reject","default":false,"aliases":["with_shipping_cost"]},{"name":"added_last_week","type":"boolean","required":false,"description":"Only copies listed in the last week. Measured: 103 of 2,429.","on_invalid":"reject","default":false,"aliases":["recent","last_week"]},{"name":"with_total","type":"boolean","required":false,"description":"Also return `total_estimate`. The source publishes NO result count, so this is computed from its last page link plus the rows on that page and costs one extra upstream request.","on_invalid":"reject","default":false,"aliases":["include_total","count"]}],"returns":"{query, page, rows_per_page, returned, total_estimate, pages_estimate, filters_applied, books:[{book_id, url, title, author, publisher, particulars, condition, binding, price_eur, price_display, shipping_eur, shipping_display, seller_name, image_url, isbn, listing_channel}]}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"tolkien"}},{"name":"book","description":"One copy in full: ISBN exactly as the seller printed it (ISBN-10 and ISBN-13 kept apart, never converted into each other), title, author, publisher, language, the seller's own free-text `particulars` (year / edition / binding / defects all live there), price with the source's own printed string beside it, shipping, photos, and the SELLER — shop name, town, business-or-private, slug, website, handling time and delivery terms. Accepts a book URL instead of an id. A dead id returns NOT_FOUND.","required_params":["book_id"],"optional_params":[],"params":[{"name":"book_id","type":"string","required":true,"description":"Numeric id from a book URL (https://www.boekwinkeltjes.nl/b/244885503/… → 244885503), or the whole URL.","on_invalid":"reject","example":"244885503","value_pattern":"\\d{1,12}|https?://.*|/b/\\d+/.*","aliases":["id","listing_id","url","book_url"]}],"returns":"{book_id, url, title, author, isbn, isbn13, isbn10, publisher, language, language_code, particulars, condition, condition_text, binding, price_eur, price_display, price_ld_json, price_witnesses_agree, currency, shipping_eur, shipping_display, shipping_region, description, availability, image_url, images, listing_channel, seller:{name, city, kind, slug, url, website, logo_url, total_books, handling_days, terms}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"book_id":"244885503"}},{"name":"seller","description":"One shop's own stock page: its profile (name, town, business or private, logo, website, delivery terms) together with the TOTAL NUMBER OF BOOKS it publishes about itself — the only count this source prints anywhere — and a page of its copies in the same shape as `search`. `query` searches inside that one shop. A dead slug returns NOT_FOUND; a shop that has switched itself off returns its profile with `temporarily_closed: true` and no books.","required_params":["seller"],"optional_params":["page","query","sort"],"params":[{"name":"seller","type":"string","required":true,"description":"Shop slug from a shop URL (https://www.boekwinkeltjes.nl/v/kascornelis/ → kascornelis), or the whole URL. `book` returns it as `seller.slug`.","on_invalid":"reject","example":"kascornelis","value_pattern":"[a-z0-9][a-z0-9._-]{0,80}|https?://.*|/v/.*","aliases":["seller_slug","shop","slug","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page of that shop's stock.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"query","type":"string","required":false,"description":"Search inside this shop only.","on_invalid":"reject","example":"tolkien","aliases":["q","keyword"]},{"name":"sort","type":"enum","required":false,"description":"Sort key, same set as `search`.","on_invalid":"reject","allowed_values":[{"value":"title","label":"Title"},{"value":"author","label":"Author"},{"value":"publisher","label":"Publisher"},{"value":"particulars","label":"Particulars text"},{"value":"price","label":"Price"},{"value":"shop","label":"Shop name"},{"value":"newest","label":"Most recently listed"},{"value":"updated","label":"Most recently changed"}],"aliases":["sort_by"]}],"returns":"{seller:{name, city, kind, slug, url, website, logo_url, total_books, terms, temporarily_closed}, page, rows_per_page, returned, pages_estimate, books:[… same as search …]}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"seller":"kascornelis"}}]},{"name":"bol","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"bol.com API scraper - search, product detail, marketplace seller offers and category browse for bol.com, the leading online retailer in the Netherlands and Belgium. Prices in EUR, Dutch and French storefronts, no account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bol/v1","spec_available":true,"actions":[{"name":"search","description":"Search bol.com by keyword, paginated. Every row carries the product id and url, title, brand, the current price and bol's own 90-day reference price, the discount, the seller behind the buy-box (bol itself or a marketplace partner), the delivery promise, the rating and review count, the category path, the EAN when bol publishes one, and whether the row is a paid placement. The response also returns the ids of the categories the results fall into, which is what `category` takes.","required_params":["query"],"optional_params":["page","sort","market","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, in the storefront's language (Dutch for nl and be, French for be-fr).","on_invalid":"reject","example":"koptelefoon","aliases":["q","searchtext","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based, ~30 products per page. bol serves at most 10 search pages for a query - page 11 comes back empty - so narrow the query rather than paging past it. Category browse pages go much deeper (see `total_pages`).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Only these three are published because only these three were measured to actually re-order bol's results; every other ordering the site offers is applied client-side and is not reachable from a request.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"bol's own default order"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"}],"example":"price_asc","aliases":["order","sorteren"]},{"name":"market","type":"enum","required":false,"description":"Which bol storefront to read: nl (bol.com/nl/nl, Dutch) - be (bol.com/be/nl, Belgian Dutch) - be-fr (bol.com/be/fr, Belgian French). One catalogue, three localised storefronts; prices are in EUR on all three and can differ between them.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - bol.com/nl/nl, Dutch, EUR"},{"value":"be","label":"Belgium (Dutch) - bol.com/be/nl, EUR"},{"value":"be-fr","label":"Belgium (French) - bol.com/be/fr, EUR"}],"default":"nl","example":"nl","aliases":["country","site"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a refused request (1-10, default 4). Leave unchanged for typical use.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"products[]{product_id, title, url, brand{}, price, currency, reference_price, discount_percent, condition, seller{id, name, is_bol, rating, rating_count (null — bol publishes a seller score, not a count), top_seller}, delivery{description, arrives_by, shipping_cost, within_48h}, low_stock, promotions[], rating, review_count, image, category, category_path[], ean, highlights[], sponsored, offers_url}, count, page, total_results, total_results_is_estimate, total_pages, categories[]{id, name, url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"koptelefoon"}},{"name":"product/detail","description":"Full bol.com product by id (or by its url): title, brand, EAN and MPN, the buy-box price with bol's 90-day reference price and the discount, the seller, the delivery promise, the full image gallery, the complete specification table, the description as plain text, the category breadcrumb, the average rating and review count, and how many competing offers exist. Review TEXT is not returned - bol serves it only to a signed-in session, and this endpoint never invents it.","required_params":["product_id"],"optional_params":["market","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"bol product id - the long number at the end of a product url (bol.com/nl/nl/p/<slug>/9300000180008278/). A full product url works too: the words in the path are decoration and the number is the key. Every row `search` and `category` return carries both.","on_invalid":"reject","example":"9300000180008278","aliases":["id","url","product_url","sku","ean_url"]},{"name":"market","type":"enum","required":false,"description":"Which bol storefront to read: nl (bol.com/nl/nl, Dutch) - be (bol.com/be/nl, Belgian Dutch) - be-fr (bol.com/be/fr, Belgian French). One catalogue, three localised storefronts; prices are in EUR on all three and can differ between them.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - bol.com/nl/nl, Dutch, EUR"},{"value":"be","label":"Belgium (Dutch) - bol.com/be/nl, EUR"},{"value":"be-fr","label":"Belgium (French) - bol.com/be/fr, EUR"}],"default":"nl","example":"nl","aliases":["country","site"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a refused request (1-10, default 4). Leave unchanged for typical use.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"product{product_id, title, subtitle, url, brand{id, name, url}, ean, mpn, model, colour, price, currency, reference_price, discount_percent, discount_amount, condition, seller{}, delivery{}, low_stock, promotions[], rating, review_count, rating_scale (null — bol publishes no scale for the product rating; its SELLER score is a separate 1-10 scale on seller.rating), description, highlights[], specifications[]{group, key, name, values[]}, images[], video, category, category_path[], breadcrumb[]{id, name, url}, offers_url, offer_count, related_products[]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"9300000180008278"}},{"name":"product/offers","description":"Every seller offering one bol.com product, with that seller's price, condition, delivery promise, shipping cost and bol seller rating - bol is a marketplace and this is the competing-offer table behind the buy-box, on bol's own price-overview page. Cheap: about 45 KB per call against 290 KB for the product page.","required_params":["product_id"],"optional_params":["market","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"bol product id - the long number at the end of a product url (bol.com/nl/nl/p/<slug>/9300000180008278/). A full product url works too: the words in the path are decoration and the number is the key. Every row `search` and `category` return carries both.","on_invalid":"reject","example":"9300000180008278","aliases":["id","url","product_url","sku","ean_url"]},{"name":"market","type":"enum","required":false,"description":"Which bol storefront to read: nl (bol.com/nl/nl, Dutch) - be (bol.com/be/nl, Belgian Dutch) - be-fr (bol.com/be/fr, Belgian French). One catalogue, three localised storefronts; prices are in EUR on all three and can differ between them.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - bol.com/nl/nl, Dutch, EUR"},{"value":"be","label":"Belgium (Dutch) - bol.com/be/nl, EUR"},{"value":"be-fr","label":"Belgium (French) - bol.com/be/fr, EUR"}],"default":"nl","example":"nl","aliases":["country","site"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a refused request (1-10, default 4). Leave unchanged for typical use.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"product{product_id, title, url, image}, offers[]{offer_id, price, currency, reference_price, discount_percent, condition, offer_type, seller{id, name, is_bol, rating, rating_count (null — bol publishes a seller score, not a count), top_seller}, delivery{description, arrives_by, shipping_cost, within_48h}, low_stock, promotions[]}, count, offer_counts{new, refurbished, secondhand}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"9300000180008278"}},{"name":"category","description":"Browse a bol.com category by its id, paginated - the same rich product row `search` returns, plus the category bol resolved and its breadcrumb. Category listings page far deeper than search does and their result total is exact rather than estimated.","required_params":["category_id"],"optional_params":["page","sort","market","max_rotations"],"params":[{"name":"category_id","type":"string","required":true,"description":"bol category id - the number in a category url (bol.com/nl/nl/l/laptops/4770/). A full category url works too. The NUMBER decides the category and the words are ignored, so /l/koptelefoons/4770/ really does serve Laptops; the response echoes the category bol resolved. `search` returns the ids of the categories its results fall into, under `categories`.","on_invalid":"reject","example":"4770","aliases":["id","category","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based, ~30 products per page. Category browse pages go deep - the response reports `total_pages`.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Only these three are published because only these three were measured to actually re-order bol's results; every other ordering the site offers is applied client-side and is not reachable from a request.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"bol's own default order"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"}],"example":"price_asc","aliases":["order","sorteren"]},{"name":"market","type":"enum","required":false,"description":"Which bol storefront to read: nl (bol.com/nl/nl, Dutch) - be (bol.com/be/nl, Belgian Dutch) - be-fr (bol.com/be/fr, Belgian French). One catalogue, three localised storefronts; prices are in EUR on all three and can differ between them.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - bol.com/nl/nl, Dutch, EUR"},{"value":"be","label":"Belgium (Dutch) - bol.com/be/nl, EUR"},{"value":"be-fr","label":"Belgium (French) - bol.com/be/fr, EUR"}],"default":"nl","example":"nl","aliases":["country","site"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a refused request (1-10, default 4). Leave unchanged for typical use.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"category{id, name, url, path[]}, products[]{...same row as search}, count, page, total_results, total_results_is_estimate, total_pages","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"4770"}}]},{"name":"booking","category":{"id":"travel","title":"Travel & Lodging"},"title":"Booking.com API — hotel search, prices, availability, guest reviews & destination lookup (booking.com, global coverage)","version":"1.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/booking/v1","spec_available":true,"actions":[{"name":"hotels/search","description":"Search hotels in a destination for given dates (25 hotels per page, with prices, review scores, photos, room configurations). Supports sorting, price/star/rating/amenity filters and paging. Pass ?include_facets=1 to list every available filter and sorter for the destination.","required_params":[],"optional_params":["query","dest_id","dest_type","checkin","checkout","adults","rooms","children_ages","currency","page","sort_by","min_price","max_price","min_rating","stars","free_cancellation","breakfast_included","amenities","include_facets","include_raw"],"params":[{"name":"query","type":"string","required":false,"description":"Destination as free text — city, region or landmark. Provide query OR dest_id+dest_type.","on_invalid":"reject","example":"Paris"},{"name":"dest_id","type":"string","required":false,"description":"Advanced: Booking destination ID (unambiguous — bypasses the free-text lookup). Pair with dest_type.","on_invalid":"reject","example":"-755070"},{"name":"dest_type","type":"string","required":false,"description":"Advanced: the destination's type as Booking labels it. One of: city, region, district, landmark, airport, hotel, country.","on_invalid":"ignore","example":"city"},{"name":"checkin","type":"string","required":false,"description":"Check-in date (YYYY-MM-DD). Always pass real dates — prices and availability depend on them.","on_invalid":"reject","example":"2026-12-03"},{"name":"checkout","type":"string","required":false,"description":"Check-out date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-05"},{"name":"adults","type":"integer","required":false,"description":"Number of adult guests.","on_invalid":"reject","default":2,"minimum":1,"maximum":30},{"name":"rooms","type":"integer","required":false,"description":"Number of rooms.","on_invalid":"reject","default":1,"minimum":1,"maximum":30},{"name":"children_ages","type":"string","required":false,"description":"Comma-separated ages of children (e.g. '5,9'). Adds child occupancy to the search/price. Omit for adults-only.","on_invalid":"ignore","example":"5,9"},{"name":"currency","type":"string","required":false,"description":"Price currency (ISO code: EUR, USD, GBP, TRY…).","on_invalid":"ignore","default":"EUR","example":"USD"},{"name":"page","type":"integer","required":false,"description":"Result page (25 hotels each). pagination.total in the response tells you how many results exist.","on_invalid":"ignore","default":1,"minimum":1,"maximum":40},{"name":"sort_by","type":"string","required":false,"description":"Sort order. One of: top_picks (default), price (low→high), price_desc (high→low), review_score, best_reviewed_and_price, stars_desc, stars_asc, distance.","on_invalid":"ignore","example":"price"},{"name":"min_price","type":"number","required":false,"description":"Minimum price per stay, in the chosen currency.","on_invalid":"ignore","example":50},{"name":"max_price","type":"number","required":false,"description":"Maximum price per stay, in the chosen currency.","on_invalid":"ignore","example":200},{"name":"min_rating","type":"number","required":false,"description":"Minimum guest review score (1–10). E.g. 8 = 'Very good+'.","on_invalid":"ignore","example":8,"minimum":1,"maximum":10},{"name":"stars","type":"string","required":false,"description":"Star rating(s) to include, comma-separated (1–5). E.g. '4,5' = 4- and 5-star only.","on_invalid":"ignore","example":"4,5"},{"name":"free_cancellation","type":"boolean","required":false,"description":"Only properties offering free cancellation.","on_invalid":"ignore","default":false},{"name":"breakfast_included","type":"boolean","required":false,"description":"Only properties where breakfast is included.","on_invalid":"ignore","default":false},{"name":"amenities","type":"string","required":false,"description":"Advanced: comma-separated Booking filter IDs (from ?include_facets=1 → available_filters). E.g. hotelfacility-107 (pool), roomfacility-11 (air-con).","on_invalid":"ignore","example":"hotelfacility-107,roomfacility-11"},{"name":"include_facets","type":"boolean","required":false,"description":"Also return available_sorters + available_filters for the destination (filter/sort discovery).","on_invalid":"ignore","default":false},{"name":"include_raw","type":"boolean","required":false,"description":"Include Booking's full raw payload per item (large). Default off — the normalized fields cover the common cases.","on_invalid":"ignore","default":false}],"returns":"items[]{hotel_id, page_name, name, description, url, location, price{amount, amount_unformatted, currency}, price_before_discount, review_score{score, review_count, label}, star_rating, photo, room_configurations, policies, badges} + count (25/page) + pagination{per_page, total, offset} + (with include_facets) available_sorters[] + available_filters[]","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"dest_id":"-755070","dest_type":"city","checkin":"2026-12-03","checkout":"2026-12-05"}},{"name":"hotels/detail","description":"Full hotel record: summary, rating breakdown, facilities, room types, surroundings, FAQ.","required_params":[],"optional_params":["page_name","country_code","hotel_url","checkin","checkout","adults","rooms","currency"],"params":[{"name":"page_name","type":"string","required":false,"description":"REQUIRED for hotels/detail & hotels/reviews (with country_code): the hotel's URL slug — booking.com/hotel/<country_code>/<page_name>.html. Copy page_name + country_code straight from a hotels/search result item (or pass the item's full url as hotel_url). A numeric hotel_id alone does NOT work — Booking detail pages are addressed by this slug.","on_invalid":"reject","example":"celine-taxim"},{"name":"country_code","type":"string","required":false,"description":"REQUIRED with page_name (for hotels/detail & hotels/reviews): the 2-letter country in the hotel URL (booking.com/hotel/<country_code>/…). Comes from the hotels/search result item alongside page_name.","on_invalid":"reject","example":"tr"},{"name":"hotel_url","type":"string","required":false,"description":"Full hotel URL (alternative to page_name+country_code) — the url field of a hotels/search result item.","on_invalid":"reject","example":"https://www.booking.com/hotel/tr/celine-taxim.html"},{"name":"checkin","type":"string","required":false,"description":"Check-in date (YYYY-MM-DD). Always pass real dates — prices and availability depend on them.","on_invalid":"reject","example":"2026-12-03"},{"name":"checkout","type":"string","required":false,"description":"Check-out date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-05"},{"name":"adults","type":"integer","required":false,"description":"Number of adult guests.","on_invalid":"reject","default":2,"minimum":1,"maximum":30},{"name":"rooms","type":"integer","required":false,"description":"Number of rooms.","on_invalid":"reject","default":1,"minimum":1,"maximum":30},{"name":"currency","type":"string","required":false,"description":"Price currency (ISO code: EUR, USD, GBP, TRY…).","on_invalid":"ignore","default":"EUR","example":"USD"}],"returns":"hotel_id + name + summary + rating_breakdown + facilities[] + room_types[] + surroundings + faq[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"page_name":"celine-taxim","country_code":"tr"}},{"name":"hotels/availability","description":"Visible room blocks (room, occupancy, price, cancellation policy, meal plan) for a destination's top hotel on given dates.","required_params":[],"optional_params":["query","dest_id","dest_type","checkin","checkout","hotel_id","adults","rooms","children_ages","currency"],"params":[{"name":"query","type":"string","required":false,"description":"Destination free text. Provide query OR dest_id+dest_type.","on_invalid":"reject","example":"Istanbul"},{"name":"dest_id","type":"string","required":false,"description":"Advanced: Booking destination ID (unambiguous — bypasses the free-text lookup). Pair with dest_type.","on_invalid":"reject","example":"-755070"},{"name":"dest_type","type":"string","required":false,"description":"Advanced: the destination's type as Booking labels it. One of: city, region, district, landmark, airport, hotel, country.","on_invalid":"ignore","example":"city"},{"name":"checkin","type":"string","required":false,"description":"Check-in date (YYYY-MM-DD). Always pass real dates — prices and availability depend on them.","on_invalid":"reject","example":"2026-12-03"},{"name":"checkout","type":"string","required":false,"description":"Check-out date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-05"},{"name":"hotel_id","type":"integer","required":false,"description":"Pin to one hotel from the search results (default: the top result).","on_invalid":"ignore"},{"name":"adults","type":"integer","required":false,"description":"Number of adult guests.","on_invalid":"reject","default":2,"minimum":1,"maximum":30},{"name":"rooms","type":"integer","required":false,"description":"Number of rooms.","on_invalid":"reject","default":1,"minimum":1,"maximum":30},{"name":"children_ages","type":"string","required":false,"description":"Comma-separated ages of children (e.g. '5,9'). Adds child occupancy to the search/price. Omit for adults-only.","on_invalid":"ignore","example":"5,9"},{"name":"currency","type":"string","required":false,"description":"Price currency (ISO code: EUR, USD, GBP, TRY…).","on_invalid":"ignore","default":"EUR","example":"USD"}],"returns":"room_blocks[]{room_id, occupancy, final_price, original_price, free_cancellation_until, cancellation_type, available_count_hint, breakfast_included, meal_plan} + hotel_id + is_available + price","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"Istanbul"}},{"name":"hotels/reviews","description":"Paginated, deduped guest reviews for one hotel (score, title, pros/cons text, owner reply, room type, stay dates, reviewer country, photos). Fetches ALL reviews by default; supports sorting and keyword search. The response also lists the available review filters (by score / language / customer type / season / topic).","required_params":[],"optional_params":["page_name","country_code","hotel_id","hotel_url","max_reviews","sort_by","keyword","review_page_size"],"params":[{"name":"page_name","type":"string","required":false,"description":"REQUIRED for hotels/detail & hotels/reviews (with country_code): the hotel's URL slug — booking.com/hotel/<country_code>/<page_name>.html. Copy page_name + country_code straight from a hotels/search result item (or pass the item's full url as hotel_url). A numeric hotel_id alone does NOT work — Booking detail pages are addressed by this slug.","on_invalid":"reject","example":"celine-taxim"},{"name":"country_code","type":"string","required":false,"description":"REQUIRED with page_name (for hotels/detail & hotels/reviews): the 2-letter country in the hotel URL (booking.com/hotel/<country_code>/…). Comes from the hotels/search result item alongside page_name.","on_invalid":"reject","example":"tr"},{"name":"hotel_url","type":"string","required":false,"description":"Full hotel URL (alternative to page_name+country_code).","on_invalid":"reject","example":"https://www.booking.com/hotel/tr/celine-taxim.html"},{"name":"max_reviews","type":"integer","required":false,"description":"How many reviews to fetch. Omit for ALL reviews (paged 25/page internally).","on_invalid":"reject","minimum":1,"maximum":10000},{"name":"sort_by","type":"string","required":false,"description":"Review order. One of: most_relevant (default), newest, oldest, highest_score, lowest_score.","on_invalid":"ignore","example":"newest"},{"name":"keyword","type":"string","required":false,"description":"Only reviews mentioning this keyword (free-text search).","on_invalid":"ignore","example":"breakfast"},{"name":"review_page_size","type":"integer","required":false,"description":"Advanced: reviews per internal page (Booking caps at 25).","on_invalid":"ignore","default":25,"minimum":1,"maximum":25},{"name":"hotel_id","type":"integer","required":false,"description":"Advanced: Booking hotel ID.","on_invalid":"ignore"}],"returns":"reviews[]{review_id, score, reviewed_date, reviewed_date_iso, language, title, positive_text, negative_text, partner_reply, reviewer_country, reviewer_country_code, guest_type, customer_type, room_type, stay{checkin, checkout, nights}, photos[], helpful_votes, review_url} + unique_count + total_count + rating_breakdown[] + language_filters[] + available_filters{score_buckets, customer_types, time_of_year, topics} + available_sorters[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"hotel_url":"https://www.booking.com/hotel/tr/celine-taxim.html"}},{"name":"destinations/autocomplete","description":"Resolve a free-text place ('Paris', 'Maldives', 'JFK') into the destination IDs the other actions take (dest_id + dest_type), with country, coordinates and how many hotels/homes each match has. Use this first when you only have a place name.","required_params":[],"optional_params":["query","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Place to look up — city, region, landmark, airport or country.","on_invalid":"reject","example":"Paris"},{"name":"limit","type":"integer","required":false,"description":"Max suggestions to return (1–20).","on_invalid":"ignore","default":10,"minimum":1,"maximum":20}],"returns":"suggestions[]{dest_id, dest_type, label, name, region, country_code, latitude, longitude, hotel_count, home_count, photo} + count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Paris"}}]},{"name":"bookoff","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"BOOK-OFF Online — Japan's second-hand books, comics, CD, DVD and games","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bookoff/v1","spec_available":true,"actions":[{"name":"search","description":"Search BOOK-OFF Online's 6,152,410-item catalogue — Japan's largest second-hand chain — across its six genres (books, comics/manga, magazines, CD, DVD & Blu-ray, games) or its 61,208 multi-volume sets. ONE ROW IS ONE CATALOGUE PRODUCT, not a copy: BOOK-OFF is a single retailer, so each product has one second-hand price and, where it is still published, one new price (measured: searching an exact ISBN-13/JAN returns exactly one row, 3 of 3 tried). Each row carries which condition surface it is (`surface` = used/new/set) together with the price, the publisher's list price, BOOK-OFF's own discount figure and its own pre-markdown price with the date it applied. 🔴 Send at least one of keyword, author, publisher, genre, genre_code or sets_only. Page size is the source's own 30, 60, 120 and is exact. The hard ceiling is page 999 (page 1000 → HTTP 404), so at most 119,880 items are reachable per query. Past the last real page the source returns an EMPTY grid, not filler rows, and `stop_reason` says `past_last_page`.","required_params":[],"optional_params":["keyword","exclude_keyword","author","publisher","genre","genre_code","in_stock_only","used_only","store_pickup_only","price_min","price_max","released_from","released_to","sort","per_page","page","sets_only"],"params":[{"name":"keyword","type":"string","required":false,"description":"Free-text search over title, author/artist and product number. Upstream this is a PATH segment, not a query string — six query spellings were tried and every one returned the full catalogue with HTTP 200.","on_invalid":"reject","example":"ワンピース","aliases":["q","query","kw","search"]},{"name":"exclude_keyword","type":"string","required":false,"description":"Exclude rows matching this text. Measured: keyword=ワンピース 2,181 → excluding カード 2,168.","on_invalid":"reject","example":"カード","aliases":["not","exclude"]},{"name":"author","type":"string","required":false,"description":"Author, artist or creator, as BOOK-OFF spells it. Measured on its own: 尾田栄一郎 → 1,062 items.","on_invalid":"reject","example":"尾田栄一郎","aliases":["artist","creator"]},{"name":"publisher","type":"string","required":false,"description":"Publisher, label or maker. Measured: keyword=ワンピース 2,181 → publisher=集英社 436.","on_invalid":"reject","example":"集英社","aliases":["maker","label"]},{"name":"genre","type":"enum","required":false,"description":"One of BOOK-OFF's six public genres. Measured on keyword=ワンピース: book 649, comic 394, magazine 0, cd 272, dvd 775, game 91 — which sum to exactly the 2,181 unfiltered total. BOOK-OFF has NO trading-card genre: card products appear inside these six and are reachable by keyword only.","on_invalid":"reject","allowed_values":[{"value":"book","label":"書籍 — books (2,881,854)"},{"value":"comic","label":"コミック — comics / manga (420,838)"},{"value":"magazine","label":"雑誌 — magazines (118,669)"},{"value":"cd","label":"CD (1,946,281)"},{"value":"dvd","label":"DVD・ブルーレイ — DVD & Blu-ray (739,409)"},{"value":"game","label":"ゲーム — games (45,359)"}],"example":"comic","aliases":["category"]},{"name":"genre_code","type":"string","required":false,"description":"BOOK-OFF's own genre code instead of the `genre` enum: a 2-digit top-level code (12, 11, 13, 31, 71, 51) or a 4-digit sub-genre whose first two digits are one of those — e.g. 5127 = Nintendo Switch (3,111 items, measured). An unrecognised code is refused here because the source answers one with the FULL catalogue and HTTP 200. Note: this is NOT the dotted code a product page prints as its `genre_code` — that is a different, internal taxonomy (31xx vs 1601-01-01).","on_invalid":"reject","example":"5127","value_pattern":"\\d{2}|\\d{4}","aliases":["subgenre","sub_genre"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only items BOOK-OFF has in stock now. Measured: keyword=ワンピース 2,181 → 1,383.","on_invalid":"reject","default":false,"aliases":["in_stock","stock_only"]},{"name":"used_only","type":"boolean","required":false,"description":"Switch every row to its SECOND-HAND offer. 🔴 On its own this is NOT a count filter: measured 2,181 → 2,181, the same 30 ids in the same order, only each row's offer rewritten (a row went new JPY 484 → used JPY 440). Together with in_stock_only it does filter: 1,383 → 1,326. A warning says so in `meta`.","on_invalid":"reject","default":false,"aliases":["second_hand_only","used"]},{"name":"store_pickup_only","type":"boolean","required":false,"description":"Only items collectable at a BOOK-OFF shop. Measured: 2,181 → 1,095.","on_invalid":"reject","default":false,"aliases":["store_pickup","pickup_only"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in JPY (whole yen — JPY has no minor unit). Measured: price 5,000 and up → 51 of 2,181.","on_invalid":"reject","example":500,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in JPY. Measured: 0-300 → 680 of 2,181.","on_invalid":"reject","example":300,"minimum":0,"aliases":["max_price"]},{"name":"released_from","type":"string","required":false,"description":"Earliest release year-month, YYYY-MM or YYYYMM. Measured: from 2025-01 → 105 of 2,181. The source's own note: sets are excluded from this filter.","on_invalid":"reject","example":"2025-01","value_pattern":"(19|20)\\d{2}-?(0[1-9]|1[0-2])","aliases":["date_min","release_from"]},{"name":"released_to","type":"string","required":false,"description":"Latest release year-month. Measured: 2025-01 to 2025-12 → 60 of 2,181.","on_invalid":"reject","example":"2025-12","value_pattern":"(19|20)\\d{2}-?(0[1-9]|1[0-2])","aliases":["date_max","release_to"]},{"name":"sort","type":"enum","required":false,"description":"Sort order. Omitted = BOOK-OFF's own popularity order, which is REPRODUCIBLE: three identical calls returned the same 30 ids in the same order. Measured: used_price_asc gave 110, 110, 110 … and used_price_desc gave 49,500, 46,200, 26,400 …","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"BOOK-OFF's own default order"},{"value":"used_price_asc","label":"Cheapest second-hand price first"},{"value":"used_price_desc","label":"Dearest second-hand price first"},{"value":"new_price_asc","label":"Cheapest new price first"},{"value":"new_price_desc","label":"Dearest new price first"},{"value":"newest","label":"Newest release date first"},{"value":"oldest","label":"Oldest release date first"}],"default":"popularity","example":"used_price_asc","aliases":["sort_by","order_by"]},{"name":"per_page","type":"integer","required":false,"description":"Rows per page. The source offers 30, 60 and 120 only and silently falls back to 30 for anything else (measured: 77 → 30 rows), so other values are refused.","on_invalid":"reject","allowed_values":[{"value":30,"label":"30 rows"},{"value":60,"label":"60 rows"},{"value":120,"label":"120 rows"}],"default":30,"example":60,"aliases":["page_size","limit"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The source refuses page 1000 with HTTP 404, so 999 is the hard ceiling.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":999,"aliases":["p"]},{"name":"sets_only","type":"boolean","required":false,"description":"Search the 61,208 multi-volume SETS instead of single products. A set is its own SKU bundling N products; resolve one with the `set` action. The genre, stock, store-pickup and release-date filters are refused with this because they were NOT measured to apply on the set surface.","on_invalid":"reject","default":false,"aliases":["sets","set_only"]}],"returns":"{page, per_page, returned, total, pages_estimate, page_ceiling, order_is_stable, filters_applied, facet_counts, items:[{product_id, surface, url, title, author, category, genre_label, condition, price_jpy, price_display, list_price_jpy, discount_jpy, discount_pct, previous_price_jpy, previous_price_date, points, in_stock, stock_text, store_pickup, release_date, image_url, tags, set_id, items_total, items_available}]}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"keyword":"ワンピース"}},{"name":"product","description":"One BOOK-OFF product in full: title, author, category and sub-genre, the 13-digit JAN (republished as `isbn13` when it really is a 978/979 Bookland code — ISBN-10 is never derived from it), publisher, release date, description, and the category-specific rows the source prints — catalogue number on CD, DVD and games, disc count and the full track list on CD and DVD, cast and the director/writer/composer credit row on DVD (enumerated over 18 live pages, three per genre; artist and platform are NOT published as rows and are therefore absent rather than permanently null). FOUR money figures are kept apart: the price you pay, the publisher's list price, BOOK-OFF's own discount, and BOOK-OFF's own pre-markdown price with the date it applied — each cross-checked against the page's own schema.org offer. Plus STORE STOCK: how many BOOK-OFF shops have received the item and the per-prefecture breakdown. 🔴 An id alone does NOT identify an offer: `/used/<id>` and `/new/<id>` are the same product at different prices (measured 1,760 vs 2,200). Pass `condition` to choose; with it omitted the second-hand surface is tried first and then the new one, and the answer always reports which one replied. A dead id returns NOT_FOUND.","required_params":["product_id"],"optional_params":["condition"],"params":[{"name":"product_id","type":"string","required":true,"description":"The 10-digit BOOK-OFF item number (https://shopping.bookoff.co.jp/used/0020673438 → 0020673438), or the whole product URL — in which case the URL's own /used/ or /new/ segment sets `condition`. 🔴 Anything looser is refused: BOOK-OFF drops trailing characters and serves a DIFFERENT product with HTTP 200 (measured: /used/0020673438x returned the page of 0020673438).","on_invalid":"reject","example":"0020673438","value_pattern":"\\d{10}|https?://.*|/(?:used|new)/\\d{10}.*","aliases":["id","item_id","goods_id","url","product_url"]},{"name":"condition","type":"enum","required":false,"description":"Which condition surface to read. Omitted = try second-hand, then new; the reply's `condition` and `url` always say which one answered, and `offer_surfaces` lists the surfaces the product page's own toggle links to.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Second-hand (中古)"},{"value":"new","label":"New (新品)"}],"example":"used","aliases":["stock","offer"]}],"returns":"{product_id, surface, condition, url, title, author, category, genre_label, genre_code, price_jpy, price_display, price_ld_json, price_witnesses_agree, price_unit_verified, price_source, page_shape, currency, list_price_jpy, discount_jpy, discount_pct, discount_arithmetic_ok, previous_price_jpy, previous_price_date, points, in_stock, stock_text, availability, shipping_text, store_pickup, store_arrival_estimate, jan, isbn13, isbn10, publisher, release_date, description, catalog_number, disc_count_text, tracklist, cast, credits, rating, review_count, image_url, images, offer_surfaces, other_condition_url, tags, store_stock:{stores_with_stock, by_prefecture:[{prefecture_code, prefecture, items}], by_prefecture_sum, breakdown_matches_headline, store_names, note}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"0020673438","condition":"used"}},{"name":"set","description":"One of BOOK-OFF's 61,208 multi-volume SETS: its own price and discount, how many of its component items are available right now split into second-hand and new (the source's own \"全2点中 1点（中古1点 / 新品0点）\" = 1 of 2 items, 1 used and 0 new), and the component products themselves as ids and URLs you can resolve with `product`. Set pages publish NO schema.org data, so every field here is parsed from the printed page. A dead set id returns NOT_FOUND.","required_params":["set_id"],"optional_params":[],"params":[{"name":"set_id","type":"string","required":true,"description":"The 10-digit set number (https://shopping.bookoff.co.jp/s/8800050251 → 8800050251), or the whole set URL. `search` returns it as `product_id` on rows whose `surface` is `set`, and as `set_id` on single rows that also belong to a set.","on_invalid":"reject","example":"8800050251","value_pattern":"\\d{10}|https?://.*|/s/\\d{10}.*","aliases":["id","url","set_url"]}],"returns":"{set_id, url, title, author, category, genre_label, price_jpy, price_display, list_price_in_stock_jpy, discount_jpy, discount_pct, items_total, items_available, items_available_used, items_available_new, stock_text, shipping_text, image_url, components:[{product_id, surface, url}], components_returned, store_stock}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"set_id":"8800050251"}}]},{"name":"books","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Books & Authors API — search books/authors, full book details by ISBN, author bibliographies, all editions, genre/subject browse, trending books, and public-domain ebooks (OpenLibrary + Project Gutenberg)","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/books/v1","spec_available":true,"actions":[{"name":"book_detail","description":"merged book record by ISBN-10/13 or OLID (work OL..W / edition OL..M): title/authors/covers/subjects/description/pages/publishers/languages/editions/identifiers/ratings+distribution/reading-log; queried ISBN always injected","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"ISBN-10/13, OR OpenLibrary work id (OL..W), OR edition id (OL..M).","on_invalid":"reject","example":"9780439023528","aliases":["isbn","olid"]}],"returns":"book{} — title, authors[], covers, subjects, description, number_of_pages, publishers, languages, editions_count, isbn_10/13, ratings{average,distribution}, reading_log","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"9780439023528"}},{"name":"search","description":"search books: q OR fielded (title/author/subject/publisher/place/person/isbn/language); rich cards (ratings/reading-log/ebook_access/IA); sort=new|old|rating|want_to_read|editions; pagination","required_params":[],"optional_params":["q","query","title","author","subject","publisher","place","person","isbn","language","sort","limit","per_page","page"],"params":[{"name":"q","type":"string","required":false,"description":"Free-text search. Supply `q` OR at least one fielded param (title/author/subject/publisher/place/person/isbn/language).","on_invalid":"reject","example":"the hunger games","aliases":["query"]},{"name":"title","type":"string","required":false,"description":"Fielded search filter — match on title (OpenLibrary search). Combinable with other fielded params.","on_invalid":"reject","example":"lord of the rings"},{"name":"author","type":"string","required":false,"description":"Fielded search filter — match on author (OpenLibrary search). Combinable with other fielded params.","on_invalid":"reject","example":"tolkien"},{"name":"subject","type":"string","required":false,"description":"Fielded search filter — match on subject (OpenLibrary search). Combinable with other fielded params.","on_invalid":"reject","example":"fantasy"},{"name":"publisher","type":"string","required":false,"description":"Fielded search filter — match on publisher (OpenLibrary search). Combinable with other fielded params.","on_invalid":"reject","example":"penguin"},{"name":"place","type":"string","required":false,"description":"Fielded search filter — match on place (OpenLibrary search). Combinable with other fielded params.","on_invalid":"reject","example":"london"},{"name":"person","type":"string","required":false,"description":"Fielded search filter — match on person (OpenLibrary search). Combinable with other fielded params.","on_invalid":"reject","example":"napoleon"},{"name":"isbn","type":"string","required":false,"description":"Fielded search filter — match on isbn (OpenLibrary search). Combinable with other fielded params.","on_invalid":"reject","example":"9780439023528"},{"name":"language","type":"string","required":false,"description":"Fielded search filter — match on language (OpenLibrary search). Combinable with other fielded params.","on_invalid":"reject","example":"eng"},{"name":"sort","type":"enum","required":false,"description":"Result ordering (OpenLibrary sort). Common keys shown; other OpenLibrary sort keys also pass through.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"Newest"},{"value":"old","label":"Oldest"},{"value":"rating","label":"Highest rated"},{"value":"want_to_read","label":"Most wanted-to-read"},{"value":"editions","label":"Most editions"}],"example":"rating"},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 20); out-of-range values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped to 1-1000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"results[] (title, authors[], olid, first_publish_year, ratings, ebook_access, ia ids, cover), numFound, page","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"the hunger games"}},{"name":"author","description":"author by OLID (OL..A) → bio/photo/dates/alternate-names/remote-ids(goodreads/wikidata/viaf/gutenberg)/links + include_works; or query/name → best-match-ranked author list","required_params":[],"optional_params":["id","query","name","q","include_works","works_limit","per_page","limit"],"params":[{"name":"id","type":"string","required":false,"description":"OpenLibrary author id (OL..A) for a profile. Supply `id` OR a query (`query`/`name`/`q`) for author search.","on_invalid":"reject","example":"OL26320A"},{"name":"query","type":"string","required":false,"description":"Author search text → best-match-ranked list. Supply this OR `id`.","on_invalid":"reject","example":"j r r tolkien","aliases":["name","q"]},{"name":"include_works","type":"boolean","required":false,"description":"Profile mode only: also return the author's top works.","on_invalid":"ignore","default":false,"example":true},{"name":"works_limit","type":"integer","required":false,"description":"Max works when include_works=true (1-50).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-50, default 10); out-of-range values are clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"profile: author{name,bio,photo,birth/death,alternate_names,remote_ids,top_works[]}; OR search: results[] (name, olid, work_count)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"j r r tolkien"}},{"name":"author_works","description":"full paginated bibliography of an author (OL..A): every work with cover, first-publish year and subjects; page/limit pagination over the author's complete catalog","required_params":["id"],"optional_params":["olid","limit","per_page","page"],"params":[{"name":"id","type":"string","required":true,"description":"OpenLibrary author id (OL..A). Get one from the `author` action.","on_invalid":"reject","example":"OL26320A","aliases":["olid"]},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 50); out-of-range values are clamped.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped to 1-1000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"results[] (title, olid, covers, first_publish_date, subjects), total, page, has_next","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"OL26320A","limit":5}},{"name":"subjects","description":"browse a subject / genre / theme → ranked work cards PLUS facets (top authors, publishers, related subjects, people, places, time-periods) and work_count/ebook_count; optional ebooks-only and published_in year-range filters; page/limit pagination","required_params":["subject"],"optional_params":["name","q","genre","ebooks","published_in","sort","limit","per_page","page"],"params":[{"name":"subject","type":"string","required":true,"description":"Subject / genre / theme to browse (free text; spaces are fine, e.g. 'science fiction', 'historical fiction', 'love', 'cooking').","on_invalid":"reject","example":"fantasy","aliases":["name","q","genre"]},{"name":"ebooks","type":"boolean","required":false,"description":"Only return works that have a readable/borrowable ebook.","on_invalid":"ignore","default":false,"example":true},{"name":"published_in","type":"string","required":false,"description":"Restrict the subject browse to a publish-year range, e.g. 2000-2010.","on_invalid":"reject","example":"2000-2010"},{"name":"sort","type":"enum","required":false,"description":"Ordering of the subject's works. Known keys shown; others pass through.","on_invalid":"ignore","allowed_values":[{"value":"editions","label":"Most editions (popularity proxy)"},{"value":"new","label":"Newest first"},{"value":"old","label":"Oldest first"}],"example":"editions"},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 24); out-of-range values are clamped.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped to 1-1000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"subject{name,work_count,ebook_count,related_subjects[],authors[],publishers[],people[],places[],times[]}, results[] (work cards), total, page, has_next","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"subject":"fantasy","limit":5}},{"name":"trending","description":"most popular / trending books for a time window (now|daily|weekly|monthly|yearly) → ranked work cards (title, authors, cover, year, ebook access); page/limit pagination","required_params":[],"optional_params":["period","range","limit","per_page","page"],"params":[{"name":"period","type":"enum","required":false,"description":"Trending window. One of now|daily|weekly|monthly|yearly.","on_invalid":"ignore","allowed_values":[{"value":"now","label":"Right now"},{"value":"daily","label":"Today (default)"},{"value":"weekly","label":"This week"},{"value":"monthly","label":"This month"},{"value":"yearly","label":"This year"}],"default":"daily","example":"weekly","aliases":["range"]},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 24); out-of-range values are clamped.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped to 1-1000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"results[] (title, authors[], olid, first_publish_year, covers, ebook_access), period, page","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"period":"daily","limit":5}},{"name":"editions","description":"every printing / edition of a book (give a work OLID, an edition OLID, or any ISBN) → each edition's ISBN-10/13, publisher, format, publish date/place, page count, language and cover; page/limit pagination","required_params":["id"],"optional_params":["olid","isbn","limit","per_page","page"],"params":[{"name":"id","type":"string","required":true,"description":"A work OLID (OL..W), an edition OLID (OL..M), or any ISBN of the book — all resolve to the work whose editions are listed.","on_invalid":"reject","example":"OL5735363W","aliases":["olid","isbn"]},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 50); out-of-range values are clamped.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped to 1-1000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"results[] (olid, title, isbn_13/10, publishers, publish_date, physical_format, number_of_pages, languages, covers), work_olid, total, page, has_next","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"OL5735363W","limit":5}},{"name":"ebook","description":"public-domain full-text (Project Gutenberg): query OR id=Gutenberg-id OR ids=batch; filters languages/topic/sort; returns formats{epub/txt/html/kindle/cover}+download_url+read_url; gutenberg.org OPDS fallback when gutendex is down","required_params":[],"optional_params":["query","search","q","id","gutenberg_id","ids","languages","topic","sort","mime_type","author_year_start","author_year_end","copyright","limit","per_page","page"],"params":[{"name":"query","type":"string","required":false,"description":"Full-text search of Project Gutenberg. Supply `query` OR `id` (Gutenberg id) OR `ids` (batch) OR a filter.","on_invalid":"reject","example":"pride and prejudice","aliases":["search","q"]},{"name":"id","type":"string","required":false,"description":"A single Project Gutenberg ebook id (digits).","on_invalid":"reject","example":"1342","aliases":["gutenberg_id"]},{"name":"ids","type":"array","required":false,"description":"Batch of Gutenberg ids (list or comma-separated string).","on_invalid":"reject","example":"1342,84,2701"},{"name":"languages","type":"string","required":false,"description":"Gutendex language filter — comma-separated ISO 639-1 codes (e.g. en, fr).","on_invalid":"reject","example":"en"},{"name":"topic","type":"string","required":false,"description":"Gutendex topic filter (matches bookshelf or subject).","on_invalid":"reject","example":"children"},{"name":"sort","type":"enum","required":false,"description":"Gutendex ordering. Known keys shown; passed through if Gutendex adds more.","on_invalid":"ignore","allowed_values":[{"value":"popular","label":"Most downloaded (default)"},{"value":"ascending","label":"Gutenberg id ascending"},{"value":"descending","label":"Gutenberg id descending"}],"example":"popular"},{"name":"mime_type","type":"string","required":false,"description":"Gutendex mime_type filter (e.g. application/epub+zip, text/plain).","on_invalid":"reject","example":"application/epub+zip"},{"name":"author_year_start","type":"integer","required":false,"description":"Gutendex filter: author alive on/after this year.","on_invalid":"ignore","example":1800},{"name":"author_year_end","type":"integer","required":false,"description":"Gutendex filter: author alive on/before this year.","on_invalid":"ignore","example":1900},{"name":"copyright","type":"string","required":false,"description":"Gutendex copyright filter: true|false|null (comma-separated to combine).","on_invalid":"reject","example":"false"},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-32, default 32); out-of-range values are clamped.","on_invalid":"ignore","default":32,"example":32,"minimum":1,"maximum":32,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (clamped to 1-1000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"single: ebook{title,authors,languages,formats{epub/txt/html/kindle/cover},download_url,read_url}; OR list: results[], count, next","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1342"}}]},{"name":"boulanger","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Boulanger API — France's electronics & appliance retailer: search, prices with éco-participation, marketplace offers, delivery & store pickup by postal code, store stock and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/boulanger/v1","spec_available":true,"actions":[{"name":"search","description":"Search boulanger.com by keyword, or list a category, optionally narrowed by brand, seller (Boulanger or a marketplace seller), price range, condition (new / refurbished), minimum star rating and presence in one store, in one of the site's four sort orders. 40 products per page with price, struck-through price and its type, discount, éco-participation and private-copy levy included in the price, seller and seller type, condition, availability, rating, review count, energy class, key points and promotions; plus the source's own facet values (brands, sellers, stores, conditions) with counts. Needs `query` OR `category`.","required_params":[],"optional_params":["query","category","brand","seller","min_price","max_price","condition","min_rating","store","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Search words, as typed in the site's search box.","on_invalid":"reject","example":"television","aliases":["q","keyword","tr"]},{"name":"category","type":"string","required":false,"description":"A category slug — the part after /c/ in a boulanger.com category URL, or a product's `category_path[].slug` (e.g. `iphone-18`). Use instead of `query` (not both).","on_invalid":"reject","example":"smartphone-telephone-portable","aliases":["category_slug"]},{"name":"brand","type":"string","required":false,"description":"Brand name as the site shows it (case-insensitive) or a `facets.brands[].value`. An unknown brand answers 0 results.","on_invalid":"reject","example":"Samsung","aliases":["marque"]},{"name":"seller","type":"string","required":false,"description":"Seller name: `Boulanger` for Boulanger's own offers, or a marketplace seller's name (e.g. `EasyLounge`) / a `facets.sellers[].value`.","on_invalid":"reject","example":"Boulanger","aliases":["merchant","vendeur"]},{"name":"min_price","type":"number","required":false,"description":"Minimum price in EUR (VAT included). Sent together with max_price as the site's own price range.","on_invalid":"reject","example":200,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum price in EUR (VAT included).","on_invalid":"reject","example":400,"minimum":0,"aliases":["price_max"]},{"name":"condition","type":"enum","required":false,"description":"Product condition.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Neuf — new"},{"value":"refurbished","label":"Reconditionné — refurbished"}],"aliases":["etat"]},{"name":"min_rating","type":"integer","required":false,"description":"Minimum average star rating: 3, 4 or 5 (the site's 'N étoiles et plus').","on_invalid":"reject","example":4,"minimum":3,"maximum":5,"aliases":["rating"]},{"name":"store","type":"string","required":false,"description":"Only products present in this Boulanger store (code F + 3 digits, from `facets.stores[].value` or `delivery` `stores[].site_id`).","on_invalid":"reject","example":"F007","aliases":["store_code","magasin"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own four).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Pertinence (default)"},{"value":"price_asc","label":"Prix croissant — price low to high"},{"value":"price_desc","label":"Prix décroissant — price high to low"},{"value":"rating","label":"Meilleure note — best rated"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 40 products per page. A page past the last one answers an empty list.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"total, page, last_page, has_more, results[]{product_id, offer_id, url, title, brand, image, price, price_excl_vat, currency=EUR, strikeout_price, strikeout_label, discount_pct_printed, discount_pct, eco_participation, private_copy_levy, seller, seller_type, is_marketplace, condition, available, rating, rating_exact, review_count, energy_class, key_points[], flaps[], promotions[], category_codes[], price_witness} + facets{brands[], sellers[], stores[], conditions[], min_rating[]}{value, label, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"television","brand":"Samsung"}},{"name":"product","description":"One boulanger.com product, complete: title, brand, EAN, manufacturer reference, release date, rating and review count, category path, key points, description, pictograms, images, energy label, full spec sheet, promotions with their dates, and EVERY offer — Boulanger's own and each marketplace seller's — with price (VAT included), struck-through price and its type (Prix de référence / Ancien prix), discount %, éco-participation and private-copy levy included in the price, other price components, availability, sale channels (web / store), legal warranty, trade-in eligibility, instalment plan and the supplier's legal identity.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Boulanger product number: the number in a product URL boulanger.com/ref/<product_id> and the `product_id` of a search row (7 digits for Boulanger items, 10 for marketplace-only items). Provide product_id OR url.","on_invalid":"reject","example":"1243116","aliases":["id","ref","sku","item_id"]},{"name":"url","type":"string","required":false,"description":"A boulanger.com product URL (…/ref/<number>); alternative to product_id.","on_invalid":"reject","example":"https://www.boulanger.com/ref/1243116","aliases":["product_url"]}],"returns":"product{product_id, url, pim_id, sku_id, title, brand, brand_code, eans[], manufacturer_reference, national_release_date, rating, review_count, price, currency, strikeout_price, strikeout_label, discount_pct, eco_participation, private_copy_levy, seller, is_marketplace, available, legal_warranty_months, offer_count, offers[]{offer_id, rank, seller, seller_id, seller_slug, is_boulanger, condition, price, price_excl_vat, strikeout_price, strikeout_type, strikeout_label, discount_pct, eco_participation, private_copy_levy, price_components[], available, buyable_channels[], legal_warranty_months, buyback_eligible, installment_plan, supplier}, promotions[]{code, type_code, label, flap_text, starts_at, ends_at}, category_path[]{name, slug, url}, key_points[], advantage, description, pictograms[], images[], energy_label_image, supplier, specs[]{group, specs[]{label, value}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"1243116"}},{"name":"delivery","description":"Delivery and pickup options of one offer for a French postal code, as the product page computes them: home delivery (standard / express / with installation), store pickup (Retrait en magasin, with the store), Drive, parcel pickup points (Colissimo, Mondial Relay, Chronopost) — each with carrier, earliest date window, price, price before discount and Club prices — plus the nearest stores and pickup points with distance, and what cannot be delivered there.","required_params":[],"optional_params":["product_id","url","offer_id","postal_code"],"params":[{"name":"product_id","type":"string","required":false,"description":"Boulanger product number: the number in a product URL boulanger.com/ref/<product_id> and the `product_id` of a search row (7 digits for Boulanger items, 10 for marketplace-only items). Provide product_id OR url.","on_invalid":"reject","example":"1243116","aliases":["id","ref","sku","item_id"]},{"name":"url","type":"string","required":false,"description":"A boulanger.com product URL (…/ref/<number>); alternative to product_id.","on_invalid":"reject","example":"https://www.boulanger.com/ref/1243116","aliases":["product_url"]},{"name":"offer_id","type":"string","required":false,"description":"Optional: one offer of the product (an `offers[].offer_id` of `product`, e.g. a marketplace seller's). Default: the offer the site ranks first.","on_invalid":"reject","example":"7e5fd901-a4dd-4062-990e-7487642cbaaa"},{"name":"postal_code","type":"string","required":false,"description":"French postal code (5 digits) the delivery / stock is computed for. Default 75001 (Paris), the site's own default.","on_invalid":"reject","default":"75001","example":"69002","aliases":["zip","zipcode","code_postal"]}],"returns":"product_id, offer_id, offer_price, postal_code, options[]{mode_code, carrier, method, method_label, service_label, seller_id, earliest_from, earliest_to, slot_count, price, price_before_discount, club_prices[], store, pickup_point}, stores[]{site_id, name, address{distance_km…}}, pickup_points[], not_available[], theoretical_shipping_prices[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"1243116","postal_code":"75001"}},{"name":"store_stock","description":"The Boulanger stores the site lists as still holding units of an offer (its 'derniers articles en magasin' list), nearest to a postal code first: store, site code, quantity, address and distance.","required_params":[],"optional_params":["product_id","url","offer_id","postal_code"],"params":[{"name":"product_id","type":"string","required":false,"description":"Boulanger product number: the number in a product URL boulanger.com/ref/<product_id> and the `product_id` of a search row (7 digits for Boulanger items, 10 for marketplace-only items). Provide product_id OR url.","on_invalid":"reject","example":"1243116","aliases":["id","ref","sku","item_id"]},{"name":"url","type":"string","required":false,"description":"A boulanger.com product URL (…/ref/<number>); alternative to product_id.","on_invalid":"reject","example":"https://www.boulanger.com/ref/1243116","aliases":["product_url"]},{"name":"offer_id","type":"string","required":false,"description":"Optional: one offer of the product (an `offers[].offer_id` of `product`, e.g. a marketplace seller's). Default: the offer the site ranks first.","on_invalid":"reject","example":"7e5fd901-a4dd-4062-990e-7487642cbaaa"},{"name":"postal_code","type":"string","required":false,"description":"French postal code (5 digits) the delivery / stock is computed for. Default 75001 (Paris), the site's own default.","on_invalid":"reject","default":"75001","example":"69002","aliases":["zip","zipcode","code_postal"]}],"returns":"product_id, offer_id, postal_code, count, total_quantity, stores[]{site_id, store, quantity, address{street, postal_code, city, department, region, lat, lon}, distance_km}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"8011306"}},{"name":"reviews","description":"Customer reviews of one product: star rating, title, full text, reviewer's public nickname, post time, experience date, helpful votes, photos and seller responses, with the source's review total and average. Up to 50 per call, paged with `page`.","required_params":[],"optional_params":["product_id","url","sort","page","limit"],"params":[{"name":"product_id","type":"string","required":false,"description":"Boulanger product number: the number in a product URL boulanger.com/ref/<product_id> and the `product_id` of a search row (7 digits for Boulanger items, 10 for marketplace-only items). Provide product_id OR url.","on_invalid":"reject","example":"1243116","aliases":["id","ref","sku","item_id"]},{"name":"url","type":"string","required":false,"description":"A boulanger.com product URL (…/ref/<number>); alternative to product_id.","on_invalid":"reject","example":"https://www.boulanger.com/ref/1243116","aliases":["product_url"]},{"name":"sort","type":"enum","required":false,"description":"Review order (the site's own).","on_invalid":"reject","allowed_values":[{"value":"newest","label":"most recent first (default)"},{"value":"rating_desc","label":"best rating first"},{"value":"rating_asc","label":"worst rating first"},{"value":"helpful","label":"most helpful first"},{"value":"with_photos","label":"reviews with photos first"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Page of `limit` reviews.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50}],"returns":"total, average, page, count, reviews[]{review_id, rating, title, text, reviewer, posted_at, experience_date, review_type, helpful_yes, helpful_no, photos[], seller_responses[], reviewed_product_id}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"1243116"}}]},{"name":"boyner","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Boyner API scraper — search & product detail on Boyner (boyner.com.tr), Turkey's department-store marketplace (fashion, shoes, sneakers); prices in TRY, seller + coupons + sizes. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/boyner/v1","spec_available":true,"actions":[{"name":"search","description":"Search Boyner by keyword (`query`), paginated (`page`, 24/page). Every card carries product_id, title, brand, price (current + original + discount%), seller (merchantName — filter 'BOYNER' for Boyner-sold), campaigns/coupons (Hopi, 'Sepette %N İndirim'), image, url, category, rating, stock.","required_params":["query"],"optional_params":["page","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword (Turkish keywords work best, e.g. 'erkek spor ayakkabı', 'nike sneaker', a brand name).","on_invalid":"reject","example":"erkek spor ayakkabı","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page — 1-based (1, 2, 3…), 24 products per page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"aliases":["sayfa","pg"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-12, default 6).","on_invalid":"ignore","default":6,"minimum":1,"maximum":12}],"returns":"products[]{product_id, title, brand, url, category, category_id, price, original_price, discount_rate, campaign, currency=TRY, seller, merchant_id, campaigns[], badges[], special_badges[], rating, review_count, stock, in_stock, color, gender, variant_id, barcodes[], image, images[], is_free_cargo}; count, total, total_pages, page. HONEST LIMIT: Boyner REMOVED the seller NAME from listing cards on 2026-08-22 — `seller` is null on search and `merchant_id` carries the seller ('1' = Boyner's own stock); the name is on product/detail. A query the source itself counts as 0 returns NOT_FOUND, never an empty 200, and a non-zero source total with no parsable card returns PARSE_ERROR rather than a silent empty list.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"erkek spor ayakkabı"}},{"name":"product/detail","description":"Full Boyner product by `url` OR `product_id`: title, brand, price (current + original + discount%), campaign headline + coupons (Hopi etc.), seller/merchantName + other offers, SIZES (Beden — EU sizes with per-size stock + barcode), all images, rating, review_count, stock, gtin/barcode, category, breadcrumbs, attributes, description and sample reviews. Parsed from Boyner's own getProductDetail JSON.","required_params":[],"optional_params":["url","product_id","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"Full Boyner product URL (…-p-<id>). Provide url OR product_id.","on_invalid":"reject","example":"https://www.boyner.com.tr/tommy-hilfiger-lacivert-erkek-sneaker-th-hi-vulc-core-low-lth-ii-ess-p-15593795","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"Boyner product id — the digits after '-p-' in the product URL. Provide product_id OR url.","on_invalid":"reject","example":"15593795","aliases":["id"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-12, default 6).","on_invalid":"ignore","default":6,"minimum":1,"maximum":12}],"returns":"product{product_id, title, brand, brand_id, url, category, category_id, breadcrumbs[], price, original_price, discount_rate, currency=TRY, campaign (str|null, e.g. '500 TL İndirim'), campaign_type, campaigns[]{id, title, content, url, start, end}, coupons[], seller, merchant_id, merchant_rating, is_boyner_product, other_merchants[]{merchant_id, name, rating, price, original_price, shipping_cost, has_free_cargo, url, delivery}, in_stock, stock, stock_variants_total, stock_text, size_title, sizes[]{value, variant_id, barcode, in_stock, quantity, is_selected}, rating, review_count, favorite_count, gtin, images[], attributes[]{name, value}, description, badges[], delivery}. HONEST LIMITS (measured 2026-08-22): Boyner's product SSR payload no longer carries review bodies (they are fetched client-side), so `sample_reviews` is null — the source does not publish them on this route. It also publishes no product-level stock total, so `stock` is null and the arithmetic sum of the per-size counts is published separately as `stock_variants_total`. `product_type`, `is_hopi_usable` and `is_outlet` are likewise no longer published.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.boyner.com.tr/tommy-hilfiger-lacivert-erkek-sneaker-th-hi-vulc-core-low-lth-ii-ess-p-15593795"}}]},{"name":"brave","category":{"id":"search-seo","title":"Search & SEO"},"title":"Brave Search API — web results, news, images, videos, autocomplete, infobox, discussions, FAQ, local places and related searches from search.brave.com, by country","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/brave/v1","spec_available":true,"actions":[{"name":"search","description":"Brave web search results for a query, as a searcher in the chosen country sees them. Each organic result: position, title, URL, display path, domain, site name, favicon, snippet, age and ISO date, language, thumbnail, sitelinks and Brave's rich data for that result (article author/publisher, product with offers, rating, movie, recipe, Q&A, FAQ, video, book, software, review). Plus every block on the page: top news, videos, discussions (forum / Reddit threads with votes and answers), FAQ, infobox (knowledge panel with attributes, images and profiles), local places (address, phone, rating, hours, coordinates), recipes, rich answers (e.g. stock quotes), ads and related searches. About 20 results per page, up to 10 pages. Operators (\"phrase\", -word, site:, filetype:) work.","required_params":["q"],"optional_params":["country","page","safesearch","freshness","goggles"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, exactly as typed into Brave. Operators work: \"exact phrase\", -exclude, site:example.com, filetype:pdf, OR. 1-400 characters.","on_invalid":"reject","example":"python asyncio tutorial","aliases":["query","keyword","search","term"]},{"name":"country","type":"enum","required":false,"description":"Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All regions (worldwide)"},{"value":"us","label":"United States"},{"value":"gb","label":"United Kingdom"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"nz","label":"New Zealand"},{"value":"in","label":"India"},{"value":"de","label":"Germany"},{"value":"at","label":"Austria"},{"value":"ch","label":"Switzerland"},{"value":"fr","label":"France"},{"value":"be","label":"Belgium"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"pt","label":"Portugal"},{"value":"it","label":"Italy"},{"value":"dk","label":"Denmark"},{"value":"fi","label":"Finland"},{"value":"no","label":"Norway"},{"value":"se","label":"Sweden"},{"value":"pl","label":"Poland"},{"value":"tr","label":"Turkey"},{"value":"ru","label":"Russia"},{"value":"jp","label":"Japan"},{"value":"kr","label":"South Korea"},{"value":"tw","label":"Taiwan"},{"value":"hk","label":"Hong Kong"},{"value":"id","label":"Indonesia"},{"value":"my","label":"Malaysia"},{"value":"ph","label":"Philippines"},{"value":"sa","label":"Saudi Arabia"},{"value":"za","label":"South Africa"},{"value":"br","label":"Brazil"},{"value":"mx","label":"Mexico"},{"value":"ar","label":"Argentina"},{"value":"cl","label":"Chile"}],"default":"us","example":"us","value_pattern":"(?i)uk","aliases":["gl","cc","region"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-10); about 20 results each. A page past Brave's last page returns 0 results with `has_more: false`.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10,"aliases":["p","page_number"]},{"name":"safesearch","type":"enum","required":false,"description":"Adult-content filter. Brave applies it mainly to images and videos; on web results `strict` removes a few explicit sites, `off` and `moderate` return the same web list.","on_invalid":"reject","allowed_values":[{"value":"off","label":"Off"},{"value":"moderate","label":"Moderate (Brave's default)"},{"value":"strict","label":"Strict"}],"default":"moderate","example":"moderate","aliases":["safe","safe_search"]},{"name":"freshness","type":"enum","required":false,"description":"Only results published in this window: day, week, month, year — or a custom range `YYYY-MM-DDtoYYYY-MM-DD` (e.g. 2024-01-01to2024-01-31).","on_invalid":"reject","allowed_values":[{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"},{"value":"year","label":"Past year"}],"example":"week","value_pattern":"(?i)\\d{4}-\\d{2}-\\d{2}to\\d{4}-\\d{2}-\\d{2}|pd|pw|pm|py|24h|7d|30d|365d|all|any","aliases":["time","tf","time_range","tbs"]},{"name":"goggles","type":"string","required":false,"description":"Brave Goggle to re-rank results with: the URL of a public .goggle file (Brave's custom ranking rules, e.g. tech blogs only, or a list of preferred domains).","on_invalid":"reject","example":"https://raw.githubusercontent.com/brave/goggles-quickstart/main/goggles/hacker_news.goggle","aliases":["goggles_id","goggle"]}],"returns":"search_information{query, corrected_query, query_was_corrected, more_results_available, no_results, page, results_on_page, search_operators} + organic_results[]{position, title, url, displayed_url, domain, site_name, favicon, snippet, age, date, date_is_estimate, language, type, is_live, thumbnail, sitelinks[]{title, url}, extra_snippets[], article, product, rating, movie, recipe, qa, faq, video, book, software, review, cluster[]} + news_results[] + video_results[] + discussions[]{title, url, forum, votes, answers, top_comment, date} + faq[]{question, answer, url} + infobox{title, description, category, long_description, url, website, attributes[]{label, value, links[]}, images[], profiles[]} + locations[]{title, address, phone, rating, review_count, opening_hours[], latitude, longitude, ...} + recipes[] + rich_answers[] + ads[] + related_searches[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"python asyncio tutorial"}},{"name":"news","description":"Brave News results for a query: title, URL, source, domain, snippet, age and date, thumbnail, live/breaking flags. The first page carries up to 50 articles, later pages about 20.","required_params":["q"],"optional_params":["country","page","safesearch","freshness"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, exactly as typed into Brave. Operators work: \"exact phrase\", -exclude, site:example.com, filetype:pdf, OR. 1-400 characters.","on_invalid":"reject","example":"python asyncio tutorial","aliases":["query","keyword","search","term"]},{"name":"country","type":"enum","required":false,"description":"Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All regions (worldwide)"},{"value":"us","label":"United States"},{"value":"gb","label":"United Kingdom"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"nz","label":"New Zealand"},{"value":"in","label":"India"},{"value":"de","label":"Germany"},{"value":"at","label":"Austria"},{"value":"ch","label":"Switzerland"},{"value":"fr","label":"France"},{"value":"be","label":"Belgium"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"pt","label":"Portugal"},{"value":"it","label":"Italy"},{"value":"dk","label":"Denmark"},{"value":"fi","label":"Finland"},{"value":"no","label":"Norway"},{"value":"se","label":"Sweden"},{"value":"pl","label":"Poland"},{"value":"tr","label":"Turkey"},{"value":"ru","label":"Russia"},{"value":"jp","label":"Japan"},{"value":"kr","label":"South Korea"},{"value":"tw","label":"Taiwan"},{"value":"hk","label":"Hong Kong"},{"value":"id","label":"Indonesia"},{"value":"my","label":"Malaysia"},{"value":"ph","label":"Philippines"},{"value":"sa","label":"Saudi Arabia"},{"value":"za","label":"South Africa"},{"value":"br","label":"Brazil"},{"value":"mx","label":"Mexico"},{"value":"ar","label":"Argentina"},{"value":"cl","label":"Chile"}],"default":"us","example":"us","value_pattern":"(?i)uk","aliases":["gl","cc","region"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-5); the first page has up to 50 articles. A page past Brave's last page returns 0 results with `has_more: false`.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5,"aliases":["p","page_number"]},{"name":"safesearch","type":"enum","required":false,"description":"Adult-content filter. Brave applies it mainly to images and videos; on web results `strict` removes a few explicit sites, `off` and `moderate` return the same web list.","on_invalid":"reject","allowed_values":[{"value":"off","label":"Off"},{"value":"moderate","label":"Moderate (Brave's default)"},{"value":"strict","label":"Strict"}],"default":"moderate","example":"moderate","aliases":["safe","safe_search"]},{"name":"freshness","type":"enum","required":false,"description":"Only results published in this window: day, week, month, year — or a custom range `YYYY-MM-DDtoYYYY-MM-DD` (e.g. 2024-01-01to2024-01-31).","on_invalid":"reject","allowed_values":[{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"},{"value":"year","label":"Past year"}],"example":"week","value_pattern":"(?i)\\d{4}-\\d{2}-\\d{2}to\\d{4}-\\d{2}-\\d{2}|pd|pw|pm|py|24h|7d|30d|365d|all|any","aliases":["time","tf","time_range","tbs"]}],"returns":"search_information{query, page, results_on_page, no_results, more_results_available} + news_results[]{position, title, url, source, domain, favicon, snippet, age, date, date_is_estimate, is_live, breaking, thumbnail}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"climate change"}},{"name":"images","description":"Brave image search: up to about 200 images per call with the full-size image URL, its width and height, a thumbnail, the page it appears on, the source site and a title. `safesearch` filters adult images (default moderate).","required_params":["q"],"optional_params":["country","safesearch"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, exactly as typed into Brave. Operators work: \"exact phrase\", -exclude, site:example.com, filetype:pdf, OR. 1-400 characters.","on_invalid":"reject","example":"python asyncio tutorial","aliases":["query","keyword","search","term"]},{"name":"country","type":"enum","required":false,"description":"Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All regions (worldwide)"},{"value":"us","label":"United States"},{"value":"gb","label":"United Kingdom"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"nz","label":"New Zealand"},{"value":"in","label":"India"},{"value":"de","label":"Germany"},{"value":"at","label":"Austria"},{"value":"ch","label":"Switzerland"},{"value":"fr","label":"France"},{"value":"be","label":"Belgium"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"pt","label":"Portugal"},{"value":"it","label":"Italy"},{"value":"dk","label":"Denmark"},{"value":"fi","label":"Finland"},{"value":"no","label":"Norway"},{"value":"se","label":"Sweden"},{"value":"pl","label":"Poland"},{"value":"tr","label":"Turkey"},{"value":"ru","label":"Russia"},{"value":"jp","label":"Japan"},{"value":"kr","label":"South Korea"},{"value":"tw","label":"Taiwan"},{"value":"hk","label":"Hong Kong"},{"value":"id","label":"Indonesia"},{"value":"my","label":"Malaysia"},{"value":"ph","label":"Philippines"},{"value":"sa","label":"Saudi Arabia"},{"value":"za","label":"South Africa"},{"value":"br","label":"Brazil"},{"value":"mx","label":"Mexico"},{"value":"ar","label":"Argentina"},{"value":"cl","label":"Chile"}],"default":"us","example":"us","value_pattern":"(?i)uk","aliases":["gl","cc","region"]},{"name":"safesearch","type":"enum","required":false,"description":"Adult-content filter. Brave applies it mainly to images and videos; on web results `strict` removes a few explicit sites, `off` and `moderate` return the same web list.","on_invalid":"reject","allowed_values":[{"value":"off","label":"Off"},{"value":"moderate","label":"Moderate (Brave's default)"},{"value":"strict","label":"Strict"}],"default":"moderate","example":"moderate","aliases":["safe","safe_search"]}],"returns":"search_information{query, results_on_page, no_results} + images[]{position, title, page_url, source, image_url, width, height, thumbnail, thumbnail_width, thumbnail_height, confidence, indexed_at}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"red panda"}},{"name":"videos","description":"Brave video search: title, URL, duration (and in seconds), views where published, creator, publisher (YouTube, Vimeo, ...), channel name and URL, tags, date and thumbnail. Up to about 50 videos on the first page.","required_params":["q"],"optional_params":["country","page","safesearch","freshness"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, exactly as typed into Brave. Operators work: \"exact phrase\", -exclude, site:example.com, filetype:pdf, OR. 1-400 characters.","on_invalid":"reject","example":"python asyncio tutorial","aliases":["query","keyword","search","term"]},{"name":"country","type":"enum","required":false,"description":"Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All regions (worldwide)"},{"value":"us","label":"United States"},{"value":"gb","label":"United Kingdom"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"nz","label":"New Zealand"},{"value":"in","label":"India"},{"value":"de","label":"Germany"},{"value":"at","label":"Austria"},{"value":"ch","label":"Switzerland"},{"value":"fr","label":"France"},{"value":"be","label":"Belgium"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"pt","label":"Portugal"},{"value":"it","label":"Italy"},{"value":"dk","label":"Denmark"},{"value":"fi","label":"Finland"},{"value":"no","label":"Norway"},{"value":"se","label":"Sweden"},{"value":"pl","label":"Poland"},{"value":"tr","label":"Turkey"},{"value":"ru","label":"Russia"},{"value":"jp","label":"Japan"},{"value":"kr","label":"South Korea"},{"value":"tw","label":"Taiwan"},{"value":"hk","label":"Hong Kong"},{"value":"id","label":"Indonesia"},{"value":"my","label":"Malaysia"},{"value":"ph","label":"Philippines"},{"value":"sa","label":"Saudi Arabia"},{"value":"za","label":"South Africa"},{"value":"br","label":"Brazil"},{"value":"mx","label":"Mexico"},{"value":"ar","label":"Argentina"},{"value":"cl","label":"Chile"}],"default":"us","example":"us","value_pattern":"(?i)uk","aliases":["gl","cc","region"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-5); the first page has up to about 50 videos. A page past Brave's last page returns 0 results with `has_more: false`.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5,"aliases":["p","page_number"]},{"name":"safesearch","type":"enum","required":false,"description":"Adult-content filter. Brave applies it mainly to images and videos; on web results `strict` removes a few explicit sites, `off` and `moderate` return the same web list.","on_invalid":"reject","allowed_values":[{"value":"off","label":"Off"},{"value":"moderate","label":"Moderate (Brave's default)"},{"value":"strict","label":"Strict"}],"default":"moderate","example":"moderate","aliases":["safe","safe_search"]},{"name":"freshness","type":"enum","required":false,"description":"Only results published in this window: day, week, month, year — or a custom range `YYYY-MM-DDtoYYYY-MM-DD` (e.g. 2024-01-01to2024-01-31).","on_invalid":"reject","allowed_values":[{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"},{"value":"year","label":"Past year"}],"example":"week","value_pattern":"(?i)\\d{4}-\\d{2}-\\d{2}to\\d{4}-\\d{2}-\\d{2}|pd|pw|pm|py|24h|7d|30d|365d|all|any","aliases":["time","tf","time_range","tbs"]}],"returns":"search_information{query, page, results_on_page, no_results, more_results_available} + video_results[]{position, title, url, domain, snippet, duration, duration_seconds, views, creator, publisher, channel{name, url}, tags[], age, date, date_is_estimate, thumbnail}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"python tutorial"}},{"name":"suggest","description":"Brave's autocomplete for a partial query: up to about 8 suggestions in the market of the chosen country, including entity suggestions (a person, company or place with a short description and image).","required_params":["q"],"optional_params":["country"],"params":[{"name":"q","type":"string","required":true,"description":"The partial query typed so far (1-200 characters).","on_invalid":"reject","example":"how to","aliases":["query","keyword","prefix"]},{"name":"country","type":"enum","required":false,"description":"Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All regions (worldwide)"},{"value":"us","label":"United States"},{"value":"gb","label":"United Kingdom"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"nz","label":"New Zealand"},{"value":"in","label":"India"},{"value":"de","label":"Germany"},{"value":"at","label":"Austria"},{"value":"ch","label":"Switzerland"},{"value":"fr","label":"France"},{"value":"be","label":"Belgium"},{"value":"nl","label":"Netherlands"},{"value":"es","label":"Spain"},{"value":"pt","label":"Portugal"},{"value":"it","label":"Italy"},{"value":"dk","label":"Denmark"},{"value":"fi","label":"Finland"},{"value":"no","label":"Norway"},{"value":"se","label":"Sweden"},{"value":"pl","label":"Poland"},{"value":"tr","label":"Turkey"},{"value":"ru","label":"Russia"},{"value":"jp","label":"Japan"},{"value":"kr","label":"South Korea"},{"value":"tw","label":"Taiwan"},{"value":"hk","label":"Hong Kong"},{"value":"id","label":"Indonesia"},{"value":"my","label":"Malaysia"},{"value":"ph","label":"Philippines"},{"value":"sa","label":"Saudi Arabia"},{"value":"za","label":"South Africa"},{"value":"br","label":"Brazil"},{"value":"mx","label":"Mexico"},{"value":"ar","label":"Argentina"},{"value":"cl","label":"Chile"}],"default":"us","example":"us","value_pattern":"(?i)uk","aliases":["gl","cc","region"]}],"returns":"query + suggestions[]{position, suggestion, is_entity, type, name, description, category, image}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"how to"}}]},{"name":"bringatrailer","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Bring a Trailer — US collector-car auctions, live and archived","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bringatrailer/v1","spec_available":true,"actions":[{"name":"search","description":"Search Bring a Trailer's CLOSED-auction archive — every lot the site has run, 265,000+ of them, with what each one actually made. Read `outcome` on every row before you read the money: 'sold' means the car changed hands at `sold_price`; 'reserve_not_met' means it did NOT sell and the figure is only the high bid (55,000+ lots of the archive). Every filter is optional. For auctions running right now use `live_auctions` instead.","required_params":[],"optional_params":["query","exclude","outcome","category_id","origin_id","era","country","max_bid","min_year","max_year","closed_within","sort","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the make, model, year, origin, country and VIN Bring a Trailer indexes per lot (e.g. 'porsche 911', '1990 miata', 'air-cooled'). Leave it out to browse everything.","on_invalid":"reject","example":"porsche 911","aliases":["q","keywords","search","term","text","include_s"]},{"name":"exclude","type":"string","required":false,"description":"Free-text terms a lot must NOT match, applied on top of `query` (e.g. query='porsche', exclude='911' drops the 911s).","on_invalid":"reject","example":"911","aliases":["exclude_s","not","without"]},{"name":"outcome","type":"enum","required":false,"description":"Keep only lots that sold, or only lots whose reserve was not met. Left out, you get both and each row says which it was.","on_invalid":"reject","allowed_values":[{"value":"sold","label":"Only lots that actually changed hands"},{"value":"reserve_not_met","label":"Only lots whose reserve was not met — the car did NOT sell at the figure shown; that figure is the high bid"}],"example":"sold","aliases":["state","result","status"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one Bring a Trailer category by id (70 = Motorcycles, 11 = Race Cars, 383 = Boats …). Call the `taxonomies` action for the full list with names. An unknown id is rejected here rather than returning an empty page.","on_invalid":"reject","example":70,"minimum":1,"aliases":["category","cat"]},{"name":"origin_id","type":"integer","required":false,"description":"Restrict to one country of ORIGIN of the vehicle by id (7 = German, 9 = Japanese, 3 = American …) — this is where the car was built, not where it sits. Call `taxonomies` for the list.","on_invalid":"reject","example":7,"minimum":1,"aliases":["origin","make_origin","nationality"]},{"name":"era","type":"enum","required":false,"description":"Restrict to one decade of manufacture, as Bring a Trailer groups them.","on_invalid":"reject","allowed_values":[{"value":"2020","label":"2020s"},{"value":"2010","label":"2010s"},{"value":"2000","label":"2000s"},{"value":"1990","label":"1990s"},{"value":"1980","label":"1980s"},{"value":"1970","label":"1970s"},{"value":"1960","label":"1960s"},{"value":"1950","label":"1950s"},{"value":"1940","label":"1940s"},{"value":"1930","label":"1930s"},{"value":"1920","label":"1920s"},{"value":"1910","label":"1910s"},{"value":"1900","label":"1900s"},{"value":"pre-1900","label":"Before 1900"}],"example":"1990","aliases":["eras","decade"]},{"name":"country","type":"enum","required":false,"description":"Restrict to lots physically located in one country. BaT's own region groups (EU, NA) are NOT accepted by the site and return nothing, so only these country codes are published.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"CA","label":"Canada"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"NL","label":"Netherlands"},{"value":"PT","label":"Portugal"},{"value":"CH","label":"Switzerland"},{"value":"JP","label":"Japan"},{"value":"ZA","label":"South Africa"}],"example":"DE","aliases":["location","country_code","located_in","cc"]},{"name":"max_bid","type":"integer","required":false,"description":"Only lots whose final/current amount is below this figure, in the lot's own currency. Bring a Trailer offers this as a ceiling only; there is no floor.","on_invalid":"reject","example":25000,"minimum":1,"aliases":["maximum_bid","price_max","max_price","budget"]},{"name":"min_year","type":"integer","required":false,"description":"Earliest model year, inclusive.","on_invalid":"reject","example":1990,"minimum":1885,"maximum":2100,"aliases":["minimum_year","year_from","year_min"]},{"name":"max_year","type":"integer","required":false,"description":"Latest model year, inclusive.","on_invalid":"reject","example":1999,"minimum":1885,"maximum":2100,"aliases":["maximum_year","year_to","year_max"]},{"name":"closed_within","type":"enum","required":false,"description":"Only auctions that closed inside this window.","on_invalid":"reject","allowed_values":[{"value":"7d","label":"Auctions closed in the last 7 days"},{"value":"30d","label":"Auctions closed in the last month"},{"value":"1y","label":"Auctions closed in the last year"},{"value":"2y","label":"Auctions closed in the last 2 years"},{"value":"5y","label":"Auctions closed in the last 5 years"}],"example":"30d","aliases":["recency","period","since"]},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"recently_closed","label":"Most recently closed auction first (the site's own default)"},{"value":"oldest_first","label":"Oldest closed auction first — reaches back to BaT's 2014 archive"},{"value":"highest_bid","label":"Highest final amount first, sold and unsold mixed"},{"value":"most_popular","label":"Most-viewed listings first"}],"default":"recently_closed","example":"highest_bid","aliases":["order","order_by","sort_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Bring a Trailer serves at most 10,000 archive lots per query, so page x max_results must stay at or below 10,000 — narrow the query to go deeper. The live catalogue is not paged at all.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 10-60 (Bring a Trailer rejects anything outside that range). On `live_auctions` it only trims the page; the count in `total_available` is always the whole live catalogue.","on_invalid":"reject","default":24,"example":24,"minimum":10,"maximum":60,"aliases":["per_page","limit","count","page_size","size"]}],"returns":"{query, outcome, total_available, page, page_count, currencies, results[]} — each result has listing_id, url, title, excerpt, currency, final_amount, sold_price, outcome, is_sold, closed_at, ends_at, country_code, country, no_reserve, premium, bat_alumni, comment_count, image, price_conflict.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"porsche 911","max_results":12}},{"name":"live_auctions","description":"Every Bring a Trailer auction open for bidding right now — the site publishes the whole live catalogue in one payload, so `total_available` is an exact count, not an estimate. A lot nobody has bid on yet has `current_bid` null and `has_bids` false: BaT prints 0 there, and 0 is not a price. `ends_at` is the site's own absolute closing stamp.","required_params":[],"optional_params":["query","category_id","origin_id","era","country","max_bid","min_year","max_year","no_reserve","ending_within_hours","sort","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the make, model, year, origin, country and VIN Bring a Trailer indexes per lot (e.g. 'porsche 911', '1990 miata', 'air-cooled'). Leave it out to browse everything.","on_invalid":"reject","example":"porsche 911","aliases":["q","keywords","search","term","text","include_s"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one Bring a Trailer category by id (70 = Motorcycles, 11 = Race Cars, 383 = Boats …). Call the `taxonomies` action for the full list with names. An unknown id is rejected here rather than returning an empty page.","on_invalid":"reject","example":70,"minimum":1,"aliases":["category","cat"]},{"name":"origin_id","type":"integer","required":false,"description":"Restrict to one country of ORIGIN of the vehicle by id (7 = German, 9 = Japanese, 3 = American …) — this is where the car was built, not where it sits. Call `taxonomies` for the list.","on_invalid":"reject","example":7,"minimum":1,"aliases":["origin","make_origin","nationality"]},{"name":"era","type":"enum","required":false,"description":"Restrict to one decade of manufacture, as Bring a Trailer groups them.","on_invalid":"reject","allowed_values":[{"value":"2020","label":"2020s"},{"value":"2010","label":"2010s"},{"value":"2000","label":"2000s"},{"value":"1990","label":"1990s"},{"value":"1980","label":"1980s"},{"value":"1970","label":"1970s"},{"value":"1960","label":"1960s"},{"value":"1950","label":"1950s"},{"value":"1940","label":"1940s"},{"value":"1930","label":"1930s"},{"value":"1920","label":"1920s"},{"value":"1910","label":"1910s"},{"value":"1900","label":"1900s"},{"value":"pre-1900","label":"Before 1900"}],"example":"1990","aliases":["eras","decade"]},{"name":"country","type":"enum","required":false,"description":"Restrict to lots physically located in one country. BaT's own region groups (EU, NA) are NOT accepted by the site and return nothing, so only these country codes are published.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"CA","label":"Canada"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"NL","label":"Netherlands"},{"value":"PT","label":"Portugal"},{"value":"CH","label":"Switzerland"},{"value":"JP","label":"Japan"},{"value":"ZA","label":"South Africa"}],"example":"DE","aliases":["location","country_code","located_in","cc"]},{"name":"max_bid","type":"integer","required":false,"description":"Only lots whose final/current amount is below this figure, in the lot's own currency. Bring a Trailer offers this as a ceiling only; there is no floor.","on_invalid":"reject","example":25000,"minimum":1,"aliases":["maximum_bid","price_max","max_price","budget"]},{"name":"min_year","type":"integer","required":false,"description":"Earliest model year, inclusive.","on_invalid":"reject","example":1990,"minimum":1885,"maximum":2100,"aliases":["minimum_year","year_from","year_min"]},{"name":"max_year","type":"integer","required":false,"description":"Latest model year, inclusive.","on_invalid":"reject","example":1999,"minimum":1885,"maximum":2100,"aliases":["maximum_year","year_to","year_max"]},{"name":"no_reserve","type":"boolean","required":false,"description":"true = only no-reserve lots (they always sell). Left out, you get both kinds.","on_invalid":"reject","example":true,"aliases":["noreserve","no_reserve_only"]},{"name":"ending_within_hours","type":"integer","required":false,"description":"Only lots closing inside this many hours, measured against the site's own closing stamp.","on_invalid":"reject","example":24,"minimum":1,"maximum":744,"aliases":["ending_in","ends_within_hours","hours"]},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"Closing soonest first (the site's own default view)"},{"value":"ending_latest","label":"Closing last first"},{"value":"bid_high_first","label":"Highest current bid first; lots with no bid yet come last"},{"value":"bid_low_first","label":"Lowest current bid first; lots with no bid yet come first"},{"value":"newest_listed","label":"Most recently opened auction first"}],"default":"ending_soonest","example":"ending_soonest","aliases":["order","order_by","sort_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Bring a Trailer serves at most 10,000 archive lots per query, so page x max_results must stay at or below 10,000 — narrow the query to go deeper. The live catalogue is not paged at all.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 10-60 (Bring a Trailer rejects anything outside that range). On `live_auctions` it only trims the page; the count in `total_available` is always the whole live catalogue.","on_invalid":"reject","default":24,"example":24,"minimum":10,"maximum":60,"aliases":["per_page","limit","count","page_size","size"]}],"returns":"{query, total_available, page, page_count, currencies, results[]} — each result has listing_id, url, title, year, excerpt, currency, current_bid, has_bids, bid_status, ends_at, seconds_remaining, country, country_code, latitude, longitude, category_ids, era, no_reserve, premium, bat_alumni, image, price_conflict.","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"max_results":12}},{"name":"detail","description":"One Bring a Trailer lot in full, live or closed: the outcome in the site's own words, the amount, the closing stamp, the seller's BaT handle, where the car is, the chassis/VIN, the whole BaT Essentials spec list, the lot number, and the view/watcher/comment counts the lot page publishes. Takes the numeric listing id, the listing slug, or any bringatrailer.com listing URL.","required_params":["listing"],"optional_params":[],"params":[{"name":"listing","type":"string","required":true,"description":"The numeric listing id (as `listing_id` in search results), the listing slug, or a full URL such as https://bringatrailer.com/listing/1991-dodge-stealth-65/","on_invalid":"reject","example":"122896532","value_pattern":"\\d{3,}|[a-z0-9][a-z0-9\\-]{3,}|https?://.*bringatrailer\\.com/.*","aliases":["listing_id","id","item","lot","url","link","slug"]}],"returns":"One lot object — the list-row fields plus seller, seller_url, location, chassis, specs[], seller_type, lot_number, views, watchers, comment_count, description and images.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"listing":"122896532"}},{"name":"market_stats","description":"What a car actually makes on Bring a Trailer. Runs an archive query and returns the site's own sold and unsold amount series collapsed into figures: how many sold, how many missed reserve, the sell-through rate, and the low / median / mean / high of the SOLD lots only. Unsold lots are counted but never mixed into the price figures — their number is a high bid, not a sale. Bring a Trailer caps the series it ships, which `series_capped` reports.","required_params":[],"optional_params":["query","exclude","category_id","origin_id","era","country","min_year","max_year","closed_within"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the make, model, year, origin, country and VIN Bring a Trailer indexes per lot (e.g. 'porsche 911', '1990 miata', 'air-cooled'). Leave it out to browse everything.","on_invalid":"reject","example":"porsche 911","aliases":["q","keywords","search","term","text","include_s"]},{"name":"exclude","type":"string","required":false,"description":"Free-text terms a lot must NOT match, applied on top of `query` (e.g. query='porsche', exclude='911' drops the 911s).","on_invalid":"reject","example":"911","aliases":["exclude_s","not","without"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one Bring a Trailer category by id (70 = Motorcycles, 11 = Race Cars, 383 = Boats …). Call the `taxonomies` action for the full list with names. An unknown id is rejected here rather than returning an empty page.","on_invalid":"reject","example":70,"minimum":1,"aliases":["category","cat"]},{"name":"origin_id","type":"integer","required":false,"description":"Restrict to one country of ORIGIN of the vehicle by id (7 = German, 9 = Japanese, 3 = American …) — this is where the car was built, not where it sits. Call `taxonomies` for the list.","on_invalid":"reject","example":7,"minimum":1,"aliases":["origin","make_origin","nationality"]},{"name":"era","type":"enum","required":false,"description":"Restrict to one decade of manufacture, as Bring a Trailer groups them.","on_invalid":"reject","allowed_values":[{"value":"2020","label":"2020s"},{"value":"2010","label":"2010s"},{"value":"2000","label":"2000s"},{"value":"1990","label":"1990s"},{"value":"1980","label":"1980s"},{"value":"1970","label":"1970s"},{"value":"1960","label":"1960s"},{"value":"1950","label":"1950s"},{"value":"1940","label":"1940s"},{"value":"1930","label":"1930s"},{"value":"1920","label":"1920s"},{"value":"1910","label":"1910s"},{"value":"1900","label":"1900s"},{"value":"pre-1900","label":"Before 1900"}],"example":"1990","aliases":["eras","decade"]},{"name":"country","type":"enum","required":false,"description":"Restrict to lots physically located in one country. BaT's own region groups (EU, NA) are NOT accepted by the site and return nothing, so only these country codes are published.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"CA","label":"Canada"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"NL","label":"Netherlands"},{"value":"PT","label":"Portugal"},{"value":"CH","label":"Switzerland"},{"value":"JP","label":"Japan"},{"value":"ZA","label":"South Africa"}],"example":"DE","aliases":["location","country_code","located_in","cc"]},{"name":"min_year","type":"integer","required":false,"description":"Earliest model year, inclusive.","on_invalid":"reject","example":1990,"minimum":1885,"maximum":2100,"aliases":["minimum_year","year_from","year_min"]},{"name":"max_year","type":"integer","required":false,"description":"Latest model year, inclusive.","on_invalid":"reject","example":1999,"minimum":1885,"maximum":2100,"aliases":["maximum_year","year_to","year_max"]},{"name":"closed_within","type":"enum","required":false,"description":"Only auctions that closed inside this window.","on_invalid":"reject","allowed_values":[{"value":"7d","label":"Auctions closed in the last 7 days"},{"value":"30d","label":"Auctions closed in the last month"},{"value":"1y","label":"Auctions closed in the last year"},{"value":"2y","label":"Auctions closed in the last 2 years"},{"value":"5y","label":"Auctions closed in the last 5 years"}],"example":"1y","aliases":["recency","period","since"]}],"returns":"{query, total_matched, sold_count, unsold_count, sell_through_pct, sold_price_min, sold_price_median, sold_price_mean, sold_price_max, first_closed_at, last_closed_at, series_capped, top_sales[]} — amounts are mixed-currency exactly as Bring a Trailer publishes them.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"porsche 911","closed_within":"1y"}},{"name":"taxonomies","description":"The ids the `category_id`, `origin_id`, `era` and `country` filters take, with the names Bring a Trailer shows for them. Read straight off the site's own filter toolbar, so it never drifts from what the filters accept.","required_params":[],"optional_params":[],"params":[],"returns":"{categories[], origins[], eras[], countries[]} with {id, name} per entry.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"bristol-farms","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Bristol Farms API scraper — shop.bristolfarms.com product search, categories, Weekly Ad, product detail and store locator with each Bristol Farms store's price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bristol-farms/v1","spec_available":true,"actions":[{"name":"search","description":"Search shop.bristolfarms.com at one Bristol Farms store: regular price (price list), was-price, member/card price and promotions apart, unit price, stock level, brand and size, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in the shop.bristolfarms.com search box ('milk').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"shop.bristolfarms.com pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Bristol Farms store prices the results (Bristol Farms prices and range differ by store). Default 90024 — then `store_defaulted` is true.","on_invalid":"reject","example":"90024","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Bristol Farms store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"44602"}],"returns":"products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"90024"}},{"name":"category","description":"Every product of a shop.bristolfarms.com collection (a category, a brand or a diet collection from `categories`) priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (rc-milk-76 …) or a shop.bristolfarms.com /store/bristol-farms/collections/<slug> URL.","on_invalid":"reject","example":"rc-milk-76","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Bristol Farms store prices the results (Bristol Farms prices and range differ by store). Default 90024 — then `store_defaulted` is true.","on_invalid":"reject","example":"90024","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Bristol Farms store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"44602"}],"returns":"collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"rc-milk-76","postal_code":"90024"}},{"name":"product/detail","description":"One Bristol Farms product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price, promotions and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or a shop.bristolfarms.com /store/bristol-farms/products/ URL.","on_invalid":"reject","example":"21562148","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Bristol Farms store prices the results (Bristol Farms prices and range differ by store). Default 90024 — then `store_defaulted` is true.","on_invalid":"reject","example":"90024","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Bristol Farms store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"44602"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"21562148","postal_code":"90024"}},{"name":"categories","description":"The shop.bristolfarms.com category tree (departments and their collections) or one collection's sub-collections; slugs feed `category`.","required_params":[],"optional_params":["slug","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Optional collection slug: returns its sub-collections. Without it: the whole category tree.","on_invalid":"reject","example":"rc-milk-76","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Bristol Farms store prices the results (Bristol Farms prices and range differ by store). Default 90024 — then `store_defaulted` is true.","on_invalid":"reject","example":"90024","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Bristol Farms store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"44602"}],"returns":"collections[]{slug,name,url,children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"rc-milk-76"}},{"name":"stores","description":"Bristol Farms stores around a US ZIP code, nearest first, with address, coordinates, distance and which services shop.bristolfarms.com offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find Bristol Farms stores around (nearest first).","on_invalid":"reject","example":"90024","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"90024"}},{"name":"offers","description":"Bristol Farms's current deal lists at one store: Weekly Ad.","required_params":[],"optional_params":["type","page","per_page","cursor","postal_code","store_id"],"params":[{"name":"type","type":"enum","required":false,"description":"Which deal list: weekly_ad (Weekly Ad).","on_invalid":"reject","allowed_values":[{"value":"weekly_ad","label":"Weekly Ad"}],"default":"weekly_ad"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Bristol Farms store prices the results (Bristol Farms prices and range differ by store). Default 90024 — then `store_defaulted` is true.","on_invalid":"reject","example":"90024","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Bristol Farms store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"44602"}],"returns":"type, collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"90024"}},{"name":"promotions","description":"Which Bristol Farms deal lists are live now at one store, each with its name and product count.","required_params":[],"optional_params":["postal_code","store_id"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Bristol Farms store prices the results (Bristol Farms prices and range differ by store). Default 90024 — then `store_defaulted` is true.","on_invalid":"reject","example":"90024","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Bristol Farms store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"44602"}],"returns":"promotions[]{type,name,slug,url,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"90024"}}]},{"name":"bunjang","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Bunjang API (번개장터) — Korea's largest C2C resale marketplace, strong in sneakers, K-pop goods and collectables: search listings by keyword or category with price, condition and sort filters, read a full listing, and resolve the category tree. Prices in Korean won. No account, no browser.","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/bunjang/v1","spec_available":true,"actions":[{"name":"search","description":"Search Bunjang listings by keyword and/or category, up to 200 per page: listing id, title, URL, price in won, whether it is still selling, reserved or sold, whether Bunjang inspected it (번개케어), favourites, chat messages, when it was last updated, the seller's shop id and photos. Filter by price range, condition grade, delivery method, shop type, how recently it was posted, a refining keyword and excluded keywords; sort by relevance, newest or price; include reserved or sold listings on request. Promoted rows are returned in the source's own order and marked `is_promoted` — they are real listings that match the query. The Naver shopping ads Bunjang mixes into its own grid are never returned as listings.","required_params":[],"optional_params":["query","category_id","sort","price_min","price_max","condition","shipping","shop_type","include_reserved","include_sold","posted_within","refine_query","exclude_keywords","page","per_page","cursor"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword, in Korean or in English. Optional when `category_id` is given.","on_invalid":"reject","example":"나이키","aliases":["q","keyword"]},{"name":"category_id","type":"string","required":false,"description":"Bunjang category id from the `categories` action (e.g. 405100 = 신발 › 스니커즈). A 3-digit id is a top category, 6 digits a sub-category, 9 digits a leaf; any level narrows the search.","on_invalid":"reject","example":"405100","aliases":["category"]},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only these four are sent: an unknown order makes Bunjang answer 200 with an undeclared ordering instead of an error, so anything else is rejected here.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Bunjang's own relevance order (the site default; includes promoted rows)"},{"value":"newest","label":"Most recently updated first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"best_match"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in Korean won (plain won, not 만: 100000 = ₩100,000).","on_invalid":"reject","example":100000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in Korean won (plain won, not 만).","on_invalid":"reject","example":150000,"minimum":0},{"name":"condition","type":"enum","required":false,"description":"The seller's own condition grade. Several may be given comma-separated (condition=like_new,lightly_used). `used` is kept as a shorthand for every second-hand grade. The search row itself no longer publishes a grade — `detail` does.","on_invalid":"reject","allowed_values":[{"value":"new","label":"새상품 — unused"},{"value":"like_new","label":"사용감 없음 — no signs of use"},{"value":"lightly_used","label":"사용감 적음 — light signs of use"},{"value":"heavily_used","label":"사용감 많음 — heavy signs of use"},{"value":"damaged","label":"고장/파손 — broken or damaged"},{"value":"unstated","label":"상태 미분류 — the seller did not grade it"},{"value":"used","label":"Any second-hand grade (like_new, lightly_used, heavily_used, damaged)"}],"value_pattern":"(?i)\\s*(new|like_new|lightly_used|heavily_used|damaged|unstated|used)(\\s*,\\s*(new|like_new|lightly_used|heavily_used|damaged|unstated|used))*\\s*"},{"name":"shipping","type":"enum","required":false,"description":"Delivery method the seller offers. Comma-separated values are allowed.","on_invalid":"reject","allowed_values":[{"value":"free","label":"무료 배송 — the seller pays shipping"},{"value":"convenience_store","label":"반값택배 — Bunjang's half-price convenience-store delivery"},{"value":"standard","label":"일반택배 — ordinary courier"}],"value_pattern":"(?i)\\s*(free|convenience_store|standard)(\\s*,\\s*(free|convenience_store|standard))*\\s*"},{"name":"shop_type","type":"enum","required":false,"description":"Seller type. Comma-separated values are allowed.","on_invalid":"reject","allowed_values":[{"value":"pro","label":"프로상점 — Bunjang's paid professional shops"},{"value":"normal","label":"일반상점 — ordinary private sellers"}],"value_pattern":"(?i)\\s*(pro|normal)(\\s*,\\s*(pro|normal))*\\s*","aliases":["shop"]},{"name":"include_reserved","type":"boolean","required":false,"description":"Include listings the seller marked reserved (예약중). Bunjang leaves them out by default.","on_invalid":"reject","default":false},{"name":"include_sold","type":"boolean","required":false,"description":"Include sold listings (판매완료). Bunjang leaves them out by default.","on_invalid":"reject","default":false},{"name":"posted_within","type":"enum","required":false,"description":"Keep only listings created inside this window. An unknown value is silently ignored by Bunjang (it returns the unfiltered count), so anything else is rejected here.","on_invalid":"reject","allowed_values":[{"value":"1d","label":"Last day"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"1m","label":"Last month"}]},{"name":"refine_query","type":"string","required":false,"description":"A second keyword that must also match (Bunjang's 결과내검색). Measured to narrow: with refine_query=128 every returned row carried 128 in its title.","on_invalid":"reject","example":"128","aliases":["within"]},{"name":"exclude_keywords","type":"string","required":false,"description":"Drop listings whose title contains this text (Bunjang's 제외키워드, up to 5 words). Measured to bite: zero returned rows carried the excluded word.","on_invalid":"reject","example":"케이스","aliases":["without"]},{"name":"page","type":"integer","required":false,"description":"Zero-based page number. Bunjang itself pages only by cursor, so a page is reached by walking cursors; for a window beyond roughly 600 listings pass `cursor` from the previous response's `next_cursor` instead.","on_invalid":"reject","default":0,"minimum":0},{"name":"per_page","type":"integer","required":false,"description":"Listings per page, 1-200. Bunjang serves 60 rows per source page, so a larger page is assembled from several of them.","on_invalid":"reject","default":100,"minimum":1,"maximum":200,"aliases":["limit","n"]},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from a previous response — the cheapest way to walk deep: one request per page instead of re-walking from the start. It is bound to the query and filters it was produced with and is rejected if they differ. Ignored when `page` is 0 and no cursor is given.","on_invalid":"reject"}],"returns":"results[]{listing_id, title, url, price (won as the source published it; null when it is not a plain integer), currency (KRW), status (selling|reserved|sold|null), status_code, is_promoted (a paid placement — still a real listing that matches the query), is_bungae_care (inspected by Bunjang), has_video, favorite_count, chat_count (buntalk messages on the listing — NOT the comment count), updated_at, updated_label (the source's own relative label), seller_id, is_official_seller, image, images[]}, count, total_results (Bunjang's own count for the ordering asked for), page, per_page, has_more, next_page, next_cursor (pass it back as `cursor` to continue), promoted_count, duplicate_listing_ids (the same listing can appear twice in one page, once promoted), unparsable_rows_dropped, external_ads_excluded (Naver shopping ads the grid mixes in — never returned as listings), source_rows_read, no_result, sort_applied, filters_applied (what was sent), filters_acknowledged (what Bunjang itself says it applied), currency. The row no longer carries condition, free_shipping, location, category_id, tags, comment_count, is_pro_shop, is_business_seller, inspection_status, badge, neighborhood_only or is_adult: Bunjang stopped publishing them on a search row in 2026-10. `detail` still publishes every one of them, and condition / shipping / shop_type are still filterable here.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"나이키","per_page":20}},{"name":"detail","description":"One Bunjang listing by id or URL: full description, price in won and the seller's original price, quantity, the seller's own condition grade (new, like_new, lightly_used, heavily_used…), sale status (selling, reserved, sold), category path, brand, hashtags, size and variant options, shipping (free or the fee in won, and whether meeting in person is offered), 번개페이 safe-payment availability, favourites / views / comments / chats, posting and update times, every photo, and the public shop: name, rating, review and sales counts, followers, join date.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Listing id — the number in a Bunjang product URL (m.bunjang.co.kr/products/423853877) — or the full URL.","on_invalid":"reject","example":"423853877","aliases":["id","pid","url","product_id"]}],"returns":"listing{listing_id, title, url, description, price, original_price, currency, quantity, condition (the seller's own grade, null when the source publishes none), status (selling|reserved|sold|null), status_code, is_promoted, is_hidden, inspection_status, category{id, name}, category_path[]{id, name}, brand{id, name}, keywords[], options[]{group, value}, shipping{free_shipping, fee, in_person}, safe_payment{enabled, shipping, in_person, seller_prefers}, favorite_count, view_count, comment_count, chat_count, created_at, updated_at, updated_label, image, images[], image_count, seller{id, name, url, image, rating, review_count, sales_count, follower_count, is_pro_shop, joined_at}, seller_listing_count, report_url}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"423853877"}},{"name":"categories","description":"Bunjang's own category tree — every id that `search`'s `category_id` accepts, with the full name path and the number of listings the site currently counts in each. Narrow it with a name search, a parent id or a depth limit.","required_params":[],"optional_params":["query","parent_id","max_depth"],"params":[{"name":"query","type":"string","required":false,"description":"Keep only categories whose name contains this text (case-insensitive).","on_invalid":"reject","example":"스니커즈","aliases":["q","name"]},{"name":"parent_id","type":"string","required":false,"description":"Keep only this category and the tree beneath it.","on_invalid":"reject","example":"405","aliases":["category_id"]},{"name":"max_depth","type":"integer","required":false,"description":"How deep to walk the tree: 1 top categories, 2 sub-categories, 3 leaves.","on_invalid":"reject","default":3,"minimum":1,"maximum":3}],"returns":"categories[]{category_id, name, depth, parent_id, path[], path_ids[], listing_count}, count, max_depth, query, parent_id","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"max_depth":1}}]},{"name":"bunnings","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Bunnings API scraper — Australia's and New Zealand's #1 hardware and home-improvement retailer (bunnings.com.au, bunnings.co.nz): store-priced search and category browse, full product records, marketplace sellers, per-store stock with aisle and bay, the store finder and search suggestions. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/bunnings/v1","spec_available":true,"actions":[{"name":"search","description":"Search Bunnings by keyword, priced for one store (prices differ by region). Filters: brand, price range, minimum rating, fulfilment option, offer badge, Bunnings vs Marketplace seller, special order, category. Each row: item number, title, brand, store price, unit price, marketplace seller, fulfilment options, offer badges and campaign, key selling points, the search-index rating and review count, variant count, image, URL and category path.","required_params":["query"],"optional_params":["country","store_id","postcode","page","per_page","sort","brand","price_min","price_max","min_rating","fulfilment","offer","seller","special_order","category","include_fallback_results","live_prices","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword(s).","on_invalid":"reject","example":"cordless drill","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Bunnings storefront. Currency follows it (AUD / NZD).","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — bunnings.com.au, AUD"},{"value":"nz","label":"New Zealand — bunnings.co.nz, NZD"}],"default":"au","example":"au"},{"name":"store_id","type":"string","required":false,"description":"Bunnings store number (from the stores action). Prices, stock and aisle locations are store-bound. Default: the site's own default store (AU 6400 Mentone VIC, NZ 9489).","on_invalid":"reject","example":"6400"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; the store Bunnings assigns to it is used (instead of store_id).","on_invalid":"reject","example":"2000"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"per_page","type":"integer","required":false,"description":"Rows per page (Bunnings' own page is 36; max 60).","on_invalid":"reject","default":36,"example":36,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Result order (each one is Bunnings' own sort).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price low to high (store price)"},{"value":"price_desc","label":"Price high to low (store price)"},{"value":"rating","label":"Rating high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"},{"value":"newest","label":"Newest first"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"Only this brand (Bunnings' brand name, case-insensitive).","on_invalid":"reject","example":"Ryobi"},{"name":"price_min","type":"number","required":false,"description":"Lowest store price.","on_invalid":"reject","example":20},{"name":"price_max","type":"number","required":false,"description":"Highest store price.","on_invalid":"reject","example":200},{"name":"min_rating","type":"number","required":false,"description":"Minimum star rating (0-5).","on_invalid":"reject","example":4,"minimum":0,"maximum":5},{"name":"fulfilment","type":"enum","required":false,"description":"Only products offered this way at the chosen store.","on_invalid":"reject","allowed_values":[{"value":"click_and_collect","label":"Click & Collect"},{"value":"delivery","label":"Delivery"},{"value":"in_store","label":"In-store"}],"example":"click_and_collect"},{"name":"offer","type":"enum","required":false,"description":"Only products carrying this Bunnings offer badge.","on_invalid":"reject","allowed_values":[{"value":"new_arrival","label":"New Arrival"},{"value":"redemption_offer","label":"Redemption Offer"},{"value":"the_block","label":"The Block"},{"value":"delivery_included","label":"Delivery Included"},{"value":"custom_made","label":"Custom Made"},{"value":"fsc_certified","label":"FSC Certified"}],"example":"new_arrival"},{"name":"seller","type":"enum","required":false,"description":"Bunnings' own range, Bunnings Marketplace third-party sellers, or both. Default follows the site: AU shows both, NZ shows Bunnings' range only.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Bunnings + Marketplace"},{"value":"bunnings","label":"Sold by Bunnings"},{"value":"marketplace","label":"Bunnings Marketplace sellers"}],"example":"bunnings"},{"name":"special_order","type":"boolean","required":false,"description":"true = only special-order products; false = exclude them.","on_invalid":"reject","example":false},{"name":"category","type":"string","required":false,"description":"Restrict to a category code (e.g. drills) or category URL.","on_invalid":"reject","example":"drills"},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no row on the page contains a query word, the rows are dropped as unrelated padding; true returns them in fallback_results.","on_invalid":"reject","default":false},{"name":"live_prices","type":"boolean","required":false,"description":"Search rows carry the price Bunnings' search grid shows (its search index), which can lag the product page (2 of 84 rows measured). true re-prices every row from the live product price (one extra small request per row); rows then say price_source=live and keep search_index_price when it differed.","on_invalid":"reject","default":false}],"returns":"results[]{position, item_number, title, brand, brand_code, url, price, price_source (search_index | live), search_index_price (only when live_prices re-priced a differing row), currency, unit_price{price, unit, unit_code, item_quantity}, sold_by_unit, is_marketplace, seller{name, trusted_seller}, fulfilment_options[], is_special_order, delivery_included, promotions[], campaign{id, starts, ends, onepass_exclusive}, key_selling_points[], search_index_rating, search_index_review_count, rating_scale, variant_count, colour_count, new_arrival, best_seller, age_restricted, for_hire, image, thumbnail, category_path[{code, name, path}]}, count, total_results, page, per_page, has_more, store{store_id, name, pricing_region, chosen_by}, country, currency, query, sort, did_you_mean, site_redirect{url, category_code}, fallback_results_dropped, fallback_results[] (only with include_fallback_results=true), duplicate_rows_dropped, live_price_changes (only with live_prices=true), page_notice","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"cordless drill"}},{"name":"category/products","description":"Browse a Bunnings category (any level, from 'tools' down to 'cordless-drill-kits') with the same store pricing, sorts and filters as search.","required_params":["category"],"optional_params":["country","store_id","postcode","page","per_page","sort","brand","price_min","price_max","min_rating","fulfilment","offer","seller","special_order","live_prices","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"Category code (last part of the category URL, e.g. cordless-drill-kits) or a bunnings.com.au / bunnings.co.nz /products/… category URL.","on_invalid":"reject","example":"cordless-drill-kits","aliases":["category_code","category_url"]},{"name":"country","type":"enum","required":false,"description":"Bunnings storefront. Currency follows it (AUD / NZD).","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — bunnings.com.au, AUD"},{"value":"nz","label":"New Zealand — bunnings.co.nz, NZD"}],"default":"au","example":"au"},{"name":"store_id","type":"string","required":false,"description":"Bunnings store number (from the stores action). Prices, stock and aisle locations are store-bound. Default: the site's own default store (AU 6400 Mentone VIC, NZ 9489).","on_invalid":"reject","example":"6400"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; the store Bunnings assigns to it is used (instead of store_id).","on_invalid":"reject","example":"2000"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"per_page","type":"integer","required":false,"description":"Rows per page (Bunnings' own page is 36; max 60).","on_invalid":"reject","default":36,"example":36,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Result order (each one is Bunnings' own sort).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price low to high (store price)"},{"value":"price_desc","label":"Price high to low (store price)"},{"value":"rating","label":"Rating high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"},{"value":"newest","label":"Newest first"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"Only this brand (Bunnings' brand name, case-insensitive).","on_invalid":"reject","example":"Ryobi"},{"name":"price_min","type":"number","required":false,"description":"Lowest store price.","on_invalid":"reject","example":20},{"name":"price_max","type":"number","required":false,"description":"Highest store price.","on_invalid":"reject","example":200},{"name":"min_rating","type":"number","required":false,"description":"Minimum star rating (0-5).","on_invalid":"reject","example":4,"minimum":0,"maximum":5},{"name":"fulfilment","type":"enum","required":false,"description":"Only products offered this way at the chosen store.","on_invalid":"reject","allowed_values":[{"value":"click_and_collect","label":"Click & Collect"},{"value":"delivery","label":"Delivery"},{"value":"in_store","label":"In-store"}],"example":"click_and_collect"},{"name":"offer","type":"enum","required":false,"description":"Only products carrying this Bunnings offer badge.","on_invalid":"reject","allowed_values":[{"value":"new_arrival","label":"New Arrival"},{"value":"redemption_offer","label":"Redemption Offer"},{"value":"the_block","label":"The Block"},{"value":"delivery_included","label":"Delivery Included"},{"value":"custom_made","label":"Custom Made"},{"value":"fsc_certified","label":"FSC Certified"}],"example":"new_arrival"},{"name":"seller","type":"enum","required":false,"description":"Bunnings' own range, Bunnings Marketplace third-party sellers, or both. Default follows the site: AU shows both, NZ shows Bunnings' range only.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Bunnings + Marketplace"},{"value":"bunnings","label":"Sold by Bunnings"},{"value":"marketplace","label":"Bunnings Marketplace sellers"}],"example":"bunnings"},{"name":"special_order","type":"boolean","required":false,"description":"true = only special-order products; false = exclude them.","on_invalid":"reject","example":false},{"name":"live_prices","type":"boolean","required":false,"description":"Search rows carry the price Bunnings' search grid shows (its search index), which can lag the product page (2 of 84 rows measured). true re-prices every row from the live product price (one extra small request per row); rows then say price_source=live and keep search_index_price when it differed.","on_invalid":"reject","default":false}],"returns":"results[] (same row shape as search), count, total_results, page, per_page, has_more, category{code, name, path}, store{…}, country, currency, sort","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"cordless-drill-kits"}},{"name":"product/detail","description":"The full Bunnings product record for one store: title, brand, model number, store price, unit price, Afterpay/PayPal instalments, availability (delivery, click & collect and in-store stock with aisle and bay), rating and review count, description, key features, the spec table, dimensions and weight, images, manuals, breadcrumb, variants, offer badges and campaign, warranty, and for Bunnings Marketplace listings every seller's offer with the featured one marked.","required_params":["item_number"],"optional_params":["country","store_id","postcode","url","max_rotations"],"params":[{"name":"item_number","type":"string","required":true,"description":"Bunnings item number (I/N, e.g. 0539753) or a product URL (…_p0539753).","on_invalid":"reject","example":"0539753","aliases":["product_id","id","url","product_url","sku"]},{"name":"country","type":"enum","required":false,"description":"Bunnings storefront. Currency follows it (AUD / NZD).","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — bunnings.com.au, AUD"},{"value":"nz","label":"New Zealand — bunnings.co.nz, NZD"}],"default":"au","example":"au"},{"name":"store_id","type":"string","required":false,"description":"Bunnings store number (from the stores action). Prices, stock and aisle locations are store-bound. Default: the site's own default store (AU 6400 Mentone VIC, NZ 9489).","on_invalid":"reject","example":"6400"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; the store Bunnings assigns to it is used (instead of store_id).","on_invalid":"reject","example":"2000"}],"returns":"product{item_number, title, brand, brand_code, model_number, model_name, gtin (null — not published), manufacturer, url, price, currency, was_price (null — not published), member_price (null), unit_price{price, unit, unit_code, item_quantity}, instalments, availability, fulfilment{store_id, store_name, in_store{available, stock, stock_status, aisle_locations[{aisle, bay}], store_map_url}, click_and_collect{available, stock, stock_status, collect_from}, delivery{available, delivery_included, stock, stock_status, message_code}, is_special_order, add_to_cart_enabled, stock_hidden_by_site}, rating, review_count, rating_scale, is_marketplace, seller{id, name}, offers[{offer_id, seller{id, name}, price, shipping_price, total_price, currency, delivery_from, delivery_to, is_featured}], featured_offer_id, cheapest_offer_price, has_multiple_offers, description, key_features[], specs[{name, value}], dimensions{product[], package[]}, weight_kg, images[], documents[{type, url, size_bytes}], breadcrumb[{code, name, path}], variants[{item_number, options, colour, url, is_current}], promotions[], campaign{…}, warranty, delivery_information, safety_information, flags{…}}, store{…}, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"item_number":"0539753"}},{"name":"product/stock","description":"In-store stock, click & collect, the aisle and bay, and the store price for one item across several Bunnings stores: pass store_ids, or a postcode / latitude+longitude to check the nearest stores.","required_params":["item_number"],"optional_params":["country","store_ids","postcode","latitude","longitude","nearest","url","max_rotations"],"params":[{"name":"item_number","type":"string","required":true,"description":"Bunnings item number (I/N, e.g. 0539753) or a product URL (…_p0539753).","on_invalid":"reject","example":"0539753","aliases":["product_id","id","url","product_url","sku"]},{"name":"country","type":"enum","required":false,"description":"Bunnings storefront. Currency follows it (AUD / NZD).","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — bunnings.com.au, AUD"},{"value":"nz","label":"New Zealand — bunnings.co.nz, NZD"}],"default":"au","example":"au"},{"name":"store_ids","type":"array","required":false,"description":"Up to 10 store numbers to check (comma-separated). Or use postcode / latitude+longitude to check the nearest stores.","on_invalid":"reject","example":"6400,7313"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; the store Bunnings assigns to it is used (instead of store_id).","on_invalid":"reject","example":"2000"},{"name":"latitude","type":"number","required":false,"description":"Latitude (with longitude) to find the nearest stores.","on_invalid":"reject","example":-33.8688},{"name":"longitude","type":"number","required":false,"description":"Longitude (with latitude).","on_invalid":"reject","example":151.2093},{"name":"nearest","type":"integer","required":false,"description":"How many nearest stores to check when postcode or latitude/longitude is given.","on_invalid":"reject","default":5,"example":5,"minimum":1,"maximum":10}],"returns":"item_number, title, stores[{store_id, name, suburb, state, distance_km, price, currency, unit_price, availability, in_store{available, stock, stock_status, aisle_locations[], store_map_url}, click_and_collect{…}, delivery{…}, is_special_order}], count, in_stock_store_count, country","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"item_number":"0539753"}},{"name":"stores","description":"The Bunnings store finder: stores nearest a postcode or latitude/longitude (20 per page), or one store by id — address, phone, coordinates, distance, opening hours, services, click & collect and drive & collect flags, and the pricing region.","required_params":[],"optional_params":["country","postcode","latitude","longitude","store_id","page","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Bunnings storefront. Currency follows it (AUD / NZD).","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — bunnings.com.au, AUD"},{"value":"nz","label":"New Zealand — bunnings.co.nz, NZD"}],"default":"au","example":"au"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; the store Bunnings assigns to it is used (instead of store_id).","on_invalid":"reject","example":"2000"},{"name":"latitude","type":"number","required":false,"description":"Latitude (with longitude) to find the nearest stores.","on_invalid":"reject","example":-33.8688},{"name":"longitude","type":"number","required":false,"description":"Longitude (with latitude).","on_invalid":"reject","example":151.2093},{"name":"store_id","type":"string","required":false,"description":"One store by number (returns opening hours and services).","on_invalid":"reject","example":"7313"},{"name":"page","type":"integer","required":false,"description":"Page of stores (20 per page, nearest first).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"stores[{store_id, name, address, address_line2, suburb, state, postcode, country, phone, email, latitude, longitude, distance_km, store_type, pricing_region, time_zone, has_click_and_collect, has_delivery, has_drive_and_collect, is_active, opening_hours[{day, open, close, closed}] (store_id lookups), services[] (store_id lookups), store_map_url}], count, total_stores, page, has_more, origin{latitude, longitude, postcode}, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"postcode":"2000"}},{"name":"search/suggest","description":"Bunnings' search-box suggestions for a partial keyword.","required_params":["query"],"optional_params":["country","store_id","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Partial keyword typed into the search box.","on_invalid":"reject","example":"hamm","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Bunnings storefront. Currency follows it (AUD / NZD).","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — bunnings.com.au, AUD"},{"value":"nz","label":"New Zealand — bunnings.co.nz, NZD"}],"default":"au","example":"au"},{"name":"store_id","type":"string","required":false,"description":"Bunnings store number (from the stores action). Prices, stock and aisle locations are store-bound. Default: the site's own default store (AU 6400 Mentone VIC, NZ 9489).","on_invalid":"reject","example":"6400"}],"returns":"suggestions[{text, score}], count, query, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"cordless drill"}}]},{"name":"buycycle","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"buycycle Used Bike & Sports Gear Marketplace (Europe)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/buycycle/v1","spec_available":true,"actions":[{"name":"search","description":"Search buycycle, Europe's largest marketplace for pre-owned bikes and sports gear: ~125,000 live listings from private sellers and shops across 28 storefront countries. Free text plus the site's own filters — department, discipline, category, brand, model family, frame/wheel/clothing/shoe size, frame material, brake type, shifting type, colour, condition, seller type, the country the item is in, price, model year, e-bike, frameset and high-demand — and its four working sort orders. Nothing is required: with no parameters it browses the live catalogue. Bike-specific values (frame size, model year, groupset, frameset flag, discipline) come back as their own fields, not buried in the title.","required_params":[],"optional_params":["query","main_type","discipline","category","brand","family","size","frame_material","brake_type","shifting","colour","condition","seller_type","country","min_price","max_price","min_year","max_year","ebike","frameset","high_demand","sort","page","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text, matched the way the site's own search box matches it (brand, model, family, component). Leave it out to browse the whole catalogue with filters only.","on_invalid":"reject","example":"specialized tarmac","aliases":["q","term","keyword"]},{"name":"main_type","type":"array","required":false,"description":"Top-level department. One or more of: ball-sports, bikes, cycling-gear, other, outdoor, racket-sports, running, water-sports, winter-sports.","on_invalid":"reject","allowed_values":[{"value":"ball-sports","label":"ball-sports"},{"value":"bikes","label":"bikes"},{"value":"cycling-gear","label":"cycling-gear"},{"value":"other","label":"other"},{"value":"outdoor","label":"outdoor"},{"value":"racket-sports","label":"racket-sports"},{"value":"running","label":"running"},{"value":"water-sports","label":"water-sports"},{"value":"winter-sports","label":"winter-sports"}],"example":["bikes"]},{"name":"discipline","type":"array","required":false,"description":"The riding/sport discipline slug a listing sits under: road-gravel, mountainbike, urban-touring, wheels, drivetrain, clothing, running-shoes, skiing… List the live set with the `filters` action.","on_invalid":"reject","example":["road-gravel"],"value_pattern":"[a-z0-9][a-z0-9\\-]{2,80}","aliases":["type","bike_type"]},{"name":"category","type":"array","required":false,"description":"Leaf category slug (road, gravel, enduro, crosscountry, helmet, saddle…). `filters` lists every live one with its count.","on_invalid":"reject","example":["road"],"value_pattern":"[a-z0-9][a-z0-9\\-]{2,80}"},{"name":"brand","type":"array","required":false,"description":"Brand slug, lower-case and hyphenated as buycycle writes it (specialized, canyon, cannondale, santa-cruz). Several brands are OR-ed together.","on_invalid":"reject","example":["specialized"],"value_pattern":"[a-z0-9][a-z0-9\\-]{2,80}","aliases":["brands"]},{"name":"family","type":"array","required":false,"description":"Model family slug within a brand (tarmac, aeroad, stumpjumper). `filters` lists them.","on_invalid":"reject","example":["tarmac"],"value_pattern":"[a-z0-9][a-z0-9\\-]{2,80}","aliases":["model"]},{"name":"size","type":"array","required":false,"description":"One size vocabulary covers the whole site: bike frame sizes (xxxs, xxs, xs, s, m, l, xl, xxl, one-size-bike, youth), wheel sizes (26, 27-5-650b, 28-700c, 29), clothing (clothing-size-s … 3xl), shoes (eu-42, eu-42-5) and helmets (helmet-size-m). `filters` returns the live list grouped per vocabulary.","on_invalid":"reject","example":["m"],"value_pattern":"[a-z0-9][a-z0-9\\-]{0,40}","aliases":["frame_size"]},{"name":"frame_material","type":"array","required":false,"description":"Frame material.","on_invalid":"reject","allowed_values":[{"value":"carbon","label":"Carbon"},{"value":"aluminum","label":"Aluminium"},{"value":"steel","label":"Steel"},{"value":"titanium","label":"Titanium"},{"value":"magnesium","label":"Magnesium"}],"example":["carbon"]},{"name":"brake_type","type":"array","required":false,"description":"Brake system (bikes and framesets).","on_invalid":"reject","allowed_values":[{"value":"disc","label":"Disc"},{"value":"rim","label":"Rim"},{"value":"coaster","label":"Coaster"},{"value":"drum","label":"Drum"},{"value":"other","label":"Other"}],"example":["disc"],"aliases":["brakes"]},{"name":"shifting","type":"array","required":false,"description":"Shifting system (bikes and framesets).","on_invalid":"reject","allowed_values":[{"value":"mechanical","label":"Mechanical"},{"value":"electronic","label":"Electronic"},{"value":"other","label":"Other"}],"example":["electronic"],"aliases":["shifting_type"]},{"name":"colour","type":"array","required":false,"description":"Colour, given as the site's own swatch code: 000000 black, FFFFFF white, 3B82F6 blue, D1D5DB light grey, EF4444 red, 80BE70 green, F59E0B orange, 9A2DF0 purple. A listing carries one swatch, the one the seller picked.","on_invalid":"reject","allowed_values":[{"value":"000000","label":"Black"},{"value":"FFFFFF","label":"White"},{"value":"3B82F6","label":"Blue"},{"value":"D1D5DB","label":"Light Gray"},{"value":"EF4444","label":"Red"},{"value":"80BE70","label":"Green"},{"value":"F59E0B","label":"Orange"},{"value":"9A2DF0","label":"Purple"}],"example":["000000"],"aliases":["color"]},{"name":"condition","type":"array","required":false,"description":"Seller-declared condition. NEW is the site's own top grade for an unused item, then VERY_GOOD, GOOD, FAIR.","on_invalid":"reject","allowed_values":[{"value":"NEW","label":"New"},{"value":"VERY_GOOD","label":"Very good"},{"value":"GOOD","label":"Good"},{"value":"FAIR","label":"Fair"}],"example":["VERY_GOOD"]},{"name":"seller_type","type":"array","required":false,"description":"Private seller or commercial shop.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private seller"},{"value":"commercial","label":"Commercial shop"}],"example":["commercial"],"aliases":["merchant"]},{"name":"country","type":"array","required":false,"description":"Where the item physically is, as an ISO-2 code (de, fr, it, es, nl, at, ch…). This is the listing's own location, not the storefront — use `market` for that.","on_invalid":"reject","example":["de"],"value_pattern":"[A-Za-z]{2}","aliases":["located_in"]},{"name":"min_price","type":"number","required":false,"description":"Lowest asking price, in the listing's own currency as the index stores it (EUR for almost every listing).","on_invalid":"reject","example":1000,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest asking price.","on_invalid":"reject","example":4000,"minimum":0},{"name":"min_year","type":"integer","required":false,"description":"Earliest model year.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100},{"name":"max_year","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","example":2026,"minimum":1900,"maximum":2100},{"name":"ebike","type":"boolean","required":false,"description":"true = only e-bikes, false = only non-assisted.","on_invalid":"reject","example":true,"aliases":["e_bike"]},{"name":"frameset","type":"boolean","required":false,"description":"true = only framesets (frame, no build), false = only complete products.","on_invalid":"reject","example":false},{"name":"high_demand","type":"boolean","required":false,"description":"true = only listings the site is currently flagging as in high demand.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. `relevance` is the site's reranked default and is NOT stable between identical calls; the price and date orders are.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (site default)"},{"value":"newest","label":"Most recently listed first"},{"value":"oldest","label":"Longest listed first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page. The source serves at most 10,000 rows per query, so the last page with rows is 10000/page_size; the response carries `last_page`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-200 (200 is the source's own hard limit). The site itself asks for 52.","on_invalid":"reject","default":52,"example":52,"minimum":1,"maximum":200,"aliases":["per_page","limit"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for gateway compatibility. buycycle publishes a seller's display name, city and ratings on the public page and this engine returns them either way; it never returns an e-mail, phone or surname because the site does not show one.","on_invalid":"reject","default":false,"example":false}],"returns":"{query, total, total_capped, page, page_size, last_page, has_more, result_window, sort, filters_applied, products[]}. Each product: {id, title, url, slug, product_type, main_type, brand, category, discipline, year, frame_size, size, groupset, description, condition, condition_label, price, currency, msrp, msrp_shown, is_price_reduced, is_high_demand, favorite_count, buyer_offers, country_id, country_code, seller_id, listed_at, listed_at_ts, updated_at, image, images[], images_count}. `total` is the source's filter-aware group count; `total_capped` is true when the source's own counter sits at its 10,000 ceiling, which never changes `total`. Pass a row's `id` to `detail` for specs, components, seller and shipping, and its `seller_id` to `seller`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"specialized tarmac","condition":["VERY_GOOD"],"frame_material":["carbon"],"sort":"price_desc"}},{"name":"detail","description":"One buycycle listing in full, exactly what the product page publishes: title, brand, model, year, condition with the site's own grading note, asking price, the original price, the total including buyer protection, shipping cost and destination, return window, MSRP, frame size with the recommended rider height, frame material, brake and shifting type, suspension, wheel size, colour, groupset, every component the seller listed (original and replaced), the seller's own description and buycycle's translation of it, every image, the city and country the item is in, the seller (name, rating, reviews, profile) and buycycle's own market-price rating for the asking price.","required_params":["id"],"optional_params":["market","language","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"A listing's numeric id (the `id` on every search row) or its slug. The full product URL works too.","on_invalid":"reject","example":"2688396","value_pattern":"[A-Za-z0-9:/._\\-]{1,200}","aliases":["product_id","slug","url"]},{"name":"market","type":"enum","required":false,"description":"Which buycycle storefront to read: the ISO-2 country code of the shop, which sets the page language and the currency prices are shown in. The catalogue itself is pan-European and identical in every storefront.","on_invalid":"reject","allowed_values":[{"value":"at","label":"AT"},{"value":"be","label":"BE"},{"value":"bg","label":"BG"},{"value":"ch","label":"CH"},{"value":"cz","label":"CZ"},{"value":"de","label":"DE"},{"value":"dk","label":"DK"},{"value":"ee","label":"EE"},{"value":"es","label":"ES"},{"value":"fi","label":"FI"},{"value":"fr","label":"FR"},{"value":"gr","label":"GR"},{"value":"hr","label":"HR"},{"value":"hu","label":"HU"},{"value":"ie","label":"IE"},{"value":"it","label":"IT"},{"value":"lt","label":"LT"},{"value":"lu","label":"LU"},{"value":"lv","label":"LV"},{"value":"mc","label":"MC"},{"value":"nl","label":"NL"},{"value":"pl","label":"PL"},{"value":"pt","label":"PT"},{"value":"ro","label":"RO"},{"value":"se","label":"SE"},{"value":"si","label":"SI"},{"value":"sk","label":"SK"},{"value":"us","label":"US"}],"default":"de","example":"de","aliases":["storefront"]},{"name":"language","type":"enum","required":false,"description":"Page language for this call; English by default, and every storefront serves it. Ask for the storefront's own language (de, fr, it, es, nl, pl, cs, da, fi, pt) and the spec labels, condition wording and country name come back in that language, which is what the shopper sees — the normalised fields (frame_material, brake_type, shifting_type, wheel_size, colour, condition) are read off the English labels and come back empty in other languages. `specs[]` always carries exactly what the page printed.","on_invalid":"reject","allowed_values":[{"value":"cs","label":"cs"},{"value":"da","label":"da"},{"value":"de","label":"de"},{"value":"en","label":"en"},{"value":"es","label":"es"},{"value":"fi","label":"fi"},{"value":"fr","label":"fr"},{"value":"it","label":"it"},{"value":"nl","label":"nl"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"}],"default":"en","example":"en"},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for gateway compatibility. buycycle publishes a seller's display name, city and ratings on the public page and this engine returns them either way; it never returns an e-mail, phone or surname because the site does not show one.","on_invalid":"reject","default":false,"example":false}],"returns":"{id, listing_id, title, slug, url, status, product_type, brand, model, year, condition, condition_label, condition_note, price, price_display, price_original, is_price_reduced, currency, display_currency, msrp, msrp_shown, total_with_buyer_protection, shipping_cost, shipping_currency, ships_to, return_days, availability, discipline, category, breadcrumb[], frame_size, size, recommended_height, seller_fit_opinion, frame_material, brake_type, shifting_type, suspension_type, wheel_size, colour, groupset, receipt, specs[{name,value,note}], components[], components_original[], components_replaced[], description, description_translated, description_tags[], images[], images_count, favorite_count, listing_age, can_buy, accepts_offers, location{city,country}, price_rating, seller{id,name,profile_url,rating,reviews_count,last_active}, market, schema_price, schema_currency, price_mismatch}. `price` and `total_with_buyer_protection` are in the STOREFRONT's currency (`currency`); `listing_currency` is the currency the seller listed in. `schema_price` is the page's own schema.org figure, kept as an independent witness, and `price_mismatch` says whether the two disagree. buycycle does not publish mileage/km as a field, nor a pre-reduction price: it flags `is_price_reduced` without printing the old figure.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"2688396","market":"de"}},{"name":"seller","description":"A buycycle seller's public profile and the listings on it: private or commercial, country and city, star rating, review count, items for sale, items sold, followers, member-since, verification and top-seller badges, plus the first page of their live listings with prices and condition.","required_params":["seller_id"],"optional_params":["market","language","include_pii"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"The seller's numeric id — `seller_id` on every search row, or the number at the end of a /seller-profile/ URL.","on_invalid":"reject","example":4773757,"minimum":1,"aliases":["id","user_id"]},{"name":"market","type":"enum","required":false,"description":"Which buycycle storefront to read: the ISO-2 country code of the shop, which sets the page language and the currency prices are shown in. The catalogue itself is pan-European and identical in every storefront.","on_invalid":"reject","allowed_values":[{"value":"at","label":"AT"},{"value":"be","label":"BE"},{"value":"bg","label":"BG"},{"value":"ch","label":"CH"},{"value":"cz","label":"CZ"},{"value":"de","label":"DE"},{"value":"dk","label":"DK"},{"value":"ee","label":"EE"},{"value":"es","label":"ES"},{"value":"fi","label":"FI"},{"value":"fr","label":"FR"},{"value":"gr","label":"GR"},{"value":"hr","label":"HR"},{"value":"hu","label":"HU"},{"value":"ie","label":"IE"},{"value":"it","label":"IT"},{"value":"lt","label":"LT"},{"value":"lu","label":"LU"},{"value":"lv","label":"LV"},{"value":"mc","label":"MC"},{"value":"nl","label":"NL"},{"value":"pl","label":"PL"},{"value":"pt","label":"PT"},{"value":"ro","label":"RO"},{"value":"se","label":"SE"},{"value":"si","label":"SI"},{"value":"sk","label":"SK"},{"value":"us","label":"US"}],"default":"de","example":"de","aliases":["storefront"]},{"name":"language","type":"enum","required":false,"description":"Page language for this call; English by default, and every storefront serves it. Ask for the storefront's own language (de, fr, it, es, nl, pl, cs, da, fi, pt) and the spec labels, condition wording and country name come back in that language, which is what the shopper sees — the normalised fields (frame_material, brake_type, shifting_type, wheel_size, colour, condition) are read off the English labels and come back empty in other languages. `specs[]` always carries exactly what the page printed.","on_invalid":"reject","allowed_values":[{"value":"cs","label":"cs"},{"value":"da","label":"da"},{"value":"de","label":"de"},{"value":"en","label":"en"},{"value":"es","label":"es"},{"value":"fi","label":"fi"},{"value":"fr","label":"fr"},{"value":"it","label":"it"},{"value":"nl","label":"nl"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"}],"default":"en","example":"en"},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for gateway compatibility. buycycle publishes a seller's display name, city and ratings on the public page and this engine returns them either way; it never returns an e-mail, phone or surname because the site does not show one.","on_invalid":"reject","default":false,"example":false}],"returns":"{seller{id, name, first_name, profile_url, type, type_label, status, is_verified, is_top_seller, about, avatar, country, country_code, city, rating, reviews_count, listings_count, sold_count, followers_count, member_since, created_at, response_time}, listings[{id, title, slug, url, product_type, brand, year, frame_size, size, groupset, condition, condition_label, price, price_display, currency, msrp, msrp_shown, category, discipline, status, city, favorite_count, image}], listings_returned}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":4773757,"market":"de"}},{"name":"filters","description":"Every filter value buycycle currently offers, with the live count behind each one: departments, disciplines, categories, brands, model families, sizes per vocabulary, frame materials, brake and shifting types, groupsets, colours, conditions, seller types, e-bike/frameset flags and the price and year ranges. Use it to discover the exact slugs `search` filters on, and as a market-size report in its own right (how many carbon road bikes, how many Canyons).","required_params":[],"optional_params":["query","main_type","discipline","brand","max_values","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Narrow the facet counts to one search term, exactly as `search` would.","on_invalid":"reject","example":"tarmac","aliases":["q","term"]},{"name":"main_type","type":"array","required":false,"description":"Narrow the facet counts to one department.","on_invalid":"reject","allowed_values":[{"value":"ball-sports","label":"ball-sports"},{"value":"bikes","label":"bikes"},{"value":"cycling-gear","label":"cycling-gear"},{"value":"other","label":"other"},{"value":"outdoor","label":"outdoor"},{"value":"racket-sports","label":"racket-sports"},{"value":"running","label":"running"},{"value":"water-sports","label":"water-sports"},{"value":"winter-sports","label":"winter-sports"}],"example":["bikes"]},{"name":"discipline","type":"array","required":false,"description":"Narrow the facet counts to one discipline slug.","on_invalid":"reject","example":["road-gravel"],"value_pattern":"[a-z0-9][a-z0-9\\-]{2,80}","aliases":["type"]},{"name":"brand","type":"array","required":false,"description":"Narrow the facet counts to one or more brand slugs.","on_invalid":"reject","example":["specialized"],"value_pattern":"[a-z0-9][a-z0-9\\-]{2,80}"},{"name":"max_values","type":"integer","required":false,"description":"How many values to return per facet, most-listed first.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":500},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for gateway compatibility. buycycle publishes a seller's display name, city and ratings on the public page and this engine returns them either way; it never returns an e-mail, phone or surname because the site does not show one.","on_invalid":"reject","default":false,"example":false}],"returns":"{query, total, total_capped, groups[{group, label, count}], facets{<source facet name>: {display_name, type, search_param, values[{value, label, count}], value_count, min, max}}, facet_count}. `search_param` names the `search` parameter a facet feeds (brand_slug -> brand, type_slug -> discipline, condition_code -> condition, user_type -> seller_type …) and is null for the facets buycycle keeps but this API does not expose as filters — including `gender`, whose values mix numeric ids with free text in four languages, and `bike_component_id`, whose values are bare ids with no label anywhere in the payload.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"main_type":["bikes"],"max_values":25}},{"name":"suggest","description":"buycycle's own search-box suggestions for a few letters: the completion terms it would offer and the products it would preview under them.","required_params":["query"],"optional_params":["include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far.","on_invalid":"reject","example":"tarmac","aliases":["q","term"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for gateway compatibility. buycycle publishes a seller's display name, city and ratings on the public page and this engine returns them either way; it never returns an e-mail, phone or surname because the site does not show one.","on_invalid":"reject","default":false,"example":false}],"returns":"{query, suggestions[{text, group}], products[{id, title, url, brand, price, currency, image}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"tarmac"}},{"name":"markets","description":"The storefronts buycycle runs, straight from the site's own country table: country code and name, the currency that storefront prices in, and the languages it serves. These are the values `market`, `language` and the search filter `country` take.","required_params":[],"optional_params":["include_pii"],"params":[{"name":"include_pii","type":"boolean","required":false,"description":"Kept for gateway compatibility. buycycle publishes a seller's display name, city and ratings on the public page and this engine returns them either way; it never returns an e-mail, phone or surname because the site does not show one.","on_invalid":"reject","default":false,"example":false}],"returns":"{count, markets[{country_id, code, code_iso3, name, native_name, currency, currency_id, default_language, languages[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}}]},{"name":"bytbil","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Bytbil Sweden cars","version":"1.0.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/bytbil/v1","spec_available":true,"actions":[{"name":"search","description":"Search public passenger-car listings using the source native text query.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Native FreeText keyword, such as volvo or toyota.","on_invalid":"reject","example":"volvo"},{"name":"page","type":"integer","required":false,"description":"Native page 1/2 only.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Truncate the native page; advancing skips unreturned rows.","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":24}],"returns":"Canonical listing identifiers, source SEK asking price, native vehicle facts and public dealer names; source total and basic paging.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"volvo","page":1,"limit":3}},{"name":"product/detail","description":"Read a public car listing using its canonical search identifier.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Copy results[].id or canonical URL; numeric source_id alone is insufficient.","on_invalid":"reject","example":"dalarnas-lan/personbil-xc60-b4-awd-inscription-orrefors-360-voc-drag-varmare-hud-8540-19436631"}],"returns":"Primary SEK asking price, full published description, equipment, vehicle specifications and public dealer profile.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"dalarnas-lan/personbil-xc60-b4-awd-inscription-orrefors-360-voc-drag-varmare-hud-8540-19436631"}}]},{"name":"car-gr","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Car.gr Greece used cars","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/car-gr/v1","spec_available":true,"actions":[{"name":"search","description":"Search public used-car sale listings with native free-text query.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Native text query; basic keyword search.","on_invalid":"reject","example":"toyota"},{"name":"page","type":"integer","required":false,"description":"Native page 1/2 only.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Truncate the native page; advancing skips remaining rows.","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":24}],"returns":"Canonical listing id, EUR asking price and explicit VAT exclusion flag, source attributes and native paging.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"toyota","page":1,"limit":3}},{"name":"product/detail","description":"Read the canonical car listing selected from search.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Copy results[].id or its canonical URL; numeric source_id alone is insufficient.","on_invalid":"reject","example":"56513373-toyota"}],"returns":"Primary asking price with VAT basis, native vehicle specifications, published description and up to three images.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"56513373-toyota"}}]},{"name":"car-rental","category":{"id":"travel","title":"Travel & Lodging"},"title":"Car Rental API (DiscoverCars scraper) — compare rental-car offers & prices from 35+ suppliers across 145 countries, with location resolver, supplier comparison & reviews","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/car-rental/v1","spec_available":true,"actions":[{"name":"cars/search","description":"aggregated rental-car offers for a location + dates → offers[]{vehicle(name/category/ACRISS/transmission/seats/bags/fuel), price{amount,currency}, supplier(name/rating/pickup_address/coords), pickup.type, mileage, fuel_policy, free_cancellation, book_url} + facets. Location via `query` OR explicit place_id/city_id/country_id. One-way via drop_query. Dates pickup_date/dropoff_date (YYYY-MM-DD). Narrow with category/supplier/transmission/max_price/min_supplier_rating/free_cancellation_only filters + sort.","required_params":[],"optional_params":["query","place_id","city_id","country_id","pickup_date","dropoff_date","pickup_time","dropoff_time","currency","residence_country","driver_age","drop_query","drop_place_id","drop_city_id","drop_country_id","max_offers","include_facets","prefer_airport","category","supplier","transmission","min_seats","max_price","min_supplier_rating","free_cancellation_only","unlimited_mileage_only","sort","include_supplier_summary"],"params":[{"name":"query","type":"string","required":false,"description":"Pickup location to resolve (city / airport name). Provide this OR an explicit place_id + city_id + country_id.","on_invalid":"ignore","example":"Madrid Airport"},{"name":"place_id","type":"string","required":false,"description":"Explicit DiscoverCars place id (from cars/autocomplete). Use together with city_id + country_id to skip resolution.","on_invalid":"ignore","example":"123456"},{"name":"city_id","type":"string","required":false,"description":"Explicit DiscoverCars city id (pairs with place_id + country_id).","on_invalid":"ignore","example":"789"},{"name":"country_id","type":"string","required":false,"description":"Explicit DiscoverCars country id (pairs with place_id + city_id).","on_invalid":"ignore","example":"45"},{"name":"pickup_date","type":"string","required":false,"description":"Pickup date (YYYY-MM-DD). Defaults to ~30 days out if omitted.","on_invalid":"ignore","example":"2026-12-27"},{"name":"dropoff_date","type":"string","required":false,"description":"Drop-off date (YYYY-MM-DD). Defaults to ~30 days out if omitted.","on_invalid":"ignore","example":"2026-12-30"},{"name":"pickup_time","type":"string","required":false,"description":"Pickup time of day (HH:MM, 24h). Default 10:00.","on_invalid":"ignore","default":"10:00","example":"10:00"},{"name":"dropoff_time","type":"string","required":false,"description":"Drop-off time of day (HH:MM, 24h). Default 10:00.","on_invalid":"ignore","default":"10:00","example":"10:00"},{"name":"currency","type":"string","required":false,"description":"ISO-4217 currency for prices (e.g. EUR, USD, GBP). Default EUR.","on_invalid":"ignore","default":"EUR","example":"EUR"},{"name":"residence_country","type":"string","required":false,"description":"Driver's country of residence (ISO-2, e.g. US, GB) — affects pricing/availability. Default US.","on_invalid":"ignore","default":"US","example":"US"},{"name":"driver_age","type":"integer","required":false,"description":"Driver age (affects young/senior-driver fees). Default 35.","on_invalid":"ignore","default":35,"example":35,"minimum":18,"maximum":99},{"name":"drop_query","type":"string","required":false,"description":"Different drop-off location (city/airport name) for a one-way rental. Omit for same-location return.","on_invalid":"ignore","example":"Barcelona Airport"},{"name":"drop_place_id","type":"string","required":false,"description":"Explicit drop-off place id (one-way; pairs with drop_city_id).","on_invalid":"ignore","example":"654321"},{"name":"drop_city_id","type":"string","required":false,"description":"Explicit drop-off city id (one-way).","on_invalid":"ignore","example":"987"},{"name":"drop_country_id","type":"string","required":false,"description":"Explicit drop-off country id (one-way).","on_invalid":"ignore","example":"45"},{"name":"max_offers","type":"integer","required":false,"description":"Cap the number of offers returned. Omit for all.","on_invalid":"ignore","example":40,"minimum":1},{"name":"include_facets","type":"boolean","required":false,"description":"Include aggregation facets (supplier/category/price buckets) in the response. Default true.","on_invalid":"ignore","default":true,"example":true},{"name":"prefer_airport","type":"boolean","required":false,"description":"When resolving `query` and `drop_query`, prefer the airport location. false picks the city-wide '(all locations)' or downtown entry instead. Default true.","on_invalid":"ignore","default":true,"example":true},{"name":"category","type":"string","required":false,"description":"Filter by vehicle category substring (case-insensitive), e.g. Mini, Economy, Compact, Intermediate, SUV, Luxury, Van. From facets.carGroups.","on_invalid":"ignore","example":"SUV"},{"name":"supplier","type":"string","required":false,"description":"Filter by supplier name substring (case-insensitive), e.g. Avis, Hertz, Sixt, Budget, Enterprise. See the `suppliers` rollup for what's available.","on_invalid":"ignore","example":"Avis"},{"name":"transmission","type":"enum","required":false,"description":"Filter by transmission. One of: automatic, manual.","on_invalid":"ignore","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"}],"example":"automatic"},{"name":"min_seats","type":"integer","required":false,"description":"Only offers with at least this many seats.","on_invalid":"ignore","example":5,"minimum":1},{"name":"max_price","type":"number","required":false,"description":"Only offers whose TOTAL rental price is at or below this (in `currency`).","on_invalid":"ignore","example":200,"minimum":0},{"name":"min_supplier_rating","type":"number","required":false,"description":"Only suppliers rated at or above this score (0-10 scale).","on_invalid":"ignore","example":8.0,"minimum":0,"maximum":10},{"name":"free_cancellation_only","type":"boolean","required":false,"description":"Only offers with free cancellation. Default false.","on_invalid":"ignore","default":false,"example":true},{"name":"unlimited_mileage_only","type":"boolean","required":false,"description":"Only offers with unlimited mileage. Default false.","on_invalid":"ignore","default":false,"example":true},{"name":"sort","type":"enum","required":false,"description":"Sort order. One of: price_asc (default, cheapest first), price_desc, rating_desc (best-rated supplier first).","on_invalid":"ignore","allowed_values":[{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"rating_desc","label":"Supplier rating: high to low"}],"default":"price_asc","example":"price_asc"},{"name":"include_supplier_summary","type":"boolean","required":false,"description":"Include a per-supplier rollup (cheapest price, offer count, rating) in the response. Default true.","on_invalid":"ignore","default":true,"example":true}],"returns":"offers[]{vehicle{name,category,ACRISS,transmission,seats,bags,fuel}, price{amount,currency,daily,rental_days}, supplier{name,rating,pickup_address,coords}, pickup.type, mileage, fuel_policy, free_cancellation, book_url} + suppliers[] (per-supplier cheapest/count/rating), price_range, total_available, facets, pickup_location, dropoff_location, one_way, guid, search_url","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"Madrid Airport","currency":"EUR","pickup_date":"2026-12-27","dropoff_date":"2026-12-30","max_offers":40}},{"name":"cars/autocomplete","description":"resolve a location string (`query`) → place/city/country IDs (for cars/search)","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Location string to resolve into place/city/country IDs.","on_invalid":"reject","example":"London"}],"returns":"results[]{place_id, city_id, country_id, label, is_airport}, count, query","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"London"}},{"name":"cars/reviews","description":"DiscoverCars customer reviews for a location → reviews[]{rating(0-10), text, author, author_country, car_name, date, photos} + average_rating + count. Location via `query` (city/country name; resolved automatically) OR explicit location_url. Filter with min_rating / with_text_only; country_only widens city→country scope.","required_params":[],"optional_params":["query","location_url","country_only","min_rating","with_text_only","max_reviews"],"params":[{"name":"query","type":"string","required":false,"description":"Location (city or country name) to fetch DiscoverCars customer reviews for. Provide this OR an explicit location_url.","on_invalid":"ignore","example":"Madrid"},{"name":"location_url","type":"string","required":false,"description":"Explicit DiscoverCars review slug `country/city` (or `country`), e.g. spain/madrid, usa-california/los-angeles. Skips query resolution.","on_invalid":"ignore","example":"spain/madrid"},{"name":"country_only","type":"boolean","required":false,"description":"Fetch country-wide reviews instead of city-level. Default false (city-level, auto-falls back to country if the city has none).","on_invalid":"ignore","default":false,"example":false},{"name":"min_rating","type":"integer","required":false,"description":"Only reviews rated at or above this (0-10 scale).","on_invalid":"ignore","example":8,"minimum":0,"maximum":10},{"name":"with_text_only","type":"boolean","required":false,"description":"Only reviews that include written text. Default false.","on_invalid":"ignore","default":false,"example":true},{"name":"max_reviews","type":"integer","required":false,"description":"Cap the number of reviews returned. Omit for all (~up to 50 most recent).","on_invalid":"ignore","example":50,"minimum":1}],"returns":"reviews[]{review_id, date, rating, text, author, author_country, car_name, photos, helpful_votes}, count, average_rating, location{country,city,location_url}, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Madrid"}}]},{"name":"cardekho","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"CarDekho — Indian used-car listings, full listing detail, seller stock and filters","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cardekho/v1","spec_available":true,"actions":[{"name":"search","description":"Search CarDekho's live Indian used-car stock — 62,595 listings nationally and 7,001 in New Delhi on 2026-10-01, the same numbers the site prints in its own page title in the same minute — across 677 city surfaces. Every row carries the listing id, the canonical URL, the asking price in rupees WITH the source's own ₹-lakh string beside it, the odometer, year, variant, fuel, gearbox, body type, ownership count, the city and locality, the seller kind and store/dealer id, the photo count and lead image, CarDekho's own AI price verdict, and its EMI estimate kept separate from the price. `total_available` is CarDekho's own count for your exact query, so you can see what each filter did. 🔴 Measured limits you should plan around: one upstream page is 20 rows and no page-size parameter works, so `max_results` above 20 costs one request per extra 20; the default relevance ORDER ROTATES between identical calls (three identical calls shared 11/20 then 19/20 rows), so treat a page as a sample, not a cursor — paging itself does not overlap (80 rows, 80 unique ids over four pages); and CarDekho offers NO working sort, so none is exposed. Filters combine freely (five measured together, each echoed by the source). CarDekho never rejects a value it does not know — it silently drops the filter — so every filter is checked against the source's own echo and one it did not apply is INVALID_PARAM naming it, never a wrong answer. A genuinely empty result is `ok:true` with 0 rows, never an error.","required_params":[],"optional_params":["city","make","model","body_type","fuel_type","transmission","owner","seller_type","premium_seller","badge","seats","colour","rto_state","price_min_lakh","price_max_lakh","km_min","km_max","year_min","year_max","price_drop","max_results","page"],"params":[{"name":"city","type":"string","required":false,"description":"CarDekho city slug, exactly as the site spells it in its own URLs: `new-delhi`, `mumbai`, `bangalore`, `delhi-ncr`, `gautam-buddha-nagar`. `india` (the default) searches the whole country. Call the `cities` action for the site's complete index. Measured in one run: india 62,595, new-delhi 7,001, mumbai 4,887. 🔴 An unknown slug is NOT an error upstream — CarDekho answers HTTP 200 with the national list — so this engine detects that silent fallback and returns INVALID_PARAM instead.","on_invalid":"reject","default":"india","example":"new-delhi","aliases":["location","city_slug"]},{"name":"make","type":"string","required":false,"description":"Brand slug as CarDekho spells it (`maruti`, `hyundai`, `tata`, `mahindra`, `honda`, `toyota`, `kia`, `bmw`, `mercedes-benz`). Sent as the query form that was measured to bite. Measured in New Delhi: `maruti` → 1,364 of 7,001, `hyundai` → 1,114. `filters` with `facet=brand` returns every brand with its live count and its models underneath.","on_invalid":"reject","example":"hyundai","aliases":["brand","oem","manufacturer"]},{"name":"model","type":"string","required":false,"description":"Model slug, which CarDekho writes brand-first: `hyundai-i20`, `maruti-swift`, `maruti-baleno`, `tata-nexon`. Measured: `hyundai-i20` in New Delhi → 167, and with `transmission=automatic` → 31. Combines freely with every other filter (2026-11-05: model + colour + price + km + year measured together, all five echoed by the source). An unknown model is INVALID_PARAM, never the unfiltered list.","on_invalid":"reject","example":"hyundai-i20","aliases":["model_slug"]},{"name":"body_type","type":"enum","required":false,"description":"Body style. Measured in New Delhi: SUV 3,205, hatchback 1,805, sedan 1,484, MUV 423, coupe 32 — each exactly the count CarDekho's own facet prints.","on_invalid":"reject","allowed_values":[{"value":"suv","label":"SUV — 3,205 of 7,001 in New Delhi"},{"value":"hatchback","label":"Hatchback — 1,805"},{"value":"sedan","label":"Sedan — 1,484"},{"value":"muv","label":"MUV / people carrier — 423"},{"value":"coupe","label":"Coupe — 32"},{"value":"minivan","label":"Minivan"},{"value":"convertible","label":"Convertible"},{"value":"pickup","label":"Pickup"},{"value":"wagon","label":"Wagon"}],"example":"suv","aliases":["bt","bodytype"]},{"name":"fuel_type","type":"enum","required":false,"description":"Fuel. Measured in New Delhi: petrol 5,161, diesel 1,311, CNG 430, electric 98, LPG 1 — and 5,161+1,311+430+98+1 = 7,001, exactly the unfiltered total, so the buckets are complete and disjoint.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol — 5,161"},{"value":"diesel","label":"Diesel — 1,311"},{"value":"cng","label":"CNG — 430"},{"value":"electric","label":"Electric — 98"},{"value":"lpg","label":"LPG — 1"}],"example":"diesel","aliases":["fuel","ft"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. Measured in New Delhi: manual 4,033 + automatic 2,968 = 7,001, the unfiltered total exactly.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual — 4,033"},{"value":"automatic","label":"Automatic — 2,968"}],"example":"automatic","aliases":["tt","gearbox"]},{"name":"owner","type":"enum","required":false,"description":"How many previous owners the car has had. Measured in New Delhi: first 5,577, second 1,205, third-or-more 184, unregistered 35 = 7,001.","on_invalid":"reject","allowed_values":[{"value":"first-owner","label":"First owner — 5,577"},{"value":"second-owner","label":"Second owner — 1,205"},{"value":"third-owner-or-more","label":"Third owner or more — 184"},{"value":"unregistered","label":"Unregistered — 35"}],"example":"first-owner","aliases":["ot","ownership","owner_type"]},{"name":"seller_type","type":"enum","required":false,"description":"Who is selling. Measured in New Delhi in one run: partner 3,606 + enterprise 1,513 + direct-owner 1,882 = 7,001, exactly the unfiltered total, so dealer and private stock together account for everything and nothing is double-counted. `direct-owner` is the private-seller surface.","on_invalid":"reject","allowed_values":[{"value":"partner","label":"CarDekho Partner dealer stock — 3,606"},{"value":"enterprise","label":"CarDekho Enterprise stock — 1,513"},{"value":"direct-owner","label":"Direct owner (private seller) — 1,882"}],"example":"direct-owner","aliases":["inventoryType","inventory_type","seller_kind"]},{"name":"premium_seller","type":"enum","required":false,"description":"Restrict to one of the branded resellers CarDekho lists separately. Measured in New Delhi: Cars24 1,093, Spinny 420.","on_invalid":"reject","allowed_values":[{"value":"c24","label":"Cars24 — 1,093"},{"value":"spinny","label":"Spinny — 420"}],"example":"c24","aliases":["premiumSellers","reseller"]},{"name":"badge","type":"enum","required":false,"description":"One of CarDekho's own curated shelves. Measured in New Delhi: certified 466, luxury 1,306.","on_invalid":"reject","allowed_values":[{"value":"certified","label":"CarDekho-certified cars — 466"},{"value":"luxury","label":"Luxury-brand cars — 1,306"}],"example":"certified","aliases":["recommended","shelf"]},{"name":"seats","type":"enum","required":false,"description":"Seating capacity. Measured in New Delhi: 5-seater 5,686, 7-seater 921, 4-seater 199, 6-seater 149, 8-seater 24, 2-seater 10.","on_invalid":"reject","allowed_values":[{"value":"2-seater","label":"2 seats — 10"},{"value":"4-seater","label":"4 seats — 199"},{"value":"5-seater","label":"5 seats — 5,686"},{"value":"6-seater","label":"6 seats — 149"},{"value":"7-seater","label":"7 seats — 921"},{"value":"8-seater","label":"8 seats — 24"}],"example":"5-seater","aliases":["seatingCapacity","seat_count"]},{"name":"colour","type":"enum","required":false,"description":"Exterior colour. Measured in New Delhi: white 1,915, grey 827, silver 712, black 700, blue 481, red 322.","on_invalid":"reject","allowed_values":[{"value":"white","label":"White — 1,915"},{"value":"grey","label":"Grey — 827"},{"value":"silver","label":"Silver — 712"},{"value":"black","label":"Black — 700"},{"value":"blue","label":"Blue — 481"},{"value":"red","label":"Red — 322"},{"value":"brown","label":"Brown — 156"},{"value":"green","label":"Green — 56"},{"value":"orange","label":"Orange"},{"value":"yellow","label":"Yellow"},{"value":"maroon","label":"Maroon"},{"value":"purple","label":"Purple"},{"value":"gold","label":"Gold"}],"example":"white","aliases":["color"]},{"name":"rto_state","type":"string","required":false,"description":"Two-letter Indian state code of the car's RTO registration, as CarDekho writes it: `dl`, `hr`, `up`, `mh`, `ka`, `tn`, `gj`, `pb`. Measured in New Delhi: dl 4,505, hr 1,335, up 811, ch 104. `filters` with `facet=rto` returns the states present in a city with live counts.","on_invalid":"reject","example":"dl","aliases":["rto","state"]},{"name":"price_min_lakh","type":"number","required":false,"description":"Lowest asking price in LAKH of rupees (1 lakh = ₹100,000). Sent as the source's own band grammar. Measured in New Delhi: 3–5 lakh → 1,476 (exactly the count the site's own band prints), 4–7 → 1,849, 6–9 → 1,198. Arbitrary bounds work, not only the site's published bands — that was measured.","on_invalid":"reject","example":3,"minimum":0,"aliases":["min_price_lakh","price_from_lakh"]},{"name":"price_max_lakh","type":"number","required":false,"description":"Highest asking price in LAKH of rupees. Omit for no upper bound (the source's own ceiling of 500 lakh = ₹5 crore is used).","on_invalid":"reject","example":8,"minimum":0,"aliases":["max_price_lakh","price_to_lakh"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres. Measured in New Delhi: 10,000–45,000 → 2,519; 0–45,000 → 2,853; 0–20,000 → 1,023.","on_invalid":"reject","example":10000,"minimum":0,"aliases":["min_km","km_from","mileage_min"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres. Omit for no upper bound (the source's own slider ceiling of 200,000 km is used).","on_invalid":"reject","example":45000,"minimum":0,"aliases":["max_km","km_to","mileage_max"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest manufacturing year. Sent as the source's own age band. Measured in New Delhi: 2023–2026 → 1,948 (the site's own \"less than 3 years old\" count), 2019–2022 → 2,634, 2021–2026 → 3,476. The source's own slider spans 2002–2026.","on_invalid":"reject","example":2019,"minimum":1980,"maximum":2030,"aliases":["min_year","year_from","model_year_min"]},{"name":"year_max","type":"integer","required":false,"description":"Latest manufacturing year. Omit for no upper bound (the source's own ceiling of 2026 is used).","on_invalid":"reject","example":2022,"minimum":1980,"maximum":2030,"aliases":["max_year","year_to","model_year_max"]},{"name":"price_drop","type":"enum","required":false,"description":"Only cars whose asking price CarDekho has cut. Measured in New Delhi: any drop 409, up to ₹20,000 106, up to ₹50,000 258, up to ₹1,00,000 339, above ₹1,00,000 70.","on_invalid":"reject","allowed_values":[{"value":"discount-upto-20000","label":"Price dropped by up to ₹20,000 — 106"},{"value":"discount-upto-50000","label":"Price dropped by up to ₹50,000 — 258"},{"value":"discount-upto-100000","label":"Price dropped by up to ₹1,00,000 — 339"},{"value":"discount-above-100000","label":"Price dropped by more than ₹1,00,000 — 70"},{"value":"discount-all","label":"Any price drop — 409"}],"example":"discount-all","aliases":["discount"]},{"name":"max_results","type":"integer","required":false,"description":"How many listings to return, 1–100. 🔴 CarDekho serves exactly 20 rows per page and ignores every page-size parameter probed (`size`, `pageSize`, `from`), so each extra 20 rows is one more upstream request; `meta.extra.upstream_requests` reports how many were spent.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","count"]},{"name":"page","type":"integer","required":false,"description":"1-based page of 20 to start from. Measured: pages 1–4 of the national surface returned 80 rows and 80 unique ids, overlap 0. Paging past the last page the source's own total allows is refused here rather than returning the filler rows CarDekho answers with (measured on page 3200 of 3130).","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["page_number","offset_page"]}],"returns":"{results[], total_available, returned, page, page_rows, pages_available, city, applied_filters[], order_is_stable, currency} — each result: listing_id, listing_number, url, title, make, model, model_name, variant, year, price_inr, price_display, msp_inr, price_saving, km_driven, km_text, fuel_type, transmission, body_type, owner_number, owner_text, city, city_id, locality, seller{kind, inventory_type, store_id, dealer_id, name, map_link}, image, image_count, is_certified, is_promoted, has_360_view, price_verdict, price_notes[], trust_tags[], emi{monthly_inr, interest_rate_pct, months}.","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":3},"example_params":{"city":"new-delhi","max_results":20}},{"name":"detail","description":"One used-car listing in full, from CarDekho's own listing page state: the asking price in rupees, the overview table as the site groups it (registration year, insurance, seats, kms, RTO, ownership, engine displacement, transmission, year of manufacture), the complete manufacturer spec tree in the source's own four groups (engine & transmission, fuel & performance, suspension/steering/brakes, dimensions & capacity), the feature tree in its five groups, the whole photo gallery, CarDekho's own written summary and price verdict, its reasons-to-buy badges, the store's address and coordinates, and the published WhatsApp route. 🔴 Three further prices are returned under their own names and never as the asking price: the equivalent NEW model's on-road price (measured 2.2× the used price on the same page), the new model's floor price, and CarDekho's average for similar cars. 🔴 A dead id is a soft-404 upstream — HTTP 200 after a redirect to the index — so this action verifies the id came back and returns NOT_FOUND when it did not. CarDekho publishes no VIN and no registration number on this surface; those fields are null, not invented.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The listing's `listing_id` from `search` — CarDekho's own `usedCarSkuId`, a UUID. The slug in the site's URL is decoration: a wrong slug with the right UUID returns the same car (measured). A full detail URL is accepted too; the UUID is taken out of it.","on_invalid":"reject","example":"1cd8c03c-1082-4a89-9819-59326e1fb2b3","value_pattern":"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}","aliases":["id","sku_id","url"]}],"returns":"One listing object: every search field plus overview[], specs[] (grouped label/value), features[] (grouped), images[], image_count, summary, price_verdict, price_notes[], reasons_to_buy[], registration_year, insurance, rto_code, new_model_on_road_price_inr, new_model_price_from_inr, similar_cars_average_price_inr, seller{store_id, dealer_id, locality, address, latitude, longitude, whatsapp_url, kind, inventory_type}, is_inactive, is_booked.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"1cd8c03c-1082-4a89-9819-59326e1fb2b3"}},{"name":"dealer_stock","description":"Every used car one CarDekho seller currently lists, by the `store_id` that `search` and `detail` return. Measured: one New Delhi store → 27 cars out of the city's 7,001, with the same row shape as `search`, PLUS the seller's own trading name, street address, pincode and coordinates, which CarDekho publishes on this surface and nowhere else. 🔴 CarDekho swallows an unknown store id and answers with the whole city instead, so this action refuses a result whose total equals the unfiltered city total and returns NOT_FOUND — you will never be handed a city's worth of cars as if they were one seller's.","required_params":["dealer_id"],"optional_params":["city","max_results","page"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"A seller's `seller.store_id` from `search` or `detail` — CarDekho's own 32-character store id. Measured: one store → 27 cars of the city's 7,001. 🔴 An unknown id is swallowed upstream (it returns the whole city), so this action refuses that answer and returns NOT_FOUND.","on_invalid":"reject","example":"D2F08B71AD004A4C82C7E5B7EC1E2529","aliases":["store_id","dealerId"]},{"name":"city","type":"string","required":false,"description":"CarDekho city slug, exactly as the site spells it in its own URLs: `new-delhi`, `mumbai`, `bangalore`, `delhi-ncr`, `gautam-buddha-nagar`. `india` (the default) searches the whole country. Call the `cities` action for the site's complete index. Measured in one run: india 62,595, new-delhi 7,001, mumbai 4,887. 🔴 An unknown slug is NOT an error upstream — CarDekho answers HTTP 200 with the national list — so this engine detects that silent fallback and returns INVALID_PARAM instead.","on_invalid":"reject","default":"india","example":"new-delhi","aliases":["location","city_slug"]},{"name":"max_results","type":"integer","required":false,"description":"How many listings to return, 1–100. 🔴 CarDekho serves exactly 20 rows per page and ignores every page-size parameter probed (`size`, `pageSize`, `from`), so each extra 20 rows is one more upstream request; `meta.extra.upstream_requests` reports how many were spent.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","count"]},{"name":"page","type":"integer","required":false,"description":"1-based page of 20 to start from. Measured: pages 1–4 of the national surface returned 80 rows and 80 unique ids, overlap 0. Paging past the last page the source's own total allows is refused here rather than returning the filler rows CarDekho answers with (measured on page 3200 of 3130).","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["page_number","offset_page"]}],"returns":"{results[], total_available, returned, page, dealer_id, city, seller{store_id, name, address, pincode, latitude, longitude}} — rows identical in shape to `search`. 🔴 This is the ONE surface where CarDekho publishes the seller's TRADING NAME and street address (it ships them in its own `storeDetails` block); a search row carries only the store id.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"dealer_id":"D2F08B71AD004A4C82C7E5B7EC1E2529"}},{"name":"filters","description":"CarDekho's live filter vocabulary for one city, straight off the search page's own state — 15 facets, every value with the number of live listings behind it, including the whole brand → model tree (`facet=brand` returned Maruti Suzuki 1,364 with Baleno 200, Swift 183, Wagon R 181 underneath in New Delhi). This is the action to call before a `search`: it tells you the exact slugs this engine's enums accept, which brands and models actually have stock in that city, and how big a result each value will give. One upstream request.","required_params":[],"optional_params":["city","facet"],"params":[{"name":"city","type":"string","required":false,"description":"CarDekho city slug, exactly as the site spells it in its own URLs: `new-delhi`, `mumbai`, `bangalore`, `delhi-ncr`, `gautam-buddha-nagar`. `india` (the default) searches the whole country. Call the `cities` action for the site's complete index. Measured in one run: india 62,595, new-delhi 7,001, mumbai 4,887. 🔴 An unknown slug is NOT an error upstream — CarDekho answers HTTP 200 with the national list — so this engine detects that silent fallback and returns INVALID_PARAM instead.","on_invalid":"reject","default":"india","example":"new-delhi","aliases":["location","city_slug"]},{"name":"facet","type":"enum","required":false,"description":"Which filter vocabulary to return. Omit for all 15. Every value comes back with the number of live listings behind it in that city, so a query can be sized before it is run. `facet=brand` returns the whole brand → model tree.","on_invalid":"reject","allowed_values":[{"value":"brand","label":"Brand → model tree with a live count on every node"},{"value":"bt","label":"Body type"},{"value":"fuel","label":"Fuel type"},{"value":"tt","label":"Transmission"},{"value":"ot","label":"Ownership"},{"value":"color","label":"Colour"},{"value":"rto","label":"RTO state"},{"value":"seatingCapacity","label":"Seats"},{"value":"inventoryType","label":"Seller type"},{"value":"premiumSellers","label":"Branded resellers present in this city"},{"value":"price","label":"Published price bands"},{"value":"km","label":"Published odometer bands"},{"value":"makeYear","label":"Published age bands"},{"value":"discount","label":"Price-drop bands"},{"value":"recommended","label":"The site's own curated shelves"}],"example":"brand","aliases":["name","field"]}],"returns":"{city, total_available, facets{<name>: {label, values:[{label, value, count, models[]}]}}, price_bands[], sort_options[]} — sort_options is what the site's own dropdown offers; none of it is accepted as a parameter, because none of it was measured to work.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"city":"new-delhi","facet":"brand"}},{"name":"cities","description":"CarDekho's own index of the cities that have a used-car surface — 677 English city slugs read from the site's own used-car city sitemap on 2026-10-01. Each entry is the slug to pass as `city` plus the canonical URL. Call this once and cache it: it is the list that keeps you out of the silent wrong door, because an unknown slug makes CarDekho answer with the national list instead of an error.","required_params":[],"optional_params":[],"params":[],"returns":"{cities[{slug, url}], returned}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{}}]},{"name":"cardkingdom","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Card Kingdom API — Magic: The Gathering singles prices from cardkingdom.com, the largest US MTG store: sell price and stock for every condition (NM, EX, VG, G) of every printing, foil and non-foil, and the buylist — what Card Kingdom pays for a card in cash and in store credit. Search by name, edition, rarity, colour, type, format and price; one card in full; the buylist; every edition. Prices in USD. No login, no key.","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cardkingdom/v1","spec_available":true,"actions":[{"name":"search","description":"Search Card Kingdom's Magic singles: each row is one printing in one finish with its sell price and stock per condition (NM / EX / VG / G). Give `query` or `edition` (or both). Non-foil by default; foil=true for the foil printings.","required_params":[],"optional_params":["query","edition","rarity","foil","color","card_type","format","in_stock_only","min_price","max_price","sort","per_page","page"],"params":[{"name":"query","type":"string","required":false,"description":"Card name, or any words of it (the site matches partial words: 'shiv drag' finds Shivan Dragon). Optional when `edition` is given.","on_invalid":"reject","example":"lightning bolt","aliases":["q","name","keyword"]},{"name":"edition","type":"string","required":false,"description":"Only one edition: an `edition_slug` from the `sets` action or a row (2011-core-set, modern-horizons-3, secret-lair). Search treats it as a set family and also returns related printings (foundations also brings foundations-variants, foundations-jumpstart, promo-pack, special-guests rows); each row has its own edition_slug and meta counts this page's rows_from_related_editions. An unknown slug is rejected with INVALID_PARAM.","on_invalid":"reject","example":"2011-core-set","value_pattern":"[a-z0-9][a-z0-9-]{0,150}","aliases":["set","edition_slug"]},{"name":"rarity","type":"array","required":false,"description":"Only these rarities (one or more): M mythic, R rare, U uncommon, C common, L basic land, S special.","on_invalid":"reject","allowed_values":[{"value":"M","label":"Mythic"},{"value":"R","label":"Rare"},{"value":"U","label":"Uncommon"},{"value":"C","label":"Common"},{"value":"L","label":"Basic Land"},{"value":"S","label":"Special"}],"example":["M"]},{"name":"foil","type":"boolean","required":false,"description":"true = the foil printings (the site's Foils tab); false = non-foil.","on_invalid":"reject","default":false,"example":true},{"name":"color","type":"enum","required":false,"description":"Only cards of one casting colour (the site's colour box).","on_invalid":"reject","allowed_values":[{"value":"W","label":"White"},{"value":"U","label":"Blue"},{"value":"B","label":"Black"},{"value":"R","label":"Red"},{"value":"G","label":"Green"},{"value":"C","label":"Colorless"}],"example":"R"},{"name":"card_type","type":"enum","required":false,"description":"Only one card type.","on_invalid":"reject","allowed_values":[{"value":"Artifact","label":"Artifact"},{"value":"Battle","label":"Battle"},{"value":"Creature","label":"Creature"},{"value":"Enchantment","label":"Enchantment"},{"value":"Instant","label":"Instant"},{"value":"Kindred","label":"Kindred (Tribal)"},{"value":"Land","label":"Land"},{"value":"Legendary","label":"Legendary"},{"value":"Planeswalker","label":"Planeswalker"},{"value":"Sorcery","label":"Sorcery"}],"example":"Creature","aliases":["type"]},{"name":"format","type":"enum","required":false,"description":"Only cards legal in one format.","on_invalid":"reject","allowed_values":[{"value":"commander","label":"Commander"},{"value":"standard","label":"Standard"},{"value":"pioneer","label":"Pioneer"},{"value":"modern","label":"Modern"},{"value":"premodern","label":"Premodern"},{"value":"legacy","label":"Legacy"},{"value":"vintage","label":"Vintage"},{"value":"pauper","label":"Pauper"},{"value":"brawl","label":"Brawl"}],"example":"modern"},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only cards with at least one condition in stock.","on_invalid":"reject","default":false,"example":true},{"name":"min_price","type":"number","required":false,"description":"Only cards priced at or above this many US dollars. The site takes one price bound per search: give min_price OR max_price, not both.","on_invalid":"reject","example":10,"minimum":0,"maximum":100000},{"name":"max_price","type":"number","required":false,"description":"Only cards priced at or below this many US dollars (one bound per search, see min_price).","on_invalid":"reject","example":1,"minimum":0,"maximum":100000},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Most popular first (the site's default)"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"},{"value":"price_asc","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"}],"default":"popularity","example":"price_desc"},{"name":"per_page","type":"enum","required":false,"description":"Rows per page: 25, 50 or 100.","on_invalid":"reject","allowed_values":[{"value":25,"label":"25 rows (the site's default)"},{"value":50,"label":"50 rows"},{"value":100,"label":"100 rows"}],"default":25,"example":50,"aliases":["limit"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the call answers with no rows and `has_more: false`.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":400}],"returns":"rows[]: id (Card Kingdom product id), path (give it to `card`), url, name, variation, edition, edition_slug, rarity, rarity_name, collector_number, foil (the printing is foil, read from the site's own foil picture overlay, so foil-only printings such as Kaladesh Inventions are true even on the non-foil tab), listed_as_foil (on the site's Foils tab), mana_cost, type_line, power_toughness, rules_text, image, price_nm_usd, in_stock, cheapest_in_stock{condition, price_usd}, conditions[NM, EX, VG, G]: {condition, condition_name, price_usd, price_printed_usd, in_stock, qty_available (copies on the shelf in this condition: the printed 'N available', also the most one order can take), stock_qty (the same shelf count read from the page's hidden maxQty; equal to qty_available since the site dropped its 8/20/40 display cap — kept for compatibility, no separate larger count exists)}. meta: total (the tab's own count), total_nonfoil, total_foil, page, per_page, has_more, past_last_page, rows_from_related_editions (rows on this page from editions the source groups with `edition`), edition_match, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"lightning bolt"}},{"name":"card","description":"One printing in one finish, in full: the sell price and stock of every condition, edition, rarity, collector number, mana cost, type, rules text, power/toughness and the card's other printings at Card Kingdom.","required_params":["path"],"optional_params":[],"params":[{"name":"path","type":"string","required":true,"description":"`path` of a search or buylist row, as is (mtg/<edition>/<card>; a foil printing ends in -foil). A cardkingdom.com/mtg/... URL is also accepted.","on_invalid":"reject","example":"mtg/2011-core-set/lightning-bolt","aliases":["url","card"]}],"returns":"card{id, name, variation, heading, edition, edition_slug, rarity, rarity_name, collector_number, foil, listed_as_foil, type_line, mana_cost, power_toughness, rules_text, details{}, image, price_nm_usd, in_stock, cheapest_in_stock, conditions[NM, EX, VG, G]: {condition, condition_name, price_usd, price_printed_usd, in_stock, qty_available (copies on the shelf in this condition: the printed 'N available', also the most one order can take), stock_qty (the same shelf count read from the page's hidden maxQty; equal to qty_available since the site dropped its 8/20/40 display cap — kept for compatibility, no separate larger count exists)}, other_printings[{path, edition, collector_number}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"path":"mtg/2011-core-set/lightning-bolt"}},{"name":"buylist","description":"Card Kingdom's buylist: what it pays for a card (Near Mint) in cash and, separately, in store credit, and how many copies it will buy. Give `query` or `edition` (or both).","required_params":[],"optional_params":["query","edition","rarity","finish","format","min_price","max_price","sort","per_page","page"],"params":[{"name":"query","type":"string","required":false,"description":"Card name, or any words of it (the site matches partial words: 'shiv drag' finds Shivan Dragon). Optional when `edition` is given.","on_invalid":"reject","example":"lightning bolt","aliases":["q","name","keyword"]},{"name":"edition","type":"string","required":false,"description":"Only one edition: an `edition_slug` from the `sets` action or a row. On the buylist the match is exact (unlike search): foundations lists Foundations printings only; foundations-variants, foundations-jumpstart etc. are separate calls. An unknown slug is rejected with INVALID_PARAM.","on_invalid":"reject","example":"2011-core-set","value_pattern":"[a-z0-9][a-z0-9-]{0,150}","aliases":["set","edition_slug"]},{"name":"rarity","type":"array","required":false,"description":"Only these rarities (one or more): M mythic, R rare, U uncommon, C common, L basic land, S special.","on_invalid":"reject","allowed_values":[{"value":"M","label":"Mythic"},{"value":"R","label":"Rare"},{"value":"U","label":"Uncommon"},{"value":"C","label":"Common"},{"value":"L","label":"Basic Land"},{"value":"S","label":"Special"}],"example":["M"]},{"name":"finish","type":"enum","required":false,"description":"Which finishes the buylist covers.","on_invalid":"reject","allowed_values":[{"value":"both","label":"Non-foil and foil (the site's default)"},{"value":"nonfoil","label":"Non-foil only"},{"value":"foil","label":"Foil only"}],"default":"both","example":"foil"},{"name":"format","type":"enum","required":false,"description":"Only cards legal in one format.","on_invalid":"reject","allowed_values":[{"value":"commander","label":"Commander"},{"value":"standard","label":"Standard"},{"value":"pioneer","label":"Pioneer"},{"value":"modern","label":"Modern"},{"value":"premodern","label":"Premodern"},{"value":"legacy","label":"Legacy"},{"value":"vintage","label":"Vintage"},{"value":"pauper","label":"Pauper"},{"value":"brawl","label":"Brawl"}],"example":"modern"},{"name":"min_price","type":"number","required":false,"description":"Only cards Card Kingdom pays at least this many US dollars cash for (one bound per call: min_price OR max_price).","on_invalid":"reject","example":5,"minimum":0,"maximum":100000},{"name":"max_price","type":"number","required":false,"description":"Only cards Card Kingdom pays at most this many US dollars cash for.","on_invalid":"reject","example":1,"minimum":0,"maximum":100000},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Most popular first (the site's default)"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"},{"value":"price_asc","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"}],"default":"popularity","example":"price_desc"},{"name":"per_page","type":"enum","required":false,"description":"Rows per page: 25, 50 or 100.","on_invalid":"reject","allowed_values":[{"value":25,"label":"25 rows (the site's default)"},{"value":50,"label":"50 rows"},{"value":100,"label":"100 rows"}],"default":25,"example":50,"aliases":["limit"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the call answers with no rows and `has_more: false`.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":400}],"returns":"rows[]: id, path, url, name, variation, edition, edition_slug, rarity, rarity_name, collector_number, foil, listed_as_foil, type_line, power_toughness, rules_text, image, buy_condition (NM), buy_price_cash_usd, buy_price_credit_usd (store credit — not cash), credit_to_cash_ratio, buy_max_qty. meta: total, total_is_capped, page, per_page, has_more, past_last_page, rows_from_related_editions (0 by design: the buylist's edition match is exact), edition_match, filters_applied, warnings, price_basis.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"lightning bolt"}},{"name":"sets","description":"Every Magic edition Card Kingdom lists, A-Z, with the slug `search` and `buylist` take as `edition`.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: edition_slug, name, url, icon","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}}]},{"name":"cardlabo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Card Labo API — Japanese trading-card shop chain カードラボ (c-labo-online.jp): selling prices and stock for single cards, graded slabs and sealed product across about 30 games, and the shop's buy-back prices (買取価格) with how many it still wants. JPY, Japanese titles kept. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cardlabo/v1","spec_available":true,"actions":[{"name":"search","description":"Search Card Labo's online shop by name or card number, game, category or curated list; only what is available, sorted by price. Each row carries the yen price, stock count and availability, and the card's rarity and number.","required_params":[],"optional_params":["keyword","game","category_id","group_id","in_stock","sort","page","per_page"],"params":[{"name":"keyword","type":"string","required":false,"description":"Card name or card number as the shop writes it, in Japanese or kana (リザードン, りざーどん); several words narrow it (リザードン SAR); a card number such as IMPH-JP018 or 110/080 also matches. English names do not match: titles are Japanese.","on_invalid":"reject","example":"リザードン","aliases":["query","q","name"]},{"name":"game","type":"enum","required":false,"description":"Limit to one game (also accepted: ポケカ, 遊戯王, ワンピ, デュエマ, ygo, op, dm). Most games are scoped by their own category; Pokémon, Yu-Gi-Oh!, Weiß Schwarz, Vanguard and Battle Spirits span several, so there the rows are checked and meta.total can be an estimate. For sealed product use category_id.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"yugioh_rush","label":"遊戯王ラッシュデュエル — Yu-Gi-Oh! Rush Duel"},{"value":"yugioh","label":"遊戯王OCG — Yu-Gi-Oh! OCG (Japanese)"},{"value":"one_piece","label":"ONE PIECEカードゲーム — ONE PIECE Card Game"},{"value":"weiss_rose","label":"ヴァイスシュヴァルツ ロゼ — Weiß Schwarz Rose"},{"value":"weiss_blau","label":"ヴァイスシュヴァルツ ブラウ — Weiß Schwarz Blau"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"mtg","label":"マジック：ザ・ギャザリング — Magic: The Gathering"},{"value":"duel_masters","label":"デュエル・マスターズ — Duel Masters"},{"value":"love_live","label":"ラブライブ！OCG — Love Live! Official Card Game"},{"value":"godzilla","label":"ゴジラカードゲーム — Godzilla Card Game"},{"value":"vanguard","label":"カードファイト!! ヴァンガード — Cardfight!! Vanguard"},{"value":"battle_spirits","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"union_arena","label":"UNION ARENA — UNION ARENA"},{"value":"dragon_ball_fw","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Fusion World"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"gundam","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"lorcana","label":"ディズニー・ロルカナ — Disney Lorcana"},{"value":"shadowverse_evolve","label":"シャドウバース エボルヴ — Shadowverse: Evolve"},{"value":"conan","label":"名探偵コナン TCG — Detective Conan TCG"},{"value":"ultraman","label":"ウルトラマン カードゲーム — Ultraman Card Game"},{"value":"final_fantasy","label":"FF-TCG — Final Fantasy TCG"},{"value":"buildivide_bright","label":"ビルディバイド -ブライト- — Build Divide Bright"},{"value":"buildivide","label":"ビルディバイド — Build Divide"},{"value":"lycee","label":"Lycee Overture — Lycee Overture"},{"value":"osica","label":"OSICA — OSICA"},{"value":"dream_order","label":"プロ野球カードゲーム DREAM ORDER — Pro Baseball Dream Order"},{"value":"fan_stars","label":"プロ野球 ファンスターズリーグ — Pro Baseball Fan Stars League"},{"value":"kiseki","label":"軌跡 TRADING CARD GAME — Trails Trading Card Game"},{"value":"kamitsubaki","label":"KAMITSUBAKI CARD GAME — Kamitsubaki Card Game"},{"value":"xross_stars","label":"Xross Stars — Xross Stars"},{"value":"animal","label":"アニマルカードゲーム — Animal Card Game"},{"value":"nivel_arena","label":"NIVEL ARENA — NIVEL ARENA"},{"value":"haikyu","label":"ハイキュー!!バボカ!!BREAK — Haikyu!! Baboka Break"},{"value":"harry_potter","label":"ハリー・ポッター カードゲーム — Harry Potter Card Game"},{"value":"palworld","label":"PALWORLD OFFICIAL CARD GAME — Palworld Official Card Game"},{"value":"wuthering_waves","label":"鳴潮：対決 — Wuthering Waves: Duel"},{"value":"kaiun","label":"開運コロシアム — Kaiun Colosseum"},{"value":"gotoubun","label":"五等分の花嫁 カードゲーム — The Quintessential Quintuplets Card Game"},{"value":"mememe","label":"めめめのくらげ TCG — Mememe no Kurage TCG"},{"value":"force_of_the_horse","label":"Force of the Horse — Force of the Horse"}],"example":"pokemon"},{"name":"category_id","type":"string","required":false,"description":"One shop category (a game series, set or rarity list); the `categories` action lists them. Ids differ between the shop and the buy-back site. On the buy-back site it cannot be combined with keyword.","on_invalid":"reject","example":"2479"},{"name":"group_id","type":"string","required":false,"description":"One curated list (特価コーナー, PSA/PCG graded ...); the `categories` action lists them under groups. On the buy-back site it cannot be combined with keyword.","on_invalid":"reject","example":"2527"},{"name":"in_stock","type":"boolean","required":false,"description":"Only what can be ordered now (the shop's own 在庫あり filter, which includes open pre-orders). Off by default, as on the site, which also lists sold-out items.","on_invalid":"reject","default":false,"example":true,"aliases":["in_stock_only","available"]},{"name":"sort","type":"enum","required":false,"description":"Order of the rows.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The shop's own order (best keyword match for a keyword search)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"}],"default":"default","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100000},{"name":"per_page","type":"integer","required":false,"description":"Rows per page: 60 or 120, the two sizes the shop has.","on_invalid":"reject","default":60,"example":120,"minimum":60,"maximum":120}],"returns":"rows[]: id (give it to `card` / `buyback_card`), game, name (the shop's title, Japanese kept), card_name, card_number (as printed, including the shop's + / ++ printing marks), set{id, name, code}, rarity, rarity_raw (the bracket as printed), variant (card type or treatment), product_type (single, graded_single, sealed, sealed_box, oripa, supply, bulk_lot, other), condition (the marking in the title, or 中古良品 for a single with none, the shop's stated rule), is_preorder, is_play_grade, is_foil, graded, grader, grade, release_date, release_note, image, url, currency (JPY), price_includes_tax (true), price_jpy (null when withheld), price_members_only, in_stock (the shop's 在庫あり, open pre-orders included), stock (null when the shop shows no count), stock_unit, availability (in_stock, sold_out, accepting_orders, unknown), stock_text. meta: total (the shop's own count), page, per_page, last_page, has_more, sort, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon","keyword":"リザードン","in_stock":true}},{"name":"card","description":"One Card Labo product in full: price, stock, purchase limit, the set and category it is filed under, its stated condition and images, plus what the shop pays to buy the same card back when the buy-back site lists it.","required_params":["product_id"],"optional_params":["include_buyback"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Card Labo product id (a search row's `id`) or a c-labo-online.jp product URL.","on_invalid":"reject","example":"209603","aliases":["id","url"]},{"name":"include_buyback","type":"boolean","required":false,"description":"Also look the card up on the buy-back site and return what the shop pays for it (one more page). Matched on the identical title only.","on_invalid":"reject","default":true,"example":false}],"returns":"card{id (give it to `card` / `buyback_card`), game, name (the shop's title, Japanese kept), card_name, card_number (as printed, including the shop's + / ++ printing marks), set{id, name, code}, rarity, rarity_raw (the bracket as printed), variant (card type or treatment), product_type (single, graded_single, sealed, sealed_box, oripa, supply, bulk_lot, other), condition (the marking in the title, or 中古良品 for a single with none, the shop's stated rule), is_preorder, is_play_grade, is_foil, graded, grader, grade, release_date, release_note, image, url, currency (JPY), price_includes_tax (true), price_jpy (null when withheld), price_members_only, in_stock (the shop's 在庫あり, open pre-orders included), stock (null when the shop shows no count), stock_unit, availability (in_stock, sold_out, accepting_orders, unknown), stock_text, member_price_jpy (the member price when the shop withholds price_jpy; null otherwise), categories[]{id, name}, description, max_per_order}, buyback{match (exact, none, not_applicable, unavailable), id, buyback_price_jpy, buyback_status, buyback_wanted_qty, url}, buyback_candidates[] (same printed number on the buy-back site when the title is not identical).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"209603","include_buyback":false}},{"name":"buyback_search","description":"Card Labo's buy-back list (買取): what the shop pays for each card and how many it still wants, by name or card number, game, category or curated list, highest price first if you like.","required_params":[],"optional_params":["keyword","game","category_id","group_id","sort","page","per_page"],"params":[{"name":"keyword","type":"string","required":false,"description":"Card name or card number as the shop writes it, in Japanese or kana (リザードン, りざーどん); several words narrow it (リザードン SAR); a card number such as IMPH-JP018 or 110/080 also matches. English names do not match: titles are Japanese.","on_invalid":"reject","example":"リザードン","aliases":["query","q","name"]},{"name":"game","type":"enum","required":false,"description":"Limit to one game (also accepted: ポケカ, 遊戯王, ワンピ, デュエマ, ygo, op, dm). Most games are scoped by their own category; Pokémon, Yu-Gi-Oh!, Weiß Schwarz, Vanguard and Battle Spirits span several, so there the rows are checked and meta.total can be an estimate. For sealed product use category_id.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"yugioh_rush","label":"遊戯王ラッシュデュエル — Yu-Gi-Oh! Rush Duel"},{"value":"yugioh","label":"遊戯王OCG — Yu-Gi-Oh! OCG (Japanese)"},{"value":"one_piece","label":"ONE PIECEカードゲーム — ONE PIECE Card Game"},{"value":"weiss_rose","label":"ヴァイスシュヴァルツ ロゼ — Weiß Schwarz Rose"},{"value":"weiss_blau","label":"ヴァイスシュヴァルツ ブラウ — Weiß Schwarz Blau"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"mtg","label":"マジック：ザ・ギャザリング — Magic: The Gathering"},{"value":"duel_masters","label":"デュエル・マスターズ — Duel Masters"},{"value":"love_live","label":"ラブライブ！OCG — Love Live! Official Card Game"},{"value":"godzilla","label":"ゴジラカードゲーム — Godzilla Card Game"},{"value":"vanguard","label":"カードファイト!! ヴァンガード — Cardfight!! Vanguard"},{"value":"battle_spirits","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"union_arena","label":"UNION ARENA — UNION ARENA"},{"value":"dragon_ball_fw","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Fusion World"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"gundam","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"lorcana","label":"ディズニー・ロルカナ — Disney Lorcana"},{"value":"shadowverse_evolve","label":"シャドウバース エボルヴ — Shadowverse: Evolve"},{"value":"conan","label":"名探偵コナン TCG — Detective Conan TCG"},{"value":"ultraman","label":"ウルトラマン カードゲーム — Ultraman Card Game"},{"value":"final_fantasy","label":"FF-TCG — Final Fantasy TCG"},{"value":"buildivide_bright","label":"ビルディバイド -ブライト- — Build Divide Bright"},{"value":"buildivide","label":"ビルディバイド — Build Divide"},{"value":"lycee","label":"Lycee Overture — Lycee Overture"},{"value":"osica","label":"OSICA — OSICA"},{"value":"dream_order","label":"プロ野球カードゲーム DREAM ORDER — Pro Baseball Dream Order"},{"value":"fan_stars","label":"プロ野球 ファンスターズリーグ — Pro Baseball Fan Stars League"},{"value":"kiseki","label":"軌跡 TRADING CARD GAME — Trails Trading Card Game"},{"value":"kamitsubaki","label":"KAMITSUBAKI CARD GAME — Kamitsubaki Card Game"},{"value":"xross_stars","label":"Xross Stars — Xross Stars"},{"value":"animal","label":"アニマルカードゲーム — Animal Card Game"},{"value":"nivel_arena","label":"NIVEL ARENA — NIVEL ARENA"},{"value":"haikyu","label":"ハイキュー!!バボカ!!BREAK — Haikyu!! Baboka Break"},{"value":"harry_potter","label":"ハリー・ポッター カードゲーム — Harry Potter Card Game"},{"value":"palworld","label":"PALWORLD OFFICIAL CARD GAME — Palworld Official Card Game"},{"value":"wuthering_waves","label":"鳴潮：対決 — Wuthering Waves: Duel"},{"value":"kaiun","label":"開運コロシアム — Kaiun Colosseum"},{"value":"gotoubun","label":"五等分の花嫁 カードゲーム — The Quintessential Quintuplets Card Game"},{"value":"mememe","label":"めめめのくらげ TCG — Mememe no Kurage TCG"},{"value":"force_of_the_horse","label":"Force of the Horse — Force of the Horse"}],"example":"pokemon"},{"name":"category_id","type":"string","required":false,"description":"One shop category (a game series, set or rarity list); the `categories` action lists them. Ids differ between the shop and the buy-back site. On the buy-back site it cannot be combined with keyword.","on_invalid":"reject","example":"2479"},{"name":"group_id","type":"string","required":false,"description":"One curated list (特価コーナー, PSA/PCG graded ...); the `categories` action lists them under groups. On the buy-back site it cannot be combined with keyword.","on_invalid":"reject","example":"2527"},{"name":"sort","type":"enum","required":false,"description":"Order of the rows.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The shop's own order (best keyword match for a keyword search)"},{"value":"buyback_desc","label":"Highest buy-back price first"},{"value":"buyback_asc","label":"Lowest buy-back price first"}],"default":"default","example":"buyback_desc"},{"name":"page","type":"integer","required":false,"description":"Page number; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100000},{"name":"per_page","type":"integer","required":false,"description":"Rows per page: 60 or 120, the two sizes the shop has.","on_invalid":"reject","default":60,"example":120,"minimum":60,"maximum":120}],"returns":"rows[]: id (give it to `card` / `buyback_card`), game, name (the shop's title, Japanese kept), card_name, card_number (as printed, including the shop's + / ++ printing marks), set{id, name, code}, rarity, rarity_raw (the bracket as printed), variant (card type or treatment), product_type (single, graded_single, sealed, sealed_box, oripa, supply, bulk_lot, other), condition (the marking in the title, or 中古良品 for a single with none, the shop's stated rule), is_preorder, is_play_grade, is_foil, graded, grader, grade, release_date, release_note, image, url, currency (JPY), price_includes_tax (true), buyback_price_jpy (what Card Labo pays; null for a bulk lot), buyback_status (buying, open, bulk, closed, unknown), buyback_wanted_qty (募集数), buyback_wanted_unit, status_text. meta: total, page, per_page, last_page, has_more, sort, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon","keyword":"リザードン","sort":"buyback_desc"}},{"name":"buyback_card","description":"One buy-back product in full: the price Card Labo pays, how many it still wants, the set and category, the stated condition and the card image.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"A buy-back product id (a buyback_search row's `id`) or a c-labo-kaitori.jp product URL.","on_invalid":"reject","example":"82878","aliases":["id","url"]}],"returns":"card{id (give it to `card` / `buyback_card`), game, name (the shop's title, Japanese kept), card_name, card_number (as printed, including the shop's + / ++ printing marks), set{id, name, code}, rarity, rarity_raw (the bracket as printed), variant (card type or treatment), product_type (single, graded_single, sealed, sealed_box, oripa, supply, bulk_lot, other), condition (the marking in the title, or 中古良品 for a single with none, the shop's stated rule), is_preorder, is_play_grade, is_foil, graded, grader, grade, release_date, release_note, image, url, currency (JPY), price_includes_tax (true), buyback_price_jpy (what Card Labo pays; null for a bulk lot), buyback_status (buying, open, bulk, closed, unknown), buyback_wanted_qty (募集数), buyback_wanted_unit, status_text, categories[]{id, name}, description}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"209603"}},{"name":"categories","description":"Card Labo's whole category tree and curated lists on either site, with the ids `search` and `buyback_search` take.","required_params":[],"optional_params":["side","game","parent_id","max_depth"],"params":[{"name":"side","type":"enum","required":false,"description":"Which site's list to read; their ids are different.","on_invalid":"reject","allowed_values":[{"value":"shop","label":"The online shop (販売)"},{"value":"buyback","label":"The buy-back site (買取)"}],"default":"shop","example":"buyback"},{"name":"game","type":"enum","required":false,"description":"Only this game's top-level categories and everything under them.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon Trading Card Game"},{"value":"yugioh_rush","label":"遊戯王ラッシュデュエル — Yu-Gi-Oh! Rush Duel"},{"value":"yugioh","label":"遊戯王OCG — Yu-Gi-Oh! OCG (Japanese)"},{"value":"one_piece","label":"ONE PIECEカードゲーム — ONE PIECE Card Game"},{"value":"weiss_rose","label":"ヴァイスシュヴァルツ ロゼ — Weiß Schwarz Rose"},{"value":"weiss_blau","label":"ヴァイスシュヴァルツ ブラウ — Weiß Schwarz Blau"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"mtg","label":"マジック：ザ・ギャザリング — Magic: The Gathering"},{"value":"duel_masters","label":"デュエル・マスターズ — Duel Masters"},{"value":"love_live","label":"ラブライブ！OCG — Love Live! Official Card Game"},{"value":"godzilla","label":"ゴジラカードゲーム — Godzilla Card Game"},{"value":"vanguard","label":"カードファイト!! ヴァンガード — Cardfight!! Vanguard"},{"value":"battle_spirits","label":"バトルスピリッツ — Battle Spirits"},{"value":"digimon","label":"デジモンカードゲーム — Digimon Card Game"},{"value":"union_arena","label":"UNION ARENA — UNION ARENA"},{"value":"dragon_ball_fw","label":"ドラゴンボールスーパーカードゲーム フュージョンワールド — Dragon Ball Super Fusion World"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME — hololive Official Card Game"},{"value":"gundam","label":"ガンダムカードゲーム — Gundam Card Game"},{"value":"lorcana","label":"ディズニー・ロルカナ — Disney Lorcana"},{"value":"shadowverse_evolve","label":"シャドウバース エボルヴ — Shadowverse: Evolve"},{"value":"conan","label":"名探偵コナン TCG — Detective Conan TCG"},{"value":"ultraman","label":"ウルトラマン カードゲーム — Ultraman Card Game"},{"value":"final_fantasy","label":"FF-TCG — Final Fantasy TCG"},{"value":"buildivide_bright","label":"ビルディバイド -ブライト- — Build Divide Bright"},{"value":"buildivide","label":"ビルディバイド — Build Divide"},{"value":"lycee","label":"Lycee Overture — Lycee Overture"},{"value":"osica","label":"OSICA — OSICA"},{"value":"dream_order","label":"プロ野球カードゲーム DREAM ORDER — Pro Baseball Dream Order"},{"value":"fan_stars","label":"プロ野球 ファンスターズリーグ — Pro Baseball Fan Stars League"},{"value":"kiseki","label":"軌跡 TRADING CARD GAME — Trails Trading Card Game"},{"value":"kamitsubaki","label":"KAMITSUBAKI CARD GAME — Kamitsubaki Card Game"},{"value":"xross_stars","label":"Xross Stars — Xross Stars"},{"value":"animal","label":"アニマルカードゲーム — Animal Card Game"},{"value":"nivel_arena","label":"NIVEL ARENA — NIVEL ARENA"},{"value":"haikyu","label":"ハイキュー!!バボカ!!BREAK — Haikyu!! Baboka Break"},{"value":"harry_potter","label":"ハリー・ポッター カードゲーム — Harry Potter Card Game"},{"value":"palworld","label":"PALWORLD OFFICIAL CARD GAME — Palworld Official Card Game"},{"value":"wuthering_waves","label":"鳴潮：対決 — Wuthering Waves: Duel"},{"value":"kaiun","label":"開運コロシアム — Kaiun Colosseum"},{"value":"gotoubun","label":"五等分の花嫁 カードゲーム — The Quintessential Quintuplets Card Game"},{"value":"mememe","label":"めめめのくらげ TCG — Mememe no Kurage TCG"},{"value":"force_of_the_horse","label":"Force of the Horse — Force of the Horse"}],"example":"pokemon"},{"name":"parent_id","type":"string","required":false,"description":"Only the direct children of this category.","on_invalid":"reject","example":"2479"},{"name":"max_depth","type":"integer","required":false,"description":"Only categories down to this depth (0 = top level).","on_invalid":"reject","example":0,"minimum":0,"maximum":9}],"returns":"categories[]{id, name, parent_id, depth, has_children, url}, groups[] (same shape). meta: categories, groups.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"max_depth":0}},{"name":"games","description":"The games the `game` filter accepts, with the top-level category ids of each on the shop and the buy-back site.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: game, name, name_en, tag (the title prefix the shop uses), shop_category_ids[], buyback_category_ids[].","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"cardladder","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Card Ladder API — sports and trading card values from cardladder.com: card search with the CL Value, last sold price, sale count, population and market cap; one card with every other grade's value, active listings and its full per-day sales price history; active listings across eBay, Fanatics, Goldin, Heritage, MySlabs and more; player indexes and the 40 Card Ladder market indexes with their history; the trending ladder and the Daily Sales Recap. Basketball, baseball, football, hockey, soccer, Pokémon, One Piece, Magic, Yu-Gi-Oh! and more. USD. No login, no key. Card search covers Card Ladder's public ladder of tracked card profiles, not every card ever sold, and the newest sets are thin; for a card it does not hold, `listings` shows live listings across marketplaces.","version":"1.3.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cardladder/v1","spec_available":true,"actions":[{"name":"search","description":"Search Card Ladder's card database. Each row is one card in one condition / grade with its CL Value, last sold price and date, number of recorded sales, graded population, market cap, ladder score and 1-day to 1-year % changes. Filter by category, condition, grading company (each takes one value or several, OR-ed: \"PSA 10, PSA 9\"), player, year, value, last sold price and population; sort by value, sales, pop, market cap, score, date or % change. Words in `query` must all appear in the card's label. Coverage: this is Card Ladder's public ladder of tracked card profiles, not every card, and the newest sets are thin. For a card it does not hold, use `listings` (live listings across marketplaces, same words) or `search` on the pricecharting, altxyz or 130point engines; a search that matches nothing says so in meta.hint with ready-to-copy calls in meta.hint_calls.","required_params":[],"optional_params":["query","category","condition","grading_company","player","year_min","year_max","min_value","max_value","min_last_sold","max_last_sold","min_pop","max_pop","sort","direction","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Words that must ALL appear in the card's label (year, set, player, variation, number, grade). Strict AND: 'charizard psa 9' finds 36 cards, 'charizard base set psa 9' finds 0 because the 1999 Base Set is labelled 'Pokemon Game'. Use fewer words and filters when a search comes back empty. Empty = every card (browse with filters / sort).","on_invalid":"reject","example":"luka doncic prizm","aliases":["q","keyword"]},{"name":"category","type":"array","required":false,"description":"One card category, or several as a list or comma-separated (\"Basketball, Football\"): cards in ANY of them.","on_invalid":"reject","allowed_values":[{"value":"Basketball","label":"Basketball"},{"value":"Baseball","label":"Baseball"},{"value":"Football","label":"Football"},{"value":"Pokemon","label":"Pokémon"},{"value":"OnePiece","label":"One Piece"},{"value":"Hockey","label":"Hockey"},{"value":"Soccer","label":"Soccer"},{"value":"Marvel","label":"Marvel"},{"value":"MultiSport","label":"Multi-Sport"},{"value":"UFC/MMA","label":"UFC / MMA"},{"value":"Wrestling","label":"Wrestling"},{"value":"Yugioh","label":"Yu-Gi-Oh!"},{"value":"Golf","label":"Golf"},{"value":"Tennis","label":"Tennis"},{"value":"WNBA","label":"WNBA"},{"value":"Magic","label":"Magic: The Gathering"},{"value":"Disney","label":"Disney"},{"value":"Racing","label":"Racing"},{"value":"Fortnite","label":"Fortnite"},{"value":"Dragonballz","label":"Dragon Ball Z"},{"value":"Entertainment","label":"Entertainment"},{"value":"StarWars","label":"Star Wars"},{"value":"Swimming","label":"Swimming"},{"value":"Softball","label":"Softball"},{"value":"PopCulture","label":"Pop Culture"},{"value":"Historical","label":"Historical"},{"value":"Boxing","label":"Boxing"},{"value":"Metazoo","label":"MetaZoo"},{"value":"FleshAndBlood","label":"Flesh and Blood"}],"example":"Basketball"},{"name":"condition","type":"array","required":false,"description":"One exact condition / grade as Card Ladder writes it (Raw, PSA 10, PSA 9, PSA 8.5, BGS 9.5, SGC 10, CGC 10 Pristine, PSA 10/Auto 10 …), or several as a list or comma-separated (\"PSA 10, PSA 9, PSA 8\"): cards in ANY of them. Only the listed values exist: PSA has no 9.5 (BGS, SGC and CGC do).","on_invalid":"reject","allowed_values":[{"value":"BGS 10 Black","label":"BGS 10 - Pristine (Black Label)"},{"value":"SGC 10 Pristine","label":"SGC 10 - Pristine"},{"value":"CGC 10 Perfect","label":"CGC 10 - Perfect"},{"value":"PSA 10","label":"PSA 10 - Gem Mint"},{"value":"BGS 10","label":"BGS 10 - Pristine"},{"value":"SGC 10","label":"SGC 10 - Gem Mint"},{"value":"CGC 10 Pristine","label":"CGC 10 - Pristine"},{"value":"CGC 10","label":"CGC 10 - Gem Mint"},{"value":"PSA 10/Auto 10","label":"PSA 10/Auto 10 - Gem Mint"},{"value":"PSA 10/Auto 9","label":"PSA 10/Auto 9 - Gem Mint"},{"value":"PSA 10/Auto 8","label":"PSA 10/Auto 8 - Gem Mint"},{"value":"PSA 10/Auto Auth","label":"PSA 10/Auto Auth - Gem Mint"},{"value":"BGS 10/Auto 10","label":"BGS 10/Auto 10 - Pristine"},{"value":"SGC 10/Auto 10","label":"SGC 10/Auto 10 - Gem Mint"},{"value":"BGS 9.5","label":"BGS 9.5 - Gem Mint"},{"value":"SGC 9.5","label":"SGC 9.5 - Mint+"},{"value":"CGC 9.5 Gem Mint","label":"CGC 9.5 - Gem Mint"},{"value":"CGC 9.5","label":"CGC 9.5 - Mint+"},{"value":"BGS 9.5/Auto 10","label":"BGS 9.5/Auto 10 - Gem Mint"},{"value":"SGC 9.5/Auto 10","label":"SGC 9.5/Auto 10 - Mint+"},{"value":"BGS 9.5/Auto 9","label":"BGS 9.5/Auto 9 - Gem Mint"},{"value":"PSA 9","label":"PSA 9 - Mint"},{"value":"BGS 9","label":"BGS 9 - Mint"},{"value":"SGC 9","label":"SGC 9 - Mint"},{"value":"CGC 9","label":"CGC 9 - Mint"},{"value":"PSA 9/Auto 10","label":"PSA 9/Auto 10 - Mint"},{"value":"PSA 9/Auto 9","label":"PSA 9/Auto 9 - Mint"},{"value":"PSA 9/Auto Auth","label":"PSA 9/Auto Auth - Mint"},{"value":"PSA 9/Auto 8","label":"PSA 9/Auto 8 - Mint"},{"value":"BGS 9/Auto 10","label":"BGS 9/Auto 10 - Mint"},{"value":"BGS 9/Auto 9","label":"BGS 9/Auto 9 - Mint"},{"value":"SGC 9/Auto 10","label":"SGC 9/Auto 10 - Mint"},{"value":"Raw","label":"Raw"},{"value":"PSA 8.5","label":"PSA 8.5 - NM-MT+"},{"value":"BGS 8.5","label":"BGS 8.5 - NM-MT+"},{"value":"CGC 8.5","label":"CGC 8.5 - NM-MT+"},{"value":"SGC 8.5","label":"SGC 8.5 - NM-MT+"},{"value":"PSA 8.5/Auto 10","label":"PSA 8.5/Auto 10 - NM-MT+"},{"value":"BGS 8.5/Auto 10","label":"BGS 8.5/Auto 10 - NM-MT+"},{"value":"SGC 8.5/Auto 10","label":"SGC 8.5/Auto 10 - Mint"},{"value":"PSA 8","label":"PSA 8 - NM-MT"},{"value":"BGS 8","label":"BGS 8 - NM-MT"},{"value":"SGC 8","label":"SGC 8 - NM-MT"},{"value":"CGC 8","label":"CGC 8 - NM-MT"},{"value":"PSA 8/Auto 10","label":"PSA 8/Auto 10 - NM-MT"},{"value":"PSA 8/Auto 9","label":"PSA 8/Auto 9 - NM-MT"},{"value":"PSA 8/Auto Auth","label":"PSA 8/Auto Auth - NM-MT"},{"value":"PSA 8/Auto 8","label":"PSA 8/Auto 8 - NM-MT"},{"value":"BGS 8/Auto 10","label":"BGS 8/Auto 10 - NM-MT"},{"value":"SGC 8/Auto 10","label":"SGC 8/Auto 10 - Mint"},{"value":"PSA 7.5","label":"PSA 7.5 - NM+"},{"value":"BGS 7.5","label":"BGS 7.5 - NM+"},{"value":"SGC 7.5","label":"SGC 7.5 - NM+"},{"value":"CGC 7.5","label":"CGC 7.5 - NM+"},{"value":"BGS 7.5/Auto 10","label":"BGS 7.5/Auto 10 - NM+"},{"value":"PSA 7","label":"PSA 7 - NM"},{"value":"BGS 7","label":"BGS 7 - NM"},{"value":"SGC 7","label":"SGC 7 - NM"},{"value":"CGC 7","label":"CGC 7 - NM"},{"value":"PSA 7/Auto 10","label":"PSA 7/Auto 10 - NM"},{"value":"BGS 7/Auto 10","label":"BGS 7/Auto 10 - NM"},{"value":"SGC 7/Auto 10","label":"SGC 7/Auto 10 - Mint"},{"value":"PSA 6.5","label":"PSA 6.5 - EX-NM+"},{"value":"BGS 6.5","label":"BGS 6.5 - EX-NM+"},{"value":"SGC 6.5","label":"SGC 6.5 - EX-NM+"},{"value":"CGC 6.5","label":"CGC 6.5 - EX-NM+"},{"value":"BGS 6.5/Auto 10","label":"BGS 6.5/Auto 10 - EX-NM+"},{"value":"PSA 6","label":"PSA 6 - EX-NM"},{"value":"BGS 6","label":"BGS 6 - EX-NM"},{"value":"SGC 6","label":"SGC 6 - EX-NM"},{"value":"CGC 6","label":"CGC 6 - EX-NM"},{"value":"PSA 6/Auto 10","label":"PSA 6/Auto 10 - EX-NM"},{"value":"BGS 6/Auto 10","label":"BGS 6/Auto 10 - EX-NM"},{"value":"SGC 6/Auto 10","label":"SGC 6/Auto 10 - Mint"},{"value":"PSA 5.5","label":"PSA 5.5 - EX+"},{"value":"BGS 5.5","label":"BGS 5.5 - EX+"},{"value":"SGC 5.5","label":"SGC 5.5 - EX+"},{"value":"CGC 5.5","label":"CGC 5.5 - EX+"},{"value":"PSA 5","label":"PSA 5 - EX"},{"value":"BGS 5","label":"BGS 5 - EX"},{"value":"SGC 5","label":"SGC 5 - EX"},{"value":"CGC 5","label":"CGC 5 - EX"},{"value":"PSA 5/Auto 10","label":"PSA 5/Auto 10 - EX"},{"value":"SGC 5/Auto 10","label":"SGC 5/Auto 10 - Mint"},{"value":"PSA 4.5","label":"PSA 4.5 - VG-EX+"},{"value":"BGS 4.5","label":"BGS 4.5 - VG-EX+"},{"value":"SGC 4.5","label":"SGC 4.5 - VG-EX+"},{"value":"CGC 4.5","label":"CGC 4.5 - VG-EX+"},{"value":"PSA 4","label":"PSA 4 - VG-EX"},{"value":"BGS 4","label":"BGS 4 - VG-EX"},{"value":"SGC 4","label":"SGC 4 - VG-EX"},{"value":"CGC 4","label":"CGC 4 - VG-EX"},{"value":"PSA 4/Auto 10","label":"PSA 4/Auto 10 - VG-EX"},{"value":"SGC 4/Auto 10","label":"SGC 4/Auto 10 - Mint"},{"value":"PSA 3.5","label":"PSA 3.5 - VG+"},{"value":"BGS 3.5","label":"BGS 3.5 - VG+"},{"value":"SGC 3.5","label":"SGC 3.5 - VG+"},{"value":"CGC 3.5","label":"CGC 3.5 - VG+"},{"value":"PSA 3","label":"PSA 3 - VG"},{"value":"BGS 3","label":"BGS 3 - VG"},{"value":"SGC 3","label":"SGC 3 - VG"},{"value":"CGC 3","label":"CGC 3 - VG"},{"value":"PSA 3/Auto 10","label":"PSA 3/Auto 10 - VG"},{"value":"PSA 2.5","label":"PSA 2.5 - Good+"},{"value":"BGS 2.5","label":"BGS 2.5 - Good+"},{"value":"SGC 2.5","label":"SGC 2.5 - Good+"},{"value":"CGC 2.5","label":"CGC 2.5 - Good+"},{"value":"PSA 2","label":"PSA 2 - Good"},{"value":"BGS 2","label":"BGS 2 - Good"},{"value":"SGC 2","label":"SGC 2 - Good"},{"value":"CGC 2","label":"CGC 2 - Good"},{"value":"PSA 2/Auto 10","label":"PSA 2/Auto 10 - Good"},{"value":"PSA 1.5","label":"PSA 1.5 - Fair"},{"value":"BGS 1.5","label":"BGS 1.5 - Fair"},{"value":"SGC 1.5","label":"SGC 1.5 - Fair"},{"value":"CGC 1.5","label":"CGC 1.5 - Fair"},{"value":"PSA 1","label":"PSA 1 - Poor"},{"value":"BGS 1","label":"BGS 1 - Poor"},{"value":"SGC 1","label":"SGC 1 - Poor"},{"value":"CGC 1","label":"CGC 1 - Poor"},{"value":"PSA 1/Auto 10","label":"PSA 1/Auto 10 - Poor"},{"value":"PSA Authentic","label":"PSA Authentic"},{"value":"BGS Authentic","label":"BGS Authentic"},{"value":"SGC Authentic","label":"SGC Authentic"},{"value":"CGC Authentic","label":"CGC Authentic"},{"value":"PSA Authentic Altered","label":"PSA Authentic Altered"},{"value":"PSA Authentic/Auto 10","label":"PSA Authentic/Auto 10"},{"value":"SGC Authentic/Auto 10","label":"SGC Authentic/Auto 10"},{"value":"Encased","label":"Encased"},{"value":"Sealed","label":"Sealed"},{"value":"TAG 10 Pristine","label":"TAG 10 - Pristine"},{"value":"TAG 10 Gem Mint","label":"TAG 10 - Gem Mint"},{"value":"TAG 9","label":"TAG 9 - Mint"},{"value":"TAG 8.5","label":"TAG 8.5 - NM-MT+"},{"value":"TAG 8","label":"TAG 8 - NM-MT"},{"value":"TAG 7.5","label":"TAG 7.5 - NM+"},{"value":"TAG 7","label":"TAG 7 - NM"},{"value":"TAG 6.5","label":"TAG 6.5 - EX-NM+"},{"value":"TAG 6","label":"TAG 6 - EX-NM"},{"value":"TAG 5.5","label":"TAG 5.5 - EX+"},{"value":"TAG 5","label":"TAG 5 - EX"},{"value":"TAG 4.5","label":"TAG 4.5 - VG-EX+"},{"value":"TAG 4","label":"TAG 4 - VG-EX"},{"value":"TAG 3.5","label":"TAG 3.5 - VG+"},{"value":"TAG 3","label":"TAG 3 - VG"},{"value":"TAG 2.5","label":"TAG 2.5 - Good+"},{"value":"TAG 2","label":"TAG 2 - Good"},{"value":"TAG 1.5","label":"TAG 1.5 - Fair"},{"value":"TAG 1","label":"TAG 1 - Poor"},{"value":"CSG 10 Perfect","label":"CSG 10 - Perfect"},{"value":"CSG 10","label":"CSG 10 - Gem Mint"},{"value":"CSG 9.5","label":"CSG 9.5 - Mint+"},{"value":"CSG 9","label":"CSG 9 - Mint"},{"value":"CSG 8.5","label":"CSG 8.5 - NM-MT+"},{"value":"CSG 8","label":"CSG 8 - NM-MT"},{"value":"CSG 7.5","label":"CSG 7.5 - NM+"},{"value":"CSG 7","label":"CSG 7 - NM"},{"value":"CSG 6.5","label":"CSG 6.5 - EX-NM+"},{"value":"CSG 6","label":"CSG 6 - EX-NM"},{"value":"CSG 5.5","label":"CSG 5.5 - EX+"},{"value":"CSG 5","label":"CSG 5 - EX"},{"value":"CSG 4.5","label":"CSG 4.5 - VG-EX+"},{"value":"CSG 4","label":"CSG 4 - VG-EX"},{"value":"CSG 3.5","label":"CSG 3.5 - VG+"},{"value":"CSG 3","label":"CSG 3 - VG"},{"value":"CSG 2.5","label":"CSG 2.5 - Good+"},{"value":"CSG 2","label":"CSG 2 - Good"},{"value":"CSG 1.5","label":"CSG 1.5 - Fair"},{"value":"CSG 1","label":"CSG 1 - Poor"},{"value":"BVG 10","label":"BVG 10 - Pristine"},{"value":"BVG 9.5","label":"BVG 9.5 - Gem Mint"},{"value":"BVG 9","label":"BVG 9 - Mint"},{"value":"BVG 8.5","label":"BVG 8.5 - NM-MT+"},{"value":"BVG 8","label":"BVG 8 - NM-MT"},{"value":"BVG 7.5","label":"BVG 7.5 - NM+"},{"value":"BVG 7","label":"BVG 7 - NM"},{"value":"BVG 6.5","label":"BVG 6.5 - EX-NM+"},{"value":"BVG 6","label":"BVG 6 - EX-NM"},{"value":"BVG 5.5","label":"BVG 5.5 - EX+"},{"value":"BVG 5","label":"BVG 5 - EX"},{"value":"BVG 4.5","label":"BVG 4.5 - VG-EX+"},{"value":"BVG 4","label":"BVG 4 - VG-EX"},{"value":"BVG 3.5","label":"BVG 3.5 - VG+"},{"value":"BVG 3","label":"BVG 3 - VG"},{"value":"BVG 2.5","label":"BVG 2.5 - Good+"},{"value":"BVG 2","label":"BVG 2 - Good"},{"value":"BVG 1.5","label":"BVG 1.5 - Fair"},{"value":"BVG 1","label":"BVG 1 - Poor"},{"value":"HGA 10","label":"HGA 10 - Pristine"},{"value":"HGA 9.5","label":"HGA 9.5 - Gem Mint"},{"value":"HGA 9","label":"HGA 9 - Mint"},{"value":"HGA 8.5","label":"HGA 8.5 - NM-MT+"},{"value":"HGA 8","label":"HGA 8 - NM-MT"},{"value":"HGA 7.5","label":"HGA 7.5 - NM+"},{"value":"HGA 7","label":"HGA 7 - NM"},{"value":"HGA 6.5","label":"HGA 6.5 - EX-NM+"},{"value":"HGA 6","label":"HGA 6 - EX-NM"},{"value":"HGA 5.5","label":"HGA 5.5 - EX+"},{"value":"HGA 5","label":"HGA 5 - EX"},{"value":"HGA 4.5","label":"HGA 4.5 - VG-EX+"},{"value":"HGA 4","label":"HGA 4 - VG-EX"},{"value":"HGA 3.5","label":"HGA 3.5 - VG+"},{"value":"HGA 3","label":"HGA 3 - VG"},{"value":"HGA 2.5","label":"HGA 2.5 - Good+"},{"value":"HGA 2","label":"HGA 2 - Good"},{"value":"HGA 1.5","label":"HGA 1.5 - Fair"},{"value":"HGA 1","label":"HGA 1 - Poor"},{"value":"OTHER 10","label":"OTHER 10 - Pristine"},{"value":"OTHER 9.5","label":"OTHER 9.5 - Gem Mint"},{"value":"OTHER 9","label":"OTHER 9 - Mint"},{"value":"OTHER 8.5","label":"OTHER 8.5 - NM-MT+"},{"value":"OTHER 8","label":"OTHER 8 - NM-MT"},{"value":"OTHER 7.5","label":"OTHER 7.5 - NM+"},{"value":"OTHER 7","label":"OTHER 7 - NM"},{"value":"OTHER 6.5","label":"OTHER 6.5 - EX-NM+"},{"value":"OTHER 6","label":"OTHER 6 - EX-NM"},{"value":"OTHER 5.5","label":"OTHER 5.5 - EX+"},{"value":"OTHER 5","label":"OTHER 5 - EX"},{"value":"OTHER 4.5","label":"OTHER 4.5 - VG-EX+"},{"value":"OTHER 4","label":"OTHER 4 - VG-EX"},{"value":"OTHER 3.5","label":"OTHER 3.5 - VG+"},{"value":"OTHER 3","label":"OTHER 3 - VG"},{"value":"OTHER 2.5","label":"OTHER 2.5 - Good+"},{"value":"OTHER 2","label":"OTHER 2 - Good"},{"value":"OTHER 1.5","label":"OTHER 1.5 - Fair"},{"value":"OTHER 1","label":"OTHER 1 - Poor"}],"example":"PSA 10","aliases":["grade"]},{"name":"grading_company","type":"array","required":false,"description":"Only cards graded by one company, or several as a list or comma-separated (\"psa, bgs\"): ANY of them. Raw (ungraded) cards: use condition=Raw.","on_invalid":"reject","allowed_values":[{"value":"psa","label":"PSA"},{"value":"bgs","label":"BGS (Beckett)"},{"value":"sgc","label":"SGC"},{"value":"cgc","label":"CGC"},{"value":"csg","label":"CSG"},{"value":"tag","label":"TAG"},{"value":"bvg","label":"BVG (Beckett vintage)"},{"value":"hga","label":"HGA"},{"value":"other","label":"Other graders"}],"example":"psa"},{"name":"player","type":"string","required":false,"description":"Only one player's cards: a players / search row's player_id as is (e.g. Michael Jordan, Luka Doncic).","on_invalid":"reject","example":"Michael Jordan","aliases":["player_id"]},{"name":"year_min","type":"integer","required":false,"description":"Card year from (inclusive).","on_invalid":"reject","example":2018,"minimum":1800,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Card year to (inclusive).","on_invalid":"reject","example":2019,"minimum":1800,"maximum":2100},{"name":"min_value","type":"number","required":false,"description":"CL Value at least this many USD.","on_invalid":"reject","example":1000,"minimum":0},{"name":"max_value","type":"number","required":false,"description":"CL Value at most this many USD.","on_invalid":"reject","example":50000,"minimum":0},{"name":"min_last_sold","type":"number","required":false,"description":"Last sold price at least this many USD.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_last_sold","type":"number","required":false,"description":"Last sold price at most this many USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"min_pop","type":"integer","required":false,"description":"Graded population at least this.","on_invalid":"reject","example":1,"minimum":0,"maximum":10000000},{"name":"max_pop","type":"integer","required":false,"description":"Graded population at most this.","on_invalid":"reject","example":100,"minimum":0,"maximum":10000000},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default)"},{"value":"score","label":"Ladder score (2-week growth)"},{"value":"cl_value","label":"CL Value"},{"value":"last_sold_price","label":"Last sold price"},{"value":"last_sold_date","label":"Last sale date"},{"value":"num_sales","label":"Number of recorded sales"},{"value":"pop","label":"Graded population"},{"value":"market_cap","label":"Market cap"},{"value":"date_added","label":"Date added to Card Ladder"},{"value":"daily_change_usd","label":"1-day $ change"},{"value":"daily_change_pct","label":"1-day % change"},{"value":"weekly_change_pct","label":"1-week % change"},{"value":"monthly_change_pct","label":"1-month % change"},{"value":"quarterly_change_pct","label":"3-month % change"},{"value":"annual_change_pct","label":"1-year % change"}],"default":"relevance","example":"cl_value"},{"name":"direction","type":"enum","required":false,"description":"Sort direction (ignored for relevance).","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Highest / newest first"},{"value":"asc","label":"Lowest / oldest first"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first. The source serves the first 10,000 results (page × limit ≤ 10,000).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":20,"example":50,"minimum":1,"maximum":100,"aliases":["per_page"]}],"returns":"rows[]: card_id, slug, label, year, set, number, variation, player, player_id, category, condition, grading_company, psa_spec_id, cl_value (Card Ladder's estimated value, USD), last_sold_price, last_sold_date, num_sales, pop, market_cap (pop × value), ladder_score, undervalued_gap, daily_change_usd, daily/weekly/monthly/quarterly/annual_change_pct (fractions: 0.05 = +5 %), key_card, outlier_index, hidden, status, date_added, image, ebay_query, url, extra{}. meta: total (cards matching), total_is_capped (the source counts to 10,000), page, limit, has_more, filters_applied, warnings; only when nothing matched (total 0): hint (text) and hint_calls[{engine, action, path, params}] — the same words on cardladder listings and pricecharting / sportscardspro / altxyz / 130point search.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"luka doncic prizm","condition":"PSA 10"}},{"name":"card","description":"One card in full by its card_id: CL Value with its confidence, last sold price, all-time high, ROI, market cap, ladder score, % changes, oldest and newest sale, last-month and last-year high / low / average / count, graded population and PSA pop link, cert and slab serial, the value of EVERY other grade of the same card, other variations, similar cards, active listings, and the full per-day sales history back to the card's first recorded sale.","required_params":["card_id"],"optional_params":[],"params":[{"name":"card_id","type":"string","required":true,"description":"A search / ladder / player / index row's card_id as is. Its slug (1984-star-michael-jordan-base-101-psa-7) or a cardladder.com card URL also works.","on_invalid":"reject","example":"Ls7mp5BrdoOtLGgWmlcQ","aliases":["id","slug","url"]}],"returns":"card{card_id, slug, label, year, set, number, variation, player, player_id, category, condition, grading_company, grader, grade, autograph_grade, cl_value, last_sold_price, last_sold_date, num_sales, pop, market_cap, ladder_score, …_change_pct, cert, slab_serial, profile_id, gem_rate_id, psa_spec_id, psa_pop_link, pop_last_updated, set_information(_link), stats{cl_value, guide_value, guide_value_confidence, last_sold_price, all_time_high, roi, market_cap, oldest_sale{date, price}, newest_sale{date, price}, last_month{num_sales, high, low, average, last_sold_price}, last_year{…}}, other_grades[{card_id, condition, label, cl_value, url}], other_variations[], similar_cards[], active_listings[], price_history_summary{sale_days, sales, first_date, last_date, high, low}, price_history[{date, avg_price, sales_count, fanatics_top_percent, private_sale}], last_updated, url, extra{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"card_id":"Ls7mp5BrdoOtLGgWmlcQ"}},{"name":"card_price_history","description":"The per-day sales price history of one card, every recorded sale day back to its first sale (the average price that day and how many sales), optionally between two dates, with high / low / first / last over the range.","required_params":["card_id"],"optional_params":["from","to"],"params":[{"name":"card_id","type":"string","required":true,"description":"A search / ladder / player / index row's card_id as is. Its slug (1984-star-michael-jordan-base-101-psa-7) or a cardladder.com card URL also works.","on_invalid":"reject","example":"Ls7mp5BrdoOtLGgWmlcQ","aliases":["id","slug","url"]},{"name":"from","type":"string","required":false,"description":"Only sale days on or after this date (YYYY-MM-DD).","on_invalid":"reject","example":"2024-01-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_from","start_date"]},{"name":"to","type":"string","required":false,"description":"Only sale days on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_to","end_date"]}],"returns":"card{card_id, label, condition, cl_value, last_sold_price, url}, summary{sale_days, sales, first_date, last_date, high, low, first_price, last_price}, points[{date (YYYY-MM-DD), avg_price (USD; the day's average when sales_count > 1), sales_count, fanatics_top_percent, private_sale}] oldest first","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"card_id":"Ls7mp5BrdoOtLGgWmlcQ","from":"2024-01-01"}},{"name":"card_grades","description":"Every grade of the same card (Raw, PSA 1-10, BGS, SGC, CGC …) with its CL Value — the value ladder of one card. The card itself is included.","required_params":["card_id"],"optional_params":[],"params":[{"name":"card_id","type":"string","required":true,"description":"A search / ladder / player / index row's card_id as is. Its slug (1984-star-michael-jordan-base-101-psa-7) or a cardladder.com card URL also works.","on_invalid":"reject","example":"Ls7mp5BrdoOtLGgWmlcQ","aliases":["id","slug","url"]}],"returns":"card{card_id, label, condition, cl_value, url}, rows[{card_id, condition, label, cl_value, ratio, url, is_this_card}] highest value first","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"card_id":"Ls7mp5BrdoOtLGgWmlcQ"}},{"name":"listings","description":"Active card listings Card Ladder tracks across eBay, Fanatics (Weekly, Premier, Buy Now), Goldin, Heritage, MySlabs, Pristine and more: title, price, auction / best offer / fixed price, bids, watchers, end date, seller and the listing link.","required_params":[],"optional_params":["query","platform","listing_type","min_price","max_price","sort","direction","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Words to look for in the listing title. Empty = every active listing.","on_invalid":"reject","example":"luka doncic prizm psa 10","aliases":["q","keyword"]},{"name":"platform","type":"enum","required":false,"description":"Only listings on one marketplace.","on_invalid":"reject","allowed_values":[{"value":"eBay","label":"eBay"},{"value":"Fanatics-Weekly","label":"Fanatics Weekly"},{"value":"Goldin","label":"Goldin"},{"value":"Fanatics-Premier","label":"Fanatics Premier"},{"value":"Alt","label":"Alt"},{"value":"Heritage","label":"Heritage"},{"value":"Fanatics-Vault","label":"Fanatics Buy Now"},{"value":"REA","label":"REA"},{"value":"CardHobby","label":"Card Hobby"},{"value":"Lelands","label":"Lelands"},{"value":"AuctionOfChampions","label":"Auction of Champions"},{"value":"Sothebys","label":"Sothebys"},{"value":"MemoryLane","label":"Memory Lane"},{"value":"Pristine","label":"Pristine Auction"},{"value":"HugginsAndScott","label":"Huggins and Scott"},{"value":"SCP","label":"SCP"},{"value":"MileHigh","label":"Mile High"},{"value":"LoveOfTheGame","label":"Love of the Game"},{"value":"MySlabs","label":"My Slabs"},{"value":"90sAuctions","label":"90s Auctions"},{"value":"CollectAuctions","label":"Collect Auctions"},{"value":"SterlingSportsAuctions","label":"Sterling Sports Auctions"},{"value":"JSPAuctions","label":"JSP Auctions"},{"value":"WheatlandAuctions","label":"Wheatland Auctions"},{"value":"CollectorInvestorAuctions","label":"Collector Investor Auctions"},{"value":"ClassicAuctions","label":"Classic Auctions"},{"value":"Iconic","label":"Iconic"},{"value":"Private","label":"Private Sale"}],"example":"eBay"},{"name":"listing_type","type":"enum","required":false,"description":"Only auctions, best-offer or fixed-price listings.","on_invalid":"reject","allowed_values":[{"value":"Auction","label":"Auction"},{"value":"BestOffer","label":"Best Offer"},{"value":"FixedPrice","label":"Fixed Price"}],"example":"Auction"},{"name":"min_price","type":"number","required":false,"description":"Listing price at least this many USD.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Listing price at most this many USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default)"},{"value":"price","label":"Price"},{"value":"end_date","label":"End date"},{"value":"watchers","label":"Watchers"},{"value":"bids","label":"Bids"},{"value":"created_date","label":"Listed date"},{"value":"updated_date","label":"Last updated"}],"default":"relevance","example":"end_date"},{"name":"direction","type":"enum","required":false,"description":"Sort direction (ignored for relevance).","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Highest / newest first"},{"value":"asc","label":"Lowest / oldest first"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first. The source serves the first 10,000 results (page × limit ≤ 10,000).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":20,"example":50,"minimum":1,"maximum":100,"aliases":["per_page"]}],"returns":"rows[]: listing_id, item_id, platform, platform_label, listing_type, title, price (USD), bids, watchers, end_date (null with no_end_date=true for listings without an end), created_date, updated_date, seller, seller_feedback, url, image, thumbnail, extra{}. meta: total, total_is_capped, page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"michael jordan","platform":"Goldin"}},{"name":"players","description":"Search Card Ladder's player indexes: cards tracked, total value and market cap of the player's cards, last-day sales, the key card and the player index % change over 1 week to all time. Each row's player_id opens the `player` action.","required_params":[],"optional_params":["query","category","min_cards","max_cards","sort","direction","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Player name words. Empty = every player (browse with category / sort).","on_invalid":"reject","example":"jordan","aliases":["q","name"]},{"name":"category","type":"enum","required":false,"description":"Only one card category.","on_invalid":"reject","allowed_values":[{"value":"Basketball","label":"Basketball"},{"value":"Baseball","label":"Baseball"},{"value":"Football","label":"Football"},{"value":"Pokemon","label":"Pokémon"},{"value":"OnePiece","label":"One Piece"},{"value":"Hockey","label":"Hockey"},{"value":"Soccer","label":"Soccer"},{"value":"Marvel","label":"Marvel"},{"value":"MultiSport","label":"Multi-Sport"},{"value":"UFC/MMA","label":"UFC / MMA"},{"value":"Wrestling","label":"Wrestling"},{"value":"Yugioh","label":"Yu-Gi-Oh!"},{"value":"Golf","label":"Golf"},{"value":"Tennis","label":"Tennis"},{"value":"WNBA","label":"WNBA"},{"value":"Magic","label":"Magic: The Gathering"},{"value":"Disney","label":"Disney"},{"value":"Racing","label":"Racing"},{"value":"Fortnite","label":"Fortnite"},{"value":"Dragonballz","label":"Dragon Ball Z"},{"value":"Entertainment","label":"Entertainment"},{"value":"StarWars","label":"Star Wars"},{"value":"Swimming","label":"Swimming"},{"value":"Softball","label":"Softball"},{"value":"PopCulture","label":"Pop Culture"},{"value":"Historical","label":"Historical"},{"value":"Boxing","label":"Boxing"},{"value":"Metazoo","label":"MetaZoo"},{"value":"FleshAndBlood","label":"Flesh and Blood"}],"example":"Basketball"},{"name":"min_cards","type":"integer","required":false,"description":"Players with at least this many cards tracked.","on_invalid":"reject","example":100,"minimum":0,"maximum":1000000},{"name":"max_cards","type":"integer","required":false,"description":"Players with at most this many cards tracked.","on_invalid":"reject","example":5000,"minimum":0,"maximum":1000000},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default)"},{"value":"daily_sales","label":"Sales $ on the last day"},{"value":"daily_sales_count","label":"Number of sales on the last day"},{"value":"total_cards","label":"Cards tracked"},{"value":"total_value","label":"Total value of the player's cards"},{"value":"total_market_cap","label":"Total market cap"},{"value":"key_card_value","label":"Key card's CL Value"},{"value":"cards_in_index","label":"Cards counted in the player index"},{"value":"weekly_change_pct","label":"1-week index % change"},{"value":"monthly_change_pct","label":"1-month index % change"},{"value":"quarterly_change_pct","label":"3-month index % change"},{"value":"half_year_change_pct","label":"6-month index % change"},{"value":"ytd_change_pct","label":"Year-to-date index % change"},{"value":"annual_change_pct","label":"1-year index % change"},{"value":"five_year_change_pct","label":"5-year index % change"},{"value":"all_time_change_pct","label":"All-time index % change"}],"default":"relevance","example":"daily_sales"},{"name":"direction","type":"enum","required":false,"description":"Sort direction (ignored for relevance).","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Highest / newest first"},{"value":"asc","label":"Lowest / oldest first"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first. The source serves the first 10,000 results (page × limit ≤ 10,000).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":20,"example":50,"minimum":1,"maximum":100,"aliases":["per_page"]}],"returns":"rows[]: player_id, player, label, category, total_cards, cards_in_index, total_value, total_market_cap, daily_sales_usd, daily_sales_count, key_card_value (the key card's CL Value), has_key_card, key_card_id, weekly/monthly/quarterly/half_year/ytd/annual/five_year/all_time_change_pct (fractions), last_updated, image, url. meta: total, page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"jordan"}},{"name":"player","description":"One player's index: the index level, cards tracked, total value and market cap, the key card, % changes, the FULL index history and the sales-volume history, and the player's top 20 cards by ladder score (more with search + player).","required_params":["player_id"],"optional_params":[],"params":[{"name":"player_id","type":"string","required":true,"description":"A players row's player_id as is (e.g. Luka Doncic, Michael Jordan).","on_invalid":"reject","example":"Luka Doncic","aliases":["player","name"]}],"returns":"player{player_id, player, category, index_value, total_cards, cards_in_index, total_value, total_market_cap, daily_sales_usd, daily_sales_count, key_card_value, …_change_pct, key_card{card_id, label, cl_value, market_cap, url}, membership{filters}, index_history[{date, index_value}], sales_history[{date, sales_usd}], as_of, url}, rows[] (top cards, card_id, slug, label, year, set, number, variation, player, player_id, category, condition, grading_company, psa_spec_id, cl_value (Card Ladder's estimated value, USD), last_sold_price, last_sold_date, num_sales, pop, market_cap (pop × value), ladder_score, undervalued_gap, daily_change_usd, daily/weekly/monthly/quarterly/annual_change_pct (fractions: 0.05 = +5 %), key_card, outlier_index, hidden, status, date_added, image, ebay_query, url, extra{})","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"player_id":"Luka Doncic"}},{"name":"indexes","description":"The 40 Card Ladder market indexes (CL50, Pokémon, Basketball, Baseball, Football, Vintage, Modern, Low-Pop, High-End …) with the current index level, last-day sales, cards counted and % change over 1 week to all time.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: index_id, label, icon, index_value, daily_sales_usd, total_cards, weekly/monthly/quarterly/half_year/ytd/annual/five_year/all_time_change_pct (fractions), url. This is the site's index summary; it can trail the index's own page by a recalculation (2/6 differed by < 0.6 %) — `index` is authoritative.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"index","description":"One market index: the index level, total value and market cap, % changes, its membership rule, the FULL index history (Pokémon back to 2004) and sales-volume history, and its constituent cards, 20 per page.","required_params":["index_id"],"optional_params":["page"],"params":[{"name":"index_id","type":"string","required":true,"description":"An indexes row's index_id (cl50index, pokemon, basketball, vintage, lowpop …).","on_invalid":"reject","example":"pokemon","value_pattern":"[a-z0-9][a-z0-9-]{0,60}","aliases":["index","id"]},{"name":"page","type":"integer","required":false,"description":"Page of the index's constituent cards (20 per page). Page 1 also carries the index history.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500}],"returns":"index{index_id, label, description, index_value, total_cards, cards_in_index, total_value, total_market_cap, daily_sales_usd, daily_sales_count, …_change_pct, membership{filters | cardIds}, index_history[{date, index_value}], sales_history[{date, sales_usd}], as_of, url}, rows[] (constituent cards). meta: page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"index_id":"pokemon"}},{"name":"ladder","description":"Card Ladder's trending ladder (the 'Card Price Guide' page): cards ordered by ladder score (their growth over the last 2 weeks), for one category or all, 20 per page by default.","required_params":[],"optional_params":["category","page","limit"],"params":[{"name":"category","type":"enum","required":false,"description":"One category; empty = all categories (the site's 'Sports Card Price Guide').","on_invalid":"reject","allowed_values":[{"value":"Basketball","label":"Basketball"},{"value":"Baseball","label":"Baseball"},{"value":"Football","label":"Football"},{"value":"Pokemon","label":"Pokémon"},{"value":"OnePiece","label":"One Piece"},{"value":"Hockey","label":"Hockey"},{"value":"Soccer","label":"Soccer"},{"value":"Marvel","label":"Marvel"},{"value":"MultiSport","label":"Multi-Sport"},{"value":"UFC/MMA","label":"UFC / MMA"},{"value":"Wrestling","label":"Wrestling"},{"value":"Yugioh","label":"Yu-Gi-Oh!"},{"value":"Golf","label":"Golf"},{"value":"Tennis","label":"Tennis"},{"value":"WNBA","label":"WNBA"},{"value":"Magic","label":"Magic: The Gathering"},{"value":"Disney","label":"Disney"},{"value":"Racing","label":"Racing"},{"value":"Fortnite","label":"Fortnite"},{"value":"Dragonballz","label":"Dragon Ball Z"},{"value":"Entertainment","label":"Entertainment"},{"value":"StarWars","label":"Star Wars"},{"value":"Swimming","label":"Swimming"},{"value":"Softball","label":"Softball"},{"value":"PopCulture","label":"Pop Culture"},{"value":"Historical","label":"Historical"},{"value":"Boxing","label":"Boxing"},{"value":"Metazoo","label":"MetaZoo"},{"value":"FleshAndBlood","label":"Flesh and Blood"}],"example":"Basketball"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first. The source serves the first 10,000 results (page × limit ≤ 10,000).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":20,"example":50,"minimum":1,"maximum":100,"aliases":["per_page"]}],"returns":"rows[]: card_id, slug, label, year, set, number, variation, player, player_id, category, condition, grading_company, psa_spec_id, cl_value (Card Ladder's estimated value, USD), last_sold_price, last_sold_date, num_sales, pop, market_cap (pop × value), ladder_score, undervalued_gap, daily_change_usd, daily/weekly/monthly/quarterly/annual_change_pct (fractions: 0.05 = +5 %), key_card, outlier_index, hidden, status, date_added, image, ebay_query, url, extra{}. meta: page, has_more, category.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"Basketball"}},{"name":"daily_sales_recap","description":"Card Ladder's nightly Daily Sales Recap: total sales amount and count of the day, the cards that sold at an all-time high (with card_id and price), and the sales it excluded as suspicious ('Purgatory'). The latest recap, one day's, or one by post_id.","required_params":[],"optional_params":["post_id","date"],"params":[{"name":"post_id","type":"string","required":false,"description":"A recap's post_id (from meta.recent_recaps). Empty = the latest recap.","on_invalid":"reject","example":"ofpK0ks96p0X1MQJfDIY","aliases":["id"]},{"name":"date","type":"string","required":false,"description":"The recap published on this day (YYYY-MM-DD, UTC). Empty = the latest.","on_invalid":"reject","example":"2026-10-15","value_pattern":"\\d{4}-\\d{2}-\\d{2}"}],"returns":"recap{post_id, title, date, total_sales_usd, total_sales_count, sections[{title, count, items[{card_id (all-time highs), label, price, url}]}], url}. meta: recent_recaps[{post_id, date}] when looked up by date / latest.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"post_id":"ofpK0ks96p0X1MQJfDIY"}},{"name":"cert_lookup","description":"Look up a graded card by its PSA certification number: the number on the slab in → the PSA slab identity (spec id, grade, player, year, set, card number) AND the matching Card Ladder card in full — CL Value, population, market cap, ladder score, every other grade's value, active listings and the full per-day sales price history. PSA only (Card Ladder's card profiles are keyed on the PSA spec id); a BGS/SGC/CGC cert returns INVALID_PARAM. An unknown or deactivated cert returns NOT_FOUND.","required_params":["cert_number"],"optional_params":["grading_company"],"params":[{"name":"cert_number","type":"string","required":true,"description":"A PSA certification number (the number on the slab label, e.g. 43299127), a 'Cert #<n>' string, or a psacard.com/cert/<n> URL. 5-12 digits; leading zeros are optional. PSA only (the Card Ladder card carries a PSA spec id).","on_invalid":"reject","example":"43299127","aliases":["cert","certificate","cert_no"]},{"name":"grading_company","type":"enum","required":false,"description":"Only PSA is supported for cert lookup (Card Ladder's card profiles are keyed on the PSA spec id). BGS/SGC/CGC certs are not resolvable here.","on_invalid":"reject","allowed_values":[{"value":"PSA","label":"PSA"}],"default":"PSA","example":"PSA"}],"returns":"cert{cert_number, grading_company, psa_spec_id, grade, grade_number, psa_grade_label, subject, card_number, year, set, sport, psa_spec_url, psa_cert_url}, card{…the full `card` action payload: card_id, label, condition, cl_value, last_sold_price, pop, market_cap, …_change_pct, other_grades[], active_listings[], price_history[], stats{…}, url} | null when the exact grade is not on Card Ladder, with card_grades[] (every grade of the same card) as a fallback. meta: resolved_via ('psa_cert_page'→Card Ladder profileId), psa_session{warm, cookie_age_s}, upstream_requests, psa_bytes, warnings. Parallel calls are queued and spread over several PSA sessions, so a heavy burst can take up to ~30 s per call instead of ~4 s. A first call after a long pause, or a moment when the lookup is fully booked, may get RATE_LIMITED (retryable, not charged, retry_after_s 60).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":5},"example_params":{"cert_number":"43299127"}}]},{"name":"cardmarket","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Cardmarket API scraper — Europe's largest trading-card marketplace (cardmarket.com): Magic, Pokémon, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood and more. Search, set listings, Cardmarket's price guide with the 30-day sell-price history, and every seller's offer with condition, card language, foil and seller country, in euro. No account, no browser.","version":"0.7.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cardmarket/v1","spec_available":true,"actions":[{"name":"search","description":"Search Cardmarket by card or product name for one game: product id, name, expansion, collector number, rarity, number of offers, the cheapest offer price and the image. Narrow to a category (Singles, Booster-Boxes…), only products with offers; sort by popularity, price, name, number or release date; page through results.","required_params":["query"],"optional_params":["game","language","category","search_mode","sort","only_available","page","per_page","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Card or product name as typed in Cardmarket's search box.","on_invalid":"reject","example":"black lotus","aliases":["q","searchString","keyword"]},{"name":"game","type":"enum","required":false,"description":"The trading-card game (Cardmarket's own path name). Aliases like mtg, ygo, one-piece, fab, swu are accepted.","on_invalid":"reject","allowed_values":[{"value":"Magic","label":"Magic"},{"value":"Pokemon","label":"Pokemon"},{"value":"YuGiOh","label":"YuGiOh"},{"value":"OnePiece","label":"OnePiece"},{"value":"Lorcana","label":"Lorcana"},{"value":"FleshAndBlood","label":"FleshAndBlood"},{"value":"Digimon","label":"Digimon"},{"value":"DragonBallSuper","label":"DragonBallSuper"},{"value":"StarWarsUnlimited","label":"StarWarsUnlimited"},{"value":"Riftbound","label":"Riftbound"},{"value":"BattleSpiritsSaga","label":"BattleSpiritsSaga"},{"value":"FinalFantasy","label":"FinalFantasy"},{"value":"Vanguard","label":"Vanguard"},{"value":"WeissSchwarz","label":"WeissSchwarz"},{"value":"WoW","label":"WoW"},{"value":"StarWarsDestiny","label":"StarWarsDestiny"},{"value":"Cyberpunk","label":"Cyberpunk"},{"value":"Dragoborne","label":"Dragoborne"},{"value":"FoW","label":"FoW"},{"value":"MyLittlePony","label":"MyLittlePony"},{"value":"Spoils","label":"Spoils"}],"default":"Pokemon","example":"Magic"},{"name":"language","type":"enum","required":false,"description":"Cardmarket site language. Product names follow it (Charizard / Glurak / Dracaufeu); prices, ids and offers are the same.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"}],"default":"en","example":"en"},{"name":"category","type":"string","required":false,"description":"Cardmarket category path name, e.g. Singles, Boosters, Booster-Boxes, Elite-Trainer-Boxes, Sealed-Products (game-specific). Omit for all categories.","on_invalid":"reject","example":"Singles"},{"name":"search_mode","type":"enum","required":false,"description":"Which of Cardmarket's two keyword searches to use.","on_invalid":"reject","allowed_values":[{"value":"classic","label":"Classic name search (stable order, capped near 300 hits)"},{"value":"new","label":"Cardmarket's new search (broader matching, order varies)"}],"default":"classic","example":"classic"},{"name":"sort","type":"enum","required":false,"description":"Cardmarket's own orderings: popularity, price, name, collector number, release date.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"popularity"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"number_asc","label":"number_asc"},{"value":"number_desc","label":"number_desc"},{"value":"release_asc","label":"release_asc"},{"value":"release_desc","label":"release_desc"}],"default":"popularity","example":"price_asc"},{"name":"only_available","type":"boolean","required":false,"description":"Only products that currently have offers.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"per_page","type":"enum","required":false,"description":"Rows per page, one of Cardmarket's own page sizes.","on_invalid":"reject","allowed_values":[{"value":30,"label":"30"},{"value":50,"label":"50"},{"value":100,"label":"100"}],"default":50,"example":50},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, name, name_en (English name when the site language is not English), url, category, expansion, expansion_slug, number, rarity, available_items, search_index_price_from (the 'From' figure of Cardmarket's search index; it can differ from the product page, use product/detail price_from for the live figure), currency, image}, count, total, total_is_lower_bound, page, per_page, total_pages, has_more, game, language, query, category, search_mode, search_mode_served, results_may_be_incomplete (Cardmarket's own 'some results may be missing' notice), redirected_to_product","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":5},"example_params":{"query":"black lotus","game":"Magic"}},{"name":"expansion/products","description":"Every product of one expansion (set) with the same rows as `search`, filterable by rarity and sortable by collector number, price or popularity.","required_params":["expansion"],"optional_params":["game","language","category","rarity","sort","only_available","page","per_page","max_rotations"],"params":[{"name":"expansion","type":"string","required":true,"description":"Expansion slug from `expansions` (e.g. Base-Set, 151) or a cardmarket.com expansion / listing URL.","on_invalid":"reject","example":"Alpha","aliases":["set","expansion_slug"]},{"name":"game","type":"enum","required":false,"description":"The trading-card game (Cardmarket's own path name). Aliases like mtg, ygo, one-piece, fab, swu are accepted.","on_invalid":"reject","allowed_values":[{"value":"Magic","label":"Magic"},{"value":"Pokemon","label":"Pokemon"},{"value":"YuGiOh","label":"YuGiOh"},{"value":"OnePiece","label":"OnePiece"},{"value":"Lorcana","label":"Lorcana"},{"value":"FleshAndBlood","label":"FleshAndBlood"},{"value":"Digimon","label":"Digimon"},{"value":"DragonBallSuper","label":"DragonBallSuper"},{"value":"StarWarsUnlimited","label":"StarWarsUnlimited"},{"value":"Riftbound","label":"Riftbound"},{"value":"BattleSpiritsSaga","label":"BattleSpiritsSaga"},{"value":"FinalFantasy","label":"FinalFantasy"},{"value":"Vanguard","label":"Vanguard"},{"value":"WeissSchwarz","label":"WeissSchwarz"},{"value":"WoW","label":"WoW"},{"value":"StarWarsDestiny","label":"StarWarsDestiny"},{"value":"Cyberpunk","label":"Cyberpunk"},{"value":"Dragoborne","label":"Dragoborne"},{"value":"FoW","label":"FoW"},{"value":"MyLittlePony","label":"MyLittlePony"},{"value":"Spoils","label":"Spoils"}],"default":"Pokemon","example":"Magic"},{"name":"language","type":"enum","required":false,"description":"Cardmarket site language. Product names follow it (Charizard / Glurak / Dracaufeu); prices, ids and offers are the same.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"}],"default":"en","example":"en"},{"name":"category","type":"string","required":false,"description":"Cardmarket category path name, e.g. Singles, Boosters, Booster-Boxes, Elite-Trainer-Boxes, Sealed-Products (game-specific). Omit for all categories.","on_invalid":"reject","example":"Singles"},{"name":"rarity","type":"string","required":false,"description":"Rarity name or Cardmarket rarity id as listed in `rarity_options` of the response.","on_invalid":"reject","example":"Rare"},{"name":"sort","type":"enum","required":false,"description":"Cardmarket's own orderings: popularity, price, name, collector number, release date.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"popularity"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"number_asc","label":"number_asc"},{"value":"number_desc","label":"number_desc"},{"value":"release_asc","label":"release_asc"},{"value":"release_desc","label":"release_desc"}],"default":"popularity","example":"price_asc"},{"name":"only_available","type":"boolean","required":false,"description":"Only products that currently have offers.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"per_page","type":"enum","required":false,"description":"Rows per page, one of Cardmarket's own page sizes.","on_invalid":"reject","allowed_values":[{"value":30,"label":"30"},{"value":50,"label":"50"},{"value":100,"label":"100"}],"default":50,"example":50},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, name, name_en (English name when the site language is not English), url, category, expansion, expansion_slug, number, rarity, available_items, search_index_price_from (the 'From' figure of Cardmarket's search index; it can differ from the product page, use product/detail price_from for the live figure), currency, image}, count, total, total_is_lower_bound, page, per_page, total_pages, has_more, game, language, expansion_slug, rarity_applied, rarity_options[]{id, name}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":5},"example_params":{"expansion":"Alpha"}},{"name":"expansions","description":"Every expansion (set) Cardmarket lists for a game, newest first: name, slug, set code where published, number of cards, release date.","required_params":[],"optional_params":["game","language","max_rotations"],"params":[{"name":"game","type":"enum","required":false,"description":"The trading-card game (Cardmarket's own path name). Aliases like mtg, ygo, one-piece, fab, swu are accepted.","on_invalid":"reject","allowed_values":[{"value":"Magic","label":"Magic"},{"value":"Pokemon","label":"Pokemon"},{"value":"YuGiOh","label":"YuGiOh"},{"value":"OnePiece","label":"OnePiece"},{"value":"Lorcana","label":"Lorcana"},{"value":"FleshAndBlood","label":"FleshAndBlood"},{"value":"Digimon","label":"Digimon"},{"value":"DragonBallSuper","label":"DragonBallSuper"},{"value":"StarWarsUnlimited","label":"StarWarsUnlimited"},{"value":"Riftbound","label":"Riftbound"},{"value":"BattleSpiritsSaga","label":"BattleSpiritsSaga"},{"value":"FinalFantasy","label":"FinalFantasy"},{"value":"Vanguard","label":"Vanguard"},{"value":"WeissSchwarz","label":"WeissSchwarz"},{"value":"WoW","label":"WoW"},{"value":"StarWarsDestiny","label":"StarWarsDestiny"},{"value":"Cyberpunk","label":"Cyberpunk"},{"value":"Dragoborne","label":"Dragoborne"},{"value":"FoW","label":"FoW"},{"value":"MyLittlePony","label":"MyLittlePony"},{"value":"Spoils","label":"Spoils"}],"default":"Pokemon","example":"Magic"},{"name":"language","type":"enum","required":false,"description":"Cardmarket site language. Product names follow it (Charizard / Glurak / Dracaufeu); prices, ids and offers are the same.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"}],"default":"en","example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"expansions[]{name, slug, code, url, products_url, card_count, release_date (YYYY-MM-DD), release_date_text, group}, count, game, language","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":5},"example_params":{"game":"Magic"}},{"name":"product/detail","description":"One Cardmarket product by id or URL: name, expansion, number, rarity, image, number of items for sale, Cardmarket's price guide (From, Price Trend, 30/7/1-day average sell price), the daily average sell price of the last 30 days, and the first 50 offers with condition, card language, foil/signed/first-edition flags, quantity and the seller's country.","required_params":["product_id"],"optional_params":["game","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Cardmarket's numeric product id (from any search row) or a cardmarket.com product URL.","on_invalid":"reject","example":"5465","aliases":["id","url"]},{"name":"game","type":"enum","required":false,"description":"The trading-card game (Cardmarket's own path name). Aliases like mtg, ygo, one-piece, fab, swu are accepted.","on_invalid":"reject","allowed_values":[{"value":"Magic","label":"Magic"},{"value":"Pokemon","label":"Pokemon"},{"value":"YuGiOh","label":"YuGiOh"},{"value":"OnePiece","label":"OnePiece"},{"value":"Lorcana","label":"Lorcana"},{"value":"FleshAndBlood","label":"FleshAndBlood"},{"value":"Digimon","label":"Digimon"},{"value":"DragonBallSuper","label":"DragonBallSuper"},{"value":"StarWarsUnlimited","label":"StarWarsUnlimited"},{"value":"Riftbound","label":"Riftbound"},{"value":"BattleSpiritsSaga","label":"BattleSpiritsSaga"},{"value":"FinalFantasy","label":"FinalFantasy"},{"value":"Vanguard","label":"Vanguard"},{"value":"WeissSchwarz","label":"WeissSchwarz"},{"value":"WoW","label":"WoW"},{"value":"StarWarsDestiny","label":"StarWarsDestiny"},{"value":"Cyberpunk","label":"Cyberpunk"},{"value":"Dragoborne","label":"Dragoborne"},{"value":"FoW","label":"FoW"},{"value":"MyLittlePony","label":"MyLittlePony"},{"value":"Spoils","label":"Spoils"}],"default":"Pokemon","example":"Magic"},{"name":"language","type":"enum","required":false,"description":"Cardmarket site language. Product names follow it (Charizard / Glurak / Dracaufeu); prices, ids and offers are the same.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"}],"default":"en","example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, title_suffix, url, game, language, category, is_single, expansion, expansion_slug, number, rarity, species, manufacturer, versions_count, versions_url, image, available_items, currency, price_from, price_trend, avg_sell_price_30d, avg_sell_price_7d, avg_sell_price_1d, price_guide_extra[]{label, value}, price_history[]{date, avg_sell_price}, breadcrumbs[]{name, url}, data_source (product_page | catalog). While Cardmarket refuses a game's product pages the product comes from Cardmarket's daily catalogue (data_source=catalog): catalog_name, category_name, expansion_id and price_guide{low, trend, avg, avg1, avg7, avg30, low_holo, trend_holo, avg_holo, avg1_holo, avg7_holo, avg30_holo, created_at} are added, price_from is the cheapest live offer, and page-only fields are null and listed in unavailable_fields[]}, offers[]{offer_id, price, currency, price_excludes_shipping, quantity, condition (MT|NM|EX|GD|LP|PL|PO), condition_name, condition_rank, card_language{code, name}, foil, signed, first_edition, altered, comment, photo_url, seller{username, url, type (private|professional|powerseller), country_code, country, sales, available_items}}, offers_count, offers_has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":5},"example_params":{"product_id":"5465","game":"Magic"}},{"name":"product/offers","description":"The public offers on one product in Cardmarket's own order (roughly cheapest first): price, quantity, condition, card language, foil/signed/first-edition/altered, seller name, type, country and sales. Filter by card language, minimum condition, seller country, seller type, foil, signed, first edition and altered; the filters are applied to the offers in this response, so every one of those fields is also returned per offer and you can check the filtering yourself. Filters are applied by cardmarket across the product's WHOLE offer list and the cheapest 50 matches come back; `offers_truncated` says whether that 50 was reached. `filter_mode` says which layers ran and `scanned_offers` how many rows the local pass saw. `foil` and `first_edition` are filtered locally only. SCOPE: Cardmarket shows the first block of offers (up to 50) to callers without a logged-in account and answers its own 'show more results' control with a login prompt, so this action serves that first block and `page` beyond 1 is refused rather than returned empty.","required_params":["product_id"],"optional_params":["game","language","card_language","min_condition","seller_country","seller_type","foil","signed","first_edition","altered","page","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Cardmarket's numeric product id (from any search row) or a cardmarket.com product URL.","on_invalid":"reject","example":"5465","aliases":["id","url"]},{"name":"game","type":"enum","required":false,"description":"The trading-card game (Cardmarket's own path name). Aliases like mtg, ygo, one-piece, fab, swu are accepted.","on_invalid":"reject","allowed_values":[{"value":"Magic","label":"Magic"},{"value":"Pokemon","label":"Pokemon"},{"value":"YuGiOh","label":"YuGiOh"},{"value":"OnePiece","label":"OnePiece"},{"value":"Lorcana","label":"Lorcana"},{"value":"FleshAndBlood","label":"FleshAndBlood"},{"value":"Digimon","label":"Digimon"},{"value":"DragonBallSuper","label":"DragonBallSuper"},{"value":"StarWarsUnlimited","label":"StarWarsUnlimited"},{"value":"Riftbound","label":"Riftbound"},{"value":"BattleSpiritsSaga","label":"BattleSpiritsSaga"},{"value":"FinalFantasy","label":"FinalFantasy"},{"value":"Vanguard","label":"Vanguard"},{"value":"WeissSchwarz","label":"WeissSchwarz"},{"value":"WoW","label":"WoW"},{"value":"StarWarsDestiny","label":"StarWarsDestiny"},{"value":"Cyberpunk","label":"Cyberpunk"},{"value":"Dragoborne","label":"Dragoborne"},{"value":"FoW","label":"FoW"},{"value":"MyLittlePony","label":"MyLittlePony"},{"value":"Spoils","label":"Spoils"}],"default":"Pokemon","example":"Magic"},{"name":"language","type":"enum","required":false,"description":"Cardmarket site language. Product names follow it (Charizard / Glurak / Dracaufeu); prices, ids and offers are the same.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"}],"default":"en","example":"en"},{"name":"card_language","type":"array","required":false,"description":"Only offers of cards printed in these languages (one or more, e.g. en or en,de). Language names such as English or Japanese are accepted too.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"es","label":"Spanish"},{"value":"it","label":"Italian"},{"value":"zh-cn","label":"Simplified Chinese"},{"value":"ja","label":"Japanese"},{"value":"pt","label":"Portuguese"},{"value":"ru","label":"Russian"},{"value":"ko","label":"Korean"},{"value":"zh-tw","label":"Traditional Chinese"},{"value":"nl","label":"Dutch"}],"example":["en"]},{"name":"min_condition","type":"enum","required":false,"description":"Only offers in this condition or better (Mint > Near Mint > Excellent > Good > Light Played > Played > Poor). Cardmarket's codes MT, NM, EX, GD, LP, PL, PO and names such as 'near mint' are accepted too.","on_invalid":"reject","allowed_values":[{"value":"mint","label":"Mint"},{"value":"near_mint","label":"Near Mint"},{"value":"excellent","label":"Excellent"},{"value":"good","label":"Good"},{"value":"light_played","label":"Light Played"},{"value":"played","label":"Played"},{"value":"poor","label":"Poor"}],"example":"near_mint"},{"name":"seller_country","type":"array","required":false,"description":"Only offers from sellers located in these countries (one or more ISO codes, e.g. DE or DE,FR).","on_invalid":"reject","allowed_values":[{"value":"AT","label":"Austria"},{"value":"BE","label":"Belgium"},{"value":"BG","label":"Bulgaria"},{"value":"CH","label":"Switzerland"},{"value":"CY","label":"Cyprus"},{"value":"CZ","label":"Czech Republic"},{"value":"DE","label":"Germany"},{"value":"DK","label":"Denmark"},{"value":"EE","label":"Estonia"},{"value":"ES","label":"Spain"},{"value":"FI","label":"Finland"},{"value":"FR","label":"France"},{"value":"GB","label":"United Kingdom"},{"value":"GR","label":"Greece"},{"value":"HU","label":"Hungary"},{"value":"IE","label":"Ireland"},{"value":"IT","label":"Italy"},{"value":"LI","label":"Liechtenstein"},{"value":"LT","label":"Lithuania"},{"value":"LU","label":"Luxembourg"},{"value":"LV","label":"Latvia"},{"value":"MT","label":"Malta"},{"value":"NL","label":"Netherlands"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"PT","label":"Portugal"},{"value":"RO","label":"Romania"},{"value":"SE","label":"Sweden"},{"value":"SG","label":"Singapore"},{"value":"SI","label":"Slovenia"},{"value":"SK","label":"Slovakia"},{"value":"CA","label":"Canada"},{"value":"HR","label":"Croatia"},{"value":"JP","label":"Japan"},{"value":"IS","label":"Iceland"}],"example":["DE"]},{"name":"seller_type","type":"enum","required":false,"description":"Only offers from this seller type.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private"},{"value":"professional","label":"Professional"},{"value":"powerseller","label":"Powerseller"}],"example":"professional"},{"name":"foil","type":"boolean","required":false,"description":"true = only foil offers, false = only non-foil (games with foil printings).","on_invalid":"reject"},{"name":"signed","type":"boolean","required":false,"description":"true/false: signed cards.","on_invalid":"reject"},{"name":"first_edition","type":"boolean","required":false,"description":"true/false: first-edition cards (Pokémon, Yu-Gi-Oh!).","on_invalid":"reject"},{"name":"altered","type":"boolean","required":false,"description":"true/false: altered cards.","on_invalid":"reject"},{"name":"page","type":"integer","required":false,"description":"Offer page, 50 offers each, in Cardmarket's order (roughly cheapest first). Cardmarket stops at 6 pages (300 offers).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":6},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, url, game, expansion, number, rarity, available_items, price_from, price_trend, currency}, offers[]{offer_id, price, currency, price_excludes_shipping, quantity, condition (MT|NM|EX|GD|LP|PL|PO), condition_name, condition_rank, card_language{code, name}, foil, signed, first_edition, altered, comment, photo_url, seller{username, url, type (private|professional|powerseller), country_code, country, sales, available_items}}, count, page, has_more, max_pages_reached, filters_applied, scanned_offers, offers_truncated, filter_mode, available_filters","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":8},"example_params":{"product_id":"5465"}},{"name":"search/suggest","description":"Cardmarket's search-box suggestions for what a shopper has typed so far: product name, expansion, link and image.","required_params":["query"],"optional_params":["game","language","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper typed so far (3+ characters).","on_invalid":"reject","example":"chariz","aliases":["q","prefix"]},{"name":"game","type":"enum","required":false,"description":"The trading-card game (Cardmarket's own path name). Aliases like mtg, ygo, one-piece, fab, swu are accepted.","on_invalid":"reject","allowed_values":[{"value":"Magic","label":"Magic"},{"value":"Pokemon","label":"Pokemon"},{"value":"YuGiOh","label":"YuGiOh"},{"value":"OnePiece","label":"OnePiece"},{"value":"Lorcana","label":"Lorcana"},{"value":"FleshAndBlood","label":"FleshAndBlood"},{"value":"Digimon","label":"Digimon"},{"value":"DragonBallSuper","label":"DragonBallSuper"},{"value":"StarWarsUnlimited","label":"StarWarsUnlimited"},{"value":"Riftbound","label":"Riftbound"},{"value":"BattleSpiritsSaga","label":"BattleSpiritsSaga"},{"value":"FinalFantasy","label":"FinalFantasy"},{"value":"Vanguard","label":"Vanguard"},{"value":"WeissSchwarz","label":"WeissSchwarz"},{"value":"WoW","label":"WoW"},{"value":"StarWarsDestiny","label":"StarWarsDestiny"},{"value":"Cyberpunk","label":"Cyberpunk"},{"value":"Dragoborne","label":"Dragoborne"},{"value":"FoW","label":"FoW"},{"value":"MyLittlePony","label":"MyLittlePony"},{"value":"Spoils","label":"Spoils"}],"default":"Pokemon","example":"Magic"},{"name":"language","type":"enum","required":false,"description":"Cardmarket site language. Product names follow it (Charizard / Glurak / Dracaufeu); prices, ids and offers are the same.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"}],"default":"en","example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{name, text, url, category, expansion, expansion_slug, image}, count, query, game, language","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":5},"example_params":{"query":"black lotus"}},{"name":"price_guide","description":"Cardmarket's price guide for a whole game in one call — every product's lowest price, Price Trend and average sell prices (plus the foil / holo figures), straight from the daily price guide file Cardmarket publishes. Filter to sealed products (booster boxes, displays, ETBs, tins…) or single cards, to a list of product ids, categories or expansions; sealed rows come with name, category and expansion. Built for refreshing thousands of products at once instead of one product/detail per product. Snapshot: Cardmarket recomputes it once a night (created_at, ~02:45 CET); for a live figure use product/detail. Prices are for the product across all card languages and conditions. 0 in Cardmarket's file is returned as null. For sealed products Cardmarket's file carries no 1/7/30-day averages (null), while product/detail shows them.","required_params":[],"optional_params":["game","product_type","product_ids","category_ids","expansion_ids","with_product_info","page","per_page"],"params":[{"name":"game","type":"enum","required":false,"description":"The trading-card game (Cardmarket's own path name). Aliases like mtg, ygo, one-piece, fab, swu are accepted.","on_invalid":"reject","allowed_values":[{"value":"Magic","label":"Magic"},{"value":"Pokemon","label":"Pokemon"},{"value":"YuGiOh","label":"YuGiOh"},{"value":"OnePiece","label":"OnePiece"},{"value":"Lorcana","label":"Lorcana"},{"value":"FleshAndBlood","label":"FleshAndBlood"},{"value":"Digimon","label":"Digimon"},{"value":"DragonBallSuper","label":"DragonBallSuper"},{"value":"StarWarsUnlimited","label":"StarWarsUnlimited"},{"value":"Riftbound","label":"Riftbound"},{"value":"BattleSpiritsSaga","label":"BattleSpiritsSaga"},{"value":"FinalFantasy","label":"FinalFantasy"},{"value":"Vanguard","label":"Vanguard"},{"value":"WeissSchwarz","label":"WeissSchwarz"},{"value":"WoW","label":"WoW"},{"value":"StarWarsDestiny","label":"StarWarsDestiny"},{"value":"Cyberpunk","label":"Cyberpunk"},{"value":"Dragoborne","label":"Dragoborne"},{"value":"FoW","label":"FoW"},{"value":"MyLittlePony","label":"MyLittlePony"},{"value":"Spoils","label":"Spoils"}],"default":"Pokemon","example":"Magic"},{"name":"product_type","type":"enum","required":false,"description":"Which of Cardmarket's two product lists: sealed (non-singles) or single cards.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Singles and sealed"},{"value":"sealed","label":"Sealed / non-single products only (boosters, booster boxes, displays, ETBs, tins, decks…)"},{"value":"singles","label":"Single cards only"}],"default":"all","example":"sealed"},{"name":"product_ids","type":"array","required":false,"description":"Only these Cardmarket product ids (up to 20000). Ids not in the file are listed in missing_product_ids.","on_invalid":"reject","example":["818585","681796"]},{"name":"category_ids","type":"array","required":false,"description":"Only these Cardmarket category ids (e.g. Pokémon 53 Display, 1016 Elite Trainer Boxes; product_catalog lists every category with its id).","on_invalid":"reject","example":["1016"]},{"name":"expansion_ids","type":"array","required":false,"description":"Only products of these Cardmarket expansion ids.","on_invalid":"reject","example":["6704"]},{"name":"with_product_info","type":"boolean","required":false,"description":"Also fill name, category name, expansion id and date added on SINGLE-card rows (one more file, slower). Sealed rows always carry them.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"Page of the result, rows ordered by product id.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, up to 10000 (all sealed products of one game fit in one page).","on_invalid":"reject","default":1000,"example":1000,"minimum":1,"maximum":10000}],"returns":"results[]{product_id, product_type (sealed|single), category_id, category_name, name, expansion_id, date_added, price_low (lowest offer = 'From' at snapshot time), price_trend, avg_sell_price, avg_sell_price_1d, avg_sell_price_7d, avg_sell_price_30d, foil{same six} or null}, count, total, page, per_page, total_pages, has_more, game, game_id, product_type, currency, created_at (Cardmarket's snapshot time), product_list_created_at, foil_fields_source (holo|foil), missing_product_ids, missing_product_ids_count, files[]{file, bytes, last_modified, created_at, version, rows}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"game":"OnePiece","product_type":"sealed","per_page":20}},{"name":"product_catalog","description":"Cardmarket's own product list for a game: every product id with its name, category, expansion id and the date Cardmarket added it, from the daily product files. Sealed products (boosters, booster boxes, displays, ETBs, tins, decks…) or single cards; filter by ids, category, expansion, name text or added_since to catch new releases. Also returns every category with its id and product count. Use it to map your products to Cardmarket ids, then price_guide to price them.","required_params":[],"optional_params":["game","product_type","product_ids","category_ids","expansion_ids","added_since","query","page","per_page"],"params":[{"name":"game","type":"enum","required":false,"description":"The trading-card game (Cardmarket's own path name). Aliases like mtg, ygo, one-piece, fab, swu are accepted.","on_invalid":"reject","allowed_values":[{"value":"Magic","label":"Magic"},{"value":"Pokemon","label":"Pokemon"},{"value":"YuGiOh","label":"YuGiOh"},{"value":"OnePiece","label":"OnePiece"},{"value":"Lorcana","label":"Lorcana"},{"value":"FleshAndBlood","label":"FleshAndBlood"},{"value":"Digimon","label":"Digimon"},{"value":"DragonBallSuper","label":"DragonBallSuper"},{"value":"StarWarsUnlimited","label":"StarWarsUnlimited"},{"value":"Riftbound","label":"Riftbound"},{"value":"BattleSpiritsSaga","label":"BattleSpiritsSaga"},{"value":"FinalFantasy","label":"FinalFantasy"},{"value":"Vanguard","label":"Vanguard"},{"value":"WeissSchwarz","label":"WeissSchwarz"},{"value":"WoW","label":"WoW"},{"value":"StarWarsDestiny","label":"StarWarsDestiny"},{"value":"Cyberpunk","label":"Cyberpunk"},{"value":"Dragoborne","label":"Dragoborne"},{"value":"FoW","label":"FoW"},{"value":"MyLittlePony","label":"MyLittlePony"},{"value":"Spoils","label":"Spoils"}],"default":"Pokemon","example":"Magic"},{"name":"product_type","type":"enum","required":false,"description":"Which of Cardmarket's two product lists: sealed (non-singles) or single cards.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Singles and sealed"},{"value":"sealed","label":"Sealed / non-single products only (boosters, booster boxes, displays, ETBs, tins, decks…)"},{"value":"singles","label":"Single cards only"}],"default":"all","example":"sealed"},{"name":"product_ids","type":"array","required":false,"description":"Only these Cardmarket product ids (up to 20000). Ids not in the file are listed in missing_product_ids.","on_invalid":"reject","example":["818585","681796"]},{"name":"category_ids","type":"array","required":false,"description":"Only these Cardmarket category ids (e.g. Pokémon 53 Display, 1016 Elite Trainer Boxes; product_catalog lists every category with its id).","on_invalid":"reject","example":["1016"]},{"name":"expansion_ids","type":"array","required":false,"description":"Only products of these Cardmarket expansion ids.","on_invalid":"reject","example":["6704"]},{"name":"added_since","type":"string","required":false,"description":"Only products Cardmarket added on or after this date (YYYY-MM-DD) — new releases.","on_invalid":"reject","example":"2026-10-01"},{"name":"query","type":"string","required":false,"description":"Only products whose name contains this text (case-insensitive).","on_invalid":"reject","example":"booster box","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"Page of the result, rows ordered by product id.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, up to 10000 (all sealed products of one game fit in one page).","on_invalid":"reject","default":1000,"example":1000,"minimum":1,"maximum":10000}],"returns":"results[]{product_id, product_type (sealed|single), name, category_id, category_name, expansion_id, metacard_id, date_added}, count, total, page, per_page, total_pages, has_more, game, game_id, product_type, categories[]{category_id, category_name, product_type, products}, created_at, missing_product_ids, missing_product_ids_count, files[]{file, bytes, last_modified, created_at, version, rows}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":10,"min":1},"example_params":{"game":"Magic"}},{"name":"image","description":"One Cardmarket product picture as bytes, for the image URL product/detail returns (product.image). Use it when your own downloader gets 403 from Cardmarket's image host (it refuses requests that do not come from cardmarket.com pages). For a sealed product you can pass product_id + category_id from price_guide / product_catalog instead of the URL. The picture comes back base64-encoded with its real content type (read from the bytes: Cardmarket serves some .jpg URLs as PNG) and pixel size; every picture is checked to decode in full before it is returned. One picture per call. A product without a picture is NOT_FOUND.","required_params":[],"optional_params":["url","product_id","category_id","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"The image URL product/detail returns in product.image (search rows carry the same URL in image). Only https://product-images.s3.cardmarket.com/... product images. Either this, or product_id + category_id.","on_invalid":"reject","example":"https://product-images.s3.cardmarket.com/1016/846743/846743.jpg","aliases":["image_url"]},{"name":"product_id","type":"integer","required":false,"description":"With category_id, instead of url: a SEALED product's Cardmarket id (price_guide / product_catalog rows). Single cards need url (their image path carries the set code).","on_invalid":"reject","example":846743,"minimum":1},{"name":"category_id","type":"integer","required":false,"description":"With product_id: the product's Cardmarket category id (category_id in price_guide / product_catalog rows).","on_invalid":"reject","example":1016,"minimum":1},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"url (the picture fetched), content_type (image/jpeg | image/png, from the bytes), bytes, width, height, data_base64 (verified to decode in full)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://product-images.s3.cardmarket.com/1016/846743/846743.jpg"}}]},{"name":"cardrush","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Card Rush API — Japanese trading-card prices from Card Rush (カードラッシュ): what the shop sells a card for (JPY, tax included) with its condition (状態 A-/B/C), PSA grade and web-shop stock, and what it buys a card for (買取 price list). Ten games: Pokémon, One Piece, Yu-Gi-Oh!, Magic: The Gathering, Duel Masters, Battle Spirits, Digimon, Vanguard, Dragon Ball Fusion World, Shadowverse: Evolve. No login, no key.","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cardrush/v1","spec_available":true,"actions":[{"name":"search","description":"Search one Card Rush shop. Each row is one product (one card in one condition / grade) with its price, stock and the parts of its title (condition, grader and grade, rarity, card number). Give `query`, or `group` (a set / feature listing), or `category`. With a query, group and category narrow it.","required_params":[],"optional_params":["game","query","group","category","in_stock_only","sort","per_page","page"],"params":[{"name":"game","type":"enum","required":false,"description":"Which Card Rush shop: pokemon (cardrush-pokemon.jp, default), onepiece, yugioh (cardrush.jp), mtg, duel_masters, battle_spirits, digimon, vanguard, dragon_ball, shadowverse_evolve. Same fields on every shop.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon"},{"value":"onepiece","label":"One Piece"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"mtg","label":"Magic: The Gathering"},{"value":"duel_masters","label":"Duel Masters"},{"value":"battle_spirits","label":"Battle Spirits Saga"},{"value":"digimon","label":"Digimon"},{"value":"vanguard","label":"Cardfight!! Vanguard"},{"value":"dragon_ball","label":"Dragon Ball Super Fusion World"},{"value":"shadowverse_evolve","label":"Shadowverse: Evolve"}],"default":"pokemon","example":"pokemon"},{"name":"query","type":"string","required":false,"description":"Card or product name as the shop writes it (Japanese; MTG also English), a set code or a card number (e.g. 'ピカチュウ', 'リザードン SAR', '025/165', 'PSA10'). Give query, group or category.","on_invalid":"reject","example":"ピカチュウ","aliases":["q","keyword","name"]},{"name":"group","type":"string","required":false,"description":"A shop feature / set listing id (特集), e.g. 594 = 拡張パック「30th CELEBRATION」 on the Pokémon shop. The ids and counts come back in meta.facets.groups.","on_invalid":"reject","example":"594","value_pattern":"\\d{1,9}","aliases":["group_id"]},{"name":"category","type":"string","required":false,"description":"A shop category id (カテゴリ), e.g. 4 = 雷 (Lightning) on the Pokémon shop. The ids and counts come back in meta.facets.categories.","on_invalid":"reject","example":"4","value_pattern":"\\d{1,9}","aliases":["category_id","main_category"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only products the web shop has in stock (在庫あり).","on_invalid":"reject","default":false,"example":true,"aliases":["available"]},{"name":"sort","type":"enum","required":false,"description":"Order. In every order the shop lists the products in stock first and the sold-out ones after them, each block in the chosen order (so price_asc runs low to high, then starts again from the cheapest sold-out product); in_stock_only drops the second block. With a keyword the default relevance order reshuffles tied rows between requests; for paging through many pages use price_asc, price_desc or featured.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance with a keyword, the shop's own order without one (default)"},{"value":"featured","label":"The shop's recommended order (おすすめ順)"},{"value":"price_asc","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"}],"default":"relevance","example":"price_desc"},{"name":"per_page","type":"enum","required":false,"description":"Rows per page: 10, 20, 30, 50 or 100 (the shop's default).","on_invalid":"reject","allowed_values":[{"value":10,"label":"10 rows"},{"value":20,"label":"20 rows"},{"value":30,"label":"30 rows"},{"value":50,"label":"50 rows"},{"value":100,"label":"100 rows (the shop's default)"}],"default":100,"example":20,"aliases":["limit"]},{"name":"page","type":"integer","required":false,"description":"Page number. A page past the last one answers no rows and meta.past_last_page=true (the shop itself would repeat page 1).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":2000}],"returns":"rows[]: id / product_id (give it to `card`), game, url, name (the shop's full title), card_name, condition (状態 S, A-, B, C, D, or 難 = the shop marks the copy as flawed (状態難), also on graded slabs; MTG NM/NM-/EX+/EX/PLD/HPLD/POOR …), graded, grader (as the shop writes it: PSA, BGS, CGC, ARS, PCG, ACE, VSS, CGS, Gemix …), grade (string: 10, 10+, 9.5 …), grade_label (black = a CGC / BGS black-label slab (黒); another label as the shop writes it; null without one), on_sale, sealed, rarity, card_number, attribute (the 《》 type or civilisation tag), language (MTG), set_code (Pokémon: the shop's set code; MTG: the 【】 set), model_number (the shop's raw field), price_jpy (tax included), price_includes_tax, in_stock, stock_qty (web-shop stock; 0 when sold out), stock_unit (枚/点/個), image. meta: total (the shop's own count), page, per_page, last_page, has_more, past_last_page, listing (keyword / group / category), facets{categories[], groups[]} ({id, name, count} — the shop's own filter lists for this result), warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"ピカチュウ","per_page":20}},{"name":"card","description":"One Card Rush product in full: price, stock, the most one order can take, category, the shop's note and the large image.","required_params":["product_id"],"optional_params":["game"],"params":[{"name":"product_id","type":"string","required":true,"description":"A search row's `product_id` (or a buying-price row's `shop_product_id`), or a Card Rush product URL such as https://www.cardrush-pokemon.jp/product/1130.","on_invalid":"reject","example":"1130","aliases":["id","url"]},{"name":"game","type":"enum","required":false,"description":"Which Card Rush shop: pokemon (cardrush-pokemon.jp, default), onepiece, yugioh (cardrush.jp), mtg, duel_masters, battle_spirits, digimon, vanguard, dragon_ball, shadowverse_evolve. Same fields on every shop.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon"},{"value":"onepiece","label":"One Piece"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"mtg","label":"Magic: The Gathering"},{"value":"duel_masters","label":"Duel Masters"},{"value":"battle_spirits","label":"Battle Spirits Saga"},{"value":"digimon","label":"Digimon"},{"value":"vanguard","label":"Cardfight!! Vanguard"},{"value":"dragon_ball","label":"Dragon Ball Super Fusion World"},{"value":"shadowverse_evolve","label":"Shadowverse: Evolve"}],"default":"pokemon","example":"pokemon"}],"returns":"card{id / product_id (give it to `card`), game, url, name (the shop's full title), card_name, condition (状態 S, A-, B, C, D, or 難 = the shop marks the copy as flawed (状態難), also on graded slabs; MTG NM/NM-/EX+/EX/PLD/HPLD/POOR …), graded, grader (as the shop writes it: PSA, BGS, CGC, ARS, PCG, ACE, VSS, CGS, Gemix …), grade (string: 10, 10+, 9.5 …), grade_label (black = a CGC / BGS black-label slab (黒); another label as the shop writes it; null without one), on_sale, sealed, rarity, card_number, attribute (the 《》 type or civilisation tag), language (MTG), set_code (Pokémon: the shop's set code; MTG: the 【】 set), model_number (the shop's raw field), price_jpy (tax included), price_includes_tax, in_stock, stock_qty (web-shop stock; 0 when sold out), stock_unit (枚/点/個), image, max_order_qty (the quantity menu's top: the stock, or the per-customer limit on sale items), category{id, name}, categories[], description, price_mismatch (the page's printed price vs its own product:price meta)}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"1130"}},{"name":"buying_prices","description":"Card Rush's buying-price list (買取表): what the shop pays for a card, in JPY. This is a BUY price — never the sale price. Each row links to the shop product it refers to.","required_params":[],"optional_params":["game","query","card_number","rarity","pack_code","category","hot_only","sort","per_page","page"],"params":[{"name":"game","type":"enum","required":false,"description":"Which game's buying-price list: pokemon (default), onepiece, yugioh, mtg, duel_masters, battle_spirits, digimon, vanguard, dragon_ball. Shadowverse: Evolve has no published list.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon"},{"value":"onepiece","label":"One Piece"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"mtg","label":"Magic: The Gathering"},{"value":"duel_masters","label":"Duel Masters"},{"value":"battle_spirits","label":"Battle Spirits Saga"},{"value":"digimon","label":"Digimon"},{"value":"vanguard","label":"Cardfight!! Vanguard"},{"value":"dragon_ball","label":"Dragon Ball Super Fusion World"}],"default":"pokemon","example":"pokemon"},{"name":"query","type":"string","required":false,"description":"Card or product name, partial match (Japanese).","on_invalid":"reject","example":"ピカチュウ","aliases":["q","keyword","name"]},{"name":"card_number","type":"string","required":false,"description":"The card number printed on the card (型番), e.g. 025/165, OP13-118, QCCP-JP004.","on_invalid":"reject","example":"025/165","aliases":["model_number"]},{"name":"rarity","type":"string","required":false,"description":"Rarity as the list writes it (SAR, SR, AR, UR, SEC, シークレット, …).","on_invalid":"reject","example":"SAR"},{"name":"pack_code","type":"string","required":false,"description":"Set / pack code (パック記号), e.g. M2a, SV-P. Pokémon and Dragon Ball lists.","on_invalid":"reject","example":"M2a"},{"name":"category","type":"string","required":false,"description":"One of the list's own sections for that game. pokemon: 最新弾, スタンダード, エクストラ, 旧裏, サプライ, パック · onepiece: 最新弾, 通常弾, サプライ, パック · yugioh: 最新弾, 通常弾, アジアシク, コレクター向け(初期系), ラッシュデュエル, サプライ, パック · mtg: 高額系, foil系, スタンダード, スタンダード最新弾, パイオニア以下, モダン以下最新弾 · duel_masters: 最新弾, 通常弾, 初期系, 高額系, サプライ, 未開封BOX · battle_spirits / digimon: 最新弾, 通常弾, サプライ · vanguard: 最新弾, Dスタン, Vスタン・Pスタン, サプライ · dragon_ball: 最新弾, 通常弾, 未開封BOX, サプライ. Default = the page's default (the single-card sections).","on_invalid":"reject","example":"スタンダード","aliases":["display_category"]},{"name":"hot_only","type":"boolean","required":false,"description":"Only cards the shop flags as 只今の買取額UP (buying price raised now).","on_invalid":"reject","default":false,"example":true,"aliases":["is_hot"]},{"name":"sort","type":"enum","required":false,"description":"Order by buying price.","on_invalid":"reject","allowed_values":[{"value":"price_desc","label":"Buying price high to low (the page's default)"},{"value":"price_asc","label":"Buying price low to high"}],"default":"price_desc","example":"price_asc"},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, 1-100 (default 100).","on_invalid":"reject","default":100,"example":50,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"page","type":"integer","required":false,"description":"Page number; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5000}],"returns":"rows[]: id, game, name, variant (1ED, アンリミ, 未開封, パラレル …), buy_price_jpy, is_hot, rarity, model_number (the card number), pack_code, pack_name, element, regulation, product_category, display_category, updated_at, shop_product_id (give it to `card` as product_id), shop_url, image; MTG rows also condition, language, name_with_condition. meta: page, per_page, last_page, has_more, list_updated (the page's own 'as of' label, JST), filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"ピカチュウ"}}]},{"name":"cardtrader","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"CardTrader API scraper — Europe's trading-card marketplace (cardtrader.com): Magic, Pokémon, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood, Digimon, Star Wars Unlimited and more. Search with set, category and rarity filters, every public offer with condition, card language, foil, seller and seller country, CardTrader's market price with 35-day history, sets and games. EUR or USD, any ship-to country. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cardtrader/v1","spec_available":true,"actions":[{"name":"search","description":"Search CardTrader for one game by card or product name: product id, name, version, collector number, set, category, number of offers, the lowest price and the image. Narrow to a set, a category (singles, booster boxes…) or a rarity; sort by name, price, collector number, rarity or release date; page through 12 rows at a time. Add card_language / min_condition / foil / first_edition to get, per row, the 3 cheapest offers matching them (CardTrader's own search filter), and rows without a matching offer dropped.","required_params":[],"optional_params":["query","game","expansion","category","rarity","sort","page","only_available","card_language","min_condition","foil","reverse_holo","first_edition","signed","altered","with_offers","language","currency","country","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Card or product name (part of it is enough), or text of the version line such as a collector number '081/080'.","on_invalid":"reject","example":"charizard","aliases":["q","name","keyword"]},{"name":"game","type":"enum","required":false,"description":"The game, as CardTrader names it in its URLs. Aliases like mtg, ygo, onepiece, fab, swu, dbs and the numeric game id are accepted.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: the Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yu-gi-oh","label":"Yu-Gi-Oh!"},{"value":"flesh-and-blood","label":"Flesh and Blood"},{"value":"digimon","label":"Digimon"},{"value":"one-piece","label":"One Piece"},{"value":"dragon-ball-super","label":"Dragon Ball Super"},{"value":"cardfight-vanguard","label":"Cardfight!! Vanguard"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"star-wars","label":"Star Wars Unlimited"},{"value":"union-arena","label":"Union Arena"},{"value":"riftbound","label":"Riftbound | League of Legends"},{"value":"gundam","label":"Gundam"},{"value":"sorcery","label":"Sorcery: Contested Realm"},{"value":"palworld","label":"Palworld"},{"value":"cyberpunk","label":"Cyberpunk"}],"default":"pokemon","example":"magic"},{"name":"expansion","type":"string","required":false,"description":"Set slug from `expansions` (e.g. delta-reign, wild-blaze) or a cardtrader.com set URL.","on_invalid":"reject","example":"wild-blaze","aliases":["set","expansion_slug"]},{"name":"category","type":"string","required":false,"description":"Category: singles, or a category id / slug / name from `games` (Booster Box, Boosters, Bundle, Complete Set…). Omit for every category.","on_invalid":"reject","example":"singles","aliases":["category_id"]},{"name":"rarity","type":"string","required":false,"description":"Rarity as CardTrader names it for the game (rarity_options in the response lists them). Applies to single cards; category defaults to singles when only rarity is set.","on_invalid":"reject","example":"Special Illustration Rare"},{"name":"sort","type":"enum","required":false,"description":"CardTrader's own orderings: name, price, collector number, rarity, release date.","on_invalid":"reject","allowed_values":[{"value":"name_asc","label":"Name A → Z"},{"value":"name_desc","label":"Name Z → A"},{"value":"price_asc","label":"Price, lower first (the site's own price index)"},{"value":"price_desc","label":"Price, higher first (the site's own price index)"},{"value":"number_asc","label":"Collector number, lower first"},{"value":"number_desc","label":"Collector number, higher first"},{"value":"rarity_asc","label":"Rarity, common first"},{"value":"rarity_desc","label":"Rarity, rarest first"},{"value":"newest","label":"Release date, newest first"},{"value":"oldest","label":"Release date, oldest first"}],"default":"name_asc","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Result page, 12 rows each (CardTrader's page size).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"only_available","type":"boolean","required":false,"description":"Only products that currently have offers.","on_invalid":"reject","default":false},{"name":"card_language","type":"array","required":false,"description":"Only offers of cards printed in these languages (one or more codes, e.g. en or en,jp). Names such as Japanese are accepted.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"jp","label":"Japanese"},{"value":"kr","label":"Korean"},{"value":"ru","label":"Russian"},{"value":"zh-CN","label":"Chinese (Simplified)"},{"value":"zh-TW","label":"Chinese (Traditional)"},{"value":"nl","label":"Dutch"},{"value":"pl","label":"Polish"},{"value":"sv","label":"Swedish"},{"value":"id","label":"Indonesian"},{"value":"th","label":"Thai"}],"example":["en"]},{"name":"min_condition","type":"enum","required":false,"description":"Only offers in this condition or better (Mint > Near Mint > Slightly Played > Moderately Played > Played > Poor). Codes NM, SP, MP, PL, PO are accepted.","on_invalid":"reject","allowed_values":[{"value":"mint","label":"Mint"},{"value":"near_mint","label":"Near Mint"},{"value":"slightly_played","label":"Slightly Played"},{"value":"moderately_played","label":"Moderately Played"},{"value":"played","label":"Played"},{"value":"poor","label":"Poor"}],"example":"near_mint"},{"name":"foil","type":"boolean","required":false,"description":"true = only foil offers, false = only non-foil (games with a foil property; for Pokémon use reverse_holo).","on_invalid":"reject"},{"name":"reverse_holo","type":"boolean","required":false,"description":"Pokémon: true = only reverse-holo offers, false = only non-reverse.","on_invalid":"reject"},{"name":"first_edition","type":"boolean","required":false,"description":"true/false: first-edition copies (Pokémon, Yu-Gi-Oh!).","on_invalid":"reject"},{"name":"signed","type":"boolean","required":false,"description":"true/false: signed copies.","on_invalid":"reject"},{"name":"altered","type":"boolean","required":false,"description":"true/false: altered copies.","on_invalid":"reject"},{"name":"with_offers","type":"boolean","required":false,"description":"Also return the 3 cheapest offers of every row (set automatically when an offer filter is given).","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"CardTrader site language: card names follow it in translated_name (Charizard → Glurak in de); a query also matches names in this language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"}],"default":"en","example":"en"},{"name":"currency","type":"enum","required":false,"description":"Price currency. USD prices are CardTrader's own USD prices (with its own buyer fee), not a conversion of the euro price.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (CardTrader Europe)"},{"value":"USD","label":"US dollar (CardTrader's US site; English names only)"}],"default":"EUR","example":"EUR"},{"name":"country","type":"enum","required":false,"description":"Ship-to country of the shopper. CardTrader shows only the offers whose sellers ship to this country (directly or through CardTrader Zero), and the shipping 'from' price to it, so offers and lowest prices differ by country.","on_invalid":"reject","allowed_values":[{"value":"DE","label":"Germany"},{"value":"US","label":"United States"},{"value":"IT","label":"Italy"},{"value":"FR","label":"France"},{"value":"ES","label":"Spain"},{"value":"GB","label":"United Kingdom"},{"value":"NL","label":"Netherlands"},{"value":"BE","label":"Belgium"},{"value":"AT","label":"Austria"},{"value":"PT","label":"Portugal"},{"value":"IE","label":"Ireland"},{"value":"LU","label":"Luxembourg"},{"value":"DK","label":"Denmark"},{"value":"SE","label":"Sweden"},{"value":"FI","label":"Finland"},{"value":"PL","label":"Poland"},{"value":"CZ","label":"Czechia"},{"value":"SK","label":"Slovakia"},{"value":"SI","label":"Slovenia"},{"value":"HR","label":"Croatia"},{"value":"HU","label":"Hungary"},{"value":"RO","label":"Romania"},{"value":"BG","label":"Bulgaria"},{"value":"GR","label":"Greece"},{"value":"CY","label":"Cyprus"},{"value":"MT","label":"Malta"},{"value":"EE","label":"Estonia"},{"value":"LV","label":"Latvia"},{"value":"LT","label":"Lithuania"},{"value":"CH","label":"Switzerland"},{"value":"NO","label":"Norway"},{"value":"CA","label":"Canada"},{"value":"AU","label":"Australia"},{"value":"JP","label":"Japan"}],"default":"DE","example":"DE","aliases":["ship_to"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, name, translated_name, version, collector_number, rarity, url, game_id, category{id, slug, name, is_single}, expansion{id, slug, code, name, translated_name, release_date, presale}, offers_count (offer rows the site counts for the card), lowest_price, currency, lowest_price_formatted, image, image_full, best_offers[] (with an offer filter or with_offers: the 3 cheapest matching offers, same fields as product/offers)}, count, page, per_page, has_more, game, language, currency, country, sort, filters_applied, offer_filters_applied, rarity_options[], rows_dropped_without_offers, query, expansion, category","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon","query":"charizard","sort":"price_desc"}},{"name":"expansion/products","description":"Every product of one set with the same rows as search, by collector number by default; filter by category, rarity and name, or by offer condition / language / foil.","required_params":["expansion"],"optional_params":["query","game","category","rarity","sort","page","only_available","card_language","min_condition","foil","reverse_holo","first_edition","signed","altered","with_offers","language","currency","country","max_rotations"],"params":[{"name":"expansion","type":"string","required":true,"description":"Set slug from `expansions` (e.g. delta-reign, wild-blaze) or a cardtrader.com set URL.","on_invalid":"reject","example":"delta-reign","aliases":["set","expansion_slug"]},{"name":"query","type":"string","required":false,"description":"Card or product name (part of it is enough), or text of the version line such as a collector number '081/080'.","on_invalid":"reject","example":"charizard","aliases":["q","name","keyword"]},{"name":"game","type":"enum","required":false,"description":"The game, as CardTrader names it in its URLs. Aliases like mtg, ygo, onepiece, fab, swu, dbs and the numeric game id are accepted.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: the Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yu-gi-oh","label":"Yu-Gi-Oh!"},{"value":"flesh-and-blood","label":"Flesh and Blood"},{"value":"digimon","label":"Digimon"},{"value":"one-piece","label":"One Piece"},{"value":"dragon-ball-super","label":"Dragon Ball Super"},{"value":"cardfight-vanguard","label":"Cardfight!! Vanguard"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"star-wars","label":"Star Wars Unlimited"},{"value":"union-arena","label":"Union Arena"},{"value":"riftbound","label":"Riftbound | League of Legends"},{"value":"gundam","label":"Gundam"},{"value":"sorcery","label":"Sorcery: Contested Realm"},{"value":"palworld","label":"Palworld"},{"value":"cyberpunk","label":"Cyberpunk"}],"default":"pokemon","example":"magic"},{"name":"category","type":"string","required":false,"description":"Category: singles, or a category id / slug / name from `games` (Booster Box, Boosters, Bundle, Complete Set…). Omit for every category.","on_invalid":"reject","example":"singles","aliases":["category_id"]},{"name":"rarity","type":"string","required":false,"description":"Rarity as CardTrader names it for the game (rarity_options in the response lists them). Applies to single cards; category defaults to singles when only rarity is set.","on_invalid":"reject","example":"Special Illustration Rare"},{"name":"sort","type":"enum","required":false,"description":"CardTrader's own orderings: name, price, collector number, rarity, release date.","on_invalid":"reject","allowed_values":[{"value":"name_asc","label":"Name A → Z"},{"value":"name_desc","label":"Name Z → A"},{"value":"price_asc","label":"Price, lower first (the site's own price index)"},{"value":"price_desc","label":"Price, higher first (the site's own price index)"},{"value":"number_asc","label":"Collector number, lower first"},{"value":"number_desc","label":"Collector number, higher first"},{"value":"rarity_asc","label":"Rarity, common first"},{"value":"rarity_desc","label":"Rarity, rarest first"},{"value":"newest","label":"Release date, newest first"},{"value":"oldest","label":"Release date, oldest first"}],"default":"name_asc","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Result page, 12 rows each (CardTrader's page size).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"only_available","type":"boolean","required":false,"description":"Only products that currently have offers.","on_invalid":"reject","default":false},{"name":"card_language","type":"array","required":false,"description":"Only offers of cards printed in these languages (one or more codes, e.g. en or en,jp). Names such as Japanese are accepted.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"jp","label":"Japanese"},{"value":"kr","label":"Korean"},{"value":"ru","label":"Russian"},{"value":"zh-CN","label":"Chinese (Simplified)"},{"value":"zh-TW","label":"Chinese (Traditional)"},{"value":"nl","label":"Dutch"},{"value":"pl","label":"Polish"},{"value":"sv","label":"Swedish"},{"value":"id","label":"Indonesian"},{"value":"th","label":"Thai"}],"example":["en"]},{"name":"min_condition","type":"enum","required":false,"description":"Only offers in this condition or better (Mint > Near Mint > Slightly Played > Moderately Played > Played > Poor). Codes NM, SP, MP, PL, PO are accepted.","on_invalid":"reject","allowed_values":[{"value":"mint","label":"Mint"},{"value":"near_mint","label":"Near Mint"},{"value":"slightly_played","label":"Slightly Played"},{"value":"moderately_played","label":"Moderately Played"},{"value":"played","label":"Played"},{"value":"poor","label":"Poor"}],"example":"near_mint"},{"name":"foil","type":"boolean","required":false,"description":"true = only foil offers, false = only non-foil (games with a foil property; for Pokémon use reverse_holo).","on_invalid":"reject"},{"name":"reverse_holo","type":"boolean","required":false,"description":"Pokémon: true = only reverse-holo offers, false = only non-reverse.","on_invalid":"reject"},{"name":"first_edition","type":"boolean","required":false,"description":"true/false: first-edition copies (Pokémon, Yu-Gi-Oh!).","on_invalid":"reject"},{"name":"signed","type":"boolean","required":false,"description":"true/false: signed copies.","on_invalid":"reject"},{"name":"altered","type":"boolean","required":false,"description":"true/false: altered copies.","on_invalid":"reject"},{"name":"with_offers","type":"boolean","required":false,"description":"Also return the 3 cheapest offers of every row (set automatically when an offer filter is given).","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"CardTrader site language: card names follow it in translated_name (Charizard → Glurak in de); a query also matches names in this language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"}],"default":"en","example":"en"},{"name":"currency","type":"enum","required":false,"description":"Price currency. USD prices are CardTrader's own USD prices (with its own buyer fee), not a conversion of the euro price.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (CardTrader Europe)"},{"value":"USD","label":"US dollar (CardTrader's US site; English names only)"}],"default":"EUR","example":"EUR"},{"name":"country","type":"enum","required":false,"description":"Ship-to country of the shopper. CardTrader shows only the offers whose sellers ship to this country (directly or through CardTrader Zero), and the shipping 'from' price to it, so offers and lowest prices differ by country.","on_invalid":"reject","allowed_values":[{"value":"DE","label":"Germany"},{"value":"US","label":"United States"},{"value":"IT","label":"Italy"},{"value":"FR","label":"France"},{"value":"ES","label":"Spain"},{"value":"GB","label":"United Kingdom"},{"value":"NL","label":"Netherlands"},{"value":"BE","label":"Belgium"},{"value":"AT","label":"Austria"},{"value":"PT","label":"Portugal"},{"value":"IE","label":"Ireland"},{"value":"LU","label":"Luxembourg"},{"value":"DK","label":"Denmark"},{"value":"SE","label":"Sweden"},{"value":"FI","label":"Finland"},{"value":"PL","label":"Poland"},{"value":"CZ","label":"Czechia"},{"value":"SK","label":"Slovakia"},{"value":"SI","label":"Slovenia"},{"value":"HR","label":"Croatia"},{"value":"HU","label":"Hungary"},{"value":"RO","label":"Romania"},{"value":"BG","label":"Bulgaria"},{"value":"GR","label":"Greece"},{"value":"CY","label":"Cyprus"},{"value":"MT","label":"Malta"},{"value":"EE","label":"Estonia"},{"value":"LV","label":"Latvia"},{"value":"LT","label":"Lithuania"},{"value":"CH","label":"Switzerland"},{"value":"NO","label":"Norway"},{"value":"CA","label":"Canada"},{"value":"AU","label":"Australia"},{"value":"JP","label":"Japan"}],"default":"DE","example":"DE","aliases":["ship_to"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, name, translated_name, version, collector_number, rarity, url, game_id, category{id, slug, name, is_single}, expansion{id, slug, code, name, translated_name, release_date, presale}, offers_count (offer rows the site counts for the card), lowest_price, currency, lowest_price_formatted, image, image_full, best_offers[] (with an offer filter or with_offers: the 3 cheapest matching offers, same fields as product/offers)}, count, page, per_page, has_more, game, language, currency, country, sort, filters_applied, offer_filters_applied, rarity_options[], rows_dropped_without_offers, expansion, category","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon","expansion":"delta-reign"}},{"name":"expansions","description":"Every set CardTrader lists for a game, newest first: slug (for search and expansion/products), name, set code and release date.","required_params":[],"optional_params":["game","query","max_rotations"],"params":[{"name":"game","type":"enum","required":false,"description":"The game, as CardTrader names it in its URLs. Aliases like mtg, ygo, onepiece, fab, swu, dbs and the numeric game id are accepted.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: the Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yu-gi-oh","label":"Yu-Gi-Oh!"},{"value":"flesh-and-blood","label":"Flesh and Blood"},{"value":"digimon","label":"Digimon"},{"value":"one-piece","label":"One Piece"},{"value":"dragon-ball-super","label":"Dragon Ball Super"},{"value":"cardfight-vanguard","label":"Cardfight!! Vanguard"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"star-wars","label":"Star Wars Unlimited"},{"value":"union-arena","label":"Union Arena"},{"value":"riftbound","label":"Riftbound | League of Legends"},{"value":"gundam","label":"Gundam"},{"value":"sorcery","label":"Sorcery: Contested Realm"},{"value":"palworld","label":"Palworld"},{"value":"cyberpunk","label":"Cyberpunk"}],"default":"pokemon","example":"magic"},{"name":"query","type":"string","required":false,"description":"Only sets whose name or code contains this text.","on_invalid":"reject","example":"scarlet","aliases":["q"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"expansions[]{slug, name, code, release_date, url}, count, total, game","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"magic"}},{"name":"games","description":"Every game CardTrader sells, with its id, slug and product categories (Singles, Booster Boxes, Boosters, Bundles, Complete Sets…) with their ids and slugs.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"games[]{id, slug, name, url, categories[]{id, slug, name, is_single}}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"product/detail","description":"One CardTrader card or product by id or URL: name, set, collector number, rarity, images, the card page's price boxes (CT Min Price, CT Market Price, Best Deal, US Market Price), the ~35-day daily CT market and US market price history (plus foil), the price summary (lowest price overall, with CardTrader Zero, with direct shipping, in Near Mint or better), the number of copies for sale, other printings, and the cheapest offers with condition, card language, foil, seller, seller country and shipping 'from' price for the ship-to country.","required_params":["product_id"],"optional_params":["offers_limit","language","currency","country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"CardTrader product id (product_id of any search row) or a cardtrader.com card URL.","on_invalid":"reject","example":"374423","aliases":["id","url","blueprint_id"]},{"name":"offers_limit","type":"integer","required":false,"description":"How many of the cheapest offers to include (0 = none, price summary only).","on_invalid":"reject","default":100,"minimum":0,"maximum":100},{"name":"language","type":"enum","required":false,"description":"CardTrader site language: card names follow it in translated_name (Charizard → Glurak in de); a query also matches names in this language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"}],"default":"en","example":"en"},{"name":"currency","type":"enum","required":false,"description":"Price currency. USD prices are CardTrader's own USD prices (with its own buyer fee), not a conversion of the euro price.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (CardTrader Europe)"},{"value":"USD","label":"US dollar (CardTrader's US site; English names only)"}],"default":"EUR","example":"EUR"},{"name":"country","type":"enum","required":false,"description":"Ship-to country of the shopper. CardTrader shows only the offers whose sellers ship to this country (directly or through CardTrader Zero), and the shipping 'from' price to it, so offers and lowest prices differ by country.","on_invalid":"reject","allowed_values":[{"value":"DE","label":"Germany"},{"value":"US","label":"United States"},{"value":"IT","label":"Italy"},{"value":"FR","label":"France"},{"value":"ES","label":"Spain"},{"value":"GB","label":"United Kingdom"},{"value":"NL","label":"Netherlands"},{"value":"BE","label":"Belgium"},{"value":"AT","label":"Austria"},{"value":"PT","label":"Portugal"},{"value":"IE","label":"Ireland"},{"value":"LU","label":"Luxembourg"},{"value":"DK","label":"Denmark"},{"value":"SE","label":"Sweden"},{"value":"FI","label":"Finland"},{"value":"PL","label":"Poland"},{"value":"CZ","label":"Czechia"},{"value":"SK","label":"Slovakia"},{"value":"SI","label":"Slovenia"},{"value":"HR","label":"Croatia"},{"value":"HU","label":"Hungary"},{"value":"RO","label":"Romania"},{"value":"BG","label":"Bulgaria"},{"value":"GR","label":"Greece"},{"value":"CY","label":"Cyprus"},{"value":"MT","label":"Malta"},{"value":"EE","label":"Estonia"},{"value":"LV","label":"Latvia"},{"value":"LT","label":"Lithuania"},{"value":"CH","label":"Switzerland"},{"value":"NO","label":"Norway"},{"value":"CA","label":"Canada"},{"value":"AU","label":"Australia"},{"value":"JP","label":"Japan"}],"default":"DE","example":"DE","aliases":["ship_to"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, translated_name, version, collector_number, rarity, url, game{id, slug, name}, category{}, expansion{}, release_date, presale, can_be_graded, image, back_image, attributes{}, ct_min_price, ct_market_price, best_deal_price (the card page's price boxes 'CT Min Price', 'CT Market Price', 'Best Deal' — cheapest CardTrader Zero offer in English, Near Mint or better — computed as the page computes them), ct_min_price_foil, ct_market_price_foil, us_market_price ('US Market Price' box), us_market_price_foil, ct_market_price_daily (latest point of the daily CT market series), ct_market_price_daily_date, ct_market_trend, ct_market_price_daily_foil, price_history{ct_market[]{date, price}, ct_market_foil[], us_market[], us_market_foil[]} (~35 days), copies_for_sale (the site's count of copies), other_printings[]{product_id, name, version, expansion, expansion_slug, url}}, price_summary{lowest_price, lowest_price_ct_zero, lowest_price_direct, lowest_price_near_mint, offer_rows, copies_in_offers}, offers[]{offer_id, price (what the buyer pays, as the site shows it), currency, price_formatted, seller_price, buyer_fee, quantity, condition, condition_code (MT|NM|SP|MP|PL|PO), condition_rank, card_language{code, name}, foil, reverse_holo, first_edition, signed, altered, graded, rarity, collector_number, comment, photos[], seller{id, username, url, type (private|professional), country_code, country, ct_zero_seller, one_day_ready, rating_percent, feedback_count, ct_zero_avg_shipping_days}, ships_from, shipping_from_price, direct_shipping, ct_zero, on_vacation, offer_type (seller|ct_zero_hub), hub_group_size}, hub_offers[] (CardTrader Zero hub stock, same fields), offers_count, offers_has_more, currency, country","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"374423"}},{"name":"product/offers","description":"Every public offer on one card or product, cheapest first, as CardTrader shows them to a shopper in the ship-to country: price (with the seller price and CardTrader's buyer fee), quantity, condition, card language, foil / reverse holo, first edition, signed, altered, graded, the seller's name, type, country, rating and feedback count, the shipping 'from' price, whether the seller ships direct or only through CardTrader Zero, and CardTrader Zero hub stock. Filter by card language, minimum condition, foil, first edition, signed, altered, graded, seller country, seller type, CardTrader Zero or direct shipping and price; every filtered field is returned per offer so the filtering can be checked. Reads up to 1 000 offer rows.","required_params":["product_id"],"optional_params":["card_language","min_condition","foil","reverse_holo","first_edition","signed","altered","graded","seller_country","seller_type","ct_zero_only","direct_shipping_only","price_min","price_max","limit","language","currency","country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"CardTrader product id (product_id of any search row) or a cardtrader.com card URL.","on_invalid":"reject","example":"374423","aliases":["id","url","blueprint_id"]},{"name":"card_language","type":"array","required":false,"description":"Only offers of cards printed in these languages (one or more codes, e.g. en or en,jp). Names such as Japanese are accepted.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"jp","label":"Japanese"},{"value":"kr","label":"Korean"},{"value":"ru","label":"Russian"},{"value":"zh-CN","label":"Chinese (Simplified)"},{"value":"zh-TW","label":"Chinese (Traditional)"},{"value":"nl","label":"Dutch"},{"value":"pl","label":"Polish"},{"value":"sv","label":"Swedish"},{"value":"id","label":"Indonesian"},{"value":"th","label":"Thai"}],"example":["en"]},{"name":"min_condition","type":"enum","required":false,"description":"Only offers in this condition or better (Mint > Near Mint > Slightly Played > Moderately Played > Played > Poor). Codes NM, SP, MP, PL, PO are accepted.","on_invalid":"reject","allowed_values":[{"value":"mint","label":"Mint"},{"value":"near_mint","label":"Near Mint"},{"value":"slightly_played","label":"Slightly Played"},{"value":"moderately_played","label":"Moderately Played"},{"value":"played","label":"Played"},{"value":"poor","label":"Poor"}],"example":"near_mint"},{"name":"foil","type":"boolean","required":false,"description":"true = only foil offers, false = only non-foil (games with a foil property; for Pokémon use reverse_holo).","on_invalid":"reject"},{"name":"reverse_holo","type":"boolean","required":false,"description":"Pokémon: true = only reverse-holo offers, false = only non-reverse.","on_invalid":"reject"},{"name":"first_edition","type":"boolean","required":false,"description":"true/false: first-edition copies (Pokémon, Yu-Gi-Oh!).","on_invalid":"reject"},{"name":"signed","type":"boolean","required":false,"description":"true/false: signed copies.","on_invalid":"reject"},{"name":"altered","type":"boolean","required":false,"description":"true/false: altered copies.","on_invalid":"reject"},{"name":"graded","type":"boolean","required":false,"description":"true/false: graded (slabbed) copies.","on_invalid":"reject"},{"name":"seller_country","type":"array","required":false,"description":"Only offers shipped from these countries (ISO codes).","on_invalid":"reject","example":["DE","IT"]},{"name":"seller_type","type":"enum","required":false,"description":"Only offers from this seller type.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private seller"},{"value":"professional","label":"Professional seller"}],"example":"professional"},{"name":"ct_zero_only","type":"boolean","required":false,"description":"Only offers buyable with CardTrader Zero (shipped together via CardTrader's hub).","on_invalid":"reject"},{"name":"direct_shipping_only","type":"boolean","required":false,"description":"Only offers the seller ships directly to the ship-to country.","on_invalid":"reject"},{"name":"price_min","type":"number","required":false,"description":"Lowest offer price.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest offer price.","on_invalid":"reject","minimum":0},{"name":"limit","type":"integer","required":false,"description":"How many offers to return (cheapest first).","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":1000},{"name":"language","type":"enum","required":false,"description":"CardTrader site language: card names follow it in translated_name (Charizard → Glurak in de); a query also matches names in this language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"}],"default":"en","example":"en"},{"name":"currency","type":"enum","required":false,"description":"Price currency. USD prices are CardTrader's own USD prices (with its own buyer fee), not a conversion of the euro price.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (CardTrader Europe)"},{"value":"USD","label":"US dollar (CardTrader's US site; English names only)"}],"default":"EUR","example":"EUR"},{"name":"country","type":"enum","required":false,"description":"Ship-to country of the shopper. CardTrader shows only the offers whose sellers ship to this country (directly or through CardTrader Zero), and the shipping 'from' price to it, so offers and lowest prices differ by country.","on_invalid":"reject","allowed_values":[{"value":"DE","label":"Germany"},{"value":"US","label":"United States"},{"value":"IT","label":"Italy"},{"value":"FR","label":"France"},{"value":"ES","label":"Spain"},{"value":"GB","label":"United Kingdom"},{"value":"NL","label":"Netherlands"},{"value":"BE","label":"Belgium"},{"value":"AT","label":"Austria"},{"value":"PT","label":"Portugal"},{"value":"IE","label":"Ireland"},{"value":"LU","label":"Luxembourg"},{"value":"DK","label":"Denmark"},{"value":"SE","label":"Sweden"},{"value":"FI","label":"Finland"},{"value":"PL","label":"Poland"},{"value":"CZ","label":"Czechia"},{"value":"SK","label":"Slovakia"},{"value":"SI","label":"Slovenia"},{"value":"HR","label":"Croatia"},{"value":"HU","label":"Hungary"},{"value":"RO","label":"Romania"},{"value":"BG","label":"Bulgaria"},{"value":"GR","label":"Greece"},{"value":"CY","label":"Cyprus"},{"value":"MT","label":"Malta"},{"value":"EE","label":"Estonia"},{"value":"LV","label":"Latvia"},{"value":"LT","label":"Lithuania"},{"value":"CH","label":"Switzerland"},{"value":"NO","label":"Norway"},{"value":"CA","label":"Canada"},{"value":"AU","label":"Australia"},{"value":"JP","label":"Japan"}],"default":"DE","example":"DE","aliases":["ship_to"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, translated_name, version, expansion{}, rarity, url, market_price, copies_for_sale}, price_summary{} (over the matching offers), offers[]{offer_id, price (what the buyer pays, as the site shows it), currency, price_formatted, seller_price, buyer_fee, quantity, condition, condition_code (MT|NM|SP|MP|PL|PO), condition_rank, card_language{code, name}, foil, reverse_holo, first_edition, signed, altered, graded, rarity, collector_number, comment, photos[], seller{id, username, url, type (private|professional), country_code, country, ct_zero_seller, one_day_ready, rating_percent, feedback_count, ct_zero_avg_shipping_days}, ships_from, shipping_from_price, direct_shipping, ct_zero, on_vacation, offer_type (seller|ct_zero_hub), hub_group_size}, count, matching_offers, scanned_offers, pages_read, offers_truncated, filters_applied, currency, country","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"374423"}}]},{"name":"cargurus","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"CarGurus API — live used-car listings from cargurus.com (US), cargurus.ca and cargurus.co.uk with CarGurus's own deal rating (Great / Good / Fair / High / Overpriced) and instant market value (IMV) on every car. Search around a ZIP or postcode by make, model, year, price, mileage, body, fuel, transmission, drivetrain, colour, deal rating, seller type, certification, days on market, price drops, single owner, no accidents and one dealer's stock; then pull one listing in full: price history, dealer fees, vehicle-history counts, options, specs, description, photos and the dealer with address, phone, rating and hours. Plus the make and model lists. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cargurus/v1","spec_available":true,"actions":[{"name":"search","description":"Search CarGurus used-car listings around a ZIP / postcode. Every row carries the asking price, CarGurus's deal rating and instant market value (IMV), the gap between them, days on market, the last price drop, VIN, specs, features and the dealer. Filters are applied by the source; every enum is a closed list per site — an unknown value is rejected instead of silently returning everything.","required_params":["zip"],"optional_params":["site","distance","nationwide","make","model_id","year_min","year_max","price_min","price_max","mileage_min","mileage_max","days_on_market_min","days_on_market_max","body_type","fuel","transmission","drivetrain","deal_rating","seller_type","condition","exterior_color","price_drops_only","single_owner","no_accidents","with_photos_only","include_shipped","dealer_id","sort","page"],"params":[{"name":"zip","type":"string","required":true,"description":"Search centre: a US ZIP (10001), a Canadian postal code (M5V 3L9) or a UK postcode (SW1A 1AA), matching `site`. Required: without it the source would place the search wherever the request comes from. A code the source cannot place is rejected.","on_invalid":"reject","example":"10001","aliases":["postal_code","postcode","zipcode"]},{"name":"site","type":"enum","required":false,"description":"Which CarGurus site. Listing ids and make ids belong to one site.","on_invalid":"reject","allowed_values":[{"value":"us","label":"cargurus.com — United States, USD, miles"},{"value":"ca","label":"cargurus.ca — Canada, CAD, kilometres"},{"value":"uk","label":"cargurus.co.uk — United Kingdom, GBP, miles"}],"default":"us","example":"us","aliases":["country"]},{"name":"distance","type":"integer","required":false,"description":"Search radius around `zip`, in the site's unit (miles on us/uk, km on ca). The site's own steps are 10/25/50/75/100/150/200/500; any whole number is accepted.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":50000,"aliases":["radius"]},{"name":"nationwide","type":"boolean","required":false,"description":"Search the whole country (the site's own nationwide radius); overrides `distance`. Distances are still measured from `zip`.","on_invalid":"reject","default":false,"example":false},{"name":"make","type":"string","required":false,"description":"Make: the site's make id (m2 = Ford on cargurus.com, from the `makes` action or a search row's make_id) or the make's name (Ford, Mercedes-Benz) — a name is looked up in the site's make list; an unknown make is rejected.","on_invalid":"reject","example":"m2","aliases":["make_id","brand"]},{"name":"model_id","type":"string","required":false,"description":"Model id within `make` (d334 = Explorer), from the `models` action or a search row's model_id. Needs `make`.","on_invalid":"reject","example":"d334","value_pattern":"d\\d{1,7}","aliases":["model"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year (inclusive).","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"reject","example":2023,"minimum":1900,"maximum":2100},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in the site's currency (USD / CAD / GBP).","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in the site's currency.","on_invalid":"reject","example":30000,"minimum":0},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest mileage (miles on us/uk, km on ca).","on_invalid":"reject","example":0,"minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Highest mileage (miles on us/uk, km on ca).","on_invalid":"reject","example":60000,"minimum":0},{"name":"days_on_market_min","type":"integer","required":false,"description":"Only listings on the market for at least this many days.","on_invalid":"reject","example":60,"minimum":0},{"name":"days_on_market_max","type":"integer","required":false,"description":"Only listings on the market for at most this many days.","on_invalid":"reject","example":7,"minimum":0},{"name":"body_type","type":"array","required":false,"description":"Body style. One value or several comma-separated (any of them). A value the chosen site does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"coupe","label":"Coupe"},{"value":"convertible","label":"Convertible"},{"value":"hatchback","label":"Hatchback"},{"value":"minivan","label":"Minivan / MPV"},{"value":"pickup","label":"Pickup truck"},{"value":"sedan","label":"Sedan / saloon"},{"value":"suv","label":"SUV / crossover"},{"value":"van","label":"Van"},{"value":"wagon","label":"Wagon / estate"}],"example":"suv","value_pattern":"(?i)\\s*(coupe|convertible|hatchback|minivan|pickup|sedan|suv|van|wagon)\\s*(\\s*[,;|]\\s*(coupe|convertible|hatchback|minivan|pickup|sedan|suv|van|wagon)\\s*)*","aliases":["body"]},{"name":"fuel","type":"array","required":false,"description":"Fuel type. One value or several comma-separated (any of them). A value the chosen site does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"diesel","label":"Diesel"},{"value":"electric","label":"Electric"},{"value":"gasoline","label":"Gasoline / petrol"},{"value":"hybrid","label":"Hybrid"},{"value":"cng","label":"Compressed natural gas [us only]"},{"value":"flex_fuel","label":"Flex fuel vehicle"},{"value":"biodiesel","label":"Biodiesel [us/ca only]"},{"value":"fuel_cell","label":"Fuel cell [us only]"},{"value":"dual_fuel","label":"Dual-fuel [uk only]"}],"example":"electric","value_pattern":"(?i)\\s*(diesel|electric|gasoline|hybrid|cng|flex_fuel|biodiesel|fuel_cell|dual_fuel)\\s*(\\s*[,;|]\\s*(diesel|electric|gasoline|hybrid|cng|flex_fuel|biodiesel|fuel_cell|dual_fuel)\\s*)*","aliases":["fuel_type"]},{"name":"transmission","type":"array","required":false,"description":"Transmission. One value or several comma-separated (any of them). A value the chosen site does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"},{"value":"unknown","label":"Not stated by the seller"}],"example":"manual","value_pattern":"(?i)\\s*(automatic|manual|unknown)\\s*(\\s*[,;|]\\s*(automatic|manual|unknown)\\s*)*","aliases":["gearbox"]},{"name":"drivetrain","type":"array","required":false,"description":"Driven wheels. One value or several comma-separated (any of them). A value the chosen site does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"awd","label":"All-wheel drive"},{"value":"4wd","label":"Four-wheel drive"},{"value":"fwd","label":"Front-wheel drive"},{"value":"rwd","label":"Rear-wheel drive"},{"value":"4x2","label":"4X2 [us/ca only]"}],"example":"awd","value_pattern":"(?i)\\s*(awd|4wd|fwd|rwd|4x2)\\s*(\\s*[,;|]\\s*(awd|4wd|fwd|rwd|4x2)\\s*)*","aliases":["drive"]},{"name":"deal_rating","type":"array","required":false,"description":"CarGurus's own deal rating: how the asking price compares with its instant market value. One value or several comma-separated (any of them). A value the chosen site does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"great","label":"Great Deal"},{"value":"good","label":"Good Deal"},{"value":"fair","label":"Fair Deal"},{"value":"high","label":"High Price"},{"value":"overpriced","label":"Overpriced"},{"value":"no_analysis","label":"No Price Analysis"},{"value":"uncertain","label":"Uncertain"}],"example":"great","value_pattern":"(?i)\\s*(great|good|fair|high|overpriced|no_analysis|uncertain)\\s*(\\s*[,;|]\\s*(great|good|fair|high|overpriced|no_analysis|uncertain)\\s*)*","aliases":["deal_ratings"]},{"name":"seller_type","type":"array","required":false,"description":"Seller type. One value or several comma-separated (any of them). A value the chosen site does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"franchise_dealer","label":"Franchise dealer"},{"value":"cargurus_partner","label":"CarGurus partner dealer"}],"example":"franchise_dealer","value_pattern":"(?i)\\s*(franchise_dealer|cargurus_partner)\\s*(\\s*[,;|]\\s*(franchise_dealer|cargurus_partner)\\s*)*"},{"name":"condition","type":"array","required":false,"description":"Condition / certification as the site classifies it (the search covers used cars; this narrows to certified pre-owned). One value or several comma-separated (any of them). A value the chosen site does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used [us/ca only]"},{"value":"certified","label":"Manufacturer certified pre-owned [us/ca only]"},{"value":"third_party_certified","label":"Third-party certified [us only]"},{"value":"approved_used","label":"Approved used [uk only]"}],"example":"certified","value_pattern":"(?i)\\s*(used|certified|third_party_certified|approved_used)\\s*(\\s*[,;|]\\s*(used|certified|third_party_certified|approved_used)\\s*)*"},{"name":"exterior_color","type":"array","required":false,"description":"Exterior colour group. One value or several comma-separated (any of them). A value the chosen site does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"black","label":"Black"},{"value":"blue","label":"Blue"},{"value":"brown","label":"Brown"},{"value":"gold","label":"Gold"},{"value":"gray","label":"Gray"},{"value":"green","label":"Green"},{"value":"orange","label":"Orange"},{"value":"pink","label":"Pink"},{"value":"purple","label":"Purple"},{"value":"red","label":"Red"},{"value":"silver","label":"Silver"},{"value":"teal","label":"Teal"},{"value":"white","label":"White"},{"value":"yellow","label":"Yellow"},{"value":"unknown","label":"Unknown"}],"example":"red","value_pattern":"(?i)\\s*(black|blue|brown|gold|gray|green|orange|pink|purple|red|silver|teal|white|yellow|unknown)\\s*(\\s*[,;|]\\s*(black|blue|brown|gold|gray|green|orange|pink|purple|red|silver|teal|white|yellow|unknown)\\s*)*","aliases":["color","colour"]},{"name":"price_drops_only","type":"boolean","required":false,"description":"Only listings whose price was recently reduced.","on_invalid":"reject","default":false,"example":true},{"name":"single_owner","type":"boolean","required":false,"description":"Only cars the vehicle-history report shows with one owner.","on_invalid":"reject","default":false,"example":true},{"name":"no_accidents","type":"boolean","required":false,"description":"Only cars with no accidents reported.","on_invalid":"reject","default":false,"example":true},{"name":"with_photos_only","type":"boolean","required":false,"description":"Only listings with at least one photo.","on_invalid":"reject","default":false,"example":true},{"name":"include_shipped","type":"boolean","required":false,"description":"The site's default (true) mixes in cars from outside the radius that the seller can ship to you once a make is chosen. false keeps only cars within `distance` of `zip`.","on_invalid":"reject","default":true,"example":false},{"name":"dealer_id","type":"string","required":false,"description":"Only one dealer's stock: `seller.dealer_id` of a listing. The dealer's cars inside the radius only.","on_invalid":"reject","example":"452355","value_pattern":"\\d{1,9}","aliases":["service_provider_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order. price_asc / price_desc order by price_plus_fees (the price with the dealer's fees), as the site does, and leave out listings without a price (measured 81,127 → 72,444 for New York). Sponsored rows (placement priority/featured) are placed by the site and do not follow the order.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match (the site's default)"},{"value":"best_deal","label":"Best deals first"},{"value":"price_asc","label":"Lowest price (incl. dealer fees) first"},{"value":"price_desc","label":"Highest price (incl. dealer fees) first"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"},{"value":"closest","label":"Closest first"},{"value":"year_desc","label":"Newest model year first"},{"value":"year_asc","label":"Oldest model year first"},{"value":"newest_listing","label":"Newest listings first"},{"value":"oldest_listing","label":"Oldest listings first"}],"default":"best_match","example":"best_deal"},{"name":"page","type":"integer","required":false,"description":"Page number; a page holds about 20-23 listings (the site sets it). The source stops serving pages before its own total runs out — a page past the end returns no rows and meta.beyond_last_page = true.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"listings[]: listing_id, site, url, title, year, make, make_id, model, model_id, trim, entity_id, body_type, is_new, is_certified, currency, price (asking price), price_display, price_plus_fees, fees_included_in_price_plus_fees, fee_disclosure, imv_price (CarGurus instant market value), imv_differential (the source's own gap: IMV − base price on search rows, IMV − headline price on listing), below_imv_by (IMV − price), below_imv_by_with_fees, previous_price, original_price, last_price_drop_amount, last_price_drop_at, deal_rating (great|good|fair|high|overpriced|no_analysis|uncertain), deal_rating_code, deal_score, days_on_market, mileage, mileage_unit, mileage_display, vin, stock_number, exterior_color, exterior_color_group, interior_color, fuel_type, fuel_economy_city/highway/combined, fuel_economy_unit, transmission, drivetrain, engine, doors, features[], image, picture_count, distance, distance_unit, how_to_shop, financing_eligible, placement (priority|featured|standard), is_sponsored, ulez_compliant (uk), seller{dealer_id, seller_id, name, city, region, postal_code, location, phone, phone_display, is_franchise_dealer, franchise_make, is_cargurus_partner, logo}. meta: total (the source's count), total_includes_shipped, page, has_more, beyond_last_page, sponsored_rows, promo_tiles_dropped, location{zip, latitude, longitude, name}, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"zip":"10001","distance":50,"make":"m2","model_id":"d334","deal_rating":"great,good","sort":"best_deal"}},{"name":"listing","description":"One CarGurus listing in full by its id: asking price, price with dealer fees and each fee, IMV and deal rating, the full price history, days on market and at the dealer, VIN, mileage, specs, options, fuel economy, vehicle-history counts (accidents, owners), the seller's description, every photo and the dealer with address, coordinates, phone, website, rating, review count and opening hours. A removed listing returns NOT_FOUND.","required_params":["listing_id"],"optional_params":["site","zip"],"params":[{"name":"listing_id","type":"string","required":true,"description":"`listing_id` of a search row, as is (or the number in a cargurus …/details/<id> URL). Use the same `site` the row came from.","on_invalid":"reject","example":"441095283","value_pattern":"\\d{3,12}","aliases":["id","inventory_listing"]},{"name":"site","type":"enum","required":false,"description":"Which CarGurus site. Listing ids and make ids belong to one site.","on_invalid":"reject","allowed_values":[{"value":"us","label":"cargurus.com — United States, USD, miles"},{"value":"ca","label":"cargurus.ca — Canada, CAD, kilometres"},{"value":"uk","label":"cargurus.co.uk — United Kingdom, GBP, miles"}],"default":"us","example":"us","aliases":["country"]},{"name":"zip","type":"string","required":false,"description":"Optional: the zip/postcode to measure the car's distance from. Without it no distance is returned.","on_invalid":"reject","example":"10001","aliases":["postal_code","postcode"]}],"returns":"listing{} with the search-row fields plus status, is_active, condition, headline_price (the figure the listing page headlines — for some dealers it includes their fees), headline_price_display, headline_price_includes_fees, dealer_fees[{name, amount, type}], price_history[{price, date}], days_at_dealer, saved_count, fuel_tank_capacity, cargo_volume, legroom[], options[], specs{category: {label: value}}, vehicle_history{has_report, accident_count, owner_count, report_date}, description, images[], listing_tier, distance (only with zip), seller{dealer_id, seller_id, type, name, street, city, region, postal_code, country, latitude, longitude, phone, phone_display, website, facebook, instagram, rating, review_count, is_franchise_dealer, is_cargurus_partner, inventory_url, logo, opening_hours[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"441095283"}},{"name":"makes","description":"Every make the chosen CarGurus site lists, with the site's make id that `search` and `models` take.","required_params":[],"optional_params":["site"],"params":[{"name":"site","type":"enum","required":false,"description":"Which CarGurus site. Listing ids and make ids belong to one site.","on_invalid":"reject","allowed_values":[{"value":"us","label":"cargurus.com — United States, USD, miles"},{"value":"ca","label":"cargurus.ca — Canada, CAD, kilometres"},{"value":"uk","label":"cargurus.co.uk — United Kingdom, GBP, miles"}],"default":"us","example":"us","aliases":["country"]}],"returns":"makes[{make_id, name, is_popular}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"site":"us"}},{"name":"models","description":"The models of one make with the source's live listing counts — the model_id `search` takes.","required_params":["make"],"optional_params":["site","zip","distance"],"params":[{"name":"make","type":"string","required":true,"description":"The site's make id (m2) or the make's name (Ford).","on_invalid":"reject","example":"Ford","aliases":["make_id","brand"]},{"name":"site","type":"enum","required":false,"description":"Which CarGurus site. Listing ids and make ids belong to one site.","on_invalid":"reject","allowed_values":[{"value":"us","label":"cargurus.com — United States, USD, miles"},{"value":"ca","label":"cargurus.ca — Canada, CAD, kilometres"},{"value":"uk","label":"cargurus.co.uk — United Kingdom, GBP, miles"}],"default":"us","example":"us","aliases":["country"]},{"name":"zip","type":"string","required":false,"description":"Optional: count models around this zip/postcode (with `distance`). Without it the counts are nationwide.","on_invalid":"reject","example":"10001","aliases":["postal_code","postcode"]},{"name":"distance","type":"integer","required":false,"description":"Search radius around `zip`, in the site's unit (miles on us/uk, km on ca). The site's own steps are 10/25/50/75/100/150/200/500; any whole number is accepted.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":50000,"aliases":["radius"]}],"returns":"make{make_id, name}, models[{model_id, name, count, is_popular}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"Ford"}}]},{"name":"carousell","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Carousell API — the Southeast Asian classifieds marketplace (Singapore, Malaysia, Hong Kong, Philippines, Taiwan, Indonesia): search listings, read the full listing and a seller's listings, in local currency. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/carousell/v1","spec_available":true,"actions":[{"name":"search","description":"Search Carousell listings in one country by keyword or category, 48 per page: listing id, title, price in local currency with the seller's earlier price when it was lowered, condition, status, posting time, whether the seller paid to bump it (and when), likes, seller username, photos, and for cars and property the card's key facts (mileage, registration, bedrooms, size). Filter by price range, condition and category; sort by best match, newest or price; page with a cursor.","required_params":[],"optional_params":["query","country","category_id","sort","price_min","price_max","condition","cursor","exclude_bumped","autocorrect","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. Optional when `category_id` is given.","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Carousell storefront: sg, my, hk, ph, tw or id. Prices come back in that country's currency; listing ids and usernames belong to one storefront.","on_invalid":"reject","allowed_values":[{"value":"sg","label":"Singapore — carousell.sg (SGD)"},{"value":"my","label":"Malaysia — carousell.com.my (MYR)"},{"value":"hk","label":"Hong Kong — carousell.com.hk (HKD)"},{"value":"ph","label":"Philippines — carousell.ph (PHP)"},{"value":"tw","label":"Taiwan — carousell.com.tw (TWD)"},{"value":"id","label":"Indonesia — carousell.co.id (IDR)"}],"default":"sg","example":"sg","aliases":["market"]},{"name":"category_id","type":"string","required":false,"description":"Carousell category id — from `suggest` (suggestions[].categories[].id) or a listing's category.id (e.g. 1287 Sofas in Singapore).","on_invalid":"reject","example":"1287","aliases":["category","collection_id"]},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match (site default order in the app)"},{"value":"newest","label":"Most recent first"},{"value":"price_asc","label":"Lowest price first — free and no-price items come first"},{"value":"price_desc","label":"Highest price first"}],"default":"best_match"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in the country's currency.","on_invalid":"reject","minimum":0},{"name":"condition","type":"enum","required":false,"description":"Item condition on Carousell's five-step scale.","on_invalid":"reject","allowed_values":[{"value":"brand_new","label":"Brand new"},{"value":"like_new","label":"Like new"},{"value":"lightly_used","label":"Lightly used"},{"value":"well_used","label":"Well used"},{"value":"heavily_used","label":"Heavily used"}]},{"name":"cursor","type":"string","required":false,"description":"The `next_cursor` of the previous page. Omit for the first page.","on_invalid":"reject","example":""},{"name":"exclude_bumped","type":"boolean","required":false,"description":"Drop listings the seller paid to bump up the results (counted in bumped_dropped). Bumped listings still match your query.","on_invalid":"reject","default":false},{"name":"autocorrect","type":"boolean","required":false,"description":"Let Carousell correct a misspelled keyword ('iphnoe' → iPhone results). Off by default: a misspelled keyword then returns no results.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try for a difficult request (1-6).","on_invalid":"ignore","default":4,"minimum":1,"maximum":6}],"returns":"results[]{listing_id, title, url, price (number; null for free items and listings without a price), price_text, is_free, price_not_published, original_price + price_dropped (seller lowered the price), currency, condition (brand_new|like_new|lightly_used|well_used|heavily_used, or new|used in two-step categories, null for cars/property), condition_label, status (active|reserved|sold|…), posted_at (null on bumped cards), is_bumped, bumped_at, last_bumped_at, is_promoted, likes_count, seller{id, username, display_name}, card_type, vertical (cars|property|null), is_certified, buyer_protection_tag, deal_label, tags[], attributes[]{name, value} (cars: depreciation, registration date, mileage; property: bedrooms, bathrooms, size, MRT), card_lines[], image, images[], country}, count, total_results, total_is_lower_bound, has_more, next_cursor, bumped_count, bumped_dropped, non_listing_cards_dropped, sort_applied, filters_applied, query, country, currency","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone","country":"sg"}},{"name":"listing","description":"The full listing by id or URL: title, full description, price and currency (free items and no-price services marked), fixed price or open to offers, status (active, reserved, sold), condition, category, every attribute (model, storage, size…), car and property details (engine, COE, depreciation, bedrooms, lease, district), all photos, likes, posting / edit / expiry dates, meet-up points, mailing and Carousell shipping options, Buyer Protection, and the seller: username, business or private, verification, rating with review counts, followers, join date.","required_params":["listing_id"],"optional_params":["country","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Listing id (the number at the end of a carousell listing URL, …/p/iphone-15-pro-1459547251/) or the full URL — a URL also sets the country.","on_invalid":"reject","example":"1459547251","aliases":["id","url"]},{"name":"country","type":"enum","required":false,"description":"Which Carousell storefront: sg, my, hk, ph, tw or id. Prices come back in that country's currency; listing ids and usernames belong to one storefront.","on_invalid":"reject","allowed_values":[{"value":"sg","label":"Singapore — carousell.sg (SGD)"},{"value":"my","label":"Malaysia — carousell.com.my (MYR)"},{"value":"hk","label":"Hong Kong — carousell.com.hk (HKD)"},{"value":"ph","label":"Philippines — carousell.ph (PHP)"},{"value":"tw","label":"Taiwan — carousell.com.tw (TWD)"},{"value":"id","label":"Indonesia — carousell.co.id (IDR)"}],"default":"sg","example":"sg","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try for a difficult request (1-6).","on_invalid":"ignore","default":4,"minimum":1,"maximum":6}],"returns":"listing{listing_id, title, url, status, is_active, price (null for free items and services without a price), currency, is_free, price_not_published, fixed_price, condition, condition_label, description, category{id, name, slug}, attributes[]{name, value}, details[]{group, name, value} (specifications, financials, unit_details, location…), highlights[], images[], image_count, likes_count, posted_at, last_modified_at, expires_at, buyer_protection, delivery{meetup, meetups[]{name, address, latitude, longitude, note}, mailing, mailing_details, carousell_shipping, deal_options[], default_delivery_option}, seller{id, username, display_name, type (business|private|null), identity, is_official_partner, verified{id, mobile, email, facebook, gplus}, rating (0-5), rating_scale, review_count, positive_reviews, neutral_reviews, negative_reviews, followers_count, joined_at, response_rate, profile_url}, certified_product{product_id, variant_id}, country}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"1459547251"}},{"name":"seller_listings","description":"A seller's listings on one storefront, newest first, 40 per page, including reserved and sold items: the same row fields as search, plus the seller's total listing count.","required_params":["username"],"optional_params":["country","cursor","max_rotations"],"params":[{"name":"username","type":"string","required":true,"description":"Seller username (search rows: seller.username), or the profile URL …/u/<username>/.","on_invalid":"reject","example":"w1695","aliases":["seller","user"]},{"name":"country","type":"enum","required":false,"description":"Which Carousell storefront: sg, my, hk, ph, tw or id. Prices come back in that country's currency; listing ids and usernames belong to one storefront.","on_invalid":"reject","allowed_values":[{"value":"sg","label":"Singapore — carousell.sg (SGD)"},{"value":"my","label":"Malaysia — carousell.com.my (MYR)"},{"value":"hk","label":"Hong Kong — carousell.com.hk (HKD)"},{"value":"ph","label":"Philippines — carousell.ph (PHP)"},{"value":"tw","label":"Taiwan — carousell.com.tw (TWD)"},{"value":"id","label":"Indonesia — carousell.co.id (IDR)"}],"default":"sg","example":"sg","aliases":["market"]},{"name":"cursor","type":"string","required":false,"description":"The `next_cursor` of the previous page. Omit for the first page.","on_invalid":"reject","example":""},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try for a difficult request (1-6).","on_invalid":"ignore","default":4,"minimum":1,"maximum":6}],"returns":"results[] (same row shape as search), count, total_results, has_more, next_cursor, username, country, currency","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"w1695"}},{"name":"suggest","description":"Carousell's keyword autocomplete for one country, with the categories each suggestion maps to (their ids work as search category_id).","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The beginning of a keyword.","on_invalid":"reject","example":"iph","aliases":["q"]},{"name":"country","type":"enum","required":false,"description":"Which Carousell storefront: sg, my, hk, ph, tw or id. Prices come back in that country's currency; listing ids and usernames belong to one storefront.","on_invalid":"reject","allowed_values":[{"value":"sg","label":"Singapore — carousell.sg (SGD)"},{"value":"my","label":"Malaysia — carousell.com.my (MYR)"},{"value":"hk","label":"Hong Kong — carousell.com.hk (HKD)"},{"value":"ph","label":"Philippines — carousell.ph (PHP)"},{"value":"tw","label":"Taiwan — carousell.com.tw (TWD)"},{"value":"id","label":"Indonesia — carousell.co.id (IDR)"}],"default":"sg","example":"sg","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try for a difficult request (1-6).","on_invalid":"ignore","default":4,"minimum":1,"maximum":6}],"returns":"suggestions[]{suggestion, categories[]{id, name}}, count, query, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iph","country":"sg"}}]},{"name":"carrefour-fr","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Carrefour France API scraper (carrefour.fr): search groceries and non-food, read full product records with struck and loyalty-card prices, compare Carrefour and marketplace offers, read reviews, browse categories and promotions, and price against any drive store. No account, no browser.","version":"0.2.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/carrefour-fr/v1","spec_available":true,"actions":[{"name":"search","description":"AE/EG/BR: bounded keyword search (country/query/page/limit), with source URL product_id and native currency. Advanced parameters and auxiliary actions are not qualified there. ES (carrefour.es): keyword search over groceries and non-food, up to 24 rows per page, with EAN, brand, index price, list price, package size and stock (non-food). France (default): Search carrefour.fr by keyword with the site's sorts and filters (brand, price range, promotions, own brand, organic, Nutri-Score, any listed facet). Each row: EAN, title, brand, URL, the price with the struck price and discount, loyalty-card offers, multi-buy offers, the unit price, seller (Carrefour or marketplace), availability, rating, Nutri-Score and how many other offers exist. Prices follow the chosen store (store_id / postal_code).","required_params":["query"],"optional_params":["country","limit","page","sort","brand","price_min","price_max","on_promotion","carrefour_brand","organic","nutriscore","facet","include_unavailable","store_id","postal_code","include_sponsored","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword (French), e.g. 'lait', 'aspirateur robot', 'nutella'.","on_invalid":"reject","example":"lait","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"AE/EG/BR/ES qualify search and product/detail only. Other actions remain French.","on_invalid":"reject","allowed_values":[{"value":"FR","label":"France (default)"},{"value":"AE","label":"United Arab Emirates"},{"value":"EG","label":"Egypt"},{"value":"BR","label":"Brazil grocery storefront"},{"value":"ES","label":"Spain (carrefour.es)"}],"default":"FR"},{"name":"limit","type":"integer","required":false,"description":"AE/EG/BR returned rows per source page (1-3, default 3; larger values are clamped to 3 with a warning); BR source page contains 15 rows, only the first limit are returned. ES: rows per page (1-24, default 24). No promise of exhaustive export.","on_invalid":"reject","default":3,"minimum":1,"maximum":24},{"name":"page","type":"integer","required":false,"description":"Result page (30 products per page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"The site's own sort orders. Price sorts order products by their LOWEST offer (lowest_offer_price), which can be a marketplace offer below the row's buy-box price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (site default)"},{"value":"price_asc","label":"Lowest offer price first"},{"value":"price_desc","label":"Highest offer price first"},{"value":"unit_price_asc","label":"Price per kg/L, lowest first (groceries)"},{"value":"unit_price_desc","label":"Price per kg/L, highest first (groceries)"},{"value":"rating","label":"Customer rating, best first"}],"default":"relevance"},{"name":"brand","type":"array","required":false,"description":"Brand filter, one or more (comma-separated), as listed in available_filters (field facet_marque), e.g. 'LACTEL,CANDIA'.","on_invalid":"reject","example":"LACTEL"},{"name":"price_min","type":"number","required":false,"description":"Minimum price in EUR (the site's price filter).","on_invalid":"reject","example":5,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in EUR (the site's price filter).","on_invalid":"reject","example":10,"minimum":0},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products with a running promotion (including loyalty-card offers).","on_invalid":"reject","example":true},{"name":"carrefour_brand","type":"boolean","required":false,"description":"Only Carrefour's own-brand products.","on_invalid":"reject"},{"name":"organic","type":"boolean","required":false,"description":"Only organic products.","on_invalid":"reject"},{"name":"nutriscore","type":"array","required":false,"description":"Nutri-Score grades to keep (comma-separated), e.g. 'A,B'.","on_invalid":"reject","allowed_values":[{"value":"A","label":"Nutri-Score A"},{"value":"B","label":"Nutri-Score B"},{"value":"C","label":"Nutri-Score C"},{"value":"D","label":"Nutri-Score D"},{"value":"E","label":"Nutri-Score E"}],"example":"A,B"},{"name":"facet","type":"array","required":false,"description":"Any other facet the site lists in available_filters, as 'field=value' (repeat or comma-separate for several).","on_invalid":"reject","example":"facette_format_lait=Bouteille"},{"name":"include_unavailable","type":"boolean","required":false,"description":"Also list products that cannot be bought right now (the site hides them by default).","on_invalid":"reject","default":false},{"name":"store_id","type":"string","required":false,"description":"Price and stock for this drive/pickup store (a `store_id` from the `stores` action). Default: carrefour.fr's national online catalogue.","on_invalid":"reject","example":"800259"},{"name":"postal_code","type":"string","required":false,"description":"French postal code: prices for the nearest drive/pickup store (echoed in `store`). Use instead of store_id.","on_invalid":"reject","example":"69001","aliases":["zip"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep sponsored rows (flagged is_sponsored). Default: dropped and counted in sponsored_dropped.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When carrefour.fr pads a no-match keyword with loosely similar products, return them in fallback_results (default: dropped and counted).","on_invalid":"ignore","default":false}],"returns":"FR default schema: results[]{position, product_id (EAN), ean, title, brand, url, product_type ('product'|'marketplace'), business_type ('food'|'non-food'), category, category_path[], packaging, format, price, currency=EUR, was_price, discount_amount, discount_percent, promotion_label, promotion_ends, loyalty_price, loyalty_offers[{type, label, card_credit, min_quantity, discount_percent, card_credit, card_credit_scope ('unit'|'lot'), credit_basis, price_after_credit (single-unit offers only), lot_price, lot_price_after_credit, valid_from, valid_until}], multibuy_offers[{type, label, quantity, total_price, regular_total, valid_until}], promotion_badges[], unit_price, unit_of_measure, unit_price_label, unit_price_basis ('price'|'regular_price'), offer_id, seller{id, name, is_carrefour, rating, rating_count, rating_scale, url}, shipping_cost, free_shipping, free_shipping_minimum, delivery_days_min, delivery_days_max, availability, in_stock, low_stock, other_offers_count, other_offers_lowest_price, lowest_offer_price (min of the row price and the other offers' lowest; the value the site's price sorts use), rating, review_count, rating_scale, nutriscore, labels[], highlight, is_best_seller, is_new, is_sponsored, image}, count (organic rows), total_results, total_pages, page, page_size, sort, applied_filters, sponsored_dropped, sponsored_count, search_type, available_filters[{field, label, type, selected, values[{value, label, count, selected}], price_range_eur}], has_next_page, store{store_id, store_code, name, is_default, …}; ES schema: results[]{product_id (source URL), native_id, title, url, brand, price (search index price), was_price, currency=EUR, ean, catalog (food|nonFood), package_size, measure_unit, stock, in_stock, has_marketplace_offers, labels[], image}, country, query, page, limit, total_results, total_pages, has_next, price_note; AE/EG/BR schema: results[]{product_id (source URL), native_id, title, url, price, currency (AED/EGP/BRL), ean (optional/null), image, seller, in_stock (optional/null)}, country, query, page, limit, total_results, has_next. FR additional fields: query, did_you_mean, autocorrected, related_searches[], keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[] (only with include_fallback_results=true), page_notice, redirected_to, redirect_type ('category'|'promotions'|'brand'|null)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"AE","query":"milk","limit":3}},{"name":"product/detail","description":"AE/EG/BR/ES: copy the source URL-valued product_id from that country search for meaningful detail; numeric native_id alone is not supported. ES: the live carrefour.es product page: grocery price with unit price and promotion mechanics (e.g. 2a unidad -50%), stock, Nutri-Score, ingredients, allergens and nutrition; non-food every seller offer with struck price, shipping and the cheapest offer, specifications and variants. France (default): The full carrefour.fr product record by EAN or URL: title, brand, category breadcrumb, the buy-box price with struck price, loyalty-card and multi-buy offers, unit price, availability, every offer (Carrefour store, Carrefour home delivery, marketplace sellers with rating and shipping), rating with the per-star breakdown, description, key features, characteristics, ingredients and nutrition, storage/usage information, Nutri-Score, energy class, dimensions, images and variants (colour/size with their own EAN and price).","required_params":[],"optional_params":["country","product_id","url","store_id","postal_code","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"AE/EG/BR/ES qualify search and product/detail only. Other actions remain French.","on_invalid":"reject","allowed_values":[{"value":"FR","label":"France (default)"},{"value":"AE","label":"United Arab Emirates"},{"value":"EG","label":"Egypt"},{"value":"BR","label":"Brazil grocery storefront"},{"value":"ES","label":"Spain (carrefour.es)"}],"default":"FR"},{"name":"product_id","type":"string","required":false,"description":"France: product EAN (8-14 digits). AE/EG/BR/ES: copy the full source URL in search product_id; numeric native_id is informational.","on_invalid":"reject","example":"6942351431352","aliases":["ean","gtin"]},{"name":"url","type":"string","required":false,"description":"carrefour.fr product URL (alternative to product_id).","on_invalid":"reject","example":"https://www.carrefour.fr/p/tv-qled-4k-55-139-cm-55e7s-hisense-6942351431352","aliases":["product_url"]},{"name":"store_id","type":"string","required":false,"description":"Price and stock for this drive/pickup store (a `store_id` from the `stores` action). Default: carrefour.fr's national online catalogue.","on_invalid":"reject","example":"800259"},{"name":"postal_code","type":"string","required":false,"description":"French postal code: prices for the nearest drive/pickup store (echoed in `store`). Use instead of store_id.","on_invalid":"reject","example":"69001","aliases":["zip"]},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"ES schema: product{product_id (source URL), native_id, title, url, brand, ean, catalog, price, was_price, app_price, club_price, seller, shipping_cost, unit_price, unit_of_measure, units_in_stock, in_stock, promotions[{name, description, starts, ends, url}], labels[], rating, review_count, breadcrumb[], nutriscore, ingredients, allergens, nutrition[], more_info[], offers_count, cheapest_offer, offers[] (non-food), variants[], description, characteristics[], images[], sold_by_weight}. AE/EG/BR schema: product{product_id (source URL), native_id, title, url, price, currency (AED/EGP/BRL), ean (optional/null), brand, categories, seller, in_stock (optional/null), information/nutrition (MAF) or description/characteristics/images (BR)}. FR default schema: product{product_id, ean, internal_id, title, short_title, brand, url, product_type, business_type, category, breadcrumb[{name, url}], offer_id, fulfilment, seller{…}, price, currency=EUR, was_price, discount_amount, discount_percent, promotion_label, promotion_ends, loyalty_price, loyalty_offers[], multibuy_offers[], promotion_badges[], unit_price, unit_of_measure, unit_price_label, unit_price_basis, shipping_cost, free_shipping, delivery_days_min, delivery_days_max, availability, in_stock, low_stock, max_order_quantity, is_preorder, offers_count, cheapest_offer{offer_id, seller, price, shipping_cost, total_price}, offers[] (as product/offers), rating, review_count, rating_scale=5, rating_breakdown_percent{1..5}, description, key_features[], characteristics[{id, name, values[]}], composition{ingredients, allergens, regulated_name, nutrition[{name, per, value, daily_value_percent}]}, information{storage, …}, packaging, format, origin, nutriscore, ecoscore, energy_class, repairability_or_sustainability_index, legal_guarantee_years, labels[], warnings[], weights_and_measures[{type, value, unit}], delivery_info, images[], image_count, variants[{product_id, title, url, attributes{color, size, …}, lowest_price, offers_published, image}], is_best_seller}, store{…}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ES","product_id":"https://www.carrefour.es/supermercado/leche-semidesnatada-carrefour-brik-1-l/R-521007071/p"}},{"name":"product/offers","description":"Every offer on one carrefour.fr product (by EAN or URL): the Carrefour store offer, Carrefour home delivery and each marketplace seller, with price, struck price, loyalty offers, shipping cost and delivery time, seller rating, stock and warranty add-ons, plus the cheapest offer.","required_params":[],"optional_params":["product_id","url","sort","store_id","postal_code","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"France: product EAN (8-14 digits). AE/EG/BR/ES: copy the full source URL in search product_id; numeric native_id is informational.","on_invalid":"reject","example":"6942351431352","aliases":["ean","gtin"]},{"name":"url","type":"string","required":false,"description":"carrefour.fr product URL (alternative to product_id).","on_invalid":"reject","example":"https://www.carrefour.fr/p/tv-qled-4k-55-139-cm-55e7s-hisense-6942351431352","aliases":["product_url"]},{"name":"sort","type":"enum","required":false,"description":"Order of the offers.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Price + shipping, lowest first"},{"value":"price_desc","label":"Price + shipping, highest first"},{"value":"as_listed","label":"The site's own order (buy-box first)"}],"default":"price_asc"},{"name":"store_id","type":"string","required":false,"description":"Price and stock for this drive/pickup store (a `store_id` from the `stores` action). Default: carrefour.fr's national online catalogue.","on_invalid":"reject","example":"800259"},{"name":"postal_code","type":"string","required":false,"description":"French postal code: prices for the nearest drive/pickup store (echoed in `store`). Use instead of store_id.","on_invalid":"reject","example":"69001","aliases":["zip"]},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"offers[]{offer_id, is_buy_box, fulfilment ('store'|'carrefour_home_delivery'|'marketplace'|'physical_store'), seller{id, name, is_carrefour, rating, rating_count, rating_scale, url}, price, currency=EUR, was_price, discount_amount, discount_percent, promotion_label, promotion_ends, loyalty_price, loyalty_offers[], multibuy_offers[], promotion_badges[], unit_price, unit_of_measure, unit_price_label, unit_price_basis, shipping_cost, free_shipping, free_shipping_minimum, delivery_days_min, delivery_days_max, total_price, availability, in_stock, low_stock, max_order_quantity, is_preorder, is_new, express_delivery, relay_point_eligible, offer_note, warranty_options[{name, price, ean}]}, count, product{product_id, title, url}, cheapest{offer_id, seller, price, shipping_cost, total_price}, marketplace_offers, carrefour_offers, sort, store{…}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"6942351431352"}},{"name":"product/reviews","description":"Verified customer reviews of a carrefour.fr product (by EAN or URL), paged, sortable and filterable by star rating: rating, title, text, author display name, review and order dates and the review source.","required_params":[],"optional_params":["product_id","url","page","per_page","sort","stars","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"France: product EAN (8-14 digits). AE/EG/BR/ES: copy the full source URL in search product_id; numeric native_id is informational.","on_invalid":"reject","example":"6942351431352","aliases":["ean","gtin"]},{"name":"url","type":"string","required":false,"description":"carrefour.fr product URL (alternative to product_id).","on_invalid":"reject","example":"https://www.carrefour.fr/p/tv-qled-4k-55-139-cm-55e7s-hisense-6942351431352","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"per_page","type":"integer","required":false,"description":"Reviews per page (max 100).","on_invalid":"reject","default":20,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"rating_desc","label":"Best rating first"},{"value":"rating_asc","label":"Worst rating first"}],"default":"newest"},{"name":"stars","type":"integer","required":false,"description":"Only reviews with this star rating (1-5).","on_invalid":"reject","example":5,"minimum":1,"maximum":5},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[]{author, is_anonymous, rating, rating_scale=5, title, text, review_date, order_date, source}, count, total_reviews (for the star filter when given), page, per_page, total_pages, sort, stars, product_id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.carrefour.fr/p/tv-qled-4k-55-139-cm-55e7s-hisense-6942351431352"}},{"name":"seller/reviews","description":"Buyer reviews of a carrefour.fr marketplace seller, newest or oldest first: rating, the tags the buyer picked, author display name and dates.","required_params":["seller_id"],"optional_params":["page","per_page","sort","max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Marketplace seller id (offers[].seller.id).","on_invalid":"reject","example":"2731"},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"per_page","type":"integer","required":false,"description":"Reviews per page (max 100).","on_invalid":"reject","default":20,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Review order (the site offers no star filter or rating sort for sellers).","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"}],"default":"newest"},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[]{author, rating, rating_scale=5, tags[], review_date, created_date}, count, total_reviews, page, per_page, total_pages, sort, seller_id, seller_url","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"2731"}},{"name":"seller/profile","description":"A carrefour.fr marketplace seller's public page: name, logo, description, return policy, shipping zone and delivery time, rating, and the legal notice the site publishes (company name, registration and VAT numbers, business address, legal representative, terms URL).","required_params":["seller_id"],"optional_params":["max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Marketplace seller id (offers[].seller.id).","on_invalid":"reject","example":"2731"},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"seller{seller_id, name, slug, url, logo, banner, description, return_policy, rating, rating_count, rating_scale, shipping{delivery_days_min, delivery_days_max, free_shipping_minimum, zone, fees[{type, amount}]}, company_name, company_id, vat_number, legal_representative, address{street, postal_code, city, region, country}, terms_url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"2731"}},{"name":"seller/products","description":"Everything a carrefour.fr marketplace seller lists, with the same sorts, filters and row fields as search.","required_params":["seller_id"],"optional_params":["page","sort","brand","price_min","price_max","on_promotion","carrefour_brand","organic","nutriscore","facet","include_unavailable","store_id","postal_code","include_sponsored","max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Marketplace seller id (offers[].seller.id).","on_invalid":"reject","example":"2731"},{"name":"page","type":"integer","required":false,"description":"Result page (30 products per page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"The site's own sort orders. Price sorts order products by their LOWEST offer (lowest_offer_price), which can be a marketplace offer below the row's buy-box price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (site default)"},{"value":"price_asc","label":"Lowest offer price first"},{"value":"price_desc","label":"Highest offer price first"},{"value":"unit_price_asc","label":"Price per kg/L, lowest first (groceries)"},{"value":"unit_price_desc","label":"Price per kg/L, highest first (groceries)"},{"value":"rating","label":"Customer rating, best first"}],"default":"relevance"},{"name":"brand","type":"array","required":false,"description":"Brand filter, one or more (comma-separated), as listed in available_filters (field facet_marque), e.g. 'LACTEL,CANDIA'.","on_invalid":"reject","example":"LACTEL"},{"name":"price_min","type":"number","required":false,"description":"Minimum price in EUR (the site's price filter).","on_invalid":"reject","example":5,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in EUR (the site's price filter).","on_invalid":"reject","example":10,"minimum":0},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products with a running promotion (including loyalty-card offers).","on_invalid":"reject","example":true},{"name":"carrefour_brand","type":"boolean","required":false,"description":"Only Carrefour's own-brand products.","on_invalid":"reject"},{"name":"organic","type":"boolean","required":false,"description":"Only organic products.","on_invalid":"reject"},{"name":"nutriscore","type":"array","required":false,"description":"Nutri-Score grades to keep (comma-separated), e.g. 'A,B'.","on_invalid":"reject","allowed_values":[{"value":"A","label":"Nutri-Score A"},{"value":"B","label":"Nutri-Score B"},{"value":"C","label":"Nutri-Score C"},{"value":"D","label":"Nutri-Score D"},{"value":"E","label":"Nutri-Score E"}],"example":"A,B"},{"name":"facet","type":"array","required":false,"description":"Any other facet the site lists in available_filters, as 'field=value' (repeat or comma-separate for several).","on_invalid":"reject","example":"facette_format_lait=Bouteille"},{"name":"include_unavailable","type":"boolean","required":false,"description":"Also list products that cannot be bought right now (the site hides them by default).","on_invalid":"reject","default":false},{"name":"store_id","type":"string","required":false,"description":"Price and stock for this drive/pickup store (a `store_id` from the `stores` action). Default: carrefour.fr's national online catalogue.","on_invalid":"reject","example":"800259"},{"name":"postal_code","type":"string","required":false,"description":"French postal code: prices for the nearest drive/pickup store (echoed in `store`). Use instead of store_id.","on_invalid":"reject","example":"69001","aliases":["zip"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep sponsored rows (flagged is_sponsored). Default: dropped and counted in sponsored_dropped.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id (EAN), ean, title, brand, url, product_type ('product'|'marketplace'), business_type ('food'|'non-food'), category, category_path[], packaging, format, price, currency=EUR, was_price, discount_amount, discount_percent, promotion_label, promotion_ends, loyalty_price, loyalty_offers[{type, label, card_credit, min_quantity, discount_percent, card_credit, card_credit_scope ('unit'|'lot'), credit_basis, price_after_credit (single-unit offers only), lot_price, lot_price_after_credit, valid_from, valid_until}], multibuy_offers[{type, label, quantity, total_price, regular_total, valid_until}], promotion_badges[], unit_price, unit_of_measure, unit_price_label, unit_price_basis ('price'|'regular_price'), offer_id, seller{id, name, is_carrefour, rating, rating_count, rating_scale, url}, shipping_cost, free_shipping, free_shipping_minimum, delivery_days_min, delivery_days_max, availability, in_stock, low_stock, other_offers_count, other_offers_lowest_price, lowest_offer_price (min of the row price and the other offers' lowest; the value the site's price sorts use), rating, review_count, rating_scale, nutriscore, labels[], highlight, is_best_seller, is_new, is_sponsored, image}, count (organic rows), total_results, total_pages, page, page_size, sort, applied_filters, sponsored_dropped, sponsored_count, search_type, available_filters[{field, label, type, selected, values[{value, label, count, selected}], price_range_eur}], has_next_page, store{store_id, store_code, name, is_default, …}, seller_id, seller_url","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"2731"}},{"name":"category","description":"Browse a carrefour.fr category (e.g. 'cremerie/laits', 'image-son/televiseurs') with the same sorts, filters, store pricing and row fields as search.","required_params":["category"],"optional_params":["page","sort","brand","price_min","price_max","on_promotion","carrefour_brand","organic","nutriscore","facet","include_unavailable","store_id","postal_code","include_sponsored","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"Category path as in the site's URL /r/<path> (e.g. 'cremerie/laits', 'image-son/televiseurs') or the full category URL.","on_invalid":"reject","example":"cremerie/laits"},{"name":"page","type":"integer","required":false,"description":"Result page (30 products per page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"The site's own sort orders. Price sorts order products by their LOWEST offer (lowest_offer_price), which can be a marketplace offer below the row's buy-box price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (site default)"},{"value":"price_asc","label":"Lowest offer price first"},{"value":"price_desc","label":"Highest offer price first"},{"value":"unit_price_asc","label":"Price per kg/L, lowest first (groceries)"},{"value":"unit_price_desc","label":"Price per kg/L, highest first (groceries)"},{"value":"rating","label":"Customer rating, best first"}],"default":"relevance"},{"name":"brand","type":"array","required":false,"description":"Brand filter, one or more (comma-separated), as listed in available_filters (field facet_marque), e.g. 'LACTEL,CANDIA'.","on_invalid":"reject","example":"LACTEL"},{"name":"price_min","type":"number","required":false,"description":"Minimum price in EUR (the site's price filter).","on_invalid":"reject","example":5,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in EUR (the site's price filter).","on_invalid":"reject","example":10,"minimum":0},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products with a running promotion (including loyalty-card offers).","on_invalid":"reject","example":true},{"name":"carrefour_brand","type":"boolean","required":false,"description":"Only Carrefour's own-brand products.","on_invalid":"reject"},{"name":"organic","type":"boolean","required":false,"description":"Only organic products.","on_invalid":"reject"},{"name":"nutriscore","type":"array","required":false,"description":"Nutri-Score grades to keep (comma-separated), e.g. 'A,B'.","on_invalid":"reject","allowed_values":[{"value":"A","label":"Nutri-Score A"},{"value":"B","label":"Nutri-Score B"},{"value":"C","label":"Nutri-Score C"},{"value":"D","label":"Nutri-Score D"},{"value":"E","label":"Nutri-Score E"}],"example":"A,B"},{"name":"facet","type":"array","required":false,"description":"Any other facet the site lists in available_filters, as 'field=value' (repeat or comma-separate for several).","on_invalid":"reject","example":"facette_format_lait=Bouteille"},{"name":"include_unavailable","type":"boolean","required":false,"description":"Also list products that cannot be bought right now (the site hides them by default).","on_invalid":"reject","default":false},{"name":"store_id","type":"string","required":false,"description":"Price and stock for this drive/pickup store (a `store_id` from the `stores` action). Default: carrefour.fr's national online catalogue.","on_invalid":"reject","example":"800259"},{"name":"postal_code","type":"string","required":false,"description":"French postal code: prices for the nearest drive/pickup store (echoed in `store`). Use instead of store_id.","on_invalid":"reject","example":"69001","aliases":["zip"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep sponsored rows (flagged is_sponsored). Default: dropped and counted in sponsored_dropped.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id (EAN), ean, title, brand, url, product_type ('product'|'marketplace'), business_type ('food'|'non-food'), category, category_path[], packaging, format, price, currency=EUR, was_price, discount_amount, discount_percent, promotion_label, promotion_ends, loyalty_price, loyalty_offers[{type, label, card_credit, min_quantity, discount_percent, card_credit, card_credit_scope ('unit'|'lot'), credit_basis, price_after_credit (single-unit offers only), lot_price, lot_price_after_credit, valid_from, valid_until}], multibuy_offers[{type, label, quantity, total_price, regular_total, valid_until}], promotion_badges[], unit_price, unit_of_measure, unit_price_label, unit_price_basis ('price'|'regular_price'), offer_id, seller{id, name, is_carrefour, rating, rating_count, rating_scale, url}, shipping_cost, free_shipping, free_shipping_minimum, delivery_days_min, delivery_days_max, availability, in_stock, low_stock, other_offers_count, other_offers_lowest_price, lowest_offer_price (min of the row price and the other offers' lowest; the value the site's price sorts use), rating, review_count, rating_scale, nutriscore, labels[], highlight, is_best_seller, is_new, is_sponsored, image}, count (organic rows), total_results, total_pages, page, page_size, sort, applied_filters, sponsored_dropped, sponsored_count, search_type, available_filters[{field, label, type, selected, values[{value, label, count, selected}], price_range_eur}], has_next_page, store{store_id, store_code, name, is_default, …}, category, category_url","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"cremerie/laits"}},{"name":"deals","description":"carrefour.fr's promotions hub: every product with a running promotion (struck prices, loyalty-card credits, multi-buy offers, catalogue offers), with the same sorts, filters, store pricing and row fields as search.","required_params":[],"optional_params":["page","sort","brand","price_min","price_max","on_promotion","carrefour_brand","organic","nutriscore","facet","include_unavailable","store_id","postal_code","include_sponsored","max_rotations"],"params":[{"name":"page","type":"integer","required":false,"description":"Result page (30 products per page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"The site's own sort orders. Price sorts order products by their LOWEST offer (lowest_offer_price), which can be a marketplace offer below the row's buy-box price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (site default)"},{"value":"price_asc","label":"Lowest offer price first"},{"value":"price_desc","label":"Highest offer price first"},{"value":"unit_price_asc","label":"Price per kg/L, lowest first (groceries)"},{"value":"unit_price_desc","label":"Price per kg/L, highest first (groceries)"},{"value":"rating","label":"Customer rating, best first"}],"default":"relevance"},{"name":"brand","type":"array","required":false,"description":"Brand filter, one or more (comma-separated), as listed in available_filters (field facet_marque), e.g. 'LACTEL,CANDIA'.","on_invalid":"reject","example":"LACTEL"},{"name":"price_min","type":"number","required":false,"description":"Minimum price in EUR (the site's price filter).","on_invalid":"reject","example":5,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in EUR (the site's price filter).","on_invalid":"reject","example":10,"minimum":0},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products with a running promotion (including loyalty-card offers).","on_invalid":"reject","example":true},{"name":"carrefour_brand","type":"boolean","required":false,"description":"Only Carrefour's own-brand products.","on_invalid":"reject"},{"name":"organic","type":"boolean","required":false,"description":"Only organic products.","on_invalid":"reject"},{"name":"nutriscore","type":"array","required":false,"description":"Nutri-Score grades to keep (comma-separated), e.g. 'A,B'.","on_invalid":"reject","allowed_values":[{"value":"A","label":"Nutri-Score A"},{"value":"B","label":"Nutri-Score B"},{"value":"C","label":"Nutri-Score C"},{"value":"D","label":"Nutri-Score D"},{"value":"E","label":"Nutri-Score E"}],"example":"A,B"},{"name":"facet","type":"array","required":false,"description":"Any other facet the site lists in available_filters, as 'field=value' (repeat or comma-separate for several).","on_invalid":"reject","example":"facette_format_lait=Bouteille"},{"name":"include_unavailable","type":"boolean","required":false,"description":"Also list products that cannot be bought right now (the site hides them by default).","on_invalid":"reject","default":false},{"name":"store_id","type":"string","required":false,"description":"Price and stock for this drive/pickup store (a `store_id` from the `stores` action). Default: carrefour.fr's national online catalogue.","on_invalid":"reject","example":"800259"},{"name":"postal_code","type":"string","required":false,"description":"French postal code: prices for the nearest drive/pickup store (echoed in `store`). Use instead of store_id.","on_invalid":"reject","example":"69001","aliases":["zip"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep sponsored rows (flagged is_sponsored). Default: dropped and counted in sponsored_dropped.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id (EAN), ean, title, brand, url, product_type ('product'|'marketplace'), business_type ('food'|'non-food'), category, category_path[], packaging, format, price, currency=EUR, was_price, discount_amount, discount_percent, promotion_label, promotion_ends, loyalty_price, loyalty_offers[{type, label, card_credit, min_quantity, discount_percent, card_credit, card_credit_scope ('unit'|'lot'), credit_basis, price_after_credit (single-unit offers only), lot_price, lot_price_after_credit, valid_from, valid_until}], multibuy_offers[{type, label, quantity, total_price, regular_total, valid_until}], promotion_badges[], unit_price, unit_of_measure, unit_price_label, unit_price_basis ('price'|'regular_price'), offer_id, seller{id, name, is_carrefour, rating, rating_count, rating_scale, url}, shipping_cost, free_shipping, free_shipping_minimum, delivery_days_min, delivery_days_max, availability, in_stock, low_stock, other_offers_count, other_offers_lowest_price, lowest_offer_price (min of the row price and the other offers' lowest; the value the site's price sorts use), rating, review_count, rating_scale, nutriscore, labels[], highlight, is_best_seller, is_new, is_sponsored, image}, count (organic rows), total_results, total_pages, page, page_size, sort, applied_filters, sponsored_dropped, sponsored_count, search_type, available_filters[{field, label, type, selected, values[{value, label, count, selected}], price_range_eur}], has_next_page, store{store_id, store_code, name, is_default, …}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"page":1}},{"name":"search/suggest","description":"carrefour.fr's autocomplete for a partial keyword: keyword suggestions and keyword-in-category suggestions, each with its search URL.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Partial keyword to complete.","on_invalid":"reject","example":"lai","aliases":["q"]},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"suggestions[{keyword, url}], category_suggestions[{keyword, category, url}], count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"milk"}},{"name":"stores","description":"Find Carrefour stores near a French postal code or a latitude/longitude, nearest first: name, banner, format, address, distance, today's opening hours and the drive/pickup services whose `store_id` prices search, category, deals, product/detail and product/offers for that store.","required_params":[],"optional_params":["postal_code","latitude","longitude","mode","page","per_page","max_rotations"],"params":[{"name":"postal_code","type":"string","required":false,"description":"French postal code to search around (or give latitude + longitude).","on_invalid":"reject","example":"69001","aliases":["zip"]},{"name":"latitude","type":"number","required":false,"description":"Latitude (with longitude) — alternative to postal_code.","on_invalid":"reject","example":45.764,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Longitude (with latitude).","on_invalid":"reject","example":4.8357,"aliases":["lng","lon"]},{"name":"mode","type":"enum","required":false,"description":"Which stores to list.","on_invalid":"reject","allowed_values":[{"value":"picking","label":"Stores with drive / pickup (selectable as store_id)"},{"value":"delivery","label":"Stores that deliver"},{"value":"all","label":"All stores"}],"default":"picking"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"per_page","type":"integer","required":false,"description":"Stores per page (max 20).","on_invalid":"reject","default":10,"minimum":1,"maximum":20},{"name":"max_rotations","type":"integer","required":false,"description":"Maximum fresh exits to try before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"stores[]{store_id (use in other actions; null when the store has no drive/pickup), selectable, store_code, name, banner, format, services[{store_id, name, drive_type, status}], address, postal_code, city, latitude, longitude, distance_km, is_open_today, today_opening[{opens, closes}], url}, count, page, per_page, origin{postal_code, commune, latitude, longitude}, mode","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"69001"}}]},{"name":"carrefoursa","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"CarrefourSA API scraper — CarrefourSA (Turkey) online grocery: search and browse products, read the full product record with the regular price and the CarrefourSA Kart member price kept apart, unit prices, multi-buy and basket campaigns, stock, barcode, label sheet and nutrition table, plus reviews and search suggestions. Prices in TRY. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/carrefoursa/v1","spec_available":true,"actions":[{"name":"search","description":"Search carrefoursa.com by keyword, or browse a category, and get one row per product: the regular price and, separately, the CarrefourSA Kart member price when one runs, unit price for weight-sold and multi-pack products, stock status with unit count, multi-buy and basket campaigns with their dates, brand and category path. Filter by brand, price band and in-stock, sort the way the site does, page through the results. The response also lists the categories, brands, price bands and package sizes available for the query.","required_params":[],"optional_params":["query","category","page","page_size","sort","brand","in_stock","price_band","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"What to look for on carrefoursa.com, as a shopper would type it. Turkish keywords match best ('peynir', 'zeytinyağı', 'bebek bezi'); brand names and small typos work too. Optional when `category` is given.","on_invalid":"reject","example":"peynir","aliases":["q","keyword","text"]},{"name":"category","type":"string","required":false,"description":"Browse or narrow to one CarrefourSA category: its code (the number after /c/ in a category URL, e.g. https://www.carrefoursa.com/beyaz-peynir/c/1319 → 1319) or the URL itself. Codes come back in every row's `category.id`, in `keyword_redirect` and in `filters_available`.","on_invalid":"reject","example":"1319","aliases":["category_id","category_code"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"ignore","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-100 (default 20).","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order — only the orderings carrefoursa.com offers. `sort_applied` in the response is CarrefourSA's own confirmation.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"CarrefourSA's smart ordering (the website default)"},{"value":"best_selling","label":"Best sellers first"},{"value":"price_asc","label":"Lowest displayed price first (the card price when one runs)"},{"value":"price_desc","label":"Highest displayed price first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only these brands: CarrefourSA brand codes (BRN-1392) as returned in `filters_available.brands` and every row's `brand.id`. Several codes (comma-separated or a list) mean any of them.","on_invalid":"reject","example":"BRN-1392","aliases":["brands","brand_id","brand_ids"]},{"name":"in_stock","type":"boolean","required":false,"description":"true = only products CarrefourSA shows as in stock.","on_invalid":"ignore","default":false},{"name":"price_band","type":"string","required":false,"description":"Only products in these CarrefourSA price bands, exactly as labelled in `filters_available.price_bands` (e.g. '50 TL - 199,99 TL'). Several bands mean any of them. Arbitrary ranges are not supported by the site.","on_invalid":"reject","example":"50 TL - 199,99 TL","aliases":["price_bands"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id, title, brand{id, name, url}, category{id, name, url}, category_path[], url, image, price (number, TRY — what a shopper WITHOUT a CarrefourSA Kart pays), price_display, currency=TRY, original_price (null — no non-card discount was observed), discount_percent (null), member_price (the CarrefourSA Kart price when one runs, else null), member_price_display, member_discount_percent, member_program ('CarrefourSA Kart' | null), member_price_condition (e.g. '100 TL ve Üzeri %40' when the card price needs a minimum basket, else null), unit_price, unit_price_unit ('kg' | 'l' | 'piece'), member_unit_price, unit_price_basis ('sold_by_weight' | 'site_per_piece' | 'package_size' | null), sold_by ('piece' | 'weight'), price_per ('piece' | 'kg'), availability ('in_stock' | 'low_stock' | 'out_of_stock'), in_stock, stock_level (units at the default online store), limited_stock, min_order_quantity, max_order_quantity (an order cap, not stock), order_step, badges[]{type, text}, promotions[]{text, description, code, kind ('multi_buy' | 'basket_threshold' | 'campaign'), card_required, active_from, active_to}, multi_buy_offer, special_today, search_index_rating, search_index_review_count (category browse rows only)}, count, page, page_size, total_results, total_pages, has_more, sort_applied, keyword_redirect{type, id, url} (the category or brand page the website would send this keyword to — rows are still the keyword's own matches), applied_filters[]{filter, id, name}, filters_available{categories[], top_categories[], brands[], package_sizes[]{id, name, count}, price_bands[]{label, count}, in_stock_count, out_of_stock_count} (null if that part of the answer was unavailable), query, category","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"peynir"}},{"name":"product/detail","description":"The full CarrefourSA product record by product code or URL: title, brand, category path, every image, barcode, the regular price and the CarrefourSA Kart price kept apart (with the minimum basket when the card price needs one), unit price, package size, availability and order limits, multi-buy and basket campaigns with dates, the label sheet (ingredients, allergens, origin, storage, food business operator) and the nutrition table, the description and rating.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"CarrefourSA product code — the number every search row returns as `product_id` (30500720) — or a carrefoursa.com product URL.","on_invalid":"reject","example":"30500720","aliases":["id","code","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, title, brand{id, name, url}, category{id, name, url}, category_path[], url, images[], barcode, barcode_in_store_code, price (number, TRY — what a shopper WITHOUT a CarrefourSA Kart pays), price_display, currency=TRY, original_price (null — no non-card discount was observed), discount_percent (null), member_price (the CarrefourSA Kart price when one runs, else null), member_price_display, member_discount_percent, member_program ('CarrefourSA Kart' | null), member_price_condition (e.g. '100 TL ve Üzeri %40' when the card price needs a minimum basket, else null), unit_price, unit_price_unit ('kg' | 'l' | 'piece'), member_unit_price, unit_price_basis ('sold_by_weight' | 'site_per_piece' | 'package_size' | null), sold_by ('piece' | 'weight'), price_per ('piece' | 'kg'), package_size{raw, amount, unit}, availability ('in_stock' | 'out_of_stock'), in_stock, limited_stock, limited_stock_text, min_order_quantity, max_order_quantity, order_step, free_shipping, badges[], promotions[], multi_buy_offer, special_today, sponsored, rating (1-5, null when unrated), review_count (written reviews), rating_scale, description, specs{label: value}, spec_table[], nutrition{basis, reference_intake_basis, rows[]{name, value, reference_intake_percent}, note}, ingredients, allergens, origin, storage, usage, warnings, food_business_operator, approval_number, variants[] (always empty — no variant products seen), price_scope_note}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"30384476"}},{"name":"product/reviews","description":"Written customer reviews of one CarrefourSA product, newest first: star rating (1-5), headline, review text, date, and the reviewer's alias, name and account id (an e-mail address) as CarrefourSA publishes them. Most products have none.","required_params":["product_id"],"optional_params":["limit","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"CarrefourSA product code — the number every search row returns as `product_id` (30500720) — or a carrefoursa.com product URL.","on_invalid":"reject","example":"30500720","aliases":["id","code","url"]},{"name":"limit","type":"integer","required":false,"description":"How many reviews to return, newest first (1-100, default 20).","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[]{rating, headline, comment, date, review_id, reviewer_alias, reviewer_name, reviewer_uid}, count, total_reviews, average_rating, rating_scale (5), order ('newest_first'), product_id","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"30384476"}},{"name":"search/suggest","description":"CarrefourSA's own search-box suggestions for what a shopper has typed so far.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far (at least 2 characters).","on_invalid":"reject","example":"çikol","aliases":["q","term","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"suggestions[] (search phrases), products[]{product_id, title, url} (empty unless the site returns product suggestions), query","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"çikol"}}]},{"name":"cars-co-za","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Cars.co.za — South African car listings, dealers and dealer stock","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/cars-co-za/v1","spec_available":true,"actions":[{"name":"search","description":"Search Cars.co.za's live South African stock — 76,076 listings on 2026-10-01, of which 65,553 used and 10,523 new, from 1,710 dealerships plus 211 private sellers. Every row carries the listing id, the canonical URL, the asking price in rand, the odometer, the full spec summary, the deal badge Cars.co.za itself puts on the car, all photo URLs, and the seller block (dealership name, suburb, province, coordinates and rating). 🔴 Measured: search rows carry NO phone number — 0 of 120 — because the source only publishes the dealership's tracking number on `detail` and `dealers` (99 of 100 dealerships there have one). `total_available` is the source's own count for your exact query, so you can see what each filter did. 🔴 One call returns at most 120 rows (measured ceiling) — use `offset` to page, which was measured working to the end of the catalogue, with no overlap between pages. All filters are optional; an unmatched filter returns `ok:true` with 0 results and a warning, never an error.","required_params":[],"optional_params":["query","make","model","variant","condition","seller_kind","price_min","price_max","mileage_min","mileage_max","year_min","year_max","instalment_min","instalment_max","engine_litres_min","engine_litres_max","body_type","province","city","transmission","fuel_type","colour","seats","drivetrain","vehicle_kind","engine_type","deal_tag","dealer_rating_min","featured_dealers_only","bikes","sort","max_results","offset"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as the site's own search box treats it — matched against make, model, variant and the dealer's description. Measured: `Hilux` → 2,642 of 76,076 listings.","on_invalid":"reject","example":"Hilux","aliases":["q","keyword","search"]},{"name":"make","type":"string","required":false,"description":"Manufacturer (`Toyota`, `Volkswagen`, `Mercedes-Benz`, `Haval`, `Chery`, `GWM`). Case, spaces and punctuation do not matter (`toyota`, `mercedes benz`) and `VW` / `Mercedes` are understood. 100 makes are listed; call the `filters` action with `facet=make` for the full list with live counts. Measured: `Toyota` → 11,519. An unknown make is not an error: you get `ok:true` with 0 results and a warning.","on_invalid":"reject","example":"Toyota","aliases":["brand","manufacturer"]},{"name":"model","type":"string","required":false,"description":"Model name within the make (`Starlet`, `Hilux`, `Polo Vivo`, `3 Series`); case, spaces and punctuation do not matter. Measured: `make=Toyota` + `model=Starlet` → 1,056. `filters` with `facet=make_model_variant` returns the whole make → model → variant tree with a count on every node.","on_invalid":"reject","example":"Starlet","aliases":["model_name"]},{"name":"variant","type":"string","required":false,"description":"Derivative / trim as the source prints it (case does not matter when make and model are given). Measured: `variant=1.4 XR` → 50; with make+model → 48.","on_invalid":"reject","example":"1.4 XR","aliases":["trim","derivative"]},{"name":"condition","type":"enum","required":false,"description":"New or used. Measured in one run: Used 65,553 + New 10,523 = 76,076, i.e. exactly the unfiltered total, so the two buckets are complete and disjoint. Omit to get both.","on_invalid":"reject","allowed_values":[{"value":"Used","label":"Used — 65,553 listings"},{"value":"New","label":"New — 10,523 listings"}],"example":"Used","aliases":["new_or_used","new_used"]},{"name":"seller_kind","type":"enum","required":false,"description":"Dealership stock or a private individual's car. Measured: dealer 75,865, private 211 (= 76,076). Private rows publish no seller name beyond `Private Seller` and no contact route.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Franchise or independent dealership — 75,865 listings"},{"value":"private","label":"Private individual — 211 listings"}],"example":"private","aliases":["seller_type"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in rand (ZAR). Sent as the source's own range form. Measured: 100,000–200,000 → 13,566; 0–50,000 → 163.","on_invalid":"reject","example":150000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in rand (ZAR).","on_invalid":"reject","example":400000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres. Measured: 0–50,000 → 40,453.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_mileage","km_from"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres. 1,135 listings publish no odometer at all (the source's own count) and are excluded by any mileage bound.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["max_mileage","km_to"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. Measured: 2023–2026 → 43,911.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["min_year","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year. The source lists model years up to 2027.","on_invalid":"reject","example":2026,"minimum":1900,"maximum":2100,"aliases":["max_year","year_to"]},{"name":"instalment_min","type":"integer","required":false,"description":"Lowest monthly finance instalment in rand, using the site's own rate card (12.75 % p.a., 72 months, 10 % deposit). Only 144 of 200 sampled rows carry an instalment at all — private listings never do.","on_invalid":"reject","example":0,"minimum":0,"aliases":["monthly_price_min","min_monthly"]},{"name":"instalment_max","type":"integer","required":false,"description":"Highest monthly finance instalment in rand. Measured: 0–3,000 → 3,148.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["monthly_price_max","max_monthly"]},{"name":"engine_litres_min","type":"number","required":false,"description":"Smallest engine capacity in litres. Measured: 1.0–1.6 → 38,127.","on_invalid":"reject","example":1.0,"minimum":0,"aliases":["engine_capacity_min"]},{"name":"engine_litres_max","type":"number","required":false,"description":"Largest engine capacity in litres. Electric cars publish no capacity (0 of 20 sampled) and are excluded by any capacity bound.","on_invalid":"reject","example":2.0,"minimum":0,"aliases":["engine_capacity_max"]},{"name":"body_type","type":"enum","required":false,"description":"Body style, exactly as Cars.co.za names it — note `Double Cab Bakkie` for a double-cab pickup, which is the second-largest body class in South Africa. Measured: SUV → 33,823; Bus → 1,474; Panel Van → 755. The four motorcycle body styles only return rows when `bikes=true`.","on_invalid":"reject","allowed_values":[{"value":"SUV","label":"SUV — 33,823 listings"},{"value":"Hatchback","label":"Hatchback — 16,108"},{"value":"Double Cab Bakkie","label":"Double-cab bakkie (pickup) — 9,071"},{"value":"Sedan","label":"Sedan — 5,494"},{"value":"Single Cab Bakkie","label":"Single-cab bakkie — 4,306"},{"value":"Multi Purpose Vehicle","label":"MPV / people carrier — 1,974"},{"value":"Bus","label":"Bus / minibus — 1,474"},{"value":"Coupe","label":"Coupe — 1,149"},{"value":"Extended Cab Bakkie","label":"Extended-cab bakkie — 929"},{"value":"Panel Van","label":"Panel van — 755"},{"value":"Cabriolet","label":"Cabriolet / convertible — 431"},{"value":"Dropside","label":"Dropside truck — 351"},{"value":"Station Wagon","label":"Station wagon — 141"},{"value":"LDV with Flat Body","label":"LDV with flat body — 1"},{"value":"Road","label":"Motorcycle: road (needs bikes=true)"},{"value":"Offroad","label":"Motorcycle: offroad (needs bikes=true)"},{"value":"Dual Purpose","label":"Motorcycle: dual purpose (needs bikes=true)"},{"value":"4 Wheel","label":"Motorcycle: quad / 4-wheel (needs bikes=true)"}],"example":"SUV","aliases":["body","bodystyle"]},{"name":"province","type":"enum","required":false,"description":"South African province. Measured: Gauteng → 42,243 (55 % of the market), Northern Cape → 301.","on_invalid":"reject","allowed_values":[{"value":"Gauteng","label":"Gauteng — 42,243 listings"},{"value":"Western Cape","label":"Western Cape — 13,167"},{"value":"Kwazulu Natal","label":"KwaZulu-Natal — 9,629"},{"value":"Mpumalanga","label":"Mpumalanga — 3,157"},{"value":"North West Province","label":"North West — 2,400"},{"value":"Eastern Cape","label":"Eastern Cape — 2,197"},{"value":"Free State","label":"Free State — 1,613"},{"value":"Limpopo","label":"Limpopo — 1,369"},{"value":"Northern Cape","label":"Northern Cape — 301"}],"example":"Gauteng","aliases":["region","state"]},{"name":"city","type":"string","required":false,"description":"Town / suburb the selling dealership sits in, as the source prints it (`Sandton`, `Pietermaritzburg`, `Klerksdorp`). Free-form, not a closed list: call `filters` with `facet=province` for the regional split, and read `seller.locality` on any result for the exact spelling. Measured: `Sandton` → 2,881.","on_invalid":"reject","example":"Sandton","aliases":["locality","town","agent_locality"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. Measured: Automatic 48,673, Manual 27,390.","on_invalid":"reject","allowed_values":[{"value":"Automatic","label":"Automatic — 48,673"},{"value":"Manual","label":"Manual — 27,390"}],"example":"Automatic","aliases":["gearbox"]},{"name":"fuel_type","type":"enum","required":false,"description":"Fuel. Measured: Petrol 48,574, Diesel 24,743, Hybrid 1,419, PHEV 659, Electric 596.","on_invalid":"reject","allowed_values":[{"value":"Petrol","label":"Petrol — 48,574"},{"value":"Diesel","label":"Diesel — 24,743"},{"value":"Hybrid","label":"Hybrid — 1,419"},{"value":"PHEV","label":"Plug-in hybrid — 659"},{"value":"Electric","label":"Electric — 596"}],"example":"Diesel","aliases":["fuel"]},{"name":"colour","type":"enum","required":false,"description":"Exterior colour as the source groups it. Measured: White 36,379 — 48 % of the South African market.","on_invalid":"reject","allowed_values":[{"value":"White","label":"White — 36,379"},{"value":"Silver","label":"Silver — 12,160"},{"value":"Grey","label":"Grey — 10,117"},{"value":"Blue","label":"Blue — 4,501"},{"value":"Black","label":"Black — 3,959"},{"value":"Red","label":"Red — 3,882"},{"value":"Green","label":"Green — 1,007"},{"value":"Brown","label":"Brown — 692"},{"value":"Gold","label":"Gold — 637"},{"value":"Orange","label":"Orange — 625"},{"value":"Beige","label":"Beige — 487"},{"value":"Yellow","label":"Yellow — 274"},{"value":"Purple","label":"Purple — 56"},{"value":"Pink","label":"Pink — 12"},{"value":"Unknown","label":"Unknown — 152"}],"example":"White","aliases":["color"]},{"name":"seats","type":"enum","required":false,"description":"Seat count. The source publishes `8+` as one bucket and uses `0` for 'not recorded' (163 listings). Measured: 5 → 58,766; 7 → 7,152.","on_invalid":"reject","allowed_values":[{"value":"1","label":"1 seat — 64"},{"value":"2","label":"2 seats — 5,024"},{"value":"3","label":"3 — 1,418"},{"value":"4","label":"4 — 2,096"},{"value":"5","label":"5 — 58,766"},{"value":"7","label":"7 — 7,152"},{"value":"8+","label":"8 or more — 1,393"},{"value":"0","label":"0 (the source's own 'not recorded' bucket) — 163"}],"example":"7"},{"name":"drivetrain","type":"enum","required":false,"description":"Driven wheels, as the source's `vehicle_axle_config`. Measured: 4X2 58,939, 4X4 16,921.","on_invalid":"reject","allowed_values":[{"value":"4X2","label":"Two-wheel drive — 58,939"},{"value":"4X4","label":"Four-wheel drive — 16,921"}],"example":"4X4","aliases":["axle_config","drive"]},{"name":"vehicle_kind","type":"enum","required":false,"description":"Passenger car or commercial vehicle. Measured: passenger 74,900, commercial 16,886 — the two overlap, because a double-cab bakkie counts as both.","on_invalid":"reject","allowed_values":[{"value":"passenger","label":"Passenger vehicle — 74,900"},{"value":"commercial","label":"Commercial vehicle — 16,886"}],"example":"commercial","aliases":["commercial_type"]},{"name":"engine_type","type":"enum","required":false,"description":"Induction type, where the source records it. Measured: Turbocharged 46,242, Supercharged 172, Naturally Aspirated 128 — 29,534 listings record none.","on_invalid":"reject","allowed_values":[{"value":"Turbocharged","label":"Turbocharged — 46,242"},{"value":"Supercharged","label":"Supercharged — 172"},{"value":"Naturally Aspirated","label":"Naturally aspirated — 128"}],"example":"Turbocharged"},{"name":"deal_tag","type":"enum","required":false,"description":"Cars.co.za's own badge on the listing. `great deal` / `good deal` / `fair deal` are its price verdict against its own guide price; `price drop` means the advertised price was cut. Measured: great deal 7,433, price drop 4,845. 33,631 listings carry no badge.","on_invalid":"reject","allowed_values":[{"value":"great deal","label":"Priced well below the site's own guide — 7,433"},{"value":"good deal","label":"Good deal — 9,944"},{"value":"fair deal","label":"Fair deal — 14,924"},{"value":"price drop","label":"Price was cut since listing — 4,845"},{"value":"fast seller","label":"Model sells fast — 3,747"},{"value":"performance","label":"Performance car — 1,097"},{"value":"luxury","label":"Luxury — 308"},{"value":"classic","label":"Classic — 147"}],"example":"price drop","aliases":["vehicle_tag","tag"]},{"name":"dealer_rating_min","type":"number","required":false,"description":"Only cars at dealerships rated at least this (out of 5) by the site's own review feed. Measured: 4 and up → 57,941.","on_invalid":"reject","example":4,"minimum":0,"maximum":5,"aliases":["agent_rating_min","min_rating"]},{"name":"featured_dealers_only","type":"boolean","required":false,"description":"Only stock at dealerships Cars.co.za flags as featured. Measured: 10,790 listings at 198 of the 1,710 dealerships.","on_invalid":"reject","default":false,"example":false,"aliases":["featured_only"]},{"name":"bikes","type":"boolean","required":false,"description":"Include motorcycles, which the car search leaves out. Measured: the unfiltered total goes from 76,076 to 76,125, i.e. Cars.co.za is listing 49 bikes — it is a car marketplace and the bike surface is thin. Pair with `body_type=Road` / `Offroad` / `Dual Purpose` / `4 Wheel`.","on_invalid":"reject","default":false,"example":false,"aliases":["include_bikes"]},{"name":"sort","type":"enum","required":false,"description":"Result order. An unknown sort key makes the source answer with no data at all (measured), so this is a closed list and a bad value is rejected here rather than forwarded.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's own default result order"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"},{"value":"mileage_asc","label":"Fewest kilometres first"},{"value":"mileage_desc","label":"Most kilometres first"},{"value":"year_desc","label":"Newest model year first"},{"value":"year_asc","label":"Oldest model year first"},{"value":"newest_stock","label":"Most recently listed first"},{"value":"instalment_asc","label":"Lowest monthly instalment estimate first"}],"default":"relevance","example":"price_asc"},{"name":"max_results","type":"integer","required":false,"description":"Rows to return, 1-120. 120 is the source's measured hard ceiling: asking for 200 or 500 still returns 120. Use `offset` to page past it — offset paging was measured to the end of the catalogue.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":120,"aliases":["limit","per_page","page_size"]},{"name":"offset","type":"integer","required":false,"description":"Rows to skip. Measured working at 0, 1,000, 20,000 and 76,060; past the end (100,000) the source returns 0 rows and no error. Pages do not overlap: 4 x 20 rows at offsets 0/20/40/60 gave 80 distinct ids.","on_invalid":"reject","default":0,"example":0,"minimum":0,"aliases":["skip","start"]}],"returns":"{results[], total_available, returned, offset, page_ceiling, sort} — each result: listing_id, url, title, make, model, variant, year, condition, price_zar, previous_price_zar, monthly_instalment_zar, currency, mileage_km, mileage_text, body_type, transmission, fuel_type, engine_litres, engine_type, drivetrain, seats, colour, vehicle_kind, deal_tags[], condition_grade, description, features[], images[], image_count, province, city, seller{}, listing_code.","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":2},"example_params":{"max_results":20}},{"name":"detail","description":"One listing in full, from the source's own listing endpoint: everything a `search` row carries plus the complete manufacturer spec table grouped as Cars.co.za groups it (summary, engine, performance, dimensions, …), the site's own `highlights` verdicts with their numbers, the date the car was listed, the dealership's own stock reference, and the sold flag. Measured on a dealer car, a private-seller car and a motorcycle: all three answer, and motorcycles come back with an empty spec table because the source publishes none for them. A dead id returns NOT_FOUND.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Cars.co.za listing id — the last path segment of a /for-sale/ URL and the `listing_id` of any `search` row. A dead id returns NOT_FOUND.","on_invalid":"reject","example":"11264546","value_pattern":"\\d{4,12}","aliases":["vehicle_id","id","car_id"]}],"returns":"One listing object: every search field plus specs[] (grouped label/value), highlights[], listed_at, dealer_reference, is_sold, seller{} with phone and WhatsApp where published.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"11264546"}},{"name":"dealers","description":"The Cars.co.za dealer directory — 1,710 active dealerships on 2026-10-01 — with street address, suburb, province, coordinates, dealer group, rating and rating count, how many cars they currently list, their three most-listed makes, their Cars.co.za profile URL and their published phone number. Filters measured in the same run: `query`/`name` → 32 for BMW, `province` → 858 in Gauteng, `city` → 53 in Sandton, `featured_only` → 198. 🔴 Four parameters the source accepts and then ignores (`popular_makes`, `top_make`, a province under the vehicle spelling, and a rating range) are deliberately NOT exposed.","required_params":[],"optional_params":["query","province","city","featured_only","sort","max_results","offset"],"params":[{"name":"query","type":"string","required":false,"description":"Dealership name or free text. Measured: `BMW` → 32 of 1,710 dealerships.","on_invalid":"reject","example":"BMW","aliases":["q","name","dealer_name","keyword"]},{"name":"province","type":"enum","required":false,"description":"Province the dealership sits in. Measured: Gauteng → 858 dealerships.","on_invalid":"reject","allowed_values":[{"value":"Gauteng","label":"Gauteng — 42,243 listings"},{"value":"Western Cape","label":"Western Cape — 13,167"},{"value":"Kwazulu Natal","label":"KwaZulu-Natal — 9,629"},{"value":"Mpumalanga","label":"Mpumalanga — 3,157"},{"value":"North West Province","label":"North West — 2,400"},{"value":"Eastern Cape","label":"Eastern Cape — 2,197"},{"value":"Free State","label":"Free State — 1,613"},{"value":"Limpopo","label":"Limpopo — 1,369"},{"value":"Northern Cape","label":"Northern Cape — 301"}],"example":"Gauteng","aliases":["region","area"]},{"name":"city","type":"string","required":false,"description":"Town / suburb. Measured: `Sandton` → 53.","on_invalid":"reject","example":"Sandton","aliases":["locality","town"]},{"name":"featured_only","type":"boolean","required":false,"description":"Only dealerships Cars.co.za flags as featured. Measured: 198 of 1,710.","on_invalid":"reject","default":false,"example":false},{"name":"sort","type":"enum","required":false,"description":"Dealer directory order.","on_invalid":"reject","allowed_values":[{"value":"name","label":"Dealership name A-Z (the site's own default)"},{"value":"name_desc","label":"Dealership name Z-A"}],"default":"name","example":"name"},{"name":"max_results","type":"integer","required":false,"description":"Dealerships to return, 1-200. The dealer surface honours 200 (measured), unlike the vehicle surface's 120.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":200,"aliases":["limit","per_page","page_size"]},{"name":"offset","type":"integer","required":false,"description":"Rows to skip. Measured working at 0, 1,000, 20,000 and 76,060; past the end (100,000) the source returns 0 rows and no error. Pages do not overlap: 4 x 20 rows at offsets 0/20/40/60 gave 80 distinct ids.","on_invalid":"reject","default":0,"example":0,"minimum":0,"aliases":["skip","start"]}],"returns":"{results[], total_available, returned, offset} — each result: dealer_id, name, group, address, city, province, latitude, longitude, rating, rating_count, listing_count, top_makes[], phone, whatsapp_enabled, nada_member, is_featured, status, url, showcase_image, map_embed_url.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"province":"Gauteng","max_results":20}},{"name":"dealer","description":"One dealership's profile, plus the Google reviews Cars.co.za publishes for it (reviewer name, star rating, relative date and the review text) when `include_reviews` is left on. A dealer id that does not exist returns NOT_FOUND rather than an empty success.","required_params":["dealer_id"],"optional_params":["include_reviews"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"Dealership id as `dealers` and `search` (`seller.dealer_id`) return it.","on_invalid":"reject","example":"8365","value_pattern":"\\d{1,9}","aliases":["seller_id","agent_id","id"]},{"name":"include_reviews","type":"boolean","required":false,"description":"Also fetch the dealership's published Google reviews (one extra upstream request). Set false for the profile alone.","on_invalid":"reject","default":true,"example":true}],"returns":"{dealer{…as in `dealers`…}, reviews[], review_count, reviews_available} — reviews: author, rating, text, posted_text.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"dealer_id":"8365"}},{"name":"dealer_stock","description":"Every vehicle one dealership currently lists, in the same row shape as `search`, dearest first by default. Take `dealer_id` from `dealers` or from `seller.dealer_id` on any search row. Measured: dealer 8365 → 10 cars, dealer 7914 → 17.","required_params":["dealer_id"],"optional_params":["sort","max_results","offset","bikes"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"Dealership id as `dealers` and `search` (`seller.dealer_id`) return it.","on_invalid":"reject","example":"8365","value_pattern":"\\d{1,9}","aliases":["seller_id","agent_id","id"]},{"name":"sort","type":"enum","required":false,"description":"Result order. An unknown sort key makes the source answer with no data at all (measured), so this is a closed list and a bad value is rejected here rather than forwarded.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's own default result order"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"},{"value":"mileage_asc","label":"Fewest kilometres first"},{"value":"mileage_desc","label":"Most kilometres first"},{"value":"year_desc","label":"Newest model year first"},{"value":"year_asc","label":"Oldest model year first"},{"value":"newest_stock","label":"Most recently listed first"},{"value":"instalment_asc","label":"Lowest monthly instalment estimate first"}],"default":"relevance","example":"price_asc"},{"name":"max_results","type":"integer","required":false,"description":"Rows to return, 1-120. 120 is the source's measured hard ceiling: asking for 200 or 500 still returns 120. Use `offset` to page past it — offset paging was measured to the end of the catalogue.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":120,"aliases":["limit","per_page","page_size"]},{"name":"offset","type":"integer","required":false,"description":"Rows to skip. Measured working at 0, 1,000, 20,000 and 76,060; past the end (100,000) the source returns 0 rows and no error. Pages do not overlap: 4 x 20 rows at offsets 0/20/40/60 gave 80 distinct ids.","on_invalid":"reject","default":0,"example":0,"minimum":0,"aliases":["skip","start"]},{"name":"bikes","type":"boolean","required":false,"description":"Include motorcycles, which the car search leaves out. Measured: the unfiltered total goes from 76,076 to 76,125, i.e. Cars.co.za is listing 49 bikes — it is a car marketplace and the bike surface is thin. Pair with `body_type=Road` / `Offroad` / `Dual Purpose` / `4 Wheel`.","on_invalid":"reject","default":false,"example":false,"aliases":["include_bikes"]}],"returns":"{results[] as in `search`, total_available, returned, offset, dealer_id}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"dealer_id":"8365"}},{"name":"filters","description":"The live filter vocabulary straight from the source, with the number of listings behind every value — so you can size a query before you run it, and you never have to guess a spelling. `facet=make_model_variant` returns the whole tree (100 makes, every model, every variant, counts on all three levels, ~167 KB). `facet=price` / `mileage` / `year` / `monthly_price` return the source's own two-sided ladder (how many cars sit above each rung and below each rung). Any `search` filter can be narrowed by the same values.","required_params":["facet"],"optional_params":[],"params":[{"name":"facet","type":"enum","required":true,"description":"Which filter vocabulary to return. Every value comes back with the number of live listings behind it, so you can size a query before you run it.","on_invalid":"reject","allowed_values":[{"value":"make","label":"Every make with its listing count (100 makes)"},{"value":"make_model_variant","label":"The whole make -> model -> variant tree with a count on each"},{"value":"body_type","label":"Body styles"},{"value":"province","label":"Provinces"},{"value":"transmission","label":"Gearboxes"},{"value":"fuel_type","label":"Fuels"},{"value":"colour","label":"Colours"},{"value":"seats","label":"Seat counts"},{"value":"commercial_type","label":"Passenger vs commercial"},{"value":"vehicle_axle_config","label":"2WD vs 4WD"},{"value":"vehicle_tags","label":"Deal badges"},{"value":"engine_type","label":"Induction types"},{"value":"new_or_used","label":"New vs used"},{"value":"seller_type","label":"Dealer vs private"},{"value":"seller_types","label":"Dealer sub-kinds: dealer / group / premium / private"},{"value":"engine_capacity","label":"Engine-capacity bands"},{"value":"price","label":"Price ladder: how many cars are above each rung and below each rung"},{"value":"mileage","label":"Odometer ladder"},{"value":"year","label":"Model-year ladder"},{"value":"monthly_price","label":"Monthly-instalment ladder"}],"example":"body_type","aliases":["name","field"]}],"returns":"{facet, values{} | tree{}, value_count} — `values` maps each published value to its live listing count; the make/model/variant facet returns a nested tree instead; the four numeric facets return `min`/`max` ladders.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"facet":"body_type"}}]},{"name":"cars24","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Cars24 India — used cars, inspection reports, hubs & live filter counts","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cars24/v1","spec_available":true,"actions":[{"name":"search","description":"Search Cars24's Indian used-car catalogue — both its own refurbished stock and the owner-direct cars on the same platform. 30,170 cars across 184 cities on 2026-10-01, counted from the source's own facet endpoint. Returns the car, its price in rupees, odometer, year, variant, colour, seats, owner count, masked RTO plate, body/fuel/gearbox, where it physically stands (locality + coordinates), the canonical cars24.com URL, the photo count, when it was first listed, the seller kind and Cars24's own finance estimate. Every filter below was measured against the count the source itself published for that value in the same run. 🔴 Two honesty notes you should plan for: the source caps `total_available` at 10,000 (so an all-India query returns `total_is_capped: true` and you should read the real population from `filters`), and one page is at most 30 rows — walk further with `cursor`, which was measured to have zero overlap and to reach 100 % of a city's published total.","required_params":[],"optional_params":["city_id","make","model","seller_kind","fuel","body_type","transmission","transmission_type","colour","seats","owners","features","price_min","price_max","year_min","year_max","km_min","km_max","discount_pct_min","rto_state","rto_code","hub_code","lat","lon","sort","max_results","cursor"],"params":[{"name":"city_id","type":"integer","required":false,"description":"Cars24's own city id. 184 cities are served; call the `cities` action for the whole list with a live car count each. Measured in one run: 2 = New Delhi (2,941 cars, exactly the \"2941 Used Cars in New Delhi\" headline the site printed in the same minute), 1 = Delhi NCR cluster (6,924). 🔴 OMIT IT AND YOU SEARCH ALL OF INDIA — but the source caps the reported total at 10,000 there, so `total_is_capped` comes back true and the real population (30,170 on 2026-10-01) must be read from the `filters` action.","on_invalid":"reject","example":2,"minimum":1,"aliases":["city","cityId"]},{"name":"make","type":"enum","required":false,"description":"Manufacturer, lower-case exactly as Cars24 keys it. Measured all-India: `maruti` → 7,996 of 30,170; `hyundai` → 6,050. Counts per city come from the `filters` action.","on_invalid":"reject","allowed_values":[{"value":"maruti","label":"Maruti Suzuki — 7,996 cars, 35 models"},{"value":"hyundai","label":"Hyundai — 6,050, 29 models"},{"value":"tata","label":"Tata — 3,454, 37 models"},{"value":"honda","label":"Honda — 2,290"},{"value":"mahindra","label":"Mahindra — 1,861"},{"value":"renault","label":"Renault — 1,284"},{"value":"kia","label":"KIA — 1,278"},{"value":"ford","label":"Ford — 1,118"},{"value":"toyota","label":"Toyota — 859"},{"value":"volkswagen","label":"Volkswagen — 854"},{"value":"mg","label":"MG — 729"},{"value":"skoda","label":"Skoda — 610"},{"value":"nissan","label":"Nissan — 485"},{"value":"jeep","label":"Jeep — 299"},{"value":"datsun","label":"Datsun — 210"},{"value":"chevrolet","label":"Chevrolet — 200"},{"value":"mercedes benz","label":"Mercedes Benz — 145"},{"value":"audi","label":"Audi — 129"},{"value":"bmw","label":"BMW — 109"},{"value":"citroen","label":"Citroen — 61"},{"value":"fiat","label":"Fiat — 38"},{"value":"volvo","label":"Volvo — 26"},{"value":"landrover","label":"Land Rover — 22"},{"value":"jaguar","label":"Jaguar — 21"},{"value":"mitsubishi","label":"Mitsubishi — 16"},{"value":"ssangyong","label":"Ssangyong — 8"},{"value":"isuzu","label":"Isuzu — 5"},{"value":"force motors","label":"Force Motors — 5"},{"value":"byd","label":"BYD — 3"},{"value":"mahindra renault","label":"Mahindra Renault — 2"},{"value":"mini","label":"Mini — 2"},{"value":"premier","label":"Premier — 1"}],"example":"maruti","aliases":["brand","manufacturer"]},{"name":"model","type":"string","required":false,"description":"Model name within the make, lower-case as the source keys it (`swift`, `creta`, `nexon`, `wagon r 1.0`). Measured: `make=maruti` + `model=swift` → 935 all-India. `filters` with `facet=make_model` returns the whole make → model tree with a count on every node. An unknown model is not an error: `ok:true`, 0 results, a warning.","on_invalid":"reject","example":"swift","aliases":["model_name"]},{"name":"seller_kind","type":"enum","required":false,"description":"Whose car it is. Measured all-India: Cars24-owned 6,746 + owner-direct 23,424 = 30,170, i.e. exactly the whole catalogue, so the two buckets are complete and disjoint. Only Cars24-owned stock carries an inspection report.","on_invalid":"reject","allowed_values":[{"value":"cars24","label":"Cars24's own refurbished stock, sold from a Cars24 hub — 6,746 cars. These are the only cars with an inspection report and a service history."},{"value":"owner","label":"Owner-direct, listed by the car's owner and badged \"Verified Direct Seller\" by Cars24 — 23,424 cars. No inspection report is published for these."}],"example":"cars24","aliases":["seller","listing_type","business_vertical"]},{"name":"fuel","type":"array","required":false,"description":"One or more fuel types. Several values are sent as the source's own any-of form and were proved additive: petrol+diesel → 2,229 in New Delhi = 1,911 + 318 exactly.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol — 18,671"},{"value":"diesel","label":"Diesel — 7,582"},{"value":"cng","label":"CNG — 3,723"},{"value":"electric","label":"Electric — 123"},{"value":"hybrid","label":"Hybrid — 71"}],"example":["petrol","cng"],"aliases":["fuel_type","fuelType"]},{"name":"body_type","type":"array","required":false,"description":"Body style. Measured all-India: SUV 12,470, hatchback 11,858, sedan 5,835. Cars24 India publishes only these three.","on_invalid":"reject","allowed_values":[{"value":"suv","label":"SUV — 12,470"},{"value":"hatchback","label":"Hatchback — 11,858"},{"value":"sedan","label":"Sedan — 5,835"}],"example":["suv"],"aliases":["body","bodyType"]},{"name":"transmission","type":"enum","required":false,"description":"Measured all-India: manual 23,086, automatic 7,084 (= 30,170).","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual — 23,086"},{"value":"automatic","label":"Automatic — 7,084"}],"example":"automatic","aliases":["gearbox"]},{"name":"transmission_type","type":"enum","required":false,"description":"The exact gearbox technology, which Cars24 breaks out separately. Measured all-India: `cvt` → 1,274. Works on its own, without `transmission`.","on_invalid":"reject","allowed_values":[{"value":"mt","label":"Regular manual (MT)"},{"value":"imt","label":"Intelligent manual (iMT) — clutchless manual"},{"value":"amt","label":"Automated manual (AMT)"},{"value":"tc","label":"Torque converter (TC)"},{"value":"cvt","label":"Continuously variable (CVT) — 1,274 nationally"},{"value":"dct","label":"Dual-clutch (DCT)"}],"example":"amt","aliases":["transmission_subtype","gearbox_type"]},{"name":"colour","type":"array","required":false,"description":"Exterior colour. Measured all-India: white 12,143, black 2,100, purple 64.","on_invalid":"reject","allowed_values":[{"value":"white","label":"White — 12,143"},{"value":"silver","label":"Silver — 4,474"},{"value":"red","label":"Red — 2,759"},{"value":"blue","label":"Blue — 2,350"},{"value":"black","label":"Black — 2,100"},{"value":"brown","label":"Brown — 898"},{"value":"yellow","label":"Yellow — 317"},{"value":"orange","label":"Orange — 312"},{"value":"green","label":"Green — 249"},{"value":"purple","label":"Purple — 64"}],"example":["white"],"aliases":["color"]},{"name":"seats","type":"array","required":false,"description":"Seat count. Measured all-India: 5-seat 25,611, 7-seat 2,614, 9-seat 11.","on_invalid":"reject","allowed_values":[{"value":"4","label":"4 seats — 242"},{"value":"5","label":"5 seats — 25,611"},{"value":"6","label":"6 — 407"},{"value":"7","label":"7 — 2,614"},{"value":"8","label":"8 — 112"},{"value":"9","label":"9 — 11"}],"example":["7"],"aliases":["seat_count","seatNumber"]},{"name":"owners","type":"array","required":false,"description":"How many owners the car has had. Measured all-India: first owner 18,799, fourth 640. The source publishes no bucket above 4.","on_invalid":"reject","allowed_values":[{"value":"1","label":"First owner — 18,799"},{"value":"2","label":"Second owner — 7,799"},{"value":"3","label":"Third owner — 2,723"},{"value":"4","label":"Fourth owner — 640"}],"example":["1"],"aliases":["owner_number","ownership"]},{"name":"features","type":"array","required":false,"description":"Equipment the car must have. Measured all-India: sunroof 5,370, ventilated seats 1,488, 360-degree camera 1,388. Several values are ANDed by the source, so each one you add narrows the result.","on_invalid":"reject","allowed_values":[{"value":"bluetooth","label":"Bluetooth — 20,503"},{"value":"parkingassist","label":"Parking assist — 19,064"},{"value":"rearac","label":"Rear AC — 14,046"},{"value":"alloywheels","label":"Alloy wheels — 13,732"},{"value":"applecarplayandroidauto","label":"Apple CarPlay / Android Auto — 10,876"},{"value":"infotainmentsystem","label":"Infotainment system — 9,727"},{"value":"pushbuttonstart","label":"Push-button start — 9,324"},{"value":"cruisecontrol","label":"Cruise control — 8,474"},{"value":"topmodel","label":"Top-of-the-range trim — 7,683"},{"value":"gpsnavigation","label":"Built-in navigation — 6,202"},{"value":"tpms","label":"Tyre-pressure monitoring — 5,532"},{"value":"sunroof/moonroof","label":"Sunroof / moonroof — 5,370"},{"value":"leatherseats","label":"Leather upholstery — 5,264"},{"value":"ventilatedseats","label":"Ventilated seats — 1,488"},{"value":"360degreecamera","label":"360-degree camera — 1,388"},{"value":"specialregno","label":"Special registration number — 1,059"}],"example":["sunroof/moonroof"],"aliases":["equipment"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest drive-away price in whole Indian rupees (INR — NOT paise, NOT lakh). Measured all-India: 200,000–400,000 → 8,144.","on_invalid":"reject","example":200000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest drive-away price in whole rupees. The source's own slider stops at 19,500,000 (1.95 crore) nationally.","on_invalid":"reject","example":400000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. The source's own slider starts at 2001. Measured in New Delhi: 2020–2026 → 1,108 of 2,941.","on_invalid":"reject","example":2020,"minimum":1990,"maximum":2030,"aliases":["min_year","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","example":2026,"minimum":1990,"maximum":2030,"aliases":["max_year","year_to"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km","odometer_min","km_from"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres. Measured all-India: 0–30,000 → 4,468; in New Delhi 0–20,000 → 249.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["max_km","odometer_max","km_to"]},{"name":"discount_pct_min","type":"integer","required":false,"description":"Only cars Cars24 itself flags as discounted by at least this percentage. Measured all-India: 10 % or more → 2,221; 20 % or more → 464.","on_invalid":"reject","example":10,"minimum":1,"maximum":100,"aliases":["min_discount_pct"]},{"name":"rto_state","type":"string","required":false,"description":"Two-letter state RTO code, capitalised as the source keys it (`Dl`, `Mh`, `Hr`, `Up`, `Ka`). Measured all-India: `Mh` → 5,088. `filters` with `facet=rto` lists every state with its city codes and counts.","on_invalid":"reject","example":"Mh","value_pattern":"[A-Za-z]{2}","aliases":["state_rto","state"]},{"name":"rto_code","type":"string","required":false,"description":"City RTO code as the source keys it: first letter upper, rest lower (`Dl8c`, `Hr26`, `Up16`). Measured all-India: `Dl8c` → 598; inside New Delhi → 405.","on_invalid":"reject","example":"Dl8c","value_pattern":"[A-Za-z]{2}\\d{1,2}[A-Za-z]?","aliases":["city_rto"]},{"name":"hub_code","type":"string","required":false,"description":"Only cars standing at one Cars24 branch, keyed by the hub code in lower case (`lc_101`, `in_car_cc_2_fc_4`). Measured: `lc_101` → 196. The `hubs` action and `filters` with `facet=hub` both list the codes.","on_invalid":"reject","example":"lc_101","aliases":["hub","branch"]},{"name":"lat","type":"number","required":false,"description":"Latitude, only needed for `sort=nearest`.","on_invalid":"reject","example":28.6129,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Longitude, only needed for `sort=nearest`.","on_invalid":"reject","example":77.2295,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"sort","type":"enum","required":false,"description":"Result order. 🔴 A value outside this list is NOT rejected by the source — it answers HTTP 200, echoes the bad value back in its own response and silently serves the default order. This endpoint therefore validates `sort` itself and tells you the accepted set.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"The source's own default relevance order (`bestmatch`)"},{"value":"newest","label":"Most recently listed first (`lhl`)"},{"value":"price_asc","label":"Cheapest first (`plh`)"},{"value":"price_desc","label":"Dearest first (`phl`)"},{"value":"km_asc","label":"Lowest odometer first (`olh`)"},{"value":"km_desc","label":"Highest odometer first (`ohl`)"},{"value":"age_asc","label":"Newest car first (`alh`)"},{"value":"age_desc","label":"Oldest car first (`ahl`)"},{"value":"nearest","label":"Closest to a point — REQUIRES `lat` and `lon`; the source rejects it (HTTP 400) without them (`dist`)"}],"default":"best_match","example":"price_asc","aliases":["order","sort_by"]},{"name":"max_results","type":"integer","required":false,"description":"Rows for this call, 1–30. 30 is a measured hard ceiling: asking for 50, 100, 200, 500 or 1000 all returned exactly 30 rows with HTTP 200 and an unchanged total. Use `cursor` to walk further.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":30,"aliases":["limit","size","page_size"]},{"name":"cursor","type":"string","required":false,"description":"Opaque continuation token: pass back the `next_cursor` from the previous `search` response, with the SAME filters and the SAME `sort`. Measured: six consecutive pages gave 120 rows and 120 unique ids (overlap 0), and a small city was walked to exhaustion — 69 of 69 published cars reached, 100 %.","on_invalid":"reject","example":"","aliases":["page_token","search_after","next_cursor"]}],"returns":"{results[], total_available, total_is_capped, returned, page_ceiling, next_cursor, sort, city{}, seller_kind_counts{}, headline} — each result: car_id, url, title, make, model, variant, year, price_inr, price_display, odometer_km, fuel, transmission, body_type, colour, seats, owners, rto_code, plate_masked, registered_on, listed_on, locality, latitude, longitude, photo_count, seller_kind, seller_label, hub_id, assurance, emi{}, badges[], image_url.","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":3},"example_params":{"city_id":2,"max_results":3}},{"name":"detail","description":"One car in full, from Cars24's own car-detail endpoint — 79 keys on the car measured. Everything a `search` row carries plus: Cars24's INSPECTION REPORT (`condition`: per-area imperfection count, the source's own OK/WARN/ERROR status, its written note and, where published, the inspector's engine clip) with the defect photographs; the complete spec and feature table as Cars24 groups it (71 rows on the car measured); tyre tread life per wheel; the service-history summary; insurance type and fitness-certificate expiry; the hub it stands at with street address and opening hours; the photo gallery grouped exterior / interior / tyres / defects; Cars24's own buying highlights and promises; and how many people have wishlisted it. 🔴 Measured and published honestly: an OWNER-DIRECT car has no inspection report and no service history — those come back null with a warning naming them, never faked. A dead id returns NOT_FOUND, not an empty success.","required_params":["car_id"],"optional_params":[],"params":[{"name":"car_id","type":"string","required":true,"description":"Cars24's own listing id (it calls it `appointmentId`) — the trailing number of any cars24.com car URL, e.g. 13421894115 in /buy-used-hyundai-eon-2015-cars-new-delhi-13421894115/, and the `car_id` of every `search` row. An id that does not exist returns NOT_FOUND.","on_invalid":"reject","example":"13421894115","value_pattern":"\\d{6,14}","aliases":["appointment_id","appointmentId","listing_id","id"]}],"returns":"One car object: every search field plus condition{areas[],checkpoints[]}, specs[], features_present[], tyres[], service_history{}, insurance_type, fitness_valid_until, last_serviced_on, hub{}, gallery{}, photo_count, highlights[], promises[], overview[], price_ex_charges_inr, wishlist_count, make_id, model_id, variant_id.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"car_id":"13421894115"}},{"name":"batch_detail","description":"Search-grade rows for up to 10 car ids in ONE upstream request — the cheapest way to refresh a watchlist. Measured: 5 ids → 5 rows in 63 KB (~12.6 KB per car) against 85 KB for one `detail`. Ids the source no longer publishes are returned in `missing` instead of silently disappearing; if none of the ids resolve you get NOT_FOUND. This is NOT the full detail record — no inspection report, no spec table; use `detail` for those.","required_params":["car_ids"],"optional_params":[],"params":[{"name":"car_ids","type":"array","required":true,"description":"Up to 10 Cars24 listing ids in one call. Measured: 5 ids in one upstream request returned all 5 rows in 63 KB — about 12.6 KB per car against 85 KB for a single `detail`, so a batch is genuinely cheaper per car. Ids that no longer exist come back in `missing`.","on_invalid":"reject","example":["13421894115","13386161730"],"aliases":["ids","appointment_ids"]}],"returns":"{results[], returned, requested, missing[]} — rows as in `search`.","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":2},"example_params":{"car_ids":["13421894115","13386161730"]}},{"name":"price_breakdown","description":"Cars24's own line-by-line breakdown of the drive-away price for one car: base price, RC-transfer price, government-mandated third-party insurance and any further charges, each with the source's own title, explanation and amount in rupees. Measured on car 13421894115: base ₹178,583 + RC transfer ₹10,000 + insurance, summing to the ₹191,102 the listing headline prints. A tiny call — 1.9 KB. A dead id returns NOT_FOUND.","required_params":["car_id"],"optional_params":[],"params":[{"name":"car_id","type":"string","required":true,"description":"Cars24's own listing id (it calls it `appointmentId`) — the trailing number of any cars24.com car URL, e.g. 13421894115 in /buy-used-hyundai-eon-2015-cars-new-delhi-13421894115/, and the `car_id` of every `search` row. An id that does not exist returns NOT_FOUND.","on_invalid":"reject","example":"13421894115","value_pattern":"\\d{6,14}","aliases":["appointment_id","appointmentId","listing_id","id"]}],"returns":"{car_id, title, subtitle, charges[{id,title,amount_inr,description,note}], total_inr} — total_inr is the sum of the published lines.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"car_id":"13421894115"}},{"name":"filters","description":"The live filter vocabulary WITH a car count on every value — the honest way to size a market before searching it, and the only way to see past the 10,000 cap the search surface puts on its own total. 18 filter groups: the whole make → model tree (32 makes, 35 Maruti models), fuel, body, transmission with its sub-types, colour, seats, owner count, 16 equipment flags, state and city RTO codes, the Cars24 hubs in the city, discount bands and paid add-ons, plus the price / year / odometer sliders' own break points. Pass `city_id` for one city's counts, omit it for all of India (30,170 cars on 2026-10-01).","required_params":[],"optional_params":["city_id","facet"],"params":[{"name":"city_id","type":"integer","required":false,"description":"Cars24's own city id. 184 cities are served; call the `cities` action for the whole list with a live car count each. Measured in one run: 2 = New Delhi (2,941 cars, exactly the \"2941 Used Cars in New Delhi\" headline the site printed in the same minute), 1 = Delhi NCR cluster (6,924). 🔴 OMIT IT AND YOU SEARCH ALL OF INDIA — but the source caps the reported total at 10,000 there, so `total_is_capped` comes back true and the real population (30,170 on 2026-10-01) must be read from the `filters` action.","on_invalid":"reject","example":2,"minimum":1,"aliases":["city","cityId"]},{"name":"facet","type":"enum","required":false,"description":"Return only this one filter group instead of all 18. Omit for everything.","on_invalid":"reject","allowed_values":[{"value":"make_model","label":"Every make with its models and a live count on each node (MAKE_MODEL)"},{"value":"budget","label":"The price slider's own break points (BUDGET)"},{"value":"year","label":"The year slider's own break points (YEAR)"},{"value":"odometer","label":"The odometer slider's own break points (ODOMETER)"},{"value":"fuel","label":"Fuel types with counts (FUEL_TYPE)"},{"value":"body_type","label":"Body types with counts (BODY_TYPE)"},{"value":"transmission","label":"Transmission with its sub-types (TRANSMISSION)"},{"value":"colour","label":"Colours with counts (COLOR)"},{"value":"seats","label":"Seat counts (SEATS)"},{"value":"owners","label":"Number of previous owners (OWNERS)"},{"value":"seller_kind","label":"Cars24-owned vs owner-direct with counts (CAR_CATEGORY_V3)"},{"value":"features","label":"Equipment flags with counts (FEATURES_V2)"},{"value":"rto","label":"State and city RTO codes with counts (CAR_RTO)"},{"value":"hub","label":"Cars24 hubs in the city with a car count each (CARS24HUB)"},{"value":"discount","label":"Price-discount bands (PRICE_DISCOUNT_PERCENTAGE)"},{"value":"extras","label":"Paid add-ons such as Care Plus (VAS)"},{"value":"smart_picks","label":"The source's own curated flags, e.g. 30-day return (SMART_PICKS)"}],"example":"make_model","aliases":["group","widget"]}],"returns":"{total_available, groups[{group, source_name, operator, kind, values[{value, label, count, children[]}], range_points[]}]}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"city_id":2,"facet":"make_model"}},{"name":"cities","description":"Every Indian city Cars24 serves — 184 on 2026-10-01 — with its city id, its cars24.com URL, whether Cars24 features it, a live total car count and, per city, the makes on sale with a count each. This is the lookup you need before `search`, because `city_id` is Cars24's own numeric key. Measured: Delhi NCR id 1, 7,040 cars, Maruti 2,140 of them.","required_params":[],"optional_params":["query","featured_only","with_brands"],"params":[{"name":"query","type":"string","required":false,"description":"Case-insensitive substring of the city name. Measured: `delhi` matches Delhi NCR and New Delhi.","on_invalid":"reject","example":"delhi","aliases":["q","city","name"]},{"name":"featured_only","type":"boolean","required":false,"description":"Only the cities Cars24 flags as featured.","on_invalid":"reject","default":false,"example":false},{"name":"with_brands","type":"boolean","required":false,"description":"Include the per-city make counts. Turn it off for a much smaller answer.","on_invalid":"reject","default":true,"example":true}],"returns":"{results[{city_id, name, slug, url, car_count, featured, brands[{make, count, url}]}], returned}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"with_brands":false}},{"name":"hubs","description":"Cars24's physical branches in one city, as Cars24 publishes them: street address, locality, pincode, coordinates, Google-maps link, opening hours, working days and weekly off, how many cars stand there, whether it is an elite hub, the branch's own page URL and the sales manager's name the site prints. Measured: city 2 (New Delhi) → 4 hubs in 9.6 KB; city 1 (Delhi NCR) → more, 23.9 KB. A city id with no hubs answers with an empty body upstream and is returned as NOT_FOUND rather than a crash.","required_params":["city_id"],"optional_params":[],"params":[{"name":"city_id","type":"integer","required":true,"description":"Cars24 city id — see the `cities` action.","on_invalid":"reject","example":2,"minimum":1,"aliases":["city","cityId"]}],"returns":"{results[{hub_id, hub_code, name, locality, address, pincode, latitude, longitude, map_url, open_from, open_to, working_days[], weekly_off[], cars_at_hub, is_elite_hub, sales_manager, url, image_url}], returned}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"city_id":2}},{"name":"similar","description":"The cars Cars24 itself recommends against one listing — its own similar-cars surface, returned as full `search`-grade rows. Useful for comparables and for pricing a car against its live alternatives. Measured: one id → 20 rows in 132 KB. 🔴 A dead id answers HTTP 200 with an empty `content` array upstream; that is reported as NOT_FOUND, never as an empty success.","required_params":["car_id"],"optional_params":[],"params":[{"name":"car_id","type":"string","required":true,"description":"Cars24's own listing id (it calls it `appointmentId`) — the trailing number of any cars24.com car URL, e.g. 13421894115 in /buy-used-hyundai-eon-2015-cars-new-delhi-13421894115/, and the `car_id` of every `search` row. An id that does not exist returns NOT_FOUND.","on_invalid":"reject","example":"13421894115","value_pattern":"\\d{6,14}","aliases":["appointment_id","appointmentId","listing_id","id"]}],"returns":"{car_id, results[], returned} — rows as in `search`.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"car_id":"13421894115"}}]},{"name":"carsensor","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"CarSensor used-car API — search Japan's largest used-car marketplace (Recruit's carsensor.net, 519 200 live cars measured 2026-10-02) by keyword, maker and model, any of the 47 prefectures or 9 regions or a single municipality, price, year, mileage, engine size, body style, fuel, drivetrain, gearbox, seats, doors, remaining shaken inspection, warranty type, kei / imported / welfare / camper / commercial class, and 70 equipment and condition codes from accident-free history and one-owner to adaptive cruise control and a sunroof. Full listing detail returns the complete spec sheet, every photo of that car, the Japanese condition fields (修復歴 accident-repair history, 車検 inspection expiry, 法定整備 statutory servicing, リサイクル料 recycling fee), the optional purchase plans with their own totals, and the selling dealer with its address and resolvable dealer page. Prices come back in plain yen, converted from the 万円 (ten-thousand yen) units the site prints and cross-checked against two other figures the page publishes for the same car; mileage is converted from 万km the same way. Dealer profiles and a dealer's whole stock list are their own action. No account, logged-out public data only.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/carsensor/v1","spec_available":true,"actions":[{"name":"search","description":"Search CarSensor's live used-car inventory. Needs at least one narrowing parameter — `query`, `prefecture`, `region`, `city`, `maker`, `model` or any filter — because without one the source would hand back the whole 519 000-car national list 30 rows at a time; the error says so rather than returning it. Every filter here was measured biting against TWO controls in the same run (a narrow keyword search and a whole prefecture), and the numbers are in each parameter's description. 🔴 Page size is fixed by the source at 30 and there is no override. The source does not error on a page past the end: it silently repeats the LAST page (measured on two different result sets), so `last_page` is computed from the source's own total and `page_clamped` tells you when that happened. 🔴 Prices come back as plain yen. The site itself prints 万円 (ten-thousand yen) units, e.g. `68.1万円`, so every `*_jpy` field is that figure times 10 000 and `*_display` carries the source's own string beside it. Mileage is the same: the card prints `1.7万km` and `mileage_km` returns 17000.","required_params":[],"optional_params":["query","prefecture","region","city","maker","model","price_min","price_max","year_from","year_to","mileage_min","mileage_max","engine_cc_from","engine_cc_to","body_type","fuel","drive","transmission","steering","vehicle_class","warranty","inspection_months_min","seats","doors","equipment","certified_only","new_arrivals","with_photos","total_price_shown","maker_dealer_only","quality_report","unregistered","online_consultation","with_360_view","carsensor_warranty","exclude_kei","exclude_van","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keywords, exactly as typed into the site's own search box. Japanese works best because the listings are Japanese: measured, `プリウス` matched 11 002 cars while the roman `prius` matched 32. Give this or any other narrowing filter — at least one is required, and they all combine.","on_invalid":"reject","example":"プリウス","aliases":["q","keywords"]},{"name":"prefecture","type":"enum","required":false,"description":"One of Japan's 47 prefectures, romanised exactly as the source's own sitemap spells it. Measured bite: Osaka alone held 29 908 cars. 🔴 A name the source does not know is rejected here on purpose: upstream it answers HTTP 200 with the FULL 519 000-car national list, so a typo would look like a working search over the wrong data. Cannot be combined with `region` — the source has one geography slot.","on_invalid":"reject","allowed_values":[{"value":"aichi","label":"Aichi"},{"value":"akita","label":"Akita"},{"value":"aomori","label":"Aomori"},{"value":"chiba","label":"Chiba"},{"value":"ehime","label":"Ehime"},{"value":"fukui","label":"Fukui"},{"value":"fukuoka","label":"Fukuoka"},{"value":"fukushima","label":"Fukushima"},{"value":"gifu","label":"Gifu"},{"value":"gunma","label":"Gunma"},{"value":"hiroshima","label":"Hiroshima"},{"value":"hokkaido","label":"Hokkaido"},{"value":"hyogo","label":"Hyogo"},{"value":"ibaraki","label":"Ibaraki"},{"value":"ishikawa","label":"Ishikawa"},{"value":"iwate","label":"Iwate"},{"value":"kagawa","label":"Kagawa"},{"value":"kagoshima","label":"Kagoshima"},{"value":"kanagawa","label":"Kanagawa"},{"value":"kouchi","label":"Kochi"},{"value":"kumamoto","label":"Kumamoto"},{"value":"kyoto","label":"Kyoto"},{"value":"mie","label":"Mie"},{"value":"miyagi","label":"Miyagi"},{"value":"miyazaki","label":"Miyazaki"},{"value":"nagano","label":"Nagano"},{"value":"nagasaki","label":"Nagasaki"},{"value":"nara","label":"Nara"},{"value":"niigata","label":"Niigata"},{"value":"okayama","label":"Okayama"},{"value":"okinawa","label":"Okinawa"},{"value":"ooita","label":"Oita"},{"value":"osaka","label":"Osaka"},{"value":"saga","label":"Saga"},{"value":"saitama","label":"Saitama"},{"value":"shiga","label":"Shiga"},{"value":"shimane","label":"Shimane"},{"value":"shizuoka","label":"Shizuoka"},{"value":"tochigi","label":"Tochigi"},{"value":"tokushima","label":"Tokushima"},{"value":"tokyo","label":"Tokyo"},{"value":"tottori","label":"Tottori"},{"value":"toyama","label":"Toyama"},{"value":"wakayama","label":"Wakayama"},{"value":"yamagata","label":"Yamagata"},{"value":"yamaguchi","label":"Yamaguchi"},{"value":"yamanashi","label":"Yamanashi"}],"example":"osaka","aliases":["pref"]},{"name":"region","type":"enum","required":false,"description":"A whole region instead of a single prefecture. The nine are a true partition of the country: measured on one keyword, their totals summed to exactly the unfiltered figure (11 002). Cannot be combined with `prefecture`.","on_invalid":"reject","allowed_values":[{"value":"chugoku","label":"Chugoku — Hiroshima, Okayama, Yamaguchi, Shimane, Tottori (872)"},{"value":"hokkaido","label":"Hokkaido (measured 402 of the 11 002-row control)"},{"value":"hokuriku","label":"Hokuriku / Koshinetsu — Niigata, Toyama, Ishikawa, Fukui, Nagano (671)"},{"value":"kansai","label":"Kansai — Osaka, Hyogo, Kyoto, Shiga, Nara, Wakayama (1 719)"},{"value":"kanto","label":"Kanto — Tokyo, Kanagawa, Saitama, Chiba, Ibaraki, Tochigi, Gunma, Yamanashi (2 821)"},{"value":"kyushu","label":"Kyushu and Okinawa (1 486)"},{"value":"shikoku","label":"Shikoku — Kagawa, Ehime, Tokushima, Kochi (395)"},{"value":"tohoku","label":"Tohoku — Aomori to Fukushima (866)"},{"value":"tokai","label":"Tokai — Aichi, Shizuoka, Gifu, Mie (1 770)"}],"example":"kansai","aliases":["area"]},{"name":"city","type":"integer","required":false,"description":"The source's own 4-5 digit municipality code (5335 = Ikeda City, Osaka). Narrower than a prefecture and it composes with one: measured, the same keyword went 11 002 → 6 with city 5335, and city 5335 under `prefecture=tokyo` honestly returned 0. An unknown code answers 404 upstream. City codes appear in the `breadcrumb` of every `listing` response, which is where to get them.","on_invalid":"reject","example":5335,"minimum":1,"aliases":["city_code"]},{"name":"maker","type":"string","required":false,"description":"Two-letter maker code — TO Toyota, NI Nissan, HO Honda, MA Mazda, SB Subaru, SZ Suzuki, MI Mitsubishi, DA Daihatsu, LE Lexus, ME Mercedes-Benz, BM BMW, AD Audi, VW Volkswagen, MN MINI, PO Porsche, VO Volvo. The `makers` action returns all 119 with their Japanese names and live stock counts. Measured bite: TO = 118 750 cars nationwide, 7 866 in Osaka.","on_invalid":"reject","example":"TO","value_pattern":"[A-Za-z]{2}","aliases":["maker_code","brand"]},{"name":"model","type":"array","required":false,"description":"One or more of the source's own model codes (`TO_S122` = Toyota Prius). Several models are a genuine OR: measured, Prius (9 196) plus Crown came back as 10 619. Call `makers` with a `maker` for that maker's model table with live counts. Up to 12 per call.","on_invalid":"reject","example":["TO_S122"],"aliases":["model_code","models"]},{"name":"price_min","type":"integer","required":false,"description":"Vehicle body price floor in whole yen. Measured bite: 11 002 → 4 607 and 29 908 → 14 298 at 2 000 000.","on_invalid":"reject","example":2000000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Vehicle body price ceiling in whole JAPANESE YEN (1 000 000 = 100万円 ≈ a mid-range used car). Measured bite: 11 002 → 2 832 and 29 908 → 8 125 at 1 000 000. Note the site itself prints every price in 万円 (ten-thousand yen) units; this parameter and every returned `*_jpy` field are plain yen.","on_invalid":"reject","example":1000000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"year_from","type":"integer","required":false,"description":"Earliest first-registration year (the source's 年式). Its own dropdown runs 1989-2027. Measured bite: 11 002 → 3 918 and 29 908 → 15 107 at 2020.","on_invalid":"reject","example":2020,"minimum":1950,"maximum":2030,"aliases":["min_year","year_min"]},{"name":"year_to","type":"integer","required":false,"description":"Latest first-registration year. Measured bite: 11 002 → 640 and 29 908 → 2 756 at 2010.","on_invalid":"reject","example":2010,"minimum":1950,"maximum":2030,"aliases":["max_year","year_max"]},{"name":"mileage_min","type":"integer","required":false,"description":"Odometer floor in kilometres. Measured bite: 11 002 → 2 318 and 29 908 → 3 516 at 100 000.","on_invalid":"reject","example":100000,"minimum":0,"aliases":["min_mileage","mileage_from"]},{"name":"mileage_max","type":"integer","required":false,"description":"Odometer ceiling in KILOMETRES (50 000, not 5 — the site's own dropdown is labelled 5万Km and sends 50000). Measured bite: 11 002 → 4 450 and 29 908 → 17 716.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["max_mileage","mileage_to"]},{"name":"engine_cc_from","type":"integer","required":false,"description":"Engine displacement floor in cc (the source's own steps are 550, 660, 800, then every 100 to 3000, then 3500-6000). Measured bite: 11 002 → 2 427 and 29 908 → 12 271 at 2000.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["min_engine_cc"]},{"name":"engine_cc_to","type":"integer","required":false,"description":"Engine displacement ceiling in cc. Measured bite: 11 002 → 1 (a hybrid Prius is 1800 cc, so one car matching is the honest answer) and 29 908 → 10 383 at 1000.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["max_engine_cc"]},{"name":"body_type","type":"enum","required":false,"description":"Body style, using the source's own codes, each with the live count measured 2026-10-02. Measured bite: SUV 11 002 → 630 and 29 908 → 6 175. 🔴 Two notes against us. A code the source does not know answers HTTP 404 upstream, so values are validated here. And the site's own search panel offers an eleventh option, コンパクトカー (compact car, `XX`) which its own backend rejects with a 404 on both the query and the path form — so it is deliberately NOT offered here. Most compact cars land under Hatchback.","on_invalid":"reject","allowed_values":[{"value":"D","label":"Hatchback (ハッチバック) — measured 244 422 live"},{"value":"X","label":"SUV / off-road (SUV・クロカン) — measured 111 656"},{"value":"M","label":"Minivan / MPV (ミニバン) — measured 68 570"},{"value":"S","label":"Sedan (セダン) — measured 25 339"},{"value":"T","label":"Truck (トラック) — measured 22 341"},{"value":"W","label":"Station wagon (ステーションワゴン) — measured 13 874"},{"value":"C","label":"Coupe (クーペ) — measured 12 337"},{"value":"O","label":"Convertible (オープンカー) — measured 9 016"},{"value":"N","label":"Other (その他) — measured 10 179"},{"value":"P","label":"Pickup truck (ピックアップトラック) — measured 1 466"}],"example":"X","aliases":["bodytype"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel / powertrain. Measured bite: hybrid 11 002 → 10 347 (a Prius-keyword control, so nearly all of them are hybrids — the honest result) and 29 908 → 8 118.","on_invalid":"reject","allowed_values":[{"value":"1","label":"Petrol (ガソリン)"},{"value":"2","label":"Diesel (ディーゼル)"},{"value":"3","label":"Hybrid (ハイブリッド)"},{"value":"4","label":"Electric (電気)"},{"value":"9","label":"Other (その他)"}],"example":"3","aliases":["fuel_type"]},{"name":"drive","type":"enum","required":false,"description":"Two- or four-wheel drive, using the source's own tokens. Measured bite: 4WD 11 002 → 952 and 29 908 → 4 837.","on_invalid":"reject","allowed_values":[{"value":"4WD0","label":"2WD"},{"value":"4WD1","label":"4WD"}],"example":"4WD1","aliases":["drivetrain"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. Measured bite: MT 11 002 → 91 and 29 908 → 1 917 — manuals are genuinely rare in the Japanese used market.","on_invalid":"reject","allowed_values":[{"value":"AT","label":"Automatic / CVT (AT/CVT)"},{"value":"MT","label":"Manual (MT)"}],"example":"MT","aliases":["gearbox"]},{"name":"steering","type":"enum","required":false,"description":"Which side the wheel is on. Japan drives on the left so RHD is the default; measured bite for LHD: 11 002 → 12 and 29 908 → 786.","on_invalid":"reject","allowed_values":[{"value":"R","label":"Right-hand drive (右ハンドル)"},{"value":"L","label":"Left-hand drive (左ハンドル)"}],"example":"L","aliases":["steering_side"]},{"name":"vehicle_class","type":"enum","required":false,"description":"The source's own vehicle-class shelf. Measured bite: kei 11 002 → 1 464 and 29 908 → 9 112; imported 11 002 → 10 and 29 908 → 5 162. One value only — the source ANDs multiple values, and no car is both kei and imported (measured 0 rows).","on_invalid":"reject","allowed_values":[{"value":"D","label":"Japanese-brand car (国産車)"},{"value":"Y","label":"Imported car (輸入車)"},{"value":"K","label":"Kei car — 660 cc class (軽自動車)"},{"value":"H","label":"Hybrid (ハイブリッド)"},{"value":"F","label":"Wheelchair-accessible / welfare vehicle (福祉車両)"},{"value":"S","label":"Commercial van (商用車・バン)"},{"value":"C","label":"Camper / motorhome (キャンピングカー)"}],"example":"K","aliases":["car_class"]},{"name":"warranty","type":"enum","required":false,"description":"Require a warranty, optionally of a particular kind. Measured bite for manufacturer-dealer warranty: 11 002 → 2 231 and 29 908 → 7 040.","on_invalid":"reject","allowed_values":[{"value":"1","label":"Any warranty (保証あり)"},{"value":"4","label":"CarSensor After Warranty eligible"},{"value":"2","label":"Manufacturer-dealer warranty (ディーラー保証)"},{"value":"3","label":"Dealer's own warranty (販売店保証)"}],"example":"2","aliases":["warranty_kind"]},{"name":"inspection_months_min","type":"enum","required":false,"description":"Minimum remaining Japanese roadworthiness certificate (車検 / shaken), which a buyer otherwise has to pay to renew. Measured bite at 2 years: 11 002 → 179 and 29 908 → 2 599.","on_invalid":"reject","allowed_values":[{"value":"6","label":"At least 6 months of shaken left"},{"value":"12","label":"At least 1 year left"},{"value":"24","label":"At least 2 years left"}],"example":"24","aliases":["shaken_min"]},{"name":"seats","type":"integer","required":false,"description":"Exact seating capacity, 2-10 (the source's own dropdown). Measured bite at 7: 11 002 → 199 and 29 908 → 3 412.","on_invalid":"reject","example":7,"minimum":2,"maximum":10,"aliases":["seat_count"]},{"name":"doors","type":"integer","required":false,"description":"Door count, 2-5. Measured bite at 5: 11 002 → 10 889 and 29 908 → 23 569.","on_invalid":"reject","example":5,"minimum":2,"maximum":5,"aliases":["door_count"]},{"name":"equipment","type":"array","required":false,"description":"Condition and equipment codes, ANDed. Measured on three: no-accident-history alone 10 254, plus one-owner 2 006, plus sunroof 168. 🔴 A code the source does not know is rejected here because upstream it is SWALLOWED with HTTP 200 and an unchanged total, i.e. it would look applied and not be. Up to 8 per call.","on_invalid":"reject","allowed_values":[{"value":"15W1","label":"1500 W household power outlet (1500W給電)"},{"value":"3SH1","label":"Three rows of seats (３列シート)"},{"value":"ABS1","label":"ABS"},{"value":"ACC1","label":"Adaptive cruise control (アダプティブクルーズコントロール)"},{"value":"AHB1","label":"Automatic high beam (オートマチックハイビーム)"},{"value":"AHR1","label":"Whiplash-reducing headrests (頸部衝撃緩和ヘッドレスト)"},{"value":"AIH1","label":"Alloy wheels (アルミホイール)"},{"value":"AIS1","label":"Air suspension (エアサスペンション)"},{"value":"ALH1","label":"Adaptive headlights (アダプティブヘッドライト)"},{"value":"APA1","label":"Fully resprayed (全塗装済)"},{"value":"APS1","label":"Pedal-misapplication guard (アクセル踏み間違い防止装置)"},{"value":"ARC1","label":"Air conditioning (エアコン・クーラー)"},{"value":"ARJ1","label":"Passenger airbag (助手席エアバッグ)"},{"value":"ARS1","label":"Side airbags (サイドエアバッグ)"},{"value":"ARU1","label":"Driver airbag (運転席エアバッグ)"},{"value":"BMF1","label":"Reversing camera (バックカメラ)"},{"value":"BSH1","label":"Bench front seat (ベンチシート)"},{"value":"BSM1","label":"Blind-spot monitor (ブラインドスポットモニター)"},{"value":"CLD1","label":"Cold-climate specification (寒冷地仕様車)"},{"value":"CRS1","label":"Cruise control (クルーズコントロール)"},{"value":"CRT1","label":"Curtain airbags (カーテンエアバッグ)"},{"value":"CUP1","label":"Coupon attached (クーポン付き)"},{"value":"DAA1","label":"Display audio head unit (ディスプレイオーディオ)"},{"value":"DDR1","label":"Dashcam (ドライブレコーダー)"},{"value":"DTD1","label":"Ex-display / test-drive car (展示・試乗車)"},{"value":"ECO1","label":"Eco-car tax reduction eligible (エコカー減税対象車)"},{"value":"ESC1","label":"Electronic stability control (横滑り防止装置)"},{"value":"ESH1","label":"Electric seats (電動シート)"},{"value":"ETC1","label":"ETC toll transponder (ETC)"},{"value":"FEF1","label":"Full aero body kit (フルエアロ)"},{"value":"FFL1","label":"Front fog lamps (フロントフォグランプ)"},{"value":"FRM1","label":"Front camera (フロントカメラ)"},{"value":"FSH1","label":"Fully reclining seats (フルフラットシート)"},{"value":"HDC1","label":"Hill-descent control (ヒルディセントコントロール)"},{"value":"HID1","label":"Xenon / discharge headlights (ディスチャージドヘッドランプ)"},{"value":"HKS1","label":"Leather seats (本革シート)"},{"value":"IDL1","label":"Idling stop (アイドリングストップ)"},{"value":"KRS1","label":"Keyless entry (キーレスエントリー)"},{"value":"LAS1","label":"Lane-keep assist (レーンキープアシスト)"},{"value":"LED1","label":"LED headlights (LEDヘッドライト)"},{"value":"LFT1","label":"Lifted suspension (リフトアップ)"},{"value":"MLT1","label":"360-degree camera (全周囲カメラ)"},{"value":"NSF1","label":"Non-smoker car (禁煙車)"},{"value":"OBS1","label":"Parking sensors (障害物センサー)"},{"value":"OTM1","label":"Ottoman rear seat (オットマン)"},{"value":"PCS1","label":"Autonomous emergency braking (衝突被害軽減ブレーキ)"},{"value":"POW1","label":"Power tailgate (電動開閉バックドア)"},{"value":"PRK1","label":"Parking assist (パーキングアシスト)"},{"value":"PWS1","label":"Power steering (パワステ)"},{"value":"PWW1","label":"Power windows (パワーウィンドウ)"},{"value":"RCT1","label":"Rear cross-traffic alert (リアトラフィックモニタ)"},{"value":"RCU1","label":"Ex-rental car (レンタカーアップ)"},{"value":"REP0","label":"No accident-repair history (修復歴なし)"},{"value":"RNU1","label":"Registered but unused (登録済未使用車)"},{"value":"ROD1","label":"Lowered suspension (ローダウン)"},{"value":"RRF1","label":"Roof rails (ルーフレール)"},{"value":"RSM1","label":"Rear-seat monitor (後席モニター)"},{"value":"SAP1","label":"Japanese \"Support Car\" safety package (サポカー)"},{"value":"SDK1","label":"Side camera (サイドカメラ)"},{"value":"SHA1","label":"Ventilated seats (シートエアコン)"},{"value":"SHH1","label":"Heated seats (シートヒーター)"},{"value":"SMK1","label":"Smart key (スマートキー)"},{"value":"SRF1","label":"Sunroof or glass roof (サンルーフ・ガラスルーフ)"},{"value":"STL1","label":"Immobiliser / anti-theft (盗難防止装置)"},{"value":"TTK1","label":"Service-record book present (定期点検記録簿)"},{"value":"TUB1","label":"Turbo or supercharged (過給器設定モデル)"},{"value":"WAR1","label":"Dual air conditioning (Ｗエアコン)"},{"value":"WOF1","label":"One owner from new (ワンオーナー)"},{"value":"WTR1","label":"Walk-through cabin (ウォークスルー)"}],"example":["REP0","WOF1"],"aliases":["features","options"]},{"name":"certified_only","type":"boolean","required":false,"description":"Only manufacturer-certified used cars (認定中古車) — the dealer-backed shelf with an inspection certificate and a factory warranty. Measured bite: 11 002 → 2 483 and 29 908 → 7 442. 🔴 There is no certified LANDING PAGE to scrape: `/usedcar/nintei/index.html` answers HTTP 200 and serves the full 519 200-car national list, so this filter is the only honest way to reach that shelf.","on_invalid":"reject","default":false,"example":true,"aliases":["certified"]},{"name":"new_arrivals","type":"boolean","required":false,"description":"Only cars the source flags as newly listed. Measured bite: 11 002 → 1 179 and 29 908 → 3 168.","on_invalid":"reject","default":false,"example":true,"aliases":["new_only"]},{"name":"with_photos","type":"boolean","required":false,"description":"Only listings with more than one photo. Measured bite: 11 002 → 10 868 and 29 908 → 29 622 — nearly everything has photos, so this mostly removes stubs.","on_invalid":"reject","default":false,"example":true,"aliases":["photos_only"]},{"name":"total_price_shown","type":"boolean","required":false,"description":"Only listings that publish a total payable (支払総額) and not just a body price. Measured bite: 11 002 → 10 974 and 29 908 → 29 337.","on_invalid":"reject","default":false,"example":true,"aliases":["with_total_price"]},{"name":"maker_dealer_only","type":"boolean","required":false,"description":"Only franchised manufacturer dealers, excluding independent lots. Measured bite: 11 002 → 2 363 and 29 908 → 7 621.","on_invalid":"reject","default":false,"example":true,"aliases":["franchised_only"]},{"name":"quality_report","type":"boolean","required":false,"description":"Only cars with a third-party vehicle condition report (車両品質評価書). Measured bite: 11 002 → 4 190 and 29 908 → 11 151.","on_invalid":"reject","default":false,"example":true,"aliases":["with_quality_report"]},{"name":"unregistered","type":"boolean","required":false,"description":"Only never-registered cars — Japan's 未登録車 / 登録済未使用車 class, effectively new. Measured bite: 11 002 → 14 and 29 908 → 218.","on_invalid":"reject","default":false,"example":true,"aliases":["unused"]},{"name":"online_consultation","type":"boolean","required":false,"description":"Only dealers offering a remote video consultation. Measured bite: 11 002 → 4 689 and 29 908 → 12 489.","on_invalid":"reject","default":false,"example":true,"aliases":["online_consult"]},{"name":"with_360_view","type":"boolean","required":false,"description":"Only listings with a 360-degree interior/exterior view. Measured bite: 11 002 → 4 120 and 29 908 → 12 447.","on_invalid":"reject","default":false,"example":true,"aliases":["view360"]},{"name":"carsensor_warranty","type":"boolean","required":false,"description":"Only cars eligible for CarSensor's own after-sales warranty product. Measured bite: 11 002 → 4 446 and 29 908 → 10 909.","on_invalid":"reject","default":false,"example":true,"aliases":["cs_warranty"]},{"name":"exclude_kei","type":"boolean","required":false,"description":"Drop kei cars (the 660 cc class). 🔴 Measured on TWO controls because one gives the wrong verdict: on a Prius keyword it changed nothing (11 002 → 11 002) since no Prius is a kei car, but on a prefecture control it bit hard (29 908 → 20 796). It works.","on_invalid":"reject","default":false,"example":true,"aliases":["no_kei"]},{"name":"exclude_van","type":"boolean","required":false,"description":"Drop commercial vans and panel vans.","on_invalid":"reject","default":false,"example":true,"aliases":["no_van"]},{"name":"sort","type":"enum","required":false,"description":"Row order. Omit for the source's own default, which is REPRODUCIBLE — two consecutive sort-less calls returned the same first five ids in the same order. All five values tried reordered the result. 🔴 Note the site sorts on total payable and on body price SEPARATELY, and they are different numbers (fees sit between them). A value the source does not know answers HTTP 404 upstream, so it is validated here.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest listing first (新着順 新)"},{"value":"oldest","label":"Oldest listing first (新着順 古)"},{"value":"total_price_asc","label":"Cheapest total payable first (支払総額 安)"},{"value":"total_price_desc","label":"Dearest total payable first (支払総額 高)"},{"value":"body_price_asc","label":"Cheapest vehicle price first (本体価格 安)"},{"value":"body_price_desc","label":"Dearest vehicle price first (本体価格 高)"},{"value":"year_desc","label":"Newest model year first (年式 新)"},{"value":"year_asc","label":"Oldest model year first (年式 古)"},{"value":"mileage_desc","label":"Highest mileage first (走行距離 多)"},{"value":"mileage_asc","label":"Lowest mileage first (走行距離 少)"},{"value":"engine_cc_desc","label":"Largest engine first (排気量 多)"},{"value":"engine_cc_asc","label":"Smallest engine first (排気量 少)"},{"value":"inspection_first","label":"Cars with shaken left first (車検 付)"},{"value":"no_inspection_first","label":"Cars without shaken first (車検 無)"},{"value":"no_repair_history_first","label":"Accident-free cars first (修復歴 無)"},{"value":"repair_history_first","label":"Repaired cars first (修復歴 有)"}],"example":"total_price_asc","aliases":["order_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page size is fixed by the source at 30 (measured on pages 1, 2, 100 and 1000; the final page of a set returns the remainder). 🔴 The source does NOT error past the end — pages 17308 and 20000 of a 17 307-page set both returned page 17307's rows, byte for byte. So `last_page` is computed from the source's own total, `page_clamped` tells you when the source silently repeated the last page, and `has_more` is false on the last page so a paging loop never walks into it.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":17500}],"returns":"total_results (the source's own live counter), page, page_size (30), returned, last_page, page_clamped (true when the page asked for is past the end and the source repeated the last page), has_more, dropped_non_listing_tiles, query, geography, filters (the query string actually sent to the source), sort, and listings[] with listing_id (the CarSensor BKKN id), url, photo_key (the SECOND id the source uses in image paths — a different string from listing_id), maker, title (model, grade and the dealer's own highlight line), new_arrival, tags[] (the source's own badges: dealer warranty, quality report, purchase plan, online consultation, 360-degree images), price_total_jpy and price_total_display (支払総額 — total payable including tax, registration and fees), price_total_is_rounded (true: the source publishes this one only to 1 000-yen resolution), price_body_jpy and price_body_display (本体価格 — the vehicle alone), price_currency (JPY), price_kind (total_and_body | body_only | total_only | on_application | not_priced — `on_application` is the source's own 応談 answer, not a parse failure), year, mileage_km (converted from the source's 万km, so 1.7万km is returned as 17000) and mileage_display (the source's own string, so the scale is checkable), inspection_until (remaining shaken), repair_history, warranty, maintenance, location (prefecture and city), card_specs[] (every label/value pair the card prints, verbatim), images[], image, image_count, and dealer{shop_code, name, address, image}.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"prius","max_results":20}},{"name":"listing","description":"Full detail of one car by id or URL: the complete spec sheet as the source's own tables print it (body style, colour, gearbox, displacement, engine type, seats, doors, drivetrain, steering side, chassis-number tail, plus the new-car dimensions, wheelbase, kerb weight and fuel grade), Japan's own condition fields (修復歴 accident-repair history, 車検 inspection expiry, 法定整備 statutory servicing, リサイクル料 recycling fee, one-owner, service-record book, non-smoker), the full photo set for THAT car, the dealer's own pitch line, the optional purchase plans each with their own total payable and fees, and the selling dealer with its resolvable dealer page. 🔴 Three independent price witnesses are returned, not one: the printed 万円 figure, the exact yen the page carries as an HTML attribute, and the yen in the page's own structured data — plus `price_body_witnesses_agree`, so a silent scale error is visible instead of invisible. A withdrawn or non-existent listing returns NOT_FOUND: the source answers 404 on a page that says 掲載終了 (\"listing ended\"), which is an answer about the car, so it is never retried.","required_params":[],"optional_params":["listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"The CarSensor listing id (`BKKN`) — two capital letters and ten digits, returned by `search` on every row. Give this or `url`. 🔴 A listing also carries a second, DIFFERENT id used in its image paths (`UT0054285157`); that one is returned as `photo_key` and is not accepted here.","on_invalid":"reject","example":"AU7364522703","value_pattern":"[A-Za-z]{2}\\d{10}","aliases":["id","bkkn"]},{"name":"url","type":"string","required":false,"description":"Full listing URL exactly as `search` returns it; the id is read from its `/usedcar/detail/<id>/` segment.","on_invalid":"reject","example":"https://www.carsensor.net/usedcar/detail/AU7364522703/index.html","aliases":["listing_url"]}],"returns":"listing_id, photo_key, url, title, maker, model, grade_code, colour, dealer_pitch, price_currency, price_body_jpy, price_body_display, price_body_jpy_attr, price_body_jpy_ldjson, price_body_witnesses_agree, price_total_jpy, price_total_display, price_total_is_rounded, price_fees_jpy, price_fees_display, price_total_matches_body_plus_fees, purchase_plans[] (plan_slot, plan_name, and that plan's own total / fees / body price in yen and as printed), year, year_display (the source prints the Japanese era too, e.g. 2011(H23)), mileage_km, mileage_display, repair_history, inspection_until, statutory_maintenance, warranty, recycling_fee, one_owner, service_book, non_smoker, body_type, drive, colour_detail, steering, transmission, engine_cc, engine_cc_display, engine_kind, seats, doors, chassis_number_tail, specs[] (every label/value pair of every spec table, verbatim, so nothing the source adds is lost), equipment[], images[] (scoped to this car's own photo key — the page also carries other cars' photos in its recommendation rail and those are excluded), image, image_count, dealer{name, shop_id, prefecture, page_url, stocklist_url} and breadcrumb[] (the source's own maker → model → prefecture → city trail, which is where city codes come from).","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.carsensor.net/usedcar/detail/AU7364522703/index.html"}},{"name":"dealer","description":"One used-car dealer's profile page: trading name, registered company name, postal address, enquiry line, opening hours and closing days, and the review scores the source publishes, plus every label/value row of its own profile tables. With `include_stock` it also returns that dealer's whole advertised stock in the same row shape `search` uses. 🔴 `shop_id` and `prefecture` are required TOGETHER: the source keys the page on the pair and a real dealer id requested under the wrong prefecture answers 404 (measured). `listing` returns both for every car, and `dealer.page_url` can be passed as `url` instead. An unknown id answers 404 → NOT_FOUND.","required_params":[],"optional_params":["shop_id","prefecture","url","include_stock"],"params":[{"name":"shop_id","type":"string","required":false,"description":"The dealer's numeric CarSensor id, returned by `listing` as `dealer.shop_id`. 🔴 Must be given together with `prefecture`: the source keys the dealer page on the pair and a real id under the wrong prefecture answers 404 (measured on an Osaka dealer requested under tokyo).","on_invalid":"reject","example":"100644033","value_pattern":"\\d{6,12}","aliases":["dealer_id","id"]},{"name":"prefecture","type":"enum","required":false,"description":"The prefecture the dealer sits in, as `listing` returns it in `dealer.prefecture`. Required together with `shop_id`.","on_invalid":"reject","allowed_values":[{"value":"aichi","label":"Aichi"},{"value":"akita","label":"Akita"},{"value":"aomori","label":"Aomori"},{"value":"chiba","label":"Chiba"},{"value":"ehime","label":"Ehime"},{"value":"fukui","label":"Fukui"},{"value":"fukuoka","label":"Fukuoka"},{"value":"fukushima","label":"Fukushima"},{"value":"gifu","label":"Gifu"},{"value":"gunma","label":"Gunma"},{"value":"hiroshima","label":"Hiroshima"},{"value":"hokkaido","label":"Hokkaido"},{"value":"hyogo","label":"Hyogo"},{"value":"ibaraki","label":"Ibaraki"},{"value":"ishikawa","label":"Ishikawa"},{"value":"iwate","label":"Iwate"},{"value":"kagawa","label":"Kagawa"},{"value":"kagoshima","label":"Kagoshima"},{"value":"kanagawa","label":"Kanagawa"},{"value":"kouchi","label":"Kochi"},{"value":"kumamoto","label":"Kumamoto"},{"value":"kyoto","label":"Kyoto"},{"value":"mie","label":"Mie"},{"value":"miyagi","label":"Miyagi"},{"value":"miyazaki","label":"Miyazaki"},{"value":"nagano","label":"Nagano"},{"value":"nagasaki","label":"Nagasaki"},{"value":"nara","label":"Nara"},{"value":"niigata","label":"Niigata"},{"value":"okayama","label":"Okayama"},{"value":"okinawa","label":"Okinawa"},{"value":"ooita","label":"Oita"},{"value":"osaka","label":"Osaka"},{"value":"saga","label":"Saga"},{"value":"saitama","label":"Saitama"},{"value":"shiga","label":"Shiga"},{"value":"shimane","label":"Shimane"},{"value":"shizuoka","label":"Shizuoka"},{"value":"tochigi","label":"Tochigi"},{"value":"tokushima","label":"Tokushima"},{"value":"tokyo","label":"Tokyo"},{"value":"tottori","label":"Tottori"},{"value":"toyama","label":"Toyama"},{"value":"wakayama","label":"Wakayama"},{"value":"yamagata","label":"Yamagata"},{"value":"yamaguchi","label":"Yamaguchi"},{"value":"yamanashi","label":"Yamanashi"}],"example":"osaka","aliases":["pref"]},{"name":"url","type":"string","required":false,"description":"Full dealer page URL as `listing` returns it in `dealer.page_url`. Use instead of `shop_id` + `prefecture`.","on_invalid":"reject","example":"https://www.carsensor.net/shop/osaka/100644033/","aliases":["dealer_url","shop_url"]},{"name":"include_stock","type":"boolean","required":false,"description":"Also fetch the dealer's own stock list — every car that dealer currently advertises, in the same row shape `search` returns. Costs one extra upstream request (measured 208 KB for a seven-car dealer) and returns the first 30 cars plus the dealer's own total.","on_invalid":"reject","default":false,"example":true,"aliases":["with_stock","stocklist"]}],"returns":"shop_id, prefecture, url, stocklist_url, name, address, postal_code, legal_name, address, enquiry_phone (🔴 CarSensor's own free-dial tracking number that forwards to the dealer, NOT the dealer's direct line — it is the only number the page publishes, and enquiry_phone_is_tracking_line says so), opening_hours, closed_on, nearest_station, tagline, badges[], review_score_avg and review_count_on_page (the source publishes no aggregate score on this page, so the average is computed from the review scores it does print and the sample size is published beside it), profile[] (every label/value row of the dealer's own tables) and, with include_stock, stock_total plus stock[] with listing_id (the CarSensor BKKN id), url, photo_key (the SECOND id the source uses in image paths — a different string from listing_id), maker, title (model, grade and the dealer's own highlight line), new_arrival, tags[] (the source's own badges: dealer warranty, quality report, purchase plan, online consultation, 360-degree images), price_total_jpy and price_total_display (支払総額 — total payable including tax, registration and fees), price_total_is_rounded (true: the source publishes this one only to 1 000-yen resolution), price_body_jpy and price_body_display (本体価格 — the vehicle alone), price_currency (JPY), price_kind (total_and_body | body_only | total_only | on_application | not_priced — `on_application` is the source's own 応談 answer, not a parse failure), year, mileage_km (converted from the source's 万km, so 1.7万km is returned as 17000) and mileage_display (the source's own string, so the scale is checkable), inspection_until (remaining shaken), repair_history, warranty, maintenance, location (prefecture and city), card_specs[] (every label/value pair the card prints, verbatim), images[], image, image_count, and dealer{shop_code, name, address, image}.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.carsensor.net/shop/osaka/100644033/"}},{"name":"makers","description":"The maker resolver `search` needs, because its `maker` parameter takes a code. Returns every one of the 119 two-letter maker codes CarSensor publishes, with the maker's Japanese name, the country group the source files it under (Japan, Germany, USA, UK, Sweden, France, Italy, Spain, Russia, China, Korea, Thailand, Malaysia, South Africa, other) and the number of cars it has listed right now — so a brand can be sized before it is searched. Measured 2026-10-02: Toyota 118 750, Honda 74 460, Nissan 55 726, Mazda 20 136, Mercedes-Benz 9 598, Lexus 8 599. One request, 77 880 B, cached six hours. Use the `models` action for one maker's model table.","required_params":[],"optional_params":[],"params":[],"returns":"level (always \"makers\"), count, and makers[] with maker_code, name, live_listings, country_group and search_url.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"models","description":"One maker's model table — the resolver for `search`'s `model` parameter. Each row carries the `model_code` that parameter takes, the model's Japanese name and the live count the source prints beside it. 🔴 `live_listings` comes back null, never 0, for the models the source lists without a count: it publishes the maker's whole model history including cars nobody is selling today (measured 86 Mazda models, of which 55 carry a count; 235 rows for Toyota). Much heavier than `makers` — measured 1 655 747 B for Toyota and 692 682 B for Mazda against 77 880 B for the entire maker table — which is why it is a separate action rather than a parameter. Cached six hours.","required_params":["maker"],"optional_params":[],"params":[{"name":"maker","type":"string","required":true,"description":"The two-letter maker code whose models you want, from the `makers` action (119 codes). TO Toyota, NI Nissan, HO Honda, MA Mazda, SB Subaru, SZ Suzuki, MI Mitsubishi, DA Daihatsu, LE Lexus, ME Mercedes-Benz, BM BMW, AD Audi, VW Volkswagen, MN MINI, PO Porsche.","on_invalid":"reject","example":"TO","value_pattern":"[A-Za-z]{2}","aliases":["maker_code","brand"]}],"returns":"level (always \"models\"), maker, count, and models[] with model_code, name, live_listings (null where the source printed none) and search_url.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"maker":"TO"}}]},{"name":"carsome","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Carsome — certified used cars in Malaysia, Indonesia and Thailand","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/carsome/v1","spec_available":true,"actions":[{"name":"search","description":"Search Carsome's certified used-car stock in one country (my, id, th) by keyword, make, model, body type, location, gearbox, colour, price, monthly instalment, mileage and year, with ten sort orders. Returns the source's own total, facet counts and full rows with VIN, plate, every price (cash, credit, campaign, ex-VAT, monthly) and the showroom.","required_params":["country"],"optional_params":["query","make_id","model_id","body_type","location","transmission","color","price_min","price_max","monthly_min","monthly_max","mileage_min","mileage_max","year_min","year_max","sort","page","page_size"],"params":[{"name":"country","type":"enum","required":true,"description":"Which Carsome market: `my` = Malaysia (carsome.my, MYR), `id` = Indonesia (carsome.id, IDR), `th` = Thailand (carsome.co.th, THB).","on_invalid":"reject","allowed_values":[{"value":"my","label":"Malaysia"},{"value":"id","label":"Indonesia"},{"value":"th","label":"Thailand"}],"example":"my"},{"name":"query","type":"string","required":false,"description":"Free-text keyword matched by Carsome's own search (make, model, variant or a car number). Measured: `myvi` cuts Malaysia from 3,647 to 495 cars.","on_invalid":"reject","example":"myvi","aliases":["q","keyword"]},{"name":"make_id","type":"array","required":false,"description":"One or more make ids from the `makes` action (Perodua = 157 in Malaysia). Ids are per country.","on_invalid":"reject","example":[157],"aliases":["make","brand_id"]},{"name":"model_id","type":"array","required":false,"description":"One or more model ids from the `makes` action (Myvi = 1656 in Malaysia).","on_invalid":"reject","example":[1656],"aliases":["model"]},{"name":"body_type","type":"enum","required":false,"description":"Body type. Several may be passed comma-separated.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan"},{"value":"hatchback","label":"Hatchback"},{"value":"mpv","label":"MPV"},{"value":"suv","label":"SUV"},{"value":"truck","label":"Truck"},{"value":"coupe","label":"Coupe"},{"value":"van","label":"Van"},{"value":"wagon","label":"Wagon"},{"value":"convertible","label":"Convertible"}],"example":"suv"},{"name":"location","type":"string","required":false,"description":"Location id(s) from the `filters` action: states in Malaysia (`selangor`), cities in Indonesia (`jakarta-selatan`), districts in Thailand (`bang-khae`). An unknown id returns 0 cars.","on_invalid":"reject","example":"selangor","value_pattern":"[a-z0-9][a-z0-9,\\- ]*","aliases":["state","city"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual"},{"value":"automatic","label":"Automatic"}],"example":"automatic"},{"name":"color","type":"enum","required":false,"description":"Exterior colour (pink and light_blue exist in Thailand only).","on_invalid":"reject","allowed_values":[{"value":"black","label":"Black"},{"value":"white","label":"White"},{"value":"gray","label":"Gray"},{"value":"silver","label":"Silver"},{"value":"red","label":"Red"},{"value":"blue","label":"Blue"},{"value":"brown","label":"Brown"},{"value":"gold","label":"Gold"},{"value":"green","label":"Green"},{"value":"orange","label":"Orange"},{"value":"beige","label":"Beige"},{"value":"purple","label":"Purple"},{"value":"bronze","label":"Bronze"},{"value":"other","label":"Other"},{"value":"pink","label":"Pink"},{"value":"light_blue","label":"Light Blue"}],"example":"white"},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in local currency. Carsome filters on its own headline number `price_basis`: the credit price in Indonesia, the campaign price in Malaysia, the VAT-inclusive price in Thailand.","on_invalid":"reject","example":30000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price (same basis as `price_min`).","on_invalid":"reject","example":50000,"minimum":0},{"name":"monthly_min","type":"number","required":false,"description":"Lowest monthly instalment, local currency.","on_invalid":"reject","example":300,"minimum":0},{"name":"monthly_max","type":"number","required":false,"description":"Highest monthly instalment, local currency.","on_invalid":"reject","example":500,"minimum":0},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading, km.","on_invalid":"reject","example":0,"minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading, km.","on_invalid":"reject","example":50000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Oldest model year.","on_invalid":"reject","example":2022,"minimum":1990},{"name":"year_max","type":"integer","required":false,"description":"Newest model year.","on_invalid":"reject","example":2024,"minimum":1990},{"name":"sort","type":"enum","required":false,"description":"Order. `newest` is by listing date; price sorts use `price_basis`.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"recommended"},{"value":"newest","label":"newest"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"mileage_asc","label":"mileage asc"},{"value":"mileage_desc","label":"mileage desc"},{"value":"year_desc","label":"year desc"},{"value":"year_asc","label":"year asc"},{"value":"monthly_asc","label":"monthly asc"},{"value":"monthly_desc","label":"monthly desc"}],"default":"recommended","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number. A page past `last_page` returns 0 rows (the source does not repeat its last page).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-50.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"`{rows[], summary{total_results, page, page_size, last_page, has_more, filters_applied, facets}}`. Each row: car_no (the id `detail` takes), url, title, make/model/variant with ids, year, mileage_km, engine_litres, transmission, fuel, color (local label) + color_en, seats, vin, license_plate, status, availability, listed_on, listing_programme (CARSOME Certified / Value / Value Plus), store {name, city, state, lat, lon}, seller {type, dealer_id, account_name}, campaigns, labels, highlights, photos_count, and the price set: currency, price_cash, price_credit, price_before_campaign, campaign_discount, credit_discount, price_basis, monthly_installment, vat_amount, price_cash_excl_vat, monthly_installment_excl_vat, loan {down_payment_rate, tenure_years, interest_rate, provider}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"my","make_id":[157],"body_type":"suv","sort":"price_asc","page_size":20}},{"name":"detail","description":"The full record of one car by its `car_no` (or its listing URL): everything a search row has plus body type, registration date and type, road-tax / insurance / warranty expiry, booking fee, exterior and interior photo galleries, the showroom's address, phone and hours, and Carsome's inspection report with every checkpoint and its findings.","required_params":["car_no"],"optional_params":["country","url"],"params":[{"name":"car_no","type":"string","required":true,"description":"Carsome car number from a search row (`car_no`), e.g. C7KZ700. Case-insensitive. Requires `country`, unless `url` is given instead.","on_invalid":"reject","example":"C7KZ700","aliases":["id","car_id_no"]},{"name":"country","type":"enum","required":false,"description":"Market of the car: my, id or th. Required with `car_no`.","on_invalid":"reject","allowed_values":[{"value":"my","label":"Malaysia"},{"value":"id","label":"Indonesia"},{"value":"th","label":"Thailand"}],"example":"my"},{"name":"url","type":"string","required":false,"description":"Alternative to car_no + country: the listing URL, e.g. https://www.carsome.my/buy-car/perodua/aruz/2022-perodua-aruz-av-1.5/c7kz700.","on_invalid":"reject","example":"https://www.carsome.id/beli-mobil-bekas/honda/br-v/2022-honda-br-v-prestige-hs-1.5/c7he000","aliases":["listing_url","link"]}],"returns":"One car object (all search-row fields) plus body_type, body_type_label, seat_label, registration_date, registration_type, road_tax_expiry, insurance_expiry, warranty_expiry, principal_warranty_flag, service_book_flag, spare_key_flag, sale_status, booking_fee, description, photos_exterior[], photos_interior[], spin_360_url, store {address, phone, business_hours, map_url} and inspection {summary{points, passed, issues, na, not_reported}, sections[]{name, groups[]{name, points[]{name, key, status, findings[], remark, recondition}}}}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"car_no":"C7KZ700"}},{"name":"makes","description":"Every make Carsome has in stock in one country right now, with its models and the numeric ids that `search` takes.","required_params":["country"],"optional_params":[],"params":[{"name":"country","type":"enum","required":true,"description":"Which Carsome market: `my` = Malaysia (carsome.my, MYR), `id` = Indonesia (carsome.id, IDR), `th` = Thailand (carsome.co.th, THB).","on_invalid":"reject","allowed_values":[{"value":"my","label":"Malaysia"},{"value":"id","label":"Indonesia"},{"value":"th","label":"Thailand"}],"example":"my"}],"returns":"`rows[]` of {make_id, name, logo, popular, models[]{model_id, name}}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"th"}},{"name":"filters","description":"The country's live filter vocabulary: location ids (states, cities or districts), body types, colours, gearboxes, sort orders and the current price, monthly, year and mileage bounds of the stock, plus running campaigns.","required_params":["country"],"optional_params":[],"params":[{"name":"country","type":"enum","required":true,"description":"Which Carsome market: `my` = Malaysia (carsome.my, MYR), `id` = Indonesia (carsome.id, IDR), `th` = Thailand (carsome.co.th, THB).","on_invalid":"reject","allowed_values":[{"value":"my","label":"Malaysia"},{"value":"id","label":"Indonesia"},{"value":"th","label":"Thailand"}],"example":"my"}],"returns":"`{locations[]{location, label}, body_types[], colors[], transmissions[], sorts[], price_bounds, monthly_bounds, year_bounds, mileage_bounds, campaigns[]}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"my"}}]},{"name":"carvak","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Carvak — Turkey used cars with expertise report, damage records and price","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/carvak/v1","spec_available":true,"actions":[{"name":"search","description":"Search the used cars Carvak (formerly Araba Sepeti / garajsepeti) sells from its own stock in Turkey (İstanbul and Adana branches) by make, model, free text, city, fuel, gearbox, body type, colour, driven wheels, availability, price, model year and mileage, in Carvak's seven sort orders. Returns the source's own total, 30 cars per page with the price the card prints (and the pre-discount price on discounted cars), mileage, city, reservation status and photo. All parameters are optional: no parameter = the whole stock (119 cars on 2026-10-07).","required_params":[],"optional_params":["make","model","query","city","fuel","transmission","body_type","color","drive","status","price_min","price_max","year_min","year_max","mileage_min","mileage_max","sort","page"],"params":[{"name":"make","type":"string","required":false,"description":"Make slug as Carvak writes it (lower case): hyundai, toyota, bmw, skoda, opel, renault, mercedes_benz, togg… Comma-separate several. Action `makes` lists the makes in stock with their model slugs. Measured: hyundai = 6 of 119 cars. An unknown slug returns an empty result with a warning.","on_invalid":"reject","example":"hyundai","aliases":["brand","marka","maker"]},{"name":"model","type":"string","required":false,"description":"Model slug under `make` (e.g. tucson, x1, 1_serisi, c-hr); comma-separate several. Needs `make`. Measured: hyundai/tucson = 3 cars.","on_invalid":"reject","example":"tucson","aliases":["series"]},{"name":"query","type":"string","required":false,"description":"Free text matched by Carvak's own search (make, model or trim words). Measured: `bmw` = 11 cars.","on_invalid":"reject","example":"bmw","aliases":["q","keyword","arama"]},{"name":"city","type":"enum","required":false,"description":"City of the Carvak branch holding the car. Measured: istanbul 113, adana 6 of 119.","on_invalid":"reject","allowed_values":[{"value":"istanbul","label":"İstanbul — Carvak Vialand AVM"},{"value":"adana","label":"Adana — Carvak Adana"}],"example":"istanbul","aliases":["region"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel type (comma-separate several). Measured: diesel 28 of 119.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Benzinli"},{"value":"diesel","label":"Dizel"},{"value":"hybrid","label":"Hibrit"},{"value":"electric","label":"Elektrikli"}],"example":"diesel","aliases":["fuel_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. Measured: manual 8 of 119.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Otomatik"},{"value":"manual","label":"Manuel"}],"example":"automatic","aliases":["gearbox"]},{"name":"body_type","type":"enum","required":false,"description":"Body type (comma-separate several). Measured: suv 52 of 119.","on_invalid":"reject","allowed_values":[{"value":"suv","label":"Suv"},{"value":"hatchback","label":"Hatchback"},{"value":"sedan","label":"Sedan"},{"value":"crossover","label":"Crossover"},{"value":"panel_van","label":"Camlıvan"},{"value":"mpv","label":"MPV"},{"value":"minivan","label":"Minivan"}],"example":"suv","aliases":["body"]},{"name":"color","type":"enum","required":false,"description":"Exterior colour (comma-separate several). Measured: white 25 of 119.","on_invalid":"reject","allowed_values":[{"value":"white","label":"Beyaz"},{"value":"grey","label":"Gri"},{"value":"blue","label":"Mavi"},{"value":"silver","label":"Gümüş"},{"value":"smoke_grey","label":"Füme"},{"value":"black","label":"Siyah"},{"value":"red","label":"Kırmızı"},{"value":"green","label":"Yeşil"},{"value":"navy","label":"Lacivert"},{"value":"orange","label":"Turuncu"},{"value":"beige","label":"Bej"},{"value":"turquoise","label":"Turkuaz"}],"example":"white","aliases":["colour"]},{"name":"drive","type":"enum","required":false,"description":"Driven wheels. Measured: front 99 of 119.","on_invalid":"reject","allowed_values":[{"value":"front","label":"Ön"},{"value":"rear","label":"Arka"},{"value":"4x4","label":"4x4"},{"value":"4x2","label":"4x2"}],"example":"4x4","aliases":["traction"]},{"name":"status","type":"enum","required":false,"description":"Only cars on sale (`available`, 111 of 119) or cars another buyer has reserved (`reserved`, 8 of 119).","on_invalid":"reject","allowed_values":[{"value":"available","label":"Mevcut"},{"value":"reserved","label":"Rezerve"}],"example":"available"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price, TRY. Carvak applies it to the pre-discount price: a discounted car (on_sale) whose pre-discount price is inside the range is returned even if its sale price is below it.","on_invalid":"reject","example":1000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price, TRY, applied by Carvak to the pre-discount price (see price_min).","on_invalid":"reject","example":1500000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Oldest model year.","on_invalid":"reject","example":2022,"minimum":1950,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Newest model year.","on_invalid":"reject","example":2024,"minimum":1950,"maximum":2100},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading, km.","on_invalid":"reject","example":0,"minimum":0,"aliases":["km_min"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading, km.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["km_max"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (Carvak's own seven).","on_invalid":"reject","allowed_values":[{"value":"newest_listing","label":"En son eklenenler — site default, newest listing first"},{"value":"price_asc","label":"Cheapest first (by the pre-discount price)"},{"value":"price_desc","label":"Most expensive first (by the pre-discount price)"},{"value":"year_desc","label":"Newest model year first"},{"value":"year_asc","label":"Oldest model year first"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"}],"default":"newest_listing","example":"price_asc","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Page number; 30 cars per page. `summary.last_page` and `summary.has_more` come from the source's own total. A page past the last returns no rows (the source never repeats a page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"`{rows[], summary{total_results, page, rows_per_page, last_page, has_more, past_last_page, reserved_on_page, filters_applied}}`. Each row: id (the value `detail` takes as `id`), url, title, make, model, trim, year, price_try (the price the card prints: the discounted price when the car is on sale), price_before_discount_try + discount_try + on_sale, price_as_printed_try + price_mismatch (the card's own printed string as a second witness), mileage_km, transmission, color, city (+ city_as_published), status (available/reserved), reserved, badges[], seller {name: Carvak, type}, photo_url.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"toyota","sort":"price_asc"}},{"name":"detail","description":"One Carvak car by its `id` (from a search row) or URL: price (with the pre-discount price and the schema.org price as second witness), mileage, fuel, gearbox, body, driven wheels, power, engine size, generation, doors, colours and equipment (rims, seats, sunroof, mirrors), the expertise report (25 body panels: original, painted, locally painted or replaced), the insurance damage records with date, type and repair amount, cosmetic-detail photos, all photos, Carvak's own description, the branch with address and coordinates, and similar cars.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Carvak stock id from a search row (`id`), e.g. 541164. Either `id` or `url` is required.","on_invalid":"reject","example":"541164","aliases":["stock_id","car_id","listing_id"]},{"name":"url","type":"string","required":false,"description":"Alternative to `id`: a carvak.com vehicle URL (it carries ?id=<stock id>).","on_invalid":"reject","example":"https://carvak.com/tr/ikinci-el/hyundai-tucson-16_t_gdi_hibrit_elite_plus-suv-2024?id=541164","aliases":["listing_url","link"]}],"returns":"One car: id, url, title, make, model, trim, year, price_try, price_before_discount_try, discount_try, on_sale, price_as_printed_try, price_mismatch, ld_price_try, ld_price_mismatch, ld_availability, mileage_km, fuel, transmission, body_type, drive, power_hp, engine_litres, generation, doors, color, equipment{interior_color, rim_type, window_type, mirror_type, seat_material, sunroof, headlight_type}, status, status_as_published, reserved, city, seller{name, type, branch, branch_id, address, latitude, longitude}, expertise{body_panels[]{part_code, part, condition, condition_tr, condition_as_published}, summary{panels_checked, original, painted, locally_painted, replaced, unknown}, damage_records[]{date, type, repair_amount_try, …}, damage_record_count, cosmetic_detail_photos[]{url, side, kind}}, description_title, description, photo_count, photos[], similar_ids[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://carvak.com/tr/ikinci-el/hyundai-tucson-16_t_gdi_hibrit_elite_plus-suv-2024?id=541164"}},{"name":"makes","description":"The makes Carvak has in stock right now with each make's model slugs (the values `search` takes as `make` and `model`), the cities and branches, the model years, and the fuel, gearbox, body, colour, drive, status and sort vocabularies.","required_params":[],"optional_params":[],"params":[],"returns":"`{makes[]{slug, name, models[]{slug, name}}, total_cars, cities[]{slug, name, branches[]}, years[], fuels[], transmissions[], body_types[], colors[], drives[], statuses[], sorts[]}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"carwale","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"CarWale Indian used vehicles","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/carwale/v1","spec_available":true,"actions":[{"name":"search","description":"Search public Indian used-car inventory. Returns summary cards; resolve id in detail for full owner comments, seller, gallery, equipment and status.","required_params":[],"optional_params":["city_id","fuel","transmission","seller_type","body_type","car","budget","page","max_results"],"params":[{"name":"city_id","type":"integer","required":false,"description":"CarWale city id; omit for all India. Mumbai=1, Bangalore=2.","on_invalid":"reject","example":1,"minimum":1},{"name":"fuel","type":"enum","required":false,"description":"Fuel type; measured petrol and diesel.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol"},{"value":"diesel","label":"Diesel"}]},{"name":"transmission","type":"enum","required":false,"description":"Automatic or manual drivetrain.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"}]},{"name":"seller_type","type":"enum","required":false,"description":"Dealer stock or direct owner listings.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealer"},{"value":"private","label":"Private"}]},{"name":"body_type","type":"enum","required":false,"description":"Measured sedan, hatchback and SUV body styles.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan"},{"value":"hatchback","label":"Hatchback"},{"value":"suv","label":"Suv"}]},{"name":"car","type":"string","required":false,"description":"Source make id or make.root id; Maruti Suzuki=10, Swift=10.288. Read source ids from returned attributes.","on_invalid":"reject","example":"10.288","value_pattern":"\\d+(?:\\.\\d+)?"},{"name":"budget","type":"string","required":false,"description":"Source asking-price band in lakh INR, min-max; 0-5 means up to INR 500000. No EMI filtering.","on_invalid":"reject","example":"0-5","value_pattern":"\\d+(?:\\.\\d+)?-\\d+(?:\\.\\d+)?"},{"name":"page","type":"integer","required":false,"description":"One-based source page; standard organic allocation 24 with additional promoted rows possible.","on_invalid":"reject","default":1,"minimum":1,"maximum":100000},{"name":"max_results","type":"integer","required":false,"description":"Local truncation of one source page, not an upstream page-size guarantee.","on_invalid":"reject","default":24,"minimum":1,"maximum":50}],"returns":"listings, authoritative total, observed page size, last_page, has_more, next_page and variable relevance order. Prices are INR used asking amounts; display lakh/crore is retained.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"city_id":1,"fuel":"petrol","max_results":6}},{"name":"detail","description":"Full public used listing by stock id or canonical URL. Supply either id or url; id alone resolves the source canonical listing.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Source stock id from search: eight alphanumeric characters or legacy 32-character hex id.","on_invalid":"reject","example":"6fwyr690"},{"name":"url","type":"string","required":false,"description":"Canonical public CarWale used listing URL returned by search.","on_invalid":"reject","example":"https://www.carwale.com/used/mumbai/kia-seltos/6fwyr690/"}],"returns":"Full listing id, canonical URL, asking price/display/currency/basis, brand/model/variant/year, odometer km, fuel/transmission, location, public seller, full owner comments, complete gallery, equipment, source attributes and sold/active status. Monthly EMI and new on-road/reference amounts remain separate.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.carwale.com/used/mumbai/kia-seltos/6fwyr690/"}}]},{"name":"casasbahia","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Casas Bahia API — search casasbahia.com.br (Brazil) and read products with preço, de-por, PIX/boleto à vista and parcelado sem juros prices, seller, stock, EAN, specs, offers and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/casasbahia/v1","spec_available":true,"actions":[{"name":"search","description":"Search Casas Bahia (Brazil) by keyword with the site's own filters: brand id, category id, seller id (10037 = Casas Bahia itself), price range in R$, star bucket, and 5 sort orders. Each row: product id, sku id, name, URL, images, brand, categories, rating, review count, plus the live price set from the site's own price service: preço, the strike-through 'de' price, the PIX/boleto à vista price and its discount, the instalment plan (N× value, sem juros flag and the source's own text), the selling seller and whether it is Casas Bahia, availability. Plus the source's own total and its brand / category / seller filter lists.","required_params":["query"],"optional_params":["brand_id","category_id","seller_id","min_price","max_price","stars","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed into the Casas Bahia search box (Portuguese), e.g. geladeira, smartphone samsung.","on_invalid":"reject","example":"geladeira","aliases":["q","keyword","keywords","search","terms"]},{"name":"brand_id","type":"string","required":false,"description":"Brand id as a row's `brand_id` or `facets.brands[].id` returns it (165 = Electrolux). A brand id with no products returns 0 rows.","on_invalid":"reject","example":"165","aliases":["brand"]},{"name":"category_id","type":"string","required":false,"description":"Category id as a row's `categories[].id` or `facets.categories[].id` returns it (13 = Eletrodomésticos).","on_invalid":"reject","example":"13","aliases":["category"]},{"name":"seller_id","type":"string","required":false,"description":"Only offers sold by this seller (`seller_id` of a row or `facets.sellers[].id`; 10037 = Casas Bahia itself).","on_invalid":"reject","example":"10037","aliases":["seller"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in R$ (BRL). The source compares its lowest payable price, so a row whose PIX price is inside the range can carry a `price` outside it.","on_invalid":"reject","example":1500,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in R$ (BRL). Same rule as min_price: measured 2026-10-15, 1 of 20 rows had price 528.99 over max 500 with pix_price 476.09 inside.","on_invalid":"reject","example":3000,"minimum":0,"aliases":["price_max"]},{"name":"stars","type":"enum","required":false,"description":"The source's own star bucket: 4 means rated 4.0-4.9 (a 4.7 product is in 4, not 5); 0 means not yet rated.","on_invalid":"reject","allowed_values":[{"value":"5","label":"5 stars"},{"value":"4","label":"4 to 4.9 stars"},{"value":"3","label":"3 to 3.9 stars"},{"value":"2","label":"2 to 2.9 stars"},{"value":"1","label":"1 to 1.9 stars"},{"value":"0","label":"No rating"}],"aliases":["rating"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own five choices).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevância"},{"value":"popularity","label":"Popularidade"},{"value":"price_asc","label":"Menor preço"},{"value":"price_desc","label":"Maior preço"},{"value":"best_selling","label":"Mais vendidos"}],"default":"relevance","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Result page, 20 rows each. The source stops at 10,000 rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"results[]{product_id, sku_id, name, url, image, images[], brand, brand_id, categories[], rating, review_count, status, pinned, sponsored, product_type, price, list_price, pix_price, pix_discount_pct, pix_label, discount_pct, source_discount_pct, installments, installment_value, installment_interest_free, installment_text, installment_mismatch, currency, seller_id, seller_name, sold_by_casas_bahia, available, in_stock, price_sku_id} + total, total_capped, page, page_size, last_page, has_more, page_past_end, facets{brands[], categories[], sellers[], sorts[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"geladeira","brand_id":"165"}},{"name":"product","description":"Full Casas Bahia product record for one sku: name, variant, brand (and its customer-service contact as published), EAN, description, category path, grouped specifications, highlights, all variants (e.g. 110V / 220V) with their sku ids, images, the price set for THIS sku (preço, de-por, PIX/boleto à vista, parcelado plans), the selling seller, every marketplace offer (seller, price, stock, elected), and the rating summary (average, count, recommendation %, star distribution).","required_params":["sku_id"],"optional_params":[],"params":[{"name":"sku_id","type":"string","required":false,"description":"Casas Bahia sku id exactly as a search row returns it (`sku_id`; the number after /p/ in a product URL). A casasbahia.com.br product URL is accepted too.","on_invalid":"reject","example":"1576385899","aliases":["sku","id","url"]}],"returns":"{product_id, sku_id, name, variant_name, url, brand, brand_id, brand_support_phone, brand_support_site, ean, description, categories[], specifications[]{group, name, value}, highlights[], variants[]{sku_id, name, active}, variant_attributes[], images[], videos[], store_pickup_eligible, active, price, list_price, pix_price, pix_discount_pct, pix_label, pix_payment_methods, discount_pct, source_discount_pct, installments, installment_value, installment_interest_free, installment_text, installment_mismatch, installment_plans[], currency, seller_id, seller_name, sold_by_casas_bahia, available, in_stock, ships_nationwide, store_pickup, offers[]{seller_id, seller_name, sold_by_casas_bahia, elected, price, list_price, in_stock, active, store_pickup}, rating, review_count, recommendation_pct, rating_distribution_pct{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"sku_id":"1576385899"}},{"name":"reviews","description":"Buyer reviews of a Casas Bahia product: stars, text, first name as published, date, likes and dislikes, plus the average rating, review count, recommendation % and star distribution.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"Casas Bahia product id exactly as a search row or `product` returns it (`product_id`).","on_invalid":"reject","example":"87599435","aliases":["id"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"most_useful","label":"Most useful"},{"value":"newest","label":"Newest"}],"default":"most_useful","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"reviews[]{review_id, rating, text, author, date, likes, dislikes} + product_id, rating, review_count, recommendation_pct, rating_distribution_pct{}, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"87599435"}}]},{"name":"catawiki","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Catawiki API scraper - Europe's weekly online auctions (watches, art, jewellery, classic cars, coins, wine, collectibles): lot search with live bids, full lot records with expert estimate, reserve status, Buyer Protection fee and shipping per country, bid history, auction and category listings. EUR, GBP or USD in 18 languages. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/catawiki/v1","spec_available":true,"actions":[{"name":"search","description":"Search open Catawiki lots by keyword: lot id, title, image, the current bid in EUR, GBP or USD, whether anyone has bid, closing time, reserve price set and met, buy-now price, free shipping and the auction id. Filter by category, reserve, free shipping, seller country and closing day; sort by relevance, ending soon or newest. Unrelated padding shown for keywords with no results is dropped and counted.","required_params":["query"],"optional_params":["category_id","include_fallback_results","page","per_page","sort","reserve","free_shipping","seller_country","closing_date","language","currency","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword, in any language Catawiki supports (typos such as 'rolx' are corrected by the site).","on_invalid":"reject","example":"rolex","aliases":["q","keyword"]},{"name":"category_id","type":"string","required":false,"description":"Only lots in these Catawiki categories (numbers such as 343 Rolex Watches; `categories` lists them). Comma-separated.","on_invalid":"reject","example":"343","aliases":["category"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"per_page","type":"integer","required":false,"description":"Lots per page, 1-100 (default 24, as on the site).","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order. Only orderings measured to change the results are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Catawiki's own relevance (default)"},{"value":"ending_soon","label":"Lots closing soonest first"},{"value":"newest","label":"Most recently published lots first (Catawiki's publication time)"}],"default":"relevance"},{"name":"reserve","type":"enum","required":false,"description":"Only lots with, or without, a reserve price.","on_invalid":"reject","allowed_values":[{"value":"with_reserve","label":"Only lots that have a reserve price"},{"value":"no_reserve","label":"Only lots without a reserve price"}]},{"name":"free_shipping","type":"boolean","required":false,"description":"Only lots with free shipping everywhere.","on_invalid":"reject"},{"name":"seller_country","type":"string","required":false,"description":"Only lots whose seller is in these countries (two-letter codes, comma-separated).","on_invalid":"reject","example":"nl","aliases":["seller_location"]},{"name":"closing_date","type":"string","required":false,"description":"Only lots closing on these days (YYYY-MM-DD, comma-separated).","on_invalid":"reject","example":"2026-09-20","aliases":["ends_on"]},{"name":"language","type":"enum","required":false,"description":"Language of titles, descriptions, specifications and category names (Catawiki's own translations). Lots are the same in every language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"da","label":"Danish"},{"value":"sv","label":"Swedish"},{"value":"no","label":"Norwegian"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"hu","label":"Hungarian"},{"value":"ro","label":"Romanian"},{"value":"el","label":"Greek"},{"value":"ja","label":"Japanese"},{"value":"zh-Hans","label":"Chinese (simplified)"},{"value":"zh-Hant","label":"Chinese (traditional)"}],"default":"en","example":"de","aliases":["lang","locale"]},{"name":"currency","type":"enum","required":false,"description":"Currency for bids, estimates, fees and shipping. Catawiki converts from EUR itself.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (the site's default)"},{"value":"GBP","label":"British pound"},{"value":"USD","label":"US dollar"}],"default":"EUR","example":"GBP","aliases":["currency_code"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When Catawiki finds nothing for a keyword it shows unrelated 'you may also like' lots. They are dropped by default and counted; true returns them in `fallback_results`.","on_invalid":"reject","default":false}],"returns":"lots[]{lot_id, title, subtitle, url, image, thumbnail, auction_id, currency, current_bid (number, null while nobody has bid; excludes fee and shipping), has_bids, status (open|closed), is_sold, sold_price (only when sold), reserve_price_set, reserve_price_met (null when no reserve), buy_now_price_eur, buy_now_available, free_shipping, start_time, end_time, favorite_count, explicit_content, bid_state (ok|unavailable), rating (null), review_count (null)}, count, total_results, page, has_more, fallback_results_dropped, fallback_results[] (only with include_fallback_results), corrected_query, query, filters{}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex","per_page":24}},{"name":"product/detail","description":"One Catawiki lot in full, open or closed: title, description, every image, specifications (brand, model, condition, year…), the expert or retail estimate, the current or final bid, bid count, next minimum bid, reserve met, sold or not, buy-now price, the Buyer Protection fee and the fee on the current bid, shipping rates per country (and the total if won now for your country), delivery time, the seller (pro or private, score, feedback counts, objects sold, country), the curating experts and the last 10 bids.","required_params":["lot_id"],"optional_params":["shipping_country","language","currency","max_rotations"],"params":[{"name":"lot_id","type":"integer","required":true,"description":"Catawiki lot id - the number in /l/<id>-<slug>. A full lot URL works.","on_invalid":"reject","example":106723305,"aliases":["id","url","lot"]},{"name":"shipping_country","type":"string","required":false,"description":"Two-letter country code to quote shipping and the total cost for. Default: the shipping rates for every country are returned without a total.","on_invalid":"reject","example":"de","aliases":["destination_country","ship_to"]},{"name":"language","type":"enum","required":false,"description":"Language of titles, descriptions, specifications and category names (Catawiki's own translations). Lots are the same in every language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"da","label":"Danish"},{"value":"sv","label":"Swedish"},{"value":"no","label":"Norwegian"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"hu","label":"Hungarian"},{"value":"ro","label":"Romanian"},{"value":"el","label":"Greek"},{"value":"ja","label":"Japanese"},{"value":"zh-Hans","label":"Chinese (simplified)"},{"value":"zh-Hant","label":"Chinese (traditional)"}],"default":"en","example":"de","aliases":["lang","locale"]},{"name":"currency","type":"enum","required":false,"description":"Currency for bids, estimates, fees and shipping. Catawiki converts from EUR itself.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (the site's default)"},{"value":"GBP","label":"British pound"},{"value":"USD","label":"US dollar"}],"default":"EUR","example":"GBP","aliases":["currency_code"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"item{lot_id, title, subtitle, url, language, status (open|closed), is_sold, currency, current_bid, last_bid, sold_price, bid_count, next_minimum_bid, reserve_price_met, close_to_reserve_price, buy_now_price, buy_now_price_eur, buy_now_available_until, experts_estimate{min, max, type (expert|retail), label}, buyer_protection_fee{percentage, fixed, currency}, buyer_protection_fee_amount (on current_bid, or on sold_price when sold), total_if_won_now (open lots with shipping_country), start_time, end_time, auction_id, category{id, url, level}, description, auto_translated_description, summary, specifications[]{name, value, specification_id, value_id}, attributes{brand, model, condition, gender, movement, material, country_of_origin, period, case_diameter, year}, images[], image, video_count, experts[]{id, name, bio}, seller{id, name, url, type (pro|private), is_top_seller, country{code, name}, city, score, score_scale, positive_count, neutral_count, negative_count, feedback_count, objects_sold, lots_in_auction, member_since, badges[], profile}, shipping{destination{code, name, price, available, currency}, rates[]{country_code, country, price, currency}, delivery_days{from, to}, combined_shipping_allowed, delivery_methods[], pickup_only, pickup_location, extra_insurance, payment_methods[]}, favorite_count, high_interest, explicit_content, recent_bids[], gtin (null), rating (null), review_count (null)}, auction{auction_id, title, url, status, start_time, close_time, closed_at, lot_count, themed, image}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"lot_id":106723305}},{"name":"lot/bids","description":"The full bid history of one Catawiki lot, newest first: amount in EUR, GBP or USD, time, the bidder's public pseudonym and country, and how many bids that bidder has placed on Catawiki.","required_params":["lot_id"],"optional_params":["currency","max_rotations"],"params":[{"name":"lot_id","type":"integer","required":true,"description":"Catawiki lot id - the number in /l/<id>-<slug>. A full lot URL works.","on_invalid":"reject","example":106723305,"aliases":["id","url","lot"]},{"name":"currency","type":"enum","required":false,"description":"Currency for bids, estimates, fees and shipping. Catawiki converts from EUR itself.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (the site's default)"},{"value":"GBP","label":"British pound"},{"value":"USD","label":"US dollar"}],"default":"EUR","example":"GBP","aliases":["currency_code"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"lot_id, currency, bids[]{bid_id, amount, currency, time, bidder, bidder_country, bidder_total_bids, from_order}, count, highest_bid","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"lot_id":106723305}},{"name":"auction/lots","description":"Every lot of one Catawiki auction, open or already closed, with the auction's title, status and closing time and each lot's current or final bid, sold flag, reserve status and buy-now price - a closed auction is a list of real sale results.","required_params":["auction_id"],"optional_params":["page","per_page","language","currency","max_rotations"],"params":[{"name":"auction_id","type":"integer","required":true,"description":"Catawiki auction id - the number in /a/<id>-<slug>; every lot row returns it.","on_invalid":"reject","example":1263236,"aliases":["id","url","auction"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"per_page","type":"integer","required":false,"description":"Lots per page, 1-100 (default 24, as on the site).","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"language","type":"enum","required":false,"description":"Language of titles, descriptions, specifications and category names (Catawiki's own translations). Lots are the same in every language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"da","label":"Danish"},{"value":"sv","label":"Swedish"},{"value":"no","label":"Norwegian"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"hu","label":"Hungarian"},{"value":"ro","label":"Romanian"},{"value":"el","label":"Greek"},{"value":"ja","label":"Japanese"},{"value":"zh-Hans","label":"Chinese (simplified)"},{"value":"zh-Hant","label":"Chinese (traditional)"}],"default":"en","example":"de","aliases":["lang","locale"]},{"name":"currency","type":"enum","required":false,"description":"Currency for bids, estimates, fees and shipping. Catawiki converts from EUR itself.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (the site's default)"},{"value":"GBP","label":"British pound"},{"value":"USD","label":"US dollar"}],"default":"EUR","example":"GBP","aliases":["currency_code"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"auction{auction_id, title, url, status, start_time, close_time, closed_at, lot_count, themed, image}, lots[]{lot_id, title, subtitle, url, image, thumbnail, auction_id, currency, current_bid (number, null while nobody has bid; excludes fee and shipping), has_bids, status (open|closed), is_sold, sold_price (only when sold), reserve_price_set, reserve_price_met (null when no reserve), buy_now_price_eur, buy_now_available, free_shipping, start_time, end_time, favorite_count, explicit_content, bid_state (ok|unavailable), rating (null), review_count (null)}, count, total_results, page, has_more","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"auction_id":1263236}},{"name":"category/products","description":"Browse the open lots of one Catawiki category with live bids, the same row fields as search, and the same reserve, free shipping, seller country and closing day filters and sorts.","required_params":["category_id"],"optional_params":["page","per_page","sort","reserve","free_shipping","seller_country","closing_date","language","currency","max_rotations","include_sponsored"],"params":[{"name":"category_id","type":"integer","required":true,"description":"Catawiki category id - the number in /c/<id>-<slug>; `categories` lists them.","on_invalid":"reject","example":343,"aliases":["category","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"per_page","type":"integer","required":false,"description":"Lots per page, 1-100 (default 24, as on the site).","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order. Only orderings measured to change the results are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Catawiki's own relevance (default)"},{"value":"ending_soon","label":"Lots closing soonest first"},{"value":"newest","label":"Most recently published lots first (Catawiki's publication time)"}],"default":"relevance"},{"name":"reserve","type":"enum","required":false,"description":"Only lots with, or without, a reserve price.","on_invalid":"reject","allowed_values":[{"value":"with_reserve","label":"Only lots that have a reserve price"},{"value":"no_reserve","label":"Only lots without a reserve price"}]},{"name":"free_shipping","type":"boolean","required":false,"description":"Only lots with free shipping everywhere.","on_invalid":"reject"},{"name":"seller_country","type":"string","required":false,"description":"Only lots whose seller is in these countries (two-letter codes, comma-separated).","on_invalid":"reject","example":"nl","aliases":["seller_location"]},{"name":"closing_date","type":"string","required":false,"description":"Only lots closing on these days (YYYY-MM-DD, comma-separated).","on_invalid":"reject","example":"2026-09-20","aliases":["ends_on"]},{"name":"language","type":"enum","required":false,"description":"Language of titles, descriptions, specifications and category names (Catawiki's own translations). Lots are the same in every language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"da","label":"Danish"},{"value":"sv","label":"Swedish"},{"value":"no","label":"Norwegian"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"hu","label":"Hungarian"},{"value":"ro","label":"Romanian"},{"value":"el","label":"Greek"},{"value":"ja","label":"Japanese"},{"value":"zh-Hans","label":"Chinese (simplified)"},{"value":"zh-Hant","label":"Chinese (traditional)"}],"default":"en","example":"de","aliases":["lang","locale"]},{"name":"currency","type":"enum","required":false,"description":"Currency for bids, estimates, fees and shipping. Catawiki converts from EUR itself.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro (the site's default)"},{"value":"GBP","label":"British pound"},{"value":"USD","label":"US dollar"}],"default":"EUR","example":"GBP","aliases":["currency_code"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"include_sponsored","type":"boolean","required":false,"description":"Catawiki can promote lots on category pages. They are dropped by default and counted in sponsored_dropped; true returns them with sponsored: true.","on_invalid":"reject","default":false}],"returns":"category{id, name, url, parent_id, level, auction_count, ancestors[]{id, name, level}}, lots[]{lot_id, title, subtitle, url, image, thumbnail, auction_id, currency, current_bid (number, null while nobody has bid; excludes fee and shipping), has_bids, status (open|closed), is_sold, sold_price (only when sold), reserve_price_set, reserve_price_met (null when no reserve), buy_now_price_eur, buy_now_available, free_shipping, start_time, end_time, favorite_count, explicit_content, bid_state (ok|unavailable), sponsored, rating (null), review_count (null)}, count, total_results, page, has_more, sponsored_dropped (count is organic rows)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":343}},{"name":"categories","description":"Catawiki's category tree one level at a time: id, name, parent, link and how many auctions each category is running.","required_params":[],"optional_params":["level","parent_id","language","max_rotations"],"params":[{"name":"level","type":"integer","required":false,"description":"Category tree level: 0 top categories (16), 1 categories (80), 2 sub-categories (~310).","on_invalid":"reject","default":0,"minimum":0,"maximum":2},{"name":"parent_id","type":"integer","required":false,"description":"Only categories directly under this one.","on_invalid":"reject","example":333},{"name":"language","type":"enum","required":false,"description":"Language of titles, descriptions, specifications and category names (Catawiki's own translations). Lots are the same in every language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"da","label":"Danish"},{"value":"sv","label":"Swedish"},{"value":"no","label":"Norwegian"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"hu","label":"Hungarian"},{"value":"ro","label":"Romanian"},{"value":"el","label":"Greek"},{"value":"ja","label":"Japanese"},{"value":"zh-Hans","label":"Chinese (simplified)"},{"value":"zh-Hant","label":"Chinese (traditional)"}],"default":"en","example":"de","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"categories[]{id, name, url, parent_id, level, auction_count}, count, level","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"parent_id":333}},{"name":"suggest","description":"Catawiki's own keyword suggestions for the start of a search term.","required_params":["query"],"optional_params":["language","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a keyword.","on_invalid":"reject","example":"rol","aliases":["q","keyword"]},{"name":"language","type":"enum","required":false,"description":"Language of titles, descriptions, specifications and category names (Catawiki's own translations). Lots are the same in every language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"pt","label":"Portuguese"},{"value":"da","label":"Danish"},{"value":"sv","label":"Swedish"},{"value":"no","label":"Norwegian"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"hu","label":"Hungarian"},{"value":"ro","label":"Romanian"},{"value":"el","label":"Greek"},{"value":"ja","label":"Japanese"},{"value":"zh-Hans","label":"Chinese (simplified)"},{"value":"zh-Hant","label":"Chinese (traditional)"}],"default":"en","example":"de","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, suggestions[], count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex"}}]},{"name":"cdiscount","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Cdiscount API scraper — France's #2 marketplace (cdiscount.com): search products, read the full listing (EAN, specs, variants, buy-box price with its tax breakdown, reference price, delivery), list every seller's offer, and read reviews. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cdiscount/v1","spec_available":true,"actions":[{"name":"search","description":"Search cdiscount.com by keyword, with the site's sorts and filters (condition, seller kind, Cdiscount à volonté, minimum rating, brand). Each row is the product's buy-box offer: product code, offer id, title, URL, brand, the buy-box price with its eco-participation/VAT/copy-levy breakdown, the legal reference price and discount when shown, condition, seller (Cdiscount or marketplace, with rating), CDAV flags, star rating, sponsored flag, image, and how many other new/used offers exist.","required_params":["query"],"optional_params":["page","sort","price_min","price_max","condition","seller_kind","cdav_only","min_rating","brand","include_sponsored","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to search on cdiscount.com (French or brand/model words: 'aspirateur robot', 'iphone 15', 'lego technic').","on_invalid":"reject","example":"aspirateur robot","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Cdiscount serves 47 organic listings per page; `total_pages` says how many exist. A page past the end returns an empty page.","on_invalid":"reject","default":1,"minimum":1,"maximum":300},{"name":"sort","type":"enum","required":false,"description":"Order of the results — the site's own orderings. Price sorts follow the buy-box price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Cdiscount's default order"},{"value":"price_asc","label":"Lowest buy-box price first"},{"value":"price_desc","label":"Highest buy-box price first"},{"value":"best_selling","label":"Best sellers (last 7 days) first"},{"value":"rating","label":"Highest rated first"},{"value":"seller_rating","label":"Highest seller rating first"}],"default":"relevance"},{"name":"price_min","type":"number","required":false,"description":"Lowest buy-box price in EUR (inclusive). Applied to the returned page; rows below it are dropped and counted in `dropped_outside_price_range`.","on_invalid":"reject","example":20,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest buy-box price in EUR (inclusive).","on_invalid":"reject","example":50,"minimum":0},{"name":"condition","type":"enum","required":false,"description":"Filter by condition (server-side facet).","on_invalid":"reject","allowed_values":[{"value":"new","label":"New only"},{"value":"used","label":"Used or refurbished only"}]},{"name":"seller_kind","type":"enum","required":false,"description":"Restrict to Cdiscount's own offers or to marketplace sellers.","on_invalid":"reject","allowed_values":[{"value":"cdiscount","label":"Sold by Cdiscount"},{"value":"marketplace","label":"Sold by marketplace sellers"}]},{"name":"cdav_only","type":"boolean","required":false,"description":"Only listings eligible to Cdiscount à volonté (member free shipping).","on_invalid":"reject"},{"name":"min_rating","type":"enum","required":false,"description":"Minimum customer rating (server-side facet).","on_invalid":"reject","allowed_values":[{"value":"4","label":"4 stars and up"},{"value":"3","label":"3 stars and up"}]},{"name":"brand","type":"string","required":false,"description":"Cdiscount brand slug (as in its brand facet, e.g. 'lego', 'apple').","on_invalid":"reject","example":"lego"},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default): Cdiscount's sponsored placements are dropped and counted in `sponsored_dropped`. true: they are returned in place, flagged `is_sponsored` with `advertiser`. `count` always counts organic rows only.","on_invalid":"ignore","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no product on the page contains a query word, Cdiscount pads the page with unrelated products. false (default): results are empty and `fallback_results_dropped` counts what was dropped. true: those products are returned apart, in `fallback_results`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id, offer_id, title, url, brand_id, price, currency=EUR, price_without_vat, reference_price, reference_price_type, reference_price_date, discount_percent, eco_participation, vat_amount, copy_levy, price_includes_eco_fee, unit_price, condition ('new'|'refurbished'|'used'), condition_grade, seller{id, name, is_cdiscount, rating, rating_scale, rating_count, sales_count, expedition_country}, is_cdav, cdav_free_shipping, free_shipping, rating, rating_count, rating_scale, is_sponsored, advertiser, other_new_offers, other_used_offers, lowest_new_offer_price, lowest_used_offer_price, category_id, category_code_path, promotions, image, images}, count (organic rows), sponsored_count (returned sponsored rows, only with include_sponsored=true), sponsored_dropped, total_results (0 when the page was fallback), total_pages, page, page_size, sort, query, did_you_mean, applied_filters, selected_category, dropped_outside_price_range, keyword_matches_on_page, fallback_results_dropped, fallback_total (Cdiscount's count for a dropped fallback page), fallback_results[] (only with include_fallback_results=true), page_notice; rating is rounded to 2 decimals, rating_count is the raw count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"aspirateur robot"}},{"name":"product/detail","description":"The full Cdiscount product record by URL or product_id: title, brand, EAN, buy-box price with its eco-participation/VAT/copy-levy breakdown, the legal reference price and discount, the 4x instalment option, availability, condition, seller, the number of other new/used offers and their lowest prices, star rating with the 1-5 breakdown, energy label, repairability index, images, specs, description, breadcrumb, variants and the delivery options (cost + date).","required_params":[],"optional_params":["url","product_id","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"A cdiscount.com product URL. Every search row returns one as `url`.","on_invalid":"reject","example":"https://www.cdiscount.com/juniors/jeux-de-construction/x/f-12083-lego77260.html","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"Alternative to `url`: the product code (the part after -f-<dept>- in a product URL). Every search row returns it as `product_id`.","on_invalid":"reject","example":"lego77260","aliases":["code","product_code","sku"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, offer_id, sku, title, url, brand, brand_id, ean, manufacturer_model_number, price, currency=EUR, price_without_vat, reference_price, reference_price_type, reference_price_date, discount_percent, eco_participation, vat_amount, copy_levy, price_includes_eco_fee, installment_4x{monthly_amount, first_amount, months, fee_rate_percent, total_fee, is_free}, availability, in_stock, max_quantity, is_preorder, condition, condition_grade, seller{...}, total_offers, total_new_offers, total_used_offers, lowest_new_offer_price, lowest_used_offer_price, rating, rating_count, rating_scale, rating_breakdown, recommended_count, energy_label, repairability_index, image_count, images[], specs[{group, attributes[{name, value}]}], description, short_description, category_code_path, breadcrumb[{name, url}], variants{axes[], current_key, options[{key, product_id, offer_id, url, price, is_current}]}, delivery[{mode, name, price, cdav_price, min_delivery_date, max_delivery_date, speed}], video_url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"lego77260"}},{"name":"product/offers","description":"Every seller's offer for one product (new + used/refurbished), by URL or product_id: each offer's price with its tax breakdown, the legal reference price, condition, the seller (with rating and sales count), CDAV and free-shipping flags, and the offer URL. The buy-box is not always the cheapest, so this is the multi-seller price view.","required_params":[],"optional_params":["url","product_id","sort","page","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"A cdiscount.com product URL. Every search row returns one as `url`.","on_invalid":"reject","example":"https://www.cdiscount.com/juniors/jeux-de-construction/x/f-12083-lego77260.html","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"Alternative to `url`: the product code (the part after -f-<dept>- in a product URL). Every search row returns it as `product_id`.","on_invalid":"reject","example":"lego77260","aliases":["code","product_code","sku"]},{"name":"sort","type":"enum","required":false,"description":"Order of the seller offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Cdiscount's default order"},{"value":"price_asc","label":"Cheapest offer first"},{"value":"price_desc","label":"Dearest offer first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Offer page, 1-based. Cdiscount serves 4 offers per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"offers[]{offer_id, seller{id, name, is_cdiscount, rating, rating_scale, rating_count, sales_count, expedition_country}, price, currency=EUR, price_without_vat, reference_price, discount_percent, eco_participation, vat_amount, condition, condition_grade, is_cdav, cdav_free_shipping, free_shipping, rating, rating_count, url}, count, total_offers, total_pages, page, product{product_id, title}, cheapest, lowest_new_offer_price, lowest_used_offer_price","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"lego77260"}},{"name":"product/reviews","description":"Customer reviews for a product, by URL or product_id, paged and sortable, with an optional star filter. Each review carries its score, title, text, author nickname, date, per-criterion scores when present, and whether it was syndicated from the brand.","required_params":[],"optional_params":["url","product_id","page","per_page","sort","stars","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"A cdiscount.com product URL. Every search row returns one as `url`.","on_invalid":"reject","example":"https://www.cdiscount.com/juniors/jeux-de-construction/x/f-12083-lego77260.html","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"Alternative to `url`: the product code (the part after -f-<dept>- in a product URL). Every search row returns it as `product_id`.","on_invalid":"reject","example":"lego77260","aliases":["code","product_code","sku"]},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Order of the reviews.","on_invalid":"reject","allowed_values":[{"value":"most_helpful","label":"Cdiscount's default order"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"lowest_rating","label":"Lowest scores first"}],"default":"most_helpful"},{"name":"stars","type":"string","required":false,"description":"Comma-separated star values to keep (1-5), e.g. '1,2' for the low scores.","on_invalid":"reject","example":"1,2"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[]{id, score, title, content, nickname, date, product_use_date, criterions[{name, score}], source_type, source_name, images[]}, count, total_reviews, average_rating, rating_scale, recommended_count, rating_breakdown, product_id, page, sort","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.cdiscount.com/juniors/jeux-de-construction/x/f-12083-lego77260.html"}},{"name":"search/suggest","description":"Cdiscount's autocomplete for a partial query: product suggestions (title, url, price, marketplace flag) and keyword suggestions.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to search on cdiscount.com (French or brand/model words: 'aspirateur robot', 'iphone 15', 'lego technic').","on_invalid":"reject","example":"aspirateur robot","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"suggestions[{title, url, price, currency=EUR, is_marketplace}], keyword_suggestions[{keyword, categories[]}], count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"aspirateur robot"}}]},{"name":"ceneo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Ceneo API scraper — Polish price comparison: search products, read the full product record, and get every merchant's offer (price, shop rating, delivery) for one product on ceneo.pl. Prices in PLN. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ceneo/v1","spec_available":true,"actions":[{"name":"search","description":"Search ceneo.pl by keyword and get the matching products: Ceneo product id, title, brand, image, the FROM price (the cheapest offer Ceneo knows for that product), how many shops sell it, the customer rating and review count, the category, and Ceneo's own key-parameter preview. Use the returned `product_id` with `product/offers` to get every shop's price for that product.","required_params":["query"],"optional_params":["page","sort","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for on ceneo.pl. Polish keywords match best, but brand and model numbers (e.g. 'logitech g733', 'iPhone 15 128GB') work directly. Ceneo matches loosely, so a two-word query returns accessories as well as the product itself.","on_invalid":"reject","example":"logitech g733","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-BASED (1, 2, 3…). 30 products per page. `total_results` tells you how many exist when Ceneo answered as a keyword search; on a category answer it is null and you page until a page comes back empty.","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Only orderings ceneo.pl actually honours are accepted; anything else is rejected rather than silently ignored. Note that `price_asc` sorts on each product's CHEAPEST offer.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Ceneo's own recommended order (default)"},{"value":"price_asc","label":"Cheapest first (by the product's lowest offer)"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating_desc","label":"Highest customer rating first"},{"value":"popularity","label":"Most visited products first"}],"default":"relevance"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{product_id, title, brand, url, image, price_min, price_min_display, price_max (null — the search card publishes no upper bound; product/detail has the band), currency=PLN, offer_count (how many shops sell it — null when Ceneo prints no shop count on the card), free_delivery_offer_count, rating, review_count, category, category_id, category_url, key_specs[], variant_count, promoted}, count, excluded_shop_offers (single shop-offer tiles Ceneo mixes into the grid; they have no Ceneo product page, so they are counted, not returned), total_results (null when Ceneo answered with a category page — see search_mode), search_mode ('keyword' | 'category' when Ceneo redirected the keyword onto one of its own category pages), resolved_category, resolved_url (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"logitech g733"}},{"name":"product/detail","description":"The full Ceneo product record by `product_id` (or product URL): title, brand, description, image gallery, the price BAND across all shops (price_min/price_max) with Ceneo's own offer count, the customer rating, the category breadcrumb and the complete technical specification, grouped exactly as Ceneo groups it.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Ceneo product id — the number in the product URL (https://www.ceneo.pl/108733030). A full product URL is also accepted. Every `search` row returns this as `product_id`.","on_invalid":"reject","example":"108733030","aliases":["id","pid","sku","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, title, brand, url, description, images[], price_min, price_max, price_min_display, price_max_display, currency=PLN, offer_count, availability, condition, rating, review_count, rating_scale, category, breadcrumb[], specs[]{group, attributes{name: value}}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"108733030"}},{"name":"product/offers","description":"Every shop offer for one product — the price comparison itself. For the given `product_id` you get one row per merchant: merchant name, Ceneo merchant id, merchant domain, price (numeric and formatted), the Ceneo shop rating and how many reviews it rests on, the delivery cost line, whether delivery is free, the declared dispatch time and a working offer link. Rows are ordered cheapest first. Ceneo shows only part of the list on the product page; by default this action returns the complete one.","required_params":["product_id"],"optional_params":["all_offers","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Ceneo product id — the number in the product URL (https://www.ceneo.pl/108733030). A full product URL is also accepted. Every `search` row returns this as `product_id`.","on_invalid":"reject","example":"108733030","aliases":["id","pid","sku","url"]},{"name":"all_offers","type":"boolean","required":false,"description":"true (default) returns EVERY merchant offer Ceneo lists for the product. false returns only the offers the product page shows without expanding the list (about 15) and costs one request less.","on_invalid":"ignore","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, title, brand, price_min, price_max, currency=PLN, offer_count (Ceneo's own published count)} + offers[]{position, offer_id, seller{id, name, domain, rating (0-5, null for a shop Ceneo has not rated), rating_count}, price (number), price_display, currency=PLN, offer_url, offer_title (the merchant's own listing title), delivery, free_delivery, dispatch, promoted, product_id} + count, cheapest, most_expensive","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"108733030"}}]},{"name":"cex","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"CeX (WeBuy) API — the second-hand games, phones, computing and electronics chain across nine countries: search a million products with all THREE prices (what you pay, what CeX pays you in cash, what CeX pays you as a trade-in voucher), read the full product, and see live per-store stock across the physical shop network. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cex/v1","spec_available":true,"actions":[{"name":"search","description":"Search the CeX catalogue of one country. Every row carries the three prices side by side — the selling price, the cash price CeX pays you and the trade-in voucher price — plus the grade, the condition, online stock, the list of shops that hold the item and live facet counts. Filter by category, department, product line, brand, condition, grade, shop, stock and price; sort by price, name, rating or popularity. Give at least `query`, `category`, `supercategory`, `product_line`, `brand` or `store`.","required_params":[],"optional_params":["query","country","category","supercategory","product_line","brand","condition","grade","store","availability","price_min","price_max","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search, exactly as typed into the CeX search box. Leave empty to browse a category or a store with the filters below.","on_invalid":"reject","example":"ps5","aliases":["q","keyword","stext"]},{"name":"country","type":"enum","required":false,"description":"Which CeX storefront to read. Prices and stock are per country and the currency is read from that storefront's own settings.","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia"},{"value":"es","label":"Spain"},{"value":"ie","label":"Ireland"},{"value":"in","label":"India"},{"value":"it","label":"Italy"},{"value":"mx","label":"Mexico"},{"value":"pl","label":"Poland"},{"value":"pt","label":"Portugal"},{"value":"uk","label":"United Kingdom"}],"default":"uk","example":"uk","aliases":["cc"]},{"name":"category","type":"string","required":false,"description":"CeX category name as the site prints it (the `category` field of any search row; `taxonomy` lists them with live counts).","on_invalid":"reject","example":"Playstation5 Consoles","aliases":["category_name"]},{"name":"supercategory","type":"string","required":false,"description":"Top-level department: Gaming, Phones, Computing, Electronics, Film & TV, New Accessories, Apparel.","on_invalid":"reject","example":"Gaming","aliases":["super_category"]},{"name":"product_line","type":"string","required":false,"description":"CeX product line inside a department (`taxonomy` lists them).","on_invalid":"reject","example":"PlayStation 5","aliases":["productline"]},{"name":"brand","type":"string","required":false,"description":"Manufacturer as the catalogue spells it (Apple, Samsung, Sony…).","on_invalid":"reject","example":"Apple","aliases":["manufacturer"]},{"name":"condition","type":"string","required":false,"description":"CeX packaging condition. This is NOT the A/B/C grade — that is `grade`.","on_invalid":"reject","allowed_values":[{"value":"Boxed","label":"Boxed"},{"value":"Unboxed","label":"Unboxed"},{"value":"Mint","label":"Mint"},{"value":"Discounted","label":"Discounted"}],"example":"Boxed"},{"name":"grade","type":"string","required":false,"description":"CeX cosmetic grade. Each grade is its own product with its own three prices.","on_invalid":"reject","allowed_values":[{"value":"A","label":"A — as new"},{"value":"B","label":"B — good"},{"value":"C","label":"C — well used"}],"example":"A"},{"name":"store","type":"string","required":false,"description":"Limit to items the catalogue lists as held by one named store (use the `name` from the `stores` action). Per-store quantity comes from `store_stock`.","on_invalid":"reject","example":"Manchester Arndale","aliases":["store_name"]},{"name":"availability","type":"enum","required":false,"description":"Restrict to items CeX currently has in stock.","on_invalid":"reject","allowed_values":[{"value":"online","label":"in stock for online order"},{"value":"store","label":"in stock in at least one store"},{"value":"any","label":"in stock online or in store"}],"example":"online","aliases":["in_stock"]},{"name":"price_min","type":"number","required":false,"description":"Lowest selling price (what you pay), in the storefront's currency.","on_invalid":"reject","example":50,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest selling price (what you pay), in the storefront's currency.","on_invalid":"reject","example":400,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Sort order, using CeX's own sorted indexes.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"best match"},{"value":"price_asc","label":"selling price, low to high"},{"value":"price_desc","label":"selling price, high to low"},{"value":"name_asc","label":"name A-Z"},{"value":"name_desc","label":"name Z-A"},{"value":"rating","label":"customer rating"},{"value":"popularity","label":"most popular"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. CeX caps paging at 1000 items per query (page x page_size <= 1000) however large `total` is.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100.","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["limit","hits_per_page"]}],"returns":"results[]{box_id, title, url, currency, price_sell (what you pay), price_cash (what CeX pays you in cash), price_exchange (what CeX pays you as a voucher), previous_price_sell, first_price_sell, price_reduced, cash_percent_of_sell, exchange_percent_of_sell, sells_this_item, buys_this_item, category, category_id, product_lines[], supercategory, brand, condition, grade, rating, image, images{small, medium, large}, in_stock_online, stock_online, in_stock_in_store, store_count, stores[], out_of_stock_stores[], out_of_stock_store_count, collection_stores[], collection_quantity, availability[], is_new_item, discontinued, price_last_changed, master_box_id, attributes{…per-category}, country}, count, total, total_unfiltered, page, page_size, has_more, pagination_cap, facets{category, product_line, supercategory, brand, condition, grade}, filters_applied, currency, country, query","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ps5","country":"uk"}},{"name":"product","description":"One CeX product in full: the three prices (selling, cash and voucher) with the previous and launch selling price and when the price last changed, whether CeX currently sells and buys it, the grade and condition, the full description, every image, online and collection stock, the variant group and all of the product's own attributes.","required_params":["box_id"],"optional_params":["country"],"params":[{"name":"box_id","type":"string","required":true,"description":"CeX product id — the `box_id` on every search row, or a pasted product URL (…/product-detail?id=SAPPI13128GPUNLB).","on_invalid":"reject","example":"SAPPI13128GPUNLB","value_pattern":"[A-Za-z0-9._-]{3,40}","aliases":["id","boxId","product_id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"Which CeX storefront to read. Prices and stock are per country and the currency is read from that storefront's own settings.","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia"},{"value":"es","label":"Spain"},{"value":"ie","label":"Ireland"},{"value":"in","label":"India"},{"value":"it","label":"Italy"},{"value":"mx","label":"Mexico"},{"value":"pl","label":"Poland"},{"value":"pt","label":"Portugal"},{"value":"uk","label":"United Kingdom"}],"default":"uk","example":"uk","aliases":["cc"]}],"returns":"product{box_id, title, url, currency, price_sell, price_cash, price_exchange, previous_price_sell, first_price_sell, price_last_changed, sells_this_item, buys_this_item, cannot_buy, is_new_item, grade, condition, category, category_id, supercategory, supercategory_id, rating, rating_text, description, images{small, medium, large}, image_names[], stock_online, collection_quantity, out_of_stock, variant_group, variant_value, is_master_box, attributes[]{name, value, attribute_id, is_variant}, displayed_attributes[]{name, value}, country}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"box_id":"SAPPI13128GPUNLB"}},{"name":"store_stock","description":"Live per-shop stock for one product across the whole CeX store network: every shop that holds it, how many units are on hand, the quantity reserved for click-and-collect and whether collection is available there. This is the chain's physical inventory, not an online availability flag.","required_params":["box_id"],"optional_params":["country"],"params":[{"name":"box_id","type":"string","required":true,"description":"CeX product id — the `box_id` on every search row, or a pasted product URL (…/product-detail?id=SAPPI13128GPUNLB).","on_invalid":"reject","example":"SAPPI13128GPUNLB","value_pattern":"[A-Za-z0-9._-]{3,40}","aliases":["id","boxId","product_id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"Which CeX storefront to read. Prices and stock are per country and the currency is read from that storefront's own settings.","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia"},{"value":"es","label":"Spain"},{"value":"ie","label":"Ireland"},{"value":"in","label":"India"},{"value":"it","label":"Italy"},{"value":"mx","label":"Mexico"},{"value":"pl","label":"Poland"},{"value":"pt","label":"Portugal"},{"value":"uk","label":"United Kingdom"}],"default":"uk","example":"uk","aliases":["cc"]}],"returns":"stock[]{store_id, store_name, quantity_on_hand, collection_quantity, available_for_collection}, count, total_quantity, stores_with_stock, box_id, country, note (only when no shop holds the item)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"box_id":"SAPPI13128GPUNLB"}},{"name":"stores","description":"The CeX shop network of one country: every shop with its id, name, region, phone number, coordinates and today's closing time. With `store_id`, one shop with its full weekly opening and break hours instead.","required_params":[],"optional_params":["country","store_id"],"params":[{"name":"country","type":"enum","required":false,"description":"Which CeX storefront to read. Prices and stock are per country and the currency is read from that storefront's own settings.","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia"},{"value":"es","label":"Spain"},{"value":"ie","label":"Ireland"},{"value":"in","label":"India"},{"value":"it","label":"Italy"},{"value":"mx","label":"Mexico"},{"value":"pl","label":"Poland"},{"value":"pt","label":"Portugal"},{"value":"uk","label":"United Kingdom"}],"default":"uk","example":"uk","aliases":["cc"]},{"name":"store_id","type":"integer","required":false,"description":"Return one store with its weekly opening hours instead of the whole network.","on_invalid":"reject","example":1,"minimum":1}],"returns":"stores[]{store_id, name, region, phone, latitude, longitude, closing_time_today, country}, count, country — or store{…, opening_hours{open{monday…}, close{monday…}}, break_hours} for one store_id","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"uk"}},{"name":"taxonomy","description":"The CeX browse tree of one country — the seven departments and their product lines — together with live category and product-line counts taken from the search index, so each name can be pasted straight into `search`.","required_params":[],"optional_params":["country","supercategory_id"],"params":[{"name":"country","type":"enum","required":false,"description":"Which CeX storefront to read. Prices and stock are per country and the currency is read from that storefront's own settings.","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia"},{"value":"es","label":"Spain"},{"value":"ie","label":"Ireland"},{"value":"in","label":"India"},{"value":"it","label":"Italy"},{"value":"mx","label":"Mexico"},{"value":"pl","label":"Poland"},{"value":"pt","label":"Portugal"},{"value":"uk","label":"United Kingdom"}],"default":"uk","example":"uk","aliases":["cc"]},{"name":"supercategory_id","type":"integer","required":false,"description":"Limit the product lines to one department id (from the same answer).","on_invalid":"reject","example":1,"minimum":1,"aliases":["super_cat_id"]}],"returns":"supercategories[]{supercategory_id, name, product_line_count, live_count, product_lines[]{product_line_id, name, category_count, live_count}}, categories[]{name, live_count}, count, total_products, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"uk"}}]},{"name":"cgc","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"CGC Cards API - CGC's own graded-card population report and certification lookup: how many copies of a card CGC has graded at every grade (Perfect 10, Pristine 10, Gem Mint 10, Mint+ 9.5 … 1, Authentic), by game or sport, series, set and card, card search, and cert verification with grade, slab images and population. Pokémon, Magic, One Piece, Yu-Gi-Oh!, Lorcana, 450+ TCGs, sports and non-sports. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cgc/v1","spec_available":true,"actions":[{"name":"cert_lookup","description":"Verify a CGC-graded card by its certification number (the number on the slab label): card name or player, game, set, card number, year, language, variants, rarity, attributes, grade as printed (e.g. PRISTINE 10, GEM MINT 10, 9, AUTHENTIC) with CGC's grade name and number, autograph grade, sub-grades when the label carries them, grade date, front/back slab images, and that card's population (how many CGC graded at this grade and above, full grade breakdown). An unknown cert returns NOT_FOUND (not charged).","required_params":["cert_number"],"optional_params":["include_population","max_rotations"],"params":[{"name":"cert_number","type":"string","required":true,"description":"CGC Cards certification number (10-13 digits) or a cgccards.com certlookup URL.","on_invalid":"reject","example":"6090960083","aliases":["cert","certificate","url"]},{"name":"include_population","type":"boolean","required":false,"description":"Also return the card's population report (one more lookup).","on_invalid":"reject","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"cert{cert_number, grading_company, collectible (tcg|sports|non_sports), subject, card_name, player_name, game, year, manufacturer, set, subset, card_number, language, rarity, variants[], attributes, grade, grade_name, grade_number, designation (AU|AA), subgrades{centering, corners, edges, surface}|null, autograph_grade, grade_date, images[]{side, url, thumbnail_url}, population_id, other_fields, cert_url}, population{population_at_grade, population_higher, top_pop, card{population_id, name, card_number, year, variant, description (rarity for TCGs), language, language_id, set_id, collectible, has_autograph / is_parallel (sports), population{total, numeric_graded, by_grade{perfect_10, pristine_10, gem_mint_10, 9.5, 9, 8.5 … 1, authentic, authentic_altered}, grades[]{grade, grade_number, count}, perfect_10, pristine_10, gem_mint_10, ten_total, gem_rate_percent, authentic, authentic_altered, highest_grade{grade, grade_number, count}}, updated_at, url}, category, subcategory, set}|null","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"cert_number":"6090960083"}},{"name":"search","description":"Find cards in CGC's population report by name, player, set or number (\"charizard base set\", \"tom brady 2000\", \"luffy op01\") across trading card games, sports and non-sports. Returns the population_id that card_population takes, plus set, year, number, variant, language. CGC answers at most 50 matches per collectible type.","required_params":["query"],"optional_params":["collectible","category","year","language","limit","include_population","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Card name, player, set or card number - CGC's own card search.","on_invalid":"reject","example":"charizard base set","aliases":["q","keyword","name"]},{"name":"collectible","type":"enum","required":false,"description":"Limit to one CGC population report (default: all three).","on_invalid":"reject","allowed_values":[{"value":"all","label":"All three reports"},{"value":"tcg","label":"Trading card games (Pokémon, Magic, One Piece, Yu-Gi-Oh!, Lorcana …)"},{"value":"sports","label":"Sports cards (baseball, basketball, football, soccer …)"},{"value":"non_sports","label":"Non-sports cards (Pokémon Topps / Carddass, Marvel, Star Wars, phone cards …)"}],"default":"all","aliases":["type"]},{"name":"category","type":"string","required":false,"description":"Only matches from this game / sport (name, e.g. pokemon, magic, one piece, baseball - or a category_id). An exact name wins; otherwise every category containing the text. Applied to CGC's top matches.","on_invalid":"reject","example":"pokemon","aliases":["game","sport"]},{"name":"year","type":"string","required":false,"description":"Only cards of this year (e.g. 1999, 2024-25).","on_invalid":"reject","example":"1999"},{"name":"language","type":"string","required":false,"description":"Only cards in this language (TCG).","on_invalid":"reject","example":"Japanese"},{"name":"limit","type":"integer","required":false,"description":"Rows to return (CGC answers up to 50 per collectible type).","on_invalid":"reject","default":50,"minimum":1,"maximum":150},{"name":"include_population","type":"boolean","required":false,"description":"Attach the full grade breakdown to the first 10 rows.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, results[]{population_id, name, card_number, year, set_name, subset, variant, rarity, language, manufacturer, is_parallel, collectible, category, category_id, subcategory_id, set_id, label, url, population{…} (with include_population)}, count, capped (true when CGC's 50-per-type cap was reached)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","collectible":"tcg"}},{"name":"card_population","description":"One card's CGC population: how many copies CGC graded at every grade - Perfect 10, Pristine 10, Gem Mint 10, Mint+ 9.5, 9 down to 1, Authentic, Authentic Altered - with total, number of 10s, gem rate and highest grade reached, plus the card's game/sport, series and set.","required_params":["population_id"],"optional_params":["collectible","max_rotations"],"params":[{"name":"population_id","type":"string","required":true,"description":"population_id from search, set_population or cert_lookup (or a population-report URL with ?populationID=).","on_invalid":"reject","example":"470876","aliases":["id","card_id","url"]},{"name":"collectible","type":"enum","required":false,"description":"Report the id belongs to; when omitted all three are tried.","on_invalid":"reject","allowed_values":[{"value":"tcg","label":"Trading card games (Pokémon, Magic, One Piece, Yu-Gi-Oh!, Lorcana …)"},{"value":"sports","label":"Sports cards (baseball, basketball, football, soccer …)"},{"value":"non_sports","label":"Non-sports cards (Pokémon Topps / Carddass, Marvel, Star Wars, phone cards …)"}],"aliases":["type"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"card{population_id, name, card_number, year, variant, description (rarity for TCGs), language, language_id, set_id, collectible, has_autograph / is_parallel (sports), population{total, numeric_graded, by_grade{perfect_10, pristine_10, gem_mint_10, 9.5, 9, 8.5 … 1, authentic, authentic_altered}, grades[]{grade, grade_number, count}, perfect_10, pristine_10, gem_mint_10, ten_total, gem_rate_percent, authentic, authentic_altered, highest_grade{grade, grade_number, count}}, updated_at, url}, category{category_id, name}, subcategory{subcategory_id, name}, set{set_id, name, set_name, population_count, language, year, manufacturer, url}, collectible","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"population_id":"470876"}},{"name":"set_population","description":"Every card CGC has graded from one set, 50 a page, each with its count at every grade (Perfect 10 … 1, Authentic), total, 10s and gem rate - CGC's set population table. Filter by card name or number inside the set.","required_params":["set_id"],"optional_params":["collectible","query","page","max_rotations"],"params":[{"name":"set_id","type":"string","required":true,"description":"set_id from sets, search or cert_lookup (or the set's population-report URL).","on_invalid":"reject","example":"16990","aliases":["group_id","url"]},{"name":"collectible","type":"enum","required":false,"description":"Which CGC population report the id belongs to. Ids are only unique within one type (TCG category 1 is Magic, sports category 1 is Baseball).","on_invalid":"reject","allowed_values":[{"value":"tcg","label":"Trading card games (Pokémon, Magic, One Piece, Yu-Gi-Oh!, Lorcana …)"},{"value":"sports","label":"Sports cards (baseball, basketball, football, soccer …)"},{"value":"non_sports","label":"Non-sports cards (Pokémon Topps / Carddass, Marvel, Star Wars, phone cards …)"}],"default":"tcg","aliases":["type"]},{"name":"query","type":"string","required":false,"description":"Only cards of the set matching this name or number.","on_invalid":"reject","example":"charizard","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Page number; CGC serves 50 rows a page.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"set{set_id, name, set_name, population_count, language, year, manufacturer, url}, category{…}, subcategory{…}, cards[]{population_id, name, card_number, year, variant, description (rarity for TCGs), language, language_id, set_id, collectible, has_autograph / is_parallel (sports), population{total, numeric_graded, by_grade{perfect_10, pristine_10, gem_mint_10, 9.5, 9, 8.5 … 1, authentic, authentic_altered}, grades[]{grade, grade_number, count}, perfect_10, pristine_10, gem_mint_10, ten_total, gem_rate_percent, authentic, authentic_altered, highest_grade{grade, grade_number, count}}, updated_at, url}, count, total_count, page, page_count, has_more","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"set_id":"16990"}},{"name":"sets","description":"The sets CGC files under one series (e.g. Pokémon › Scarlet & Violet, Baseball › 1980s), 50 a page, with how many cards CGC graded from each; TCG sets come per language. Sort by most graded or name, filter by name or language.","required_params":["subcategory_id"],"optional_params":["collectible","query","language","sort","page","max_rotations"],"params":[{"name":"subcategory_id","type":"string","required":true,"description":"subcategory_id from subcategories (a series, era or decade).","on_invalid":"reject","example":"1014","aliases":["series_id","subcategory"]},{"name":"collectible","type":"enum","required":false,"description":"Which CGC population report the id belongs to. Ids are only unique within one type (TCG category 1 is Magic, sports category 1 is Baseball).","on_invalid":"reject","allowed_values":[{"value":"tcg","label":"Trading card games (Pokémon, Magic, One Piece, Yu-Gi-Oh!, Lorcana …)"},{"value":"sports","label":"Sports cards (baseball, basketball, football, soccer …)"},{"value":"non_sports","label":"Non-sports cards (Pokémon Topps / Carddass, Marvel, Star Wars, phone cards …)"}],"default":"tcg","aliases":["type"]},{"name":"query","type":"string","required":false,"description":"Only sets whose name contains this text.","on_invalid":"reject","example":"jungle","aliases":["q","keyword","name"]},{"name":"language","type":"string","required":false,"description":"Only sets in this language (name or language_id; TCG and non-sports).","on_invalid":"reject","example":"Japanese"},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"default","label":"CGC's own order (release order)"},{"value":"most_graded","label":"Most graded first"},{"value":"least_graded","label":"Least graded first"},{"value":"name","label":"Name A to Z"},{"value":"name_desc","label":"Name Z to A"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Page number; CGC serves 50 rows a page.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"category{…}, subcategory{…}, languages[]{language_id, name} (TCG / non-sports), sets[]{set_id, name, set_name, subcategory_id, population_count, language, language_id | year, manufacturer (sports), updated_at, url}, count, total_count, page, page_count, has_more","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"subcategory_id":"1014"}},{"name":"subcategories","description":"The series / eras CGC files under one game or sport (Pokémon: Original Series, Neo, … Scarlet & Violet, Mega Evolution, Promotional; Baseball: 2020-Present, 2010s … Pre-1900), with how many cards CGC graded in each.","required_params":["category"],"optional_params":["collectible","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"Game or sport by name (pokemon, magic, one piece, yu-gi-oh, baseball, soccer …) or category_id from categories.","on_invalid":"reject","example":"pokemon","aliases":["category_id","game","sport"]},{"name":"collectible","type":"enum","required":false,"description":"Needed only with a numeric category_id (default tcg); names are looked up in all three reports.","on_invalid":"reject","allowed_values":[{"value":"tcg","label":"Trading card games (Pokémon, Magic, One Piece, Yu-Gi-Oh!, Lorcana …)"},{"value":"sports","label":"Sports cards (baseball, basketball, football, soccer …)"},{"value":"non_sports","label":"Non-sports cards (Pokémon Topps / Carddass, Marvel, Star Wars, phone cards …)"}],"aliases":["type"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"category{category_id, name, collectible, slug, population_count, description, image_url, url}, subcategories[]{subcategory_id, name, category_id, population_count, image_url, url}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"pokemon"}},{"name":"categories","description":"Every game, sport and non-sports line in CGC's population report with how many cards CGC graded in each (Pokémon ~13 million, One Piece, Magic, Yu-Gi-Oh!, Lorcana and 450+ more TCGs; baseball, basketball, football … ; Pokémon Topps, Marvel, Star Wars, phone cards …), most graded first, plus when CGC last refreshed the report.","required_params":[],"optional_params":["collectible","query","sort","max_rotations"],"params":[{"name":"collectible","type":"enum","required":false,"description":"Limit to one CGC population report (default: all three).","on_invalid":"reject","allowed_values":[{"value":"all","label":"All three reports"},{"value":"tcg","label":"Trading card games (Pokémon, Magic, One Piece, Yu-Gi-Oh!, Lorcana …)"},{"value":"sports","label":"Sports cards (baseball, basketball, football, soccer …)"},{"value":"non_sports","label":"Non-sports cards (Pokémon Topps / Carddass, Marvel, Star Wars, phone cards …)"}],"default":"all","aliases":["type"]},{"name":"query","type":"string","required":false,"description":"Only categories whose name contains this text.","on_invalid":"reject","example":"dragon ball","aliases":["q","name"]},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"most_graded","label":"Most graded first"},{"value":"name","label":"Name A to Z"}],"default":"most_graded"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"categories[]{category_id, name, collectible, slug, population_count, description, image_url, updated_at, url}, count, totals{tcg, sports, non_sports}, population_updated_at","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dragon ball"}},{"name":"grading_scale","description":"CGC Cards' published grading scale: every grade from Pristine 10 to Poor 1 with CGC's definition, the Authentic / Authentic Altered / Authentic ART designations, the autograph grade scale (10 to 5, AU), the legacy-grade key (old Gem Mint 9.5 and Perfect 10 labels) and the telephone-card scale.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"sections[]{scale (standard|telephone_cards), title, intro, items[]{grade, name, code, grade_number, description} | {legacy_grade, current_grade}}, population_columns[]{grade, grade_number, key}, source_url","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"chairish","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Chairish — US vintage & design marketplace (furniture, lighting, rugs, art, decor)","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/chairish/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse Chairish's live US marketplace of vintage, antique and used design. Scope the request with free text, a collection path, a brand/designer storefront or one of the site's own keyword pages, then narrow it with the site's own facets: style label, category code, colour hex, price band, vintage vs newly made, on-sale, ready-to-ship, editorial shelf. Every row carries the price AND the pre-markdown price when the seller has discounted it, the currency, the dealer id with their city and state, the condition, the brand, the colour, the materials and the height/width/depth in inches — the measurements are the question buyers actually ask in this market. Exactly one upstream page per call; the source serves 48 rows per page.\nExactly one of `query`, `category`, `maker` or `keyword` is required: the source serves one scope at a time and combining two returns nothing.\nThe source's own count comes back as `total_available`, with `total_is_capped: true` when it has hit the site's 10,000 ceiling — two capped totals are not comparable and this endpoint says so rather than pretending otherwise.","required_params":[],"optional_params":["query","category","maker","keyword","styles","categories","colors","item_type","on_sale","ready_to_ship","featured","shipping","price_min","price_max","sort","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search across the whole marketplace, exactly as the site's own search box takes it. Exactly one of `query`, `category`, `maker` or `keyword` is required — see the action description.","on_invalid":"reject","example":"eames lounge chair","aliases":["q"]},{"name":"category","type":"string","required":false,"description":"A Chairish collection path: 1-3 lower-case slug segments exactly as they appear after /collection/ in a browse URL — 'rings', 'seating', 'floor-lamps', 'rugs/persian', 'paintings/abstract'. Call the `filters` action for the category tree the site serves. Exactly one of `query`, `category`, `maker` or `keyword` is required.","on_invalid":"reject","example":"floor-lamps","value_pattern":"[a-z0-9\\-/]{2,80}","aliases":["collection"]},{"name":"maker","type":"string","required":false,"description":"A brand or designer storefront slug as it appears after /maker/ — 'herman-miller', 'eames', 'cartier', 'chanel', 'restoration-hardware'. Exactly one of `query`, `category`, `maker` or `keyword` is required.","on_invalid":"reject","example":"herman-miller","aliases":["brand","designer"]},{"name":"keyword","type":"string","required":false,"description":"One of Chairish's own editorial keyword pages, as it appears after /keyword/ — 'landscape-paintings', 'swag-lamps', 'round-rugs', 'tiger-rugs'. Exactly one of `query`, `category`, `maker` or `keyword` is required.","on_invalid":"reject","example":"landscape-paintings"},{"name":"styles","type":"array","required":false,"description":"Style filter. Takes Chairish's own style LABEL, not the URL slug: 'Art Deco', 'Mid-Century Modern', 'Hollywood Regency', 'Victorian', 'Rustic'. Several values are OR-ed. The exact labels a scope serves, with counts, come from the `filters` action — a label the source does not know returns an honest zero, not an error.","on_invalid":"reject","example":["Mid-Century Modern"],"aliases":["style"]},{"name":"categories","type":"array","required":false,"description":"Narrow a scope to one or more Chairish category CODES: 'U' furniture, 'L' lighting, 'D' decor, 'R' fine art, or a deeper code such as 'ART:PAINTINGS' or 'SEATING:OFFICECHAIR'. Codes, labels and counts come from the `filters` action.","on_invalid":"reject","example":["L"]},{"name":"colors","type":"array","required":false,"description":"Colour filter. Takes the site's own 6-digit HEX code, not a colour name: FF0000 red, 0000FF blue, FFFF00 yellow, FFA500 orange, 000000 black. The palette a scope serves, with counts, comes from the `filters` action.","on_invalid":"reject","example":["FF0000"],"value_pattern":"[0-9A-Fa-f]{6}","aliases":["color"]},{"name":"item_type","type":"enum","required":false,"description":"Vintage/antique/pre-owned pieces or newly made ones. Measured bite on /collection/rings within one minute: vintage 7,149 · new 5,644.","on_invalid":"reject","allowed_values":[{"value":"vintage","label":"Vintage, antique or pre-owned"},{"value":"new","label":"Newly made"}],"example":"vintage"},{"name":"on_sale","type":"boolean","required":false,"description":"Only items the seller has marked down (the site's own 'On Sale' facet). Measured bite on /collection/rings: 10,000 (capped) → 1,916.","on_invalid":"reject","example":true},{"name":"ready_to_ship","type":"boolean","required":false,"description":"Only items the site flags 'Ready to Ship', i.e. in stock with no made-to-order lead time.","on_invalid":"reject","example":false},{"name":"featured","type":"enum","required":false,"description":"One of Chairish's own editorial shelves.","on_invalid":"reject","allowed_values":[{"value":"new_arrivals","label":"New Arrivals"},{"value":"a_list","label":"A-List"}],"example":"new_arrivals"},{"name":"shipping","type":"enum","required":false,"description":"Shipping-offer filter as the site publishes it. Measured bite: /collection/accent-chairs 10,000 (capped) → 459 with free_shipping. 🔴 It cannot be combined with `styles`: the source returns MORE rows for the pair than for the style filter alone (1,280 → 2,798), so that combination is refused rather than answered wrongly. It does combine correctly with category, colors, price bands, item_type and on_sale. `free_local_pickup` and `ships_to_my_location` are location-dependent on the site and may not bite, because this endpoint never sends a buyer postal code.","on_invalid":"reject","allowed_values":[{"value":"free_shipping","label":"Free shipping"},{"value":"low_flat_rate","label":"Low flat-rate shipping"},{"value":"free_local_pickup","label":"Free local pickup"},{"value":"ships_to_my_location","label":"Ships to my location"}],"example":"free_shipping"},{"name":"price_min","type":"integer","required":false,"description":"Lowest USD price to include. Sent as the site's own price-range facet.","on_invalid":"reject","example":500,"minimum":0,"maximum":10000000},{"name":"price_max","type":"integer","required":false,"description":"Highest USD price to include. Measured bite on /collection/rings: 10,000 (capped) → 2,566 at price_max=500.","on_invalid":"reject","example":2500,"minimum":0,"maximum":10000000},{"name":"sort","type":"enum","required":false,"description":"Result order. 'curated' is the site's own default ranking.","on_invalid":"reject","allowed_values":[{"value":"curated","label":"Curated (site default)"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"most_favorited","label":"Most favorited"}],"default":"curated","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. The page size is fixed at 48 by the source. Measured ceiling: page 99 answers and page 100 is refused, so 4,752 rows is the reachable window for any one scope — narrow it with filters to reach the rest.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":99},{"name":"max_results","type":"integer","required":false,"description":"How many of the page's rows to return (1-48). The source serves 48 rows per page, so this does not change the upstream cost; use `page` to go further.","on_invalid":"reject","default":48,"example":24,"minimum":1,"maximum":48,"aliases":["limit"]}],"returns":"{scope{kind, value}, source_path, total_available, total_is_capped, total_cap, page, page_size, page_cap, last_page, has_more, filters_applied{}, results[]} — each row: {item_id, url, title, price, currency, price_display, price_unit, price_status, original_price, discount_percent, is_markdown, availability, price_mismatch, quantity, condition, product_state, is_purchasable, is_on_hold, is_made_to_order, is_newly_made, lead_time, category_code, category_path, brand, color, materials[], dimensions_in{height,width,depth}, description, images[], seller_id, seller_url, ships_from_city, ships_from_region, ships_from_country, ships_to_countries[], shipping_type, local_pickup_available, is_promoted, badges[]}. `price` is null — never 0 — when the source publishes no amount, and `price_status` says why.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"floor-lamps","max_results":12}},{"name":"detail","description":"The full listing page for one to five items: the dealer's complete description, every photo, the price with its pre-markdown figure, the condition grade AND the dealer's own condition notes, and the site's whole detail table. That table is per vertical — a chair publishes Number of Seats and Seat Height, a painting publishes Art Subject and Framing, a lamp publishes Lamp Shade — so it is returned whole in `details[]` and projected into `attributes{}`, with period, country of origin, item type, styles, materials, colour, brand and designer promoted to named fields. Includes the dealer's shop handle, display name, city/state, year they joined and the sales band the site prints, plus the schema.org offer block as an independent second witness on the price and the availability.","required_params":["item"],"optional_params":[],"params":[{"name":"item","type":"array","required":true,"description":"One to 5 Chairish item ids (the `item_id` a search row returns, e.g. '35654342'), or full /product/<id>/… listing URLs. Each id is one upstream page fetch.","on_invalid":"reject","example":["35654342"],"aliases":["item_id","product","id","url"]}],"returns":"{requested, found, not_found[]{item_id, reason}, items[]} — each item: {item_id, url, title, price, currency, price_display, price_status, original_price, discount_percent, is_markdown, availability, price_mismatch, condition, condition_grade, condition_notes, category_code, category_path, brand, designer, period, country_of_origin, item_type, styles[], materials[], color, dimensions_display, dimensions_in{height,width,depth}, description, images[], seller{seller_id, slug, name, location, since_year, sales_band}, ships_from_city, ships_from_region, ships_from_country, details[]{label, values[]}, attributes{}, schema_org_offer{price, price_currency, availability, item_condition, price_valid_until}}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item":["35654342"]}},{"name":"seller","description":"One dealer's storefront: who they are (display name, city and state, the year they joined Chairish, the sales band the site prints) and their live inventory with the same row shape as `search`, filterable the same way. Takes the vanity slug from a /shop/<slug> URL or the dealer id a search row returns as `seller_id`. A dealer who exists but currently lists nothing is an answer, not an error: `has_live_inventory` is false and `results` is empty. An unknown handle is NOT_FOUND.","required_params":["seller"],"optional_params":["styles","categories","colors","item_type","on_sale","price_min","price_max","sort","page","max_results"],"params":[{"name":"seller","type":"string","required":true,"description":"A dealer storefront handle exactly as it appears after /shop/ in the URL: either the vanity slug ('ambassador', 'rushhouse') or the dealer id a search row publishes as `seller_id` ('9ny9p3'). Both resolve to the same shop.","on_invalid":"reject","example":"ambassador","aliases":["shop","dealer","seller_id"]},{"name":"styles","type":"array","required":false,"description":"Style filter. Takes Chairish's own style LABEL, not the URL slug: 'Art Deco', 'Mid-Century Modern', 'Hollywood Regency', 'Victorian', 'Rustic'. Several values are OR-ed. The exact labels a scope serves, with counts, come from the `filters` action — a label the source does not know returns an honest zero, not an error.","on_invalid":"reject","example":["Mid-Century Modern"],"aliases":["style"]},{"name":"categories","type":"array","required":false,"description":"Narrow a scope to one or more Chairish category CODES: 'U' furniture, 'L' lighting, 'D' decor, 'R' fine art, or a deeper code such as 'ART:PAINTINGS' or 'SEATING:OFFICECHAIR'. Codes, labels and counts come from the `filters` action.","on_invalid":"reject","example":["L"]},{"name":"colors","type":"array","required":false,"description":"Colour filter. Takes the site's own 6-digit HEX code, not a colour name: FF0000 red, 0000FF blue, FFFF00 yellow, FFA500 orange, 000000 black. The palette a scope serves, with counts, comes from the `filters` action.","on_invalid":"reject","example":["FF0000"],"value_pattern":"[0-9A-Fa-f]{6}","aliases":["color"]},{"name":"item_type","type":"enum","required":false,"description":"Vintage/antique/pre-owned pieces or newly made ones. Measured bite on /collection/rings within one minute: vintage 7,149 · new 5,644.","on_invalid":"reject","allowed_values":[{"value":"vintage","label":"Vintage, antique or pre-owned"},{"value":"new","label":"Newly made"}],"example":"vintage"},{"name":"on_sale","type":"boolean","required":false,"description":"Only items the seller has marked down (the site's own 'On Sale' facet). Measured bite on /collection/rings: 10,000 (capped) → 1,916.","on_invalid":"reject","example":true},{"name":"price_min","type":"integer","required":false,"description":"Lowest USD price to include. Sent as the site's own price-range facet.","on_invalid":"reject","example":500,"minimum":0,"maximum":10000000},{"name":"price_max","type":"integer","required":false,"description":"Highest USD price to include. Measured bite on /collection/rings: 10,000 (capped) → 2,566 at price_max=500.","on_invalid":"reject","example":2500,"minimum":0,"maximum":10000000},{"name":"sort","type":"enum","required":false,"description":"Result order. 'curated' is the site's own default ranking.","on_invalid":"reject","allowed_values":[{"value":"curated","label":"Curated (site default)"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"most_favorited","label":"Most favorited"}],"default":"curated","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. The page size is fixed at 48 by the source. Measured ceiling: page 99 answers and page 100 is refused, so 4,752 rows is the reachable window for any one scope — narrow it with filters to reach the rest.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":99},{"name":"max_results","type":"integer","required":false,"description":"How many of the page's rows to return (1-48). The source serves 48 rows per page, so this does not change the upstream cost; use `page` to go further.","on_invalid":"reject","default":48,"example":24,"minimum":1,"maximum":48,"aliases":["limit"]}],"returns":"{seller{handle, seller_id, name, location, since_year, sales_band, url}, total_available, total_is_capped, total_cap, page, page_size, page_cap, last_page, has_more, has_live_inventory, filters_applied{}, results[]} — rows identical to `search`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"seller":"ambassador","max_results":12}},{"name":"filters","description":"The filter values Chairish itself serves for a scope, with its own counts: the category tree (code, label, count, nested up to three deep), style labels, colour hex codes, price bands, availability, sales, shipping options and the vertical-specific facets (Number of Seats, Art Subject, Art Size, Art Orientation, Lamp Shade). Use it to learn the exact values `search` accepts instead of guessing — a value the source does not know returns an honest zero rather than an error, so guessing is expensive.\n🔴 The site does not serve this list for every scope: measured within one minute, /collection/rings served 17 facets and /collection/seating served none. When that happens `filters_available` is false and `filters` is empty — the endpoint reports the gap instead of implying the scope has no filters. A dealer storefront (`seller`) has served them on every sample.\nTakes the same scope pair as `search`, or a `seller` handle.","required_params":[],"optional_params":["query","category","maker","keyword","seller"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search across the whole marketplace, exactly as the site's own search box takes it. Exactly one of `query`, `category`, `maker` or `keyword` is required — see the action description.","on_invalid":"reject","example":"eames lounge chair","aliases":["q"]},{"name":"category","type":"string","required":false,"description":"A Chairish collection path: 1-3 lower-case slug segments exactly as they appear after /collection/ in a browse URL — 'rings', 'seating', 'floor-lamps', 'rugs/persian', 'paintings/abstract'. Call the `filters` action for the category tree the site serves. Exactly one of `query`, `category`, `maker` or `keyword` is required.","on_invalid":"reject","example":"floor-lamps","value_pattern":"[a-z0-9\\-/]{2,80}","aliases":["collection"]},{"name":"maker","type":"string","required":false,"description":"A brand or designer storefront slug as it appears after /maker/ — 'herman-miller', 'eames', 'cartier', 'chanel', 'restoration-hardware'. Exactly one of `query`, `category`, `maker` or `keyword` is required.","on_invalid":"reject","example":"herman-miller","aliases":["brand","designer"]},{"name":"keyword","type":"string","required":false,"description":"One of Chairish's own editorial keyword pages, as it appears after /keyword/ — 'landscape-paintings', 'swag-lamps', 'round-rugs', 'tiger-rugs'. Exactly one of `query`, `category`, `maker` or `keyword` is required.","on_invalid":"reject","example":"landscape-paintings"},{"name":"seller","type":"string","required":false,"description":"Read the facets of one dealer's storefront instead of a browse scope. Takes the same handle as the `seller` action — the vanity slug or the dealer id.","on_invalid":"reject","example":"ambassador","aliases":["shop","dealer"]}],"returns":"{scope{kind, value}, source_path, total_available, total_is_capped, filters_available, filter_count, filters[]{name, label, value_count, values[]{value, label, count, depth, note, valid_distances, children[]}}} — `name` is exactly the `search` parameter it feeds where one exists: categories, styles, colors, price, misc_sales, misc_availability, misc_featured, shipping_options.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"rings"}}]},{"name":"change-detect","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Change-Detect API — website content monitoring and change detection: noise-resistant content and structural fingerprints, human-readable diffs, batch URL snapshots — stateless building block for SEO, compliance and competitor-watch workflows","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/change-detect/v1","spec_available":true,"actions":[{"name":"snapshot","description":"Fetch a URL and return a noise-resistant fingerprint: content_hash (normalised main content, rotating-token-stripped), structural_hash (DOM skeleton), text_hash, title, meta_description, main_content (boilerplate-stripped), word_count, links[]. Store the returned snapshot/hash and feed it back to diff/monitor_check later.","required_params":["url"],"optional_params":["selector","follow_redirects"],"params":[{"name":"url","type":"string","required":true,"description":"The page to fingerprint. Full URL (https://example.com/page) or bare domain (example.com → https:// assumed). Only http/https; private / internal / cloud-metadata targets are SSRF-blocked. Alias: target.","on_invalid":"reject","example":"https://example.com","aliases":["u","target","link"]},{"name":"selector","type":"string","required":false,"description":"Scope detection to a region instead of the whole page. Accepts a FULL CSS selector ('div.price-box > span.amount', '.product:nth-child(2)', '[data-testid=total]') OR an XPath ('//div[@id=\"price\"]', '//table//tr[2]/td[3]') — lxml-backed. If the selector matches nothing the whole page is used and `selector_matched:false` is reported.","on_invalid":"ignore","example":"#price","aliases":["css","css_selector","xpath","region"]},{"name":"follow_redirects","type":"boolean","required":false,"description":"Follow redirects (http→https, apex→www) before fingerprinting the final URL (default true). Each hop is independently SSRF-validated.","on_invalid":"ignore","default":true,"example":true,"aliases":["follow"]}],"returns":"content_hash, structural_hash, text_hash, title, meta_description, main_content, normalized_text, word_count, links[], link_count, content_type, status, fetched_at, byte_size, likely_js_app, final_url, selector_matched","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://example.com"}},{"name":"diff","description":"Diff a page against a prior baseline (snapshot object OR content_hash OR raw text), or compare two live URLs (url + url2). Returns changed(bool), change_ratio(0..1), change_type(text|structural|both|none), added[]/removed[]/modified[] blocks, and a human summary — all on the NOISE-RESISTANT normalised content.","required_params":["url"],"optional_params":["baseline","url2","selector","mode","follow_redirects"],"params":[{"name":"url","type":"string","required":true,"description":"The page to fingerprint. Full URL (https://example.com/page) or bare domain (example.com → https:// assumed). Only http/https; private / internal / cloud-metadata targets are SSRF-blocked. Alias: target.","on_invalid":"reject","example":"https://example.com","aliases":["u","target","link"]},{"name":"baseline","type":"object","required":false,"description":"The prior state to diff against: a snapshot object returned by a previous `snapshot` call, OR a 64-hex content_hash, OR raw prior text/HTML. (diff needs `baseline` OR `url2`.)","on_invalid":"ignore","example":{"content_hash":"…","normalized_text":"…"},"aliases":["previous","prior","old"]},{"name":"url2","type":"string","required":false,"description":"Second URL — when comparing two live pages (A vs B) instead of a page against a stored baseline. SSRF-guarded like `url`.","on_invalid":"reject","example":"https://example.org","aliases":["b","url_b","compare_url"]},{"name":"selector","type":"string","required":false,"description":"Scope detection to a region instead of the whole page. Accepts a FULL CSS selector ('div.price-box > span.amount', '.product:nth-child(2)', '[data-testid=total]') OR an XPath ('//div[@id=\"price\"]', '//table//tr[2]/td[3]') — lxml-backed. If the selector matches nothing the whole page is used and `selector_matched:false` is reported.","on_invalid":"ignore","example":"#price","aliases":["css","css_selector","xpath","region"]},{"name":"mode","type":"enum","required":false,"description":"What to compare: text (main content, default) | structural (DOM skeleton) | full (both) | links (outbound link set).","on_invalid":"ignore","allowed_values":[{"value":"text","label":"Compare the noise-resistant main-content TEXT (default — detects wording changes)"},{"value":"structural","label":"Compare the DOM tag-skeleton only (detects layout/structure changes)"},{"value":"full","label":"Compare BOTH text and structure (changed if either differs)"},{"value":"links","label":"Compare the set of outbound links only (detects added/removed links)"}],"default":"text","example":"text"},{"name":"follow_redirects","type":"boolean","required":false,"description":"Follow redirects (http→https, apex→www) before fingerprinting the final URL (default true). Each hop is independently SSRF-validated.","on_invalid":"ignore","default":true,"example":true,"aliases":["follow"]}],"returns":"changed, change_ratio, change_type, added[], removed[], modified[], added_count, removed_count, modified_count, structural_changed, summary, current{content_hash,structural_hash,...}, baseline_kind","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://example.com","url2":"https://www.iana.org/help/example-domains"}},{"name":"monitor_check","description":"The stateless half of monitoring: re-fetch the URL and tell you FAST whether it changed since a known hash. Pass baseline_hash (+ optional selector/mode). Returns changed(bool) + current_hash + a short diff_summary — the cheap 'did it change?' path.","required_params":["url","baseline_hash"],"optional_params":["selector","mode","follow_redirects"],"params":[{"name":"url","type":"string","required":true,"description":"The page to fingerprint. Full URL (https://example.com/page) or bare domain (example.com → https:// assumed). Only http/https; private / internal / cloud-metadata targets are SSRF-blocked. Alias: target.","on_invalid":"reject","example":"https://example.com","aliases":["u","target","link"]},{"name":"baseline_hash","type":"string","required":true,"description":"The content_hash (or text_hash) from a prior snapshot. monitor_check re-fetches the URL and tells you, fast, whether it changed since this hash. 64-hex.","on_invalid":"ignore","example":"3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b","aliases":["hash","previous_hash","prev_hash"]},{"name":"selector","type":"string","required":false,"description":"Scope detection to a region instead of the whole page. Accepts a FULL CSS selector ('div.price-box > span.amount', '.product:nth-child(2)', '[data-testid=total]') OR an XPath ('//div[@id=\"price\"]', '//table//tr[2]/td[3]') — lxml-backed. If the selector matches nothing the whole page is used and `selector_matched:false` is reported.","on_invalid":"ignore","example":"#price","aliases":["css","css_selector","xpath","region"]},{"name":"mode","type":"enum","required":false,"description":"What to compare: text (main content, default) | structural (DOM skeleton) | full (both) | links (outbound link set).","on_invalid":"ignore","allowed_values":[{"value":"text","label":"Compare the noise-resistant main-content TEXT (default — detects wording changes)"},{"value":"structural","label":"Compare the DOM tag-skeleton only (detects layout/structure changes)"},{"value":"full","label":"Compare BOTH text and structure (changed if either differs)"},{"value":"links","label":"Compare the set of outbound links only (detects added/removed links)"}],"default":"text","example":"text"},{"name":"follow_redirects","type":"boolean","required":false,"description":"Follow redirects (http→https, apex→www) before fingerprinting the final URL (default true). Each hop is independently SSRF-validated.","on_invalid":"ignore","default":true,"example":true,"aliases":["follow"]}],"returns":"changed, current_hash, baseline_hash, mode, hash_kind, diff_summary, final_url, selector_matched, fetched_at","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://example.com","baseline_hash":"0000000000000000000000000000000000000000000000000000000000000000"}},{"name":"extract","description":"Main-content extraction only — boilerplate (nav/header/footer/ads/cookie/comments) stripped → clean text + structured blocks + links. Useful to feed clean diffs or to get just the article. No fingerprint comparison.","required_params":["url"],"optional_params":["selector","follow_redirects"],"params":[{"name":"url","type":"string","required":true,"description":"The page to fingerprint. Full URL (https://example.com/page) or bare domain (example.com → https:// assumed). Only http/https; private / internal / cloud-metadata targets are SSRF-blocked. Alias: target.","on_invalid":"reject","example":"https://example.com","aliases":["u","target","link"]},{"name":"selector","type":"string","required":false,"description":"Scope detection to a region instead of the whole page. Accepts a FULL CSS selector ('div.price-box > span.amount', '.product:nth-child(2)', '[data-testid=total]') OR an XPath ('//div[@id=\"price\"]', '//table//tr[2]/td[3]') — lxml-backed. If the selector matches nothing the whole page is used and `selector_matched:false` is reported.","on_invalid":"ignore","example":"#price","aliases":["css","css_selector","xpath","region"]},{"name":"follow_redirects","type":"boolean","required":false,"description":"Follow redirects (http→https, apex→www) before fingerprinting the final URL (default true). Each hop is independently SSRF-validated.","on_invalid":"ignore","default":true,"example":true,"aliases":["follow"]}],"returns":"main_content, blocks[], word_count, title, meta_description, links[], link_count, content_hash, content_type, final_url, selector_matched","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://example.com"}},{"name":"batch","description":"Snapshot up to 20 URLs concurrently in one call (each independently SSRF-guarded, shared concurrency). Returns a compact fingerprint per URL.","required_params":["urls"],"optional_params":["selector"],"params":[{"name":"urls","type":"array","required":true,"description":"List of URLs to snapshot in one call (max 20); each is independently SSRF-guarded and fetched concurrently.","on_invalid":"reject","example":["https://example.com","https://example.org"]},{"name":"selector","type":"string","required":false,"description":"Scope detection to a region instead of the whole page. Accepts a FULL CSS selector ('div.price-box > span.amount', '.product:nth-child(2)', '[data-testid=total]') OR an XPath ('//div[@id=\"price\"]', '//table//tr[2]/td[3]') — lxml-backed. If the selector matches nothing the whole page is used and `selector_matched:false` is reported.","on_invalid":"ignore","example":"#price","aliases":["css","css_selector","xpath","region"]}],"returns":"results[] (url, ok, content_hash, structural_hash, text_hash, title, word_count, link_count, likely_js_app | error), count, ok_count","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"urls":["https://example.com","https://www.iana.org/domains/reserved"]}}]},{"name":"che168","category":{"id":"other","title":"Other"},"title":"che168 API — live Chinese used-car market data scraper (二手车之家 / Autohome): search by city, brand, price, year, mileage, gearbox, seller type, fuel and more; full listing detail with price in CNY, mileage in km, registration date, dealer, owner-transfer count, inspection/insurance expiry, every photo, the factory trim spec sheet and the third-party condition/accident report — no API key, no login","version":"1.0.6","pii_redact_default":false,"mint_reusable":null,"base_path":"/che168/v1","spec_available":true,"actions":[{"name":"search","description":"Search che168's live used-car inventory. Filter by city, brand/series (pinyin from `suggest`), vehicle class, price band, registration age, mileage, gearbox, displacement, seller type (private / dealer / certified dealer), body structure, colour, fuel, seats, emission standard, drivetrain, induction and dealer, then sort and page through. Returns a normalized card per car (price in CNY, mileage in km, first-registration month, city, ids, photo, tags). che168 publishes no result total, so `pagination.pages_available` is the page count its own pager offers; it serves at most 100 pages (56 cars each) per filter. `keyword` does a free-text search instead — Chinese text works best, and che168 ignores the other filters in keyword mode.","required_params":[],"optional_params":["city","brand","series","vehicle_class","keyword","min_price","max_price","min_year","max_year","max_mileage_km","min_mileage_km","gearbox","seller_type","displacement","body_type","color","fuel","seats","emission_standard","drivetrain","induction","dealer_id","sort","page","limit"],"params":[{"name":"city","type":"string","required":false,"description":"Market to search: a che168 city pinyin ('beijing', 'shanghai', 'chengdu'), or 'china' for the whole country. Common English and Chinese names are accepted too ('peking', '上海'). Call the `cities` action for the complete live list (372 cities/provinces).","on_invalid":"reject","default":"china","example":"beijing","value_pattern":"[A-Za-z一-鿿]{2,24}","aliases":["area","location","city_pinyin"]},{"name":"brand","type":"string","required":false,"description":"Brand in che168's own pinyin slug ('baoma' = BMW, 'benchi' = Mercedes, 'aodi' = Audi, 'dazhong' = VW). The `brands` action lists all 618 slugs with their Chinese names.","on_invalid":"reject","example":"baoma","aliases":["brand_pinyin","make"]},{"name":"series","type":"string","required":false,"description":"Model series slug, used together with `brand` (e.g. brand=baoma, series=baoma3xi). `brands` with a `brand` argument lists that brand's series slugs.","on_invalid":"reject","example":"baoma3xi","aliases":["series_pinyin","model"]},{"name":"vehicle_class","type":"enum","required":false,"description":"Size/body segment, che168's own taxonomy.","on_invalid":"reject","allowed_values":[{"value":"micro","label":"micro"},{"value":"small","label":"small"},{"value":"compact","label":"compact"},{"value":"midsize","label":"midsize"},{"value":"mid_large","label":"mid large"},{"value":"large","label":"large"},{"value":"mpv","label":"mpv"},{"value":"suv","label":"suv"},{"value":"small_suv","label":"small suv"},{"value":"compact_suv","label":"compact suv"},{"value":"midsize_suv","label":"midsize suv"},{"value":"mid_large_suv","label":"mid large suv"},{"value":"large_suv","label":"large suv"},{"value":"sports","label":"sports"},{"value":"minivan","label":"minivan"},{"value":"pickup","label":"pickup"},{"value":"light_van","label":"light van"}],"aliases":["car_class","segment"]},{"name":"keyword","type":"string","required":false,"description":"Free-text search over che168's inventory (Chinese works best, e.g. '宝马', '奥迪A4L'). Mutually usable with `city`; other filters are ignored by che168 in keyword mode.","on_invalid":"reject","example":"宝马","aliases":["kw","q","query"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum asking price in 万元 (10 000 CNY) — che168's own unit. 5 = 50 000 CNY.","on_invalid":"ignore","example":5,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum asking price in 万元 (10 000 CNY). 20 = 200 000 CNY.","on_invalid":"ignore","example":20,"minimum":0,"aliases":["price_max"]},{"name":"min_year","type":"integer","required":false,"description":"Earliest first-registration year (converted to che168's vehicle-age filter, so it is accurate to the year).","on_invalid":"ignore","minimum":1990,"maximum":2100,"aliases":["year_min"]},{"name":"max_year","type":"integer","required":false,"description":"Latest first-registration year.","on_invalid":"ignore","minimum":1990,"maximum":2100,"aliases":["year_max"]},{"name":"max_mileage_km","type":"integer","required":false,"description":"Mileage ceiling in kilometres. che168 filters in 万公里 (10 000 km) steps, so the value is rounded up to the nearest 10 000 km and the applied value is echoed in meta.filters.","on_invalid":"ignore","example":100000,"minimum":0,"aliases":["mileage_max"]},{"name":"min_mileage_km","type":"integer","required":false,"description":"Mileage floor in kilometres (same 10 000 km step).","on_invalid":"ignore","minimum":0,"aliases":["mileage_min"]},{"name":"gearbox","type":"enum","required":false,"description":"Transmission type.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual (手动)"},{"value":"automatic","label":"Automatic (自动)"}],"aliases":["transmission"]},{"name":"seller_type","type":"array","required":false,"description":"Who is selling. `dealer` and `certified_dealer` both filter (they return disjoint dealer sets). `private` is accepted and che168 answers it with a real, empty result page — measured 0 cars nationwide on 2026-10-11, because its public inventory is dealer-consigned. Combining `private` with another value returns nothing.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealer (商家)"},{"value":"certified_dealer","label":"che168-certified dealer (认证商家)"},{"value":"private","label":"Private owner (个人) — measured 0 results nationwide; che168 lists through dealers"}],"aliases":["source","seller"]},{"name":"displacement","type":"array","required":false,"description":"Engine displacement band in litres.","on_invalid":"reject","allowed_values":[{"value":"<=1.0","label":"1.0 L and under"},{"value":"1.1-1.6","label":"1.1-1.6"},{"value":"1.7-2.0","label":"1.7-2.0"},{"value":"2.1-2.5","label":"2.1-2.5"},{"value":"2.6-3.0","label":"2.6-3.0"},{"value":"3.1-4.0","label":"3.1-4.0"},{"value":">4.0","label":"over 4.0 L"}]},{"name":"body_type","type":"array","required":false,"description":"Body structure.","on_invalid":"reject","allowed_values":[{"value":"hatchback_2box","label":"hatchback 2box"},{"value":"sedan_3box","label":"sedan 3box"},{"value":"liftback","label":"liftback"},{"value":"wagon","label":"wagon"},{"value":"hardtop_convertible","label":"hardtop convertible"},{"value":"soft_convertible","label":"soft convertible"},{"value":"coupe","label":"coupe"},{"value":"bus","label":"bus"},{"value":"truck","label":"truck"}],"aliases":["structure"]},{"name":"color","type":"array","required":false,"description":"Exterior colour group.","on_invalid":"reject","allowed_values":[{"value":"black","label":"black"},{"value":"white","label":"white"},{"value":"silver_grey","label":"silver grey"},{"value":"red_purple","label":"red purple"},{"value":"blue","label":"blue"},{"value":"green","label":"green"},{"value":"yellow_orange","label":"yellow orange"},{"value":"champagne_brown","label":"champagne brown"}]},{"name":"fuel","type":"array","required":false,"description":"Fuel/propulsion type.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"diesel","label":"diesel"},{"value":"hybrid","label":"hybrid"},{"value":"new_energy","label":"new energy"}],"aliases":["fuel_type"]},{"name":"seats","type":"array","required":false,"description":"Seat count.","on_invalid":"reject","allowed_values":[{"value":"2","label":"2"},{"value":"4","label":"4"},{"value":"5","label":"5"},{"value":"6","label":"6"},{"value":"7","label":"7"},{"value":"7+","label":"7+"}]},{"name":"emission_standard","type":"array","required":false,"description":"Emission standard the car meets (China or Euro stage).","on_invalid":"reject","allowed_values":[{"value":"china2","label":"China II"},{"value":"china3","label":"China III"},{"value":"china4","label":"China IV"},{"value":"china5","label":"China V"},{"value":"china6","label":"China VI"},{"value":"euro2","label":"Euro II"},{"value":"euro3","label":"Euro III"},{"value":"euro4","label":"Euro IV"},{"value":"euro5","label":"Euro V"},{"value":"euro6","label":"Euro VI"}],"aliases":["emission"]},{"name":"drivetrain","type":"array","required":false,"description":"Driven wheels.","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"Front-wheel drive (前驱)"},{"value":"rwd","label":"Rear-wheel drive (后驱)"},{"value":"awd","label":"All-wheel drive (四驱)"}]},{"name":"induction","type":"enum","required":false,"description":"Engine induction type.","on_invalid":"reject","allowed_values":[{"value":"naturally_aspirated","label":"Naturally aspirated (自然吸气)"},{"value":"turbo","label":"Turbocharged (涡轮增压)"},{"value":"supercharged","label":"Supercharged (机械增压)"}]},{"name":"dealer_id","type":"integer","required":false,"description":"Restrict to one dealer's inventory (`dealer_id` from `search` or `car_detail`).","on_invalid":"ignore","example":201407,"aliases":["dealerid"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Every option here was verified by reading the ordering che168 actually returned (see the engine's BUILD-LOG). che168's sort bar offers no 'newest car first' — combine `min_year` with `newest` for that.","on_invalid":"reject","allowed_values":[{"value":"default","label":"che168 relevance (default)"},{"value":"newest","label":"Newest listing first (most recently posted)"},{"value":"oldest_listing","label":"Oldest listing first (longest on the market)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"},{"value":"year_asc","label":"Oldest car first (earliest first registration)"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Result page. che168 serves 56 cars per page and stops at page 100, so one filter reaches at most ~5 600 cars — narrow the filter (city, brand, price band) to go deeper.","on_invalid":"ignore","default":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Cap the cards returned from the page (1-56). che168 always renders 56; this only trims the response.","on_invalid":"ignore","default":56,"minimum":1,"maximum":56}],"returns":"results[]{listing_id, url, title, price_cny, price_wan_cny, new_car_price_cny, mileage_km, mileage_wan_km, first_registration, year, city, city_id, brand_id, series_id, spec_id, dealer_id, dealer_note, image, listed_at, tags, is_certified} + pagination{page, per_page, pages_available, has_more} + filters_applied + source_url","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"city":"beijing","limit":20}},{"name":"car_detail","description":"Everything che168 publishes about one listing, merged from its page and three of its JSON endpoints: price (CNY and 万), mileage in km, first-registration month, brand/series/trim ids, dealer name + rating + seller type, owner-transfer count, inspection / insurance / warranty expiry, engine, vehicle class, colour, fuel grade, drivetrain, emission standard, every photo, and che168's own condition grade. The 17-character VIN is NOT published by che168 — `vin` is null and `vehicle_token` carries che168's opaque identifier instead.","required_params":["listing_id"],"optional_params":["include_report","include_photos"],"params":[{"name":"listing_id","type":"integer","required":true,"description":"che168 listing id (`infoid`) — the number in a listing URL `/dealer/<dealer_id>/<listing_id>.html`, returned as `listing_id` by `search`.","on_invalid":"reject","example":59776000,"aliases":["infoid","info_id","car_id","id"]},{"name":"include_report","type":"boolean","required":false,"description":"Also fetch che168's third-party condition/accident report and demand indices (2 extra upstream calls, ~0.5 KB). Most listings have no published report — the response then says `report_published: false`.","on_invalid":"ignore","default":true},{"name":"include_photos","type":"boolean","required":false,"description":"Include the full photo list. Photos come from the listing page itself, so turning this off saves no bandwidth; set it false only to shrink the payload.","on_invalid":"ignore","default":true}],"returns":"car{listing_id, url, title, brand, series, spec_id, price_cny, mileage_km, first_registration, year, city, dealer_name, dealer_rating, seller_type, contact_name, contact_id, owner_transfers, inspection_valid_until, insurance_valid_until, engine, vehicle_class, color, drivetrain, emission_standard, photos[], vin(null), vehicle_token} + condition{report_published, condition_grade, inspection_items[]} + demand{condition_label, demand_index}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":59776000}},{"name":"car_summary","description":"The cheap one-listing lookup: che168's own ~1 KB JSON record for a listing id — title, brand, series, trim id, price, mileage, registration date, city, dealer name + rating + seller type, finance terms, main photo, watch count. Use this instead of `car_detail` when you are enriching thousands of ids and do not need the archive table, photo list or condition report. Returns NOT_FOUND with che168's own wording when a listing has been sold or delisted.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"integer","required":true,"description":"che168 listing id (`infoid`) — the number in a listing URL `/dealer/<dealer_id>/<listing_id>.html`, returned as `listing_id` by `search`.","on_invalid":"reject","example":59776000,"aliases":["infoid","info_id","car_id","id"]}],"returns":"car{listing_id, url, title, brand, series, spec_id, price_cny, mileage_km, first_registration, year, city, dealer_name, dealer_rating, seller_type, down_payment_cny, image, follow_count, listed_at}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":59776000}},{"name":"car_photos","description":"Every photo URL che168 holds for a listing, from its own photo JSON (~3 KB) rather than the 350 KB page. Cheapest way to pull imagery in bulk.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"integer","required":true,"description":"che168 listing id (`infoid`) — the number in a listing URL `/dealer/<dealer_id>/<listing_id>.html`, returned as `listing_id` by `search`.","on_invalid":"reject","example":59776000,"aliases":["infoid","info_id","car_id","id"]}],"returns":"photos[] (absolute https URLs) + photo_count + car{listing_id, title, price_cny, dealer_name, url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":59776000}},{"name":"car_options","description":"The comfort/safety equipment che168 lists for one car (lane keeping, adaptive cruise, 360 camera, heated steering, head-up display, …) as a normalized list with che168's option ids.","required_params":["listing_id"],"optional_params":["spec_id"],"params":[{"name":"listing_id","type":"integer","required":true,"description":"che168 listing id (`infoid`) — the number in a listing URL `/dealer/<dealer_id>/<listing_id>.html`, returned as `listing_id` by `search`.","on_invalid":"reject","example":59776000,"aliases":["infoid","info_id","car_id","id"]},{"name":"spec_id","type":"integer","required":false,"description":"Factory trim id. Optional — che168 resolves the options from the listing id alone; passing it can return a slightly fuller list.","on_invalid":"ignore","example":54727,"aliases":["specid"]}],"returns":"options[]{option_id, name, icon} + option_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":59776000}},{"name":"condition_report","description":"che168's third-party condition and accident report for one listing: overall grade, per-item inspection results (structural damage, flood, fire, major accident), the claim type, report photos and the link to the full report, plus che168's own condition wording and demand indices. Honest-empty: cars che168 has not had inspected return `report_published: false` instead of an invented clean bill of health — measured on 9 listings across three che168 surfaces, all 9 said false, so treat the report as a bonus and the demand block as the reliable part. Pass `vehicle_token` (from `car_detail`) to keep this cheap: che168 validates that token and will not answer without it, so if you omit it we have to load the ~350 KB listing page to read it off.","required_params":["listing_id"],"optional_params":["dealer_id","vehicle_token"],"params":[{"name":"listing_id","type":"integer","required":true,"description":"che168 listing id (`infoid`) — the number in a listing URL `/dealer/<dealer_id>/<listing_id>.html`, returned as `listing_id` by `search`.","on_invalid":"reject","example":59776000,"aliases":["infoid","info_id","car_id","id"]},{"name":"dealer_id","type":"integer","required":false,"description":"Dealer id from `search`/`car_detail`. che168's report endpoint wants it alongside the listing id; omit it and we send 0, which still answers for most listings.","on_invalid":"ignore","example":201407,"aliases":["dealerid"]},{"name":"vehicle_token","type":"string","required":false,"description":"The opaque vehicle token from `car_detail` (`vehicle_token`). Optional.","on_invalid":"ignore","aliases":["vincodeext"]}],"returns":"condition{report_published, condition_grade, condition_score, summary, report_url, claim_type, inspection_items[]{item, abnormal}, config_items[], report_photos[]} + demand{condition_label, demand_index, search_score, watch_score, enquiry_score, preference_share} + vehicle_token (reuse it on later calls)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":59776000}},{"name":"model_specs","description":"The full factory specification sheet for one trim (`spec_id`) straight from Autohome's model database: trim name, manufacturer, MSRP when new, body structure, class, engine, gearbox, fuel, seats and ~15 grouped sections of named parameters. This is the `trim` dimension — pair it with `search`/`car_detail`, which both return `spec_id`.","required_params":["spec_id"],"optional_params":[],"params":[{"name":"spec_id","type":"integer","required":true,"description":"Autohome factory trim id (`specid`) — returned as `spec_id` by `search` and `car_detail`. Identifies the exact model year + trim, not the individual car.","on_invalid":"reject","example":54727,"aliases":["specid","trim_id"]}],"returns":"spec{spec_id, trim_name, manufacturer, msrp_text, msrp_wan_cny, body_type, vehicle_class, engine, gearbox, fuel_type, seats, groups[]{group, items[]{name, value, param_id}}, param_count}","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"spec_id":54727}},{"name":"suggest","description":"Resolve a keyword to che168's own brand/series entries, each with the LIVE number of cars on sale and the real minimum and maximum asking price — a market-size probe in one call ('how many BMW 3-series are for sale in China right now, and in what price band'). It returns che168's numeric `series_id`/`brand_id`, NOT the pinyin slugs `search` filters on: use `brands` for those.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Brand, series or model text. Chinese matches best ('宝马' = BMW, '奥迪A4L'); Latin spellings return fewer matches.","on_invalid":"reject","example":"宝马","aliases":["kw","q","keyword"]}],"returns":"matches[]{keyword, series_id, brand_id, listing_count, min_price_cny, max_price_cny, che168_url} + brand_id + dealer_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"宝马"}},{"name":"dealer_cars","description":"One dealer's whole live inventory on che168, paged. Same normalized card shape as `search`. Use `dealer_id` from any search result or listing detail.","required_params":["dealer_id"],"optional_params":["city","sort","page","limit"],"params":[{"name":"dealer_id","type":"integer","required":true,"description":"che168 dealer id, from `search` or `car_detail`.","on_invalid":"reject","example":201407,"aliases":["dealerid"]},{"name":"city","type":"string","required":false,"description":"Market to search: a che168 city pinyin ('beijing', 'shanghai', 'chengdu'), or 'china' for the whole country. Common English and Chinese names are accepted too ('peking', '上海'). Call the `cities` action for the complete live list (372 cities/provinces).","on_invalid":"reject","default":"china","example":"beijing","value_pattern":"[A-Za-z一-鿿]{2,24}","aliases":["area","location","city_pinyin"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Every option here was verified by reading the ordering che168 actually returned (see the engine's BUILD-LOG). che168's sort bar offers no 'newest car first' — combine `min_year` with `newest` for that.","on_invalid":"reject","allowed_values":[{"value":"default","label":"che168 relevance (default)"},{"value":"newest","label":"Newest listing first (most recently posted)"},{"value":"oldest_listing","label":"Oldest listing first (longest on the market)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"},{"value":"year_asc","label":"Oldest car first (earliest first registration)"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Result page. che168 serves 56 cars per page and stops at page 100, so one filter reaches at most ~5 600 cars — narrow the filter (city, brand, price band) to go deeper.","on_invalid":"ignore","default":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Cap the cards returned (1-56).","on_invalid":"ignore","default":56,"minimum":1,"maximum":56}],"returns":"results[] (same shape as search) + pagination{page, per_page, pages_available, has_more}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"dealer_id":201407}},{"name":"brands","description":"che168's brand catalogue: all 618 brand slugs with their Chinese names. These slugs are what `search`'s `brand` filter takes, and `suggest` does not provide them. Pass `brand` to get that brand's model-series slugs instead (94 for BMW), which `search`'s `series` filter takes.","required_params":[],"optional_params":["brand"],"params":[{"name":"brand","type":"string","required":false,"description":"Brand slug. Given, the action returns that brand's series slugs; omitted, it returns the brand list.","on_invalid":"reject","example":"baoma","aliases":["brand_pinyin","make"]}],"returns":"brands[]{pinyin, name} (no `brand` given) or series[]{pinyin, name, brand_pinyin} + brand (when `brand` is given)","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"baoma"}},{"name":"cities","description":"che168's complete market list — every city and province it sells in, with the area id, the pinyin slug `search` takes and the Chinese name. Read live off the site, so it cannot drift from what `search` accepts.","required_params":[],"optional_params":["near_city_id"],"params":[{"name":"near_city_id","type":"integer","required":false,"description":"Optional che168 city id (e.g. 110100 = Beijing). Adds the neighbouring markets che168 suggests for it, which is how buyers widen a search.","on_invalid":"ignore","example":110100,"aliases":["cid"]}],"returns":"cities[]{area_id, pinyin, name, is_province} + nearby[]{city_id, name, pinyin, province_id, province}","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"near_city_id":110100}}]},{"name":"checkers","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Checkers API — South African grocery prices from checkers.co.za (Sixty60) and shoprite.co.za: price in rand, Xtra Savings card price, multi-buys, price per kg, stock on hand, barcode, categories and stores","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/checkers/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Checkers Sixty60 (or Shoprite) shop for one delivery address: shelf price, was-price, Xtra Savings card price (kept apart from the price), Xtra Savings multi-buy, price per kg for goods sold by weight, stock on hand, brand and barcode per product. `query` or `category_id` is required (either one); `barcode` finds one product by its EAN.","required_params":[],"optional_params":["query","category_id","barcode","latitude","longitude","site","page","page_size","sort","brand","on_promotion"],"params":[{"name":"query","type":"string","required":false,"description":"What to search for, as typed in the site's search box. Search is fuzzy: a nonsense word still returns loose matches. Required unless category_id or barcode is given.","on_invalid":"reject","example":"milk","aliases":["q","keyword","search","term"]},{"name":"category_id","type":"string","required":false,"description":"Category id from the `categories` action. Without a query any level works; together with a query only a top-level department narrows the search.","on_invalid":"reject","example":"67075e27ff987811364007a9","aliases":["category","categoryId","department_id"]},{"name":"barcode","type":"string","required":false,"description":"Find the product with this barcode (EAN, 8-14 digits).","on_invalid":"reject","example":"6001299016158","aliases":["ean","gtin"]},{"name":"latitude","type":"number","required":false,"description":"Delivery address latitude (with longitude). Prices, stock and the assortment are those of the store that delivers there. Without an address the site's own default store is used and the answer says so (store_defaulted: true).","on_invalid":"reject","example":-29.8587,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Delivery address longitude (with latitude).","on_invalid":"reject","example":31.0218,"aliases":["lng","lon"]},{"name":"site","type":"enum","required":false,"description":"Which shop of the group: checkers (default) or shoprite. Same catalogue platform, own stores, prices and promotions.","on_invalid":"reject","allowed_values":[{"value":"checkers","label":"checkers.co.za (Checkers Sixty60)"},{"value":"shoprite","label":"shoprite.co.za (Shoprite)"}],"default":"checkers"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-48 (default 24, the site's own page).","on_invalid":"reject","default":24,"minimum":1,"maximum":48,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, written exactly as the `brand` field of a row (case-sensitive: Clover, not clover).","on_invalid":"reject","example":"Clover"},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products on a deal (sale price or Xtra Savings offer).","on_invalid":"reject","default":false,"aliases":["on_sale","deals_only"]}],"returns":"query, category_id, category_path[], barcode, site, store_id, store_defaulted, location{latitude, longitude}, delivery_stores[]{store_id, service_options, distance_km}, total, page, page_size, returned, products[]{rank, product_id, article_number, unit_of_measure, title, brand, price, price_unit ('each' | 'kg'), currency, original_price, savings, on_promotion, member_price (Xtra Savings card price), member_price_program, member_price_basis ('stated' | 'computed_from_amount_off' | 'computed_from_percent_off'), member_price_text, member_price_ends, multi_buy{quantity, price, text, card_required, promotion_id}, promotions[]{promotion_id, promotion_code, text, discount_type, discount_value, member_type, card_required, kind, quantity, deal_price, starts, ends}, sold_by ('unit' | 'weight'), weight_range_g{min, max}, in_stock, stock_on_hand, max_per_order, barcodes[], categories[], rating, review_count, sponsored, requires_over_18, store_id, service_option, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","latitude":-33.9249,"longitude":18.4241}},{"name":"promotions","description":"Only the products on a deal for one delivery address — sale prices and Xtra Savings offers (card price, multi-buys) — inside a search term or a category (one of the two is required).","required_params":[],"optional_params":["query","category_id","latitude","longitude","site","page","page_size","sort","brand"],"params":[{"name":"query","type":"string","required":false,"description":"Deals whose product matches this search (or give category_id).","on_invalid":"reject","example":"coffee","aliases":["q","keyword","search","term"]},{"name":"category_id","type":"string","required":false,"description":"Category id from the `categories` action. Without a query any level works; together with a query only a top-level department narrows the search.","on_invalid":"reject","example":"67075e27ff987811364007a9","aliases":["category","categoryId","department_id"]},{"name":"latitude","type":"number","required":false,"description":"Delivery address latitude (with longitude). Prices, stock and the assortment are those of the store that delivers there. Without an address the site's own default store is used and the answer says so (store_defaulted: true).","on_invalid":"reject","example":-29.8587,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Delivery address longitude (with latitude).","on_invalid":"reject","example":31.0218,"aliases":["lng","lon"]},{"name":"site","type":"enum","required":false,"description":"Which shop of the group: checkers (default) or shoprite. Same catalogue platform, own stores, prices and promotions.","on_invalid":"reject","allowed_values":[{"value":"checkers","label":"checkers.co.za (Checkers Sixty60)"},{"value":"shoprite","label":"shoprite.co.za (Shoprite)"}],"default":"checkers"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-48 (default 24, the site's own page).","on_invalid":"reject","default":24,"minimum":1,"maximum":48,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, written exactly as the `brand` field of a row (case-sensitive: Clover, not clover).","on_invalid":"reject","example":"Clover"}],"returns":"query, category_id, category_path[], site, store_id, store_defaulted, location{latitude, longitude}, delivery_stores[]{store_id, service_options, distance_km}, total, page, page_size, returned, products[]{rank, product_id, article_number, unit_of_measure, title, brand, price, price_unit ('each' | 'kg'), currency, original_price, savings, on_promotion, member_price (Xtra Savings card price), member_price_program, member_price_basis ('stated' | 'computed_from_amount_off' | 'computed_from_percent_off'), member_price_text, member_price_ends, multi_buy{quantity, price, text, card_required, promotion_id}, promotions[]{promotion_id, promotion_code, text, discount_type, discount_value, member_type, card_required, kind, quantity, deal_price, starts, ends}, sold_by ('unit' | 'weight'), weight_range_g{min, max}, in_stock, stock_on_hand, max_per_order, barcodes[], categories[], rating, review_count, sponsored, requires_over_18, store_id, service_option, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk"}},{"name":"product","description":"One product for one delivery address by the `product_id` a search row returns (article number + unit, e.g. 10387741EA) or a product URL: price, was-price, Xtra Savings price and every offer with dates, price per kg and weight range, stock on hand, barcodes, brand, manufacturer, description, attributes (ingredients, nutrition, usage as the site prints them), categories, images.","required_params":["product_id"],"optional_params":["latitude","longitude","site"],"params":[{"name":"product_id","type":"string","required":true,"description":"The `product_id` exactly as a search row returns it (article number + unit: 10387741EA, 10156094PK1, 10796287KG) or a product URL ending in it.","on_invalid":"reject","example":"10387741EA","aliases":["id","code","url","product_url"]},{"name":"latitude","type":"number","required":false,"description":"Delivery address latitude (with longitude). Prices, stock and the assortment are those of the store that delivers there. Without an address the site's own default store is used and the answer says so (store_defaulted: true).","on_invalid":"reject","example":-29.8587,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Delivery address longitude (with latitude).","on_invalid":"reject","example":31.0218,"aliases":["lng","lon"]},{"name":"site","type":"enum","required":false,"description":"Which shop of the group: checkers (default) or shoprite. Same catalogue platform, own stores, prices and promotions.","on_invalid":"reject","allowed_values":[{"value":"checkers","label":"checkers.co.za (Checkers Sixty60)"},{"value":"shoprite","label":"shoprite.co.za (Shoprite)"}],"default":"checkers"}],"returns":"site, store_id, store_defaulted, location, product{product_id, article_number, unit_of_measure, internal_id, title, brand, manufacturer, price, price_unit, currency, original_price, savings, on_promotion, member_price, member_price_program, member_price_basis, member_price_text, member_price_ends, multi_buy{…}, promotions[]{…}, sold_by, weight_range_g, in_stock, stock_on_hand, max_per_order, barcodes[], categories[], category_ids[], description, short_description, attributes[]{name, value}, pack_size, pack_quantity, dimensions, has_alcohol, has_tobacco, requires_over_18, rating, review_count, images[], image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"10413121EA"}},{"name":"categories","description":"The shop's category tree (33 departments, 3 levels) with the ids `search` takes as category_id; or one department's subtree.","required_params":[],"optional_params":["category_id","site"],"params":[{"name":"category_id","type":"string","required":false,"description":"A top-level department id: only its subtree.","on_invalid":"reject","example":"67075e27ff987811364007a9","aliases":["department_id","category"]},{"name":"site","type":"enum","required":false,"description":"Which shop of the group: checkers (default) or shoprite. Same catalogue platform, own stores, prices and promotions.","on_invalid":"reject","allowed_values":[{"value":"checkers","label":"checkers.co.za (Checkers Sixty60)"},{"value":"shoprite","label":"shoprite.co.za (Shoprite)"}],"default":"checkers"}],"returns":"site, departments, total_categories, categories[]{category_id, name, level, parent_id, children[]{…}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"67075e27ff987811364007a9"}},{"name":"stores","description":"Physical stores of the Shoprite group near a point (Checkers, Checkers Hyper, Checkers FX, Shoprite, LiquorShop, MediRite, Petshop Science …): name, brand, address, coordinates, distance, opening hours per day.","required_params":["latitude","longitude"],"optional_params":["radius_km","limit","brand","site"],"params":[{"name":"latitude","type":"number","required":true,"description":"Latitude of the point to search around.","on_invalid":"reject","example":-33.9249,"aliases":["lat"]},{"name":"longitude","type":"number","required":true,"description":"Longitude of the point.","on_invalid":"reject","example":18.4241,"aliases":["lng","lon"]},{"name":"radius_km","type":"integer","required":false,"description":"Search radius in km (1-300, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":300,"aliases":["radius"]},{"name":"limit","type":"integer","required":false,"description":"At most this many stores, nearest first (1-200, default 12).","on_invalid":"reject","default":12,"minimum":1,"maximum":200},{"name":"brand","type":"string","required":false,"description":"Keep only stores whose brand starts with this text (case-insensitive), applied to the nearest `limit` stores.","on_invalid":"reject","example":"Checkers"},{"name":"site","type":"enum","required":false,"description":"Which shop of the group: checkers (default) or shoprite. Same catalogue platform, own stores, prices and promotions.","on_invalid":"reject","allowed_values":[{"value":"checkers","label":"checkers.co.za (Checkers Sixty60)"},{"value":"shoprite","label":"shoprite.co.za (Shoprite)"}],"default":"checkers"}],"returns":"site, location{latitude, longitude}, radius_km, returned, brands{brand: count}, stores[]{store_id, name, brand, pos_site_code, address, latitude, longitude, distance_km, hours{monday … sunday: 'HH:MM-HH:MM' | null}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"latitude":-33.9249,"longitude":18.4241}}]},{"name":"chemist-warehouse","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Chemist Warehouse Australia: pharmacy prices, RRP discounts, sale collections, labels and reviews","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/chemist-warehouse/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse the catalogue with category, brand, price, rating and stock filters.","required_params":[],"optional_params":["query","category","brand","min_price","max_price","min_rating","in_stock_only","sort","page","limit","include_facets"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. Empty with a category or brand browses that range.","on_invalid":"reject","example":"vitamin d","aliases":["q"]},{"name":"category","type":"string","required":false,"description":"Exact category or collection name as the site names it (see categories / collections).","on_invalid":"reject","example":"Vitamins & Supplements"},{"name":"brand","type":"string","required":false,"description":"Exact brand name (see brands).","on_invalid":"reject","example":"Swisse"},{"name":"min_price","type":"number","required":false,"description":"Minimum price in AUD.","on_invalid":"reject","example":5,"minimum":0,"maximum":100000},{"name":"max_price","type":"number","required":false,"description":"Maximum price in AUD.","on_invalid":"reject","example":30,"minimum":0,"maximum":100000},{"name":"min_rating","type":"number","required":false,"description":"Minimum average review rating (0-5).","on_invalid":"reject","example":4.5,"minimum":0,"maximum":5},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only products the site lists as in stock online.","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Source ordering (the site's own sort indices).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"rating_desc","label":"rating_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. page x limit must stay inside the source 1,000-product window.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Products per page (the source serves up to 1,000 in one call).","on_invalid":"reject","default":24,"minimum":1,"maximum":1000},{"name":"include_facets","type":"boolean","required":false,"description":"Also return brand, category and price-band counts for the result set.","on_invalid":"reject","default":false}],"returns":"Products with AUD price, RRP, discount %, deal badges, rating, stock, schedule and URL; pagination inside the 1,000-product source window.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"vitamin d","limit":12}},{"name":"deals","description":"List a sale collection: Clearance (default) or a current Collections sale.","required_params":[],"optional_params":["collection","brand","min_price","max_price","min_rating","in_stock_only","sort","page","limit","include_facets"],"params":[{"name":"collection","type":"string","required":false,"description":"Sale collection name from collections. Default: Clearance.","on_invalid":"reject","default":"Clearance","example":"Big Cosmetics Sale"},{"name":"brand","type":"string","required":false,"description":"Exact brand name (see brands).","on_invalid":"reject","example":"Swisse"},{"name":"min_price","type":"number","required":false,"description":"Minimum price in AUD.","on_invalid":"reject","example":5,"minimum":0,"maximum":100000},{"name":"max_price","type":"number","required":false,"description":"Maximum price in AUD.","on_invalid":"reject","example":30,"minimum":0,"maximum":100000},{"name":"min_rating","type":"number","required":false,"description":"Minimum average review rating (0-5).","on_invalid":"reject","example":4.5,"minimum":0,"maximum":5},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only products the site lists as in stock online.","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Source ordering (the site's own sort indices).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"rating_desc","label":"rating_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. page x limit must stay inside the source 1,000-product window.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Products per page (the source serves up to 1,000 in one call).","on_invalid":"reject","default":24,"minimum":1,"maximum":1000},{"name":"include_facets","type":"boolean","required":false,"description":"Also return brand, category and price-band counts for the result set.","on_invalid":"reject","default":false}],"returns":"The collection products with price, RRP and discount %, plus the resolved collection.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"collection":"Big Cosmetics Sale"}},{"name":"collections","description":"List the current sale collections and their product counts.","required_params":[],"optional_params":[],"params":[],"returns":"Clearance and Collections sale names with counts; use the name as deals collection.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}},{"name":"categories","description":"Category names that work as the search category filter, with product counts, plus the site menu.","required_params":[],"optional_params":[],"params":[],"returns":"categories[] (exact filter names and counts) and menu[] (site labels, ids, URLs; search_name set where a label is also a filter name).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"brands","description":"Find brands by name prefix, or list the largest brands.","required_params":[],"optional_params":["query","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Brand name prefix; empty lists the largest brands.","on_invalid":"reject","example":"black"},{"name":"limit","type":"integer","required":false,"description":"Brands to return.","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"Brand names with product counts.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"black"}},{"name":"product/detail","description":"The full public product record and label.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Numeric sku from search, or a chemistwarehouse.com.au/buy/<id>/<slug> URL.","on_invalid":"reject","example":"2683973","aliases":["sku","url"]}],"returns":"Identity, prices, RRP, badges, description, ingredients, directions, warnings, schedule, dimensions, images.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"2683973"}},{"name":"product/reviews","description":"Customer reviews for one product.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Numeric sku from search, or a chemistwarehouse.com.au/buy/<id>/<slug> URL.","on_invalid":"reject","example":"2683973","aliases":["sku","url"]},{"name":"sort","type":"enum","required":false,"description":"Review ordering, as the site offers it.","on_invalid":"reject","allowed_values":[{"value":"Helpfulness:desc","label":"Helpfulness:desc"},{"value":"rating:desc","label":"rating:desc"},{"value":"rating:asc","label":"rating:asc"},{"value":"createdAt:desc","label":"createdAt:desc"}],"default":"Helpfulness:desc"},{"name":"offset","type":"integer","required":false,"description":"Reviews to skip.","on_invalid":"reject","default":0,"minimum":0,"maximum":100000},{"name":"limit","type":"integer","required":false,"description":"Reviews per page (source accepts up to 50 as measured).","on_invalid":"reject","default":20,"minimum":1,"maximum":50}],"returns":"Reviews with rating, title, text, author, date, helpful votes, incentivised flag; rating statistics and total.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"2683973"}}]},{"name":"chollometro","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Chollometro API — deals from www.chollometro.com (Spain) as JSON: search the community's deals by keyword with sort (relevance, newest, hottest, price, discussed), temperature, price, date and category filters; the trending, new, hottest and discussion feeds; every deal in full (price, comparison price, discount, merchant, voucher code, shipping, temperature, comments, expiry, description); the comments of a deal; and the category list. Prices in EUR. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/chollometro/v1","spec_available":true,"actions":[{"name":"search","description":"Search Chollometro deals by keyword. Sort by relevance, newest, hottest, price or latest comment; filter by temperature, price, posting date, category, expired and local deals. 30 deals a page.","required_params":["query"],"optional_params":["sort","time_frame","min_temperature","max_temperature","min_price","max_price","group_id","hide_expired","hide_local","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search Chollometro deal titles and voucher codes for.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default for a search)"},{"value":"new","label":"Newest first"},{"value":"hot","label":"Hottest first (highest temperature)"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"discussed","label":"Most recently commented"}],"default":"relevance","example":"hot","aliases":["sort_by","order"]},{"name":"time_frame","type":"enum","required":false,"description":"How far back to search by posting date. The site searches the last 365 days unless told otherwise.","on_invalid":"reject","allowed_values":[{"value":"last_year","label":"Posted in the last 365 days (the site's default)"},{"value":"last_30_days","label":"Last 30 days"},{"value":"last_7_days","label":"Last 7 days"},{"value":"all_time","label":"No date limit"}],"default":"last_year","example":"last_30_days","aliases":["period","posted_within"]},{"name":"min_temperature","type":"integer","required":false,"description":"Only deals at or above this temperature (degrees; the site's own steps are 20, 100 and 500, any whole number works).","on_invalid":"reject","example":100,"minimum":-100000,"maximum":100000,"aliases":["temperature_from","min_temp"]},{"name":"max_temperature","type":"integer","required":false,"description":"Only deals at or below this temperature.","on_invalid":"reject","example":600,"minimum":-100000,"maximum":100000,"aliases":["temperature_to","max_temp"]},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price, in EUR.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price, in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max","price_to"]},{"name":"group_id","type":"string","required":false,"description":"Only one category: a categories row's group_id (or a row's group.group_id).","on_invalid":"reject","example":"14","value_pattern":"\\d{1,12}","aliases":["category_id"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked as expired.","on_invalid":"reject","default":false,"example":true},{"name":"hide_local","type":"boolean","required":false,"description":"Leave out in-store-only (local) deals.","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: total, page, last_page, has_more, filters_applied, suggestions_dropped (a search with no result: the site's filler deals are not returned).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","sort":"new"}},{"name":"deals","description":"The Chollometro feeds: trending (heating up now), new (every new post), hottest (the hottest of the period) and community discussions. 30 a page.","required_params":[],"optional_params":["list","page"],"params":[{"name":"list","type":"enum","required":false,"description":"Which Chollometro feed.","on_invalid":"reject","allowed_values":[{"value":"trending","label":"What is heating up now (the site's 'hot' tab)"},{"value":"new","label":"Newest posts first"},{"value":"hottest","label":"The hottest deals of the current period"},{"value":"discussions","label":"Community discussion threads"}],"default":"trending","example":"new","aliases":["feed","tab"]},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: list, total, total_capped (the feeds report 10000 = a cap), page, last_page, has_more, pinned_rows.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"list":"new"}},{"name":"category_deals","description":"The deals of one Chollometro category, hottest or newest first. The category page's own view hides expired deals and starts at a temperature floor (100° or 180° depending on the site); hide_expired / min_temperature change that and meta.applied_view shows what the page applied.","required_params":["group_slug"],"optional_params":["sort","min_temperature","hide_expired","page"],"params":[{"name":"group_slug","type":"string","required":true,"description":"Category slug: a categories row's group_slug (or a row's group.group_slug), e.g. electronica, consolas-y-videojuegos, viajes-y-ocio.","on_invalid":"reject","example":"electronica","value_pattern":"[a-z0-9][a-z0-9\\-]{0,100}","aliases":["category","group"]},{"name":"sort","type":"enum","required":false,"description":"Order of the category's deals.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hottest first (the category page's default)"},{"value":"new","label":"Newest first"},{"value":"discussed","label":"Most recently commented"}],"default":"hot","example":"new","aliases":["sort_by"]},{"name":"min_temperature","type":"integer","required":false,"description":"Temperature floor. The category page has its own default floor (100° on most sites); meta.applied_view shows what the page applied.","on_invalid":"reject","example":0,"minimum":-100000,"maximum":100000,"aliases":["temperature_from"]},{"name":"hide_expired","type":"boolean","required":false,"description":"The category page hides expired deals by default; false shows them.","on_invalid":"reject","example":false},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: group_slug, sort, applied_view{sort, min_temperature, hide_expired}, total, total_capped, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group_slug":"electronica"}},{"name":"deal","description":"One deal in full by its id: price (0 = free, null = no price), the price as the site prints it, comparison price and discount, merchant, voucher code, shipping, temperature, status and expiry, every category it is in, the poster, the outbound link, images and the full description.","required_params":["deal_id"],"optional_params":[],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (1777210); a www.chollometro.com deal URL also works.","on_invalid":"reject","example":"1777210","aliases":["id","thread_id","url"]}],"returns":"deal{deal_id, type, title, url, share_url, visit_url, status, is_expired, is_hot, is_new, is_local, is_exclusive, nsfw, temperature, temperature_level, price, is_free, price_display, next_best_price, discount_pct, source_discount_pct, price_discount, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant, link_host, group, groups[], comment_count, posted_by, published_at, created_at, updated_at, starts_at, expires_at, dispatched_from{name, country}, is_national, regions, locations, image_url, images[], description, description_html}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"1777210"}},{"name":"comments","description":"The comments of one deal, in the site's own order (most helpful first), with author, time, reactions and reply links.","required_params":["deal_id"],"optional_params":["limit","page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (1777210); a www.chollometro.com deal URL also works.","on_invalid":"reject","example":"1777210","aliases":["id","thread_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Comments per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Comment page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"rows[]: comment_id, deal_id, url, text, html, user{user_id, username}, created_at, reactions{like, funny, helpful…}, is_reply, main_comment_id, parent_comment_id, is_pinned, popular, was_edited, status. meta: total, page, last_page, has_more, order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"1777210"}},{"name":"categories","description":"The Chollometro category list: every main category with its id, slug, deal count and its community-favourite subcategories. group_id goes to search, group_slug to category_deals.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: group_id, name, group_slug, url, deal_count, subcategories[{group_id, name, group_slug}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"chotot","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Chợ Tốt API scraper — Vietnam's largest classifieds marketplace: keyword/category search across goods, vehicles and property with province, district, price, seller-type and sale-vs-rent filters, full listing detail with the vertical's own attributes, plus live category and region resolvers — vi-VN, prices in đồng, no API key required","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/chotot/v1","spec_available":true,"actions":[{"name":"search","description":"Search Chợ Tốt listings by keyword and/or category, narrowed by province, district, ward, price range, sale-vs-rent and seller type, sorted by date, price or relevance. Works across every vertical — second-hand goods, vehicles and property — and returns up to 50 rows a page with the price both as an integer in đồng and as the string the site prints, plus that vertical's own attribute rows.","required_params":[],"optional_params":["q","category","region","area","ward","price_min","price_max","ad_type","seller_type","sort","limit","page","offset"],"params":[{"name":"q","type":"string","required":false,"description":"Free-text keyword, Vietnamese or English ('iphone', 'xe máy honda', 'căn hộ quận 7'). Optional: leave it out and pass `category` to browse a whole section. At least one of `q` or `category` is required.","on_invalid":"ignore","example":"iphone","aliases":["query","keyword"]},{"name":"category","type":"integer","required":false,"description":"Chợ Tốt category id — a top-level group (1000 property, 2000 vehicles, 5000 electronics…) or a leaf (5010 mobile phones, 1020 houses, 2010 cars, 2020 motorbikes). Call the `categories` action for the full live tree.","on_invalid":"ignore","example":5010,"aliases":["category_id","cg"]},{"name":"region","type":"integer","required":false,"description":"Province/city id (13000 = TP Hồ Chí Minh, 12000 = Hà Nội). The `regions` action lists all 63 with their districts.","on_invalid":"ignore","example":13000,"aliases":["region_id"]},{"name":"area","type":"integer","required":false,"description":"District id inside the chosen region (13096 = Quận 1). Take it from the `regions` action; pass `region` with it.","on_invalid":"ignore","example":13096,"aliases":["area_id"]},{"name":"ward","type":"integer","required":false,"description":"Ward id — the narrowest level below a district, when you have one from a listing's own ward.","on_invalid":"ignore","example":0,"aliases":["ward_id"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in Vietnamese đồng (1000000 = 1.000.000 đ ≈ 1 triệu). Property prices run into the tỷ (10^9).","on_invalid":"ignore","example":1000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in Vietnamese đồng.","on_invalid":"ignore","example":3000000,"minimum":0},{"name":"ad_type","type":"enum","required":false,"description":"Sale listings or rental listings. Only meaningful in categories that have both (property, some services); each returned row echoes its own `ad_type`.","on_invalid":"ignore","allowed_values":[{"value":"sell","label":"For sale / offered (type s,k)"},{"value":"rent","label":"For rent / offered for rent (type u,h)"}],"example":"sell"},{"name":"seller_type","type":"enum","required":false,"description":"Restrict to private individuals or to professional sellers/shops.","on_invalid":"ignore","allowed_values":[{"value":"private","label":"Private individual (Cá nhân)"},{"value":"pro","label":"Professional / shop (Bán chuyên)"}],"example":"private"},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Defaults to relevance when `q` is given, newest otherwise — exactly like the site.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Newest first (site default when no keyword)"},{"value":"relevance","label":"Most relevant (site default when a keyword is given)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"example":"newest"},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-50. Chợ Tốt itself refuses more than 50.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page. Chợ Tốt is a live feed: under relevance ordering consecutive pages repeat about one row in twenty, and more the longer you wait between calls. Sort by `newest` when you are walking every page and want them disjoint.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"offset","type":"integer","required":false,"description":"Row offset, if you would rather skip a precise number of rows than count pages. Overrides `page` when given.","on_invalid":"ignore","example":0,"minimum":0}],"returns":"listings[]{ad_id, list_id, url, title, description, price, price_string, price_valid, currency, ad_type, category_id, category_name, region_id, region_name, area_id, area_name, ward_name, posted_at, posted_relative, image, images[], image_count, video_count, is_promoted, seller{account_id, name, shop_id, is_shop_verified, is_official_store, rating, rating_count, avatar}, phone (as published; Chợ Tốt masks its tail), phone_hidden, latitude, longitude, attributes[]{id, label, value}} + meta{total, total_is_capped, page, limit, offset, has_more, next_page, filters_applied[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"iphone","category":5010}},{"name":"detail","description":"One listing in full by `ad_id` (or by its chotot.com address): title, body text, price in đồng plus the printed price string, category, province/district/ward, posting time, the whole image gallery, the public seller profile, and the complete attribute set for that vertical — capacity and warranty for a phone, rooms and direction for a house, year, mileage, fuel and gearbox for a car.","required_params":[],"optional_params":["ad_id","url"],"params":[{"name":"ad_id","type":"integer","required":false,"description":"Chợ Tốt ad id — the `ad_id` of a search result. This is NOT the number in the listing's web address; pass that one as `url` instead.","on_invalid":"reject","example":179124516,"aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Full chotot.com listing address. The number in the address is the `list_id`, which the engine resolves to the `ad_id` for you (one extra lookup). Use `ad_id` directly when you already have it.","on_invalid":"ignore","example":"https://www.chotot.com/mua-ban-dien-thoai-quan-1-tp-ho-chi-minh/134990763.htm"}],"returns":"listing{ad_id, list_id, url, title, description, price, price_string, price_valid, currency, ad_type, category_id, category_name, region_id, region_name, area_id, area_name, ward_name, posted_at, image, images[], seller{...}, phone, phone_hidden, latitude, longitude, attributes[]{id, label, value} (address rows included)}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.chotot.com/mua-ban-dien-thoai-quan-1-tp-ho-chi-minh/134990763.htm"}},{"name":"categories","description":"The live Chợ Tốt category tree — 14 top-level groups (property, vehicles, electronics, home & living, jobs, pets, services…) with their leaf categories and the ad types each one supports. Use it to get the `category` id that `search` needs.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{category_id, name, subcategories[]{category_id, name, slug, ad_types[]}} + meta{total}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"regions","description":"The live Vietnamese province/city list (63 entries) with every district inside each one. Use it to get the `region` and `area` ids that `search` filters on.","required_params":[],"optional_params":["region"],"params":[{"name":"region","type":"integer","required":false,"description":"Return only this province/city and its districts. Omit for all 63.","on_invalid":"ignore","example":13000,"aliases":["region_id"]}],"returns":"regions[]{region_id, name, areas[]{area_id, name}} + meta{total}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"region":13000}}]},{"name":"chrono24","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Chrono24 API — luxury watch marketplace scraper: search pre-owned and new watches by brand, model or keyword with price, condition, year, movement and sort filters, plus full watch detail (reference number, movement, case material, case diameter, year, condition, dial, seller location, price and images) and brand/model browse from chrono24.com — no API key required","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/chrono24/v1","spec_available":true,"actions":[{"name":"search","description":"Search Chrono24 by free-text keyword (brand + model + reference, e.g. 'rolex submariner', 'omega speedmaster 3861'). Optional filters: price_min/price_max, condition (new/used), movement, year, sort. Paginated (~60/page). Returns every listing card the page shows with title, price, currency, availability, image, url, shipping and seller country. 'Price on request' listings are included with price=null and price_on_request=true.","required_params":["query"],"optional_params":["page","price_min","price_max","condition","movement","year","sort"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for — brand, model and/or reference number ('rolex submariner', 'patek nautilus 5711', 'omega 3861').","on_invalid":"reject","example":"rolex submariner","aliases":["q","keyword","text"]},{"name":"page","type":"integer","required":false,"description":"Result page (~60 listings per page). Page until meta.pagination.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"price_min","type":"integer","required":false,"description":"Minimum price filter (in the listing currency, USD).","on_invalid":"ignore","example":2000,"minimum":0,"aliases":["priceFrom"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price filter (in the listing currency, USD).","on_invalid":"ignore","example":15000,"minimum":0,"aliases":["priceTo"]},{"name":"condition","type":"enum","required":false,"description":"Filter by watch condition.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"New / unworn"},{"value":"used","label":"Pre-owned / used"},{"value":"incomplete","label":"Incomplete (parts only)"}]},{"name":"movement","type":"enum","required":false,"description":"Filter by movement type.","on_invalid":"ignore","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual winding"},{"value":"quartz","label":"Quartz"}]},{"name":"year","type":"integer","required":false,"description":"Filter to watches produced in this year.","on_invalid":"ignore","example":2020,"minimum":1900,"maximum":2030},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance (default ranking)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"newest","label":"Newest listings first"}],"default":"relevance"}],"returns":"listings[]{listing_id, title, price, currency, url, image, availability, price_on_request, shipping, seller_type, seller_location, seller_country, promoted} + aggregate{low_price, high_price, total_results, listings_on_page, price_on_request_on_page} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"rolex submariner"}},{"name":"browse","description":"Browse all listings for a brand (e.g. brand='rolex') or a brand+model (brand='omega', model='speedmaster'). Same filters and paginated card shape as search — the catalog-discovery surface for a whole brand or model family.","required_params":["brand"],"optional_params":["model","page","price_min","price_max","condition","movement","year","sort"],"params":[{"name":"brand","type":"string","required":true,"description":"Watch brand to browse (rolex, omega, patek-philippe, audemars-piguet, tudor, cartier, ...).","on_invalid":"reject","example":"rolex","aliases":["manufacturer"]},{"name":"model","type":"string","required":false,"description":"Optional model/family within the brand (submariner, speedmaster, nautilus, ...).","on_invalid":"ignore","example":"datejust","aliases":["family"]},{"name":"page","type":"integer","required":false,"description":"Result page (~60 listings per page). Page until meta.pagination.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"price_min","type":"integer","required":false,"description":"Minimum price filter (in the listing currency, USD).","on_invalid":"ignore","example":2000,"minimum":0,"aliases":["priceFrom"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price filter (in the listing currency, USD).","on_invalid":"ignore","example":15000,"minimum":0,"aliases":["priceTo"]},{"name":"condition","type":"enum","required":false,"description":"Filter by watch condition.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"New / unworn"},{"value":"used","label":"Pre-owned / used"},{"value":"incomplete","label":"Incomplete (parts only)"}]},{"name":"movement","type":"enum","required":false,"description":"Filter by movement type.","on_invalid":"ignore","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual winding"},{"value":"quartz","label":"Quartz"}]},{"name":"year","type":"integer","required":false,"description":"Filter to watches produced in this year.","on_invalid":"ignore","example":2020,"minimum":1900,"maximum":2030},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance (default ranking)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"newest","label":"Newest listings first"}],"default":"relevance"}],"returns":"listings[]{listing_id, title, price, currency, url, image, availability, price_on_request, shipping, seller_type, seller_location, seller_country, promoted} + aggregate{low_price, high_price, total_results, listings_on_page, price_on_request_on_page}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"omega"}},{"name":"detail","description":"Full watch listing by `url` OR `listing_id`: brand, model, reference number, price, currency, condition (+ condition text), year, movement, case material, case diameter, crystal, strap material, dial, gender, jewels, power reserve, scope of delivery, seller location, delivery estimate, description and all images. A 'Price on request' listing returns price=null and price_on_request=true.","required_params":[],"optional_params":["url","listing_id"],"params":[{"name":"url","type":"string","required":false,"description":"Full Chrono24 listing URL (from a search/browse result).","on_invalid":"ignore","example":"https://www.chrono24.com/omega/seamaster--id45792727.htm","aliases":["listing_url"]},{"name":"listing_id","type":"string","required":false,"description":"Chrono24 listing id (the number in --id<N>.htm). Provide url OR listing_id.","on_invalid":"ignore","example":"45792727","aliases":["id"]}],"returns":"watch{listing_id, title, brand, model, reference_number, price, currency, price_on_request, availability_detail, condition, year, movement, case_material, case_diameter, crystal, strap_material, dial, gender, jewels, power_reserve, scope_of_delivery, seller_location, delivery_estimate, description, images[], url}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.chrono24.com/omega/seamaster--id45792727.htm"}}]},{"name":"cian","category":{"id":"real-estate","title":"Real Estate"},"title":"Cian.ru Russia Real Estate","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/cian/v1","spec_available":true,"actions":[{"name":"search","description":"Search Cian.ru, Russia's largest property portal: flats, rooms, houses, land, townhouses and commercial property, for sale, long-term rent or daily rent, in any region or city. Filters: rooms, new-build/resale, price, area, kitchen, floor, building year, owner-only or developer-only, one agency's ads, metro station with walking time, district, residential complex. Each row carries the printed price, price per m², rent terms (deposit, tenant commission, utilities), rooms, areas, floor, metro with minutes, address, coordinates, photos, the seller and the phone numbers the page publishes. `region` is required.","required_params":["region"],"optional_params":["deal","property_type","rent_term","commercial_type","rooms","building","min_price","max_price","min_area","max_area","min_kitchen_area","min_floor","max_floor","not_first_floor","not_last_floor","min_build_year","max_build_year","seller","user_id","metro","max_walk_minutes","district","newbuilding_id","sort","page","include_pii"],"params":[{"name":"region","type":"string","required":true,"description":"Where to search: a Cian region or city id from `regions` (1 Moscow, 2 Saint Petersburg, 4593 Moscow Oblast, 4588 Leningrad Oblast, 4777 Kazan, 4897 Novosibirsk…) or its exact Russian name (`Казань`), resolved with Cian's own city lookup.","on_invalid":"reject","example":"1","value_pattern":".+"},{"name":"deal","type":"enum","required":false,"description":"sale (default) or rent.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Продажа"},{"value":"rent","label":"Аренда"}],"default":"sale","example":"sale"},{"name":"property_type","type":"enum","required":false,"description":"What kind of property (default flat).","on_invalid":"reject","allowed_values":[{"value":"flat","label":"Квартира (flat / apartment)"},{"value":"room","label":"Комната (room in a shared flat)"},{"value":"house","label":"Дом, дача, коттедж (house)"},{"value":"house_part","label":"Часть дома (part of a house)"},{"value":"land","label":"Участок (land plot)"},{"value":"townhouse","label":"Таунхаус (townhouse)"},{"value":"commercial","label":"Коммерческая недвижимость (commercial)"}],"default":"flat","example":"flat"},{"name":"rent_term","type":"enum","required":false,"description":"deal=rent of a flat, room or house: long-term (default) or daily.","on_invalid":"reject","allowed_values":[{"value":"long","label":"Длительно"},{"value":"daily","label":"Посуточно"}],"example":"long"},{"name":"commercial_type","type":"enum","required":false,"description":"property_type=commercial: which kind.","on_invalid":"reject","allowed_values":[{"value":"office","label":"Офис"},{"value":"retail","label":"Торговая площадь"},{"value":"warehouse","label":"Склад"},{"value":"free_purpose","label":"Помещение свободного назначения"},{"value":"catering","label":"Общепит"},{"value":"garage","label":"Гараж"},{"value":"production","label":"Производство"},{"value":"car_service","label":"Автосервис"},{"value":"business","label":"Готовый бизнес"},{"value":"building","label":"Здание"},{"value":"domestic_services","label":"Бытовые услуги"}],"example":"office"},{"name":"rooms","type":"array","required":false,"description":"Flats: room counts, one or several in ONE call (1, 2, 3, 4, 5, 6 = 6+, studio), e.g. `1,2`.","on_invalid":"reject","allowed_values":[{"value":"1","label":"1"},{"value":"2","label":"2"},{"value":"3","label":"3"},{"value":"4","label":"4"},{"value":"5","label":"5"},{"value":"6","label":"6"},{"value":"studio","label":"studio"}],"example":"1,2"},{"name":"building","type":"enum","required":false,"description":"Flats for sale: new-build or resale.","on_invalid":"reject","allowed_values":[{"value":"secondary","label":"Вторичка"},{"value":"new","label":"Новостройка"}],"example":"new"},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in roubles (sale: total; long rent: per month; daily rent: per day).","on_invalid":"reject","example":10000000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in roubles (same basis as min_price).","on_invalid":"reject","example":20000000,"minimum":0},{"name":"min_area","type":"integer","required":false,"description":"Total area from, m².","on_invalid":"reject","example":40,"minimum":1},{"name":"max_area","type":"integer","required":false,"description":"Total area up to, m².","on_invalid":"reject","example":80,"minimum":1},{"name":"min_kitchen_area","type":"integer","required":false,"description":"Flats: kitchen area from, m².","on_invalid":"reject","example":10,"minimum":1},{"name":"min_floor","type":"integer","required":false,"description":"Floor from.","on_invalid":"reject","example":2},{"name":"max_floor","type":"integer","required":false,"description":"Floor up to.","on_invalid":"reject","example":10},{"name":"not_first_floor","type":"boolean","required":false,"description":"Exclude ground-floor flats.","on_invalid":"reject","example":true},{"name":"not_last_floor","type":"boolean","required":false,"description":"Exclude top-floor flats.","on_invalid":"reject","example":true},{"name":"min_build_year","type":"integer","required":false,"description":"Building year from.","on_invalid":"reject","example":2010},{"name":"max_build_year","type":"integer","required":false,"description":"Building year up to.","on_invalid":"reject","example":2025},{"name":"seller","type":"enum","required":false,"description":"Only ads placed by the owner, or only by developers.","on_invalid":"reject","allowed_values":[{"value":"owner","label":"Собственник"},{"value":"developer","label":"Застройщик"}],"example":"owner"},{"name":"user_id","type":"integer","required":false,"description":"Only ads of one Cian account (an agency, agent or developer) — the `seller.user_id` of any row.","on_invalid":"reject","example":130533658},{"name":"metro","type":"integer","required":false,"description":"One metro station id (from `geo_suggest` or a row's metro[].id), e.g. 8 = Арбатская.","on_invalid":"reject","example":8},{"name":"max_walk_minutes","type":"integer","required":false,"description":"With `metro`: at most this many minutes on foot to it.","on_invalid":"reject","example":10,"minimum":1,"maximum":120},{"name":"district","type":"integer","required":false,"description":"One district / okrug id (from `geo_suggest` or a row's districts[].id), e.g. 13 = Арбат.","on_invalid":"reject","example":13},{"name":"newbuilding_id","type":"integer","required":false,"description":"One residential complex (ЖК) id (from `geo_suggest` or a row's newbuilding.id).","on_invalid":"reject","example":5750446},{"name":"sort","type":"enum","required":false,"description":"Result order. Default is Cian's own ranking, which can repeat an ad across pages; use `newest` to page through a result set.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Цена по возрастанию"},{"value":"price_desc","label":"Цена по убыванию"},{"value":"newest","label":"Сначала новые"},{"value":"area_desc","label":"Площадь по убыванию"},{"value":"price_per_m2_asc","label":"Цена за м² по возрастанию"}],"example":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-54 (up to 28 ads per page; Cian serves at most 1,500 ads per query).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":54},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{region, total, page, page_size, last_page, has_more, sort, filters_applied, duplicates_dropped, listings[]}. Each listing: id, url, category, deal_type, offer_type, title, summary, price_rub, price_text, price_min_rub, price_max_rub, price_per_m2_rub, price_period, price_text_was_placeholder, price_raw{value, unit, period, currency}, currency, sale_type, mortgage_allowed, bargain_allowed, vat_type, vat_rub, deposit_rub, tenant_fee_pct, agent_fee_pct, prepay_months, lease_term, utilities_included, utilities_price_rub, meters_not_included, terms_text, rooms, flat_type, is_studio, is_apartments, is_new_building, total_area_m2, living_area_m2, kitchen_area_m2, min_area_m2, land{area, unit, status}, floor, floors_total, build_year, completion{year, quarter, is_complete}, building_material, decoration, newbuilding{id, name, house, finish, url}, address, address_parts[], districts[], metro[{id, name, minutes, transport, line_color}], lat, lng, description, photos[], photo_count, has_video, published_at, updated_at, added_text, seller{kind, user_id, name, account_type, is_owner, is_developer, is_passport_verified, level, phones[]}, is_top3, is_premium, is_auction, is_unique, mortgage_text.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"region":"1","deal":"sale","property_type":"flat","rooms":"2","sort":"newest"}},{"name":"listing","description":"One Cian ad in full: status (published/deleted), title and full description, the printed price and its raw basis, price per m², the full price-change history with the previous price, rent terms table, rooms, all areas, floor, building year, material, lifts, parking, repair, bathrooms, balconies, amenities, the site's feature table, residential complex, address, metro with minutes, coordinates, all photos and videos, view counter, and the seller (name, agency/developer, account type, ad count, phones). Either `id` or `url` is required.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"Cian ad id exactly as a `search` row gives it (`id`), e.g. 333511998.","on_invalid":"reject","example":"333511998","aliases":["offer_id","cian_id"]},{"name":"url","type":"string","required":false,"description":"Or the ad URL (https://www.cian.ru/sale/flat/<id>/).","on_invalid":"reject","example":"https://www.cian.ru/sale/flat/333511998/"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, url, status, is_active, is_archived, category, deal_type, offer_type, title, description, price_rub, price_text, price_min_rub, price_max_rub, price_per_m2_rub, price_raw{}, deposit_rub, tenant_fee_pct, agent_fee_pct, prepay_months, lease_term, utilities_included, price_history[{at, price, currency, period}], previous_price_rub, price_change_rub, rooms, flat_type, total_area_m2, living_area_m2, kitchen_area_m2, land{}, floor, floors_total, build_year, building_material, ceiling_height_m, passenger_lifts, cargo_lifts, parking, repair, decoration, windows_view, bathrooms_combined, bathrooms_separate, balconies, loggias, amenities[], features[{section, label, value}], rent_terms[{label, value}], newbuilding{}, address, address_parts[], districts[], metro[], lat, lng, photos[], photo_count, videos[], published_at, created_at, edited_at, added_text, views_total, views_today, views_text, is_top3, is_premium, is_unique, seller{kind, user_id, name, company_name, account_type, user_type, is_owner, is_developer, is_passport_verified, offers_count, registered_at, avatar, phones[]}, developer{name, id, description}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"330000000"}},{"name":"regions","description":"Cian's own region and city ids for `search`: the 85 top-level regions, the cities of one region (`region_id`), or a name lookup (`query`).","required_params":[],"optional_params":["query","region_id"],"params":[{"name":"query","type":"string","required":false,"description":"Find cities/regions by name (Russian), e.g. `Казань`. Without query and region_id the 85 top-level regions are listed.","on_invalid":"reject","example":"Казань","aliases":["q","name"]},{"name":"region_id","type":"integer","required":false,"description":"List the cities of this region id, e.g. 4588.","on_invalid":"reject","example":4588}],"returns":"{mode, query, region_id, regions[{id, name, full_name, parent_id, main_town_id, has_metro, has_districts, lat, lng, host}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Казань"}},{"name":"geo_suggest","description":"Cian's own location lookup: type part of a name and get metro stations (with lines), districts, residential complexes (ЖК), cities, roads, railway stations and builders with the ids `search` accepts (`metro`, `district`, `newbuilding_id`).","required_params":["query"],"optional_params":["region","deal","property_type"],"params":[{"name":"query","type":"string","required":true,"description":"Text to look up: a metro station, district, street, residential complex or city, in Russian, e.g. `Арбат`.","on_invalid":"reject","example":"Арбат","aliases":["q"]},{"name":"region","type":"integer","required":false,"description":"Region id to look in (default 1 = Moscow).","on_invalid":"reject","default":1,"example":1},{"name":"deal","type":"enum","required":false,"description":"sale (default) or rent.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Продажа"},{"value":"rent","label":"Аренда"}],"default":"sale","example":"sale"},{"name":"property_type","type":"enum","required":false,"description":"flat (default), suburban or commercial context.","on_invalid":"reject","allowed_values":[{"value":"flat","label":"Квартиры"},{"value":"suburban","label":"Дома и участки"},{"value":"commercial","label":"Коммерческая"}],"default":"flat","example":"flat"}],"returns":"{query, region, metro[{id, name, full_name, lines[]}], districts[], newbuildings[{id, name, address, url}], cities[], roads[], railways[], builders[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Арбат","region":1}}]},{"name":"ciceksepeti","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Çiçeksepeti API scraper — Turkish marketplace (ciceksepeti.com): search flowers, gifts, electronics, fashion and home by keyword or category with price range, free shipping, same-day and sort; read the full product — price, struck price and in-basket price in TRY, stock, variants with their own prices, seller and seller score, rating, specifications, delivery badges; page through reviews; autocomplete. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/ciceksepeti/v1","spec_available":true,"actions":[{"name":"search","description":"Search ciceksepeti.com by keyword, or browse a Çiçeksepeti category, with price range, free shipping, same-day delivery and the site's seven sort orders, 30 products a page. Each row: product id and code, title, URL, image, the price, the struck price or the in-basket price label (kept apart), discount, the site's delivery text and badge, category path, marketplace flag and the search index's rating.","required_params":[],"optional_params":["query","category","page","sort","price_min","price_max","free_shipping","same_day","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search on ciceksepeti.com, in Turkish or brand/model words ('kırmızı gül', 'orkide', 'airpods', 'kupa'). Optional when `category` is given; with `category` it narrows that category.","on_invalid":"reject","example":"kırmızı gül","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"A Çiçeksepeti category to browse: its slug ('kirmizi-gul', 'cep-telefonu', 'kozmetik') or its URL (https://www.ciceksepeti.com/d/kirmizi-gul). search/suggest returns category slugs.","on_invalid":"reject","example":"kirmizi-gul","aliases":["category_url","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Çiçeksepeti serves 30 products per page; `total_pages` says how many exist. A page past the end returns an empty page.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Order of the results — the seven orderings the site itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Çiçeksepeti's recommended order"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Newest first"},{"value":"most_favorited","label":"Most favourited first"},{"value":"most_reviewed","label":"Most reviewed first"},{"value":"best_selling","label":"Best sellers first"}],"default":"relevance"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in Turkish lira (inclusive, whole lira).","on_invalid":"reject","example":500,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in Turkish lira (inclusive, whole lira).","on_invalid":"reject","example":1500,"minimum":0},{"name":"free_shipping","type":"boolean","required":false,"description":"Only products with free shipping (the site's 'Kargo Bedava' filter).","on_invalid":"reject","default":false},{"name":"same_day","type":"boolean","required":false,"description":"Only products the site offers for same-day delivery ('Aynı Gün Teslimat').","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id, product_code, variant_code, title, url, image, price (number, TRY — the price the card shows; for price_type 'basket' this is the in-basket price), price_display, price_type ('discounted' | 'basket' | 'regular'), price_before_discount (struck was-price, price_type 'discounted' only), price_outside_basket (the price before the basket discount, price_type 'basket' only, null when the card shows none), basket_price_label ('Sepet Fiyatı', 'Sepette %6 İndirim'), discount_percent, currency=TRY, search_index_rating, search_index_rating_count (the search index's figures — NOT the product page's; use product/detail for rating and rating_count), rating_scale (5), delivery_text, badge, category_id, category_path[{id, name}], is_marketplace, is_personalized, is_bundle, has_image_reviews}, count, total_results, total_pages, page, page_size (30), has_next_page, delivery_type, page_notice, listing_url","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kırmızı gül"}},{"name":"product/detail","description":"The full Çiçeksepeti product page by URL or product code: title, brand, price, VAT-free price, struck price and discount when shown, in-basket price label, availability and stock of the selected variant, every variant with its own price and availability, images, star rating and count, seller and seller score for marketplace items, category path, breadcrumb, specification table, bouquet contents, description, and the site's delivery / sales badges.","required_params":[],"optional_params":["url","product_code","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"A ciceksepeti.com product URL (…-<code>). Every search row returns one as `url`.","on_invalid":"reject","example":"https://www.ciceksepeti.com/beyaz-buket-kagidinda-20li-kirmizi-gul-buketi-at5418","aliases":["product_url"]},{"name":"product_code","type":"string","required":false,"description":"Alternative to `url`: the product code at the end of the product URL ('kcm74954793', 'at5418'). Every search row returns it as `product_code`.","on_invalid":"reject","example":"kcm74954793","aliases":["code"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, product_code, variant_id, variant_code, title, url, brand, price, price_excluding_vat, price_before_discount (null unless the page shows a struck price), discount_percent, basket_price_label (set when the shown price is the in-basket price), currency=TRY, availability ('in_stock'|'out_of_stock'), in_stock, stock_count (the selected variant's stock; null when the page publishes none, e.g. flowers), stock_variant_code, images[], rating, rating_count, rating_scale (5), seller{id, name, url, rating (Çiçeksepeti seller score), rating_scale (null — no maximum printed)} (null when Çiçeksepeti sells it), sold_by_ciceksepeti, is_marketplace, category_path[], breadcrumb[{name, url}], specifications[{name, value}], contents[] (bouquet contents, e.g. 'Tekli Kırmızı Gül: 20 Adet'), description, variants[{variant_code, variant_id, product_code, is_this_product (false = a sibling product shown as a colour swatch), options{axis: value}, price, price_before_discount, discount_percent, available, is_default, url}] (null when the product has none), has_variants, sales_badges[] (the site's delivery / payment badges, e.g. 'Aynı Gün Ücretsiz Teslimat', '350 TL Üzeri Kargo Bedava'), installment_count}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_code":"at5418"}},{"name":"product/reviews","description":"Written reviews of a Çiçeksepeti product, 20 per call, with the site's six review orders, a star filter and cursor paging: star rating, text, date, reviewer's city and 'helpful' votes. Reviewer names are returned as the site prints them (mostly masked by Çiçeksepeti).","required_params":[],"optional_params":["product_id","product_code","url","sort","rating","cursor","max_rotations"],"params":[{"name":"product_id","type":"integer","required":false,"description":"Alternative to `url`/`product_code`: the numeric product_id a search row or product/detail returns.","on_invalid":"reject","example":97730201,"minimum":1},{"name":"product_code","type":"string","required":false,"description":"Alternative to `url`: the product code at the end of the product URL ('kcm74954793', 'at5418'). Every search row returns it as `product_code`.","on_invalid":"reject","example":"kcm74954793","aliases":["code"]},{"name":"url","type":"string","required":false,"description":"A ciceksepeti.com product URL (…-<code>). Every search row returns one as `url`.","on_invalid":"reject","example":"https://www.ciceksepeti.com/beyaz-buket-kagidinda-20li-kirmizi-gul-buketi-at5418","aliases":["product_url"]},{"name":"sort","type":"enum","required":false,"description":"Order of the reviews — the six orderings the site's review page offers.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"Çiçeksepeti's recommended order"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"rating_desc","label":"Highest rating first"},{"value":"rating_asc","label":"Lowest rating first"},{"value":"most_liked","label":"Most 'helpful' votes first"}],"default":"recommended"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with this many stars (1-5).","on_invalid":"reject","example":1,"minimum":1,"maximum":5},{"name":"cursor","type":"string","required":false,"description":"Paging token: pass the `next_cursor` of the previous response to get the next 20 reviews. Omit for the first page.","on_invalid":"reject"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[{id, rating (1-5), author (as printed, usually site-masked), text, date (YYYY-MM-DD), city, like_count}], count, has_more, next_cursor, product_id, sort, rating_filter","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.ciceksepeti.com/beyaz-buket-kagidinda-20li-kirmizi-gul-buketi-at5418"}},{"name":"search/suggest","description":"Çiçeksepeti's own search autocomplete for a partial keyword: suggested categories with their slug (usable as `category` in search) and the query the site would run.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the user has typed so far (2+ characters).","on_invalid":"reject","example":"gül","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"suggestions[{text, type ('Kategori', …), url, category_slug, query}], count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kırmızı gül"}}]},{"name":"coches","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Coches.net — Spain used-car marketplace","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/coches/v1","spec_available":true,"actions":[{"name":"search","description":"Search Spain's largest used-car marketplace with the site's own filters: free text, make, model, price, year, mileage, power, province, fuel, body type, transmission and seller type, with sorting and paging. Every filter below was measured to change the result total AND to hold on every returned row; filters the source accepts but ignores are deliberately not exposed. Call with no filters to browse the whole live catalogue (268k+ cars on 2026-10-06).","required_params":[],"optional_params":["query","make_id","model_id","price_min","price_max","year_min","year_max","km_min","km_max","hp_min","hp_max","province_id","fuel_type_id","transmission","seller_type","condition","sort","order","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the listing text, e.g. 'gti', 'xdrive', '4x4'. Measured: 268 790 unfiltered -> 2 440 for 'gti'.","on_invalid":"reject","example":"gti","aliases":["q","keywords"]},{"name":"make_id","type":"integer","required":false,"description":"Manufacturer id as published by the site (BMW = 7, AUDI = 4, VOLKSWAGEN = 47). The full list of 166 makes with ids comes from the `reference` action.","on_invalid":"reject","example":7,"minimum":1,"maximum":99999,"aliases":["make"]},{"name":"model_id","type":"integer","required":false,"description":"Model id within the make, from the `reference` action (BMW Serie 1 = 539). Model NAMES are not a filter on this source: passing a name is ignored upstream, so only the id is accepted.","on_invalid":"reject","example":539,"minimum":1,"maximum":999999,"aliases":["model"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum cash asking price in EUR.","on_invalid":"reject","example":5000,"minimum":0,"maximum":10000000},{"name":"price_max","type":"integer","required":false,"description":"Maximum cash asking price in EUR.","on_invalid":"reject","example":20000,"minimum":0,"maximum":10000000},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","example":2024,"minimum":1900,"maximum":2100},{"name":"km_min","type":"integer","required":false,"description":"Minimum odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"maximum":2000000},{"name":"km_max","type":"integer","required":false,"description":"Maximum odometer reading in kilometres.","on_invalid":"reject","example":90000,"minimum":0,"maximum":2000000},{"name":"hp_min","type":"integer","required":false,"description":"Minimum engine power in metric horsepower (CV).","on_invalid":"reject","example":120,"minimum":0,"maximum":3000},{"name":"hp_max","type":"integer","required":false,"description":"Maximum engine power in metric horsepower (CV).","on_invalid":"reject","example":400,"minimum":0,"maximum":3000},{"name":"province_id","type":"integer","required":false,"description":"Spanish province id as the source numbers them (Madrid = 28, Barcelona = 8, Sevilla = 41, Valencia = 46). A dealer can list one car in several provinces, so a row's `province_id` (its main province) may differ; its `province_ids` then contains the requested id. Live ids and their result counts are in `reference.facet_counts.provinceIds`.","on_invalid":"reject","example":28,"minimum":0,"maximum":99,"aliases":["province"]},{"name":"fuel_type_id","type":"integer","required":false,"description":"Fuel type id as the source numbers them (1 = diesel, 2 = petrol, 4 = hybrid/electric). Live ids with counts are in `reference.facet_counts.fuelTypeIds`; every returned row carries both `fuel_type_id` and the printed `fuel` label, and all 35 rows matched on 2026-10-06.","on_invalid":"reject","example":1,"minimum":1,"maximum":20,"aliases":["fuel"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. Measured on BMW: 21 412 unfiltered -> 14 062 automatic.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"}],"example":"automatic"},{"name":"seller_type","type":"enum","required":false,"description":"Who is selling. Measured on BMW: 10 539 professional + 10 875 private = 21 414 of a 21 412 total, and every returned row's `seller_is_professional` matched.","on_invalid":"reject","allowed_values":[{"value":"professional","label":"Dealer / professional seller"},{"value":"private","label":"Private seller"}],"example":"professional"},{"name":"condition","type":"enum","required":false,"description":"Vehicle condition. Measured: no filter returns 268 779 cars (used and nearly-new together); `nearly_new` returns 3 082, and every row came back Km0, dealer demo or dealer management car (Gerencia). Each row also carries `offer_type` and `is_nearly_new` so you can tell them apart yourself.","on_invalid":"reject","allowed_values":[{"value":"any","label":"Used and nearly-new together (default)"},{"value":"nearly_new","label":"Km0 / dealer demo cars only"}],"default":"any","example":"nearly_new"},{"name":"sort","type":"enum","required":false,"description":"Sort field. `relevance` is the site's own default ordering and promoted cars can appear in it.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Site relevance (default)"},{"value":"price","label":"Cash asking price"},{"value":"km","label":"Mileage"},{"value":"year","label":"Model year"},{"value":"hp","label":"Engine power"},{"value":"title","label":"Title"}],"default":"relevance","example":"price"},{"name":"order","type":"enum","required":false,"description":"Sort direction. Ignored when `sort` is `relevance`.","on_invalid":"reject","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"default":"desc","example":"asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. The source publishes `source_total_pages`; a page beyond it still answers, so `page_clamped` is returned to say when you asked past the end.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000},{"name":"limit","type":"integer","required":false,"description":"Rows returned from this page. The source window measured 30-35 rows per page and is variable, so a limit above the window returns the whole window.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":35}],"returns":"results[] with listing_id, url, title, make, make_id, model, model_id, year, mileage_km, price_eur, financed_price_eur, monthly_instalment_eur, currency, includes_taxes, offer_type, offer_type_id, is_nearly_new, fuel, fuel_type_id, body_type_id, power_hp, environmental_label, province, province_id, province_ids (every province the advert is listed in), city, region, seller_is_professional, seller_name, seller_phone, has_warranty, warranty_months, is_certified, is_promoted, published_at, created_at, images[] and image_count; plus source_total, source_total_pages, has_more, page_clamped, window_size, source_filters_applied (the filters the source says it applied) and facet_counts (live result counts per make/fuel/body/province id).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"make_id":7,"province_id":28,"year_min":2020,"km_max":40000,"limit":10}},{"name":"listing","description":"Full detail for one car: everything the search row has plus the seller's full advert text, the VIN where the source publishes a history report, factory specifications (engine, body, consumption), the standard/optional equipment lists, financing terms, the site's own market-average price, and the dealer's name, address, phone, website, rating and stock page. A listing that no longer exists returns NOT_FOUND rather than an empty success.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The numeric id returned by `search` (e.g. 71378787). The full listing URL, or its path, is accepted too — the numeric id resolves used, Km0 and dealer-demo cars alike, so you never have to keep the slug.","on_invalid":"reject","example":"71378787","value_pattern":"[0-9]{5,12}|.*-[0-9]{5,12}-[a-z]{3,6}\\.aspx|https://www\\.coches\\.net/.*","aliases":["id","ad_id","url"]}],"returns":"One object: every search field plus description, version, version_id, vin, colour, transmission, traction, warranty_text, has_official_warranty, price_drop_eur, market_average_price_eur, price_rank_indicator, cash_price_second_witness_eur, price_witness_agrees, financing{}, specifications{body,engine,consumption}, equipment[], views, favourites, vehicle_history_report_url and seller{id,name,is_professional,phone,website, stock_url,address,city,province,postal_code,coordinates,rating_average, rating_count,plan}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"71378787"}},{"name":"reference","description":"The filter vocabulary, read live from the source: all 166 manufacturers with their ids and every model id under them (1 700+ models), the province index, and the live result count behind each make / fuel / body-type / province id. Call this once to translate names into the ids `search` takes.","required_params":[],"optional_params":[],"params":[],"returns":"makes[]{make_id, make, model_count, models[]{model_id, model}}, make_count, model_count, provinces[]{province, slug, url}, facet_counts{makeId, fuelTypeIds, bodyTypeIds, provinceIds, luggageCapacity}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"coles","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Coles API scraper — Coles Supermarkets (Australia) online grocery: search products, read the full product record with shelf price, was-price, half-price and multi-buy specials, unit price, barcode, nutrition panel and country of origin, browse categories and every special. Prices in AUD. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/coles/v1","spec_available":true,"actions":[{"name":"search","description":"Search coles.com.au by keyword. Each product comes with its shelf price, the was-price and saving when on special, the half-price / multi-buy / online-only flags, the unit price per kg, litre or 100 g, availability, brand, size and category path. Sort by price or unit price and filter by brand, special type, dietary and free-from facets. Paid placements are removed unless you ask for them.","required_params":["query"],"optional_params":["page","sort","brand_ids","special","dietary_ids","allergen_ids","include_sponsored","include_alternate_results","store_id","postcode","suburb","state","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it on coles.com.au ('milk', 'tim tam', 'laundry liquid'). Brand names work too.","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Coles returns 48 products per page; read `count`, `total_results` and `page_count` rather than assuming a size.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order. Leave empty for Coles's own order (relevance for search, best sellers for categories, recommended for specials). Only orders Coles actually applies are offered; `sort_applied` is Coles's own confirmation.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"unit_price_asc","label":"Lowest unit price (per kg / L / 100 g) first"}]},{"name":"brand_ids","type":"array","required":false,"description":"Only these brands — Coles brand ids from `filters_available.brands` or a row's `brand.id`. Several ids are OR-ed.","on_invalid":"reject","example":["2780582535"],"aliases":["brand_id"]},{"name":"special","type":"enum","required":false,"description":"Only products on this kind of special.","on_invalid":"reject","allowed_values":[{"value":"half_price","label":"Half-price specials only"},{"value":"multi_buy","label":"Multi-buy specials only (e.g. 2 for $9.40)"},{"value":"online_only","label":"Online-only specials"}]},{"name":"dietary_ids","type":"array","required":false,"description":"Dietary facets (vegan, vegetarian, halal, GMO free …) — ids from `filters_available.dietary`. Several ids are OR-ed.","on_invalid":"reject","example":["1033"]},{"name":"allergen_ids","type":"array","required":false,"description":"Free-from facets (gluten free, lactose free, nut free …) — ids from `filters_available.allergens`.","on_invalid":"reject","example":["9"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid placements. Coles injects them into the first page (they also repeat products that appear further down); true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"include_alternate_results","type":"boolean","required":false,"description":"When nothing matches, Coles shows unrelated fallback products instead. false (default) drops them — `results` stays empty and `alternate_results_dropped` counts them; true returns them separately in `alternate_results`, never in `results`.","on_invalid":"ignore","default":false},{"name":"store_id","type":"string","required":false,"description":"Price everything for one Coles supermarket: its store number from the `stores` action (e.g. '292' = Coles West Leederville, WA). Coles prices differ by store (remote and Northern Territory stores are often 5-9 % dearer, and some specials run only in some stores). Leave empty for Coles's default online prices (store 7674, Melbourne). The store actually applied is returned in `store`.","on_invalid":"reject","example":"292","aliases":["store"]},{"name":"postcode","type":"string","required":false,"description":"Instead of store_id: a 4-digit Australian postcode. The nearest trading Coles supermarket to it is used and returned in `store` (with its distance).","on_invalid":"reject","example":"6000"},{"name":"suburb","type":"string","required":false,"description":"Instead of store_id: a suburb or town name. The nearest Coles supermarket to it is used. When the name exists in several states, add `state` (or use postcode).","on_invalid":"reject","example":"Subiaco"},{"name":"state","type":"enum","required":false,"description":"Only with suburb: the state, to tell apart suburbs with the same name.","on_invalid":"reject","allowed_values":[{"value":"NSW","label":"NSW"},{"value":"VIC","label":"VIC"},{"value":"QLD","label":"QLD"},{"value":"WA","label":"WA"},{"value":"SA","label":"SA"},{"value":"TAS","label":"TAS"},{"value":"ACT","label":"ACT"},{"value":"NT","label":"NT"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string), title (brand + name), name, brand{id,name}, size, category{id,name,level}, breadcrumb[]{id,name,level} (Coles's first listing), category_paths[][] (every category the product is shelved in), url, image, price (number — the shelf price for one item; null when the product is unavailable), price_display, currency=AUD, original_price (the was-price when Coles shows one, else null), original_price_display, discount_percent, save_amount, member_price / member_price_display / member_discount_percent / member_program / member_unit_price (null — Coles publishes no member or Flybuys price), unit_price, unit_price_unit ('1L', '100g', '1kg'), unit_price_display ('$1.65/ 1L'), sold_by ('piece' | 'weight'), price_per ('piece'), price_is_estimate (true on weighed produce: the price is for one item of approximate weight), promotion_type ('special' | 'everyday' | 'new' | 'bonuscollectable' | null), special_type ('percent_off' | 'multi_save' | null), price_description ('1/2 Price', '40% Off', '2 for $9.40'), half_price, online_only_special, multi_buy_offer, multi_buy{min_quantity, unit_price, unit_price_display, unit_measure_price_display}, badges[]{type,text}, availability ('in_stock' | 'unavailable'), in_stock, available_quantity, max_order_quantity, max_promotional_quantity, age_restricted, rating/review_count/rating_scale (null), sponsored}, count, total_results, page, page_size, page_count, sponsored_dropped, sort_applied (Coles's own echo: relevance | best_selling | recommended | price_asc | price_desc | unit_price_asc), alternate_result (true = nothing matched), alternate_results_dropped (Coles's unrelated fallback products, dropped), alternate_results[] (empty unless include_alternate_results=true), did_you_mean[], filters_available{brands[], allergens[], dietary[], specials[]}{id,name,count}, categories[]{id,name,level,slug,count}, query, store{store_id, name, address, suburb, state, postcode, distance_km, chosen_by ('default' | 'store_id' | 'postcode' | 'suburb'), near{suburb,state,postcode}} (the store Coles priced this answer for, confirmed by Coles itself)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk","store_id":"292"}},{"name":"product/detail","description":"The full Coles product record by `product_id` (or product URL): title, brand, size, barcode (GTIN), every image, shelf price, was-price and saving, special and multi-buy details, unit price, availability and order limits, the label (ingredients, allergens, storage and usage instructions), the nutrition panel per serving and per 100 g/ml, country of origin, and the other sizes and varieties of the same product. Add store_id (or postcode / suburb) for one store's price and availability.","required_params":["product_id"],"optional_params":["store_id","postcode","suburb","state","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Coles product id (the number every search row returns as `product_id`), or a coles.com.au product URL.","on_invalid":"reject","example":"9760070","aliases":["id","url"]},{"name":"store_id","type":"string","required":false,"description":"Price everything for one Coles supermarket: its store number from the `stores` action (e.g. '292' = Coles West Leederville, WA). Coles prices differ by store (remote and Northern Territory stores are often 5-9 % dearer, and some specials run only in some stores). Leave empty for Coles's default online prices (store 7674, Melbourne). The store actually applied is returned in `store`.","on_invalid":"reject","example":"292","aliases":["store"]},{"name":"postcode","type":"string","required":false,"description":"Instead of store_id: a 4-digit Australian postcode. The nearest trading Coles supermarket to it is used and returned in `store` (with its distance).","on_invalid":"reject","example":"6000"},{"name":"suburb","type":"string","required":false,"description":"Instead of store_id: a suburb or town name. The nearest Coles supermarket to it is used. When the name exists in several states, add `state` (or use postcode).","on_invalid":"reject","example":"Subiaco"},{"name":"state","type":"enum","required":false,"description":"Only with suburb: the state, to tell apart suburbs with the same name.","on_invalid":"reject","allowed_values":[{"value":"NSW","label":"NSW"},{"value":"VIC","label":"VIC"},{"value":"QLD","label":"QLD"},{"value":"WA","label":"WA"},{"value":"SA","label":"SA"},{"value":"TAS","label":"TAS"},{"value":"ACT","label":"ACT"},{"value":"NT","label":"NT"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id (string), title (brand + name), name, brand{id,name}, size, category{id,name,level}, breadcrumb[]{id,name,level} (Coles's first listing), category_paths[][] (every category the product is shelved in), url, image, price (number — the shelf price for one item; null when the product is unavailable), price_display, currency=AUD, original_price (the was-price when Coles shows one, else null), original_price_display, discount_percent, save_amount, member_price / member_price_display / member_discount_percent / member_program / member_unit_price (null — Coles publishes no member or Flybuys price), unit_price, unit_price_unit ('1L', '100g', '1kg'), unit_price_display ('$1.65/ 1L'), sold_by ('piece' | 'weight'), price_per ('piece'), price_is_estimate (true on weighed produce: the price is for one item of approximate weight), promotion_type ('special' | 'everyday' | 'new' | 'bonuscollectable' | null), special_type ('percent_off' | 'multi_save' | null), price_description ('1/2 Price', '40% Off', '2 for $9.40'), half_price, online_only_special, multi_buy_offer, multi_buy{min_quantity, unit_price, unit_price_display, unit_measure_price_display}, badges[]{type,text}, availability ('in_stock' | 'unavailable'), in_stock, available_quantity, max_order_quantity, max_promotional_quantity, age_restricted, rating/review_count/rating_scale (null), sponsored, barcode, images[], description, specs{label: value}, ingredients, allergen_warning, storage, usage, dimensions, origin, country_of_origin, nutrition{servings_per_package, serving_size, per_serving{}, per_100{}, panels[]}, nutritional_claims[], lifestyle[], minimum_life, variant_count, variants[]{product_id, variant_type ('size' | 'variety'), title, size, price, in_stock, url}, last_updated, store{store_id}}, store{store_id, name, address, suburb, state, postcode, distance_km, chosen_by ('default' | 'store_id' | 'postcode' | 'suburb'), near{suburb,state,postcode}} (the store Coles priced this answer for, confirmed by Coles itself)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"329607","postcode":"0870"}},{"name":"deals","description":"Coles's specials: every product on special, or only half-price, multi-buy or online-only specials, optionally within one category. Same rows, sorting and brand filter as search.","required_params":[],"optional_params":["type","category","page","sort","brand_ids","include_sponsored","store_id","postcode","suburb","state","max_rotations"],"params":[{"name":"type","type":"enum","required":false,"description":"Which of Coles's specials to read.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every product on special"},{"value":"half_price","label":"Half-price specials"},{"value":"multi_buy","label":"Multi-buy specials"},{"value":"online_only","label":"Online-only specials"}],"default":"all"},{"name":"category","type":"string","required":false,"description":"Optional: only specials in this category — a slug path from `categories` ('dairy-eggs-fridge' or 'dairy-eggs-fridge/milk') or a coles.com.au URL.","on_invalid":"reject","example":"dairy-eggs-fridge","aliases":["category_slug"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Coles returns 48 products per page; read `count`, `total_results` and `page_count` rather than assuming a size.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order. Leave empty for Coles's own order (relevance for search, best sellers for categories, recommended for specials). Only orders Coles actually applies are offered; `sort_applied` is Coles's own confirmation.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"unit_price_asc","label":"Lowest unit price (per kg / L / 100 g) first"}]},{"name":"brand_ids","type":"array","required":false,"description":"Only these brands — Coles brand ids from `filters_available.brands` or a row's `brand.id`. Several ids are OR-ed.","on_invalid":"reject","example":["2780582535"],"aliases":["brand_id"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid placements. Coles injects them into the first page (they also repeat products that appear further down); true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"store_id","type":"string","required":false,"description":"Price everything for one Coles supermarket: its store number from the `stores` action (e.g. '292' = Coles West Leederville, WA). Coles prices differ by store (remote and Northern Territory stores are often 5-9 % dearer, and some specials run only in some stores). Leave empty for Coles's default online prices (store 7674, Melbourne). The store actually applied is returned in `store`.","on_invalid":"reject","example":"292","aliases":["store"]},{"name":"postcode","type":"string","required":false,"description":"Instead of store_id: a 4-digit Australian postcode. The nearest trading Coles supermarket to it is used and returned in `store` (with its distance).","on_invalid":"reject","example":"6000"},{"name":"suburb","type":"string","required":false,"description":"Instead of store_id: a suburb or town name. The nearest Coles supermarket to it is used. When the name exists in several states, add `state` (or use postcode).","on_invalid":"reject","example":"Subiaco"},{"name":"state","type":"enum","required":false,"description":"Only with suburb: the state, to tell apart suburbs with the same name.","on_invalid":"reject","allowed_values":[{"value":"NSW","label":"NSW"},{"value":"VIC","label":"VIC"},{"value":"QLD","label":"QLD"},{"value":"WA","label":"WA"},{"value":"SA","label":"SA"},{"value":"TAS","label":"TAS"},{"value":"ACT","label":"ACT"},{"value":"NT","label":"NT"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string), title (brand + name), name, brand{id,name}, size, category{id,name,level}, breadcrumb[]{id,name,level} (Coles's first listing), category_paths[][] (every category the product is shelved in), url, image, price (number — the shelf price for one item; null when the product is unavailable), price_display, currency=AUD, original_price (the was-price when Coles shows one, else null), original_price_display, discount_percent, save_amount, member_price / member_price_display / member_discount_percent / member_program / member_unit_price (null — Coles publishes no member or Flybuys price), unit_price, unit_price_unit ('1L', '100g', '1kg'), unit_price_display ('$1.65/ 1L'), sold_by ('piece' | 'weight'), price_per ('piece'), price_is_estimate (true on weighed produce: the price is for one item of approximate weight), promotion_type ('special' | 'everyday' | 'new' | 'bonuscollectable' | null), special_type ('percent_off' | 'multi_save' | null), price_description ('1/2 Price', '40% Off', '2 for $9.40'), half_price, online_only_special, multi_buy_offer, multi_buy{min_quantity, unit_price, unit_price_display, unit_measure_price_display}, badges[]{type,text}, availability ('in_stock' | 'unavailable'), in_stock, available_quantity, max_order_quantity, max_promotional_quantity, age_restricted, rating/review_count/rating_scale (null), sponsored}, count, total_results, page, page_size, page_count, sponsored_dropped, sort_applied (Coles's own echo: relevance | best_selling | recommended | price_asc | price_desc | unit_price_asc), alternate_result (true = nothing matched), alternate_results_dropped (Coles's unrelated fallback products, dropped), alternate_results[] (empty unless include_alternate_results=true), did_you_mean[], filters_available{brands[], allergens[], dietary[], specials[]}{id,name,count}, categories[]{id,name,level,slug,count}, type, category_slug, store{store_id, name, address, suburb, state, postcode, distance_km, chosen_by ('default' | 'store_id' | 'postcode' | 'suburb'), near{suburb,state,postcode}} (the store Coles priced this answer for, confirmed by Coles itself)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"type":"half_price"}},{"name":"category","description":"Every product in one Coles category (one to three levels deep), paged, with the same rows, sorting and filters as search. Category slugs come from `categories`.","required_params":["category"],"optional_params":["page","sort","brand_ids","special","dietary_ids","allergen_ids","include_sponsored","store_id","postcode","suburb","state","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A category slug path from `categories` (one to three levels, e.g. 'dairy-eggs-fridge' or 'dairy-eggs-fridge/milk') or a coles.com.au/browse URL.","on_invalid":"reject","example":"dairy-eggs-fridge/milk","aliases":["category_slug","slug","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Coles returns 48 products per page; read `count`, `total_results` and `page_count` rather than assuming a size.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order. Leave empty for Coles's own order (relevance for search, best sellers for categories, recommended for specials). Only orders Coles actually applies are offered; `sort_applied` is Coles's own confirmation.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"unit_price_asc","label":"Lowest unit price (per kg / L / 100 g) first"}]},{"name":"brand_ids","type":"array","required":false,"description":"Only these brands — Coles brand ids from `filters_available.brands` or a row's `brand.id`. Several ids are OR-ed.","on_invalid":"reject","example":["2780582535"],"aliases":["brand_id"]},{"name":"special","type":"enum","required":false,"description":"Only products on this kind of special.","on_invalid":"reject","allowed_values":[{"value":"half_price","label":"Half-price specials only"},{"value":"multi_buy","label":"Multi-buy specials only (e.g. 2 for $9.40)"},{"value":"online_only","label":"Online-only specials"}]},{"name":"dietary_ids","type":"array","required":false,"description":"Dietary facets (vegan, vegetarian, halal, GMO free …) — ids from `filters_available.dietary`. Several ids are OR-ed.","on_invalid":"reject","example":["1033"]},{"name":"allergen_ids","type":"array","required":false,"description":"Free-from facets (gluten free, lactose free, nut free …) — ids from `filters_available.allergens`.","on_invalid":"reject","example":["9"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid placements. Coles injects them into the first page (they also repeat products that appear further down); true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"store_id","type":"string","required":false,"description":"Price everything for one Coles supermarket: its store number from the `stores` action (e.g. '292' = Coles West Leederville, WA). Coles prices differ by store (remote and Northern Territory stores are often 5-9 % dearer, and some specials run only in some stores). Leave empty for Coles's default online prices (store 7674, Melbourne). The store actually applied is returned in `store`.","on_invalid":"reject","example":"292","aliases":["store"]},{"name":"postcode","type":"string","required":false,"description":"Instead of store_id: a 4-digit Australian postcode. The nearest trading Coles supermarket to it is used and returned in `store` (with its distance).","on_invalid":"reject","example":"6000"},{"name":"suburb","type":"string","required":false,"description":"Instead of store_id: a suburb or town name. The nearest Coles supermarket to it is used. When the name exists in several states, add `state` (or use postcode).","on_invalid":"reject","example":"Subiaco"},{"name":"state","type":"enum","required":false,"description":"Only with suburb: the state, to tell apart suburbs with the same name.","on_invalid":"reject","allowed_values":[{"value":"NSW","label":"NSW"},{"value":"VIC","label":"VIC"},{"value":"QLD","label":"QLD"},{"value":"WA","label":"WA"},{"value":"SA","label":"SA"},{"value":"TAS","label":"TAS"},{"value":"ACT","label":"ACT"},{"value":"NT","label":"NT"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string), title (brand + name), name, brand{id,name}, size, category{id,name,level}, breadcrumb[]{id,name,level} (Coles's first listing), category_paths[][] (every category the product is shelved in), url, image, price (number — the shelf price for one item; null when the product is unavailable), price_display, currency=AUD, original_price (the was-price when Coles shows one, else null), original_price_display, discount_percent, save_amount, member_price / member_price_display / member_discount_percent / member_program / member_unit_price (null — Coles publishes no member or Flybuys price), unit_price, unit_price_unit ('1L', '100g', '1kg'), unit_price_display ('$1.65/ 1L'), sold_by ('piece' | 'weight'), price_per ('piece'), price_is_estimate (true on weighed produce: the price is for one item of approximate weight), promotion_type ('special' | 'everyday' | 'new' | 'bonuscollectable' | null), special_type ('percent_off' | 'multi_save' | null), price_description ('1/2 Price', '40% Off', '2 for $9.40'), half_price, online_only_special, multi_buy_offer, multi_buy{min_quantity, unit_price, unit_price_display, unit_measure_price_display}, badges[]{type,text}, availability ('in_stock' | 'unavailable'), in_stock, available_quantity, max_order_quantity, max_promotional_quantity, age_restricted, rating/review_count/rating_scale (null), sponsored}, count, total_results, page, page_size, page_count, sponsored_dropped, sort_applied (Coles's own echo: relevance | best_selling | recommended | price_asc | price_desc | unit_price_asc), alternate_result (true = nothing matched), alternate_results_dropped (Coles's unrelated fallback products, dropped), alternate_results[] (empty unless include_alternate_results=true), did_you_mean[], filters_available{brands[], allergens[], dietary[], specials[]}{id,name,count}, categories[]{id,name,level,slug,count}, category_slug, store{store_id, name, address, suburb, state, postcode, distance_km, chosen_by ('default' | 'store_id' | 'postcode' | 'suburb'), near{suburb,state,postcode}} (the store Coles priced this answer for, confirmed by Coles itself)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"dairy-eggs-fridge/milk"}},{"name":"categories","description":"Coles's full online category tree — every department, category and aisle with its id, slug path, URL and product count.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"categories[]{id, name, level, slug, product_count, url, children[]}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"stores","description":"Coles supermarkets near a postcode or suburb, closest first, with their store number, address, coordinates, distance and phone. Pass a store number as `store_id` to search, product/detail, deals or category to get that store's prices.","required_params":[],"optional_params":["postcode","suburb","state","limit","max_rotations"],"params":[{"name":"postcode","type":"string","required":false,"description":"A 4-digit Australian postcode: Coles supermarkets nearest to it, closest first.","on_invalid":"reject","example":"6000"},{"name":"suburb","type":"string","required":false,"description":"Or a suburb / town name instead of a postcode. Add `state` when the name exists in several states.","on_invalid":"reject","example":"Alice Springs"},{"name":"state","type":"enum","required":false,"description":"Only with suburb: the state, to tell apart suburbs with the same name.","on_invalid":"reject","allowed_values":[{"value":"NSW","label":"NSW"},{"value":"VIC","label":"VIC"},{"value":"QLD","label":"QLD"},{"value":"WA","label":"WA"},{"value":"SA","label":"SA"},{"value":"TAS","label":"TAS"},{"value":"ACT","label":"ACT"},{"value":"NT","label":"NT"}]},{"name":"limit","type":"integer","required":false,"description":"How many stores to return, closest first (1-50, default 10).","on_invalid":"ignore","default":10,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"stores[]{store_id, name, address, suburb, state, postcode, latitude, longitude, phone, is_trading, distance_km}, count, near{suburb, state, postcode, latitude, longitude}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"postcode":"6000"}}]},{"name":"collectr","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Collectr API scraper - trading card and collectibles price guide: raw and graded prices (PSA, BGS, CGC, TAG, ACE, ARS, AGS) per card and variant, one year of daily price history per grade, sealed product, Pokémon EN/JP/CN, Magic, Yu-Gi-Oh!, One Piece, Lorcana and 30+ games, set lists and set analytics, trending and biggest movers. Prices in USD or 35 other currencies. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/collectr/v1","spec_available":true,"actions":[{"name":"search","description":"Search Collectr's price guide by name across every game, or browse a category, a set or a price band: each row has the product id, set, card number, rarity, variant (Holofoil, 1st Edition, Reverse Holo …), the raw market price with Collectr's latest change, which graders and grades have a price, the image and the Collectr URL. Filter by category, set, language (EN/JP/CN), cards or sealed and price range; sort by price, trending, newest, name or card number. 30 rows a page.","required_params":[],"optional_params":["query","category","set_id","language","product_type","price_min","price_max","sort","page","limit","currency","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Card or product name, as typed in the site's search box (may include a card number). Optional when category or set_id is given.","on_invalid":"reject","example":"charizard","aliases":["q","keyword","name"]},{"name":"category","type":"enum","required":false,"description":"Game or collectible category by name (pokemon, magic, yugioh, one_piece, lorcana, …) or Collectr category id. `categories` lists them all.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokemon"},{"value":"magic","label":"Magic: The Gathering"},{"value":"yugioh","label":"YuGiOh"},{"value":"one_piece","label":"One Piece"},{"value":"lorcana","label":"Lorcana"},{"value":"flesh_and_blood","label":"Flesh and Blood"},{"value":"riftbound","label":"Riftbound"},{"value":"dragon_ball_super_fusion_world","label":"Dragon Ball Super Fusion World"},{"value":"dragon_ball_super","label":"Dragon Ball Super"},{"value":"dragon_ball_z","label":"Dragon Ball Z"},{"value":"digimon","label":"Digimon"},{"value":"weiss_schwarz","label":"Weiss Schwarz"},{"value":"union_arena","label":"Union Arena"},{"value":"star_wars_unlimited","label":"Star Wars: Unlimited"},{"value":"star_wars_destiny","label":"Star Wars: Destiny"},{"value":"sorcery_contested_realm","label":"Sorcery: Contested Realm"},{"value":"grand_archive","label":"Grand Archive"},{"value":"final_fantasy_tcg","label":"Final Fantasy TCG"},{"value":"gundam_card_game","label":"Gundam Card Game"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME"},{"value":"elestrals","label":"Elestrals"},{"value":"metazoo","label":"MetaZoo"},{"value":"palworld","label":"Palworld"},{"value":"cyberpunk","label":"Cyberpunk"},{"value":"force_of_will","label":"Force of Will"},{"value":"cardfight_vanguard","label":"Cardfight Vanguard"},{"value":"shadowverse","label":"Shadowverse"},{"value":"gate_ruler","label":"Gate Ruler"},{"value":"transformers_tcg","label":"Transformers TCG"},{"value":"universus","label":"UniVersus"},{"value":"wixoss","label":"WIXOSS"},{"value":"battle_spirits_saga","label":"Battle Spirits Saga"},{"value":"funko","label":"Funko"},{"value":"marvel","label":"Marvel"},{"value":"basketball","label":"Basketball"},{"value":"watches","label":"Watches"},{"value":"zerocool","label":"zerocool (VeeFriends)"}],"example":"pokemon","value_pattern":"\\d{1,6}","aliases":["game","category_id"]},{"name":"set_id","type":"string","required":false,"description":"Collectr set id (from sets or any row's set_id) - lists the products of that set.","on_invalid":"reject","example":"1663","aliases":["group_id","set"]},{"name":"language","type":"enum","required":false,"description":"Card language: en, jp or cn (Pokémon has all three; most games are English only).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"jp","label":"Japanese"},{"value":"cn","label":"Chinese"}]},{"name":"product_type","type":"enum","required":false,"description":"Singles, sealed product, or both.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Cards and sealed product"},{"value":"cards","label":"Single cards only"},{"value":"sealed","label":"Sealed product only (booster boxes, ETBs, tins, collections)"}],"default":"all"},{"name":"price_min","type":"number","required":false,"description":"Lowest market price, USD (inclusive).","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest market price, USD (inclusive). Products with no price yet match a max-only range.","on_invalid":"reject","example":500,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's default order"},{"value":"price_desc","label":"Highest market price first"},{"value":"price_asc","label":"Lowest market price first"},{"value":"trending","label":"Most viewed on Collectr today first"},{"value":"newest","label":"Most recently added to Collectr first"},{"value":"oldest","label":"Earliest added first"},{"value":"name_asc","label":"Product name A to Z"},{"value":"name_desc","label":"Product name Z to A"},{"value":"card_number_asc","label":"Card number ascending"},{"value":"card_number_desc","label":"Card number descending"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Page number; Collectr serves 30 rows a page.","on_invalid":"reject","default":1,"minimum":1,"maximum":300},{"name":"limit","type":"integer","required":false,"description":"Rows to return from the page (1-30).","on_invalid":"reject","default":30,"minimum":1,"maximum":30},{"name":"currency","type":"enum","required":false,"description":"Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate).","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"CAD","label":"CAD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"AUD","label":"AUD"},{"value":"CNY","label":"CNY"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"NZD","label":"NZD"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"SEK","label":"SEK"},{"value":"AED","label":"AED"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"PHP","label":"PHP"},{"value":"PLN","label":"PLN"},{"value":"MYR","label":"MYR"},{"value":"MXN","label":"MXN"},{"value":"CHF","label":"CHF"},{"value":"TTD","label":"TTD"},{"value":"IDR","label":"IDR"},{"value":"KWD","label":"KWD"},{"value":"SAR","label":"SAR"},{"value":"BHD","label":"BHD"},{"value":"CZK","label":"CZK"},{"value":"CLP","label":"CLP"},{"value":"TWD","label":"TWD"},{"value":"PEN","label":"PEN"},{"value":"VND","label":"VND"},{"value":"THB","label":"THB"},{"value":"ZAR","label":"ZAR"},{"value":"INR","label":"INR"},{"value":"QAR","label":"QAR"},{"value":"BRL","label":"BRL"},{"value":"EGP","label":"EGP"}],"default":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, results[]{product_id, name, category, category_id, category_slug, set_name, set_id, set_slug, card_number, rarity, variant, is_card, product_type (card|sealed_or_other), language (when filtered), market_price (null when the site has no price yet), previous_market_price, price_change, price_change_percent, has_price, graded_prices_available[]{grader, grade, grade_name, grade_id}, image_url, url}, count, page, limit, has_more, currency, exchange_rate, filters{}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","category":"pokemon"}},{"name":"product","description":"One card or sealed product in full: the raw (ungraded) market price of every variant and EVERY graded price Collectr tracks (PSA, BGS, CGC, TAG, ACE, ARS, AGS; grader, grade and grade name such as CGC 10 Pristine vs Gem Mint or BGS 10 Black Label) with each price's latest change and date, set and card number, rarity, card text, images per variant, card language, the TCGplayer product id and link.","required_params":["product_id"],"optional_params":["currency","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Collectr product id from search (for TCGplayer-listed items it equals the TCGplayer product id), or the product URL on app.getcollectr.com.","on_invalid":"reject","example":"106999","aliases":["id","url","product"]},{"name":"currency","type":"enum","required":false,"description":"Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate).","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"CAD","label":"CAD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"AUD","label":"AUD"},{"value":"CNY","label":"CNY"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"NZD","label":"NZD"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"SEK","label":"SEK"},{"value":"AED","label":"AED"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"PHP","label":"PHP"},{"value":"PLN","label":"PLN"},{"value":"MYR","label":"MYR"},{"value":"MXN","label":"MXN"},{"value":"CHF","label":"CHF"},{"value":"TTD","label":"TTD"},{"value":"IDR","label":"IDR"},{"value":"KWD","label":"KWD"},{"value":"SAR","label":"SAR"},{"value":"BHD","label":"BHD"},{"value":"CZK","label":"CZK"},{"value":"CLP","label":"CLP"},{"value":"TWD","label":"TWD"},{"value":"PEN","label":"PEN"},{"value":"VND","label":"VND"},{"value":"THB","label":"THB"},{"value":"ZAR","label":"ZAR"},{"value":"INR","label":"INR"},{"value":"QAR","label":"QAR"},{"value":"BRL","label":"BRL"},{"value":"EGP","label":"EGP"}],"default":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, category, category_id, category_slug, set_name, set_id, set_slug, set_url, cards_in_set, card_number, rarity, is_card, product_type, language, description, image_url, url, tcgplayer_product_id, tcgplayer_url, cardmarket_url, added_to_collectr_at, variants[]{variant, image_url}, market_price, price_change, price_change_percent, raw_prices[]{variant, market_price, price_change, price_change_percent, price_date}, graded_prices[]{variant, grader, grade, grade_name, grade_label, grade_id, market_price, price_change, price_change_percent, price_date}, graders[], graded_price_count}, currency, exchange_rate","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"106999"}},{"name":"price_history","description":"The daily price history behind a product's chart, about one year back: one series per variant and grade (raw by default; a grader such as PSA, a single grade such as PSA 10, or all graded series), each with every daily point, the first and latest price and the change over the window.","required_params":["product_id"],"optional_params":["grader","grade","variant","days","currency","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Collectr product id from search (for TCGplayer-listed items it equals the TCGplayer product id), or the product URL on app.getcollectr.com.","on_invalid":"reject","example":"106999","aliases":["id","url","product"]},{"name":"grader","type":"enum","required":false,"description":"Which series: raw (default), one grader, or all.","on_invalid":"reject","allowed_values":[{"value":"raw","label":"Ungraded only"},{"value":"all","label":"Ungraded and every grader"},{"value":"PSA","label":"PSA"},{"value":"BGS","label":"BGS"},{"value":"CGC","label":"CGC"},{"value":"TAG","label":"TAG"},{"value":"ACE","label":"ACE"},{"value":"ARS","label":"ARS"},{"value":"AGS","label":"AGS"}],"default":"raw"},{"name":"grade","type":"string","required":false,"description":"One grade of the chosen grader (e.g. 10, 9.5, 9). Grade 10 can be two series (e.g. CGC Gem Mint 10 and Pristine 10); both are returned.","on_invalid":"reject","example":"10"},{"name":"variant","type":"string","required":false,"description":"One variant (product[].variants), e.g. Holofoil, Reverse Holofoil, 1st Edition.","on_invalid":"reject","example":"1st Edition Holofoil"},{"name":"days","type":"integer","required":false,"description":"Only the last N days of each series (default: everything Collectr shows, ~1 year).","on_invalid":"reject","example":90,"minimum":1,"maximum":400},{"name":"currency","type":"enum","required":false,"description":"Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate).","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"CAD","label":"CAD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"AUD","label":"AUD"},{"value":"CNY","label":"CNY"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"NZD","label":"NZD"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"SEK","label":"SEK"},{"value":"AED","label":"AED"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"PHP","label":"PHP"},{"value":"PLN","label":"PLN"},{"value":"MYR","label":"MYR"},{"value":"MXN","label":"MXN"},{"value":"CHF","label":"CHF"},{"value":"TTD","label":"TTD"},{"value":"IDR","label":"IDR"},{"value":"KWD","label":"KWD"},{"value":"SAR","label":"SAR"},{"value":"BHD","label":"BHD"},{"value":"CZK","label":"CZK"},{"value":"CLP","label":"CLP"},{"value":"TWD","label":"TWD"},{"value":"PEN","label":"PEN"},{"value":"VND","label":"VND"},{"value":"THB","label":"THB"},{"value":"ZAR","label":"ZAR"},{"value":"INR","label":"INR"},{"value":"QAR","label":"QAR"},{"value":"BRL","label":"BRL"},{"value":"EGP","label":"EGP"}],"default":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, set_name, card_number, url}, series[]{variant, grader, grade, grade_name, grade_label, grade_id, points_count, first_date, last_date, first_price, latest_price, change_percent, points[]{date, price}}, series_count, currency, exchange_rate","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"106999"}},{"name":"suggest","description":"Collectr's own search-as-you-type: up to 10 matching products with id, set, card number, rarity and image - the quickest way to turn a card name into a product_id.","required_params":["query"],"optional_params":["set_id","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Start of a card or product name.","on_invalid":"reject","example":"charizard","aliases":["q","keyword"]},{"name":"set_id","type":"string","required":false,"description":"Collectr set id (from sets or any row's set_id) - lists the products of that set.","on_invalid":"reject","example":"1663","aliases":["group_id","set"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, results[]{product_id, name, category, set_name, card_number, rarity, is_card, image_url, url}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"charizard"}},{"name":"sets","description":"Every set (expansion) Collectr lists for a game, newest first: set id, name, card count, release date, logo and URL. Pokémon has English, Japanese and Chinese set lists.","required_params":["category"],"optional_params":["language","query","max_rotations"],"params":[{"name":"category","type":"enum","required":true,"description":"Game whose sets to list (games with set lists only).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokemon"},{"value":"magic","label":"Magic: The Gathering"},{"value":"yugioh","label":"YuGiOh"},{"value":"one_piece","label":"One Piece"},{"value":"lorcana","label":"Lorcana"},{"value":"flesh_and_blood","label":"Flesh and Blood"},{"value":"riftbound","label":"Riftbound"},{"value":"dragon_ball_super_fusion_world","label":"Dragon Ball Super Fusion World"},{"value":"dragon_ball_super","label":"Dragon Ball Super"},{"value":"digimon","label":"Digimon"},{"value":"weiss_schwarz","label":"Weiss Schwarz"},{"value":"union_arena","label":"Union Arena"},{"value":"star_wars_unlimited","label":"Star Wars: Unlimited"},{"value":"sorcery_contested_realm","label":"Sorcery: Contested Realm"},{"value":"grand_archive","label":"Grand Archive"},{"value":"final_fantasy_tcg","label":"Final Fantasy TCG"},{"value":"gundam_card_game","label":"Gundam Card Game"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME"},{"value":"elestrals","label":"Elestrals"},{"value":"metazoo","label":"MetaZoo"},{"value":"palworld","label":"Palworld"},{"value":"cyberpunk","label":"Cyberpunk"}],"example":"pokemon","value_pattern":"\\d{1,6}","aliases":["game","category_id"]},{"name":"language","type":"enum","required":false,"description":"Set language (Pokémon: en, jp, cn).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"jp","label":"Japanese"},{"value":"cn","label":"Chinese"}],"default":"en"},{"name":"query","type":"string","required":false,"description":"Only sets whose name contains this text.","on_invalid":"reject","example":"base set","aliases":["q","name"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"category{category_id, name, image_url}, language, languages[]{code, name}, sets[]{set_id, name, card_count, release_date, order, language, image_url, slug, url}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"pokemon"}},{"name":"set","description":"One set's analytics as Collectr shows them: the total value of the set today and its value history, volatility score, biggest market movers, how many cards fall in each price band, rarity and variant breakdown, weekly sales volume and the most wishlisted cards - plus the set's name, code, release date and card count. Use search with set_id for the full card list with prices.","required_params":["set_id"],"optional_params":["history_days","currency","max_rotations"],"params":[{"name":"set_id","type":"string","required":true,"description":"Collectr set id (from sets or a row's set_id) or a set URL.","on_invalid":"reject","example":"1663","aliases":["group_id","set","url"]},{"name":"history_days","type":"integer","required":false,"description":"Only the last N days of the set value history (default: all of it).","on_invalid":"reject","example":365,"minimum":1,"maximum":4000},{"name":"currency","type":"enum","required":false,"description":"Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate).","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"CAD","label":"CAD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"AUD","label":"AUD"},{"value":"CNY","label":"CNY"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"NZD","label":"NZD"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"SEK","label":"SEK"},{"value":"AED","label":"AED"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"PHP","label":"PHP"},{"value":"PLN","label":"PLN"},{"value":"MYR","label":"MYR"},{"value":"MXN","label":"MXN"},{"value":"CHF","label":"CHF"},{"value":"TTD","label":"TTD"},{"value":"IDR","label":"IDR"},{"value":"KWD","label":"KWD"},{"value":"SAR","label":"SAR"},{"value":"BHD","label":"BHD"},{"value":"CZK","label":"CZK"},{"value":"CLP","label":"CLP"},{"value":"TWD","label":"TWD"},{"value":"PEN","label":"PEN"},{"value":"VND","label":"VND"},{"value":"THB","label":"THB"},{"value":"ZAR","label":"ZAR"},{"value":"INR","label":"INR"},{"value":"QAR","label":"QAR"},{"value":"BRL","label":"BRL"},{"value":"EGP","label":"EGP"}],"default":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"set{set_id, name, abbreviation, category, category_id, card_count, release_date, image_url, slug, url}, total_set_value, total_set_value_date, total_set_value_history[]{date, value}, volatility_score, volatility, volatility_description, market_movers[]{product_id, name, card_number, rarity, market_price, previous_market_price, price_change, price_change_percent, image_url, url}, price_distribution[]{min_price, max_price, count}, rarity_breakdown[]{name, count}, variant_breakdown[]{name, count}, weekly_sales_volume[]{week, percent_of_sales}, most_wishlisted[]{…, wishlist_count}, currency, exchange_rate","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"set_id":"1663"}},{"name":"trending","description":"What collectors are looking at on Collectr today: products ordered by today's views, optionally for one game or cards / sealed only, with the three most viewed products and their view counts.","required_params":[],"optional_params":["category","language","product_type","page","limit","currency","max_rotations"],"params":[{"name":"category","type":"enum","required":false,"description":"Game or collectible category by name (pokemon, magic, yugioh, one_piece, lorcana, …) or Collectr category id. `categories` lists them all.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokemon"},{"value":"magic","label":"Magic: The Gathering"},{"value":"yugioh","label":"YuGiOh"},{"value":"one_piece","label":"One Piece"},{"value":"lorcana","label":"Lorcana"},{"value":"flesh_and_blood","label":"Flesh and Blood"},{"value":"riftbound","label":"Riftbound"},{"value":"dragon_ball_super_fusion_world","label":"Dragon Ball Super Fusion World"},{"value":"dragon_ball_super","label":"Dragon Ball Super"},{"value":"dragon_ball_z","label":"Dragon Ball Z"},{"value":"digimon","label":"Digimon"},{"value":"weiss_schwarz","label":"Weiss Schwarz"},{"value":"union_arena","label":"Union Arena"},{"value":"star_wars_unlimited","label":"Star Wars: Unlimited"},{"value":"star_wars_destiny","label":"Star Wars: Destiny"},{"value":"sorcery_contested_realm","label":"Sorcery: Contested Realm"},{"value":"grand_archive","label":"Grand Archive"},{"value":"final_fantasy_tcg","label":"Final Fantasy TCG"},{"value":"gundam_card_game","label":"Gundam Card Game"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME"},{"value":"elestrals","label":"Elestrals"},{"value":"metazoo","label":"MetaZoo"},{"value":"palworld","label":"Palworld"},{"value":"cyberpunk","label":"Cyberpunk"},{"value":"force_of_will","label":"Force of Will"},{"value":"cardfight_vanguard","label":"Cardfight Vanguard"},{"value":"shadowverse","label":"Shadowverse"},{"value":"gate_ruler","label":"Gate Ruler"},{"value":"transformers_tcg","label":"Transformers TCG"},{"value":"universus","label":"UniVersus"},{"value":"wixoss","label":"WIXOSS"},{"value":"battle_spirits_saga","label":"Battle Spirits Saga"},{"value":"funko","label":"Funko"},{"value":"marvel","label":"Marvel"},{"value":"basketball","label":"Basketball"},{"value":"watches","label":"Watches"},{"value":"zerocool","label":"zerocool (VeeFriends)"}],"example":"pokemon","value_pattern":"\\d{1,6}","aliases":["game","category_id"]},{"name":"language","type":"enum","required":false,"description":"Card language: en, jp or cn (Pokémon has all three; most games are English only).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"jp","label":"Japanese"},{"value":"cn","label":"Chinese"}]},{"name":"product_type","type":"enum","required":false,"description":"Singles, sealed product, or both.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Cards and sealed product"},{"value":"cards","label":"Single cards only"},{"value":"sealed","label":"Sealed product only (booster boxes, ETBs, tins, collections)"}],"default":"all"},{"name":"page","type":"integer","required":false,"description":"Page number; Collectr serves 30 rows a page.","on_invalid":"reject","default":1,"minimum":1,"maximum":300},{"name":"limit","type":"integer","required":false,"description":"Rows to return from the page (1-30).","on_invalid":"reject","default":30,"minimum":1,"maximum":30},{"name":"currency","type":"enum","required":false,"description":"Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate).","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"CAD","label":"CAD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"AUD","label":"AUD"},{"value":"CNY","label":"CNY"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"NZD","label":"NZD"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"SEK","label":"SEK"},{"value":"AED","label":"AED"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"PHP","label":"PHP"},{"value":"PLN","label":"PLN"},{"value":"MYR","label":"MYR"},{"value":"MXN","label":"MXN"},{"value":"CHF","label":"CHF"},{"value":"TTD","label":"TTD"},{"value":"IDR","label":"IDR"},{"value":"KWD","label":"KWD"},{"value":"SAR","label":"SAR"},{"value":"BHD","label":"BHD"},{"value":"CZK","label":"CZK"},{"value":"CLP","label":"CLP"},{"value":"TWD","label":"TWD"},{"value":"PEN","label":"PEN"},{"value":"VND","label":"VND"},{"value":"THB","label":"THB"},{"value":"ZAR","label":"ZAR"},{"value":"INR","label":"INR"},{"value":"QAR","label":"QAR"},{"value":"BRL","label":"BRL"},{"value":"EGP","label":"EGP"}],"default":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"top_viewed[]{product_id, views_today}, results[]{product_id, name, category, category_id, category_slug, set_name, set_id, set_slug, card_number, rarity, variant, is_card, product_type (card|sealed_or_other), language (when filtered), market_price (null when the site has no price yet), previous_market_price, price_change, price_change_percent, has_price, graded_prices_available[]{grader, grade, grade_name, grade_id}, image_url, url}, count, page, has_more, currency","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"pokemon"}},{"name":"movers","description":"Biggest price gainers or losers on Collectr by percent or by amount, for one game or all, cards or sealed, optionally above a minimum price so cheap bulk does not dominate. One row per variant.","required_params":[],"optional_params":["direction","measure","category","language","product_type","price_min","price_max","page","limit","currency","max_rotations"],"params":[{"name":"direction","type":"enum","required":false,"description":"Gainers or losers.","on_invalid":"reject","allowed_values":[{"value":"gainers","label":"Largest rises first"},{"value":"losers","label":"Largest falls first"}],"default":"gainers"},{"name":"measure","type":"enum","required":false,"description":"Rank by percent or by amount.","on_invalid":"reject","allowed_values":[{"value":"percent","label":"By percent change"},{"value":"amount","label":"By change in USD"}],"default":"percent"},{"name":"category","type":"enum","required":false,"description":"Game or collectible category by name (pokemon, magic, yugioh, one_piece, lorcana, …) or Collectr category id. `categories` lists them all.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokemon"},{"value":"magic","label":"Magic: The Gathering"},{"value":"yugioh","label":"YuGiOh"},{"value":"one_piece","label":"One Piece"},{"value":"lorcana","label":"Lorcana"},{"value":"flesh_and_blood","label":"Flesh and Blood"},{"value":"riftbound","label":"Riftbound"},{"value":"dragon_ball_super_fusion_world","label":"Dragon Ball Super Fusion World"},{"value":"dragon_ball_super","label":"Dragon Ball Super"},{"value":"dragon_ball_z","label":"Dragon Ball Z"},{"value":"digimon","label":"Digimon"},{"value":"weiss_schwarz","label":"Weiss Schwarz"},{"value":"union_arena","label":"Union Arena"},{"value":"star_wars_unlimited","label":"Star Wars: Unlimited"},{"value":"star_wars_destiny","label":"Star Wars: Destiny"},{"value":"sorcery_contested_realm","label":"Sorcery: Contested Realm"},{"value":"grand_archive","label":"Grand Archive"},{"value":"final_fantasy_tcg","label":"Final Fantasy TCG"},{"value":"gundam_card_game","label":"Gundam Card Game"},{"value":"hololive","label":"hololive OFFICIAL CARD GAME"},{"value":"elestrals","label":"Elestrals"},{"value":"metazoo","label":"MetaZoo"},{"value":"palworld","label":"Palworld"},{"value":"cyberpunk","label":"Cyberpunk"},{"value":"force_of_will","label":"Force of Will"},{"value":"cardfight_vanguard","label":"Cardfight Vanguard"},{"value":"shadowverse","label":"Shadowverse"},{"value":"gate_ruler","label":"Gate Ruler"},{"value":"transformers_tcg","label":"Transformers TCG"},{"value":"universus","label":"UniVersus"},{"value":"wixoss","label":"WIXOSS"},{"value":"battle_spirits_saga","label":"Battle Spirits Saga"},{"value":"funko","label":"Funko"},{"value":"marvel","label":"Marvel"},{"value":"basketball","label":"Basketball"},{"value":"watches","label":"Watches"},{"value":"zerocool","label":"zerocool (VeeFriends)"}],"example":"pokemon","value_pattern":"\\d{1,6}","aliases":["game","category_id"]},{"name":"language","type":"enum","required":false,"description":"Card language: en, jp or cn (Pokémon has all three; most games are English only).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"jp","label":"Japanese"},{"value":"cn","label":"Chinese"}]},{"name":"product_type","type":"enum","required":false,"description":"Singles, sealed product, or both.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Cards and sealed product"},{"value":"cards","label":"Single cards only"},{"value":"sealed","label":"Sealed product only (booster boxes, ETBs, tins, collections)"}],"default":"all"},{"name":"price_min","type":"number","required":false,"description":"Lowest market price, USD (inclusive).","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest market price, USD (inclusive). Products with no price yet match a max-only range.","on_invalid":"reject","example":500,"minimum":0},{"name":"page","type":"integer","required":false,"description":"Page number; Collectr serves 30 rows a page.","on_invalid":"reject","default":1,"minimum":1,"maximum":300},{"name":"limit","type":"integer","required":false,"description":"Rows to return from the page (1-30).","on_invalid":"reject","default":30,"minimum":1,"maximum":30},{"name":"currency","type":"enum","required":false,"description":"Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate).","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"CAD","label":"CAD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"AUD","label":"AUD"},{"value":"CNY","label":"CNY"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"NZD","label":"NZD"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"SEK","label":"SEK"},{"value":"AED","label":"AED"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"PHP","label":"PHP"},{"value":"PLN","label":"PLN"},{"value":"MYR","label":"MYR"},{"value":"MXN","label":"MXN"},{"value":"CHF","label":"CHF"},{"value":"TTD","label":"TTD"},{"value":"IDR","label":"IDR"},{"value":"KWD","label":"KWD"},{"value":"SAR","label":"SAR"},{"value":"BHD","label":"BHD"},{"value":"CZK","label":"CZK"},{"value":"CLP","label":"CLP"},{"value":"TWD","label":"TWD"},{"value":"PEN","label":"PEN"},{"value":"VND","label":"VND"},{"value":"THB","label":"THB"},{"value":"ZAR","label":"ZAR"},{"value":"INR","label":"INR"},{"value":"QAR","label":"QAR"},{"value":"BRL","label":"BRL"},{"value":"EGP","label":"EGP"}],"default":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"direction, measure, results[]{product_id, name, category, category_id, category_slug, set_name, set_id, set_slug, card_number, rarity, variant, is_card, product_type (card|sealed_or_other), language (when filtered), market_price (null when the site has no price yet), previous_market_price, price_change, price_change_percent, has_price, graded_prices_available[]{grader, grade, grade_name, grade_id}, image_url, url}, count, page, has_more, currency, filters{}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"pokemon"}},{"name":"categories","description":"Every game and collectible category Collectr prices (Pokémon, Magic, Yu-Gi-Oh!, One Piece, Lorcana and 30+ more, Funko, Marvel, watches, basketball), with the id and slug the other actions take, whether it has set lists, and the languages and product types the search filters accept.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"categories[]{category_id, slug, name, has_set_lists, image_url, icon_url}, languages[]{code, name}, product_types[], count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"grading_scales","description":"The grading companies and grades Collectr prices (PSA, BGS, CGC, TAG, ACE, ARS, AGS) with each grade's id, value and name, which grades Collectr treats as equivalent across companies, and its raw-card condition multipliers (Near Mint, Lightly Played … Damaged).","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"graders[]{grader, grades[]{grade_id, grade, grade_name, label}}, equivalent_grades[]{title, grade_ids[]}, conditions[]{code, name, price_multiplier}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"contactcars","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"ContactCars Egypt used-car search and listing detail","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/contactcars/v1","spec_available":true,"actions":[{"name":"search","description":"Search a published used-car brand/model slug, first source window only.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Published brand slug (bmw, toyota, kia) or brand-model slug (toyota-corolla, kia-cerato, bmw-320i). A bare model name on its own is not a published route. Verified live 2026-10-05.","on_invalid":"reject","example":"bmw"},{"name":"page","type":"integer","required":false,"description":"Only the first source window is qualified.","on_invalid":"reject","default":1,"minimum":1,"maximum":1},{"name":"limit","type":"integer","required":false,"description":"Local result cap, up to 25 published rows.","on_invalid":"reject","default":5,"minimum":1,"maximum":25}],"returns":"results[]{listing_id,native_id,url,title,price,price_type,currency,mileage_km,images},source_window_count; source_total and has_more unknown/null","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"bmw","page":1,"limit":5}},{"name":"listing_detail","description":"Meaningful public used-car detail by the exact route identifier returned by search.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Exact published brand-model/native-id handle from search, or its complete ContactCars used-car URL.","on_invalid":"reject","example":"bmw-420i_gran_coupe/0e8dc3f333ce"}],"returns":"listing_id,native_id,title,seller_title,description,price,price_type,display_price,display_price_type,currency,mileage_km,engine_displacement_cc,transmission,fuel,images,seller,location,gtin","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"bmw-420i_gran_coupe/0e8dc3f333ce"}}]},{"name":"continente","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Continente API — Portuguese supermarket prices: shelf price, discount and was price, PVPR, multi-buy deals, price per kg/litre, EANs, ingredients and nutrition from continente.pt","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/continente/v1","spec_available":true,"actions":[{"name":"search","description":"Search Continente's online shop: shelf price, was price of an immediate discount, recommended retail price (PVPR), discount badge, multi-buy deal, price per kg/l, pack size, brand, availability. `query` required; filters: category, brand, diet, min_price, max_price; sort; paging; optional post code for the store's assortment.","required_params":["query"],"optional_params":["category","brand","diet","min_price","max_price","sort","page","per_page","postal_code"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed in the Continente shop (Portuguese works best).","on_invalid":"reject","example":"leite","aliases":["q","keyword","search","term"]},{"name":"category","type":"string","required":false,"description":"Continente category id (cgid) as the `categories` action or a product's `category_id` returns it (e.g. laticinios, laticinios-leite, laticinios-leite-meio-gordo). An id the site does not know is rejected (the site itself would silently show the whole catalogue).","on_invalid":"reject","example":"laticinios-leite","aliases":["cgid","category_id"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as Continente prints it (e.g. Mimosa, Continente, Gresso).","on_invalid":"reject","example":"Mimosa","aliases":["marca"]},{"name":"diet","type":"enum","required":false,"description":"One dietary attribute filter (the site's own facets).","on_invalid":"reject","allowed_values":[{"value":"organic","label":"Biológico"},{"value":"vegan","label":"Vegan"},{"value":"vegetarian","label":"Vegetariano"},{"value":"gluten_free","label":"Sem Glúten"},{"value":"lactose_free","label":"Sem Lactose"},{"value":"no_added_sugar","label":"Sem Adição de Açúcar"}],"aliases":["dietary"]},{"name":"min_price","type":"number","required":false,"description":"Minimum shelf price in EUR (the price in `price`, per its `price_unit`).","on_invalid":"reject","example":2,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum shelf price in EUR.","on_invalid":"reject","example":4,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · unit_price_asc (price per kg/l) · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"unit_price_asc","label":"unit_price_asc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"relevance","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-35 (Continente's own ceiling is 35).","on_invalid":"reject","default":35,"minimum":1,"maximum":35,"aliases":["limit","sz"]},{"name":"postal_code","type":"string","required":false,"description":"Portuguese post code (NNNN-NNN). Continente's assortment depends on the delivery store that serves it (measured: 'fruta' 3,214 rows in Lisboa, 1,802 in Funchal). Prices were the same across 4 stores (335 product×store pairs). Omit for the site's default anonymous store; the response says which store the rows are for.","on_invalid":"reject","example":"4000-322","aliases":["zip_code","zip","postcode","codigo_postal","cp"]}],"returns":"store{postal_code, store_name, store_id, resolved_from}, query, category, filters, sort, total, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg|lt…: what `price` is per), regular_price (struck-through price of an immediate discount), recommended_retail_price (manufacturer PVPR, not a former Continente price), currency, discount{kind, text, value, unit}, on_offer, multibuy{text, buy, pay}, promo_messages[], unit_price, unit_price_unit, unit_price_text, pack_size, available, max_order_quantity, labels[], category_path, impression_price, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"leite"}},{"name":"category","description":"List one Continente category (id from `categories`) with the same row fields and filters as `search`.","required_params":["category"],"optional_params":["brand","diet","min_price","max_price","sort","page","per_page","postal_code"],"params":[{"name":"category","type":"string","required":false,"description":"Continente category id (cgid) as the `categories` action or a product's `category_id` returns it (e.g. laticinios, laticinios-leite, laticinios-leite-meio-gordo). An id the site does not know is rejected (the site itself would silently show the whole catalogue).","on_invalid":"reject","example":"laticinios-leite","aliases":["cgid","category_id"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as Continente prints it (e.g. Mimosa, Continente, Gresso).","on_invalid":"reject","example":"Mimosa","aliases":["marca"]},{"name":"diet","type":"enum","required":false,"description":"One dietary attribute filter (the site's own facets).","on_invalid":"reject","allowed_values":[{"value":"organic","label":"Biológico"},{"value":"vegan","label":"Vegan"},{"value":"vegetarian","label":"Vegetariano"},{"value":"gluten_free","label":"Sem Glúten"},{"value":"lactose_free","label":"Sem Lactose"},{"value":"no_added_sugar","label":"Sem Adição de Açúcar"}],"aliases":["dietary"]},{"name":"min_price","type":"number","required":false,"description":"Minimum shelf price in EUR (the price in `price`, per its `price_unit`).","on_invalid":"reject","example":2,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum shelf price in EUR.","on_invalid":"reject","example":4,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · unit_price_asc (price per kg/l) · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"unit_price_asc","label":"unit_price_asc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"relevance","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-35 (Continente's own ceiling is 35).","on_invalid":"reject","default":35,"minimum":1,"maximum":35,"aliases":["limit","sz"]},{"name":"postal_code","type":"string","required":false,"description":"Portuguese post code (NNNN-NNN). Continente's assortment depends on the delivery store that serves it (measured: 'fruta' 3,214 rows in Lisboa, 1,802 in Funchal). Prices were the same across 4 stores (335 product×store pairs). Omit for the site's default anonymous store; the response says which store the rows are for.","on_invalid":"reject","example":"4000-322","aliases":["zip_code","zip","postcode","codigo_postal","cp"]}],"returns":"store{postal_code, store_name, store_id, resolved_from}, query, category, filters, sort, total, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg|lt…: what `price` is per), regular_price (struck-through price of an immediate discount), recommended_retail_price (manufacturer PVPR, not a former Continente price), currency, discount{kind, text, value, unit}, on_offer, multibuy{text, buy, pay}, promo_messages[], unit_price, unit_price_unit, unit_price_text, pack_size, available, max_order_quantity, labels[], category_path, impression_price, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"laticinios-leite"}},{"name":"promotions","description":"Continente products on discount right now (the site's 'Com Desconto' facet): offer price, was price, discount % or €, multi-buy deals. Narrow with `query`, `category`, `brand`, `diet`.","required_params":[],"optional_params":["query","category","brand","diet","min_price","max_price","sort","page","per_page","postal_code"],"params":[{"name":"query","type":"string","required":false,"description":"Optional search words inside the discounted products.","on_invalid":"reject","example":"cafe","aliases":["q","keyword","search","term"]},{"name":"category","type":"string","required":false,"description":"Continente category id (cgid) as the `categories` action or a product's `category_id` returns it (e.g. laticinios, laticinios-leite, laticinios-leite-meio-gordo). An id the site does not know is rejected (the site itself would silently show the whole catalogue).","on_invalid":"reject","example":"laticinios-leite","aliases":["cgid","category_id"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as Continente prints it (e.g. Mimosa, Continente, Gresso).","on_invalid":"reject","example":"Mimosa","aliases":["marca"]},{"name":"diet","type":"enum","required":false,"description":"One dietary attribute filter (the site's own facets).","on_invalid":"reject","allowed_values":[{"value":"organic","label":"Biológico"},{"value":"vegan","label":"Vegan"},{"value":"vegetarian","label":"Vegetariano"},{"value":"gluten_free","label":"Sem Glúten"},{"value":"lactose_free","label":"Sem Lactose"},{"value":"no_added_sugar","label":"Sem Adição de Açúcar"}],"aliases":["dietary"]},{"name":"min_price","type":"number","required":false,"description":"Minimum shelf price in EUR (the price in `price`, per its `price_unit`).","on_invalid":"reject","example":2,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum shelf price in EUR.","on_invalid":"reject","example":4,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · unit_price_asc (price per kg/l) · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"unit_price_asc","label":"unit_price_asc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"relevance","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-35 (Continente's own ceiling is 35).","on_invalid":"reject","default":35,"minimum":1,"maximum":35,"aliases":["limit","sz"]},{"name":"postal_code","type":"string","required":false,"description":"Portuguese post code (NNNN-NNN). Continente's assortment depends on the delivery store that serves it (measured: 'fruta' 3,214 rows in Lisboa, 1,802 in Funchal). Prices were the same across 4 stores (335 product×store pairs). Omit for the site's default anonymous store; the response says which store the rows are for.","on_invalid":"reject","example":"4000-322","aliases":["zip_code","zip","postcode","codigo_postal","cp"]}],"returns":"store{postal_code, store_name, store_id, resolved_from}, query, category, filters, sort, total, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg|lt…: what `price` is per), regular_price (struck-through price of an immediate discount), recommended_retail_price (manufacturer PVPR, not a former Continente price), currency, discount{kind, text, value, unit}, on_offer, multibuy{text, buy, pay}, promo_messages[], unit_price, unit_price_unit, unit_price_text, pack_size, available, max_order_quantity, labels[], category_path, impression_price, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"cafe"}},{"name":"product","description":"One Continente product by the `product_id` a search row returns: price, was price or PVPR, discount with its validity window, multi-buy deal with the site's conditions, price per kg/l, EANs, availability and order limits, category, images, and the label: regulated name, producer, ingredients, allergens, storage, origin, net content, nutrition table.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"The numeric product id a search row returns, or its https://www.continente.pt/produto/<slug>-<id>.html URL.","on_invalid":"reject","example":"4421406","aliases":["id","pid","url","product_url"]}],"returns":"product{product_id, name, brand, eans[], price, price_unit, regular_price, recommended_retail_price, price_valid_to, currency, discount{kind, text, value, unit, valid_text, valid_from, valid_to}, promotion_window, multibuy{text, buy, pay, conditions}, promotions[]{id, message, conditions, class}, on_offer, unit_price, unit_price_unit, unit_price_text, pack_size, available, online, availability_messages[], min_order_quantity, max_order_quantity, rating, deposit, category_id, category_name, top_category_id, top_category_name, category_path, labels[], images[], url}, label{regulated_name, producer, producer_address, ingredients, net_content, net_content_unit, net_weight, drained_weight, storage, allergens, origin, preparation, serving_size, serving_unit, marketing_message, nutrition[]{nutrient, amount, amount_text, unit, unit_code}, other[]{label, value}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"4421406"}},{"name":"categories","description":"Continente's category tree from the shop menu: id, name, URL, children. Ids feed `category` and the `category` filter.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"string","required":false,"description":"Return only this category's subtree; omit for the whole tree.","on_invalid":"reject","example":"supermercado","aliases":["cgid","category_id","parent"]}],"returns":"parent, total_categories, categories[]{category_id, name, url, path, depth, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"supermercado"}},{"name":"store","description":"Which Continente delivery store serves a Portuguese post code (the store whose assortment `search`/`category`/`promotions` show when you pass the same `postal_code`).","required_params":["postal_code"],"optional_params":[],"params":[{"name":"postal_code","type":"string","required":true,"description":"Portuguese post code (NNNN-NNN).","on_invalid":"reject","example":"4000-322","aliases":["zip_code","zip","postcode","codigo_postal","cp"]}],"returns":"postal_code, covered, store_name, store_id, physical_store_id, area_id, channel_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"4000-322"}}]},{"name":"coolblue","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Coolblue API — live product, price, stock and specification data scraper for coolblue.nl, coolblue.be and coolblue.de: keyword search with the retailer's own result count, category browsing with the printed delivery promise, the full manufacturer spec table, review scores and per-store pickup availability — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/coolblue/v1","spec_available":true,"actions":[{"name":"search","description":"Search Coolblue by keyword: product id, name, price in euro, the delivery promise the site prints beside the product, the review score and the key specs. When the keyword is a whole category Coolblue answers with that category instead of a result list — this endpoint follows that and tells you so in `resolved_as`, so a search for 'headphones' returns headphones rather than an error. `total` is Coolblue's own match count and is present on keyword result sets.","required_params":["query"],"optional_params":["market","filters","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, in English or Dutch. A product number (979101) or a manufacturer code (EP2-61329) also resolves to the single matching product.","on_invalid":"reject","example":"usb c cable"},{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - coolblue.nl"},{"value":"be","label":"Belgium - coolblue.be"},{"value":"de","label":"Germany - coolblue.de"}],"default":"nl","example":"nl","aliases":["country"]},{"name":"filters","type":"array","required":false,"description":"Facet segments in 'key:value' form, for example 'merk:apple'. One value per key (the source answers a multi-value '+' form with 404). Call the 'filters' action to list what a category accepts, with the result count behind each value.","on_invalid":"reject","example":["merk:apple"]},{"name":"sort","type":"enum","required":false,"description":"Result order. All five were measured to genuinely reorder the grid. An unknown value is rejected rather than passed on, because the source accepts any string and silently ignores what it does not know.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Coolblue's own relevance order"},{"value":"lowest-price","label":"Cheapest first"},{"value":"highest-price","label":"Most expensive first"},{"value":"most-sold","label":"Best selling first"},{"value":"highest-rated","label":"Best reviewed first"}],"default":"relevance","example":"lowest-price"},{"name":"page","type":"integer","required":false,"description":"Page of results. Coolblue stops a keyword result set at page 20: page 21 returns HTTP 404, so at most 480 products of a larger set are reachable and `results_reachable` reports it. Narrow with `filters` to reach the rest.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"results[]{product_id, name, url, brand, price_eur, price_excl_vat_eur, price_display, rating_out_of_10, review_count, delivery_promise, delivery_state, availability, in_stock, second_chance_price_eur, highlights[], colour_variants[], image}, total, page, page_size, pages_available, results_reachable, resolved_as{kind, category}, market, dropped_tiles","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"usb c cable"}},{"name":"browse","description":"Walk one of Coolblue's 403 categories — the catalogue view, and the richer of the two surfaces. Rows carry the typed delivery promise, the price with and without VAT, the review average, how many stores hold the item, the refurbished (Second Chance) price when there is one, and the colour variants. Use `categories` for the slugs and `filters` for the narrowing options.","required_params":["category"],"optional_params":["market","filters","sort","page"],"params":[{"name":"category","type":"string","required":true,"description":"A Coolblue category slug such as 'headphones', 'washing-machines' or 'laptops', or a category URL. The `categories` action lists all 403 of them.","on_invalid":"reject","example":"headphones","aliases":["slug","url"]},{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - coolblue.nl"},{"value":"be","label":"Belgium - coolblue.be"},{"value":"de","label":"Germany - coolblue.de"}],"default":"nl","example":"nl","aliases":["country"]},{"name":"filters","type":"array","required":false,"description":"Facet segments in 'key:value' form, for example 'merk:apple'. One value per key (the source answers a multi-value '+' form with 404). Call the 'filters' action to list what a category accepts, with the result count behind each value.","on_invalid":"reject","example":["merk:apple"]},{"name":"sort","type":"enum","required":false,"description":"Result order. All five were measured to genuinely reorder the grid. An unknown value is rejected rather than passed on, because the source accepts any string and silently ignores what it does not know.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Coolblue's own relevance order"},{"value":"lowest-price","label":"Cheapest first"},{"value":"highest-price","label":"Most expensive first"},{"value":"most-sold","label":"Best selling first"},{"value":"highest-rated","label":"Best reviewed first"}],"default":"relevance","example":"lowest-price"},{"name":"page","type":"integer","required":false,"description":"Page of 22 results. A category publishes its own `total_pages`; asking past it returns NOT_FOUND.","on_invalid":"reject","default":1,"example":1,"minimum":1}],"returns":"results[] (same row shape as search), page, page_size, total_pages, category, filters, market","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"headphones"}},{"name":"product/detail","description":"One full product record by id or Coolblue URL: price including and excluding VAT, stock state, how many of Coolblue's stores hold it and how many can hand it over, the complete manufacturer specification table, the review average with its 1-5 star distribution, Coolblue's own pros and cons, and every gallery image. The answer also carries `source_check`, which compares the price against the schema.org copy the same page publishes so you can see the two agree.","required_params":["product_id"],"optional_params":["market","include_specs"],"params":[{"name":"product_id","type":"string","required":true,"description":"The Coolblue product number (979101) or any Coolblue product URL. The id alone is enough — no slug needed.","on_invalid":"reject","example":"979101","aliases":["id","url","sku"]},{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - coolblue.nl"},{"value":"be","label":"Belgium - coolblue.be"},{"value":"de","label":"Germany - coolblue.de"}],"default":"nl","example":"nl","aliases":["country"]},{"name":"include_specs","type":"boolean","required":false,"description":"Include the specification table. Turn it off for a smaller answer when you only want price and stock; it costs the same, because it is the same page.","on_invalid":"ignore","default":true}],"returns":"product{product_id, name, brand, url, price_eur, price_excl_vat_eur, list_price_eur, availability, in_stock, stores_listed, stores_with_stock, stores_available_for_pickup, rating_out_of_10, review_count, review_distribution_stars[], pros[], cons[], description, image, images[], specifications[]{group,name,value}, specification_groups[], specification_count, source_check{...}}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"979101"}},{"name":"products/batch","description":"Up to 10 products in ONE call — the shape a price tracker runs on. Each row carries price, stock, rating and the id, and any id this market does not sell is named in `missing` instead of being silently dropped. Specifications are off by default here to keep the answer readable.","required_params":["product_ids"],"optional_params":["market","include_specs"],"params":[{"name":"product_ids","type":"array","required":true,"description":"Between 1 and 10 Coolblue product numbers or product URLs.","on_invalid":"reject","example":["979101","947006","923419"],"aliases":["ids","product_id"]},{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - coolblue.nl"},{"value":"be","label":"Belgium - coolblue.be"},{"value":"de","label":"Germany - coolblue.de"}],"default":"nl","example":"nl","aliases":["country"]},{"name":"include_specs","type":"boolean","required":false,"description":"Include each product's specification table. Off by default because ten full spec tables is a large answer.","on_invalid":"ignore","default":false}],"returns":"products[]{same shape as product/detail}, requested, returned, missing[], market","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":20},"example_params":{"product_ids":["979101","947006","923419"]}},{"name":"filters","description":"The filter vocabulary a category actually accepts: every facet key, its English title, and the values behind it — each with the exact `key:value` segment to pass back into `browse` or `search` AND the number of products behind it, so you can see a filter bite before spending a call on it. This exists because the facet keys are Dutch even on the English storefront (the brand filter is `merk`), so they cannot be guessed.","required_params":["category"],"optional_params":["filters","market"],"params":[{"name":"category","type":"string","required":true,"description":"The category whose filters to list, for example 'headphones'.","on_invalid":"reject","example":"headphones","aliases":["slug","url"]},{"name":"filters","type":"array","required":false,"description":"Show the filters still available after these segments are applied, with their updated counts — this is how you discover the narrowing options inside a selection.","on_invalid":"reject","example":["merk:sony"]},{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - coolblue.nl"},{"value":"be","label":"Belgium - coolblue.be"},{"value":"de","label":"Germany - coolblue.de"}],"default":"nl","example":"nl","aliases":["country"]}],"returns":"filters[]{key, title, type, value_count, values[]{value, segment, label, result_count, selected}}, filter_count, category, market","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"headphones"}},{"name":"categories","description":"Every Coolblue category, read from the sitemap it publishes for crawlers: the slug you pass to `browse` and `filters`, and its path on the site. One small request, and the slugs were verified against the live grid rather than assumed.","required_params":[],"optional_params":["market","contains"],"params":[{"name":"market","type":"enum","required":false,"description":"Which storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands - coolblue.nl"},{"value":"be","label":"Belgium - coolblue.be"},{"value":"de","label":"Germany - coolblue.de"}],"default":"nl","example":"nl","aliases":["country"]},{"name":"contains","type":"string","required":false,"description":"Only return categories whose slug contains this text.","on_invalid":"reject","example":"washing"}],"returns":"categories[]{category, url_path}, count, market","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"contains":"washing"}}]},{"name":"coop","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Co-op API scraper — the UK grocery catalogue of coop.co.uk: search products and read the full product record with the shelf price, the Co-op Member price, the per-kg/per-litre unit price, the current deal and when it ends, the pack size and the EAN/UPC barcode of every product. Browse by category, list every live deal, resolve a product by slug, URL or Co-op's own retail code. No account, no browser for search.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/coop/v1","spec_available":true,"actions":[{"name":"search","description":"Search Co-op's UK grocery catalogue by keyword. Every product comes back with the barcode (GTIN/EAN), the price without membership, the Co-op Member price kept separately, the pre-deal price when a deal cut it, the computed per-kg or per-litre unit price, the pack size, every live deal with its end date, the category path and whether Co-op lets you order the item online or only shows you a shop. Filter by category, page family or deals; sort by price.","required_params":["query"],"optional_params":["category","product_type","deals_only","sort","page","page_size"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it: 'milk', 'cheddar', 'cadbury'. Brand words work. Co-op's own index answers; it covers food, drink and a small household range (3,412 products measured).","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"category","type":"enum","required":false,"description":"Only products in this Co-op grocery category, spelled exactly as `categories` returns it (and as `categories[]` on every row). Any category Co-op adds later is accepted too.","on_invalid":"reject","allowed_values":[{"value":"Chocolate, crisps, biscuits and snacks","label":"Chocolate, crisps, biscuits and snacks"},{"value":"Beer, wine and spirits","label":"Beer, wine and spirits"},{"value":"Food cupboard","label":"Food cupboard"},{"value":"Chilled and deli","label":"Chilled and deli"},{"value":"Pizza, pasta and ready meals","label":"Pizza, pasta and ready meals"},{"value":"Water, juice and soft Drinks","label":"Water, juice and soft Drinks"},{"value":"Frozen foods","label":"Frozen foods"},{"value":"Breakfast cereals, tea and coffee","label":"Breakfast cereals, tea and coffee"},{"value":"Fruit, veg and salad","label":"Fruit, veg and salad"},{"value":"Meat, fish and poultry","label":"Meat, fish and poultry"},{"value":"Household essentials","label":"Household essentials"},{"value":"Vegetarian, vegan and gluten free","label":"Vegetarian, vegan and gluten free"},{"value":"Bakery and cakes","label":"Bakery and cakes"},{"value":"Health and beauty","label":"Health and beauty"},{"value":"Milk, butter and eggs","label":"Milk, butter and eggs"},{"value":"Free From","label":"Free From"}],"example":"Milk, butter and eggs","value_pattern":".{2,80}","aliases":["grocery_category"]},{"name":"product_type","type":"enum","required":false,"description":"Narrow to one of Co-op's three page families. `winePage` and `spiritsPage` rows additionally carry ABV, country, grape and brand.","on_invalid":"reject","allowed_values":[{"value":"foodPage","label":"Food and household (3,070 of 3,412 products)"},{"value":"winePage","label":"Wine (228) — also carries grape, wine type, country, ABV"},{"value":"spiritsPage","label":"Beer and spirits (114) — also carries ABV, country, brand"}],"example":"winePage"},{"name":"deals_only","type":"boolean","required":false,"description":"true: only products Co-op's index flags as being in a deal (370 of 3,412 when measured). Note `in_deal` has a third state, null, on rows where the index does not say — those are excluded by this filter.","on_invalid":"ignore","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order. Co-op's price sorts run on the index's LISTED price, so a product whose deal price is lower still sorts by the listed one — sort on `price` yourself if you need the deal-aware order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Co-op's own ranking (default)"},{"value":"price_asc","label":"Cheapest first, by the index's listed price"},{"value":"price_desc","label":"Most expensive first, by the index's listed price"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. `page_count` says how many there are; a page past the end comes back empty rather than repeating the last one (measured).","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-100, default 48 — the size Co-op's own site asks for).","on_invalid":"reject","default":48,"minimum":1,"maximum":100}],"returns":"results[]{product_id (the slug), retail_code (Co-op's own numeric product code; null on the few rows that carry 0), entry_id, title, gtin (zero-padded and check-digit verified), gtin_format ('EAN-13' | 'UPC-A' | 'EAN-8'), ean_raw (exactly what the index held), price (what a shopper pays WITHOUT membership — the deal price when a deal is open to everyone), currency ('GBP'), regular_price (the pre-deal price, only when a deal cut it), price_is_deal, discount_percent, member_price (Co-op Member price when Co-op runs one as a number), member_offer (a member deal with no single number, as Co-op words it), member_program, member_discount_percent, aldi_price_match, deal_text, deal_ends_at, unit_price, unit ('kg' | 'litre'), unit_price_source, pack_size, brand (wine and spirits only — see coverage), categories[], food_type, product_type, in_deal (true | false | null = the index does not say), promotions[]{deal_id, type ('member' | 'everyone' | 'aldi_price_match'), member_only, text, title, price, starts_at, ends_at, landing_page}, availability ('order_online' | 'in_store_only' | null), order_url, url, image, description, updated_at, first_published_at, and on wine/spirits rows abv_percent, wine_type, grape, origin_country, spirit_type, dietary[], awards[]}, count, total_results (Co-op's own count for the query), page, page_size, page_count, country, currency, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk"}},{"name":"category","description":"Walk one Co-op grocery category end to end — same rows as `search`, no keyword. Use it to pull a whole shelf (for example 'Milk, butter and eggs') with barcodes and prices, page by page.","required_params":["category"],"optional_params":["product_type","deals_only","sort","page","page_size"],"params":[{"name":"category","type":"enum","required":true,"description":"The Co-op grocery category to walk through, spelled exactly as the `categories` action returns it.","on_invalid":"reject","allowed_values":[{"value":"Chocolate, crisps, biscuits and snacks","label":"Chocolate, crisps, biscuits and snacks"},{"value":"Beer, wine and spirits","label":"Beer, wine and spirits"},{"value":"Food cupboard","label":"Food cupboard"},{"value":"Chilled and deli","label":"Chilled and deli"},{"value":"Pizza, pasta and ready meals","label":"Pizza, pasta and ready meals"},{"value":"Water, juice and soft Drinks","label":"Water, juice and soft Drinks"},{"value":"Frozen foods","label":"Frozen foods"},{"value":"Breakfast cereals, tea and coffee","label":"Breakfast cereals, tea and coffee"},{"value":"Fruit, veg and salad","label":"Fruit, veg and salad"},{"value":"Meat, fish and poultry","label":"Meat, fish and poultry"},{"value":"Household essentials","label":"Household essentials"},{"value":"Vegetarian, vegan and gluten free","label":"Vegetarian, vegan and gluten free"},{"value":"Bakery and cakes","label":"Bakery and cakes"},{"value":"Health and beauty","label":"Health and beauty"},{"value":"Milk, butter and eggs","label":"Milk, butter and eggs"},{"value":"Free From","label":"Free From"}],"example":"Milk, butter and eggs","value_pattern":".{2,80}","aliases":["grocery_category"]},{"name":"product_type","type":"enum","required":false,"description":"Narrow to one of Co-op's three page families. `winePage` and `spiritsPage` rows additionally carry ABV, country, grape and brand.","on_invalid":"reject","allowed_values":[{"value":"foodPage","label":"Food and household (3,070 of 3,412 products)"},{"value":"winePage","label":"Wine (228) — also carries grape, wine type, country, ABV"},{"value":"spiritsPage","label":"Beer and spirits (114) — also carries ABV, country, brand"}],"example":"winePage"},{"name":"deals_only","type":"boolean","required":false,"description":"true: only products Co-op's index flags as being in a deal (370 of 3,412 when measured). Note `in_deal` has a third state, null, on rows where the index does not say — those are excluded by this filter.","on_invalid":"ignore","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order. Co-op's price sorts run on the index's LISTED price, so a product whose deal price is lower still sorts by the listed one — sort on `price` yourself if you need the deal-aware order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Co-op's own ranking (default)"},{"value":"price_asc","label":"Cheapest first, by the index's listed price"},{"value":"price_desc","label":"Most expensive first, by the index's listed price"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. `page_count` says how many there are; a page past the end comes back empty rather than repeating the last one (measured).","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-100, default 48 — the size Co-op's own site asks for).","on_invalid":"reject","default":48,"minimum":1,"maximum":100}],"returns":"results[]{product_id (the slug), retail_code (Co-op's own numeric product code; null on the few rows that carry 0), entry_id, title, gtin (zero-padded and check-digit verified), gtin_format ('EAN-13' | 'UPC-A' | 'EAN-8'), ean_raw (exactly what the index held), price (what a shopper pays WITHOUT membership — the deal price when a deal is open to everyone), currency ('GBP'), regular_price (the pre-deal price, only when a deal cut it), price_is_deal, discount_percent, member_price (Co-op Member price when Co-op runs one as a number), member_offer (a member deal with no single number, as Co-op words it), member_program, member_discount_percent, aldi_price_match, deal_text, deal_ends_at, unit_price, unit ('kg' | 'litre'), unit_price_source, pack_size, brand (wine and spirits only — see coverage), categories[], food_type, product_type, in_deal (true | false | null = the index does not say), promotions[]{deal_id, type ('member' | 'everyone' | 'aldi_price_match'), member_only, text, title, price, starts_at, ends_at, landing_page}, availability ('order_online' | 'in_store_only' | null), order_url, url, image, description, updated_at, first_published_at, and on wine/spirits rows abv_percent, wine_type, grape, origin_country, spirit_type, dietary[], awards[]}, count, total_results (Co-op's own count for the query), page, page_size, page_count, country, currency, category","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"Milk, butter and eggs"}},{"name":"deals","description":"Every Co-op product currently in a deal, with the deal's own wording, price and end date: Co-op Member prices, deals open to everyone and Aldi Price Match lines. Optionally only one kind of deal, or only one category.","required_params":[],"optional_params":["deal_type","category","sort","page","page_size"],"params":[{"name":"deal_type","type":"enum","required":false,"description":"Only deals of this kind. Omit for every current deal.","on_invalid":"reject","allowed_values":[{"value":"member","label":"Co-op Member prices (142 products measured)"},{"value":"everyone","label":"Open to everyone, no membership (306 deal objects)"},{"value":"aldi_price_match","label":"Aldi Price Match (69 products measured)"}],"example":"member"},{"name":"category","type":"enum","required":false,"description":"Only products in this Co-op grocery category, spelled exactly as `categories` returns it (and as `categories[]` on every row). Any category Co-op adds later is accepted too.","on_invalid":"reject","allowed_values":[{"value":"Chocolate, crisps, biscuits and snacks","label":"Chocolate, crisps, biscuits and snacks"},{"value":"Beer, wine and spirits","label":"Beer, wine and spirits"},{"value":"Food cupboard","label":"Food cupboard"},{"value":"Chilled and deli","label":"Chilled and deli"},{"value":"Pizza, pasta and ready meals","label":"Pizza, pasta and ready meals"},{"value":"Water, juice and soft Drinks","label":"Water, juice and soft Drinks"},{"value":"Frozen foods","label":"Frozen foods"},{"value":"Breakfast cereals, tea and coffee","label":"Breakfast cereals, tea and coffee"},{"value":"Fruit, veg and salad","label":"Fruit, veg and salad"},{"value":"Meat, fish and poultry","label":"Meat, fish and poultry"},{"value":"Household essentials","label":"Household essentials"},{"value":"Vegetarian, vegan and gluten free","label":"Vegetarian, vegan and gluten free"},{"value":"Bakery and cakes","label":"Bakery and cakes"},{"value":"Health and beauty","label":"Health and beauty"},{"value":"Milk, butter and eggs","label":"Milk, butter and eggs"},{"value":"Free From","label":"Free From"}],"example":"Milk, butter and eggs","value_pattern":".{2,80}","aliases":["grocery_category"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Co-op's price sorts run on the index's LISTED price, so a product whose deal price is lower still sorts by the listed one — sort on `price` yourself if you need the deal-aware order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Co-op's own ranking (default)"},{"value":"price_asc","label":"Cheapest first, by the index's listed price"},{"value":"price_desc","label":"Most expensive first, by the index's listed price"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. `page_count` says how many there are; a page past the end comes back empty rather than repeating the last one (measured).","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-100, default 48 — the size Co-op's own site asks for).","on_invalid":"reject","default":48,"minimum":1,"maximum":100}],"returns":"results[]{product_id (the slug), retail_code (Co-op's own numeric product code; null on the few rows that carry 0), entry_id, title, gtin (zero-padded and check-digit verified), gtin_format ('EAN-13' | 'UPC-A' | 'EAN-8'), ean_raw (exactly what the index held), price (what a shopper pays WITHOUT membership — the deal price when a deal is open to everyone), currency ('GBP'), regular_price (the pre-deal price, only when a deal cut it), price_is_deal, discount_percent, member_price (Co-op Member price when Co-op runs one as a number), member_offer (a member deal with no single number, as Co-op words it), member_program, member_discount_percent, aldi_price_match, deal_text, deal_ends_at, unit_price, unit ('kg' | 'litre'), unit_price_source, pack_size, brand (wine and spirits only — see coverage), categories[], food_type, product_type, in_deal (true | false | null = the index does not say), promotions[]{deal_id, type ('member' | 'everyone' | 'aldi_price_match'), member_only, text, title, price, starts_at, ends_at, landing_page}, availability ('order_online' | 'in_store_only' | null), order_url, url, image, description, updated_at, first_published_at, and on wine/spirits rows abv_percent, wine_type, grape, origin_country, spirit_type, dietary[], awards[]}, count, total_results (Co-op's own count for the query), page, page_size, page_count, country, currency, deal_type, deal_count_by_type","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"deal_type":"member"}},{"name":"product/detail","description":"The full record of one Co-op product, read from the product page itself and from Co-op's index together: the price the page is showing today, whether that price is a Member price, the was-price, the unit price exactly as Co-op prints it, the pack size, the barcode with a second independent witness, every live deal, all images, the ordering link and — when the page and the index disagree about the price — both numbers and a `price_mismatch` flag.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"A product's `product_id` from any listing (the slug, e.g. 'lurpak-spreadable-salted-400g'), its full coop.co.uk product URL, or its numeric `retail_code`.","on_invalid":"reject","example":"co-op-irresistible-peruvian-coffee-beans","value_pattern":"[A-Za-z0-9/:._~\\-]{1,200}","aliases":["id","slug","url"]}],"returns":"product{product_id (the slug), retail_code (Co-op's own numeric product code; null on the few rows that carry 0), entry_id, title, gtin (zero-padded and check-digit verified), gtin_format ('EAN-13' | 'UPC-A' | 'EAN-8'), ean_raw (exactly what the index held), price (what a shopper pays WITHOUT membership — the deal price when a deal is open to everyone), currency ('GBP'), regular_price (the pre-deal price, only when a deal cut it), price_is_deal, discount_percent, member_price (Co-op Member price when Co-op runs one as a number), member_offer (a member deal with no single number, as Co-op words it), member_program, member_discount_percent, aldi_price_match, deal_text, deal_ends_at, unit_price, unit ('kg' | 'litre'), unit_price_source, pack_size, brand (wine and spirits only — see coverage), categories[], food_type, product_type, in_deal (true | false | null = the index does not say), promotions[]{deal_id, type ('member' | 'everyone' | 'aldi_price_match'), member_only, text, title, price, starts_at, ends_at, landing_page}, availability ('order_online' | 'in_store_only' | null), order_url, url, image, description, updated_at, first_published_at, and on wine/spirits rows abv_percent, wine_type, grape, origin_country, spirit_type, dietary[], awards[], page_price, page_was_price, page_price_is_member, page_unit_price, page_unit, page_pack_size, page_gtin, page_gtin_format, images[], price_valid_until, minimum_unit_pricing_note, price_mismatch{index_price, page_price, reason}}, sources[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"co-op-irresistible-peruvian-coffee-beans"}},{"name":"categories","description":"Co-op's own category counters: every grocery category, food type and page family with the number of products in it, plus how many products are in a deal right now. One cheap call; the values are exactly what `category`, `product_type` and `deals_only` accept.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{name, product_count}, food_types[]{name, product_count}, product_types[]{name, product_count}, deals{in_deal, not_in_deal, unspecified}, total_products, country, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"copart","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Copart API — salvage & insurance auto-auction scraper: search live Copart lots by make, model, year, damage, title type, odometer and location, then pull full lot detail (VIN, damage, title, odometer, estimated value, current bid, sale date) and hi-res auction photos. Largest US salvage / total-loss car auction. No API key, no login required.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/copart/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Copart auction lots by free-text `query` and/or structured filters (make, model, year or year_min/year_max, title_type, vehicle_type, damage, condition, source, odometer_min/max, yard_number). Sortable + paginated. Returns rich lot cards with damage, title, odometer, estimated value, current bid, sale date, location and thumbnail.","required_params":[],"optional_params":["query","make","model","year","year_min","year_max","title_type","vehicle_type","damage","condition","source","odometer_min","odometer_max","yard_number","location","sort","page","size"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword to search lots (make, model, VIN fragment, anything). Leave empty to browse all lots and rely on filters.","on_invalid":"ignore","example":"honda civic","aliases":["q","keyword"]},{"name":"make","type":"string","required":false,"description":"Vehicle make to filter by (e.g. HONDA, FORD, BMW). Case-insensitive.","on_invalid":"ignore","example":"HONDA"},{"name":"model","type":"string","required":false,"description":"Vehicle model to filter by (e.g. CIVIC, F-150). Pair with `make`.","on_invalid":"ignore","example":"CIVIC"},{"name":"year","type":"integer","required":false,"description":"Exact model year. For a range use year_min / year_max instead.","on_invalid":"ignore","example":2020,"minimum":1900,"maximum":2030},{"name":"year_min","type":"integer","required":false,"description":"Minimum model year (inclusive). Combine with year_max.","on_invalid":"ignore","minimum":1900,"maximum":2030},{"name":"year_max","type":"integer","required":false,"description":"Maximum model year (inclusive). Combine with year_min.","on_invalid":"ignore","minimum":1900,"maximum":2030},{"name":"title_type","type":"enum","required":false,"description":"Filter by title brand.","on_invalid":"ignore","allowed_values":[{"value":"clean","label":"Clean title"},{"value":"salvage","label":"Salvage title"},{"value":"non_repairable","label":"Non-repairable / junk / cert of destruction"}]},{"name":"vehicle_type","type":"enum","required":false,"description":"Filter by vehicle category.","on_invalid":"ignore","allowed_values":[{"value":"automobile","label":"Automobiles"},{"value":"motorcycle","label":"Motorcycles"},{"value":"atv","label":"ATVs"},{"value":"boat","label":"Boats"},{"value":"bus","label":"Buses"},{"value":"construction","label":"Construction equipment"},{"value":"trailer","label":"Trailers"},{"value":"heavy_truck","label":"Heavy-duty trucks"},{"value":"rv","label":"Recreational vehicles"}]},{"name":"damage","type":"enum","required":false,"description":"Filter by primary damage type.","on_invalid":"ignore","allowed_values":[{"value":"front_end","label":"Front end"},{"value":"rear_end","label":"Rear end"},{"value":"side","label":"Side"},{"value":"all_over","label":"All over"},{"value":"rollover","label":"Rollover"},{"value":"top_roof","label":"Top/roof"},{"value":"undercarriage","label":"Undercarriage"},{"value":"water_flood","label":"Water/flood"},{"value":"hail","label":"Hail"},{"value":"burn","label":"Burn"},{"value":"burn_engine","label":"Burn — engine"},{"value":"burn_interior","label":"Burn — interior"},{"value":"vandalism","label":"Vandalism"},{"value":"mechanical","label":"Mechanical"},{"value":"normal_wear","label":"Normal wear"},{"value":"minor_dents","label":"Minor dents/scratches"},{"value":"stripped","label":"Stripped"},{"value":"biohazard","label":"Biohazard/chemical"},{"value":"damage_history","label":"Damage history"}]},{"name":"condition","type":"enum","required":false,"description":"Filter by lot condition / sale type.","on_invalid":"ignore","allowed_values":[{"value":"run_and_drive","label":"Run and Drive (CERT-D)"},{"value":"enhanced","label":"Enhanced vehicles"},{"value":"engine_start","label":"Engine Start Program"},{"value":"buy_it_now","label":"Buy It Now available"},{"value":"used","label":"Used vehicles"}]},{"name":"source","type":"enum","required":false,"description":"Filter by lot source / seller type.","on_invalid":"ignore","allowed_values":[{"value":"donations","label":"Donations"},{"value":"impound","label":"Impound vehicles"},{"value":"repossessions","label":"Repossessions"}]},{"name":"odometer_min","type":"integer","required":false,"description":"Minimum odometer reading (miles).","on_invalid":"ignore","minimum":0},{"name":"odometer_max","type":"integer","required":false,"description":"Maximum odometer reading (miles).","on_invalid":"ignore","minimum":0},{"name":"yard_number","type":"string","required":false,"description":"Restrict to one Copart yard/location by its yard number.","on_invalid":"ignore","example":"357"},{"name":"location","type":"string","required":false,"description":"Restrict to one Copart yard/location by name (e.g. 'TX - DALLAS', 'CA - VAN NUYS'). Get the exact names + lot counts from the `yards` action.","on_invalid":"ignore","example":"TX - DALLAS","aliases":["yard","yard_name"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"newest_listed","label":"Newly listed first"},{"value":"sale_date_asc","label":"Sale date: soonest first"},{"value":"sale_date_desc","label":"Sale date: latest first"},{"value":"year_desc","label":"Year: new to old"},{"value":"year_asc","label":"Year: old to new"},{"value":"odometer_asc","label":"Odometer: low to high"},{"value":"odometer_desc","label":"Odometer: high to low"},{"value":"make_az","label":"Make: A-Z"}],"default":"newest_listed"},{"name":"page","type":"integer","required":false,"description":"Page number (1-based; 1, 2, 3 …).","on_invalid":"ignore","default":1,"minimum":1},{"name":"size","type":"integer","required":false,"description":"Results per page (1–100). Defaults to 20.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100}],"returns":"lots[]{lot_number, vin(masked), year, make, model, trim, title, body_style, color, engine, cylinders, fuel_type, transmission, drive, primary_damage, secondary_damage, title_type, title_group, title_state, keys_available, highlights[], loss_type, odometer, odometer_brand, estimated_retail_value, current_bid, high_bid, buy_it_now_price, repair_cost, sale_status, currency, sale_date, sale_time, yard_name, yard_number, location_city, location_state, location_country, zip, latitude, longitude, thumbnail, vehicle_type, url} + meta{total_results, pagination}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"HONDA","size":20}},{"name":"lot_detail","description":"Full detail for one lot by `lot_number`: VIN (publicly masked by Copart), make, model, trim, year, primary/secondary damage, title type & group, odometer, color, engine, fuel, drive, transmission, estimated retail value, current/high bid, sale date & time, yard location (city/state/zip/lat/long) and keys availability.","required_params":["lot_number"],"optional_params":[],"params":[{"name":"lot_number","type":"string","required":true,"description":"Copart lot number — the digits in a copart.com/lot/ URL or a search result's lot_number.","on_invalid":"reject","example":"32754070","aliases":["lot","lot_id","ln"]}],"returns":"lot{lot_number, vin(masked), year, make, model, trim, title, body_style, color, engine, cylinders, fuel_type, transmission, drive, primary_damage, secondary_damage, title_type, title_group, title_state, keys_available, highlights[], loss_type, odometer, odometer_brand, estimated_retail_value, current_bid, high_bid, buy_it_now_price, repair_cost, sale_status, currency, sale_date, sale_time, yard_name, yard_number, location_city, location_state, location_country, zip, latitude, longitude, thumbnail, vehicle_type, url}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"lot_number":"32754070"}},{"name":"lot_images","description":"All auction photos for one lot by `lot_number`: ordered full-size, hi-res and thumbnail image URLs for the vehicle (exterior, interior, damage, VIN plate, odometer).","required_params":["lot_number"],"optional_params":[],"params":[{"name":"lot_number","type":"string","required":true,"description":"Copart lot number to fetch photos for.","on_invalid":"reject","example":"32754070","aliases":["lot","lot_id","ln"]}],"returns":"images[]{sequence, full_url, high_res_url, thumbnail_url, type}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"lot_number":"32754070"}},{"name":"yards","description":"Live list of Copart yards / locations you can filter `search` by, each with its yard_number and current lot count. Lifted from the live search facet taxonomy — use a yard_number with search's `yard_number` filter to scope to one location.","required_params":[],"optional_params":["query"],"params":[{"name":"query","type":"string","required":false,"description":"Optional name filter (case-insensitive substring) to find a yard, e.g. 'dallas', 'ca -', 'houston'.","on_invalid":"ignore","example":"dallas","aliases":["q"]}],"returns":"yards[]{name, location, lot_count}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dallas"}}]},{"name":"coppel","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Coppel API scraper — coppel.com (Mexico): search the catalogue, browse any category and read the full product record, with the price you pay today in MXN kept apart from the struck original price and from Coppel's published monthly credit plan (instalment amount, term and credit total), plus brand, seller (Coppel or a marketplace store), delivery options, badges, specifications, images and variants. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/coppel/v1","spec_available":true,"actions":[{"name":"search","description":"Search coppel.com by keyword, exactly as Coppel's own search box does. Every product comes back with the price you actually pay today in MXN, the struck original price and the discount when there is one, Coppel's published monthly instalment plan (amount, term and the higher credit total — Coppel is a credit retailer, so this is the number most of its customers act on), the brand, whether Coppel or a marketplace store sells it, the delivery options, the sale badges and the product URL. Page through the whole result set, sort by price, narrow by brand or by any facet Coppel publishes (offer step, colour, seller, screen size, RAM…), and read the facet list back so the next call can drill down. A keyword with no match answers an honest empty result, not an error.","required_params":["query"],"optional_params":["page","page_size","sort","brand","filters"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper would type in Coppel's search box, in Spanish (televisor, laptop, tenis nike, refrigerador).","on_invalid":"reject","example":"televisor","aliases":["q","keyword","search_term"]},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Up to 200.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-100. Coppel's own site asks for 24; larger pages are served in one call.","on_invalid":"reject","default":24,"example":48,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order, using Coppel's own orderBy codes.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Coppel's default relevance order"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand exactly as Coppel spells it in the Marca facet (Samsung, Hisense, Adidas). Shorthand for filters=attr_facet_marca=<brand>.","on_invalid":"reject","example":"Samsung"},{"name":"filters","type":"array","required":false,"description":"Any facet from a previous call, as filters_available[].values[].filter returns it ('attr_facet_marca=Samsung', 'attr_facet_oferta=30% o más', 'attr_facet_coloragrupador=Negro (#000)'). Several may be sent; they are combined. Both halves are required — Coppel refuses a key without a value.","on_invalid":"reject","example":["attr_facet_marca=Samsung"],"value_pattern":"[A-Za-z0-9_.\\-]+=.+"}],"returns":"results[]{product_id (Coppel part number), sku, default_variant_id, title, brand, url, image, price (what you pay today, MXN), list_price (struck original, null when there is no discount), discount_pct, currency, on_sale, installments{monthly_amount, months, credit_total, credit_markup_pct, currency} (Coppel's published credit plan — a higher total than the cash price), seller{id, name, kind (coppel|marketplace), is_marketplace}, badges[]{label, group, variant}, delivery{home_delivery, store_pickup, marketplace_shipping}, variant_types{has_size, is_marketplace, is_clothing, is_furniture, is_motorcycle, is_phone}}, count, total_results, total_pages, page, page_size, has_more, filters_available[]{name, key, values[]{label, count, key, value, filter}}, related_categories[]{category_id, name, product_count, url}, breadcrumb[]{category_id, name, url}, sort, applied_filters[], currency, query, redirect (the landing page Coppel sends this keyword to, when it does), query_type (Coppel's own search-engine verdict), query_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"televisor"}},{"name":"category","description":"Every product in a Coppel category, by category id or category URL, paged. Same product rows, sorts and facets as search, plus the category breadcrumb, the category's own page title and meta description, and the sub-categories underneath it with their product counts — so a whole department can be walked from one call.","required_params":["category"],"optional_params":["page","page_size","sort","brand","filters"],"params":[{"name":"category","type":"string","required":true,"description":"A Coppel category id (cat000166) or any Coppel category URL (https://www.coppel.com/ct/electronica/laptops/cat000166). Category ids come back in related_categories[] and breadcrumb[] of any call.","on_invalid":"reject","example":"cat000166","value_pattern":"(?i)(cat\\d{4,10}|https?://.*|/.*)","aliases":["category_id","id","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Up to 200.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-100. Coppel's own site asks for 24; larger pages are served in one call.","on_invalid":"reject","default":24,"example":48,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order, using Coppel's own orderBy codes.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Coppel's default relevance order"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand exactly as Coppel spells it in the Marca facet (Samsung, Hisense, Adidas). Shorthand for filters=attr_facet_marca=<brand>.","on_invalid":"reject","example":"Samsung"},{"name":"filters","type":"array","required":false,"description":"Any facet from a previous call, as filters_available[].values[].filter returns it ('attr_facet_marca=Samsung', 'attr_facet_oferta=30% o más', 'attr_facet_coloragrupador=Negro (#000)'). Several may be sent; they are combined. Both halves are required — Coppel refuses a key without a value.","on_invalid":"reject","example":["attr_facet_marca=Samsung"],"value_pattern":"[A-Za-z0-9_.\\-]+=.+"}],"returns":"results[]{product_id (Coppel part number), sku, default_variant_id, title, brand, url, image, price (what you pay today, MXN), list_price (struck original, null when there is no discount), discount_pct, currency, on_sale, installments{monthly_amount, months, credit_total, credit_markup_pct, currency} (Coppel's published credit plan — a higher total than the cash price), seller{id, name, kind (coppel|marketplace), is_marketplace}, badges[]{label, group, variant}, delivery{home_delivery, store_pickup, marketplace_shipping}, variant_types{has_size, is_marketplace, is_clothing, is_furniture, is_motorcycle, is_phone}}, count, total_results, total_pages, page, page_size, has_more, filters_available[]{name, key, values[]{label, count, key, value, filter}}, related_categories[]{category_id, name, product_count, url}, breadcrumb[]{category_id, name, url}, sort, applied_filters[], currency, category_id, category_title, category_meta{title, description, keywords}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"cat000166"}},{"name":"product/detail","description":"The full Coppel product record by part number, bare product number or product URL: title, brand, the price you pay today, the struck original price and discount, Coppel's monthly credit plan with the credit total and its mark-up over the cash price, the seller (Coppel or the marketplace store), home delivery and store pickup, sale badges, the long description with its HTML stripped, every published specification, every image, the category breadcrumb, the page's SEO title and description, and every variant (size, colour, storage) with its own price and instalment plan. A dead id answers NOT_FOUND.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"A Coppel part number — PR-8900172 (Coppel catalogue), PM-8225513 or MKP-747799071 (marketplace) — the product URL (https://www.coppel.com/pdp/...-pr-8900172), or the bare number, in which case the PR, PM and MKP prefixes are tried in that order.","on_invalid":"reject","example":"PR-8900172","value_pattern":"(?i)((PR|PM|MKP)[-_]?\\d{5,12}|\\d{5,12}|https?://.*|/pdp/.*)","aliases":["id","part_number","url"]}],"returns":"product{product_id, sku, default_variant_id, title, brand, url, image, images[], price, list_price, discount_pct, currency, on_sale, installments{monthly_amount, months, credit_total, credit_markup_pct, currency}, seller{id, name, kind, is_marketplace}, badges[], delivery{home_delivery, store_pickup, marketplace_shipping}, variant_types{}, description, specifications[]{name, value, values[]}, breadcrumb[]{category_id, name, url}, category_id, meta{title, description, keywords}, is_international, content_provider, size_guide_id, variants[]{variant_id, product_id, seller_id, seller_name, price, list_price, discount_pct, installments{}, attributes[]{name, identifier, usage, values[]}}, variant_count, variant_options[]{name, identifier, value, hex_value, options[]}, other_sellers[]{seller_id, seller_name, product_id, sku, price, list_price}}, currency","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"PR-8900172"}}]},{"name":"costco","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Costco API scraper — costco.com and costco.ca: search products, read the full item record with the price after instant savings and the regular price kept apart, savings validity dates, member-only and price-in-cart flags, order limits, ratings, specifications and variants; browse categories and search suggestions. No account, no browser.","version":"0.3.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/costco/v1","spec_available":true,"actions":[{"name":"search","description":"UK/JP/AU/KR/TW support native hybrid keyword search with source match_type and source total (semantic suggestions can occur even for nonsense keywords), GBP/JPY/AUD/KRW/TWD and optional null hidden prices. Advanced filters and other actions are unsupported there. US/CA: each product comes with the price after instant savings and, separately, the regular price and the saving, Costco's own savings text and the date the price is valid through, member-only and price-in-cart flags, rating and review count, availability, delivery programs, badges and the category pages it sits in. A keyword Costco answers with a category page is followed; unrelated padding for a keyword with no match is removed and counted. Sort by price, rating, newest or most viewed; filter by brand or in-stock.","required_params":["query"],"optional_params":["country","language","page","page_size","sort","brand","in_stock_only","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Words a shopper would type on Costco.","on_invalid":"reject","example":"coffee","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Costco store: us (costco.com, USD) or ca (costco.ca, CAD). A costco.ca URL sets it by itself. UK/JP/AU/KR/TW support search/detail on their native storefront; other actions remain US/CA only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — costco.com (USD)"},{"value":"ca","label":"Canada — costco.ca (CAD, English or French)"},{"value":"uk","label":"Costco UK (GBP)"},{"value":"jp","label":"Costco JP (JPY)"},{"value":"au","label":"Costco AU (AUD)"},{"value":"kr","label":"Costco KR (KRW)"},{"value":"tw","label":"Costco TW (TWD)"},{"value":"gb","label":"United Kingdom alias"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"US/CA use English (Canada also French). Expansions use native storefront language; default en selects that native language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French (Canada only)"}],"default":"en","example":"en"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":400},{"name":"page_size","type":"integer","required":false,"description":"US/CA accept 1-96; UK/JP/AU/KR/TW accept 1-24 products per source page.","on_invalid":"reject","default":24,"minimum":1,"maximum":96},{"name":"sort","type":"enum","required":false,"description":"Costco's own sort orders. Costco's search no longer offers a most-viewed order: most_viewed returns best-match order and `sort_applied` says relevance.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"rating","label":"Highest rated"},{"value":"newest","label":"Newest"},{"value":"most_viewed","label":"Most viewed"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"Only one brand, spelled as `filters_available.brands` lists it.","on_invalid":"reject","example":"Kirkland Signature"},{"name":"in_stock_only","type":"boolean","required":false,"description":"true: hide products Costco marks unavailable (the site's 'Hide Unavailable Items').","on_invalid":"ignore","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When nothing matches, Costco fills the page with unrelated products. They are dropped and counted; true returns them separately in `fallback_results`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{item_number, product_id, title, brand, model, gtin, url, image, price, regular_price, instant_savings, savings_text, price_valid_through, marketing_statement, price_range{min, max}, currency, member_only, price_in_cart_only, price_display, rating, review_count, rating_scale, availability, delivery_status, programs[], online_only, warehouse_only, costco_direct, badges[], has_variants, max_order_quantity, fsa_eligible, category_paths[], categories[]}, count, total_results, page, page_size, has_more, fallback_results_dropped, sponsored_dropped, duplicates_dropped, non_merchandise_dropped, filters_available{brands[], price_ranges[], ratings[], categories[] ({value, count})}, country, language, currency, query, matched_query, redirected_to, redirect_url, sort_applied. Expansions: results[]{item_number,product_id,title,url,price,price_display,regular_price,currency,price_visibility,price_range,gtin(optional),in_stock,availability,rating,review_count,brand,member_only,image,country,language}; count,total_results,page,page_size,has_more,country,language,currency,query,source_query,query_response,search_mode; each expansion row has match_type,textual/semantic/source_unspecified,lexical_score,vector_score","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"coffee"}},{"name":"product/detail","description":"UK/JP/AU/KR/TW resolve item_number or a same-country source URL to description and specifications, native currency and published price (null when hidden). US/CA keep the full record: title, brand, manufacturer, model, GTIN, the price after instant savings with the regular price and saving kept apart, savings text and validity date, promotions, member-only and price-in-cart flags, shipping note, rating and review count, description, feature bullets, specifications, badges, delivery programs, order limit, availability, category pages and every variant (size, colour) with its own price.","required_params":["item_number"],"optional_params":["country","language","max_rotations"],"params":[{"name":"item_number","type":"string","required":true,"description":"A Costco item number (1789247), a product number (the number in a product URL, 4000262621) or a costco.com / costco.ca product URL.","on_invalid":"reject","example":"1789247","aliases":["product_id","id","url"]},{"name":"country","type":"enum","required":false,"description":"Which Costco store: us (costco.com, USD) or ca (costco.ca, CAD). A costco.ca URL sets it by itself. UK/JP/AU/KR/TW support search/detail on their native storefront; other actions remain US/CA only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — costco.com (USD)"},{"value":"ca","label":"Canada — costco.ca (CAD, English or French)"},{"value":"uk","label":"Costco UK (GBP)"},{"value":"jp","label":"Costco JP (JPY)"},{"value":"au","label":"Costco AU (AUD)"},{"value":"kr","label":"Costco KR (KRW)"},{"value":"tw","label":"Costco TW (TWD)"},{"value":"gb","label":"United Kingdom alias"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"US/CA use English (Canada also French). Expansions use native storefront language; default en selects that native language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French (Canada only)"}],"default":"en","example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, item_number, title, brand, manufacturer, model, gtin, url, images[], price, regular_price, instant_savings, savings_text, price_valid_through, marketing_statement, promotions, savings_valid_from, savings_valid_through, price_range{min, max}, currency, member_only, price_in_cart_only, price_includes_shipping_handling, shipping_note, rating, review_count, rating_scale, description, features[], specifications{name: value}, badges[], programs[], online_only, costco_direct, buyable, published, max_order_quantity, fsa_eligible, variants[]{item_number, attributes{}, price, regular_price, instant_savings, member_only, price_in_cart_only, buyable, published, max_order_quantity, fsa_eligible}, variant_count, availability, delivery_status, category_paths[], categories[], start_date}, country, language. Expansions add description, summary, specifications[]{name,values[],unit}, specifications_text, ingredients,warranty,categories[],images[],min_order_quantity,max_order_quantity; GBP/JPY/AUD/KRW/TWD and price_visibility hidden/published/range/not_published.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"item_number":"1789247"}},{"name":"category","description":"Every product on one Costco category page (for example mattresses, televisions, kirkland-signature-groceries), paged, with the same rows, sorting and filters as search, plus the category's breadcrumb.","required_params":["category"],"optional_params":["country","language","page","page_size","sort","brand","in_stock_only","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A Costco category page: its name as in the URL (mattresses), its path (/mattresses.html) or the full URL. `category_paths` on any product lists them.","on_invalid":"reject","example":"mattresses","aliases":["category_url","category_path"]},{"name":"country","type":"enum","required":false,"description":"Which Costco store: us (costco.com, USD) or ca (costco.ca, CAD). A costco.ca URL sets it by itself. UK/JP/AU/KR/TW support search/detail on their native storefront; other actions remain US/CA only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — costco.com (USD)"},{"value":"ca","label":"Canada — costco.ca (CAD, English or French)"},{"value":"uk","label":"Costco UK (GBP)"},{"value":"jp","label":"Costco JP (JPY)"},{"value":"au","label":"Costco AU (AUD)"},{"value":"kr","label":"Costco KR (KRW)"},{"value":"tw","label":"Costco TW (TWD)"},{"value":"gb","label":"United Kingdom alias"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"US/CA use English (Canada also French). Expansions use native storefront language; default en selects that native language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French (Canada only)"}],"default":"en","example":"en"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":400},{"name":"page_size","type":"integer","required":false,"description":"US/CA accept 1-96; UK/JP/AU/KR/TW accept 1-24 products per source page.","on_invalid":"reject","default":24,"minimum":1,"maximum":96},{"name":"sort","type":"enum","required":false,"description":"Costco's own sort orders. Costco's search no longer offers a most-viewed order: most_viewed returns best-match order and `sort_applied` says relevance.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"rating","label":"Highest rated"},{"value":"newest","label":"Newest"},{"value":"most_viewed","label":"Most viewed"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"Only one brand, spelled as `filters_available.brands` lists it.","on_invalid":"reject","example":"Kirkland Signature"},{"name":"in_stock_only","type":"boolean","required":false,"description":"true: hide products Costco marks unavailable (the site's 'Hide Unavailable Items').","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{item_number, product_id, title, brand, model, gtin, url, image, price, regular_price, instant_savings, savings_text, price_valid_through, marketing_statement, price_range{min, max}, currency, member_only, price_in_cart_only, price_display, rating, review_count, rating_scale, availability, delivery_status, programs[], online_only, warehouse_only, costco_direct, badges[], has_variants, max_order_quantity, fsa_eligible, category_paths[], categories[]}, count, total_results, page, page_size, has_more, fallback_results_dropped, sponsored_dropped, duplicates_dropped, non_merchandise_dropped, filters_available{brands[], price_ranges[], ratings[], categories[] ({value, count})}, country, language, currency, category, breadcrumb[]{name, url}, sort_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"mattresses"}},{"name":"search/suggest","description":"Costco's search-box suggestions for what a shopper has typed: the search phrases Costco suggests (type search, with the search URL) and matching warehouse locations (type warehouse, with address and page URL).","required_params":["query"],"optional_params":["country","language","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper has typed so far (Costco suggests from 4 characters).","on_invalid":"reject","example":"kirkl","aliases":["q","prefix"]},{"name":"country","type":"enum","required":false,"description":"Which Costco store: us (costco.com, USD) or ca (costco.ca, CAD). A costco.ca URL sets it by itself. UK/JP/AU/KR/TW support search/detail on their native storefront; other actions remain US/CA only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — costco.com (USD)"},{"value":"ca","label":"Canada — costco.ca (CAD, English or French)"},{"value":"uk","label":"Costco UK (GBP)"},{"value":"jp","label":"Costco JP (JPY)"},{"value":"au","label":"Costco AU (AUD)"},{"value":"kr","label":"Costco KR (KRW)"},{"value":"tw","label":"Costco TW (TWD)"},{"value":"gb","label":"United Kingdom alias"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"US/CA use English (Canada also French). Expansions use native storefront language; default en selects that native language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French (Canada only)"}],"default":"en","example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"suggestions[]{type, text, item_number, product_id, brand, image, url, address}, count, query, country, language","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"coffee"}}]},{"name":"costco-sameday","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Costco Same-Day API scraper — sameday.costco.com product search, categories, Weekly Savings, product detail and warehouse locator with each Costco warehouse's same-day delivery price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/costco-sameday/v1","spec_available":true,"actions":[{"name":"search","description":"Search sameday.costco.com at one Costco store: regular price (price list), was-price, member/card price and promotions apart, unit price, stock level, brand and size, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in the sameday.costco.com search box ('milk').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"sameday.costco.com pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Costco store prices the results (Costco prices and range differ by store). Default 98027 — then `store_defaulted` is true.","on_invalid":"reject","example":"98027","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Costco store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"407"}],"returns":"products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"98027"}},{"name":"category","description":"Every product of a sameday.costco.com collection (a category, a brand or a diet collection from `categories`) priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (rc-milk …) or a sameday.costco.com /store/costco/collections/<slug> URL.","on_invalid":"reject","example":"rc-milk","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Costco store prices the results (Costco prices and range differ by store). Default 98027 — then `store_defaulted` is true.","on_invalid":"reject","example":"98027","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Costco store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"407"}],"returns":"collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"rc-milk","postal_code":"98027"}},{"name":"product/detail","description":"One Costco product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price, promotions and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or a sameday.costco.com /store/costco/products/ URL.","on_invalid":"reject","example":"3308878","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Costco store prices the results (Costco prices and range differ by store). Default 98027 — then `store_defaulted` is true.","on_invalid":"reject","example":"98027","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Costco store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"407"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"3308878","postal_code":"98027"}},{"name":"categories","description":"The sameday.costco.com category tree (departments and their collections) or one collection's sub-collections; slugs feed `category`.","required_params":[],"optional_params":["slug","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Optional collection slug: returns its sub-collections. Without it: the whole category tree.","on_invalid":"reject","example":"rc-milk","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Costco store prices the results (Costco prices and range differ by store). Default 98027 — then `store_defaulted` is true.","on_invalid":"reject","example":"98027","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Costco store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"407"}],"returns":"collections[]{slug,name,url,children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"rc-milk"}},{"name":"stores","description":"Costco stores around a US ZIP code, nearest first, with address, coordinates, distance and which services sameday.costco.com offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find Costco stores around (nearest first).","on_invalid":"reject","example":"98027","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"98027"}},{"name":"offers","description":"Costco's current deal lists at one store: Weekly Savings.","required_params":[],"optional_params":["type","page","per_page","cursor","postal_code","store_id"],"params":[{"name":"type","type":"enum","required":false,"description":"Which deal list: weekly_savings (Weekly Savings).","on_invalid":"reject","allowed_values":[{"value":"weekly_savings","label":"Weekly Savings"}],"default":"weekly_savings"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Costco store prices the results (Costco prices and range differ by store). Default 98027 — then `store_defaulted` is true.","on_invalid":"reject","example":"98027","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Costco store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"407"}],"returns":"type, collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"98027"}},{"name":"promotions","description":"Which Costco deal lists are live now at one store, each with its name and product count.","required_params":[],"optional_params":["postal_code","store_id"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Costco store prices the results (Costco prices and range differ by store). Default 98027 — then `store_defaulted` is true.","on_invalid":"reject","example":"98027","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Costco store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"407"}],"returns":"promotions[]{type,name,slug,url,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"98027"}}]},{"name":"coupang","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Coupang API scraper - live keyword search and product lookup for coupang.com, South Korea's largest e-commerce marketplace. Prices in KRW with the list price and discount behind them, rocket-delivery filter, ratings and review counts, delivery ETA. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/coupang/v1","spec_available":true,"actions":[{"name":"search","description":"Search Coupang by keyword, in Korean or English, optionally narrowed by price range and to Coupang's own rocket-delivery inventory, and sorted by price, recency or sales. Every row carries the item and product ids, the product url, the title, the price as a number in KRW with the formatted string beside it, the list price and the discount percentage where Coupang shows one, the rating and review count on almost every row (99.0% of 420 measured rows; a brand-new listing has neither), whether it is in stock, the promised delivery date, the shipping terms where Coupang states them (94.0% of the same 420 rows), and whether the row is a sponsored placement. 🔴 ONE PAGE ONLY: Coupang's search route serves up to 60 rows and its own pagination is broken (page 2 comes back empty and offset silently repeats page 1), so there is no page parameter and no way past 60 - narrow the keyword or the price range instead. 🔴 Coupang never answers a search with an empty page: a keyword it cannot match is answered with 60 unrelated recommendations, and it returns HTTP 200 while doing it. This endpoint detects that and reports it as `possible_no_match` - check it before trusting a result set. 🔴 One product id can appear on several rows: Coupang lists each sellable variant (pack size, colour) as its own row at its own price, so `item_id` is the unique key, not `product_id`.","required_params":["query"],"optional_params":["sort","price_min","price_max","rocket_delivery","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for. Korean or English both work — Coupang's own index does the matching, and an English brand term (`airpods`, `canon`, `lg gram`) returns Korean-titled Korean listings. 🔴 Coupang never returns an empty page: a keyword with no match comes back as 60 unrelated recommendations, so check `possible_no_match` in the response before trusting a result set.","on_invalid":"reject","example":"무선이어폰","aliases":["q","keyword","search"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Every value here was proven to change the result set against a 54-56/60 self-overlap noise floor. An unknown value is SILENTLY IGNORED by Coupang, so this parameter rejects one rather than pretending it applied.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Coupang's own ranking — the default"},{"value":"price_asc","label":"Cheapest first (12/60 overlap with the default page)"},{"value":"price_desc","label":"Most expensive first (5/60 overlap)"},{"value":"newest","label":"Most recently listed first (3/60 overlap)"},{"value":"best_selling","label":"Best-selling first (31/60 overlap)"}],"default":"relevance","example":"price_asc","aliases":["sorter","order_by"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in KRW (whole won, no decimals). Coupang treats the bound as approximate: with 10 000-20 000 requested, 55 of 59 rows came back inside the band and the widest stray was 22 400.","on_invalid":"reject","example":10000,"minimum":0,"aliases":["min_price","minPrice"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in KRW (whole won, no decimals). Approximate — see `price_min`.","on_invalid":"reject","example":20000,"minimum":0,"aliases":["max_price","maxPrice"]},{"name":"rocket_delivery","type":"boolean","required":false,"description":"Return only Coupang's own rocket-delivery listings (로켓배송 / 로켓프레시 / 로켓설치 / 로켓판매자). 🔴 Coupang's search route no longer honours a rocket parameter - it accepts one and returns the same page - so this is applied to the page Coupang sends, using each row's own rocket flag (`is_rocket`). That means you get the rocket rows OUT OF the 60 that route returns, not 60 rocket rows: measured 2026-09-18, 32 to 58 of 60 rows were rocket depending on the keyword. The number removed is returned as `rocket_filtered_out`.","on_invalid":"reject","default":false,"example":true,"aliases":["rocket","fast_delivery"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many Korean exits to try before giving up. Every attempt leases a different one, so a single unlucky exit never decides the answer. Raise it only if you are seeing transient UPSTREAM_HTTP or TARGET_BLOCKED.","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":6}],"returns":"items[]{item_id, product_id (NOT unique - Coupang lists each variant of a product as its own row), vendor_item_id, name, url, price (number, KRW), price_display, currency, list_price, discount_percent, in_stock, sold_out_text, low_stock, rating (number), review_count, rating_scale (null - Coupang publishes no scale), rating_ratio, seller (null - Coupang publishes no seller on the search surface), brand (null except on R.LUX luxury rows), shipping, is_rocket (boolean - the row's own rocket-delivery flag; the shipping text is NOT a reliable substitute), delivery_badges[] (ROCKET / ROCKET_MERCHANT / ROCKET_FRESH / ROCKET_INSTALL / TOMORROW / COUPANG_GLOBAL, verbatim), delivery_eta, cash_reward, is_sponsored, image, rank}, count, possible_no_match (boolean), page_limit_reached, rocket_filtered_out (how many rows the rocket filter removed, null when it was not asked for), filters{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"무선이어폰"}},{"name":"product","description":"Look up ONE Coupang product by id - search-grade fields. 🔴 Read this before you call it: Coupang's product-detail page is closed to unauthenticated clients, so this action answers by asking Coupang's own search index for the id. That means you get exactly the fields a search card carries, complete and correct, and NOT a full product record. You DO get: the title, the price as a number in KRW, the list price and discount, the currency, whether it is in stock, the rating and review count, the thumbnail, the shipping terms and promised delivery date, and the item / vendor-item ids. You do NOT get: the product description, the specification table, the image gallery (one thumbnail only), the seller or vendor name, the option/variant attribute list, the stock quantity, the category path, or any review text - Coupang does not publish any of those on the surface that is open to us. 🔴 A Coupang product id covers several sellable items at DIFFERENT prices (one coffee product measured at 4 010 / 5 700 / 5 990 / 6 250 / 6 270 / 8 550 KRW for different pack sizes), so this action returns EVERY item Coupang lists under the id in `items[]` and names the one Coupang ranks first as `item` - use `items[]` if you need the cheapest or a specific pack. A dead or invented id returns NOT_FOUND rather than the recommendations Coupang backfills with.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Coupang product id (the digits in `coupang.com/vp/products/<id>`), an item id, or a full Coupang product url — all three are accepted. Every `search` row returns `product_id`, `item_id` and `url`.","on_invalid":"reject","example":"9034631075","aliases":["id","item_id","url","productId"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many Korean exits to try before giving up. Every attempt leases a different one, so a single unlucky exit never decides the answer. Raise it only if you are seeing transient UPSTREAM_HTTP or TARGET_BLOCKED.","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":6}],"returns":"item{...the representative item, same shape as a search row...}, items[]{every item Coupang lists under this product id, same shape}, item_count, price_range{min, max, currency} when the items differ in price, product_id, url","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"9034631075"}}]},{"name":"coursera","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Coursera API scraper — search courses, specializations, professional certificates and guided projects by keyword, then pull full program detail (description, rating, enrollment count, difficulty, languages, skills, instructors, partners, what-you'll-learn and the courses inside a specialization), plus top student reviews, browse every university & company partner and the subject catalogue. Returns title, partner, rating, review count, enrollments, level, duration, price/free status, skills and instructors for any Coursera course or program. No API key required.","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/coursera/v1","spec_available":true,"actions":[{"name":"search","description":"Search Coursera by keyword (any topic, skill, tool or title). Returns a paginated list of result cards — name, url, type (course / specialization / professional certificate / guided project), partner, rating, review count, difficulty, duration, skills and free status — most-relevant first. Optional filters: level, type, language, sort. Feed a result's slug/url into the detail action. Page with `page`; meta.has_more / meta.total_count tell you how many.","required_params":["query"],"optional_params":["level","type","language","sort","page","subject"],"params":[{"name":"query","type":"string","required":true,"description":"What to search Coursera for — a topic, skill, tool or course/program title ('machine learning', 'python', 'excel', 'project management', 'aws'). Returns courses, specializations, professional certificates and guided projects, most-relevant first.","on_invalid":"reject","example":"machine learning","aliases":["q","keyword"]},{"name":"level","type":"string","required":false,"description":"Filter by difficulty. One of: Beginner, Intermediate, Advanced, Mixed.","on_invalid":"ignore","example":"Beginner","aliases":["difficulty"]},{"name":"type","type":"string","required":false,"description":"Filter by product type. One of: Courses, Specializations, Professional Certificates, Guided Projects, Degrees.","on_invalid":"ignore","example":"Courses","aliases":["product_type"]},{"name":"language","type":"string","required":false,"description":"Filter by course language (e.g. English, Spanish, French, Arabic).","on_invalid":"ignore","example":"English","aliases":["lang"]},{"name":"sort","type":"string","required":false,"description":"Result order: Relevance (default) or Newest.","on_invalid":"ignore","example":"Relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (12 per page). Page until meta.has_more is false; meta.total_count / meta.total_pages tell you how many.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":80},{"name":"subject","type":"string","required":false,"description":"Optional subject/topic slug to bias the search (e.g. data-science, business, computer-science).","on_invalid":"ignore","example":"data-science","aliases":["topic"]}],"returns":"results[]{id, name, url, slug, type, difficulty, duration, rating, review_count, partners[], skills[], is_free, is_coursera_plus, image, tagline} + meta{page, has_more, next_page, total_count, total_pages}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"machine learning"}},{"name":"detail","description":"Full detail for one Coursera course OR program (specialization / professional certificate) by slug or URL. For a course: description, difficulty, estimated workload, rating (average, count, by-star), total enrollments, languages, certificates, what-you'll-learn, recommended background, skills, instructors and partners. For a program: the same plus the list of courses inside it. Pass a search result's url, or a slug with type='specialization' to force the program path.","required_params":[],"optional_params":["slug","url","type"],"params":[{"name":"slug","type":"string","required":false,"description":"The course/program slug (the last path segment of a Coursera URL, e.g. 'machine-learning' from /learn/machine-learning, or 'machine-learning-introduction' from /specializations/…). From a search result's slug.","on_invalid":"reject","example":"machine-learning","aliases":["course"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full Coursera course/specialization URL (a search result's `url`). The path selects course vs program automatically.","on_invalid":"ignore","example":"https://www.coursera.org/learn/machine-learning"},{"name":"type","type":"string","required":false,"description":"Optional, only when passing a bare slug: 'course' (default) or 'specialization' / 'professional certificate' to force the program path.","on_invalid":"ignore","example":"course"}],"returns":"course_or_program{id, type, name, slug, url, description, difficulty, estimated_workload, ratings{average, rating_count, comment_count}, ratings_by_star{...}, total_enrollments, primary_languages[], certificates[], what_you_will_learn[], recommended_background, skills[], instructors[]{id, name, title, courses_taught, learners_reached}, partners[]{id, name, logo}, courses[] (programs only)}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"machine-learning"}},{"name":"reviews","description":"Top public student reviews for a Coursera course or program by slug/url: star rating, review text, author and date. Returns the most-helpful reviews Coursera surfaces on the page (top reviews — Coursera does not expose deep review pagination without login). Use meta.review_count for the total number of ratings.","required_params":[],"optional_params":["slug","url","type"],"params":[{"name":"slug","type":"string","required":false,"description":"The course/program slug to pull top reviews for (from a search result's slug).","on_invalid":"reject","example":"machine-learning","aliases":["course"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full Coursera course/program URL.","on_invalid":"ignore","example":"https://www.coursera.org/learn/machine-learning"},{"name":"type","type":"string","required":false,"description":"Optional, only with a bare slug: 'course' (default) or 'specialization'.","on_invalid":"ignore","example":"course"}],"returns":"reviews[]{review_id, author, rating, comment, date} + meta{review_count, rating_average}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"machine-learning"}},{"name":"partners","description":"Browse the universities and companies that partner with Coursera (Stanford, University of Michigan, Google, IBM, …). Returns partner id, name and logo. Use it to map who publishes on Coursera.","required_params":[],"optional_params":[],"params":[],"returns":"partners[]{id, name, logo}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"subjects","description":"Browse Coursera's subject catalogue — the top-level domains (Data Science, Business, Computer Science, Arts & Humanities, …) with their slug and description. Use a subject slug as the search `subject` filter.","required_params":[],"optional_params":[],"params":[],"returns":"subjects[]{name, slug, description}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"courtyard","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Courtyard.io API scraper - the vaulted graded-card marketplace: search every slab Courtyard holds (Pokémon, One Piece, Magic, sports cards, sealed packs, comics, coins) by game, grader, grade, set, year, price and fair market value; full asset detail with cert number, FMV, asks, bids, Courtyard's buyback offer, vault status and on-chain sale history; live pack pulls; marketplace sales feed; packs with price, expected value and odds. USD. No account, no wallet, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/courtyard/v1","spec_available":true,"actions":[{"name":"search","description":"Search Courtyard's marketplace - every graded slab, raw card, sealed pack, comic and coin in Courtyard's vault - by name or cert number, and filter by game/category, item type, grader, grade, year, set, language, the pack it was pulled from, buy-now price range, fair-market-value range, listed or not, and listing date. Each row: the asset id, the card identity (name, set, number, year, variant), grader, grade and cert number, the live buy-now price (null when not listed), Courtyard's FMV and the discount to it, favorites, views, owner, image and courtyard.io link. 10 sort orders.","required_params":[],"optional_params":["query","category","collection","grader","grade","year","set","language","pack","variant","listing_status","price_min","price_max","fmv_min","fmv_max","listed_after","sort","page","limit","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free text as typed in the site's search box: card or player name, set, card number or a grading cert number.","on_invalid":"reject","example":"charizard","aliases":["q","keyword","name"]},{"name":"category","type":"string","required":false,"description":"Game, sport or theme (pokemon, one_piece, magic, baseball, basketball, football, soccer, marvel_comic, ancient_coins …) or the exact category name Courtyard shows. Several separated by commas. `filters` lists every category with counts.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon"},{"value":"one_piece","label":"One Piece"},{"value":"magic","label":"Magic The Gathering"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"formula_1","label":"Formula 1"},{"value":"wrestling","label":"Wrestling"},{"value":"boxing","label":"Boxing"},{"value":"mma","label":"MMA"},{"value":"golf","label":"Golf"},{"value":"tennis","label":"Tennis"},{"value":"racing","label":"Racing"},{"value":"marvel","label":"Marvel"},{"value":"marvel_comic","label":"Marvel Comic"},{"value":"dc_comic","label":"D.C. Comic"},{"value":"independent_comic","label":"Independent Comic"},{"value":"disney","label":"Disney"},{"value":"star_wars","label":"Star Wars"},{"value":"veefriends","label":"VeeFriends"},{"value":"weiss_schwarz","label":"Weiss Schwarz"},{"value":"metazoo","label":"MetaZoo"},{"value":"dragon_ball","label":"Dragon Ball"},{"value":"league_of_legends","label":"League of Legends"},{"value":"ancient_coins","label":"Ancient"},{"value":"us_coins","label":"US"},{"value":"shipwreck_coins","label":"Shipwreck"},{"value":"slam_magazine","label":"SLAM Magazine"},{"value":"sneakers","label":"Sneakers"},{"value":"watches","label":"Watches"}],"example":"pokemon","value_pattern":".{2,60}","aliases":["game","sport"]},{"name":"collection","type":"enum","required":false,"description":"Kind of item: graded cards, raw cards, sealed booster packs, graded comics, graded coins, sneakers, watches.","on_invalid":"reject","allowed_values":[{"value":"graded_cards","label":"Graded Cards"},{"value":"raw_cards","label":"Raw Cards"},{"value":"sealed_packs","label":"Ungraded Booster Packs"},{"value":"graded_comics","label":"Graded Comic Books"},{"value":"graded_coins","label":"Graded Coins"},{"value":"sneakers","label":"Sneakers"},{"value":"watches","label":"Watches"},{"value":"framed_jerseys","label":"Framed Jersey"}],"aliases":["type","item_type"]},{"name":"grader","type":"string","required":false,"description":"Grading company (PSA, CGC, BGS, SGC, TAG, NGC, PCGS …). Several separated by commas.","on_invalid":"reject","allowed_values":[{"value":"PSA","label":"PSA"},{"value":"CGC","label":"CGC"},{"value":"BGS","label":"BGS"},{"value":"SGC","label":"SGC"},{"value":"TAG","label":"TAG"},{"value":"CSG","label":"CSG"},{"value":"NGC","label":"NGC"},{"value":"PCGS","label":"PCGS"},{"value":"CGC-COMIC","label":"CGC-COMIC"},{"value":"BVG","label":"BVG"},{"value":"AGS","label":"AGS"},{"value":"BCCG","label":"BCCG"},{"value":"GMA","label":"GMA"},{"value":"HGA","label":"HGA"},{"value":"ISA","label":"ISA"},{"value":"PSA-DNA","label":"PSA-DNA"},{"value":"DSG","label":"DSG"},{"value":"CCG","label":"CCG"},{"value":"DCS","label":"DCS"},{"value":"FCG","label":"FCG"},{"value":"FGA","label":"FGA"}],"example":"PSA","value_pattern":"[A-Za-z][A-Za-z-]{1,12}","aliases":["grading_company","agency"]},{"name":"grade","type":"string","required":false,"description":"Grade: a number (10, 9.5, 9 … matches every label of that grade, e.g. 10 = GEM MINT, PRISTINE, BLACK LABEL, PERFECT) or an exact label such as '10 PRISTINE'. Several separated by commas.","on_invalid":"reject","example":"10"},{"name":"year","type":"string","required":false,"description":"Year printed on the card. Several separated by commas.","on_invalid":"reject","example":"1999"},{"name":"set","type":"string","required":false,"description":"Exact set name as Courtyard shows it (`filters` lists them).","on_invalid":"reject","example":"Pokémon Sword & Shield Brilliant Stars"},{"name":"language","type":"string","required":false,"description":"Card language: English, Japanese, Chinese, Korean, German, French, Spanish, Italian, Indonesian, Thai, Portuguese …","on_invalid":"reject","example":"Japanese"},{"name":"pack","type":"string","required":false,"description":"Name of the Courtyard pack or event the item was pulled from (`filters` → pulled_from).","on_invalid":"reject","example":"Pokémon Starter Pack","aliases":["pulled_from","event"]},{"name":"variant","type":"string","required":false,"description":"Parallel / variant label (Holo, 1st Edition, Refractor, Full Art …).","on_invalid":"reject","example":"Full Art Secret"},{"name":"listing_status","type":"enum","required":false,"description":"All vault items (default, like the site) or only items listed for sale.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every asset in the vault, listed or not (the site's default)"},{"value":"listed","label":"Only assets with a live buy-now listing"}],"default":"all","aliases":["status","for_sale"]},{"name":"price_min","type":"number","required":false,"description":"Lowest buy-now price, USD (implies listed items).","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest buy-now price, USD (implies listed items).","on_invalid":"reject","example":500,"minimum":0},{"name":"fmv_min","type":"number","required":false,"description":"Lowest Courtyard fair market value, USD.","on_invalid":"reject","example":250,"minimum":0},{"name":"fmv_max","type":"number","required":false,"description":"Highest Courtyard fair market value, USD.","on_invalid":"reject","example":1000,"minimum":0},{"name":"listed_after","type":"string","required":false,"description":"Only items listed at or after this time (ISO date/time or unix seconds) - for incremental monitoring of new listings.","on_invalid":"reject","example":"2026-11-01T00:00:00Z"},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"newest_listed","label":"Most recently listed first (the site's default order)"},{"value":"price_asc","label":"Lowest buy-now price first"},{"value":"price_desc","label":"Highest buy-now price first"},{"value":"newest_pulled","label":"Most recently pulled from a pack / added to the vault first"},{"value":"recently_transferred","label":"Most recent change of owner first (a pack pull counts)"},{"value":"best_deals","label":"Courtyard's best deals: biggest discount to FMV, weighted"},{"value":"discount_desc","label":"Biggest discount of the buy-now price to FMV first"},{"value":"fmv_desc","label":"Highest fair market value first"},{"value":"fmv_asc","label":"Lowest fair market value first"},{"value":"most_favorited","label":"Most favorited first"}],"default":"newest_listed"},{"name":"page","type":"integer","required":false,"description":"Page number. Courtyard serves the first 1,000 results of any search; narrow the filters to reach the rest.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100; the site shows 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, results[]{asset_id, title, collection, card{name, set, card_number, year, category, language, variant, brand, tags[], pulled_from, attributes{}}, grading{grader, grade, grade_value, grade_label, cert_number}, listing{order_id, price_usd, currency, listed_at, expires_at, maker_wallet, marketplace} (null when not for sale), for_sale, fmv_usd, fmv_confidence, fmv_source, discount_to_fmv_percent, favorite_count, view_count, owner{username, wallet, owned_since}, pulled_at, last_transfer_at, image_url, url}, count, total, page, limit, pages, has_more, sort, filters{}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","grader":"PSA","listing_status":"listed"}},{"name":"asset","description":"One Courtyard asset in full: card identity, grader, grade and cert number, Courtyard's fair market value and its confidence, the buy-now listing and every ask, every bid (Courtyard's own instant buyback offer flagged), minimum listing and bid prices, vault status and location, burned/redeemed status, owner, the pack it was pulled from, front and back slab scans, video, token and contract, likes, and the complete on-chain history with every sale price (marketplace sale vs buyback) and the pack price paid at the pull. Look up by asset id, asset URL or grading cert number.","required_params":["asset_id"],"optional_params":["grader","include_description","max_rotations"],"params":[{"name":"asset_id","type":"string","required":true,"description":"The 64-character Courtyard asset id (asset_id from search), the asset URL on courtyard.io, or the grading company's cert number.","on_invalid":"reject","example":"e7d931f461c939c4c10f5cd3cd114fa2dddbcd9b7cbafa4a50c0009b2573d98f","aliases":["id","url","asset","cert_number","cert"]},{"name":"grader","type":"string","required":false,"description":"Only with a cert number: which grader issued it, when two graders share the number.","on_invalid":"reject","example":"PSA"},{"name":"include_description","type":"boolean","required":false,"description":"Also return Courtyard's write-up of the card (headline, history, key facts, sources) when it has one.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"asset{asset_id, title, collection, card{…}, grading{grader, grade, grade_value, grade_label, cert_number}, fmv_usd, fmv_confidence, minimum_listing_price_usd, minimum_bid_usd, listing{…}, for_sale, asks[]{order_id, side, price_usd, currency, maker_wallet, is_courtyard_buyback, created_at, expires_at, marketplace}, bids[]{…}, best_bid_usd, courtyard_buyback_offer_usd, vaulted, vault_location, burned, status, owner{username, wallet}, last_event{type, time}, pulled_at, pulled_from_pack_id, pulled_from_pack_url, images{front, back, render, render_cropped, video}, collectible_id, chain, contract, token_id, metadata_url, url, likes, sale_history[]{type, kind (marketplace|buyback|pack_pull|burn|transfer), time, price_usd, payment, from_wallet, to_wallet, tx_hash, block}, last_sale{…}, sales_count, description{headline, summary, collectible_notes, design_and_history, key_facts[], sources[]} (include_description=true)}, price_history (null: Courtyard shows it to signed-in users only)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"asset_id":"e7d931f461c939c4c10f5cd3cd114fa2dddbcd9b7cbafa4a50c0009b2573d98f"}},{"name":"recent_pulls","description":"The live feed of pack openings ('pulls') on Courtyard: the newest cards, coins and comics pulled from packs, all packs or the ones you name, with the card identity, grade, cert number, FMV, the pack, who pulled it, whether it is still in the vault or was already sold back, and Courtyard's buyback offer. Up to 50 newest pulls per call.","required_params":[],"optional_params":["pack_id","limit","max_rotations"],"params":[{"name":"pack_id","type":"string","required":false,"description":"Only pulls from these packs (ids from `packs`, comma-separated).","on_invalid":"reject","example":"pkmn-starter-pack","aliases":["pack","vending_machine_id","pack_ids"]},{"name":"limit","type":"integer","required":false,"description":"How many of the newest pulls (1-50).","on_invalid":"reject","default":50,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"pulls[]{asset_id, title, collection, card{…}, grading{…}, fmv_usd, fmv_confidence, pulled_at, pack_id, pack_url, revealed, pulled_by{username, wallet} (null when unknown), current_owner{username, wallet}, status (in_vault | burned_or_redeemed), last_event{type, time}, courtyard_buyback_offer_usd, listing{…}, image_url, front_image_url, url}, count, packs[]","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":2},"example_params":{"limit":20}},{"name":"sales","description":"Recent sales across the whole Courtyard marketplace, newest first, from the on-chain transactions: sale price in USD, time, buyer and seller wallets, transaction hash, and whether it was a marketplace sale between collectors or an instant buyback by Courtyard - joined with the card (title, grader, grade, cert number, FMV at the time of the call). Roughly the last 1,000 sales are reachable.","required_params":[],"optional_params":["kind","limit","offset","max_rotations"],"params":[{"name":"kind","type":"enum","required":false,"description":"Which sales. About 4 in 5 on-chain sales are buybacks.","on_invalid":"reject","allowed_values":[{"value":"marketplace","label":"Sales between collectors on the marketplace"},{"value":"buyback","label":"Instant buybacks: the owner sold the item back to Courtyard"},{"value":"all","label":"Both"}],"default":"marketplace"},{"name":"limit","type":"integer","required":false,"description":"How many sales to return (1-50).","on_invalid":"reject","default":25,"minimum":1,"maximum":50},{"name":"offset","type":"integer","required":false,"description":"Skip this many of the newest on-chain sale transactions (use next_offset from the previous page).","on_invalid":"reject","default":0,"minimum":0,"maximum":1000},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"sales[]{time, kind, price_usd, payment, seller_wallet, buyer_wallet, tx_hash, block, asset_id, title, card{…}, grading{…}, fmv_usd, collection, image_url, url}, count, scanned_transactions, next_offset, has_more","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":3},"example_params":{}},{"name":"packs","description":"Every Courtyard pack (vending machine): price, expected value and its ratio to price, buyback ratio, the odds table (value tiers with min/max value and odds percent), pulls in the last 24 hours, 7 and 30 days, stock status, category, tier and link. Filter by category or status.","required_params":[],"optional_params":["category","status","max_rotations"],"params":[{"name":"category","type":"string","required":false,"description":"Only packs of this category (pokemon, one_piece, sports, baseball, basketball, football, comics, coins, watches, sneakers …; matches the category id or name).","on_invalid":"reject","example":"pokemon","aliases":["game"]},{"name":"status","type":"enum","required":false,"description":"Active packs only (default) or all.","on_invalid":"reject","allowed_values":[{"value":"active","label":"On sale now"},{"value":"all","label":"Every pack Courtyard lists"}],"default":"active"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"packs[]{pack_id, title, description, category, category_id, category_group, tier, status, featured, price_usd, expected_value_usd, expected_value_ratio, buyback_ratio, sale_closed, max_per_purchase, out_of_stock, low_stock, min_card_value_usd, odds[]{tier, min_value_usd, max_value_usd, odds_percent} (null when Courtyard publishes no odds for the pack), pulls_24h, pulls_7d, pulls_30d, pull_counts_at, image_url, thumbnail_url, url}, count","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"pokemon"}},{"name":"pack","description":"One Courtyard pack in full: everything in `packs` plus its heavy hitters - the top-tier chase cards Courtyard shows for the pack (up to 50, highest FMV first) with tier, title, FMV and images.","required_params":["pack_id"],"optional_params":["max_rotations"],"params":[{"name":"pack_id","type":"string","required":true,"description":"Pack id from `packs`, or its courtyard.io/vending-machine/… URL.","on_invalid":"reject","example":"pkmn-starter-pack","aliases":["pack","vending_machine_id","url","id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"pack{…packs fields, heavy_hitters[]{tier, collectible_id, title, fmv_usd, image_url, front_image_url}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"pack_id":"pkmn-starter-pack"}},{"name":"filters","description":"The marketplace's filter vocabularies with live counts: categories, item types, graders, grades, years, sets, languages, the packs/events items were pulled from and variants - for the whole vault or scoped to a search (query, category, item type, grader). Feed the values back into `search`.","required_params":[],"optional_params":["query","category","collection","grader","max_values","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Scope the counts to a search.","on_invalid":"reject","example":"charizard","aliases":["q"]},{"name":"category","type":"string","required":false,"description":"Game, sport or theme (pokemon, one_piece, magic, baseball, basketball, football, soccer, marvel_comic, ancient_coins …) or the exact category name Courtyard shows. Several separated by commas. `filters` lists every category with counts.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon"},{"value":"one_piece","label":"One Piece"},{"value":"magic","label":"Magic The Gathering"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"formula_1","label":"Formula 1"},{"value":"wrestling","label":"Wrestling"},{"value":"boxing","label":"Boxing"},{"value":"mma","label":"MMA"},{"value":"golf","label":"Golf"},{"value":"tennis","label":"Tennis"},{"value":"racing","label":"Racing"},{"value":"marvel","label":"Marvel"},{"value":"marvel_comic","label":"Marvel Comic"},{"value":"dc_comic","label":"D.C. Comic"},{"value":"independent_comic","label":"Independent Comic"},{"value":"disney","label":"Disney"},{"value":"star_wars","label":"Star Wars"},{"value":"veefriends","label":"VeeFriends"},{"value":"weiss_schwarz","label":"Weiss Schwarz"},{"value":"metazoo","label":"MetaZoo"},{"value":"dragon_ball","label":"Dragon Ball"},{"value":"league_of_legends","label":"League of Legends"},{"value":"ancient_coins","label":"Ancient"},{"value":"us_coins","label":"US"},{"value":"shipwreck_coins","label":"Shipwreck"},{"value":"slam_magazine","label":"SLAM Magazine"},{"value":"sneakers","label":"Sneakers"},{"value":"watches","label":"Watches"}],"example":"pokemon","value_pattern":".{2,60}","aliases":["game","sport"]},{"name":"collection","type":"enum","required":false,"description":"Kind of item: graded cards, raw cards, sealed booster packs, graded comics, graded coins, sneakers, watches.","on_invalid":"reject","allowed_values":[{"value":"graded_cards","label":"Graded Cards"},{"value":"raw_cards","label":"Raw Cards"},{"value":"sealed_packs","label":"Ungraded Booster Packs"},{"value":"graded_comics","label":"Graded Comic Books"},{"value":"graded_coins","label":"Graded Coins"},{"value":"sneakers","label":"Sneakers"},{"value":"watches","label":"Watches"},{"value":"framed_jerseys","label":"Framed Jersey"}],"aliases":["type","item_type"]},{"name":"grader","type":"string","required":false,"description":"Grading company (PSA, CGC, BGS, SGC, TAG, NGC, PCGS …). Several separated by commas.","on_invalid":"reject","allowed_values":[{"value":"PSA","label":"PSA"},{"value":"CGC","label":"CGC"},{"value":"BGS","label":"BGS"},{"value":"SGC","label":"SGC"},{"value":"TAG","label":"TAG"},{"value":"CSG","label":"CSG"},{"value":"NGC","label":"NGC"},{"value":"PCGS","label":"PCGS"},{"value":"CGC-COMIC","label":"CGC-COMIC"},{"value":"BVG","label":"BVG"},{"value":"AGS","label":"AGS"},{"value":"BCCG","label":"BCCG"},{"value":"GMA","label":"GMA"},{"value":"HGA","label":"HGA"},{"value":"ISA","label":"ISA"},{"value":"PSA-DNA","label":"PSA-DNA"},{"value":"DSG","label":"DSG"},{"value":"CCG","label":"CCG"},{"value":"DCS","label":"DCS"},{"value":"FCG","label":"FCG"},{"value":"FGA","label":"FGA"}],"example":"PSA","value_pattern":"[A-Za-z][A-Za-z-]{1,12}","aliases":["grading_company","agency"]},{"name":"max_values","type":"integer","required":false,"description":"Most values per vocabulary (largest counts first).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"total, categories[]{value, count}, collections[]{value, key, count}, graders[], grades[], years[], sets[], languages[], pulled_from[], variants[] (each list {value, count}, largest first; a list you filtered on keeps every value, counted under the other filters - what you would get by switching)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"charizard"}}]},{"name":"crexi","category":{"id":"other","title":"Other"},"title":"Crexi API scraper — crexi.com, the US commercial real estate marketplace: search the for-sale listings and the spaces for lease of any city, county, ZIP or state with Crexi's own filters (property type, asking price, building size, lot acreage, cap rate, year built, opportunity zone, asking rate per square foot), and read one listing in full with its fact table, brokers, brokerage and per-suite lease availability. Listings with no published price — 'contact broker', auctions, offering-memorandum-only deals — are returned as an explicit unpriced answer with the reason, never as a guessed number and never as an error. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/crexi/v1","spec_available":true,"actions":[{"name":"search","description":"Search the FOR-SALE commercial listings on crexi.com. Give a market — city plus state, a county, a ZIP code or a whole state — and narrow it with the filters Crexi itself publishes: property type, asking price range, building size, lot acreage, cap rate, year built and opportunity-zone status. Every row carries the asking price in USD with an explicit status, the property types, the building size, the brokerage, the full geocoded address and the live crexi.com URL. Listings whose price the broker did not publish are included by default and say so; set include_unpriced to false for priced listings only. Page with offset. A market with no matching listing answers an honest empty result, not an error.","required_params":[],"optional_params":["city","state","county","zip_code","query","property_types","price_min","price_max","size_min","size_max","acres_min","acres_max","cap_rate_min","cap_rate_max","opportunity_zone_only","include_unpriced","limit","offset"],"params":[{"name":"city","type":"string","required":false,"description":"City name as Crexi spells it, e.g. 'Austin', 'Los Angeles', 'Fort Worth'. Pair it with `state` — a bare city name matches that city in EVERY state (Austin alone returns Austin TX and Austin MN together).","on_invalid":"reject","example":"Austin"},{"name":"state","type":"string","required":false,"description":"Two-letter US state code (TX, CA, NY…). Works on its own for a whole-state sweep and narrows `city` when both are given.","on_invalid":"reject","example":"TX","value_pattern":"[A-Za-z]{2}"},{"name":"county","type":"string","required":false,"description":"County name, e.g. 'Travis'. Crexi stores county names exactly as the listing agent typed them, so spelling varies between listings; `city` + `state` is the more reliable market filter.","on_invalid":"reject","example":"Travis"},{"name":"zip_code","type":"string","required":false,"description":"Five-digit US ZIP code. The tightest geography filter Crexi publishes.","on_invalid":"reject","example":"78704","value_pattern":"\\d{5}","aliases":["zip","postal_code"]},{"name":"query","type":"string","required":false,"description":"Free-text search across the listing name, description and address — the same box Crexi's own header search uses. It is NOT a location filter: 'Austin, TX' also matches a San Antonio listing whose text mentions Austin. Use `city`/`state`/`zip_code` for geography and `query` for a tenant, a brand or a building name.","on_invalid":"reject","example":"Taco Bell","aliases":["term","q"]},{"name":"property_types","type":"array","required":false,"description":"Crexi's own top-level property categories. Several may be given and the listing matches if it carries ANY of them. A value Crexi does not know is rejected by the source, so a typo fails loudly rather than silently returning everything.","on_invalid":"reject","allowed_values":[{"value":"Retail","label":"Retail"},{"value":"Office","label":"Office"},{"value":"Industrial","label":"Industrial"},{"value":"Multifamily","label":"Multifamily"},{"value":"Land","label":"Land"},{"value":"Mixed Use","label":"Mixed Use"},{"value":"Hospitality","label":"Hospitality"},{"value":"Special Purpose","label":"Special Purpose"},{"value":"Business for Sale","label":"Business for Sale"},{"value":"Note/Loan","label":"Note / Loan"},{"value":"Self Storage","label":"Self Storage"},{"value":"Health Care","label":"Health Care"}],"example":["Retail"]},{"name":"price_min","type":"number","required":false,"description":"Lowest asking price in USD. Listings with no published price are not excluded by this filter — set `include_unpriced` to false if you want only priced listings.","on_invalid":"reject","example":1000000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest asking price in USD.","on_invalid":"reject","example":5000000,"minimum":0},{"name":"size_min","type":"number","required":false,"description":"Smallest building size in square feet.","on_invalid":"reject","example":5000,"minimum":0},{"name":"size_max","type":"number","required":false,"description":"Largest building size in square feet.","on_invalid":"reject","example":50000,"minimum":0},{"name":"acres_min","type":"number","required":false,"description":"Smallest lot size in acres — the size filter that matters for Land listings, which are the single biggest category on Crexi.","on_invalid":"reject","example":1,"minimum":0},{"name":"acres_max","type":"number","required":false,"description":"Largest lot size in acres.","on_invalid":"reject","example":100,"minimum":0},{"name":"cap_rate_min","type":"number","required":false,"description":"Lowest capitalisation rate, in percent (7.5 means 7.5%). Only investment listings publish a cap rate, so this filter also removes the ones that do not.","on_invalid":"reject","example":6,"minimum":0,"maximum":100},{"name":"cap_rate_max","type":"number","required":false,"description":"Highest capitalisation rate, in percent.","on_invalid":"reject","example":12,"minimum":0,"maximum":100},{"name":"opportunity_zone_only","type":"boolean","required":false,"description":"Return only listings inside a federal Qualified Opportunity Zone.","on_invalid":"reject","default":false,"example":false},{"name":"include_unpriced","type":"boolean","required":false,"description":"Keep the listings whose price the broker did not publish ('contact broker', auctions, offering-memorandum-only deals). They are a large and genuine part of the US commercial market, so they are included by default and come back with price.amount = null and price.status saying why. Set false for priced listings only.","on_invalid":"reject","default":true,"example":true},{"name":"limit","type":"integer","required":false,"description":"How many listings to return in this call (1-100). One call, one page: Crexi serves the whole page in a single request.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100,"aliases":["page_size","count"]},{"name":"offset","type":"integer","required":false,"description":"How many listings to skip before the ones returned — this is how you page. offset=50 with limit=50 is the second page. Crexi ignores every other paging name it is offered, so this is the only one that moves the window.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":10000}],"returns":"listing_id, title, url (the live crexi.com page), listing_type, price (amount in USD, currency, status = published | unpriced | auction, note, and Crexi's own formatted rendering on the detail routes), property_types, property_subtypes, investment_type, building_size_sqft, status, description, brokerage_name, location (address, city, county, state, state_code, zip, country, latitude, longitude, full_address), other_locations for portfolio listings, in_opportunity_zone, is_new, activated_on, updated_on and media (thumbnail, image_count, has_video, has_virtual_tour, has_offering_memorandum, has_flyer). Plus total_results and returned_count on the envelope.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"Austin","state":"TX","limit":25}},{"name":"lease_search","description":"Search the SPACES FOR LEASE on crexi.com. Same geography filters as `search`, plus the lease-side one: rentable space size. Every row carries the rate range with Crexi's own formatted twin next to the number (so you can cross-check it), the rate type the broker quoted, the rentable square-foot range, how many suites the building has, the brokerage, the geocoded address and the live crexi.com/lease URL. Spaces whose rate the broker withheld are included by default and say so. The lease side is a separate Crexi product with its own listing ids and its own property-type list.","required_params":[],"optional_params":["city","state","county","zip_code","query","property_types","space_sqft_min","space_sqft_max","include_undisclosed_rate","limit","offset"],"params":[{"name":"city","type":"string","required":false,"description":"City name as Crexi spells it, e.g. 'Austin', 'Los Angeles', 'Fort Worth'. Pair it with `state` — a bare city name matches that city in EVERY state (Austin alone returns Austin TX and Austin MN together).","on_invalid":"reject","example":"Austin"},{"name":"state","type":"string","required":false,"description":"Two-letter US state code (TX, CA, NY…). Works on its own for a whole-state sweep and narrows `city` when both are given.","on_invalid":"reject","example":"TX","value_pattern":"[A-Za-z]{2}"},{"name":"county","type":"string","required":false,"description":"County name, e.g. 'Travis'. Crexi stores county names exactly as the listing agent typed them, so spelling varies between listings; `city` + `state` is the more reliable market filter.","on_invalid":"reject","example":"Travis"},{"name":"zip_code","type":"string","required":false,"description":"Five-digit US ZIP code. The tightest geography filter Crexi publishes.","on_invalid":"reject","example":"78704","value_pattern":"\\d{5}","aliases":["zip","postal_code"]},{"name":"query","type":"string","required":false,"description":"Free-text search across the listing name, description and address — the same box Crexi's own header search uses. It is NOT a location filter: 'Austin, TX' also matches a San Antonio listing whose text mentions Austin. Use `city`/`state`/`zip_code` for geography and `query` for a tenant, a brand or a building name.","on_invalid":"reject","example":"Taco Bell","aliases":["term","q"]},{"name":"property_types","type":"array","required":false,"description":"Crexi's own top-level space categories on the lease side. The lease and sale category trees are NOT the same list.","on_invalid":"reject","allowed_values":[{"value":"Retail","label":"Retail"},{"value":"Office","label":"Office"},{"value":"Industrial","label":"Industrial"},{"value":"Restaurant","label":"Restaurant"},{"value":"Land","label":"Land"},{"value":"Special Purpose","label":"Special Purpose"},{"value":"Flex","label":"Flex"},{"value":"Medical","label":"Medical"},{"value":"Coworking","label":"Coworking"}],"example":["Office"]},{"name":"space_sqft_min","type":"number","required":false,"description":"Smallest rentable space, in square feet.","on_invalid":"reject","example":1000,"minimum":0},{"name":"space_sqft_max","type":"number","required":false,"description":"Largest rentable space, in square feet.","on_invalid":"reject","example":20000,"minimum":0},{"name":"include_undisclosed_rate","type":"boolean","required":false,"description":"Keep the spaces whose asking rate the broker withheld. They come back with rate.per_sqft_year_min = null and rate.status = 'undisclosed'. Set false for spaces with a published rate only.","on_invalid":"reject","default":true,"example":true},{"name":"limit","type":"integer","required":false,"description":"How many listings to return in this call (1-100). One call, one page: Crexi serves the whole page in a single request.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100,"aliases":["page_size","count"]},{"name":"offset","type":"integer","required":false,"description":"How many listings to skip before the ones returned — this is how you page. offset=50 with limit=50 is the second page. Crexi ignores every other paging name it is offered, so this is the only one that moves the window.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":10000}],"returns":"listing_id, title, url, listing_type, rate (per_sqft_year_min/max in USD, rate_type, Crexi's formatted yearly and monthly twins, status = published | undisclosed), property_types, rentable_sqft_min/max, suite_count, status, description, brokerage_name, location, is_new, is_outdated, activated_on, updated_on and media. Plus total_results and returned_count.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"Los Angeles","state":"CA","limit":25}},{"name":"property_detail","description":"Read one FOR-SALE listing in full: everything the search row carries plus Crexi's own fact table (asking price, property type and sub type, lot size, ground-lease flag, sale condition, and whatever else that listing publishes), the investment highlights and marketing copy as plain text, whether the listing is sold, paused, unpriced, a note/loan or run by an auctioneer, and the brokers with their title, licence number, brokerage and brokerage address. Facts Crexi keeps behind a login come back as null rather than as the row of asterisks the source sends. A listing id that is not live answers NOT_FOUND.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Crexi's numeric listing id. It is the first number in the listing URL (https://www.crexi.com/properties/2725055/michigan-taco-bell → 2725055) and the `listing_id` of every search row. Sale and lease ids are separate number spaces: a sale id given to lease_detail answers NOT_FOUND, and the other way round.","on_invalid":"reject","example":"2725055","value_pattern":"\\d{1,12}","aliases":["id","asset_id","property_id"]}],"returns":"listing_id, title, url (the live crexi.com page), listing_type, price (amount in USD, currency, status = published | unpriced | auction, note, and Crexi's own formatted rendering on the detail routes), property_types, property_subtypes, investment_type, building_size_sqft, status, description, brokerage_name, location (address, city, county, state, state_code, zip, country, latitude, longitude, full_address), other_locations for portfolio listings, in_opportunity_zone, is_new, activated_on, updated_on and media (thumbnail, image_count, has_video, has_virtual_tour, has_offering_memorandum, has_flyer). Plus total_results and returned_count on the envelope. Plus detail_level, facts (Crexi's own label→value table), investment_highlights, marketing_description, sale_condition, is_sold, is_unpriced, is_note_loan, is_outdated, has_auctioneer, address_hidden, created_on and brokers[] (name, title, licence number, brokerage, brokerage address).","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"2725055"}},{"name":"lease_detail","description":"Read one LEASE listing in full: everything the lease search row carries plus Crexi's building fact table, the building highlights and marketing copy as plain text, and — the reason this action exists — the SUITE TABLE: every available space in the building with its name, rentable square feet, asking rate per square foot, rate type, space subtypes and whether a floor plan is published. A suite whose rate is undisclosed comes back with a null rate, not a zero. Lease ids are a separate number space from sale ids.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Crexi's numeric listing id. It is the first number in the listing URL (https://www.crexi.com/properties/2725055/michigan-taco-bell → 2725055) and the `listing_id` of every search row. Sale and lease ids are separate number spaces: a sale id given to lease_detail answers NOT_FOUND, and the other way round.","on_invalid":"reject","example":"2725055","value_pattern":"\\d{1,12}","aliases":["id","asset_id","property_id"]}],"returns":"listing_id, title, url, listing_type, rate (per_sqft_year_min/max in USD, rate_type, Crexi's formatted yearly and monthly twins, status = published | undisclosed), property_types, rentable_sqft_min/max, suite_count, status, description, brokerage_name, location, is_new, is_outdated, activated_on, updated_on and media. Plus total_results and returned_count. Plus detail_level, facts, building_highlights, marketing_description, is_single_tenant, aggregate_display_rate, created_on, brokers[] and suites[] (suite_id, name, rentable_sqft, rate_per_sqft, total_rate, rate_type, subtypes, has_floor_plan).","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"2725055"}},{"name":"suggest","description":"Crexi's own type-ahead: turn a few typed characters into the things Crexi knows — a listing at that street address (with its listing_id, ready for property_detail), a broker, or a brokerage. Use it to go from an address a user typed to the listing id. It is NOT a place gazetteer: it never returns a city, county or ZIP id, and it is not needed for search — search takes plain city, state, county and ZIP names.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"What the user typed. Two characters is enough.","on_invalid":"reject","example":"Los Angeles","aliases":["term","q"]}],"returns":"A list of suggestions, each with kind (AssetAddress | Broker | Brokerage), value (what Crexi would show), subtitle (the city and state), listing_id and listing_url when the suggestion is a listing, and broker_profile_id when it is a broker. An unknown term answers an empty list, not an error.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Los Angeles"}}]},{"name":"croma","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Croma API — India's Tata electronics chain: price by PIN code (selling price, MRP, discount), bank and card offers, delivery dates, per-store stock, specs and reviews","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/croma/v1","spec_available":true,"actions":[{"name":"search","description":"Search Croma's catalogue AS PRICED AT ONE PIN CODE: 21 products per page with the LIVE selling price, MRP and discount % at that PIN (from Croma's price service, the same figure `product` returns; the search index's own figure is kept as price_index and differences are flagged), offer lines (bank discount, NeuCard, no-cost EMI), key features, brand, rating, review count, category ids, whether any Croma store or warehouse holds stock and in how many locations, warranty, launch date. Filters: category, brand, price band, discount band, delivery mode (express / home); six sort orders. Returns the source's facet counts (categories with their ids, brands, price and discount bands, specification facets). `pincode` and at least one of `query` / `category` are required.","required_params":["pincode"],"optional_params":["query","category","brand","price_band","discount_band","delivery_mode","sort","page"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: Croma's selling price depends on it (the same TV is 24,990 in Mumbai 400049 and 21,990 in Agartala 799001). A PIN Croma does not serve gets the national price. Echoed in every answer.","on_invalid":"reject","example":"400049","aliases":["pin","pin_code","postal_code","zip"]},{"name":"query","type":"string","required":false,"description":"What to search for, as typed in Croma's search box (iphone 17, washing machine, 55 inch tv ...). The source corrects typos (returned as spelling_suggestion); a query with no match returns 0 rows (search_fallback: true).","on_invalid":"reject","example":"iphone 17","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"A Croma category id: from a row's category_ids, the `facets.category[].category_id` list, or the /c/<id> in a croma.com category URL (10 = Mobile Phones, 97 = iPhones). Works alone (browse) or with `query`.","on_invalid":"reject","example":"97","aliases":["category_id","category_code"]},{"name":"brand","type":"string","required":false,"description":"Brand as rows spell it (Samsung, HP, boAt ...). The source is case-sensitive; a 0-result spelling is re-matched against the query's own brand list (brand_resolved). Several brands: comma-separated (any of them).","on_invalid":"reject","example":"Samsung","aliases":["brand_name","manufacturer"]},{"name":"price_band","type":"enum","required":false,"description":"Croma's own price bands (rupees), applied by the source to its search index's national price, which can differ from the live `price` at your PIN. Several: comma-separated (any of them).","on_invalid":"reject","allowed_values":[{"value":"0-500","label":"500 & Below"},{"value":"501-1000","label":"501 - 1,000"},{"value":"1001-1500","label":"1,001 - 1,500"},{"value":"1501-3000","label":"1,501 - 3,000"},{"value":"3001-5000","label":"3,001 - 5,000"},{"value":"5001-10000","label":"5,001 - 10,000"},{"value":"10001-20000","label":"10,001 - 20,000"},{"value":"20001-30000","label":"20,001 - 30,000"},{"value":"30001-40000","label":"30,001 - 40,000"},{"value":"40001-50000","label":"40,001 - 50,000"},{"value":"50001-60000","label":"50,001 - 60,000"},{"value":"60001-70000","label":"60,001 - 70,000"},{"value":"70001-80000","label":"70,001 - 80,000"},{"value":"80001-90000","label":"80,001 - 90,000"},{"value":"90001-100000","label":"90,001 - 1,00,000"},{"value":"100001-200000","label":"1,00,001 - 2,00,000"},{"value":"200001-500000","label":"2,00,001 - 5,00,000"},{"value":"500001-plus","label":"5,00,001 & Above"}],"aliases":["price_range"]},{"name":"discount_band","type":"enum","required":false,"description":"Croma's discount-off-MRP bands. Several: comma-separated.","on_invalid":"reject","allowed_values":[{"value":"0-20","label":"Below 20%"},{"value":"20-40","label":"20% To 40%"},{"value":"40-60","label":"40% To 60%"},{"value":"60-80","label":"60% To 80%"},{"value":"80-plus","label":"80% And Above"}],"aliases":["discount"]},{"name":"delivery_mode","type":"enum","required":false,"description":"Only products Croma offers with express delivery (from a nearby store) or with standard home delivery.","on_invalid":"reject","allowed_values":[{"value":"express","label":"Express Delivery"},{"value":"home","label":"Home Delivery"}],"aliases":["delivery"]},{"name":"sort","type":"enum","required":false,"description":"Result order, as Croma sorts. Price sorts use the search index's national price, so rows can look out of order by the live `price`.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Featured (default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"discount_desc","label":"Biggest discount first"},{"value":"latest","label":"Latest arrival"},{"value":"top_rated","label":"Top rated"}],"default":"relevance","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Page number; 21 products per page. Pages past last_page return no rows.","on_invalid":"reject","default":1,"minimum":1}],"returns":"pincode, query, total (the source's own count), page, page_size (21, fixed by the source), last_page, has_next, returned, priced, price_mismatch (rows whose index price differed from the live one), price_missing, search_fallback, spelling_suggestion, brand_resolved, featured_rows, results[]{product_id (-> product.product_id), title, summary, brand, brand_id, url, image, price (LIVE price at the PIN), mrp, discount_percent, price_text, mrp_text, price_text_matches, price_mismatch, price_index (the search index's figure), mrp_index, price_index_text, price_index_text_matches, discount_text_index (the index's rounded text; it reads 0% on many discounted rows the index prices per store — use discount_percent), discount_text_index_matches, currency, offer_messages[], key_features[], rating, rating_count, review_count, category_ids[], in_stock, stock_location_count, standard_warranty_months, launch_date, rank}, facets{category[]{value, category_id, count}, brand[], price_band[], discount_band[], delivery_mode[], specifications[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 17","pincode":"400049"}},{"name":"product","description":"One Croma product at one PIN code, by the `product_id` a search row returns (or its croma.com URL): selling price, MRP, discount (computed and the source's own), the offers running on it — bank card / EMI / UPI offers (bank names, card type, minimum spend, validity, T&C link) plus membership-tier and bundle offers, each labelled with its category, the product's delivery-mode flags (home, express, store pickup, cash on delivery — product-level, NOT checked against the PIN: use `availability` for that), rating, review and rating counts, and the full record — EAN, brand, description, key features, every specification group, images, videos, category breadcrumbs, colour / storage variants with their ids, current store offer notes, warranty, EMI flag.","required_params":["pincode"],"optional_params":["product_id"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: Croma's selling price depends on it (the same TV is 24,990 in Mumbai 400049 and 21,990 in Agartala 799001). A PIN Croma does not serve gets the national price. Echoed in every answer.","on_invalid":"reject","example":"400049","aliases":["pin","pin_code","postal_code","zip"]},{"name":"product_id","type":"string","required":false,"description":"The product's `product_id` exactly as a search row returns it (e.g. 317418), or its croma.com URL (…/p/317418). Required.","on_invalid":"reject","example":"317418","aliases":["code","id","sku","product_code","url","product_url"]}],"returns":"pincode, product{product_id, title, summary, brand, brand_url, ean, url, description, key_features[], specifications[]{group, features[]{name, value, unit}}, images[], videos[], breadcrumbs[]{category_id, name, url}, category_ids[], variant_attributes{}, variant_axes[]{name, values[]}, variants[]{product_id, title, attributes{}, url}, offer_messages[], store_offers[]{code, label, text, from, to}, standard_warranty_months, emi_applicable, review_count, rating_count, approval_status}, price{price, mrp, discount_percent, discount_percent_source, discount_amount, currency, price_text, mrp_text, price_text_matches}, delivery_flags{in_stock, home_delivery, express_delivery, store_pickup, cash_on_delivery, pin_specific (false: product-level flags, see `availability`)}, bank_offers[] (EVERY offer the source lists: bank card, no-cost EMI, UPI, membership tier, cart bundle, partner — filter on offer_category / is_bank_offer){offer_id, title, offer_category (bank_card, bank_emi, upi, membership, bundle, other), is_bank_offer, offer_type (the source's own code), benefit_type, payment_mode, payment_provider (raw code(s), comma-joined), bank_codes[], banks[] (bank names), card_type, min_transaction (the offer service's threshold; null = no minimum), min_transaction_source, min_transaction_advertised (the amount the offer text names), min_transaction_matches_advertised, starts, expires, terms_url}, offer_categories{category: count}, rating{average_rating, review_count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"317418","pincode":"400049"}},{"name":"availability","description":"Can a product reach a PIN code, when, and from where: the home-delivery date and the node it ships from, the express-delivery date and the Croma store that would ship it, and for every Croma store within the radius the number of units it holds for pickup (with distance and address) — plus the source's reason for each mode that is not possible.","required_params":["pincode"],"optional_params":["product_id","radius_km"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: Croma's selling price depends on it (the same TV is 24,990 in Mumbai 400049 and 21,990 in Agartala 799001). A PIN Croma does not serve gets the national price. Echoed in every answer.","on_invalid":"reject","example":"400049","aliases":["pin","pin_code","postal_code","zip"]},{"name":"product_id","type":"string","required":false,"description":"The product's `product_id` exactly as a search row returns it (e.g. 317418), or its croma.com URL (…/p/317418). Required.","on_invalid":"reject","example":"317418","aliases":["code","id","sku","product_code","url","product_url"]},{"name":"radius_km","type":"integer","required":false,"description":"Which stores to check for pickup stock: those within this many km of the PIN code (Croma's own default is 25).","on_invalid":"reject","default":25,"minimum":1,"maximum":50}],"returns":"pincode, product_id, location{lat, lng, place}, stores_checked, stores_with_stock, home_delivery{available, delivery_date, ships_from, carrier}, express_delivery{available, delivery_date, store_id, store_name, carrier}, store_pickup[]{store_id, store_name, units, distance_km, address, pickup_from}, unavailable[]{fulfillment, reason}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"317418","pincode":"400049"}},{"name":"stores","description":"Croma stores near a PIN code, nearest first: store id (the id `availability` reports stock under), name, full address, city, state, store PIN, phone numbers, coordinates, distance, opening hours, amenities, store manager, photo.","required_params":["pincode"],"optional_params":["radius_km"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: Croma's selling price depends on it (the same TV is 24,990 in Mumbai 400049 and 21,990 in Agartala 799001). A PIN Croma does not serve gets the national price. Echoed in every answer.","on_invalid":"reject","example":"400049","aliases":["pin","pin_code","postal_code","zip"]},{"name":"radius_km","type":"integer","required":false,"description":"Search radius around the PIN code, in km (default 25).","on_invalid":"reject","default":25,"minimum":1,"maximum":50}],"returns":"pincode, location{lat, lng, place}, store_count, stores[]{store_id, name, address, city, state, pincode, phone, other_phones[], lat, lng, distance_km, opening_hours, features[], store_manager, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"pincode":"560001"}},{"name":"reviews","description":"Customer reviews of one Croma product, newest first, 50 per page: star rating, text, reviewer name as shown, date, verified-purchase flag — plus the product's average rating, its true review count and (when one page holds every review) the star split. Optional filter to one star level.","required_params":[],"optional_params":["product_id","rating","page"],"params":[{"name":"product_id","type":"string","required":false,"description":"The product's `product_id` exactly as a search row returns it (e.g. 317418), or its croma.com URL (…/p/317418). Required.","on_invalid":"reject","example":"317418","aliases":["code","id","sku","product_code","url","product_url"]},{"name":"rating","type":"integer","required":false,"description":"Only reviews with this many stars.","on_invalid":"reject","minimum":1,"maximum":5,"aliases":["stars"]},{"name":"page","type":"integer","required":false,"description":"Page number (50 reviews per page).","on_invalid":"reject","default":1,"minimum":1}],"returns":"product_id, average_rating, review_count, page, page_size, last_page, has_next, returned, rating_distribution{1..5}, rating_distribution_complete, reviews[]{review_id, rating, text, title, author, date, verified_purchase}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"307023"}}]},{"name":"currency","category":{"id":"finance","title":"Finance & Data"},"title":"Currency & Exchange Rates API — live and historical FX rates from the European Central Bank: latest rates, currency conversion, time-series and fluctuation","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/currency/v1","spec_available":true,"actions":[{"name":"latest","description":"latest reference rates for a base (default EUR) → all or selected target currencies (+ unix timestamp)","required_params":[],"optional_params":["base","symbols"],"params":[{"name":"base","type":"enum","required":false,"description":"Base currency the rates are expressed in (ISO-4217). Defaults to EUR. Retired codes (RUB/HRK/legacy euro-joiners) work only for historical dates that predate their discontinuation.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro"},{"value":"USD","label":"US Dollar"},{"value":"JPY","label":"Japanese Yen"},{"value":"GBP","label":"Pound Sterling"},{"value":"CHF","label":"Swiss Franc"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CNY","label":"Chinese Yuan Renminbi"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"NOK","label":"Norwegian Krone"},{"value":"DKK","label":"Danish Krone"},{"value":"CZK","label":"Czech Koruna"},{"value":"HUF","label":"Hungarian Forint"},{"value":"PLN","label":"Polish Zloty"},{"value":"RON","label":"Romanian Leu"},{"value":"BGN","label":"Bulgarian Lev"},{"value":"TRY","label":"Turkish Lira"},{"value":"ISK","label":"Icelandic Krona"},{"value":"ILS","label":"Israeli New Shekel"},{"value":"INR","label":"Indian Rupee"},{"value":"IDR","label":"Indonesian Rupiah"},{"value":"KRW","label":"South Korean Won"},{"value":"MYR","label":"Malaysian Ringgit"},{"value":"PHP","label":"Philippine Peso"},{"value":"SGD","label":"Singapore Dollar"},{"value":"THB","label":"Thai Baht"},{"value":"ZAR","label":"South African Rand"},{"value":"MXN","label":"Mexican Peso"},{"value":"BRL","label":"Brazilian Real"},{"value":"RUB","label":"Russian Rouble"},{"value":"HRK","label":"Croatian Kuna"},{"value":"GRD","label":"Greek Drachma"},{"value":"CYP","label":"Cyprus Pound"},{"value":"EEK","label":"Estonian Kroon"},{"value":"LTL","label":"Lithuanian Litas"},{"value":"LVL","label":"Latvian Lats"},{"value":"MTL","label":"Maltese Lira"},{"value":"SIT","label":"Slovenian Tolar"},{"value":"SKK","label":"Slovak Koruna"},{"value":"ROL","label":"Romanian Leu (old)"},{"value":"TRL","label":"Turkish Lira (old)"}],"default":"EUR","example":"USD","aliases":["from"]},{"name":"symbols","type":"string","required":false,"description":"Optional comma-separated target currencies to return (e.g. 'USD,GBP,JPY'). Omit to return every currency in the ECB set. Unknown codes are reported under 'unavailable', not rejected.","on_invalid":"reject","example":"USD,GBP,JPY","aliases":["to_symbols","targets"]}],"returns":"base, date, timestamp (ECB 16:00 CET/CEST unix), rates{CUR:val}, amount; unavailable[] for any unknown requested symbols","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"base":"EUR"}},{"name":"convert","description":"convert an amount from→to at the latest rate (or a given historical date); returns rate + result","required_params":["from","to"],"optional_params":["amount","date"],"params":[{"name":"from","type":"enum","required":true,"description":"Source currency to convert FROM (ISO-4217).","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro"},{"value":"USD","label":"US Dollar"},{"value":"JPY","label":"Japanese Yen"},{"value":"GBP","label":"Pound Sterling"},{"value":"CHF","label":"Swiss Franc"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CNY","label":"Chinese Yuan Renminbi"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"NOK","label":"Norwegian Krone"},{"value":"DKK","label":"Danish Krone"},{"value":"CZK","label":"Czech Koruna"},{"value":"HUF","label":"Hungarian Forint"},{"value":"PLN","label":"Polish Zloty"},{"value":"RON","label":"Romanian Leu"},{"value":"BGN","label":"Bulgarian Lev"},{"value":"TRY","label":"Turkish Lira"},{"value":"ISK","label":"Icelandic Krona"},{"value":"ILS","label":"Israeli New Shekel"},{"value":"INR","label":"Indian Rupee"},{"value":"IDR","label":"Indonesian Rupiah"},{"value":"KRW","label":"South Korean Won"},{"value":"MYR","label":"Malaysian Ringgit"},{"value":"PHP","label":"Philippine Peso"},{"value":"SGD","label":"Singapore Dollar"},{"value":"THB","label":"Thai Baht"},{"value":"ZAR","label":"South African Rand"},{"value":"MXN","label":"Mexican Peso"},{"value":"BRL","label":"Brazilian Real"},{"value":"RUB","label":"Russian Rouble"},{"value":"HRK","label":"Croatian Kuna"},{"value":"GRD","label":"Greek Drachma"},{"value":"CYP","label":"Cyprus Pound"},{"value":"EEK","label":"Estonian Kroon"},{"value":"LTL","label":"Lithuanian Litas"},{"value":"LVL","label":"Latvian Lats"},{"value":"MTL","label":"Maltese Lira"},{"value":"SIT","label":"Slovenian Tolar"},{"value":"SKK","label":"Slovak Koruna"},{"value":"ROL","label":"Romanian Leu (old)"},{"value":"TRL","label":"Turkish Lira (old)"}],"example":"USD","aliases":["from_currency","base"]},{"name":"to","type":"enum","required":true,"description":"Target currency to convert TO (ISO-4217).","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro"},{"value":"USD","label":"US Dollar"},{"value":"JPY","label":"Japanese Yen"},{"value":"GBP","label":"Pound Sterling"},{"value":"CHF","label":"Swiss Franc"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CNY","label":"Chinese Yuan Renminbi"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"NOK","label":"Norwegian Krone"},{"value":"DKK","label":"Danish Krone"},{"value":"CZK","label":"Czech Koruna"},{"value":"HUF","label":"Hungarian Forint"},{"value":"PLN","label":"Polish Zloty"},{"value":"RON","label":"Romanian Leu"},{"value":"BGN","label":"Bulgarian Lev"},{"value":"TRY","label":"Turkish Lira"},{"value":"ISK","label":"Icelandic Krona"},{"value":"ILS","label":"Israeli New Shekel"},{"value":"INR","label":"Indian Rupee"},{"value":"IDR","label":"Indonesian Rupiah"},{"value":"KRW","label":"South Korean Won"},{"value":"MYR","label":"Malaysian Ringgit"},{"value":"PHP","label":"Philippine Peso"},{"value":"SGD","label":"Singapore Dollar"},{"value":"THB","label":"Thai Baht"},{"value":"ZAR","label":"South African Rand"},{"value":"MXN","label":"Mexican Peso"},{"value":"BRL","label":"Brazilian Real"},{"value":"RUB","label":"Russian Rouble"},{"value":"HRK","label":"Croatian Kuna"},{"value":"GRD","label":"Greek Drachma"},{"value":"CYP","label":"Cyprus Pound"},{"value":"EEK","label":"Estonian Kroon"},{"value":"LTL","label":"Lithuanian Litas"},{"value":"LVL","label":"Latvian Lats"},{"value":"MTL","label":"Maltese Lira"},{"value":"SIT","label":"Slovenian Tolar"},{"value":"SKK","label":"Slovak Koruna"},{"value":"ROL","label":"Romanian Leu (old)"},{"value":"TRL","label":"Turkish Lira (old)"}],"example":"EUR","aliases":["to_currency"]},{"name":"amount","type":"number","required":false,"description":"Amount of the source currency to convert (default 1).","on_invalid":"ignore","default":1.0,"example":100,"minimum":0},{"name":"date","type":"string","required":false,"description":"Optional historical date (YYYY-MM-DD) to convert at; omit for the latest published rate.","on_invalid":"ignore","example":"2020-07-01"}],"returns":"from, to, amount, rate, result (amount*rate), date (+ requested_date if the date rolled back to a working day)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"from":"USD","to":"EUR","amount":100}},{"name":"historical","description":"reference rates on a past date (YYYY-MM-DD; weekend/holiday → last working day) since 1999-01-04","required_params":["date"],"optional_params":["base","symbols"],"params":[{"name":"date","type":"string","required":true,"description":"Reference date (YYYY-MM-DD), since 1999-01-04. A weekend/holiday resolves to the last working day (echoed as requested_date).","on_invalid":"ignore","example":"2020-07-01"},{"name":"base","type":"enum","required":false,"description":"Base currency the rates are expressed in (ISO-4217). Defaults to EUR. Retired codes (RUB/HRK/legacy euro-joiners) work only for historical dates that predate their discontinuation.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro"},{"value":"USD","label":"US Dollar"},{"value":"JPY","label":"Japanese Yen"},{"value":"GBP","label":"Pound Sterling"},{"value":"CHF","label":"Swiss Franc"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CNY","label":"Chinese Yuan Renminbi"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"NOK","label":"Norwegian Krone"},{"value":"DKK","label":"Danish Krone"},{"value":"CZK","label":"Czech Koruna"},{"value":"HUF","label":"Hungarian Forint"},{"value":"PLN","label":"Polish Zloty"},{"value":"RON","label":"Romanian Leu"},{"value":"BGN","label":"Bulgarian Lev"},{"value":"TRY","label":"Turkish Lira"},{"value":"ISK","label":"Icelandic Krona"},{"value":"ILS","label":"Israeli New Shekel"},{"value":"INR","label":"Indian Rupee"},{"value":"IDR","label":"Indonesian Rupiah"},{"value":"KRW","label":"South Korean Won"},{"value":"MYR","label":"Malaysian Ringgit"},{"value":"PHP","label":"Philippine Peso"},{"value":"SGD","label":"Singapore Dollar"},{"value":"THB","label":"Thai Baht"},{"value":"ZAR","label":"South African Rand"},{"value":"MXN","label":"Mexican Peso"},{"value":"BRL","label":"Brazilian Real"},{"value":"RUB","label":"Russian Rouble"},{"value":"HRK","label":"Croatian Kuna"},{"value":"GRD","label":"Greek Drachma"},{"value":"CYP","label":"Cyprus Pound"},{"value":"EEK","label":"Estonian Kroon"},{"value":"LTL","label":"Lithuanian Litas"},{"value":"LVL","label":"Latvian Lats"},{"value":"MTL","label":"Maltese Lira"},{"value":"SIT","label":"Slovenian Tolar"},{"value":"SKK","label":"Slovak Koruna"},{"value":"ROL","label":"Romanian Leu (old)"},{"value":"TRL","label":"Turkish Lira (old)"}],"default":"EUR","example":"USD","aliases":["from"]},{"name":"symbols","type":"string","required":false,"description":"Optional comma-separated target currencies to return (e.g. 'USD,GBP,JPY'). Omit to return every currency in the ECB set. Unknown codes are reported under 'unavailable', not rejected.","on_invalid":"reject","example":"USD,GBP,JPY","aliases":["to_symbols","targets"]}],"returns":"base, date (actual working day), rates{CUR:val} (+ requested_date if rolled back); unavailable[] if any","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"date":"2020-07-01","base":"USD","symbols":"EUR,GBP"}},{"name":"timeseries","description":"rates over a date range (working days) for a base → selected/all targets; {date:{CUR:val}}","required_params":["start","end"],"optional_params":["base","symbols"],"params":[{"name":"start","type":"string","required":true,"description":"Range start date (YYYY-MM-DD, inclusive). Only ECB working days inside the range are returned.","on_invalid":"ignore","example":"2024-01-02","aliases":["start_date"]},{"name":"end","type":"string","required":true,"description":"Range end date (YYYY-MM-DD, inclusive).","on_invalid":"ignore","example":"2024-01-31","aliases":["end_date"]},{"name":"base","type":"enum","required":false,"description":"Base currency the rates are expressed in (ISO-4217). Defaults to EUR. Retired codes (RUB/HRK/legacy euro-joiners) work only for historical dates that predate their discontinuation.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro"},{"value":"USD","label":"US Dollar"},{"value":"JPY","label":"Japanese Yen"},{"value":"GBP","label":"Pound Sterling"},{"value":"CHF","label":"Swiss Franc"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CNY","label":"Chinese Yuan Renminbi"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"NOK","label":"Norwegian Krone"},{"value":"DKK","label":"Danish Krone"},{"value":"CZK","label":"Czech Koruna"},{"value":"HUF","label":"Hungarian Forint"},{"value":"PLN","label":"Polish Zloty"},{"value":"RON","label":"Romanian Leu"},{"value":"BGN","label":"Bulgarian Lev"},{"value":"TRY","label":"Turkish Lira"},{"value":"ISK","label":"Icelandic Krona"},{"value":"ILS","label":"Israeli New Shekel"},{"value":"INR","label":"Indian Rupee"},{"value":"IDR","label":"Indonesian Rupiah"},{"value":"KRW","label":"South Korean Won"},{"value":"MYR","label":"Malaysian Ringgit"},{"value":"PHP","label":"Philippine Peso"},{"value":"SGD","label":"Singapore Dollar"},{"value":"THB","label":"Thai Baht"},{"value":"ZAR","label":"South African Rand"},{"value":"MXN","label":"Mexican Peso"},{"value":"BRL","label":"Brazilian Real"},{"value":"RUB","label":"Russian Rouble"},{"value":"HRK","label":"Croatian Kuna"},{"value":"GRD","label":"Greek Drachma"},{"value":"CYP","label":"Cyprus Pound"},{"value":"EEK","label":"Estonian Kroon"},{"value":"LTL","label":"Lithuanian Litas"},{"value":"LVL","label":"Latvian Lats"},{"value":"MTL","label":"Maltese Lira"},{"value":"SIT","label":"Slovenian Tolar"},{"value":"SKK","label":"Slovak Koruna"},{"value":"ROL","label":"Romanian Leu (old)"},{"value":"TRL","label":"Turkish Lira (old)"}],"default":"EUR","example":"USD","aliases":["from"]},{"name":"symbols","type":"string","required":false,"description":"Optional comma-separated target currencies to return (e.g. 'USD,GBP,JPY'). Omit to return every currency in the ECB set. Unknown codes are reported under 'unavailable', not rejected.","on_invalid":"reject","example":"USD,GBP,JPY","aliases":["to_symbols","targets"]}],"returns":"base, start, end, rates{date:{CUR:val}} per working day (+ stop_reason if the range was capped)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"start":"2024-01-02","end":"2024-01-05","base":"EUR","symbols":"USD"}},{"name":"fluctuation","description":"per-currency change over a date range: {CUR:{start_rate,end_rate,change,change_pct}} (derived from the range endpoints)","required_params":["start","end"],"optional_params":["base","symbols"],"params":[{"name":"start","type":"string","required":true,"description":"Range start date (YYYY-MM-DD, inclusive). Only ECB working days inside the range are returned.","on_invalid":"ignore","example":"2024-01-02","aliases":["start_date"]},{"name":"end","type":"string","required":true,"description":"Range end date (YYYY-MM-DD, inclusive).","on_invalid":"ignore","example":"2024-01-31","aliases":["end_date"]},{"name":"base","type":"enum","required":false,"description":"Base currency the rates are expressed in (ISO-4217). Defaults to EUR. Retired codes (RUB/HRK/legacy euro-joiners) work only for historical dates that predate their discontinuation.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"Euro"},{"value":"USD","label":"US Dollar"},{"value":"JPY","label":"Japanese Yen"},{"value":"GBP","label":"Pound Sterling"},{"value":"CHF","label":"Swiss Franc"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CNY","label":"Chinese Yuan Renminbi"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"NOK","label":"Norwegian Krone"},{"value":"DKK","label":"Danish Krone"},{"value":"CZK","label":"Czech Koruna"},{"value":"HUF","label":"Hungarian Forint"},{"value":"PLN","label":"Polish Zloty"},{"value":"RON","label":"Romanian Leu"},{"value":"BGN","label":"Bulgarian Lev"},{"value":"TRY","label":"Turkish Lira"},{"value":"ISK","label":"Icelandic Krona"},{"value":"ILS","label":"Israeli New Shekel"},{"value":"INR","label":"Indian Rupee"},{"value":"IDR","label":"Indonesian Rupiah"},{"value":"KRW","label":"South Korean Won"},{"value":"MYR","label":"Malaysian Ringgit"},{"value":"PHP","label":"Philippine Peso"},{"value":"SGD","label":"Singapore Dollar"},{"value":"THB","label":"Thai Baht"},{"value":"ZAR","label":"South African Rand"},{"value":"MXN","label":"Mexican Peso"},{"value":"BRL","label":"Brazilian Real"},{"value":"RUB","label":"Russian Rouble"},{"value":"HRK","label":"Croatian Kuna"},{"value":"GRD","label":"Greek Drachma"},{"value":"CYP","label":"Cyprus Pound"},{"value":"EEK","label":"Estonian Kroon"},{"value":"LTL","label":"Lithuanian Litas"},{"value":"LVL","label":"Latvian Lats"},{"value":"MTL","label":"Maltese Lira"},{"value":"SIT","label":"Slovenian Tolar"},{"value":"SKK","label":"Slovak Koruna"},{"value":"ROL","label":"Romanian Leu (old)"},{"value":"TRL","label":"Turkish Lira (old)"}],"default":"EUR","example":"USD","aliases":["from"]},{"name":"symbols","type":"string","required":false,"description":"Optional comma-separated target currencies to return (e.g. 'USD,GBP,JPY'). Omit to return every currency in the ECB set. Unknown codes are reported under 'unavailable', not rejected.","on_invalid":"reject","example":"USD,GBP,JPY","aliases":["to_symbols","targets"]}],"returns":"base, start, end, start_date, end_date, rates{CUR:{start_rate,end_rate,change,change_pct}}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"start":"2024-01-02","end":"2024-01-31","base":"EUR","symbols":"USD"}},{"name":"currencies","description":"the current ECB reference currency set (code → name)","required_params":[],"optional_params":[],"params":[],"returns":"date, count, base (EUR), currencies{CODE:name} for the current ECB reference set","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"currys","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Currys API — search currys.co.uk and read products with now / was / save price (GBP), EAN and model number, delivery and click & collect, specifications and Feefo reviews","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/currys/v1","spec_available":true,"actions":[{"name":"search","description":"Search Currys (UK) by keyword and/or category with the site's own filters: brand, price range, delivery / store collection availability, minimum customer rating, 5 sort orders. Each row: product id, Currys SKU, EAN(s), name, brand, URL, image, price, was price with its date window, saving, discount, rating and review count, home-delivery and click-and-collect availability with stock status (IN_STOCK / PREORDER / NOT_AVAILABLE), the monthly credit offer and the category path. Plus the source's own total.","required_params":[],"optional_params":["query","category_id","brand","min_price","max_price","availability","min_rating","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Search words as typed into the Currys search box. Either `query` or `category_id` (or both) is required.","on_invalid":"reject","example":"tv","aliases":["q","keyword","keywords","search"]},{"name":"category_id","type":"string","required":false,"description":"Currys category id as a row's category_ids returns it (e.g. all-laptops-laptops-computing). An unknown id is refused (the site would silently return the whole catalogue).","on_invalid":"reject","example":"all-laptops-laptops-computing","aliases":["category","cgid"]},{"name":"brand","type":"string","required":false,"description":"Brand exactly as rows print it (upper case, e.g. SAMSUNG, LG, RUSSELL HOBBS). Several brands: separate with | (BREVILLE|RUSSELL HOBBS). An unknown brand returns 0 rows.","on_invalid":"reject","example":"SAMSUNG"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in GBP.","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in GBP.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["price_max"]},{"name":"availability","type":"enum","required":false,"description":"Only products that can be delivered, or collected from a store.","on_invalid":"reject","allowed_values":[{"value":"delivery","label":"Delivery available"},{"value":"collect","label":"Collect from store"}],"aliases":["fulfilment"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-5).","on_invalid":"reject","minimum":1,"maximum":5,"aliases":["rating"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"},{"value":"rating","label":"Customer rating"},{"value":"newest","label":"Newest arrivals"}],"default":"relevance","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":250},{"name":"page_size","type":"enum","required":false,"description":"Rows per page: 20, 30 or 50 (the site's own choices).","on_invalid":"reject","allowed_values":[{"value":"20","label":"20"},{"value":"30","label":"30"},{"value":"50","label":"50"}],"default":"20","aliases":["limit","per_page"]}],"returns":"results[]{product_id, sku, ean, eans[], name, brand, url, image, price, was_price, save_amount, discount_pct, was_price_from, was_price_to, currency, rating, review_count, delivery_available, delivery_status, collection_available, collection_status, monthly_credit{amount, months, apr}, categories[], category_ids[], price_mismatch} + total, page, page_size, last_page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"tv","brand":"SAMSUNG"}},{"name":"product","description":"Full Currys product record: name, brand, Currys SKU, EAN(s), manufacturer model number, price, was price and its date window, saving, discount, availability, home delivery and store collection (click & collect), pre-order / back-order flags, key features, description, grouped technical specifications, unboxed dimensions, images, breadcrumbs, monthly credit offer, promotions, plus the Feefo rating, review count and star distribution.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"Currys product id exactly as a search row returns it (product_id, 6-9 digits; the number at the end of the product URL). A currys.co.uk product URL is accepted too.","on_invalid":"reject","example":"10305861","aliases":["id","pid","url"]}],"returns":"{product_id, sku, ean, eans[], model_number, name, brand, url, images[], price, was_price, save_amount, discount_pct, was_price_from, was_price_to, currency, available, availability_message, delivery_available, delivery_message, collection_available, collection_message, click_and_collect, pre_order, back_order, box_type, max_order_quantity, key_features[], description, specifications[]{group, name, value}, dimensions_unboxed{}, breadcrumbs[], category_id, planning_group, monthly_credit{}, promotions[]{id, text}, supplier, excluded_from_price_promise, online_only, rating, review_count, rating_distribution{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"10282701"}},{"name":"reviews","description":"Buyer reviews of a Currys product from Currys' Feefo review service: stars, text, date, reviewer display name and country, verification state, helpful votes, sub-ratings (e.g. value for money), newest first, plus the total review count.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"Currys product id exactly as a search row returns it (product_id, 6-9 digits; the number at the end of the product URL). A currys.co.uk product URL is accepted too.","on_invalid":"reject","example":"10305861","aliases":["id","pid","url"]},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":20,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"reviews[]{review_id, product_id, rating, text, date, author, author_location, verification, helpful_votes, sub_ratings{}, product_name, url} + total, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"10282701"}}]},{"name":"cvs","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"CVS Pharmacy (cvs.com) — US drugstore catalogue, pricing, stock and coupons","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/cvs/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search over the cvs.com catalogue. Returns CVS's own result total, the product grid with full pricing, and optionally its live facet counts. Paging with `offset` walks the whole result set and stops honestly at the end. No sort or filter parameter is offered: CVS accepts both and then returns either zero rows or the unfiltered set, so neither can be sold.","required_params":["query"],"optional_params":["limit","offset","include_facets"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to search the cvs.com catalogue for — a product type ('shampoo'), a brand ('Nature Made') or a full product name. A CVS product id also works and returns that one product. Nonsense keywords return an honest empty answer (total_results 0), not an error.","on_invalid":"reject","example":"shampoo","aliases":["q","keyword","keywords","search","term"]},{"name":"limit","type":"integer","required":false,"description":"Products to ask for, 1-48 (default 20). CVS injects its own sponsored tiles into every page, so the answer usually holds a FEW MORE rows than asked for (measured: 20 asked → 20-26 returned). Bytes grow with it: 20 ≈ 110 KB, 48 ≈ 334 KB.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":48,"aliases":["rows","page_size","per_page"]},{"name":"offset","type":"integer","required":false,"description":"Rows to skip, for paging (default 0). Paging is real on this source: successive windows are different products, and an offset past the end returns zero rows with the true total still reported. Sponsored tiles are re-injected per page, so 0-1 id may repeat between windows.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":100000,"aliases":["start","from"]},{"name":"include_facets","type":"boolean","required":false,"description":"Also return CVS's own facet vocabulary with live counts for this keyword (brand, on-sale promotion, form, concern, HSA/FSA eligible, OTC eligible). Costs no extra request. Read-only: CVS does not honour a filter on this surface, so there is no filter parameter to pair with it.","on_invalid":"reject","default":false,"example":true}],"returns":"total_results (CVS's own numFound), count, offset, limit, has_more, and products[] with product_id, title, brand, url, image_url, sponsored, rating, review_count, variant_count, sku_ids (every variant sku of the product — feed these to product/batch) and a price block (price, sale_price, on_sale, discount_pct, carepass_price, unit_price + parsed unit_price_amount/unit, promo, and the min/max price range for multi-variant products). Optionally facets[] with CVS's live counts.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"shampoo","limit":20}},{"name":"product/detail","description":"Everything cvs.com publishes about ONE product: the full price block, the variant matrix with per-variant prices and attributes, per-channel stock STATUS AND QUANTITY, ExtraBucks + manufacturer coupons with expiry dates, and the eligibility flags (CarePass, HSA/FSA, SNAP, store pickup, same-day). One upstream request. For many ids at once use `product/batch`.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"A CVS product id — the digits after `-prodid-` in any cvs.com product url (/shop/…-prodid-797389 → 797389). Ids returned by this engine's `search` and `product/batch` are the same ids.","on_invalid":"reject","example":"797389","aliases":["id","sku_id","sku","prodid"]}],"returns":"One product in full: title, brand, url, image_url, swatch_image_url, the price block with its range, rating, review_count, max_quantity_per_order, attributes (only the ones this product has: size, group_size, color, scent, spf, form, count, pack…), flags (carepass_eligible, fsa_hsa_eligible, snap_eligible, store_pickup, same_day_delivery, store_only, online_only, hot_deal, pseudoephedrine_restricted), availability per fulfilment channel (ship / pickup / same_day / store, each with status and CVS's own promise QUANTITY), coupons (ExtraBucks rewards and manufacturer coupons with expiry), and variants[] with each variant's own price, attributes and stock.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"797389"}},{"name":"product/batch","description":"Resolve up to 200 CVS product ids to live price, sale price, rating and title in a SINGLE upstream request (~700 bytes per product). The bulk lane: use it to re-price a catalogue. Ids CVS did not resolve come back in `missing_ids` instead of disappearing.","required_params":["product_ids"],"optional_params":[],"params":[{"name":"product_ids","type":"array","required":true,"description":"1-200 CVS product ids in ONE request (a list, or a comma-separated string). The source accepts 200 and rejects 250, so 200 is the hard ceiling. Multi-variant PARENT ids are accepted by CVS and then silently omitted from its answer, so any id that did not resolve is returned in `missing_ids` rather than dropped quietly.","on_invalid":"reject","example":["797389","708463","268308","240604"],"aliases":["ids","sku_ids","skus","product_id"]}],"returns":"requested, resolved, missing_ids[], and products[] with product_id, title, url, image_url, price (price, sale_price, on_sale, discount_pct), rating, review_count, multi_variant, rx_attach_eligible and pseudoephedrine_restricted — up to 200 ids for ONE upstream request. An id CVS did not resolve is a multi-variant parent: take that product's `sku_ids` from `search` (or its variants from `product/detail`) and ask for those instead — measured, that resolves 217 of 222 ids where the parent ids resolved 59 of 78.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_ids":["797389","708463","268308","240604"]}}]},{"name":"dafiti","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Dafiti — Latin America's largest fashion marketplace (Brazil + Colombia), with size-level availability, brand, colour, discount and marketplace seller","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dafiti/v1","spec_available":true,"actions":[{"name":"search","description":"Search Dafiti's fashion catalogue by keyword. Every row carries the brand, the colour, the seller, the cash price AND the struck-through list price, the discount, and whether the tile was a paid placement. A query that matches nothing returns an honest empty result rather than the padded grid the site shows in its place.","required_params":["query"],"optional_params":["country","page","sort","brand","color","size","seller","price_min","price_max","free_shipping","limit"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper would type, in the storefront's language: 'tenis nike', 'vestido longo', 'bolsa couro'.","on_invalid":"reject","example":"tenis nike","aliases":["q","keyword","term"]},{"name":"country","type":"enum","required":false,"description":"Which Dafiti storefront to read. Only two of the four historical storefronts are still shops: br (dafiti.com.br, prices in BRL) and co (dafiti.com.co, prices in COP). They are different front-ends with different field coverage — size-level stock exists on br only.","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — dafiti.com.br, BRL, size-level stock"},{"value":"co","label":"Colombia — dafiti.com.co, COP, variant prices, no stock"}],"default":"br","example":"br","aliases":["cc","market","storefront"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the orders Dafiti actually applies are accepted — it also takes a 'popularity' order and then ignores it (measured: identical to the default), so that one is deliberately not offered.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Dafiti's own default order"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"discount","label":"Biggest discount first"},{"value":"newest","label":"Most recently listed first"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page. br serves ~58 products per page, co ~48. The source stops paging at its own last page, reported as meta.extra.last_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Cap the rows returned from the page (1-60). The source's page size is fixed, so this trims rather than fetching fewer.","on_invalid":"ignore","example":60,"minimum":1,"maximum":60},{"name":"brand","type":"string","required":false,"description":"Filter to one brand, spelled as `facets.brands` spells it (e.g. 'nike', 'adidas'). br only.","on_invalid":"ignore","example":"nike","aliases":["marca"]},{"name":"color","type":"string","required":false,"description":"Filter to one colour, spelled as `facets.colors` spells it ('Preto', 'Branco', 'Azul'). br only.","on_invalid":"ignore","example":"Preto","aliases":["colour","cor"]},{"name":"size","type":"string","required":false,"description":"Filter to products available in one size, as `facets.sizes` spells it ('40', 'M', 'PP'). br only.","on_invalid":"ignore","example":"40","aliases":["tamanho"]},{"name":"seller","type":"string","required":false,"description":"Filter to one marketplace seller, as `facets.sellers` spells it. 'Dafiti' means Dafiti's own stock. br only.","on_invalid":"ignore","example":"Dafiti","aliases":["vendedor"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, in the storefront's own currency.","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, in the storefront's own currency.","on_invalid":"ignore","example":300,"minimum":0},{"name":"free_shipping","type":"boolean","required":false,"description":"Only products Dafiti ships free. Measured to bite: 'tenis' goes from 34 667 to 9 779 results. br only.","on_invalid":"ignore","example":true,"aliases":["frete_gratis"]}],"returns":"products[]{sku, title, brand, color, sold_by_dafiti, seller, url, image, price_pix_brl|price_cop, price_card_brl, list_price_brl|list_price_cop, discount_pct, discount_pct_source, installments, category_path, sponsored, currency}, total_results, page, last_page, facets{brands,colors,sizes,sellers}, no_match, sponsored_count","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"tenis","country":"br"}},{"name":"category","description":"Browse a Dafiti category page (e.g. 'roupas-femininas/vestidos') with the same row shape and the same filters as search. Use it to walk a catalogue rather than guess keywords.","required_params":["category_path"],"optional_params":["country","page","sort","brand","color","size","seller","price_min","price_max","free_shipping","limit"],"params":[{"name":"category_path","type":"string","required":true,"description":"The category path exactly as it appears in a Dafiti URL, without the host and without leading or trailing slashes. A path the site does not have returns NOT_FOUND, not an empty page.","on_invalid":"reject","example":"roupas-femininas/vestidos","aliases":["path","category"]},{"name":"country","type":"enum","required":false,"description":"Which Dafiti storefront to read. Only two of the four historical storefronts are still shops: br (dafiti.com.br, prices in BRL) and co (dafiti.com.co, prices in COP). They are different front-ends with different field coverage — size-level stock exists on br only.","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — dafiti.com.br, BRL, size-level stock"},{"value":"co","label":"Colombia — dafiti.com.co, COP, variant prices, no stock"}],"default":"br","example":"br","aliases":["cc","market","storefront"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the orders Dafiti actually applies are accepted — it also takes a 'popularity' order and then ignores it (measured: identical to the default), so that one is deliberately not offered.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Dafiti's own default order"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"discount","label":"Biggest discount first"},{"value":"newest","label":"Most recently listed first"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page. br serves ~58 products per page, co ~48. The source stops paging at its own last page, reported as meta.extra.last_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Cap the rows returned from the page (1-60). The source's page size is fixed, so this trims rather than fetching fewer.","on_invalid":"ignore","example":60,"minimum":1,"maximum":60},{"name":"brand","type":"string","required":false,"description":"Filter to one brand, spelled as `facets.brands` spells it (e.g. 'nike', 'adidas'). br only.","on_invalid":"ignore","example":"nike","aliases":["marca"]},{"name":"color","type":"string","required":false,"description":"Filter to one colour, spelled as `facets.colors` spells it ('Preto', 'Branco', 'Azul'). br only.","on_invalid":"ignore","example":"Preto","aliases":["colour","cor"]},{"name":"size","type":"string","required":false,"description":"Filter to products available in one size, as `facets.sizes` spells it ('40', 'M', 'PP'). br only.","on_invalid":"ignore","example":"40","aliases":["tamanho"]},{"name":"seller","type":"string","required":false,"description":"Filter to one marketplace seller, as `facets.sellers` spells it. 'Dafiti' means Dafiti's own stock. br only.","on_invalid":"ignore","example":"Dafiti","aliases":["vendedor"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, in the storefront's own currency.","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, in the storefront's own currency.","on_invalid":"ignore","example":300,"minimum":0},{"name":"free_shipping","type":"boolean","required":false,"description":"Only products Dafiti ships free. Measured to bite: 'tenis' goes from 34 667 to 9 779 results. br only.","on_invalid":"ignore","example":true,"aliases":["frete_gratis"]}],"returns":"same product rows as `search`, plus total_results, page, last_page, facets, category_path","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"category_path":"roupas-femininas/vestidos"}},{"name":"product","description":"One product in full: prices (cash and card), the struck-through list price, the discount, brand, colour, marketplace seller, rating and review count, the attribute table, the images, the other colourways — and on br the full size list with a remaining-stock integer per size.","required_params":["sku"],"optional_params":["country"],"params":[{"name":"sku","type":"string","required":true,"description":"The Dafiti config SKU from a search row ('KO992SHF67UFS'). A variant SKU ending in '-53' is accepted and resolved to its parent.","on_invalid":"reject","example":"KO992SHF67UFS","aliases":["product_id","id","url"]},{"name":"country","type":"enum","required":false,"description":"Which Dafiti storefront to read. Only two of the four historical storefronts are still shops: br (dafiti.com.br, prices in BRL) and co (dafiti.com.co, prices in COP). They are different front-ends with different field coverage — size-level stock exists on br only.","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — dafiti.com.br, BRL, size-level stock"},{"value":"co","label":"Colombia — dafiti.com.co, COP, variant prices, no stock"}],"default":"br","example":"br","aliases":["cc","market","storefront"]}],"returns":"product{sku, title, brand, color, seller, url, currency, price_pix_brl|price_cop, price_card_brl, list_price_*, discount_pct, rating, review_count, description, category_path, images[], sizes[]{size, variant_sku, in_stock, stock_qty, stock_at_least, stock_capped, seller}, sizes_in_stock, sizes_total, stock_total, stock_total_at_least, other_colors[], attributes{}}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"sku":"KO992SHF67UFS"}},{"name":"availability","description":"SIZE-LEVEL STOCK for up to 10 products in ONE call, from the storefront's own 3.7 KB JSON: per size, the variant SKU, whether it is buyable, how many units remain, and who ships it. Brazil only — the Colombian storefront publishes no stock anywhere. This is the cheap call: use it to re-check stock, and `product` only when you need the full record.","required_params":["skus"],"optional_params":["country"],"params":[{"name":"skus","type":"array","required":true,"description":"1-10 Dafiti config SKUs. Ten SKUs in one call cost one credit, where ten `product` calls would cost more and move 78x the bytes.","on_invalid":"reject","example":["KO992SHF67UFS","AD464SCF97UDM"],"aliases":["sku","product_ids"]},{"name":"country","type":"enum","required":false,"description":"Brazil only: the Colombian storefront has no stock endpoint and no published size names.","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — dafiti.com.br"}],"default":"br","example":"br","aliases":["cc","market"]}],"returns":"items[]{sku, title, brand, url, price_pix_brl, list_price_brl, sizes[]{size, variant_sku, in_stock, stock_qty, seller}, sizes_in_stock, sizes_total, stock_total, stock_total_at_least}, requested, resolved, not_found[]","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"skus":["KO992SHF67UFS"]}}]},{"name":"danawa","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Danawa API — Korea's price comparison: search products, every mall's offer for a product, card and cash lowest prices, specs and price history","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/danawa/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on danawa.com (다나와). Rows are danawa catalogue products (`row_type: product`, with product_id for `product` / `offers` / `specs` / `price_history`, the card's variants — colours, storage, carrier plans — each with its own product_id, price and mall count) and shopping-mall listings that danawa indexes (`row_type: mall_item`, with the mall and its price). Filters: danawa category code, maker code, price range, scope (all / catalogue only / mall listings only), sort. 40 rows per page.","required_params":["query"],"optional_params":["category","maker","min_price","max_price","scope","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Korean or English (e.g. `iphone`, `SSD 2TB`, `아이폰17`, `로봇청소기`). Full-width letters are normalised (ｉｐｈｏｎｅ = iphone).","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Danawa category codes, 1-4 levels joined by `|`, as in a search row's `category_codes` (e.g. `224` 태블릿/휴대폰, `224|48419` 휴대폰, `861|32617` SSD). A trailing `|0` is ignored.","on_invalid":"reject","example":"861|32617","aliases":["category_codes","cate"]},{"name":"maker","type":"string","required":false,"description":"One danawa maker code, the `maker_code` of a search row (e.g. `702` 삼성전자, `1452` APPLE, `4213` Western Digital). Catalogue products only.","on_invalid":"reject","example":"702","aliases":["maker_code"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in KRW.","on_invalid":"reject","example":200000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in KRW.","on_invalid":"reject","example":300000,"minimum":0,"aliases":["price_max"]},{"name":"scope","type":"enum","required":false,"description":"Which rows: everything, danawa catalogue products only (가격비교상품), or indexed mall listings only (검색상품).","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체 — products and mall listings"},{"value":"catalog","label":"가격비교상품 — catalogue products only"},{"value":"mall","label":"검색상품 — mall listings only"}],"default":"all"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"인기상품순 danawa's popularity order"},{"value":"price_asc","label":"낮은가격순 price low to high"},{"value":"price_desc","label":"높은가격순 price high to low"},{"value":"newest","label":"신상품순 newest first"},{"value":"most_reviewed","label":"상품평 많은순 most reviews"}],"default":"popular"},{"name":"page","type":"integer","required":false,"description":"Result page, 40 rows per page. Danawa serves at most 50 pages (2,000 rows) per query; narrow the query or add a filter to reach the rest.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"results[]{row_type (product|mall_item), position, product_id (products), mall_item_id (mall rows), title, maker, maker_code, url, image, intro, spec_summary, category, category_codes, price, price_text, currency=KRW, mall_count, registered (YYYY-MM), opinion_count, rating, review_count (exact only), review_count_text ('999+' when capped), variants[]{product_id, label, price, price_text, mall_count, popular_rank_in_family}, mall, shipping_text, shipping_cost} + total, catalog_total, mall_listing_total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"SSD 2TB"}},{"name":"product","description":"One danawa product page: title, maker, brand, images, category path and codes, the card-payable lowest price (최저가, checked against the page's structured data), the cash lowest price (현금최저가), the lowest price including shipping, the launch price (출시가), review score and count, how many offers, registration month, spec highlights, the product codes of its variants and the top-malls price box. Use `offers` for every mall, `specs` for the full spec sheet. The lowest price with shipping, product type and variant codes are null when danawa's page does not publish them; meta.extra.not_on_this_page_layout names them when that happens.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Danawa product code (pcode, digits), the `product_id` of a search row (or of one of its `variants`), also in a product URL prod.danawa.com/info/?pcode=…. Provide product_id OR url.","on_invalid":"reject","example":"101956046","aliases":["pcode","id"]},{"name":"url","type":"string","required":false,"description":"A prod.danawa.com product URL (or m.danawa.com …?code=); alternative to product_id.","on_invalid":"reject","example":"https://prod.danawa.com/info/?pcode=101956046","aliases":["product_url"]}],"returns":"product{product_id, title, maker, maker_code, brand, url, image, images[], intro, spec_highlights, category_codes, category_path[], category_id, ui_category_path[], lowest_price, lowest_price_with_shipping, cash_lowest_price, launch_price, currency=KRW, price_mismatch, price_witnesses, offer_count, rating, review_count, registered, product_type, variant_product_ids[], mall_price_summary[]{mall, price, payment, is_lowest, shipping_text, interest_free_text}, status}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"17788451"}},{"name":"offers","description":"Every mall offer danawa lists for one product, in danawa's groups (오픈마켓, 백화점/홈쇼핑/종합몰, 샵다나와, 카드/현금 동일 전문몰, 일반 전문몰): mall, the mall's own item title, price, whether the price is for cash payment, shipping (free / amount / varies, as printed), price with shipping when the shipping is one exact amount, interest-free months, fast delivery, coupon and the buy link. Page 1 holds every group (up to 50 open-market rows); when the open market has more, `page=2`, 3 … return the next open-market rows.","required_params":[],"optional_params":["product_id","url","page"],"params":[{"name":"product_id","type":"string","required":false,"description":"Danawa product code (pcode, digits), the `product_id` of a search row (or of one of its `variants`), also in a product URL prod.danawa.com/info/?pcode=…. Provide product_id OR url.","on_invalid":"reject","example":"101956046","aliases":["pcode","id"]},{"name":"url","type":"string","required":false,"description":"A prod.danawa.com product URL (or m.danawa.com …?code=); alternative to product_id.","on_invalid":"reject","example":"https://prod.danawa.com/info/?pcode=101956046","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"1 = every group; 2+ = the next 50 open-market (오픈마켓) rows when `has_more` is true.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"product{product_id, title, lowest_price, cash_lowest_price, offer_count} + offers[]{position, group, mall, mall_code, mall_product_id, title, price, currency, payment (card|cash), is_group_lowest, shipping_text, shipping_cost, price_with_shipping, fast_delivery, interest_free_months, interest_free_text, coupon, naver_pay, url} + count + page + has_more + groups{name: count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"17788451"}},{"name":"specs","description":"The full spec sheet of one danawa product (상품 상세 스펙), as group / label / value rows in the source's own Korean wording.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Danawa product code (pcode, digits), the `product_id` of a search row (or of one of its `variants`), also in a product URL prod.danawa.com/info/?pcode=…. Provide product_id OR url.","on_invalid":"reject","example":"101956046","aliases":["pcode","id"]},{"name":"url","type":"string","required":false,"description":"A prod.danawa.com product URL (or m.danawa.com …?code=); alternative to product_id.","on_invalid":"reject","example":"https://prod.danawa.com/info/?pcode=101956046","aliases":["product_url"]}],"returns":"product{product_id, title, url} + specs[]{group, label, value} + count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"17788451"}},{"name":"price_history","description":"Danawa's lowest-price history for one product (가격추이): one point per week for the last 3 months and one point per month for the last 24 months, as danawa's chart plots them.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Danawa product code (pcode, digits), the `product_id` of a search row (or of one of its `variants`), also in a product URL prod.danawa.com/info/?pcode=…. Provide product_id OR url.","on_invalid":"reject","example":"101956046","aliases":["pcode","id"]},{"name":"url","type":"string","required":false,"description":"A prod.danawa.com product URL (or m.danawa.com …?code=); alternative to product_id.","on_invalid":"reject","example":"https://prod.danawa.com/info/?pcode=101956046","aliases":["product_url"]}],"returns":"product{product_id, url} + weekly[]{date, lowest_price} + monthly[]{date (YYYY-MM), lowest_price} + all_time_lowest{price, date} + currency=KRW","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"17788451"}}]},{"name":"daraz","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Daraz API — South Asia's biggest marketplace as JSON: product search across the Pakistan, Bangladesh, Sri Lanka and Nepal storefronts with the price actually charged in local currency, the strikethrough price and the real discount, rating, review count, units sold, the seller and the shipping location; full product records with every image, variant and SKU; and published customer reviews — from daraz.pk, daraz.com.bd, daraz.lk and daraz.com.np, no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/daraz/v1","spec_available":true,"actions":[{"name":"search","description":"Search one Daraz storefront and get the product grid: the price actually charged in local currency, the strikethrough price, the real discount, rating and review count, units sold, the seller's id and name, the shipping region, the brand and both ids needed to read the product. Narrow by price band, minimum rating or shipping region — every filter offered here was measured to bite. 🔴 Daraz matches the words in a product title and does not do fuzzy multi-word matching: measured, `Samsung Galaxy S23 Ultra 512GB` returns 4 results while `iPhone 15 Pro Max 256GB Natural Titanium` returns ZERO. Search the way a shopper types, in two or three words.","required_params":["query"],"optional_params":["country","page","price_min","price_max","min_rating","location","sort","include_facets"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper would type on Daraz. Two or three words work; long, fully-specified product names return zero rows (measured).","on_invalid":"reject","example":"rice cooker","aliases":["q","keyword","term","search"]},{"name":"country","type":"enum","required":false,"description":"Which Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as \"Rs.\" while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.","on_invalid":"reject","allowed_values":[{"value":"pk","label":"Pakistan (PKR) — daraz.pk"},{"value":"bd","label":"Bangladesh (BDT) — daraz.com.bd"},{"value":"lk","label":"Sri Lanka (LKR) — daraz.lk"},{"value":"np","label":"Nepal (NPR) — daraz.com.np"}],"default":"pk","example":"pk","aliases":["cc","market"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Daraz serves 40 products a page, and `last_page` in the response is the last page that holds real results. 🔴 Asking for a page beyond it does NOT return an error or an empty page: Daraz answers HTTP 200 with 40 unrelated products (measured — page 100 000 of a 3 164-result query returned a full page of toys and phone cases). This API drops those and says so in `page_note`, so a page past the end comes back empty rather than wrong.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"price_min","type":"integer","required":false,"description":"Lowest price, in the storefront's own currency and whole units. Measured on the query `phone` (PK): 4 080 matches unfiltered, 312 between 5 000 and 15 000 PKR, and 0 of the 40 returned rows fell outside the band.","on_invalid":"ignore","example":5000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price, in the storefront's own currency. Sent to Daraz as one band with `price_min`; this is the one filter that also corrects the reported total.","on_invalid":"ignore","example":15000,"minimum":1},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars. 🔴 It really does filter the ROWS (measured on `phone`: the unfiltered page carried 2 rows under 4.0, the filtered page 0) but Daraz does NOT recompute `total_results` for it — that figure stays at the unfiltered value. Trust the rows, not the total, when this is set.","on_invalid":"reject","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"location","type":"string","required":false,"description":"Only products shipped from this region, spelled as Daraz spells it. Turn `include_facets` on to see the regions a query actually offers. 🔴 Same caveat as `min_rating`: measured on `phone`, the unfiltered page was 17 Punjab / 23 Sindh and the filtered page 40/40 Punjab — but `total_results` did not change.","on_invalid":"ignore","example":"Punjab"},{"name":"sort","type":"enum","required":false,"description":"Result order, read off Daraz's own sort bar. 🔴 A price sort cannot be paged: measured, `price_asc` returns the identical 40 rows on pages 1, 2 and 10, so asking for page > 1 together with a price sort is rejected rather than served as duplicates. Daraz offers no 'newest' or 'best selling' order on this site.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Daraz's own best-match ranking (its default)"},{"value":"price_asc","label":"Price, cheapest first (page 1 only)"},{"value":"price_desc","label":"Price, dearest first (page 1 only)"}],"example":"price_asc"},{"name":"include_facets","type":"boolean","required":false,"description":"Also return `facets`: the filter block Daraz itself shows for this query — categories, brands, shipping regions, services and the category-specific attributes, each with the value to pass back. Measured 13 facet groups on a `laptop` search. 🔴 Daraz does not publish a product COUNT beside its facet values, so `count` is null on every one; the values are real, the counts are not published. Costs no extra upstream request.","on_invalid":"ignore","default":false}],"returns":"products[]{item_id, sku_id, sku, cheapest_sku, url, title, currency, price_<cur>, list_price_<cur>, price_display, discount_percent, discount_percent_source, discount_display, rating, rating_scale, review_count, sold_count, sold_count_display, brand_id, brand_name, seller_id, seller_name, location, in_stock, image, sponsored, highlights[]}, count, total_results, total_results_capped, page, last_page, per_page, no_more_pages, currency, country, venture, non_product_tiles_dropped, filler_rows_dropped, facets[], breadcrumb[]","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"rice cooker","country":"pk"}},{"name":"category","description":"Walk one Daraz category or tag page by page, with the same product rows and the same filters as `search`, plus an optional keyword applied INSIDE the category. Measured on PK: the whole `phone` search returns 4 080 matches and the `smartphones` category narrows it to 2 105. Category values come from the `category` facet — turn `include_facets` on in `search` to list them. A category Daraz does not publish returns NOT_FOUND rather than an empty success.","required_params":["category"],"optional_params":["country","query","page","price_min","price_max","min_rating","location","sort","include_facets"],"params":[{"name":"category","type":"string","required":true,"description":"A Daraz category slug (`smartphones`), a tag (`tag/iphone`) or a full Daraz category URL. 🔴 Daraz only honours a category as a URL PATH — passing it as a query parameter is silently ignored (measured: 4 080 -> 4 080, unchanged), which is why this is its own action.","on_invalid":"reject","example":"smartphones","aliases":["category_id","slug","tag","url"]},{"name":"query","type":"string","required":false,"description":"Optional keyword applied inside the category.","on_invalid":"ignore","example":"samsung","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as \"Rs.\" while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.","on_invalid":"reject","allowed_values":[{"value":"pk","label":"Pakistan (PKR) — daraz.pk"},{"value":"bd","label":"Bangladesh (BDT) — daraz.com.bd"},{"value":"lk","label":"Sri Lanka (LKR) — daraz.lk"},{"value":"np","label":"Nepal (NPR) — daraz.com.np"}],"default":"pk","example":"pk","aliases":["cc","market"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Daraz serves 40 products a page, and `last_page` in the response is the last page that holds real results. 🔴 Asking for a page beyond it does NOT return an error or an empty page: Daraz answers HTTP 200 with 40 unrelated products (measured — page 100 000 of a 3 164-result query returned a full page of toys and phone cases). This API drops those and says so in `page_note`, so a page past the end comes back empty rather than wrong.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"price_min","type":"integer","required":false,"description":"Lowest price, in the storefront's own currency and whole units. Measured on the query `phone` (PK): 4 080 matches unfiltered, 312 between 5 000 and 15 000 PKR, and 0 of the 40 returned rows fell outside the band.","on_invalid":"ignore","example":5000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price, in the storefront's own currency. Sent to Daraz as one band with `price_min`; this is the one filter that also corrects the reported total.","on_invalid":"ignore","example":15000,"minimum":1},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars. 🔴 It really does filter the ROWS (measured on `phone`: the unfiltered page carried 2 rows under 4.0, the filtered page 0) but Daraz does NOT recompute `total_results` for it — that figure stays at the unfiltered value. Trust the rows, not the total, when this is set.","on_invalid":"reject","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"location","type":"string","required":false,"description":"Only products shipped from this region, spelled as Daraz spells it. Turn `include_facets` on to see the regions a query actually offers. 🔴 Same caveat as `min_rating`: measured on `phone`, the unfiltered page was 17 Punjab / 23 Sindh and the filtered page 40/40 Punjab — but `total_results` did not change.","on_invalid":"ignore","example":"Punjab"},{"name":"sort","type":"enum","required":false,"description":"Result order, read off Daraz's own sort bar. 🔴 A price sort cannot be paged: measured, `price_asc` returns the identical 40 rows on pages 1, 2 and 10, so asking for page > 1 together with a price sort is rejected rather than served as duplicates. Daraz offers no 'newest' or 'best selling' order on this site.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Daraz's own best-match ranking (its default)"},{"value":"price_asc","label":"Price, cheapest first (page 1 only)"},{"value":"price_desc","label":"Price, dearest first (page 1 only)"}],"example":"price_asc"},{"name":"include_facets","type":"boolean","required":false,"description":"Also return `facets`: the filter block Daraz itself shows for this query — categories, brands, shipping regions, services and the category-specific attributes, each with the value to pass back. Measured 13 facet groups on a `laptop` search. 🔴 Daraz does not publish a product COUNT beside its facet values, so `count` is null on every one; the values are real, the counts are not published. Costs no extra upstream request.","on_invalid":"ignore","default":false}],"returns":"same shape as `search`, plus category","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"smartphones","country":"pk"}},{"name":"browse","description":"Documented alias of `category` — identical parameters and identical response.","required_params":["category"],"optional_params":["country","query","page","price_min","price_max","min_rating","location","sort","include_facets"],"params":[{"name":"category","type":"string","required":true,"description":"See `category`.","on_invalid":"reject","example":"smartphones","aliases":["slug","tag","url"]},{"name":"country","type":"enum","required":false,"description":"Which Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as \"Rs.\" while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.","on_invalid":"reject","allowed_values":[{"value":"pk","label":"Pakistan (PKR) — daraz.pk"},{"value":"bd","label":"Bangladesh (BDT) — daraz.com.bd"},{"value":"lk","label":"Sri Lanka (LKR) — daraz.lk"},{"value":"np","label":"Nepal (NPR) — daraz.com.np"}],"default":"pk","example":"pk","aliases":["cc","market"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Daraz serves 40 products a page, and `last_page` in the response is the last page that holds real results. 🔴 Asking for a page beyond it does NOT return an error or an empty page: Daraz answers HTTP 200 with 40 unrelated products (measured — page 100 000 of a 3 164-result query returned a full page of toys and phone cases). This API drops those and says so in `page_note`, so a page past the end comes back empty rather than wrong.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"same shape as `category`","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"smartphones","country":"pk"}},{"name":"product","description":"The full record for one product: title, full description (as text and as the original HTML), brand, every image and video, the colour/size variant axes, the SKU table with per-order limits, the category path, availability and the return policy — plus the price actually charged, the strikethrough price, the real discount, rating, review count, units sold and the seller's name. 🔴 The last group does not exist on Daraz's product page at all (its ld+json offer carries no price key, and its only price string was measured to be the STRUCK-THROUGH price on 12 of 12 products where the two differ), so this action also reads Daraz's own catalogue entry for the same item and tags every field it took from there with `price_source: \"catalogue\"`. That is why it costs two upstream requests. If the catalogue has no live entry, the price fields are null and `price_source` says `unavailable` — nothing is guessed.","required_params":["item_id"],"optional_params":["country","sku_id"],"params":[{"name":"item_id","type":"string","required":true,"description":"The numeric Daraz item id or any Daraz product URL. Every `search` row carries both.","on_invalid":"reject","example":"1957775263","aliases":["product_id","id","url","product"]},{"name":"country","type":"enum","required":false,"description":"Which Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as \"Rs.\" while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.","on_invalid":"reject","allowed_values":[{"value":"pk","label":"Pakistan (PKR) — daraz.pk"},{"value":"bd","label":"Bangladesh (BDT) — daraz.com.bd"},{"value":"lk","label":"Sri Lanka (LKR) — daraz.lk"},{"value":"np","label":"Nepal (NPR) — daraz.com.np"}],"default":"pk","example":"pk","aliases":["cc","market"]},{"name":"sku_id","type":"string","required":false,"description":"Which variant to read. A Daraz item can hold several SKUs at different prices (measured: one rice cooker's two SKUs print 12 000 and 9 999), so pass the `sku_id` from the search row when you have it. Omitted, Daraz picks its own default.","on_invalid":"ignore","example":"14018953584","aliases":["skuId","sku"]}],"returns":"item_id, sku_id, sku, mpn, url, title, country, currency, price_<cur>, list_price_<cur>, price_display, list_price_display, price_source, discount_percent, discount_percent_source, brand{id,name,url}, seller{id,name,name_source}, category_path[], category_id, description, description_html, highlights[], images[], image, videos[], variants[]{property_id,name,values[]}, skus[]{sku_id,max_order_quantity,min_order_quantity}, sku_names[], availability, in_stock, return_policy, rating, review_count, rating_scale, sold_count, stock_quantity, location","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"1957775263","country":"pk"}},{"name":"product/reviews","description":"The published customer reviews for one product: the star rating, the text, the date, the buyer's display name, whether it is a verified purchase, the reviewer's photos, the helpful votes, Daraz's three per-purchase sub-scores and the seller's reply where there is one — with the aggregate 1-5 star histogram beside them. 🔴 The histogram deliberately does not sum to `total_reviews`: Daraz withholds some reviews from the public list and states how many in `hidden_review_count` (measured: 8 308 visible across the histogram against a stated 8 362, with 2 482 hidden). Reviews can be read at most 1 000 deep per product.","required_params":["item_id"],"optional_params":["country","page","limit","stars","sort"],"params":[{"name":"item_id","type":"string","required":true,"description":"The numeric Daraz item id or a Daraz product URL. 🔴 A SKU id is NOT accepted here — Daraz returns an empty list for one, because the two id spaces are different.","on_invalid":"reject","example":"930427363","aliases":["product_id","id","url"]},{"name":"country","type":"enum","required":false,"description":"Which Daraz storefront to read. 🔴 This is not a language switch: the four storefronts are SEPARATE catalogues priced in four different currencies, and the same search returns different products in each. Note that Pakistan, Sri Lanka and Nepal all print prices as \"Rs.\" while meaning PKR, LKR and NPR — the response always names the currency and the price field carries the currency in its name.","on_invalid":"reject","allowed_values":[{"value":"pk","label":"Pakistan (PKR) — daraz.pk"},{"value":"bd","label":"Bangladesh (BDT) — daraz.com.bd"},{"value":"lk","label":"Sri Lanka (LKR) — daraz.lk"},{"value":"np","label":"Nepal (NPR) — daraz.com.np"}],"default":"pk","example":"pk","aliases":["cc","market"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Daraz serves 40 products a page, and `last_page` in the response is the last page that holds real results. 🔴 Asking for a page beyond it does NOT return an error or an empty page: Daraz answers HTTP 200 with 40 unrelated products (measured — page 100 000 of a 3 164-result query returned a full page of toys and phone cases). This API drops those and says so in `page_note`, so a page past the end comes back empty rather than wrong.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, up to 50 (default 20: 119 KB a call against 308 KB at 50). 🔴 Daraz returns ZERO rows for a larger value rather than clamping it, so this API clamps it instead. `page x limit` may not exceed 1000, which is how deep Daraz serves reviews however many exist.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50},{"name":"stars","type":"integer","required":false,"description":"Only reviews with exactly this many stars. Verified against Daraz's own histogram: the 1-star filter returned 727 where the histogram says 727, the 5-star filter 6 300 where it says 6 300.","on_invalid":"reject","example":5,"minimum":1,"maximum":5,"aliases":["filter"]},{"name":"sort","type":"enum","required":false,"description":"Review order. Daraz accepts two further values and returns a byte-identical list for both, so they are not offered here.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Daraz's own ranking (default)"},{"value":"recent","label":"Newest first"}],"default":"relevance","example":"recent"}],"returns":"reviews[]{review_id, rating, text, date, bought_date, author, anonymous, verified_purchase, sku_info, images[], video_id, likes, up_votes, down_votes, sub_scores, seller_reply, seller_reply_date}, count, page, per_page, total_pages, total_reviews, average_rating, rating_histogram, hidden_review_count, reviews_with_images, reviews_with_video, item_id, country","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"item_id":"930427363","country":"pk"}}]},{"name":"dealabs","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Dealabs API — deals from www.dealabs.com (France) as JSON: search the community's deals by keyword with sort (relevance, newest, hottest, price, discussed), temperature, price, date and category filters; the trending, new, hottest and discussion feeds; every deal in full (price, comparison price, discount, merchant, voucher code, shipping, temperature, comments, expiry, description); the comments of a deal; and the category list. Prices in EUR. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dealabs/v1","spec_available":true,"actions":[{"name":"search","description":"Search Dealabs deals by keyword. Sort by relevance, newest, hottest, price or latest comment; filter by temperature, price, posting date, category, expired and local deals. 30 deals a page.","required_params":["query"],"optional_params":["sort","time_frame","min_temperature","max_temperature","min_price","max_price","group_id","hide_expired","hide_local","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search Dealabs deal titles and voucher codes for.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default for a search)"},{"value":"new","label":"Newest first"},{"value":"hot","label":"Hottest first (highest temperature)"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"discussed","label":"Most recently commented"}],"default":"relevance","example":"hot","aliases":["sort_by","order"]},{"name":"time_frame","type":"enum","required":false,"description":"How far back to search by posting date. The site searches the last 365 days unless told otherwise.","on_invalid":"reject","allowed_values":[{"value":"last_year","label":"Posted in the last 365 days (the site's default)"},{"value":"last_30_days","label":"Last 30 days"},{"value":"last_7_days","label":"Last 7 days"},{"value":"all_time","label":"No date limit"}],"default":"last_year","example":"last_30_days","aliases":["period","posted_within"]},{"name":"min_temperature","type":"integer","required":false,"description":"Only deals at or above this temperature (degrees; the site's own steps are 20, 100 and 500, any whole number works).","on_invalid":"reject","example":100,"minimum":-100000,"maximum":100000,"aliases":["temperature_from","min_temp"]},{"name":"max_temperature","type":"integer","required":false,"description":"Only deals at or below this temperature.","on_invalid":"reject","example":600,"minimum":-100000,"maximum":100000,"aliases":["temperature_to","max_temp"]},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price, in EUR.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price, in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max","price_to"]},{"name":"group_id","type":"string","required":false,"description":"Only one category: a categories row's group_id (or a row's group.group_id).","on_invalid":"reject","example":"1207","value_pattern":"\\d{1,12}","aliases":["category_id"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked as expired.","on_invalid":"reject","default":false,"example":true},{"name":"hide_local","type":"boolean","required":false,"description":"Leave out in-store-only (local) deals.","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: total, page, last_page, has_more, filters_applied, suggestions_dropped (a search with no result: the site's filler deals are not returned).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","sort":"new"}},{"name":"deals","description":"The Dealabs feeds: trending (heating up now), new (every new post), hottest (the hottest of the period) and community discussions. 30 a page.","required_params":[],"optional_params":["list","page"],"params":[{"name":"list","type":"enum","required":false,"description":"Which Dealabs feed.","on_invalid":"reject","allowed_values":[{"value":"trending","label":"What is heating up now (the site's 'hot' tab)"},{"value":"new","label":"Newest posts first"},{"value":"hottest","label":"The hottest deals of the current period"},{"value":"discussions","label":"Community discussion threads"}],"default":"trending","example":"new","aliases":["feed","tab"]},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: list, total, total_capped (the feeds report 10000 = a cap), page, last_page, has_more, pinned_rows.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"list":"new"}},{"name":"category_deals","description":"The deals of one Dealabs category, hottest or newest first. The category page's own view hides expired deals and starts at a temperature floor (100° or 180° depending on the site); hide_expired / min_temperature change that and meta.applied_view shows what the page applied.","required_params":["group_slug"],"optional_params":["sort","min_temperature","hide_expired","page"],"params":[{"name":"group_slug","type":"string","required":true,"description":"Category slug: a categories row's group_slug (or a row's group.group_slug), e.g. high-tech, consoles-jeux-video, voyages.","on_invalid":"reject","example":"high-tech","value_pattern":"[a-z0-9][a-z0-9\\-]{0,100}","aliases":["category","group"]},{"name":"sort","type":"enum","required":false,"description":"Order of the category's deals.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hottest first (the category page's default)"},{"value":"new","label":"Newest first"},{"value":"discussed","label":"Most recently commented"}],"default":"hot","example":"new","aliases":["sort_by"]},{"name":"min_temperature","type":"integer","required":false,"description":"Temperature floor. The category page has its own default floor (100° on most sites); meta.applied_view shows what the page applied.","on_invalid":"reject","example":0,"minimum":-100000,"maximum":100000,"aliases":["temperature_from"]},{"name":"hide_expired","type":"boolean","required":false,"description":"The category page hides expired deals by default; false shows them.","on_invalid":"reject","example":false},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: group_slug, sort, applied_view{sort, min_temperature, hide_expired}, total, total_capped, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group_slug":"high-tech"}},{"name":"deal","description":"One deal in full by its id: price (0 = free, null = no price), the price as the site prints it, comparison price and discount, merchant, voucher code, shipping, temperature, status and expiry, every category it is in, the poster, the outbound link, images and the full description.","required_params":["deal_id"],"optional_params":[],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (3320044); a www.dealabs.com deal URL also works.","on_invalid":"reject","example":"3320044","aliases":["id","thread_id","url"]}],"returns":"deal{deal_id, type, title, url, share_url, visit_url, status, is_expired, is_hot, is_new, is_local, is_exclusive, nsfw, temperature, temperature_level, price, is_free, price_display, next_best_price, discount_pct, source_discount_pct, price_discount, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant, link_host, group, groups[], comment_count, posted_by, published_at, created_at, updated_at, starts_at, expires_at, dispatched_from{name, country}, is_national, regions, locations, image_url, images[], description, description_html}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"3320044"}},{"name":"comments","description":"The comments of one deal, in the site's own order (most helpful first), with author, time, reactions and reply links.","required_params":["deal_id"],"optional_params":["limit","page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (3320044); a www.dealabs.com deal URL also works.","on_invalid":"reject","example":"3320044","aliases":["id","thread_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Comments per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Comment page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"rows[]: comment_id, deal_id, url, text, html, user{user_id, username}, created_at, reactions{like, funny, helpful…}, is_reply, main_comment_id, parent_comment_id, is_pinned, popular, was_edited, status. meta: total, page, last_page, has_more, order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"3320044"}},{"name":"categories","description":"The Dealabs category list: every main category with its id, slug, deal count and its community-favourite subcategories. group_id goes to search, group_slug to category_deals.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: group_id, name, group_slug, url, deal_count, subcategories[{group_id, name, group_slug}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"decathlon","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Decathlon US and Brazil search/product detail API. country=br selects source-ranked Brazil search; default US preserves its existing catalogue. US scope: search the decathlon.com (US) sporting-goods catalogue and pull a full product with every size/colour variant, its EAN-13 barcode, shipping weight in grams, live stock count, price and sale price, options, images and video — no API key, account or cookie required","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/decathlon/v1","spec_available":true,"actions":[{"name":"search","description":"Select country=br for Brazil's source-ranked query search: relevance only, page 1..50, max_results 1..24. BR prices are BRL, source pages contain up to 24 products, and US filters/collections/suggest are unavailable in BR. With default country=us: search or browse the decathlon.com (US) catalogue. Give a free-text `query` ('hiking boots', 'bike helmet', 'kiprun'), a `collection` handle to browse (`running`, `womens`, `mens-hiking-boots`, `all`), or both to search inside one collection. Every result carries Decathlon's own product id and handle, the product title, house brand, product type, tags, image, price range, sale price, stock flag and — in catalogue and collection mode — the variant count, SKU list and shipping-weight range. Narrow with product_type, vendor, tag, min_price, max_price and available_only; sort by price, name or publish date; page through the whole match set. Live facet vocabularies with counts come back with every catalogue-mode response, so the filter values are never a guess. Feed a result's `handle` straight into `product_detail` for barcodes and per-variant weights.","required_params":[],"optional_params":["country","query","collection","mode","max_results","page","sort","product_type","vendor","tag","min_price","max_price","available_only"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. US preserves all existing modes and filters. BR supports query, relevance, page 1..50 and max_results 1..24; other countries are not qualified.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing Shopify catalogue)"},{"value":"br","label":"Brazil (published source search and product detail)"}],"default":"us","example":"br"},{"name":"query","type":"string","required":false,"description":"What to look for in the decathlon.com (US) catalogue — a product name, category word or one of Decathlon's own brands ('hiking boots', 'kiprun running shoes', 'bike helmet', 'quechua tent'). Provide `query` OR `collection` (or both, to search inside one collection). NOTE decathlon.com is the **US** store and its catalogue is small (~500 products): a term the US store does not carry returns HTTP 200 with zero results, which is an honest empty and not an error. decathlon.com is a narrow US store (about 500 products, heavy in hiking, camping, cycling, running and apparel) — it really does not stock tennis rackets, swim goggles, helmets or dumbbells, and this API will tell you 0 rather than pad the answer. (decathlon.com's own search will happily answer 'racket' with 58 jackets; this API will not.)","on_invalid":"reject","example":"hiking boots","aliases":["q","keyword","text","search"]},{"name":"collection","type":"string","required":false,"description":"Browse one Decathlon collection instead of (or as well as) keyword searching. Use the handle exactly as it appears in a decathlon.com/collections/<handle> URL — e.g. `running`, `womens`, `mens-hiking-boots`, `womens-jackets`, `hiking-camp-accessories`. `all` browses the whole store. A handle that does not exist returns NOT_FOUND; a real collection the US store currently carries nothing in returns an honest empty result set.","on_invalid":"reject","example":"womens-hiking-boots","aliases":["collection_handle","category","c"]},{"name":"mode","type":"enum","required":false,"description":"Which route answers. Leave this alone unless you are building a type-ahead box. `catalog` (the default) searches Decathlon's complete US catalogue and returns every match with a real total, pagination, filters, sorting and live facet counts. `suggest` calls Shopify's autocomplete index instead: one small fast request, but it is a type-ahead index, not search — it is hard-capped at 10 results, publishes no total, cannot page, filter or sort, and it UNDER-REPORTS (measured: 0 results for 'tennis' where the store has 1, and 4 for 'swim' where the store has 7). `meta.search_mode` and `meta.ranking` always report what ran.","on_invalid":"reject","allowed_values":[{"value":"catalog","label":"Full-catalogue search (default) — every match, real total, pagination, filters, sorting, facets"},{"value":"suggest","label":"Shopify's type-ahead autocomplete — max 10, one page, no total, under-reports"}],"default":"catalog","example":"catalog"},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-250). In `suggest` mode Shopify's own cap of 10 applies whatever you ask for.","on_invalid":"ignore","default":20,"minimum":1,"maximum":250,"aliases":["limit","max"]},{"name":"page","type":"integer","required":false,"description":"Which page of the matched result set to return (1-based, `max_results` per page). Paging is a catalogue-mode feature — Shopify's autocomplete index has a single page. Page until `meta.pagination.has_more` is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering (catalogue and collection mode). Omit for relevance, which in collection browsing means Decathlon's own collection order. Any explicit sort forces catalogue mode so that the ordering covers the whole match set rather than one page.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match first (catalogue mode); collection order when browsing"},{"value":"price_asc","label":"Cheapest first (by the product's lowest variant price)"},{"value":"price_desc","label":"Most expensive first"},{"value":"title_asc","label":"Product name A-Z"},{"value":"title_desc","label":"Product name Z-A"},{"value":"newest","label":"Most recently published first"},{"value":"oldest","label":"Oldest published first"}],"example":"price_asc","aliases":["order","sort_by"]},{"name":"product_type","type":"string","required":false,"description":"Keep only products whose Shopify product type contains this text (case-insensitive). The values that actually exist for your query come back in `facets.product_type` with counts, so you never have to guess.","on_invalid":"ignore","example":"Athletic Shoes","aliases":["type"]},{"name":"vendor","type":"string","required":false,"description":"Keep only products from this Decathlon house brand (Kiprun, Quechua, Domyos, Rockrider, Forclaz, Nabaiji, Btwin…). Case-insensitive, substring match. Live values with counts are in `facets.vendor`.","on_invalid":"ignore","example":"Quechua","aliases":["brand"]},{"name":"tag","type":"string","required":false,"description":"Keep only products carrying this Shopify tag (exact, case-insensitive). Decathlon's tag list mixes merchandising tags ('hiking_boots', 'FW25') with internal bookkeeping tags ('FAMILY: 25126', stock flags) — they are returned verbatim, and `facets.tag` shows which ones your result set actually has.","on_invalid":"ignore","example":"hiking_boots"},{"name":"min_price","type":"number","required":false,"description":"Keep only products with at least one variant at or above this price, in USD.","on_invalid":"ignore","example":25,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Keep only products with at least one variant at or below this price, in USD.","on_invalid":"ignore","example":150,"minimum":0,"aliases":["price_max"]},{"name":"available_only","type":"boolean","required":false,"description":"Keep only products with at least one buyable variant. Works in every mode — in suggest mode it is passed to Shopify as its own `unavailable_products=hide` option (measured: 10 results become 7 on a query with sold-out items).","on_invalid":"ignore","default":false,"aliases":["in_stock","in_stock_only"]}],"returns":"BR: products[]{product_id,handle,url,title,vendor,description,description_html,image,image_count,available,price_min,price_max,currency,variant_count,categories} + null collection/facets, source total and page metadata. Prices reflect the published SKU offers, not installments; optional search GTIN and weight are absent. US: products[]{product_id, handle, url, title, vendor, product_type, tags[], description, description_html, image, image_count, available, price_min, price_max, compare_at_price_min, compare_at_price_max, currency, on_sale, variant_count, in_stock_variant_count, grams_min, grams_max, skus[], options[], published_at, created_at, updated_at} + collection{handle, collection_id, title, description, products_count, products_published, url} (only when you browsed a collection; `products_count` is Decathlon's own declared figure and `products_published` is how many the collection actually serves — they disagree on about half of collections, so both are returned rather than one being quietly preferred) + facets{product_type[]{value,count}, vendor[]{value,count}, tag[]{value,count}, price{min,max}} (catalogue and collection mode). meta.search_mode says which route answered (`suggest` | `catalog` | `collection`), meta.ranking says whose ordering you are looking at (`shopify_suggest` | `engine_relevance` | `collection_order`), and meta.pagination{page, per_page, total_results, returned, has_more, next_page} carries the counts. meta.matching{all_terms, any_term} says how the result set was found: `all_terms` is the normal case (every search term matched the product), and `any_term` is a rescue that only ever runs when matching every term found nothing at all — a thin result set is never padded out with weaker matches. HONEST LIMITS: search cards never carry `barcode`, `weight` or per-variant stock counts, because Decathlon's list feeds do not publish them at all — `product_detail` is where those live. decathlon.com is the US store only, it lists about 500 products, and a term it does not stock returns 0 products with ok:true rather than a padded answer. `suggest` mode is a type-ahead index: max 10, one page, `total_results` null, and it misses products catalogue mode finds.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"br","query":"mochila","max_results":3}},{"name":"product_detail","description":"For country=br: resolve a search product_id by exact source search match, then fetch its actual product page. Or pass the returned handle / Brazil URL. Detail includes source identity, BRL SKU offers, availability, images, description, published EAN and seller fields; weights are optional/null. Default US scope: get one Decathlon product in full, by handle, product id or decathlon.com URL — title, house brand, product type, tags, the marketing description in both plain text and its original HTML, every image with dimensions and the variants it belongs to, product video and 3D media, the option axes with their values, and one row per size x colour variant. Each variant row carries Decathlon's own variant id, the retail SKU, the **EAN-13 barcode**, the **shipping weight in grams** (plus the merchant's own weight + unit pair), the live **inventory quantity** as a real integer, the buyable flag, price, compare-at price, tax and shipping flags, and any volume-pricing rules. Built for shipping-cost and catalogue-matching work: barcode and grams are the two fields this endpoint exists for.","required_params":[],"optional_params":["country","handle","product_id","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Store country. US preserves all existing modes and filters. BR supports query, relevance, page 1..50 and max_results 1..24; other countries are not qualified.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (existing Shopify catalogue)"},{"value":"br","label":"Brazil (published source search and product detail)"}],"default":"us","example":"br"},{"name":"handle","type":"string","required":false,"description":"The product's Decathlon handle — the last path segment of a decathlon.com/products/<handle> URL, and the `handle` returned by `search`. This is the fast path: it is the only key Decathlon's own product route resolves, so it costs exactly one round trip. Provide `handle`, `product_id` or `url`.","on_invalid":"reject","example":"kiprun-kipride-mens-running-shoes-380020","aliases":["product_handle","slug","product"]},{"name":"product_id","type":"string","required":false,"description":"Shopify's numeric product id, exactly as `search` returns it. Accepted for convenience, but be aware decathlon.com does NOT serve a product by id (/products/<id>.json is a 404), so the id is resolved to its handle through this API's cached catalogue index — the first such call after the cache expires also pays for the catalogue read. Pass `handle` when you have it.","on_invalid":"reject","example":"8042533847102","aliases":["id","pid"]},{"name":"url","type":"string","required":false,"description":"A full decathlon.com product URL — an alternative to `handle`. A `?variant=<id>` suffix is accepted and ignored (every variant is returned anyway).","on_invalid":"ignore","example":"https://www.decathlon.com/products/kiprun-kipride-mens-running-shoes-380020","aliases":["product_url"]}],"returns":"BR: product{product_id,handle,url,title,vendor,description,description_html,currency,price_min,price_max,available,images,variant_count,variants[]{variant_id,sku,barcode,title,price,compare_at_price,currency,available,inventory_quantity,grams,weight,weight_unit,options,seller_id,seller_name,image},seller_info,rating,categories,specifications}. BR weights are null when not published; optional EAN/stock/seller fields may also be null. US: product{product_id, handle, url, title, vendor, product_type, tags[], description, description_html, specifications[]{name, value}, available, price_min, price_max, price_varies, compare_at_price_min, compare_at_price_max, currency, on_sale, options[]{name, position, values[]}, images[]{image_id, src, alt, position, width, height, variant_ids[]}, image, media[]{media_id, media_type, position, alt, src, external_id, host}, variant_count, in_stock_variant_count, grams_min, grams_max, weight_units_seen[], weight_unit_varies, published_at, created_at, updated_at, variants[]{variant_id, sku, barcode, title, options{}, option1, option2, option3, position, price, compare_at_price, currency, available, inventory_quantity, inventory_policy, inventory_management, grams, weight, weight_unit, requires_shipping, taxable, quantity_rule, quantity_price_breaks, image, url}}. meta.coverage counts how many of this product's variants actually carry a barcode, a weight and a stock number, so you can see the completeness of the row you were given rather than trusting an average. FIELD NOTES: `grams` is the canonical shipping weight and is always in grams; `weight`+`weight_unit` are the merchant's own entry and Decathlon genuinely mixes kg and lb BETWEEN variants of the same product, which is why `weight_unit_varies` is flagged and no conversion is invented. `inventory_quantity` is null when the merchant does not track stock for that variant (`inventory_management` is then null too) — null means 'not published', never 'zero'. `description_html` is the raw HTML Decathlon publishes; `description` is the same copy with markup stripped and entities decoded. Decathlon publishes NO ratings, reviews, dimensions, colour swatches or per-store stock on these routes.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"handle":"decathlon-gift-card"}}]},{"name":"delcampe","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Delcampe API — Europe's collectables marketplace (stamps, postcards, coins and banknotes, trading cards, old paper …): search ongoing or SOLD listings with filters for category, sale type, price, seller country and seller; one listing in full with its price, sale type, every bid with amount and time, end time, shipping zones with countries and costs, and the seller; a seller's ratings and feedback; the category tree. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/delcampe/v1","spec_available":true,"actions":[{"name":"search","description":"Search Delcampe listings — for sale now or already sold — by words, category, sale type (fixed price / auction / auction house), price in EUR, seller country or continent, one seller's shop, free shipping and discounted listings. Up to 480 rows a page.","required_params":[],"optional_params":["query","category_id","category_path","sale_type","status","min_price","max_price","seller_country","seller_continent","seller_id","free_shipping","discounted_only","sort","limit","page"],"params":[{"name":"query","type":"string","required":false,"description":"Words to search for in listing titles (all words must match, the site's default). Leave empty to browse a category, a seller's shop or the whole site with filters.","on_invalid":"reject","example":"napoleon","aliases":["q","term","keyword","search"]},{"name":"category_id","type":"integer","required":false,"description":"A category id from the `categories` action (30001 Stamps, 30002 Postcards, 30003 Coins & Banknotes, 34439 Modern Collectible Cards …). An unknown id returns 0 rows.","on_invalid":"reject","example":30001,"aliases":["category"]},{"name":"category_path","type":"string","required":false,"description":"A category as its path, exactly as an item's `category_path` / `breadcrumbs[].path` gives it (stamps/france/18491900). An unknown path → NOT_FOUND. Give this or category_id, not both.","on_invalid":"reject","example":"stamps/france/18491900"},{"name":"sale_type","type":"enum","required":false,"description":"Only one kind of sale. Default: all kinds.","on_invalid":"reject","allowed_values":[{"value":"fixed_price","label":"Fixed price"},{"value":"auction","label":"Auction (with or without bids)"},{"value":"auction_with_bids","label":"Auction that already has bids"},{"value":"auction_without_bids","label":"Auction without bids yet"},{"value":"auction_house","label":"Auction-house lots"}],"example":"auction"},{"name":"status","type":"enum","required":false,"description":"ongoing = for sale now; sold = closed sales with the price they sold at.","on_invalid":"reject","allowed_values":[{"value":"ongoing","label":"Listings for sale now (default)"},{"value":"sold","label":"Sold listings (closed sales)"}],"default":"ongoing","example":"sold"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR (the listing's price, before shipping and the buyer's platform fee).","on_invalid":"reject","example":10,"minimum":0,"maximum":10000000,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR.","on_invalid":"reject","example":50,"minimum":0,"maximum":10000000,"aliases":["price_max"]},{"name":"seller_country","type":"string","required":false,"description":"Only sellers located in this country (two-letter code: FR, BE, DE, IT, GB, US …).","on_invalid":"reject","example":"FR"},{"name":"seller_continent","type":"enum","required":false,"description":"Only sellers on this continent. Give this or seller_country, not both.","on_invalid":"reject","allowed_values":[{"value":"africa","label":"Africa"},{"value":"asia","label":"Asia"},{"value":"central_america","label":"Central America"},{"value":"europe","label":"Europe"},{"value":"north_america","label":"North America"},{"value":"oceania","label":"Oceania"},{"value":"south_america","label":"South America"}],"example":"europe"},{"name":"seller_id","type":"string","required":false,"description":"Only this seller's listings (their shop) — the seller_id from an item's `seller`.","on_invalid":"reject","example":"2564895"},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings the seller ships for free.","on_invalid":"reject","default":false,"example":true},{"name":"discounted_only","type":"boolean","required":false,"description":"Only listings with a seller discount (rows then carry price_before_discount).","on_invalid":"reject","default":false,"example":true},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Most recent first (default)"},{"value":"ending_soon","label":"Closing soon first"},{"value":"price_asc","label":"Least expensive first"},{"value":"price_desc","label":"Most expensive first"},{"value":"title","label":"Title A-Z"}],"default":"newest","example":"price_asc"},{"name":"limit","type":"integer","required":false,"description":"Rows per page — the source's own page sizes: 12, 24, 60, 120, 240 or 480. page × limit may not pass 10,000 (the source's own window).","on_invalid":"reject","allowed_values":[{"value":12,"label":"12 rows"},{"value":24,"label":"24 rows"},{"value":60,"label":"60 rows"},{"value":120,"label":"120 rows"},{"value":240,"label":"240 rows"},{"value":480,"label":"480 rows"}],"default":60,"example":60},{"name":"page","type":"integer","required":false,"description":"Result page, from 1.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000}],"returns":"rows[]: item_id (give it to `item`), url, title, sale_type (fixed_price | auction | auction_house), price + currency (the listing's own price; null when the card shows a conversion), price_is_converted, price_converted + price_converted_currency (the site's approximate conversion for listings in another currency), price_before_discount, discount_label, discount_percent, bid_count (auctions), seller_kind (professional | private), is_new, image, image_large. Advert tiles are left out. meta: total (the source's own count), total_is_exact (false: the window stops at 10,000), page, limit, has_more, adverts_dropped, filters_applied, display_currency, timezone, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"napoleon","category_id":30001,"limit":60}},{"name":"item","description":"One listing in full: the listing's own price and currency, sale type, status (ongoing / ended) and whether it sold, every bid (bidder alias, amount, time), purchases, start and end time in UTC, buyer platform fee, shipping zones with each zone's countries, methods and costs, description, category path, all large images, and the seller (rating, location, languages, member since). Give item_id or url.","required_params":[],"optional_params":["item_id","url"],"params":[{"name":"item_id","type":"string","required":false,"description":"The Delcampe item number (a search row's item_id, or the number at the end of a listing address).","on_invalid":"reject","example":"2641434734","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"A listing address instead of item_id (any language version).","on_invalid":"reject","example":"https://www.delcampe.net/en_GB/collectables/coins-banknotes/coins-great-britain-1662-1816-former-minting-end-of-17th-beginning-of-19th-c/guinea/1794-great-britain-george-iii-gold-guinea-ngc-au55-2641434734.html"}],"returns":"item{item_id, url, title, sale_type, status, sold, availability, price, currency, price_display (the printed price), price_converted, price_converted_currency, price_before_discount, discount_label, discount_percent, lowest_price_30d, price_is (asking_price | starting_price | current_bid | final_price), bid_count, bids[]{bidder, amount, currency, placed_at, placed_at_local}, purchases, purchase_history[]{buyer, quantity, purchased_at}, questions, visits, watchers, started_at, ends_at (UTC), *_local, seconds_remaining, platform_fee, platform_fee_display, shipping{summary, dispatch, zones[]{zone, countries[], country_count, methods[]{method, cost, currency}, payment_methods[]}, costs_note, destinations[]}, seller_specific_conditions, description, category_path, breadcrumbs[]{name, url, path}, images[], image_count, seller{seller_id, nickname, profile_url, rating_pct, rating_count, verified, membership, member_since, last_connection, location, languages[], payment_methods[], shop_search_url}}. meta: display_currency, timezone, time_check.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"2649823442"}},{"name":"seller","description":"A seller's public profile: professional or private, rating over the last 12 months and since registration with transaction counts, member since, last connection, location, languages, and the latest feedback received (score, comment, date).","required_params":["seller_id"],"optional_params":[],"params":[{"name":"seller_id","type":"string","required":true,"description":"The seller's numeric id (an item's seller.seller_id).","on_invalid":"reject","example":"2564895"}],"returns":"seller{seller_id, nickname, profile_url, seller_kind, status, rating_pct, rating_count, rating_12m_pct, transactions_12m, rating_all_time_pct, transactions_all_time, member_since, last_connection, languages[], location, feedback_received_count, feedback[]{score_pct, comment, from_role, to_role, rated_member, rated_at, rated_at_local}, shop_search_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"seller_id":"2564895"}},{"name":"categories","description":"The category tree, one level at a time: without category_id the top-level categories; with one, its name, path, number of listings and its sub-categories with their ids.","required_params":[],"optional_params":["category_id"],"params":[{"name":"category_id","type":"integer","required":false,"description":"The category to open. Leave empty for the top-level categories.","on_invalid":"reject","example":30001}],"returns":"category{category_id, name, path, listings (the source's own count, rounded by the source for big categories), parent{category_id, name}, ancestors[]} (null at the top) and rows[]: category_id, name (give category_id to `search` or back to `categories`).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":30001}}]},{"name":"deliveroo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Deliveroo API — live Deliveroo data for the UK, France, Ireland, Italy, Belgium, UAE and Kuwait: every restaurant, supermarket, Deliveroo HOP and shop delivering to a location with delivery fee, minimum order, delivery time, distance, rating and offers; a store's full menu or grocery catalogue with prices, sale prices, unit prices, availability and stock; and dish/product search with prices across the stores nearby. No login, no API key.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/deliveroo/v1","spec_available":true,"actions":[{"name":"stores","description":"Restaurants, grocery stores and shops that deliver to a location (latitude+longitude, postcode or geohash) in one Deliveroo market, with delivery fee and minimum order for that location, delivery-time estimate, distance, star rating, price band, current offer and store type. Filter by Deliveroo tab (restaurants / grocery / shopping), cuisine, dish, dietary, name, maximum delivery fee or time, minimum rating, offers; sort and page the complete set.","required_params":["country"],"optional_params":["latitude","longitude","postcode","geohash","type","cuisine","dish","dietary","name","max_delivery_fee","min_rating","max_delivery_minutes","offers_only","sort","page","limit","cursor"],"params":[{"name":"country","type":"enum","required":true,"description":"Deliveroo market. Live markets on 2026-10-18: uk, fr, ie, it, be, ae, kw (Qatar, Singapore and Hong Kong answer 'market closed'). Prices and fees are in the market's currency.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"ie","label":"Ireland"},{"value":"it","label":"Italy"},{"value":"be","label":"Belgium"},{"value":"ae","label":"United Arab Emirates"},{"value":"kw","label":"Kuwait"}],"example":"uk","aliases":["market"]},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Give latitude+longitude, OR postcode, OR geohash (one of the three is required; there is no default location).","on_invalid":"reject","example":51.5211,"minimum":-90,"maximum":90,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":-0.1435,"minimum":-180,"maximum":180,"aliases":["lon","lng"]},{"name":"postcode","type":"string","required":false,"description":"Delivery postcode, placed by Deliveroo itself in the chosen market (uk 'W1W 5QZ', fr '75004'). Alternative to latitude/longitude.","on_invalid":"reject","example":"W1W 5QZ","aliases":["postal_code","zip","zip_code"]},{"name":"geohash","type":"string","required":false,"description":"Delivery location as a geohash (the `geohash=` value in deliveroo.co.uk URLs). Alternative to latitude/longitude.","on_invalid":"reject","example":"gcpvhep7zzx1"},{"name":"type","type":"enum","required":false,"description":"Deliveroo's own tabs. London W1, same minute: all 3,984 · restaurants 3,440 · grocery 364 · shopping 269. A tab the location does not offer is refused.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Everything that delivers here"},{"value":"restaurants","label":"Restaurants"},{"value":"grocery","label":"Groceries (supermarkets, Deliveroo HOP, convenience)"},{"value":"shopping","label":"Shopping (retail, pharmacy, flowers, electronics)"}],"default":"all","example":"grocery","aliases":["collection","vertical"]},{"name":"cuisine","type":"string","required":false,"description":"Deliveroo cuisine key(s) for this location, comma-separated for several (the site's own multi-select), e.g. 'italian', 'japanese'. The valid keys and their counts come from the `filters` action; an unknown key is refused (the site would silently ignore it).","on_invalid":"reject","example":"italian"},{"name":"dish","type":"string","required":false,"description":"Deliveroo dish key(s), comma-separated, e.g. 'burgers', 'sushi', 'pizza' (London W1: burgers 584 of 3,998). Keys from the `filters` action.","on_invalid":"reject","example":"burgers"},{"name":"dietary","type":"string","required":false,"description":"Deliveroo dietary key(s), comma-separated: e.g. 'vegan', 'vegetarian', 'halal', 'gluten free' (London W1: vegan 39 of 3,999). Keys from `filters`.","on_invalid":"reject","example":"vegan"},{"name":"name","type":"string","required":false,"description":"Keep only stores whose name contains this text (case- and accent-insensitive), e.g. 'tesco', 'carrefour', 'mcdonald'.","on_invalid":"reject","example":"tesco","aliases":["store_name"]},{"name":"max_delivery_fee","type":"number","required":false,"description":"Keep stores whose delivery fee to this location is at most this amount, in the market's currency (1 = 1.00 GBP/EUR/AED, 1 KWD).","on_invalid":"reject","example":1,"minimum":0},{"name":"min_rating","type":"number","required":false,"description":"Keep stores rated at least this many stars (0-5, as the site shows them). Unrated stores are dropped when this is set.","on_invalid":"reject","example":4.5,"minimum":0,"maximum":5},{"name":"max_delivery_minutes","type":"integer","required":false,"description":"Keep stores whose current delivery estimate is at most this many minutes.","on_invalid":"reject","example":20,"minimum":1},{"name":"offers_only","type":"boolean","required":false,"description":"Keep only stores showing an offer (e.g. 'Buy 1, get 1 free', 'Spend £15, get 20% off'; London W1: 1,202 of 3,980).","on_invalid":"reject","default":false,"example":true},{"name":"sort","type":"enum","required":false,"description":"Order of the full result set before paging; ties broken by store id so pages never overlap. 'recommended' is Deliveroo's own order, which changes on every call (0 of the top 100 positions repeated a minute apart), so do not page it.","on_invalid":"reject","allowed_values":[{"value":"distance","label":"Nearest first (default)"},{"value":"rating","label":"Highest rated first"},{"value":"delivery_time","label":"Quickest delivery first"},{"value":"delivery_fee","label":"Lowest delivery fee first"},{"value":"name","label":"Name A-Z"},{"value":"recommended","label":"Deliveroo's recommended order (reshuffled on every call)"}],"default":"distance","example":"rating"},{"name":"page","type":"integer","required":false,"description":"Page of the sorted result set. For walking all pages prefer `cursor` (pagination.next_cursor), which never repeats a store.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-200, default 50).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":200,"aliases":["page_size","per_page"]},{"name":"cursor","type":"string","required":false,"description":"pagination.next_cursor of the previous page (same location, filters and sort). The next page starts right after the last store you received, so no store is repeated. Deliveroo shows one of several stores that share a kitchen on each request (about 16 of 3,965 in London W1), so with page numbers a store can repeat or be skipped at a page edge; the cursor avoids that.","on_invalid":"reject","example":"","aliases":["next_cursor"]}],"returns":"data.stores[]: store_id, drn_id, name, store_type (restaurant | shop), branch_type, url, delivery_fee {amount, currency, display}, minimum_order {amount, currency, display}, delivery_time_minutes, delivery_time_text, eta_range_minutes [from, to], distance_m, latitude, longitude, rating (stars), rating_percentage, rating_count_text ('500+'), price_category ('££'), offer, delivery_status, fulfillment_types[], newly_added, image. data.location {city, neighborhood, country_code, postcode, geohash, latitude, longitude} (where Deliveroo placed the request); data.total (stores after every filter); data.total_at_location (all stores delivering there); data.total_matched_by_deliveroo (after Deliveroo's own type/cuisine/dish/dietary filters); data.pagination {page, limit, total_pages, has_more, next_cursor} (with a cursor: {cursor, limit, has_more, remaining_after_page, next_cursor}); data.filters (what was applied); data.sort; data.notices[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"uk","postcode":"W1W 5QZ","type":"grocery","limit":20}},{"name":"store","description":"One Deliveroo store's menu or grocery catalogue: store details (address, coordinates, currency, whether it delivers to the given location, next delivery time), every category/aisle with its item count, and the items page by page with price, sale price, discount and offer text, unit price, size, availability, stock count where the store publishes it, calories, dietary tags and image. Filter to one category or to specific item ids.","required_params":["store_id"],"optional_params":["country","latitude","longitude","postcode","geohash","category_id","item_ids","page","limit"],"params":[{"name":"store_id","type":"string","required":true,"description":"Store/restaurant id (`store_id` of a stores or search row, e.g. 342758), its slug ('waitrose-marylebone'), or its Deliveroo menu URL (https://deliveroo.co.uk/menu/london/marylebone/waitrose-marylebone).","on_invalid":"reject","example":"342758","aliases":["restaurant_id","id","store","url"]},{"name":"country","type":"enum","required":false,"description":"Deliveroo market of the store (uk, fr, ie, it, be, ae, kw). Required unless store_id is a Deliveroo URL, whose host names the market.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"ie","label":"Ireland"},{"value":"it","label":"Italy"},{"value":"be","label":"Belgium"},{"value":"ae","label":"United Arab Emirates"},{"value":"kw","label":"Kuwait"}],"example":"uk","aliases":["market"]},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Give latitude+longitude, OR postcode, OR geohash (one of the three is required; there is no default location).","on_invalid":"reject","example":51.5211,"minimum":-90,"maximum":90,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":-0.1435,"minimum":-180,"maximum":180,"aliases":["lon","lng"]},{"name":"postcode","type":"string","required":false,"description":"Delivery postcode, placed by Deliveroo itself in the chosen market (uk 'W1W 5QZ', fr '75004'). Alternative to latitude/longitude.","on_invalid":"reject","example":"W1W 5QZ","aliases":["postal_code","zip","zip_code"]},{"name":"geohash","type":"string","required":false,"description":"Delivery location as a geohash (the `geohash=` value in deliveroo.co.uk URLs). Alternative to latitude/longitude.","on_invalid":"reject","example":"gcpvhep7zzx1"},{"name":"category_id","type":"string","required":false,"description":"Only the items of this menu/aisle category (`category_id` from the `categories` list of the same store).","on_invalid":"reject","example":"991065819","aliases":["category"]},{"name":"item_ids","type":"string","required":false,"description":"Only these item ids (comma-separated, up to 250), e.g. the `item_id`s of a `search` result; one request on the source's own by-id option.","on_invalid":"reject","example":"2767117091,2831315838","aliases":["item_id"]},{"name":"page","type":"integer","required":false,"description":"Page of the store's item list, in the store's own category order.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Items per page (1-250, default 100).","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":250,"aliases":["page_size","per_page"]}],"returns":"data.store {store_id, drn_id, menu_id, name, slug, store_type, branch_type, brand_drn_id, address, postcode, neighborhood, city, country_code, latitude, longitude, currency, fulfillment_type, menu_disabled, next_available_delivery_time, url, delivers_to_location}; data.categories[] {category_id, name, description, item_count}; data.items[] {item_id, drn_id, name, description, product_information, category_id, category_name, price {amount, currency, display}, sale_price, member_price {amount, currency, program}, offer_text, available, stock_count, size_text, unit_price_text, calories_text, popular, alcohol, dietary_tags[], max_quantity, image}; data.total_items; data.pagination {page, limit, total_pages, has_more}; data.location (when one was given).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"342758","country":"uk","limit":50}},{"name":"search","description":"Search dishes and grocery products by name across the stores delivering to a location, the way Deliveroo's search box does: each match with its price, sale price, offer, unit price, sold-out flag and the store selling it (id, name, type, link). Up to ~50 stores with up to 10 matching items each per query.","required_params":["country","query"],"optional_params":["latitude","longitude","postcode","geohash","type"],"params":[{"name":"country","type":"enum","required":true,"description":"Deliveroo market. Live markets on 2026-10-18: uk, fr, ie, it, be, ae, kw (Qatar, Singapore and Hong Kong answer 'market closed'). Prices and fees are in the market's currency.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"ie","label":"Ireland"},{"value":"it","label":"Italy"},{"value":"be","label":"Belgium"},{"value":"ae","label":"United Arab Emirates"},{"value":"kw","label":"Kuwait"}],"example":"uk","aliases":["market"]},{"name":"query","type":"string","required":true,"description":"Dish or product to look for across the stores delivering to the location, as typed into Deliveroo's search box ('milk', 'pizza', 'lait', 'paracetamol').","on_invalid":"reject","example":"milk","aliases":["q","keyword","search"]},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Give latitude+longitude, OR postcode, OR geohash (one of the three is required; there is no default location).","on_invalid":"reject","example":51.5211,"minimum":-90,"maximum":90,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":-0.1435,"minimum":-180,"maximum":180,"aliases":["lon","lng"]},{"name":"postcode","type":"string","required":false,"description":"Delivery postcode, placed by Deliveroo itself in the chosen market (uk 'W1W 5QZ', fr '75004'). Alternative to latitude/longitude.","on_invalid":"reject","example":"W1W 5QZ","aliases":["postal_code","zip","zip_code"]},{"name":"geohash","type":"string","required":false,"description":"Delivery location as a geohash (the `geohash=` value in deliveroo.co.uk URLs). Alternative to latitude/longitude.","on_invalid":"reject","example":"gcpvhep7zzx1"},{"name":"type","type":"enum","required":false,"description":"Search only one Deliveroo tab ('pizza' + grocery: 263 of 264 items from shops).","on_invalid":"reject","allowed_values":[{"value":"all","label":"Everything that delivers here"},{"value":"restaurants","label":"Restaurants"},{"value":"grocery","label":"Groceries (supermarkets, Deliveroo HOP, convenience)"},{"value":"shopping","label":"Shopping (retail, pharmacy, flowers, electronics)"}],"default":"all","example":"grocery","aliases":["collection","vertical"]}],"returns":"data.items[]: item_id, drn_id, name, price {amount, currency, display}, sale_price, member_price, sold_out, availability_text, offer_text, unit_price_text, sponsored, image, url, store_id, store_name, store_type, store_url, rank. data.stores[] {store_id, store_name, store_type, store_url, items}; data.total_items; data.location; data.query.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"uk","query":"milk","postcode":"W1W 5QZ"}},{"name":"filters","description":"The filters Deliveroo offers at a location with live store counts: tabs (restaurants, grocery, shopping), cuisines, dishes, dietary options, delivery-time and delivery-fee bands, rating bands. Use the keys with `stores`.","required_params":["country"],"optional_params":["latitude","longitude","postcode","geohash"],"params":[{"name":"country","type":"enum","required":true,"description":"Deliveroo market. Live markets on 2026-10-18: uk, fr, ie, it, be, ae, kw (Qatar, Singapore and Hong Kong answer 'market closed'). Prices and fees are in the market's currency.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"ie","label":"Ireland"},{"value":"it","label":"Italy"},{"value":"be","label":"Belgium"},{"value":"ae","label":"United Arab Emirates"},{"value":"kw","label":"Kuwait"}],"example":"uk","aliases":["market"]},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Give latitude+longitude, OR postcode, OR geohash (one of the three is required; there is no default location).","on_invalid":"reject","example":51.5211,"minimum":-90,"maximum":90,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":-0.1435,"minimum":-180,"maximum":180,"aliases":["lon","lng"]},{"name":"postcode","type":"string","required":false,"description":"Delivery postcode, placed by Deliveroo itself in the chosen market (uk 'W1W 5QZ', fr '75004'). Alternative to latitude/longitude.","on_invalid":"reject","example":"W1W 5QZ","aliases":["postal_code","zip","zip_code"]},{"name":"geohash","type":"string","required":false,"description":"Delivery location as a geohash (the `geohash=` value in deliveroo.co.uk URLs). Alternative to latitude/longitude.","on_invalid":"reject","example":"gcpvhep7zzx1"}],"returns":"data.types[] {key, label}; data.cuisine[] / data.dish[] / data.dietary[] / data.delivery_time[] / data.delivery_fee[] / data.star_rating[] {key, label, count}; data.total_at_location; data.location.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"fr","postcode":"75004"}}]},{"name":"depop","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Depop API scraper — search fashion resale listings in nine Depop markets with item price, discount, condition, size, shipping and the buyer's fee and import tax, read a full listing with the seller's rating and items sold, a seller's for-sale and sold listings, reviews and profile, similar items and search suggestions. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/depop/v1","spec_available":true,"actions":[{"name":"search","description":"Search Depop listings by keyword, or browse a brand, department or category, in one of nine markets (US, UK, Australia, Canada, New Zealand, Germany, France, Italy, Ireland). Every row: listing id, slug and url, description, brand, category and subcategory, gender, condition, colours, sizes with quantities, the item price with the struck original price when reduced, shipping price, the price a buyer in that country is shown (buyer fee, import tax, national or international shipping), likes, the seller's country and whether the listing is boosted. Filter by brand, department, category, subcategory, condition, colour, price range and on-sale; sort by relevance or price; page with `next_cursor`.","required_params":[],"optional_params":["query","brand","department","category","subcategory","condition","colour","price_min","price_max","on_sale","sort","limit","cursor","country","region","include_sponsored","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keywords. Optional when a brand, department or category is given (browse).","on_invalid":"reject","example":"carhartt jacket","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Depop market. Search returns that market's listings; every price is also priced for a buyer in this country (`buyer_view`: buyer fee, import tax, national or international shipping).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"ie","label":"Ireland (EUR)"}],"default":"us","example":"gb"},{"name":"region","type":"string","required":false,"description":"country=us only: the buyer's US state code (CA, NY, TX …). Depop's US buyer fee depends on the buyer's state — measured: CA and OR pay it, NY and TX do not. Without a state, US prices are shown with no state fee.","on_invalid":"reject","example":"CA","aliases":["state"]},{"name":"brand","type":"string","required":false,"description":"Brand name(s) as Depop lists them, comma-separated (up to 10): Nike, Levi's, The North Face — or Depop brand ids (`brand_id` on every row). An unknown brand is rejected, not ignored.","on_invalid":"reject","example":"Nike"},{"name":"department","type":"enum","required":false,"description":"Depop department.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Menswear"},{"value":"women","label":"Womenswear"},{"value":"kids","label":"Kidswear"},{"value":"everything_else","label":"Everything else (needs a category)"}],"example":"women"},{"name":"category","type":"string","required":false,"description":"Depop category id: tops, bottoms, dresses, coats-jackets, footwear, accessories, suits, jumpsuit-and-playsuit, nightwear, underwear, swim-beach-wear; everything_else: home, art, beauty, music, books-and-magazine, film, toys, sports-equipment-accesories … Rejected with the valid list when unknown or outside the department.","on_invalid":"reject","example":"coats-jackets"},{"name":"subcategory","type":"string","required":false,"description":"Subcategory id(s) inside the category, comma-separated: footwear → trainers, boots, loafers; tops → tshirts, hoodies, jumpers; bottoms → jeans, shorts, skirts. Needs `category`.","on_invalid":"reject","example":"jackets"},{"name":"condition","type":"string","required":false,"description":"Condition(s), comma-separated: brand_new, used_like_new, used_excellent, used_good, used_fair.","on_invalid":"reject","example":"used_like_new"},{"name":"colour","type":"string","required":false,"description":"Colour(s), comma-separated: black, grey, white, brown, tan, cream, yellow, red, burgundy, orange, pink, purple, blue, navy, green, khaki, multi, silver, gold.","on_invalid":"reject","example":"black","aliases":["color"]},{"name":"price_min","type":"number","required":false,"description":"Lowest item price, in the country's currency.","on_invalid":"reject","example":20,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest item price, in the country's currency.","on_invalid":"reject","example":120,"minimum":0},{"name":"on_sale","type":"boolean","required":false,"description":"Only listings the seller has reduced (each row then carries original_price).","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Order of results. Unknown values are rejected (Depop itself would silently ignore them).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Depop's default ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"limit","type":"integer","required":false,"description":"Listings per call, 1-100 (Depop's own page is 24).","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"cursor","type":"string","required":false,"description":"Continue a previous call: pass back its `next_cursor`. `next_cursor: null` is the end.","on_invalid":"reject","aliases":["next_cursor","page_token"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Boosted (promoted) listings are left out by default and counted in `sponsored_dropped`; true returns them, each with `is_boosted: true`.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, slug, url, description, brand, brand_id, category, group, product_type, gender, is_kids, condition, condition_label, colours[], sizes[]{size, quantity, status}, quantity, status (on_sale|sold|reserved…), is_sold, price (number — the seller's item price now), currency (the listing's), original_price (the struck price when Depop marks the listing reduced, else null), discount_percent, is_discounted, shipping_price, buyer_view{country, us_state (country=us: the `region` used, null = no state fee), headline_price (what Depop shows a buyer in `country`), headline_currency, headline_includes{buyer_fee, tax, shipping}, buyer_fee, tax, tax_type, shipping_price, shipping_boundary (national|international)}, shipping_provider, shipping_payer, like_count, image, image_count, seller_id (seller rows and similar rows; null in search), seller_country, location, is_boosted, listed_at (seller rows and similar rows), updated_at}, count, next_cursor, has_more, total_results, sponsored_dropped, filters{}, query, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"product/detail","description":"One Depop listing in full, by slug, URL or id: Depop's product title, the description, brand, category path, gender, condition, colours, sizes (including sold-out sizes) with quantities, every photo, the item price with the original price when reduced, national and international shipping prices and whether shipping is free, what a buyer in `country` is shown (buyer fee, import tax, shipping), likes, sale status (sold listings still resolve), and the seller: username, shop url, verified flag, country, star rating and review count, items sold, last seen and average days to ship.","required_params":["listing"],"optional_params":["country","region","max_rotations"],"params":[{"name":"listing","type":"string","required":true,"description":"A Depop listing: its slug (the part after /products/ in the URL), the full listing URL, or the numeric listing id. Every search row returns `slug` and `listing_id`.","on_invalid":"reject","example":"harrietsa2ton-vintage-billabong-shorts-unisex-8888","aliases":["slug","listing_id","id","product_id","url"]},{"name":"country","type":"enum","required":false,"description":"Depop market. Search returns that market's listings; every price is also priced for a buyer in this country (`buyer_view`: buyer fee, import tax, national or international shipping).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"ie","label":"Ireland (EUR)"}],"default":"us","example":"gb"},{"name":"region","type":"string","required":false,"description":"country=us only: the buyer's US state code (CA, NY, TX …). Depop's US buyer fee depends on the buyer's state — measured: CA and OR pay it, NY and TX do not. Without a state, US prices are shown with no state fee.","on_invalid":"reject","example":"CA","aliases":["state"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, slug, url, description, brand, brand_id, category, group, product_type, gender, is_kids, condition, condition_label, colours[], sizes[]{size, quantity, status}, quantity, status (on_sale|sold|reserved…), is_sold, price (number — the seller's item price now), currency (the listing's), original_price (the struck price when Depop marks the listing reduced, else null), discount_percent, is_discounted, shipping_price, buyer_view{country, us_state (country=us: the `region` used, null = no state fee), headline_price (what Depop shows a buyer in `country`), headline_currency, headline_includes{buyer_fee, tax, shipping}, buyer_fee, tax, tax_type, shipping_price, shipping_boundary (national|international)}, shipping_provider, shipping_payer, like_count, image, image_count, seller_id (seller rows and similar rows; null in search), seller_country, location, is_boosted, listed_at (seller rows and similar rows), updated_at, title, group_name, colour_names[], images[], national_shipping_price, international_shipping_price, has_free_shipping, shipping_confidence, seller{id, username, first_name, last_name, initials, url, verified, picture, country, rating, rating_scale, review_count, items_sold, last_seen, average_shipping_days}, country}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing":"harrietsa2ton-vintage-billabong-shorts-unisex-8888"}},{"name":"product/similar","description":"The listings Depop shows as similar to one listing (up to 48), with the same row fields as `search` plus seller id and listing date. Works for sold listings too — similar items still for sale.","required_params":["listing"],"optional_params":["country","region","limit","include_sponsored","max_rotations"],"params":[{"name":"listing","type":"string","required":true,"description":"A Depop listing: its slug (the part after /products/ in the URL), the full listing URL, or the numeric listing id. Every search row returns `slug` and `listing_id`.","on_invalid":"reject","example":"harrietsa2ton-vintage-billabong-shorts-unisex-8888","aliases":["slug","listing_id","id","product_id","url"]},{"name":"country","type":"enum","required":false,"description":"Depop market. Search returns that market's listings; every price is also priced for a buyer in this country (`buyer_view`: buyer fee, import tax, national or international shipping).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"ie","label":"Ireland (EUR)"}],"default":"us","example":"gb"},{"name":"region","type":"string","required":false,"description":"country=us only: the buyer's US state code (CA, NY, TX …). Depop's US buyer fee depends on the buyer's state — measured: CA and OR pay it, NY and TX do not. Without a state, US prices are shown with no state fee.","on_invalid":"reject","example":"CA","aliases":["state"]},{"name":"limit","type":"integer","required":false,"description":"Maximum similar listings, 1-48.","on_invalid":"reject","default":24,"minimum":1,"maximum":48},{"name":"include_sponsored","type":"boolean","required":false,"description":"Boosted (promoted) listings are left out by default and counted in `sponsored_dropped`; true returns them, each with `is_boosted: true`.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing_id, results[]{listing_id, slug, url, description, brand, brand_id, category, group, product_type, gender, is_kids, condition, condition_label, colours[], sizes[]{size, quantity, status}, quantity, status (on_sale|sold|reserved…), is_sold, price (number — the seller's item price now), currency (the listing's), original_price (the struck price when Depop marks the listing reduced, else null), discount_percent, is_discounted, shipping_price, buyer_view{country, us_state (country=us: the `region` used, null = no state fee), headline_price (what Depop shows a buyer in `country`), headline_currency, headline_includes{buyer_fee, tax, shipping}, buyer_fee, tax, tax_type, shipping_price, shipping_boundary (national|international)}, shipping_provider, shipping_payer, like_count, image, image_count, seller_id (seller rows and similar rows; null in search), seller_country, location, is_boosted, listed_at (seller rows and similar rows), updated_at}, count, sponsored_dropped, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing":"harrietsa2ton-vintage-billabong-shorts-unisex-8888"}},{"name":"seller/listings","description":"One seller's shop: their for-sale listings (in their own order, newest, or by price) or their SOLD listings, newest sale first — each with the same row fields as `search` plus the listing date. Listings the seller has boosted are included and flagged `is_boosted`. Paged with `next_cursor`.","required_params":["seller"],"optional_params":["availability","sort","limit","cursor","country","region","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Seller username (depop.com/<username>), the shop URL, or the numeric seller id (`seller.id` / `seller_id`).","on_invalid":"reject","example":"mosse","aliases":["username","seller_id","shop","url"]},{"name":"availability","type":"enum","required":false,"description":"The seller's listings for sale, or the ones they have sold (newest sale first). Depop publishes no sale date; `updated_at` is when the listing last changed.","on_invalid":"reject","allowed_values":[{"value":"available","label":"For sale now"},{"value":"sold","label":"Sold listings"}],"default":"available"},{"name":"sort","type":"enum","required":false,"description":"Order of a seller's for-sale listings. Sold listings come newest first and take no sort.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The seller's own shop order"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"default"},{"name":"limit","type":"integer","required":false,"description":"Listings per call, 1-100.","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"cursor","type":"string","required":false,"description":"Continue a previous call: pass back its `next_cursor`. `next_cursor: null` is the end.","on_invalid":"reject","aliases":["next_cursor","page_token"]},{"name":"country","type":"enum","required":false,"description":"Depop market. Search returns that market's listings; every price is also priced for a buyer in this country (`buyer_view`: buyer fee, import tax, national or international shipping).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"ie","label":"Ireland (EUR)"}],"default":"us","example":"gb"},{"name":"region","type":"string","required":false,"description":"country=us only: the buyer's US state code (CA, NY, TX …). Depop's US buyer fee depends on the buyer's state — measured: CA and OR pay it, NY and TX do not. Without a state, US prices are shown with no state fee.","on_invalid":"reject","example":"CA","aliases":["state"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, slug, url, description, brand, brand_id, category, group, product_type, gender, is_kids, condition, condition_label, colours[], sizes[]{size, quantity, status}, quantity, status (on_sale|sold|reserved…), is_sold, price (number — the seller's item price now), currency (the listing's), original_price (the struck price when Depop marks the listing reduced, else null), discount_percent, is_discounted, shipping_price, buyer_view{country, us_state (country=us: the `region` used, null = no state fee), headline_price (what Depop shows a buyer in `country`), headline_currency, headline_includes{buyer_fee, tax, shipping}, buyer_fee, tax, tax_type, shipping_price, shipping_boundary (national|international)}, shipping_provider, shipping_payer, like_count, image, image_count, seller_id (seller rows and similar rows; null in search), seller_country, location, is_boosted, listed_at (seller rows and similar rows), updated_at}, count, next_cursor, has_more, seller{id, username}, availability, sort, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller":"mosse"}},{"name":"seller/profile","description":"A seller's public Depop shop profile by username, id or shop URL: username, verified flag, bio, website, picture, followers and following, star rating with review count (split into reviews as seller and as buyer), items sold and when they were last seen.","required_params":["seller"],"optional_params":["max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Seller username (depop.com/<username>), the shop URL, or the numeric seller id (`seller.id` / `seller_id`).","on_invalid":"reject","example":"mosse","aliases":["username","seller_id","shop","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"seller{id, username, first_name, last_name, initials, url, verified, bio, website, picture, followers, following, rating, rating_scale, review_count, reviews_as_seller, reviews_as_buyer, items_sold, last_seen}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller":"mosse"}},{"name":"seller/reviews","description":"The public reviews on a seller's shop: star rating, text, date, the listing it was for, and the reviewer's username. role=seller for reviews buyers left for this seller (default), role=buyer for reviews sellers left for them as a buyer. Paged with `next_cursor`.","required_params":["seller"],"optional_params":["role","limit","cursor","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Seller username (depop.com/<username>), the shop URL, or the numeric seller id (`seller.id` / `seller_id`).","on_invalid":"reject","example":"mosse","aliases":["username","seller_id","shop","url"]},{"name":"role","type":"enum","required":false,"description":"Which reviews to return.","on_invalid":"reject","allowed_values":[{"value":"seller","label":"Reviews buyers left for this seller"},{"value":"buyer","label":"Reviews sellers left for this person as a buyer"}],"default":"seller"},{"name":"limit","type":"integer","required":false,"description":"Reviews per call, 1-50.","on_invalid":"reject","default":24,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"Continue a previous call: pass back its `next_cursor`. `next_cursor: null` is the end.","on_invalid":"reject","aliases":["next_cursor","page_token"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"reviews[]{rating, rating_scale, text, date, transaction_id, listing_id, listing_image, reviewer{id, username, verified}}, count, next_cursor, has_more, seller{id, username}, role","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller":"mosse"}},{"name":"suggest","description":"Depop's search suggestions for a partial query — each with the category and gender it points at — or, with type=sellers, matching seller usernames.","required_params":["query"],"optional_params":["type","country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a search, or of a username when type=sellers.","on_invalid":"reject","example":"vint","aliases":["q","keyword"]},{"name":"type","type":"enum","required":false,"description":"What to suggest.","on_invalid":"reject","allowed_values":[{"value":"keywords","label":"Search suggestions with the category they point at"},{"value":"sellers","label":"Seller usernames"}],"default":"keywords"},{"name":"country","type":"enum","required":false,"description":"Depop market. Search returns that market's listings; every price is also priced for a buyer in this country (`buyer_view`: buyer fee, import tax, national or international shipping).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"ie","label":"Ireland (EUR)"}],"default":"us","example":"gb"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{text, category, gender, label} | sellers[]{id, username, url, picture}, count, query, type, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}}]},{"name":"dev-utils","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Developer Utilities API — 20+ deterministic dev and AI-agent tools: hash, UUID, encode, JWT decode, cron, regex, format, data convert, color, mock data, diff, QR and more","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dev-utils/v1","spec_available":true,"actions":[{"name":"hash","description":"Hash/checksum text or binary (base64/hex) input: md5…sha3·blake2·crc32·adler32, optional HMAC keying → hex + base64 digests.","required_params":["input"],"optional_params":["algo","hmac_key","input_encoding"],"params":[{"name":"input","type":"string","required":true,"description":"The data to hash. Plain text by default; set input_encoding=base64|hex to hash binary data.","on_invalid":"reject","example":"hello world","aliases":["text","value","data"]},{"name":"algo","type":"enum","required":false,"description":"Hash/checksum algorithm.","on_invalid":"reject","allowed_values":[{"value":"md5","label":"md5"},{"value":"sha1","label":"sha1"},{"value":"sha224","label":"sha224"},{"value":"sha256","label":"sha256"},{"value":"sha384","label":"sha384"},{"value":"sha512","label":"sha512"},{"value":"sha3-256","label":"sha3-256"},{"value":"sha3-512","label":"sha3-512"},{"value":"blake2b","label":"blake2b"},{"value":"blake2s","label":"blake2s"},{"value":"crc32","label":"crc32"},{"value":"adler32","label":"adler32"}],"default":"sha256","example":"sha256","aliases":["algorithm"]},{"name":"hmac_key","type":"string","required":false,"description":"Optional HMAC key — returns the keyed HMAC digest instead of the plain hash (not valid for crc32/adler32).","on_invalid":"ignore","example":"my-secret-key","aliases":["key","secret"]},{"name":"input_encoding","type":"enum","required":false,"description":"How to interpret `input`: utf-8 text, or base64/hex-encoded binary.","on_invalid":"reject","allowed_values":[{"value":"text","label":"text"},{"value":"base64","label":"base64"},{"value":"hex","label":"hex"}],"default":"text","example":"text"}],"returns":"algo, hex, base64, base64url, length_bits, hmac (crc32/adler32: hex, decimal)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"hello world","algo":"sha256"}},{"name":"uuid","description":"Generate ids: uuid v4/v7/v1(MAC-safe)/v3/v5, ULID, nanoid — up to 100.","required_params":[],"optional_params":["version","count","namespace","name","size"],"params":[{"name":"version","type":"enum","required":false,"description":"Id kind. v4=random · v7=time-ordered (RFC 9562) · v1=timestamp (random multicast node — host MAC never leaks) · v3/v5=deterministic namespace+name (md5/sha1) · ulid=Crockford-base32 sortable · nanoid=21-char URL-safe.","on_invalid":"reject","allowed_values":[{"value":"v4","label":"v4"},{"value":"v7","label":"v7"},{"value":"v1","label":"v1"},{"value":"v3","label":"v3"},{"value":"v5","label":"v5"},{"value":"ulid","label":"ulid"},{"value":"nanoid","label":"nanoid"}],"default":"v4","example":"v4","aliases":["type","kind"]},{"name":"count","type":"integer","required":false,"description":"How many ids to generate (v3/v5 always 1 — deterministic).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"namespace","type":"string","required":false,"description":"v3/v5 namespace: dns|url|oid|x500 or a custom UUID.","on_invalid":"ignore","example":"dns"},{"name":"name","type":"string","required":false,"description":"v3/v5 name to hash into the namespace.","on_invalid":"ignore","example":"example.com"},{"name":"size","type":"integer","required":false,"description":"nanoid length (nanoid only).","on_invalid":"reject","default":21,"example":21,"minimum":8,"maximum":64}],"returns":"ids[], version, count, time_ordered (v7/ulid/v1), deterministic (v3/v5)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"version":"v4","count":3}},{"name":"encode","description":"Encode/decode: base64(+url-safe), hex, URL (path/component/form), HTML entities, unicode-escape, json-string.","required_params":["input","op"],"optional_params":["direction"],"params":[{"name":"input","type":"string","required":true,"description":"The string to encode or decode.","on_invalid":"reject","example":"hello world","aliases":["text","value","data"]},{"name":"op","type":"enum","required":true,"description":"Codec. url=path-safe quote · url-component=encode everything (JS encodeURIComponent) · url-form=+ for spaces · html=entities · json-string=JSON string-literal escaping.","on_invalid":"reject","allowed_values":[{"value":"base64","label":"base64"},{"value":"base64url","label":"base64url"},{"value":"hex","label":"hex"},{"value":"url","label":"url"},{"value":"url-component","label":"url-component"},{"value":"url-form","label":"url-form"},{"value":"html","label":"html"},{"value":"unicode-escape","label":"unicode-escape"},{"value":"json-string","label":"json-string"}],"example":"base64","aliases":["operation","codec"]},{"name":"direction","type":"enum","required":false,"description":"encode (default) or decode.","on_invalid":"reject","allowed_values":[{"value":"encode","label":"encode"},{"value":"decode","label":"decode"}],"default":"encode","example":"encode","aliases":["mode"]}],"returns":"output, op, direction, input_length, output_length","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"Merhaba Dünya! 👋","op":"base64"}},{"name":"jwt_decode","description":"Decode a JWT WITHOUT needing the key (header+payload+claims analysis); optionally verify the signature with a provided key. Decode-only — this API never signs tokens.","required_params":["token"],"optional_params":["verify_key"],"params":[{"name":"token","type":"string","required":true,"description":"The JWT to decode.","on_invalid":"reject","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c","aliases":["jwt","input"]},{"name":"verify_key","type":"string","required":false,"description":"Optional verification key: the HMAC secret (HS*) or PEM public key (RS*/ES*/PS*). Algorithm is taken from the token header (whitelisted; alg=none always fails).","on_invalid":"ignore","example":"your-256-bit-secret","aliases":["key","secret","public_key"]}],"returns":"structure_valid, header{alg,typ}, payload, claims{exp/iat/nbf iso8601, expired, expires_in_seconds}, signature_checked, signature_valid, reason","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c","verify_key":"your-256-bit-secret"}},{"name":"password","description":"Generate cryptographically-secure passwords (charset controls, ambiguity filter) + entropy strength score; or score a provided password with `check`.","required_params":[],"optional_params":["length","count","lowercase","uppercase","digits","symbols","exclude_ambiguous","check"],"params":[{"name":"length","type":"integer","required":false,"description":"Password length.","on_invalid":"reject","default":16,"example":16,"minimum":4,"maximum":128},{"name":"count","type":"integer","required":false,"description":"How many passwords.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"lowercase","type":"boolean","required":false,"description":"Include a-z.","on_invalid":"ignore","default":true,"example":true},{"name":"uppercase","type":"boolean","required":false,"description":"Include A-Z.","on_invalid":"ignore","default":true,"example":true},{"name":"digits","type":"boolean","required":false,"description":"Include 0-9.","on_invalid":"ignore","default":true,"example":true},{"name":"symbols","type":"boolean","required":false,"description":"Include symbols (!@#$%^&*()-_=+[]{};:,.<>?/~).","on_invalid":"ignore","default":true,"example":true},{"name":"exclude_ambiguous","type":"boolean","required":false,"description":"Drop look-alikes (Il1O0o`'\"|).","on_invalid":"ignore","default":false,"example":false},{"name":"check","type":"string","required":false,"description":"Score THIS password instead of generating (entropy heuristic; the password is not stored or logged).","on_invalid":"ignore","example":"hunter2","aliases":["password"]}],"returns":"passwords[{password, strength{entropy_bits, score, verdict}}] — or with `check`: strength{} for the provided password","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"length":24,"count":2}},{"name":"cron","description":"Explain a cron expression in plain language (15 locales) + compute the next N run times in any IANA timezone (DST-correct).","required_params":["expression"],"optional_params":["runs","tz","locale","from_time"],"params":[{"name":"expression","type":"string","required":true,"description":"5-field cron (min hour dom month dow), @aliases (@daily, @hourly…), or 6-field with seconds first.","on_invalid":"reject","example":"*/15 9-17 * * 1-5","aliases":["expr","cron","input"]},{"name":"runs","type":"integer","required":false,"description":"How many upcoming run times to return.","on_invalid":"reject","default":5,"example":5,"minimum":1,"maximum":50},{"name":"tz","type":"string","required":false,"description":"IANA timezone for the run times (DST handled).","on_invalid":"ignore","default":"UTC","example":"Europe/Istanbul","aliases":["timezone"]},{"name":"locale","type":"enum","required":false,"description":"Language of the human explanation.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"it","label":"it"},{"value":"nl","label":"nl"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"},{"value":"ro","label":"ro"},{"value":"ru","label":"ru"},{"value":"tr","label":"tr"},{"value":"uk","label":"uk"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"zh","label":"zh"}],"default":"en","example":"en"},{"name":"from_time","type":"string","required":false,"description":"Compute runs after this ISO-8601 instant (default now). Pin it for reproducible output.","on_invalid":"ignore","example":"2026-06-10T12:00:00+03:00","aliases":["start","after"]}],"returns":"valid, description (localized), next_runs[] (ISO-8601 with offset), tz, fields{minute,hour,day_of_month,month,day_of_week[,second]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"expression":"*/15 9-17 * * 1-5","runs":3,"tz":"UTC","from_time":"2026-06-10T12:00:00+00:00"}},{"name":"slugify","description":"URL-safe slug from any-script text (CJK/Cyrillic/Arabic → ASCII via anyascii transliteration).","required_params":["input"],"optional_params":["separator","lowercase","max_length"],"params":[{"name":"input","type":"string","required":true,"description":"Text to slugify.","on_invalid":"reject","example":"Çok Güzel Bir Başlık — 2026!","aliases":["text","value","data"]},{"name":"separator","type":"string","required":false,"description":"Word separator (default '-').","on_invalid":"ignore","default":"-","example":"-"},{"name":"lowercase","type":"boolean","required":false,"description":"Lowercase the slug (default true).","on_invalid":"ignore","default":true,"example":true},{"name":"max_length","type":"integer","required":false,"description":"Truncate at a word boundary (0 = no limit).","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":500}],"returns":"slug, original, transliterated, length","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"Çok Güzel Bir Başlık — 2026!"}},{"name":"regex_test","description":"Test a regex against text: matches + groups + named groups, optional replace. User patterns run with a hard 1s timeout (ReDoS-guarded) + size caps.","required_params":["pattern","input"],"optional_params":["flags","replacement","max_matches"],"params":[{"name":"pattern","type":"string","required":true,"description":"The regular expression (≤2000 chars; Python `regex` syntax — PCRE-compatible incl. \\p{...}).","on_invalid":"reject","example":"(\\w+)@(\\w+\\.\\w+)","aliases":["regex","re"]},{"name":"input","type":"string","required":true,"description":"The subject text to scan.","on_invalid":"reject","example":"mail me at jane@acme.com","aliases":["text","value","data"]},{"name":"flags","type":"string","required":false,"description":"Flag letters, any of: i (ignorecase), m (multiline), s (dotall), x (verbose). E.g. 'im'.","on_invalid":"ignore","example":"i"},{"name":"replacement","type":"string","required":false,"description":"Optional replacement template — when set, `replaced` holds the substituted text (backrefs \\1, \\g<name>).","on_invalid":"ignore","example":"<\\1>","aliases":["replace"]},{"name":"max_matches","type":"integer","required":false,"description":"Cap on returned matches.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":500}],"returns":"pattern_valid, match_count, matches[{match,start,end,groups[],named{}}], replaced (when replacement given), timed_out, truncated","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"pattern":"(\\w+)@([\\w.]+)","input":"mail jane@acme.com now"}},{"name":"format","description":"Pretty-print, minify or validate JSON / YAML / XML / SQL (string-level; file/data CONVERSION lives in the file-convert API).","required_params":["input","type"],"optional_params":["op","indent","sort_keys","keyword_case"],"params":[{"name":"input","type":"string","required":true,"description":"The document text.","on_invalid":"reject","example":"{\"b\":1,\"a\":[1,2]}","aliases":["text","value","data"]},{"name":"type","type":"enum","required":true,"description":"Document type.","on_invalid":"reject","allowed_values":[{"value":"json","label":"json"},{"value":"yaml","label":"yaml"},{"value":"xml","label":"xml"},{"value":"sql","label":"sql"}],"example":"json","aliases":["format","lang"]},{"name":"op","type":"enum","required":false,"description":"pretty | minify | validate (sql: pretty/minify only — sqlparse is non-validating).","on_invalid":"reject","allowed_values":[{"value":"pretty","label":"pretty"},{"value":"minify","label":"minify"},{"value":"validate","label":"validate"}],"default":"pretty","example":"pretty"},{"name":"indent","type":"integer","required":false,"description":"Indent width for pretty (json/yaml/xml).","on_invalid":"reject","default":2,"example":2,"minimum":1,"maximum":8},{"name":"sort_keys","type":"boolean","required":false,"description":"Sort object keys (json/yaml).","on_invalid":"ignore","default":false,"example":false},{"name":"keyword_case","type":"enum","required":false,"description":"SQL keyword casing (sql only).","on_invalid":"reject","allowed_values":[{"value":"upper","label":"upper"},{"value":"lower","label":"lower"},{"value":"capitalize","label":"capitalize"}],"default":"upper","example":"upper"}],"returns":"valid, output (pretty/minify), error{message,line,column} on invalid, statement_count (sql)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"{\"b\":1,\"a\":[1,2]}","type":"json","op":"pretty","sort_keys":true}},{"name":"convert","description":"Convert structured data between JSON / YAML / CSV / XML at the string level (paste-in, ≤512KB). CSV↔JSON is tabular (array of flat objects). For file/Excel/multi-MB conversion use the file-convert API.","required_params":["input","from","to"],"optional_params":["indent","sort_keys"],"params":[{"name":"input","type":"string","required":true,"description":"The source document text.","on_invalid":"reject","example":"[{\"id\":1,\"name\":\"a\"},{\"id\":2,\"name\":\"b\"}]","aliases":["text","value","data"]},{"name":"from","type":"enum","required":true,"description":"Source format.","on_invalid":"reject","allowed_values":[{"value":"json","label":"json"},{"value":"yaml","label":"yaml"},{"value":"csv","label":"csv"},{"value":"xml","label":"xml"}],"example":"json","aliases":["from_format","source"]},{"name":"to","type":"enum","required":true,"description":"Target format.","on_invalid":"reject","allowed_values":[{"value":"json","label":"json"},{"value":"yaml","label":"yaml"},{"value":"csv","label":"csv"},{"value":"xml","label":"xml"}],"example":"json","aliases":["to_format","target"]},{"name":"indent","type":"integer","required":false,"description":"Indent width for json/yaml/xml output (0=compact).","on_invalid":"reject","default":2,"example":2,"minimum":0,"maximum":8},{"name":"sort_keys","type":"boolean","required":false,"description":"Sort object keys (json/yaml).","on_invalid":"ignore","default":false,"example":false}],"returns":"output, from, to, valid, error{message} on invalid/non-tabular input","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"[{\"id\":1,\"name\":\"a\"},{\"id\":2,\"name\":\"b\"}]","from":"json","to":"csv"}},{"name":"qr","description":"Generate a QR code as SVG (text), base64-PNG (text data-URI), or terminal ASCII — all textual output, no binary asset. Up to QR version 40.","required_params":["input"],"optional_params":["kind","error_correction","scale","border"],"params":[{"name":"input","type":"string","required":true,"description":"The data to encode (URL, text, vCard, wifi string…).","on_invalid":"reject","example":"https://reefapi.com","aliases":["text","value","data"]},{"name":"kind","type":"enum","required":false,"description":"Output: svg (scalable vector text) · png_base64 (base64 + data-URI) · text (terminal ASCII art).","on_invalid":"reject","allowed_values":[{"value":"svg","label":"svg"},{"value":"png_base64","label":"png_base64"},{"value":"text","label":"text"}],"default":"svg","example":"svg","aliases":["format","output"]},{"name":"error_correction","type":"enum","required":false,"description":"Recovery level: l~7% · m~15% · q~25% · h~30%.","on_invalid":"reject","allowed_values":[{"value":"l","label":"l"},{"value":"m","label":"m"},{"value":"q","label":"q"},{"value":"h","label":"h"}],"default":"m","example":"m","aliases":["ec","error"]},{"name":"scale","type":"integer","required":false,"description":"Module pixel size (png/svg).","on_invalid":"reject","default":4,"example":4,"minimum":1,"maximum":20},{"name":"border","type":"integer","required":false,"description":"Quiet-zone width in modules (spec default 4).","on_invalid":"reject","default":4,"example":4,"minimum":0,"maximum":16}],"returns":"svg | png_base64+data_uri | text, version, error_correction, designator, modules, is_micro, mime","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"https://reefapi.com","kind":"svg"}},{"name":"color","description":"Parse any CSS color (hex/rgb()/hsl()/name) → every format + CSS3 name + luminance; optional second color → WCAG 2.x contrast ratio + AA/AAA.","required_params":["input"],"optional_params":["contrast_with"],"params":[{"name":"input","type":"string","required":true,"description":"The color: '#1a2b3c', '#abc', 'rgb(26,43,60)', 'hsl(210,40%,17%)' or a CSS3 name ('rebeccapurple').","on_invalid":"reject","example":"#1a2b3c","aliases":["text","value","data"]},{"name":"contrast_with","type":"string","required":false,"description":"Optional second color — returns the WCAG contrast ratio + AA/AAA pass flags for normal/large text.","on_invalid":"ignore","example":"#ffffff","aliases":["against","background"]}],"returns":"hex, rgb{}, hsl{}, hsv{}, cmyk{}, alpha, name, nearest_name, luminance, is_dark + contrast{ratio, aa_normal, aa_large, aaa_normal, aaa_large}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"#1a2b3c","contrast_with":"#ffffff"}},{"name":"mock_data","description":"Generate fake/test records (Faker, 70+ locales): preset bundles (person/address/company/internet/profile/product/lorem) or a custom field→type schema; seed for reproducible output.","required_params":[],"optional_params":["preset","schema","count","locale","seed"],"params":[{"name":"preset","type":"enum","required":false,"description":"Ready-made record shape (ignored when `schema` is given).","on_invalid":"reject","allowed_values":[{"value":"person","label":"person"},{"value":"address","label":"address"},{"value":"company","label":"company"},{"value":"internet","label":"internet"},{"value":"profile","label":"profile"},{"value":"product","label":"product"},{"value":"lorem","label":"lorem"}],"example":"person"},{"name":"schema","type":"object","required":false,"description":"Custom shape: {output_field: type}. Types: address, bool, catch_phrase, city, color_hex, color_name, company, company_email, country, country_code, credit_card_full, credit_card_number, currency_code, date, date_of_birth, domain, email, emoji, file_name, first_name, float, free_email, iban, int, ipv4, ipv6, iso8601, job, language_code, last_name, latitude, locale, longitude, mac, mime_type, name, paragraph, password, phone, sentence, slug, ssn, state, street, text, time, url, user_agent, username, uuid, word, zip.","on_invalid":"ignore","example":{"full_name":"name","mail":"email","age":"int"},"aliases":["fields"]},{"name":"count","type":"integer","required":false,"description":"How many records.","on_invalid":"reject","default":5,"example":5,"minimum":1,"maximum":100},{"name":"locale","type":"string","required":false,"description":"Faker locale (en_US, tr_TR, de_DE, ja_JP…). Unknown locales fall back to en_US.","on_invalid":"ignore","default":"en_US","example":"tr_TR"},{"name":"seed","type":"integer","required":false,"description":"Seed for deterministic output (same seed+schema+locale +count+faker-version → same records).","on_invalid":"ignore","example":42}],"returns":"rows[], count, locale (resolved), preset|schema, seeded","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"preset":"person","count":2,"seed":42}},{"name":"text_diff","description":"Unified diff between two texts + change stats + similarity ratio.","required_params":["a","b"],"optional_params":["context","label_a","label_b"],"params":[{"name":"a","type":"string","required":true,"description":"The original text.","on_invalid":"reject","example":"line one\nline two","aliases":["old","left","text1"]},{"name":"b","type":"string","required":true,"description":"The changed text.","on_invalid":"reject","example":"line one\nline 2","aliases":["new","right","text2"]},{"name":"context","type":"integer","required":false,"description":"Context lines around each hunk.","on_invalid":"reject","default":3,"example":3,"minimum":0,"maximum":20},{"name":"label_a","type":"string","required":false,"description":"Label for the original.","on_invalid":"ignore","default":"a","example":"before"},{"name":"label_b","type":"string","required":false,"description":"Label for the changed text.","on_invalid":"ignore","default":"b","example":"after"}],"returns":"diff (unified), identical, added_lines, removed_lines, hunks, similarity (0-1 SequenceMatcher ratio)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"a":"one\ntwo","b":"one\n2"}},{"name":"text_analyze","description":"Algorithmic text analysis (no LLM): language detect (97 langs) · readability (Flesch & co) · profanity flag/censor · keyword extraction · full stats. Pick checks or get all.","required_params":["input"],"optional_params":["checks","top_keywords"],"params":[{"name":"input","type":"string","required":true,"description":"The text to analyze.","on_invalid":"reject","example":"The quick brown fox jumps over the lazy dog. A truly remarkable fox.","aliases":["text","value","data"]},{"name":"checks","type":"array","required":false,"description":"Which analyses to run (default all): language, readability, profanity, keywords, stats.","on_invalid":"ignore","example":["language","stats"],"aliases":["include"]},{"name":"top_keywords","type":"integer","required":false,"description":"How many keywords to extract.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"language{language,confidence}, readability{flesch…, note}, profanity{contains_profanity,censored}, keywords[], stats{characters,words,sentences,…}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"input":"The quick brown fox jumps over the lazy dog. The fox is fast."}},{"name":"timestamp","description":"Parse/convert any timestamp ('now', unix s/ms/µs, ISO-8601, RFC-2822) → every format + timezone conversion + relative time.","required_params":[],"optional_params":["value","tz"],"params":[{"name":"value","type":"string","required":false,"description":"The timestamp. 'now' (default), unix seconds (≤10 digits), unix ms (12-14), unix µs (15-17), ISO 8601, or RFC 2822.","on_invalid":"reject","default":"now","example":"1718000000","aliases":["input","time","date"]},{"name":"tz","type":"string","required":false,"description":"IANA timezone for the local-time outputs.","on_invalid":"ignore","default":"UTC","example":"Europe/Istanbul","aliases":["timezone"]}],"returns":"detected_format, unix, unix_ms, iso8601_utc, iso8601_local, rfc2822, tz, utc_offset, weekday, day_of_year, iso_week, is_leap_year, is_dst, relative ('3 hours ago')","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"value":"1718000000","tz":"Europe/Istanbul"}},{"name":"case_convert","description":"Convert identifier/text casing: camel·pascal·snake·kebab·constant·dot·title·sentence·upper·lower (+ detected input case).","required_params":["input","target"],"optional_params":[],"params":[{"name":"input","type":"string","required":true,"description":"The text/identifier to convert.","on_invalid":"reject","example":"getUserProfileURL","aliases":["text","value","data"]},{"name":"target","type":"enum","required":true,"description":"Target case style.","on_invalid":"reject","allowed_values":[{"value":"camel","label":"camel"},{"value":"pascal","label":"pascal"},{"value":"snake","label":"snake"},{"value":"kebab","label":"kebab"},{"value":"constant","label":"constant"},{"value":"dot","label":"dot"},{"value":"title","label":"title"},{"value":"sentence","label":"sentence"},{"value":"upper","label":"upper"},{"value":"lower","label":"lower"}],"example":"camel","aliases":["to","case"]}],"returns":"output, target, detected_case, tokens[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"getUserProfileURL","target":"snake"}},{"name":"base_convert","description":"Convert integers between bases 2-36 (arbitrary precision; 0x/0b/0o prefixes accepted).","required_params":["input"],"optional_params":["from_base","to_base"],"params":[{"name":"input","type":"string","required":true,"description":"The number (string). Prefixes 0x/0b/0o override from_base.","on_invalid":"reject","example":"0xff","aliases":["text","value","data"]},{"name":"from_base","type":"integer","required":false,"description":"Source base (ignored if input has a prefix).","on_invalid":"reject","default":10,"example":10,"minimum":2,"maximum":36},{"name":"to_base","type":"integer","required":false,"description":"Target base.","on_invalid":"reject","default":10,"example":10,"minimum":2,"maximum":36}],"returns":"output, decimal, binary, octal, hex, from_base, to_base, bits","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"ff","from_base":16,"to_base":10}},{"name":"markdown","description":"Render CommonMark+tables markdown → sanitized HTML (raw HTML escaped, XSS-safe) + heading TOC with slugs.","required_params":["input"],"optional_params":[],"params":[{"name":"input","type":"string","required":true,"description":"The markdown source.","on_invalid":"reject","example":"# Title\n\nSome **bold** text.","aliases":["text","value","data"]}],"returns":"html, toc[{level,text,slug}], html_sanitized, stats{headings,html_bytes}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"# Hello\n\nworld **bold**\n\n## Sub Title"}},{"name":"user_agent","description":"Parse a User-Agent string → browser/OS/device families + versions + bot flag (uap-core database).","required_params":["input"],"optional_params":[],"params":[{"name":"input","type":"string","required":true,"description":"The User-Agent header value.","on_invalid":"reject","example":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36","aliases":["text","value","data"]}],"returns":"browser{family,version}, os{family,version}, device{family,brand,model}, is_bot","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"input":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"}},{"name":"batch","description":"Run up to 100 mixed dev-utils calls in one request.","required_params":["items"],"optional_params":[],"params":[{"name":"items","type":"array","required":true,"description":"Up to 100 items, each {action, params}. Items run independently — a bad item yields its own error entry, never fails the batch.","on_invalid":"reject","example":[{"action":"hash","params":{"input":"abc","algo":"sha256"}},{"action":"uuid","params":{"version":"v7"}}],"aliases":["calls","requests","batch"]}],"returns":"count, ok_count, results[{action, ok, data|error}]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"items":[{"action":"hash","params":{"input":"abc","algo":"md5"}},{"action":"base_convert","params":{"input":"1010","from_base":2}},{"action":"encode","params":{"input":"x","op":"nope"}}]}}]},{"name":"dhgate","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"DHgate API — search the China-to-global wholesale marketplace and read full listings: quantity price ladder, MOQ, variants with stock, shipping by country, seller, reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dhgate/v1","spec_available":true,"actions":[{"name":"search","description":"Search DHgate products by keyword with the source's own filters: category, price range, free shipping, sold per piece, maximum MOQ, on-sale only, 4-star+ rated, ships-from country, destination country, and 6 sort orders. Each row: item id, title, URL, image, price range (the low end is the bulk-tier price), pre-discount range, discount %, unit, minimum order, free-shipping flag, units sold, product rating and review count, sponsored flag, and the seller (store name, store id, positive feedback %). Plus the source's total and category facets.","required_params":["query"],"optional_params":["category","min_price","max_price","free_shipping","sold_per_piece","max_moq","on_sale","rating_4_up","ship_from","ship_to","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, e.g. 'phone case', 'wireless earbuds', 'wedding dress'. Required.","on_invalid":"reject","example":"phone case","aliases":["q","keyword","keywords","searchkey"]},{"name":"category","type":"string","required":false,"description":"DHgate category id to narrow the search, e.g. 105 (Cell Phones & Accessories). Ids come from `category_facets` of any search response; an id DHgate does not know is rejected.","on_invalid":"reject","example":"105","aliases":["category_id","catalog"]},{"name":"min_price","type":"number","required":false,"description":"Minimum unit price in USD. The source matches on overlap: an item is kept when its price range (largest-quantity tier to single-piece price) overlaps min_price..max_price, so price_min may sit below min_price.","on_invalid":"reject","example":1,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum unit price in USD (overlap match, see min_price).","on_invalid":"reject","example":5,"minimum":0,"aliases":["price_max"]},{"name":"free_shipping","type":"boolean","required":false,"description":"Only items with free shipping.","on_invalid":"reject","example":true},{"name":"sold_per_piece","type":"boolean","required":false,"description":"DHgate's 'single piece' filter: items sold per piece rather than in lots. It does NOT mean a minimum order of 1 (measured: 6-7 of 40 rows still had a minimum order of 15-120 pieces); use `max_moq` for that.","on_invalid":"reject","example":true,"aliases":["single_piece"]},{"name":"max_moq","type":"integer","required":false,"description":"Only items whose minimum order quantity is at most this many units (DHgate's 'Min. Order: less than' filter).","on_invalid":"reject","example":10,"minimum":1,"maximum":100000,"aliases":["max_min_order"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only items in a running promotion.","on_invalid":"reject","example":true},{"name":"rating_4_up","type":"boolean","required":false,"description":"Only items DHgate lists under its review-score filter (4 stars and up).","on_invalid":"reject","example":true},{"name":"ship_from","type":"string","required":false,"description":"Warehouse country the item ships from (two-letter code, e.g. US for DHgate's US local warehouses). The countries available for a query are in `ship_from_options`; nearly everything ships from CN, so CN does not narrow. The row flag `us_warehouse` is set on only some of the items this filter returns (7 of 41 measured).","on_invalid":"reject","example":"US"},{"name":"ship_to","type":"string","required":false,"description":"Destination country (ISO 3166 two-letter code, e.g. US, DE, FR, GB, AU). DHgate's shipping cost and delivery estimate depend on it (measured: the same item ships free to DE/GB/FR and for US $10.31 to the US). Default US. Prices themselves did not change by country.","on_invalid":"reject","default":"US","example":"US","aliases":["country","ship_country","shipcountry"]},{"name":"sort","type":"enum","required":false,"description":"Result order (DHgate's own sort bar). `best_match` mixes in sponsored rows and counts more loosely related items, so its total is larger than under the other sorts.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match"},{"value":"best_selling","label":"Most sold"},{"value":"newest","label":"Newest listings"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"top_rated","label":"Highest review score"}],"default":"best_match"},{"name":"page","type":"integer","required":false,"description":"Result page, 40 organic rows per page (plus up to 10 sponsored rows on best-match pages). DHgate serves pages 1-101; past that it returns nothing.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":101}],"returns":"results[]{item_id, title, url, image, category_id, currency (USD), price_min (bulk-tier price of the cheapest variant), price_max, price_text, price_before_discount_min, price_before_discount_max, discount_pct, promotion_ends, unit, min_order, min_order_text, free_shipping, sold_count, rating, review_count, positive_review_pct, delivery_days_promise, us_warehouse, seller_coupons[], sponsored, seller{store_name, store_id, supplier_id, store_url, positive_feedback_pct, seller_tier, years_on_dhgate}} + total, page, has_more, sponsored_count, no_match (true = DHgate found nothing for the query), recommended_instead[] (the look-alike rows DHgate shows in that case; same shape as results), category_facets[]{category_id, name, count, subcategories[]}, ship_from_options{}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"phone case","sort":"best_selling"}},{"name":"product","description":"Full DHgate product by item_id or URL: title, category path, images and video, price range and pre-discount range, the quantity price ladder (price per unit at each order-quantity tier), promotion, unit and units per lot, minimum and maximum order, units sold, total stock and stock by warehouse country, variant attributes and every SKU with its stock, item specifics, highlights, full description text, package size and weight, shipping to `ship_to` (cost, free flag, method, delivery days, processing days), the seller (store, positive feedback %, transactions, followers, on-time delivery rate, company name, year established, employees), seller coupons and the review breakdown (average, count, stars, platform-default reviews, AI summary).","required_params":[],"optional_params":["item_id","url","ship_to"],"params":[{"name":"item_id","type":"string","required":false,"description":"DHgate item code: the number at the end of a product URL (`/product/<slug>/1037834063.html`), returned as `item_id` in every search and store row. Provide item_id OR url.","on_invalid":"reject","example":"1037834063","aliases":["itemcode","item_code","id","product_id"]},{"name":"url","type":"string","required":false,"description":"A dhgate.com product URL; alternative to item_id.","on_invalid":"reject","example":"https://www.dhgate.com/product/refurbished-original-unlocked-oled-screen/1037834063.html","aliases":["product_url"]},{"name":"ship_to","type":"string","required":false,"description":"Destination country (ISO 3166 two-letter code, e.g. US, DE, FR, GB, AU). DHgate's shipping cost and delivery estimate depend on it (measured: the same item ships free to DE/GB/FR and for US $10.31 to the US). Default US. Prices themselves did not change by country.","on_invalid":"reject","default":"US","example":"US","aliases":["country","ship_country","shipcountry"]}],"returns":"item{item_id, title, url, category_id, category_name, category_path[], images[], video, currency, price_min, price_max, list_price_min, list_price_max, discount_pct, promotion{name, ends}, price_tiers[]{min_qty, max_qty, price, list_price, price_per_unit}, price_tiers_sku_id, unit, unit_plural, units_per_lot, priced_per (unit|lot: when lot, every price and quantity on this item counts lots of units_per_lot), min_order, min_order_units, max_order, sold_count, stock_total, stock_by_location{}, attributes[]{attribute_id, name, values[]{value_id, name, image}}, variants[]{sku_id, values[], value_ids[], stock, ships_from, on_sale}, specs{}, highlights[], description_text, description_images[], package{length_cm, width_cm, height_cm, gross_weight_kg}, shipping{ship_to, ship_to_name, ships_from, ships_from_name, cost, free, method, delivery_days_min, delivery_days_max, delivery_window_text, processing_days, money_back_days}, seller{store_name, store_id, supplier_id, store_url, positive_feedback_pct, transactions, positive_reviews_last_year, followers, item_count, member_since, store_years, on_time_delivery_rate, location, business_type, top_seller, about, company{name, year_established, employees, main_categories[], province, city}}, seller_coupons[]{amount, min_order_amount, ends, remaining}, rating{average, review_count, default_review_count, no_purchase_review_count, with_photos, stars{}, summary_ai}, rank, last_modified, sold_out}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"1037834063"}},{"name":"sku_price","description":"The quantity price ladder of ONE variant (SKU) of a DHgate product: price per unit at each order-quantity tier, current and before discount. Use a `sku_id` from `product` -> variants[]. The ladder in `product` is the default variant's; other variants can be priced differently.","required_params":["item_id","sku_id"],"optional_params":["ship_to"],"params":[{"name":"item_id","type":"string","required":true,"description":"DHgate item code.","on_invalid":"reject","example":"1037834063","aliases":["itemcode","item_code","id"]},{"name":"sku_id","type":"string","required":true,"description":"Variant id from `product` -> variants[].sku_id.","on_invalid":"reject","example":"1479956928264249358","aliases":["sku","skuid"]},{"name":"ship_to","type":"string","required":false,"description":"Destination country (ISO 3166 two-letter code, e.g. US, DE, FR, GB, AU). DHgate's shipping cost and delivery estimate depend on it (measured: the same item ships free to DE/GB/FR and for US $10.31 to the US). Default US. Prices themselves did not change by country.","on_invalid":"reject","default":"US","example":"US","aliases":["country","ship_country","shipcountry"]}],"returns":"item_id, sku_id, currency, price_tiers[]{min_qty, max_qty, price, list_price} (same unit as product price_tiers: per lot when the product is priced_per lot)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"1037834063","sku_id":"1479956928264249358"}},{"name":"reviews","description":"Buyer reviews of a DHgate product, 10 per page: rating, text, date, buyer nickname (as DHgate masks it), buyer country and level, the variant bought, photos, helpful count, the seller's reply, and whether it is a platform-default 5-star review.","required_params":["item_id"],"optional_params":["sort","with_photos","page"],"params":[{"name":"item_id","type":"string","required":true,"description":"DHgate item code.","on_invalid":"reject","example":"1037834063","aliases":["itemcode","item_code","id"]},{"name":"sort","type":"enum","required":false,"description":"Review order as DHgate offers it.","on_invalid":"reject","allowed_values":[{"value":"default","label":"DHgate's default order (all)"},{"value":"most_helpful","label":"Most helpful first"}],"default":"default"},{"name":"with_photos","type":"boolean","required":false,"description":"Only reviews that carry photos.","on_invalid":"reject","example":true},{"name":"page","type":"integer","required":false,"description":"Review page (10 per page); `pages` says how many exist.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"reviews[]{review_id, rating, text, date, date_text, buyer, buyer_country, buyer_level, variant{}, images[], video, helpful_count, seller_reply, is_platform_default} + total, pages, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"1037834063"}},{"name":"store","description":"A DHgate seller's store: store name, positive feedback %, transactions, seller level, DHgate's service scores, and the store's product catalogue, 24 per page (item id, title, URL, image, price range, discount %, deal label, free-shipping flag, units sold). Use `store_id` from any search row or product seller block.","required_params":["store_id"],"optional_params":["page"],"params":[{"name":"store_id","type":"string","required":true,"description":"DHgate store number: `seller.store_id` in search/product results, or the number in a store URL (dhgate.com/store/21917041). A store URL is accepted too.","on_invalid":"reject","example":"21917041","aliases":["store","seller_id","store_no"]},{"name":"page","type":"integer","required":false,"description":"Store catalogue page, 24 products per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"store{store_id, store_name, url, positive_feedback_pct, transactions, seller_level, service_scores{}} + results[]{item_id, title, url, image, currency, price_min, price_max, price_text, discount_pct, deal_label, free_shipping, sold_count} + page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"store_id":"21917041"}}]},{"name":"discogs","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Discogs API — search the world's biggest database of physical music releases, read a pressing with its full tracklist and credits, and read the marketplace: live lowest asking price and every seller's offer with media and sleeve condition. No account.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/discogs/v1","spec_available":true,"actions":[{"name":"search","description":"Search Discogs for releases, master releases, artists or labels. Combine free text with artist, title, label, catalogue number, barcode, format, country, year, genre, style, track or credit filters.","required_params":[],"optional_params":["query","type","artist","release_title","label","catno","barcode","format","country","year","genre","style","track","credit","page","per_page","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search across artist, title, label and catalogue number. Optional when you supply at least one of the field filters.","on_invalid":"reject","example":"nirvana nevermind","aliases":["q","keyword","search"]},{"name":"type","type":"enum","required":false,"description":"What kind of record to return: a pressing (release), a master release, an artist or a label.","on_invalid":"reject","allowed_values":[{"value":"release","label":"release"},{"value":"master","label":"master"},{"value":"artist","label":"artist"},{"value":"label","label":"label"}],"default":"release","example":"release"},{"name":"artist","type":"string","required":false,"description":"Artist name filter.","on_invalid":"reject","example":"Nirvana"},{"name":"release_title","type":"string","required":false,"description":"Release title filter.","on_invalid":"reject","example":"Nevermind","aliases":["title"]},{"name":"label","type":"string","required":false,"description":"Record label name filter.","on_invalid":"reject","example":"Sub Pop"},{"name":"catno","type":"string","required":false,"description":"Catalogue number printed on the release. Discogs matches this loosely, so it narrows rather than pins.","on_invalid":"reject","example":"DGC-24425","aliases":["catalogue_number","catalog_number"]},{"name":"barcode","type":"string","required":false,"description":"Barcode / UPC / EAN as printed on the sleeve.","on_invalid":"reject","example":"602537351169"},{"name":"format","type":"string","required":false,"description":"Format filter, Discogs' own spelling: Vinyl, CD, Cassette, LP, Album, Box Set, 7\", 12\" and so on.","on_invalid":"reject","example":"Vinyl"},{"name":"country","type":"string","required":false,"description":"Country of release, Discogs' own spelling (UK, US, Japan, Europe).","on_invalid":"reject","example":"UK"},{"name":"year","type":"string","required":false,"description":"Year of release. A range like 1991-1993 is accepted.","on_invalid":"reject","example":"1991"},{"name":"genre","type":"string","required":false,"description":"Discogs genre (Rock, Electronic, Jazz, Hip Hop, Classical, Funk / Soul, Pop, Reggae, Latin, Folk, World, & Country).","on_invalid":"reject","example":"Rock"},{"name":"style","type":"string","required":false,"description":"Discogs style, narrower than genre.","on_invalid":"reject","example":"Grunge"},{"name":"track","type":"string","required":false,"description":"Track title filter.","on_invalid":"reject","example":"Smells Like Teen Spirit"},{"name":"credit","type":"string","required":false,"description":"Credited person filter (producer, engineer, designer…).","on_invalid":"reject","example":"Butch Vig"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Discogs stops at page 100 whatever the total.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"per_page","type":"integer","required":false,"description":"Rows per page. Discogs caps this at 100 and silently rewrites anything larger.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{id, type, title, year, country, formats, labels, catno, barcodes, genres, styles, master_id, community{have,want}, url}, count, total, pagination{page,per_page,pages,items}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nirvana nevermind","type":"release","per_page":10}},{"name":"release","description":"One pressing in full: tracklist with per-track credits, release credits, labels and catalogue numbers, formats, identifiers (barcode, matrix/runout), notes, images, videos, community have/want/rating, and live marketplace stats.","required_params":["release_id"],"optional_params":["include_marketplace","currency","max_rotations"],"params":[{"name":"release_id","type":"string","required":true,"description":"Numeric Discogs release id (one specific pressing). A full discogs.com release URL is accepted too.","on_invalid":"reject","example":249504,"aliases":["id"]},{"name":"include_marketplace","type":"boolean","required":false,"description":"Also fetch live marketplace stats (lowest asking price and how many copies are for sale) and attach them as `marketplace`. One extra, very small upstream call.","on_invalid":"ignore","default":true,"example":true},{"name":"currency","type":"enum","required":false,"description":"Currency the lowest asking price is converted into.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"CAD","label":"CAD"},{"value":"AUD","label":"AUD"},{"value":"JPY","label":"JPY"},{"value":"CHF","label":"CHF"},{"value":"MXN","label":"MXN"},{"value":"BRL","label":"BRL"},{"value":"NZD","label":"NZD"},{"value":"SEK","label":"SEK"},{"value":"ZAR","label":"ZAR"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"PLN","label":"PLN"}],"default":"USD","example":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"release{release_id, master_id, title, artists, artist_name, year, released, country, genres, styles, labels, companies, formats, tracklist, credits, identifiers, notes, images, videos, community{have,want,rating_average,rating_count}, num_for_sale, estimated_weight_grams, data_quality, url}, marketplace{num_for_sale,lowest_price,lowest_price_currency,blocked_from_sale}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"release_id":249504}},{"name":"master","description":"The master release — the work itself rather than one pressing — with its canonical tracklist, main release id and how many copies are for sale across all versions.","required_params":["master_id"],"optional_params":["max_rotations"],"params":[{"name":"master_id","type":"string","required":true,"description":"Numeric Discogs master-release id (the work, across pressings).","on_invalid":"reject","example":13814,"aliases":["id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"master{master_id, title, artists, year, main_release_id, most_recent_release_id, genres, styles, tracklist, images, num_for_sale, url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"master_id":13814}},{"name":"master/versions","description":"Every pressing of a master release, with the format / label / country / year facets Discogs itself offers so you can see what exists before filtering.","required_params":["master_id"],"optional_params":["format","label","country","released","page","per_page","max_rotations"],"params":[{"name":"master_id","type":"string","required":true,"description":"Numeric Discogs master-release id (the work, across pressings).","on_invalid":"reject","example":13814,"aliases":["id"]},{"name":"format","type":"string","required":false,"description":"Keep only versions in this format. The unfiltered response lists every available value under `facets.format`.","on_invalid":"reject","example":"Vinyl"},{"name":"label","type":"string","required":false,"description":"Keep only versions on this label.","on_invalid":"reject","example":"Sub Pop"},{"name":"country","type":"string","required":false,"description":"Keep only versions pressed in this country.","on_invalid":"reject","example":"US"},{"name":"released","type":"string","required":false,"description":"Keep only versions released in this year.","on_invalid":"reject","example":"1991","aliases":["year"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Discogs stops at page 100 whatever the total.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"per_page","type":"integer","required":false,"description":"Rows per page. Discogs caps this at 100 and silently rewrites anything larger.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"versions[]{release_id,title,format,label,catno,country,released,status,have,want,url}, count, total, facets{format,label,country,released}, pagination","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"master_id":13814}},{"name":"artist","description":"An artist or group: profile, real name variations, aliases, band members, external links and images.","required_params":["artist_id"],"optional_params":["max_rotations"],"params":[{"name":"artist_id","type":"string","required":true,"description":"Numeric Discogs artist id.","on_invalid":"reject","example":125246,"aliases":["id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"artist{artist_id, name, profile, name_variations, aliases, members, groups, urls, images, data_quality, url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"artist_id":125246}},{"name":"artist/releases","description":"An artist's discography — every release and master release they are credited on, sortable by year, title or format.","required_params":["artist_id"],"optional_params":["sort","sort_order","page","per_page","max_rotations"],"params":[{"name":"artist_id","type":"string","required":true,"description":"Numeric Discogs artist id.","on_invalid":"reject","example":125246,"aliases":["id"]},{"name":"sort","type":"enum","required":false,"description":"Order the discography by year, title or format.","on_invalid":"reject","allowed_values":[{"value":"year","label":"year"},{"value":"title","label":"title"},{"value":"format","label":"format"}],"example":"year"},{"name":"sort_order","type":"enum","required":false,"description":"Ascending or descending. Only applies with `sort`.","on_invalid":"reject","allowed_values":[{"value":"asc","label":"asc"},{"value":"desc","label":"desc"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Discogs stops at page 100 whatever the total.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"per_page","type":"integer","required":false,"description":"Rows per page. Discogs caps this at 100 and silently rewrites anything larger.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"releases[]{id,type,title,artist_name,role,year,format,label,catno,main_release_id,have,want}, count, total, pagination","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"artist_id":125246}},{"name":"label","description":"A record label: profile, contact information the label itself publishes, sublabels, external links and images.","required_params":["label_id"],"optional_params":["max_rotations"],"params":[{"name":"label_id","type":"string","required":true,"description":"Numeric Discogs label id.","on_invalid":"reject","example":1,"aliases":["id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"label{label_id, name, profile, contact_info, sublabels, urls, images, data_quality, url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"label_id":1}},{"name":"label/releases","description":"A label's catalogue — every release Discogs files under it, with catalogue numbers.","required_params":["label_id"],"optional_params":["page","per_page","max_rotations"],"params":[{"name":"label_id","type":"string","required":true,"description":"Numeric Discogs label id.","on_invalid":"reject","example":1,"aliases":["id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Discogs stops at page 100 whatever the total.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"per_page","type":"integer","required":false,"description":"Rows per page. Discogs caps this at 100 and silently rewrites anything larger.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"releases[]{id,type,title,artist_name,year,format,catno,status,thumbnail_url}, count, total, pagination","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"label_id":1}},{"name":"marketplace/stats","description":"Live marketplace figures for up to 20 releases in ONE call: how many copies are for sale and the lowest asking price, converted into the currency you ask for.","required_params":["release_ids"],"optional_params":["currency","max_rotations"],"params":[{"name":"release_ids","type":"array","required":true,"description":"Up to 20 numeric release ids. One call replaces up to 20 single calls and costs far less per release.","on_invalid":"reject","example":[249504,1122001,8434],"aliases":["ids"]},{"name":"currency","type":"enum","required":false,"description":"Currency the lowest asking price is converted into.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"CAD","label":"CAD"},{"value":"AUD","label":"AUD"},{"value":"JPY","label":"JPY"},{"value":"CHF","label":"CHF"},{"value":"MXN","label":"MXN"},{"value":"BRL","label":"BRL"},{"value":"NZD","label":"NZD"},{"value":"SEK","label":"SEK"},{"value":"ZAR","label":"ZAR"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"PLN","label":"PLN"}],"default":"USD","example":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"stats[]{release_id,num_for_sale,lowest_price,lowest_price_currency,blocked_from_sale}, count, not_found[]","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"release_ids":[249504,1122001,8434]}},{"name":"marketplace/listings","description":"Every copy of a release that is actually for sale right now: asking price in the seller's own currency, shipping, media AND sleeve condition, the seller's public handle, feedback score and the country it ships from.","required_params":["release_id"],"optional_params":["sort","limit","page","media_condition","ships_from","price_currency","accepts_offers","max_rotations"],"params":[{"name":"release_id","type":"string","required":true,"description":"Numeric Discogs release id (one specific pressing). A full discogs.com release URL is accepted too.","on_invalid":"reject","example":249504,"aliases":["id"]},{"name":"sort","type":"enum","required":false,"description":"Order the listings: price,asc · price,desc · condition,desc · condition,asc · seller,asc · seller,desc · listed,desc · listed,asc.","on_invalid":"reject","allowed_values":[{"value":"listed,desc","label":"listed,desc"},{"value":"listed,asc","label":"listed,asc"},{"value":"condition,desc","label":"condition,desc"},{"value":"condition,asc","label":"condition,asc"},{"value":"seller,asc","label":"seller,asc"},{"value":"seller,desc","label":"seller,desc"},{"value":"price,asc","label":"price,asc"},{"value":"price,desc","label":"price,desc"}],"default":"listed,desc","example":"price,asc"},{"name":"limit","type":"integer","required":false,"description":"Listings per page. Discogs offers exactly 25, 50, 100 or 250 and rounds anything else down to the next offered size.","on_invalid":"reject","default":25,"example":25,"minimum":25,"maximum":250},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Discogs stops at page 100 whatever the total.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"media_condition","type":"array","required":false,"description":"Keep only listings whose MEDIA grade is one of these. Short codes (M, NM, VG+, VG, G+, G, F, P) are accepted.","on_invalid":"reject","allowed_values":[{"value":"Near Mint (NM or M-)","label":"Near Mint (NM or M-)"},{"value":"Very Good Plus (VG+)","label":"Very Good Plus (VG+)"},{"value":"Very Good (VG)","label":"Very Good (VG)"},{"value":"Good Plus (G+)","label":"Good Plus (G+)"},{"value":"Mint (M)","label":"Mint (M)"},{"value":"Good (G)","label":"Good (G)"},{"value":"Fair (F)","label":"Fair (F)"},{"value":"Poor (P)","label":"Poor (P)"}],"example":["VG+"]},{"name":"ships_from","type":"string","required":false,"description":"Keep only listings shipping from this country, spelled as Discogs spells it (United Kingdom, Italy, Germany…).","on_invalid":"reject","example":"United Kingdom"},{"name":"price_currency","type":"enum","required":false,"description":"🔴 A FILTER, not a display setting: keeps only listings the seller priced natively in this currency, which can cut the total sharply. Leave it unset to see every listing.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"CAD","label":"CAD"},{"value":"AUD","label":"AUD"},{"value":"JPY","label":"JPY"},{"value":"CHF","label":"CHF"},{"value":"MXN","label":"MXN"},{"value":"BRL","label":"BRL"},{"value":"NZD","label":"NZD"},{"value":"SEK","label":"SEK"},{"value":"ZAR","label":"ZAR"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"PLN","label":"PLN"}],"example":"USD"},{"name":"accepts_offers","type":"boolean","required":false,"description":"Keep only listings whose seller accepts offers.","on_invalid":"ignore","default":false,"example":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to start over on a fresh connection after a failed attempt.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{listing_id, release_id, title, label, catno, media_condition, media_condition_code, media_condition_rank, sleeve_condition, sleeve_condition_code, price, currency, shipping, total_converted, total_converted_currency, comments, seller{username,rating_pct,ratings_count,stars,ships_from}, url}, count, total, page, rows_dropped, filters_applied","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"release_id":249504,"limit":25}}]},{"name":"dm","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"dm API scraper — dm-drogerie markt (dm.de …), Europe's largest drugstore chain: search 13 countries, read the full product (price, net/excl-VAT price, price per unit, was-price, EU 30-day lowest price, dm own-brand flag, Payback, GTIN, ingredients, images, rating), plus reviews, online + in-store availability, store finder and autocomplete. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dm/v1","spec_available":true,"actions":[{"name":"search","description":"Search a dm storefront by keyword and/or category, with the site's own sorts and filters (brand, feature, popular filter, price range). Each row: dm article number (DAN), GTIN, brand, name, the shopper price + currency, the struck was-price + discount, the excl-VAT net price, the price per unit, the EU 30-day lowest price when shown, rating + count, dm own-brand/online-only/new/sale flags, pharmacy flag, variant axis and images. Ingredients and the full description are on product/detail. A no-result search returns an empty list (dm's own signal — no padding); a partly-matching multi-word query keeps the matched rows and reports the unmatched words as modified_query.","required_params":[],"optional_params":["country","query","category","sort","page","page_size","brand","feature","popular_filter","price_min","price_max","include_facets","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"dm online storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — dm.de (EUR)"},{"value":"at","label":"Austria — dm.at (EUR)"},{"value":"cz","label":"Czechia — dm.cz (CZK)"},{"value":"sk","label":"Slovakia — mojadm.sk (EUR)"},{"value":"hu","label":"Hungary — dm.hu (HUF)"},{"value":"si","label":"Slovenia — dm.si (EUR)"},{"value":"hr","label":"Croatia — dm.hr (EUR)"},{"value":"ro","label":"Romania — dm.ro (RON)"},{"value":"bg","label":"Bulgaria — dm-drogeriemarkt.bg (EUR)"},{"value":"rs","label":"Serbia — dm.rs (RSD)"},{"value":"ba","label":"Bosnia & Herzegovina — dm-drogeriemarkt.ba (BAM)"},{"value":"it","label":"Italy — dm-drogeriemarkt.it (EUR)"},{"value":"pl","label":"Poland — dm.pl (PLN)"}],"default":"de"},{"name":"query","type":"string","required":false,"description":"Keyword to search (brand, product or product-type word). Optional when `category` is given (category browse). A GTIN/EAN or a dm article number also resolves to its product.","on_invalid":"reject","example":"shampoo","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"dm category code (allCategories.id, e.g. '110101'), from a detail's category_codes. Browse it alone, or narrow a keyword with it.","on_invalid":"ignore","example":"110101"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price ascending"},{"value":"price_desc","label":"Price descending"},{"value":"newest","label":"Newest first"},{"value":"top_rated","label":"Highest rated"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (dm default 30, max honoured here 100).","on_invalid":"reject","default":30,"minimum":1,"maximum":100},{"name":"brand","type":"string","required":false,"description":"Brand name filter (exact dm brand name; comma-separate several = any-of).","on_invalid":"ignore","example":"Balea"},{"name":"feature","type":"string","required":false,"description":"Product-feature filter (a productFeatures facet value, e.g. 'Vegan', 'Ohne Silikone'). Comma-separate several = all-of.","on_invalid":"ignore","example":"Vegan"},{"name":"popular_filter","type":"string","required":false,"description":"A popular filter facet value (e.g. 'Lieferbar', 'Marke von dm', 'Neu').","on_invalid":"ignore","example":"Lieferbar"},{"name":"price_min","type":"number","required":false,"description":"Minimum price in the country currency.","on_invalid":"reject","example":2,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in the country currency.","on_invalid":"reject","example":10,"minimum":0},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the filter facets (brands, categories, features) with counts.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Max datacentre exits to try on a transient throttle.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"results[]{dan, gtin, product_name, brand, url, price, currency, was_price, discount_percent, net_price, lowest_price_30d, base_price{amount,unit,per_amount,per_unit,text}, price_notes, rating, rating_count, rating_scale, is_dm_brand, is_pharmacy, online_only, is_new, on_sale, flags, categories, variant_count, variants[{dan,label,hex,url}], image, images}, count, total_results, total_pages, page, page_size, sort, query, country, currency, predicted_category, modified_query, unmatched_terms, facets (with include_facets)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","query":"shampoo"}},{"name":"product/detail","description":"The full dm product by article number, GTIN or URL: name, brand, GTIN, the shopper price with was-price/discount, the excl-VAT net price, the price per unit, the EU 30-day lowest price, the dm-Dauerpreis 'not raised since' date, the Payback line, availability of ratings, the category breadcrumb + codes, the description with bullet points, the ingredient list, the usage text, pills/seals, images, and every size/shade variant.","required_params":[],"optional_params":["country","product_id","gtin","url","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"dm online storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — dm.de (EUR)"},{"value":"at","label":"Austria — dm.at (EUR)"},{"value":"cz","label":"Czechia — dm.cz (CZK)"},{"value":"sk","label":"Slovakia — mojadm.sk (EUR)"},{"value":"hu","label":"Hungary — dm.hu (HUF)"},{"value":"si","label":"Slovenia — dm.si (EUR)"},{"value":"hr","label":"Croatia — dm.hr (EUR)"},{"value":"ro","label":"Romania — dm.ro (RON)"},{"value":"bg","label":"Bulgaria — dm-drogeriemarkt.bg (EUR)"},{"value":"rs","label":"Serbia — dm.rs (RSD)"},{"value":"ba","label":"Bosnia & Herzegovina — dm-drogeriemarkt.ba (BAM)"},{"value":"it","label":"Italy — dm-drogeriemarkt.it (EUR)"},{"value":"pl","label":"Poland — dm.pl (PLN)"}],"default":"de"},{"name":"product_id","type":"string","required":false,"description":"dm article number (DAN), e.g. '1569035'. A GTIN/EAN or a dm product URL also works via `gtin`/`url`.","on_invalid":"reject","example":"1569035","aliases":["dan","code","sku"]},{"name":"gtin","type":"string","required":false,"description":"GTIN/EAN instead of product_id (resolved to the dm article number).","on_invalid":"reject","example":"4066447966008","aliases":["ean"]},{"name":"url","type":"string","required":false,"description":"A dm.* product URL (…/p/d/<dan>/…) instead of product_id.","on_invalid":"reject","aliases":["product_url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Max datacentre exits to try on a transient throttle.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"product{dan, gtin, product_name, brand, url, price, currency, was_price, discount_percent, net_price, lowest_price_30d, base_price, price_notes, price_stable_since, payback{text,earns_points}, rating, rating_count, is_pharmacy, breadcrumb, category_path, category_codes, description, bullet_points, ingredients, usage, sections[{header,text,bullets}], pills, seals, flags, images, variants[{dan,label,hex,url,selected}], variant_count}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","product_id":"1569035"}},{"name":"reviews","description":"Ratings and reviews for a dm product: the average rating and count, the 1–5 star distribution and the 'would recommend' share (per country), plus the full review text — title, body, rating, nickname, date, recommend flag, photos — from the German (dm-de) review deployment.","required_params":["product_id"],"optional_params":["country","limit","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"dm article number (DAN), e.g. '1569035'. A GTIN/EAN or a dm product URL also works via `gtin`/`url`.","on_invalid":"reject","example":"1569035","aliases":["dan","code","sku"]},{"name":"country","type":"enum","required":false,"description":"dm online storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — dm.de (EUR)"},{"value":"at","label":"Austria — dm.at (EUR)"},{"value":"cz","label":"Czechia — dm.cz (CZK)"},{"value":"sk","label":"Slovakia — mojadm.sk (EUR)"},{"value":"hu","label":"Hungary — dm.hu (HUF)"},{"value":"si","label":"Slovenia — dm.si (EUR)"},{"value":"hr","label":"Croatia — dm.hr (EUR)"},{"value":"ro","label":"Romania — dm.ro (RON)"},{"value":"bg","label":"Bulgaria — dm-drogeriemarkt.bg (EUR)"},{"value":"rs","label":"Serbia — dm.rs (RSD)"},{"value":"ba","label":"Bosnia & Herzegovina — dm-drogeriemarkt.ba (BAM)"},{"value":"it","label":"Italy — dm-drogeriemarkt.it (EUR)"},{"value":"pl","label":"Poland — dm.pl (PLN)"}],"default":"de"},{"name":"limit","type":"integer","required":false,"description":"Max review texts to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"Max datacentre exits to try on a transient throttle.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"dan, country, rating, rating_count, rating_scale, recommend_percent, distribution{1..5:{count,percent}}, reviews[{id,rating,title,text,nickname,submitted_at,recommended,syndicated,photos}], reviews_count, reviews_locale, reviews_note","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","product_id":"1569035"}},{"name":"availability","description":"Online deliverability for dm products by article number, and per-store stock when a store id is given. Returns whether each product is purchasable online and, with store_id, the in-store availability status for that dm market.","required_params":["product_ids"],"optional_params":["country","store_id","max_rotations"],"params":[{"name":"product_ids","type":"string","required":false,"description":"One or more dm article numbers (comma-separated).","on_invalid":"reject","example":"1569035,3061034","aliases":["dans"]},{"name":"country","type":"enum","required":false,"description":"dm online storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — dm.de (EUR)"},{"value":"at","label":"Austria — dm.at (EUR)"},{"value":"cz","label":"Czechia — dm.cz (CZK)"},{"value":"sk","label":"Slovakia — mojadm.sk (EUR)"},{"value":"hu","label":"Hungary — dm.hu (HUF)"},{"value":"si","label":"Slovenia — dm.si (EUR)"},{"value":"hr","label":"Croatia — dm.hr (EUR)"},{"value":"ro","label":"Romania — dm.ro (RON)"},{"value":"bg","label":"Bulgaria — dm-drogeriemarkt.bg (EUR)"},{"value":"rs","label":"Serbia — dm.rs (RSD)"},{"value":"ba","label":"Bosnia & Herzegovina — dm-drogeriemarkt.ba (BAM)"},{"value":"it","label":"Italy — dm-drogeriemarkt.it (EUR)"},{"value":"pl","label":"Poland — dm.pl (PLN)"}],"default":"de"},{"name":"store_id","type":"string","required":false,"description":"A dm store id (from `stores`); returns per-store stock for the products.","on_invalid":"reject","example":"D42K"},{"name":"max_rotations","type":"integer","required":false,"description":"Max datacentre exits to try on a transient throttle.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"items[{dan, purchasable, online_status, store_status, express_delivery_area}], count, store_id, country","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_ids":"1569035,3061034"}},{"name":"stores","description":"The dm store finder: list dm markets near a latitude/longitude (or in a bounding box) for a country, or fetch one store by id. Each store: id, number, address, coordinates, phone, opening hours, services, express-pickup flag and popular-times.","required_params":[],"optional_params":["country","lat","lon","min_results","bbox","store_id","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"dm online storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — dm.de (EUR)"},{"value":"at","label":"Austria — dm.at (EUR)"},{"value":"cz","label":"Czechia — dm.cz (CZK)"},{"value":"sk","label":"Slovakia — mojadm.sk (EUR)"},{"value":"hu","label":"Hungary — dm.hu (HUF)"},{"value":"si","label":"Slovenia — dm.si (EUR)"},{"value":"hr","label":"Croatia — dm.hr (EUR)"},{"value":"ro","label":"Romania — dm.ro (RON)"},{"value":"bg","label":"Bulgaria — dm-drogeriemarkt.bg (EUR)"},{"value":"rs","label":"Serbia — dm.rs (RSD)"},{"value":"ba","label":"Bosnia & Herzegovina — dm-drogeriemarkt.ba (BAM)"},{"value":"it","label":"Italy — dm-drogeriemarkt.it (EUR)"},{"value":"pl","label":"Poland — dm.pl (PLN)"}],"default":"de"},{"name":"lat","type":"number","required":false,"description":"Latitude to search dm stores near.","on_invalid":"reject","example":48.1374},{"name":"lon","type":"number","required":false,"description":"Longitude to search dm stores near.","on_invalid":"reject","example":11.5755},{"name":"min_results","type":"integer","required":false,"description":"Minimum number of nearby stores to return.","on_invalid":"ignore","default":10,"minimum":1,"maximum":50},{"name":"bbox","type":"string","required":false,"description":"Bounding box 'latMax,lonMin,latMin,lonMax' to list dm stores in an area.","on_invalid":"reject","example":"48.20,11.50,48.10,11.65"},{"name":"store_id","type":"string","required":false,"description":"A dm store id (from `stores`); returns per-store stock for the products.","on_invalid":"reject","example":"D42K"},{"name":"max_rotations","type":"integer","required":false,"description":"Max datacentre exits to try on a transient throttle.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"stores[{store_id, store_number, name, address{street,zip,city,region}, lat, lon, phone, url, express_pickup, services, opening_hours[], popular_times}], count, total, country (single store under `store`)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"lat":48.1374}},{"name":"suggest","description":"dm search autocomplete for a partial query: the ranked keyword suggestions.","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search (brand, product or product-type word). Optional when `category` is given (category browse). A GTIN/EAN or a dm article number also resolves to its product.","on_invalid":"reject","example":"shampoo","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"dm online storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — dm.de (EUR)"},{"value":"at","label":"Austria — dm.at (EUR)"},{"value":"cz","label":"Czechia — dm.cz (CZK)"},{"value":"sk","label":"Slovakia — mojadm.sk (EUR)"},{"value":"hu","label":"Hungary — dm.hu (HUF)"},{"value":"si","label":"Slovenia — dm.si (EUR)"},{"value":"hr","label":"Croatia — dm.hr (EUR)"},{"value":"ro","label":"Romania — dm.ro (RON)"},{"value":"bg","label":"Bulgaria — dm-drogeriemarkt.bg (EUR)"},{"value":"rs","label":"Serbia — dm.rs (RSD)"},{"value":"ba","label":"Bosnia & Herzegovina — dm-drogeriemarkt.ba (BAM)"},{"value":"it","label":"Italy — dm-drogeriemarkt.it (EUR)"},{"value":"pl","label":"Poland — dm.pl (PLN)"}],"default":"de"},{"name":"max_rotations","type":"integer","required":false,"description":"Max datacentre exits to try on a transient throttle.","on_invalid":"ignore","default":4,"minimum":1,"maximum":10}],"returns":"suggestions[{term, rank}], count, query, country","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","query":"bal"}}]},{"name":"dns-shop","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"DNS (dns-shop.ru) API scraper — Russia's largest electronics retailer: search the catalogue and read any product with its current price in RUB, the struck was-price and discount, the monthly credit instalment, the shop count and delivery date in the city, the specs, the brand, the exact rating and review count and the weekly price history. No account.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dns-shop/v1","spec_available":true,"actions":[{"name":"search","description":"Search DNS by keyword. 24 products per page, each with its current price in RUB, the was-price and discount when DNS shows one, the monthly credit instalment, the key specs DNS prints on the tile, the rating, the review label, the image and the `product_id` that `product` takes. The response names the category DNS answered in and the source's own total.","required_params":["query"],"optional_params":["page"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper would type into DNS: 'iphone 15', 'телевизор', 'rtx 4070', 'ноутбук'. Russian or Latin. DNS often answers inside its best-matching category (the response says which in `category`).","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based; DNS shows 24 products per page. `has_more` says whether another page exists.","on_invalid":"reject","default":1,"minimum":1,"maximum":50}],"returns":"results[]{product_id, guid, code, name, url, price, price_old, discount_pct, credit_monthly, credit_months, orderable, prepay_only, short_specs, specs{}, image, rating, reviews_label, review_count, avail_status, is_markdown}, total, category, category_id, page, last_page, has_more, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 15"}},{"name":"product","description":"The full DNS record of one product: price now (RUB), was-price and discount, monthly credit, whether it can be ordered, the shop count and pickup line in the city, the next delivery date, the full specification groups, brand, description, images, the exact rating and review count, the category path and DNS's weekly price history.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"A product's `product_id` from `search` (16 hex characters, e.g. '00eb38374882ed20') or its full dns-shop.ru product URL.","on_invalid":"reject","example":"00eb38374882ed20","value_pattern":"[A-Za-z0-9/:._\\-]{16,300}","aliases":["id","url"]}],"returns":"product{product_id, guid, code, name, url, brand, price, price_old, discount_pct, credit_monthly, credit_months, orderable, prepay_only, in_stock, store_count, availability[], delivery, rating, review_count, breadcrumbs[], category_id, description, images[], spec_groups[]{group, specs[]{name,value}}, price_history[]{month, week, price}, ld_price, ld_availability, price_mismatch, city}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"00eb38374882ed20"}}]},{"name":"dolap","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Dolap Turkey Second-Hand Fashion Marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dolap/v1","spec_available":true,"actions":[{"name":"search","description":"Search Dolap, Trendyol's second-hand fashion marketplace in Turkey: clothing, shoes, bags, accessories, kids and more, listed by private sellers. Free text plus the site's own filters (category, brand, size, colour, condition, price range, seller) and its three sort orders. Nothing is required: no parameters browses the whole live catalogue.","required_params":[],"optional_params":["query","category_id","brand_ids","size_ids","colour_ids","condition","min_price","max_price","seller_id","sort","page","limit","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text as a Turkish shopper types it (brand, item, colour…): `zara elbise`, `nike air force`, `vintage deri ceket`. Results are ranked by relevance, so the total is a broad match count, not an exact-phrase count.","on_invalid":"reject","example":"zara elbise","aliases":["q","keyword","text"]},{"name":"category_id","type":"integer","required":false,"description":"One Dolap category id, at any level (root 60005 = Giyim, leaf 62712 = Kısa Elbise). Ids come from the `filters` action or from a row's category.path.","on_invalid":"reject","example":60005,"aliases":["category"]},{"name":"brand_ids","type":"array","required":false,"description":"One or more Dolap brand ids (Nike 243, Zara 360, Adidas 5…), from `filters` or a row's brand.id.","on_invalid":"reject","example":[360]},{"name":"size_ids","type":"array","required":false,"description":"One or more size ids. Sizes are per section: clothing `M / 38`, shoes `36`, kids `5-6 Yaş`; read them from `filters` for your query.","on_invalid":"reject","example":[1059]},{"name":"colour_ids","type":"array","required":false,"description":"One or more colour ids (Siyah 1, Beyaz 3, Gri 6, Mavi 4…), from `filters`.","on_invalid":"reject","example":[1],"aliases":["color_ids"]},{"name":"condition","type":"array","required":false,"description":"Item condition, one or more of the site's three: NEW_WITH_TAGS (Yeni & Etiketli), LIKE_NEW (Yeni, no tags), GENTLY_WORN (Az Kullanılmış).","on_invalid":"reject","allowed_values":[{"value":"NEW_WITH_TAGS","label":"New with tags"},{"value":"LIKE_NEW","label":"New, no tags"},{"value":"GENTLY_WORN","label":"Gently worn"}],"example":["NEW_WITH_TAGS"],"aliases":["conditions"]},{"name":"min_price","type":"number","required":false,"description":"Lowest listed price in Turkish lira.","on_invalid":"reject","example":500,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest listed price in Turkish lira.","on_invalid":"reject","example":2000,"minimum":0},{"name":"seller_id","type":"integer","required":false,"description":"Only this seller's listings (the numeric seller.id of any row).","on_invalid":"reject","example":17772006,"aliases":["owner_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order: relevance (the site's 'Önerilen'), price_asc, price_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"relevance","example":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page. Dolap serves only the first 5,000 rows of any result, so the last page is 5000 / limit (250 at the default 20).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2500},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 2-40.","on_invalid":"reject","default":20,"example":20,"minimum":2,"maximum":40,"aliases":["size","per_page"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, total, reachable_total, page, limit, last_page, has_more, sort, filters_applied, products[]}. Each product: {id, url, title, description, brand{id,name}, category{id,name,path[]}, size{id,name}, colours[], condition, condition_label, listed_price_try, price_raw, currency, status, is_sold, allow_offers, shipment_term, free_shipping, shipment_size, like_count, image, images[], images_count, created_at, updated_at, is_boosted, is_super_seller, seller_id, seller{id, nickname, profile_url, avatar, rating_average, rating_count, last_active, is_merchant, vacation_mode, status}}. Rows carry the LISTED price; a seller discount appears only in `product`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"zara elbise","condition":["NEW_WITH_TAGS"],"limit":20}},{"name":"product","description":"One Dolap listing in full: listed price and the discounted price the page prints, every image, size, colours, condition, category path, structured attributes (gender, material…), delivery estimate, shipping terms and the seller — nickname, profile link, rating, rating count, badges, last active.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"integer","required":false,"description":"Dolap product id, exactly the `id` of a search row.","on_invalid":"reject","example":487726454,"aliases":["product_id"]},{"name":"url","type":"string","required":false,"description":"Or the product URL (https://dolap.com/urun/<slug>-<id>).","on_invalid":"reject","example":"https://dolap.com/urun/nike-siyah-spor-eldiveni-rewear34-487726454"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"Search row fields plus {discounted_price_try, discount_label, final_price_try, price_text, discounted_price_text, price_badge, price_mismatch, attributes[{name, values[]}], delivery_estimate, shipment_text, has_video, is_flash_sale, sellable, updated_ago, social_proof[], seller{…, badges[], rating_breakdown[], active}}. Either `id` or `url` is required.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://dolap.com/urun/nike-siyah-spor-eldiveni-rewear34-487726454"}},{"name":"seller_listings","description":"Every live listing of one Dolap seller (their 'closet'), paged and sortable, optionally narrowed by free text. The seller id is on every search row.","required_params":["seller_id"],"optional_params":["query","sort","page","limit","include_pii"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"The seller's numeric id: `seller_id` (or seller.id) of any search row or product.","on_invalid":"reject","example":17772006,"aliases":["owner_id"]},{"name":"query","type":"string","required":false,"description":"Optional free text inside this seller's listings.","on_invalid":"reject","example":"nike"},{"name":"sort","type":"enum","required":false,"description":"Result order: relevance (the site's 'Önerilen'), price_asc, price_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"relevance","example":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page. Dolap serves only the first 5,000 rows of any result, so the last page is 5000 / limit (250 at the default 20).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2500},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 2-40.","on_invalid":"reject","default":20,"example":20,"minimum":2,"maximum":40,"aliases":["size","per_page"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{seller_id, seller, total, page, limit, last_page, has_more, sort, products[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":17772006}},{"name":"filters","description":"The filter values Dolap offers for a query, with live counts: brands, sizes (per size group), colours, conditions, the category tree and price bands. Use it to find the ids `search` filters on.","required_params":[],"optional_params":["query","category_id","brand_ids","size_ids","colour_ids","condition","min_price","max_price","brand_limit","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text as a Turkish shopper types it (brand, item, colour…): `zara elbise`, `nike air force`, `vintage deri ceket`. Results are ranked by relevance, so the total is a broad match count, not an exact-phrase count.","on_invalid":"reject","example":"zara elbise","aliases":["q","keyword","text"]},{"name":"category_id","type":"integer","required":false,"description":"One Dolap category id, at any level (root 60005 = Giyim, leaf 62712 = Kısa Elbise). Ids come from the `filters` action or from a row's category.path.","on_invalid":"reject","example":60005,"aliases":["category"]},{"name":"brand_ids","type":"array","required":false,"description":"One or more Dolap brand ids (Nike 243, Zara 360, Adidas 5…), from `filters` or a row's brand.id.","on_invalid":"reject","example":[360]},{"name":"size_ids","type":"array","required":false,"description":"One or more size ids. Sizes are per section: clothing `M / 38`, shoes `36`, kids `5-6 Yaş`; read them from `filters` for your query.","on_invalid":"reject","example":[1059]},{"name":"colour_ids","type":"array","required":false,"description":"One or more colour ids (Siyah 1, Beyaz 3, Gri 6, Mavi 4…), from `filters`.","on_invalid":"reject","example":[1],"aliases":["color_ids"]},{"name":"condition","type":"array","required":false,"description":"Item condition, one or more of the site's three: NEW_WITH_TAGS (Yeni & Etiketli), LIKE_NEW (Yeni, no tags), GENTLY_WORN (Az Kullanılmış).","on_invalid":"reject","allowed_values":[{"value":"NEW_WITH_TAGS","label":"New with tags"},{"value":"LIKE_NEW","label":"New, no tags"},{"value":"GENTLY_WORN","label":"Gently worn"}],"example":["NEW_WITH_TAGS"],"aliases":["conditions"]},{"name":"min_price","type":"number","required":false,"description":"Lowest listed price in Turkish lira.","on_invalid":"reject","example":500,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest listed price in Turkish lira.","on_invalid":"reject","example":2000,"minimum":0},{"name":"brand_limit","type":"integer","required":false,"description":"How many brands to return, largest first (the facet lists up to several thousand).","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":5000},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, total, brand_count, brands[{id,name,count}], sizes[{id,name,group,count}], colours[{id,name,hex,count}], conditions[{code,name,description,count}], categories[{id,name,count,subcategories[]}], price_bands[], attributes[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"zara elbise","brand_limit":20}}]},{"name":"domain-availability","category":{"id":"utilities","title":"Utilities & AI"},"title":"Domain & App-Name Availability API — check if a domain or brand name is free across TLDs, with WHOIS/RDAP records, name suggestions and bulk lookups","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/domain-availability/v1","spec_available":true,"actions":[{"name":"check","description":"Is one domain available? Combined RDAP and DNS verdict with confidence + Domainr-style status tokens + a register_url when free. Accepts domain OR name+tld.","required_params":["domain"],"optional_params":["name","tld","signal","whois","include_pii"],"params":[{"name":"domain","type":"string","required":true,"description":"A full domain to check (e.g. myapp.com, my-startup.io). A bare host, a full URL, or a leading www. are all accepted and normalized.","on_invalid":"reject","example":"myapp.com","aliases":["url"]},{"name":"name","type":"string","required":false,"description":"A bare app/brand name label (e.g. 'myapp', 'My Startup' → 'my-startup'). Spaces/underscores become hyphens; the TLD is added separately via 'tlds'.","on_invalid":"reject","example":"myapp","aliases":["query","keyword"]},{"name":"tld","type":"string","required":false,"description":"TLD to combine with 'name' if no full 'domain' is given.","on_invalid":"ignore","example":"com"},{"name":"signal","type":"enum","required":false,"description":"Which availability signal(s) to use. 'both' (default) is the most accurate: RDAP for registrar-grade facts + DNS to disambiguate TLDs that have no RDAP server (io/co/me).","on_invalid":"ignore","allowed_values":[{"value":"both","label":"RDAP + DNS (default; most accurate, DNS disambiguates no-RDAP TLDs)"},{"value":"rdap","label":"RDAP only (fast; inconclusive for io/co/me and other no-RDAP TLDs)"},{"value":"dns","label":"DNS/DoH only (NS+SOA presence; no registrar data, no RDAP hop)"}],"default":"both","example":"both"},{"name":"whois","type":"boolean","required":false,"description":"If true and the domain is registered, also attach the full WHOIS/RDAP record (registrar, dates, nameservers, status) inline.","on_invalid":"ignore","default":false,"example":false,"aliases":["include_whois"]},{"name":"include_pii","type":"boolean","required":false,"description":"If true, return the full RDAP registrant contact. Default false → personal data dropped (GDPR), organization kept.","on_invalid":"ignore","default":false,"example":false}],"returns":"domain, available (bool|null), registered (bool|null), confidence (high|medium|low), method, status[] (Domainr-style tokens), note, register_url (when free), rdap_status, tld_has_rdap, dns{}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"google.com"}},{"name":"bulk_check","description":"One NAME across many TLDs → availability map (which of name.com/.io/.ai/… are free).","required_params":["name"],"optional_params":["tlds","signal"],"params":[{"name":"name","type":"string","required":true,"description":"A bare app/brand name label (e.g. 'myapp', 'My Startup' → 'my-startup'). Spaces/underscores become hyphens; the TLD is added separately via 'tlds'.","on_invalid":"reject","example":"myapp","aliases":["query","keyword"]},{"name":"tlds","type":"array","required":false,"description":"TLDs to check (comma-separated string or array, with or without a dot). Defaults to com,net,org,io,co,app,dev,ai,me,xyz. Any valid TLD label is accepted (not just the suggested list); capped at 60.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"com"},{"value":"net","label":"net"},{"value":"org","label":"org"},{"value":"io","label":"io"},{"value":"co","label":"co"},{"value":"app","label":"app"},{"value":"dev","label":"dev"},{"value":"ai","label":"ai"},{"value":"me","label":"me"},{"value":"xyz","label":"xyz"},{"value":"tech","label":"tech"},{"value":"io","label":"io"}],"example":"com,io,ai,app","aliases":["tld_list"]},{"name":"signal","type":"enum","required":false,"description":"Which availability signal(s) to use. 'both' (default) is the most accurate: RDAP for registrar-grade facts + DNS to disambiguate TLDs that have no RDAP server (io/co/me).","on_invalid":"ignore","allowed_values":[{"value":"both","label":"RDAP + DNS (default; most accurate, DNS disambiguates no-RDAP TLDs)"},{"value":"rdap","label":"RDAP only (fast; inconclusive for io/co/me and other no-RDAP TLDs)"},{"value":"dns","label":"DNS/DoH only (NS+SOA presence; no registrar data, no RDAP hop)"}],"default":"both","example":"both"}],"returns":"name, results[] (per-TLD verdict), available[] (free domains), available_count, checked","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"google","tlds":"com,net,org"}},{"name":"rdap","description":"Full WHOIS via RDAP for a registered domain (registrar, created/expires, status, nameservers, dnssec, abuse). A 404 is returned cleanly (available on RDAP-served TLDs; null + a pointer to 'check' on TLDs with no RDAP server), not an error.","required_params":["domain"],"optional_params":["raw","include_pii"],"params":[{"name":"domain","type":"string","required":true,"description":"A full domain to check (e.g. myapp.com, my-startup.io). A bare host, a full URL, or a leading www. are all accepted and normalized.","on_invalid":"reject","example":"myapp.com","aliases":["url"]},{"name":"raw","type":"boolean","required":false,"description":"If true, also attach the raw upstream RDAP JSON under whois.raw_rdap.","on_invalid":"ignore","default":false,"example":false},{"name":"include_pii","type":"boolean","required":false,"description":"If true, return the full RDAP registrant contact. Default false → personal data dropped (GDPR), organization kept.","on_invalid":"ignore","default":false,"example":false}],"returns":"domain, registered, available, whois{} (registrar(+iana_id), status[], created/updated/expires, nameservers[], dnssec, abuse_contact, registrant org-only unless include_pii)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"suggest","description":"Name variations (prefix/suffix/TLD permutations, deterministic — no LLM) each with a live availability verdict; available ones surfaced first.","required_params":["name"],"optional_params":["tlds","signal"],"params":[{"name":"name","type":"string","required":true,"description":"A bare app/brand name label (e.g. 'myapp', 'My Startup' → 'my-startup'). Spaces/underscores become hyphens; the TLD is added separately via 'tlds'.","on_invalid":"reject","example":"myapp","aliases":["query","keyword"]},{"name":"tlds","type":"array","required":false,"description":"TLDs to check (comma-separated string or array, with or without a dot). Defaults to com,io,ai,app,dev,co. Any valid TLD label is accepted (not just the suggested list); capped at 60.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"com"},{"value":"net","label":"net"},{"value":"org","label":"org"},{"value":"io","label":"io"},{"value":"co","label":"co"},{"value":"app","label":"app"},{"value":"dev","label":"dev"},{"value":"ai","label":"ai"},{"value":"me","label":"me"},{"value":"xyz","label":"xyz"},{"value":"tech","label":"tech"},{"value":"io","label":"io"}],"example":"com,io,ai,app","aliases":["tld_list"]},{"name":"signal","type":"enum","required":false,"description":"Which availability signal(s) to use. 'both' (default) is the most accurate: RDAP for registrar-grade facts + DNS to disambiguate TLDs that have no RDAP server (io/co/me).","on_invalid":"ignore","allowed_values":[{"value":"both","label":"RDAP + DNS (default; most accurate, DNS disambiguates no-RDAP TLDs)"},{"value":"rdap","label":"RDAP only (fast; inconclusive for io/co/me and other no-RDAP TLDs)"},{"value":"dns","label":"DNS/DoH only (NS+SOA presence; no registrar data, no RDAP hop)"}],"default":"both","example":"both"}],"returns":"query, suggestions[] (domain + full verdict, available-first), available[], available_count, generated","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"reefapi","tlds":"com,io,ai"}},{"name":"batch","description":"Many DIFFERENT full domains in one call → availability for each (bulk check).","required_params":["domains"],"optional_params":["signal"],"params":[{"name":"domains","type":"array","required":true,"description":"A list of FULL domains to check at once (comma-separated string or array). Capped at 100 per call; invalid entries are reported under 'invalid'.","on_invalid":"reject","example":"myapp.com,myapp.io,getmyapp.co"},{"name":"signal","type":"enum","required":false,"description":"Which availability signal(s) to use. 'both' (default) is the most accurate: RDAP for registrar-grade facts + DNS to disambiguate TLDs that have no RDAP server (io/co/me).","on_invalid":"ignore","allowed_values":[{"value":"both","label":"RDAP + DNS (default; most accurate, DNS disambiguates no-RDAP TLDs)"},{"value":"rdap","label":"RDAP only (fast; inconclusive for io/co/me and other no-RDAP TLDs)"},{"value":"dns","label":"DNS/DoH only (NS+SOA presence; no registrar data, no RDAP hop)"}],"default":"both","example":"both"}],"returns":"results[] (per-domain verdict), available[], available_count, checked, invalid[] (rejected inputs)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"domains":"google.com,this-name-is-surely-free-9z8x7q.com"}}]},{"name":"domain-intel","category":{"id":"utilities","title":"Utilities & AI"},"title":"Domain Intelligence API — WHOIS/RDAP records, DNS lookups (all record types), reverse DNS, hosting/ASN/IP-owner, DNSSEC, SSL certificates, subdomain discovery and tech-stack detection for any domain","version":"2.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/domain-intel/v1","spec_available":true,"actions":[{"name":"whois","description":"Domain registration (WHOIS) via RDAP: registrar (+ IANA id), reseller, status flags, created/updated/expires dates, nameservers, DNSSEC flag, abuse contact, and registrant (org-only unless include_pii). Legacy-WHOIS-only TLDs (.io/.de) return NOT_FOUND — see tld_detail.","required_params":["domain"],"optional_params":["raw","include_pii"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"raw","type":"boolean","required":false,"description":"If true, also attach the raw upstream RDAP JSON under whois.raw_rdap.","on_invalid":"ignore","default":false,"example":false},{"name":"include_pii","type":"boolean","required":false,"description":"If true, return the full WHOIS/RDAP registrant contact (vCard). Default false → personal data is dropped (GDPR), organization kept.","on_invalid":"ignore","default":false,"example":false}],"returns":"whois{}: domain, registrar(+iana_id), reseller, status[], created/updated/expires, nameservers[], dnssec, abuse_contact, registrant (org-only unless include_pii)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"dns","description":"DNS records over DNS-over-HTTPS: A/AAAA/MX/TXT/NS/CNAME/SOA/CAA by default; PTR/SRV/DS/DNSKEY/TLSA and any RR type on request via the 'types' param.","required_params":["domain"],"optional_params":["types"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"types","type":"array","required":false,"description":"Which DNS record types to query (comma-separated string or array). Defaults to A,AAAA,MX,TXT,NS,CNAME,SOA,CAA. PTR/SRV/DS/DNSKEY/TLSA and any other RR type are accepted and passed through to the resolver.","on_invalid":"ignore","allowed_values":[{"value":"A","label":"IPv4 address"},{"value":"AAAA","label":"IPv6 address"},{"value":"MX","label":"Mail exchanger"},{"value":"TXT","label":"Text (SPF/DKIM/verification)"},{"value":"NS","label":"Name server"},{"value":"CNAME","label":"Canonical name"},{"value":"SOA","label":"Start of authority"},{"value":"CAA","label":"Cert-authority authorization"},{"value":"PTR","label":"Reverse pointer"},{"value":"SRV","label":"Service locator"},{"value":"DS","label":"Delegation signer"},{"value":"DNSKEY","label":"DNSSEC key"},{"value":"TLSA","label":"DANE TLS anchor"}],"example":"A,AAAA,MX,TXT"}],"returns":"domain, records{} keyed by RR type → [{value, ttl}]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"reverse_dns","description":"Reverse DNS (PTR): the hostname each of the domain's A/AAAA IPs resolves back to, or pass an explicit IPv4/IPv6 to PTR that single address. Missing PTR is a common mail-rejection cause.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"A domain (PTR each of its A/AAAA IPs) OR an explicit IPv4/IPv6 address (PTR that single address).","on_invalid":"reject","example":"github.com","aliases":["query","name","ip"]}],"returns":"domain, records[] (ip, ptr), count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"hosting","description":"Hosting / ASN / IP-owner: resolves the domain's A+AAAA IPs and looks up each via Team Cymru — ASN, announced prefix, country, RIR, AS-name (network owner) + reverse DNS. Tells you who hosts a domain and on what network.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, ipv4[], ipv6[], hosts[] (ip, asn, as_name, prefix, country, rir, allocated, ptr), asns[] (asn, as_name, country, rir)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"dnssec","description":"DNSSEC signing status: the DoH AD (Authenticated-Data) flag (the resolver cryptographically validated the answer), the DS record at the parent (delegation signed), and DNSKEY presence — plus a broken-chain warning (DS without DNSKEY).","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, signed, validated_ad_flag, has_ds_record, ds_records[], has_dnskey, dnskey_count, issues[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"cloudflare.com"}},{"name":"ssl_certs","description":"SSL/TLS certificates from Certificate Transparency (CT) logs (certspotter primary, crt.sh deep fallback): issuer, common name, SANs, validity window, serial, expired flag.","required_params":["domain"],"optional_params":["limit","deep"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"limit","type":"integer","required":false,"description":"Max certificates to return (newest first). Default 50.","on_invalid":"ignore","default":50,"example":50,"minimum":1},{"name":"deep","type":"boolean","required":false,"description":"If true, query the full crt.sh CT-log history first (slower, deeper, more subdomains) instead of the fast certspotter source.","on_invalid":"ignore","default":false,"example":false}],"returns":"domain, certificates[] (issuer, issuer_friendly, common_name, sans[], not_before/after, serial_number, ct_id, is_expired), active_count, total_seen","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"subdomains","description":"Subdomain discovery via Certificate-Transparency-log cert SANs (the standard passive method; pass deep=true for full crt.sh history = more results).","required_params":["domain"],"optional_params":["deep"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"deep","type":"boolean","required":false,"description":"If true, query the full crt.sh CT-log history first (slower, deeper, more subdomains) instead of the fast certspotter source.","on_invalid":"ignore","default":false,"example":false}],"returns":"domain, subdomains[] (sorted unique), count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"availability","description":"Domain registration availability via RDAP (registered ⇔ an RDAP record exists). Caveat: legacy-WHOIS-only TLDs report 'available' falsely — surfaced in the note.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, available (bool), registered (bool), method, note","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"tld_list","description":"The IANA list of all delegated top-level domains (optionally substring-filtered).","required_params":[],"optional_params":["search","limit"],"params":[{"name":"search","type":"string","required":false,"description":"Case-insensitive substring filter over the IANA TLD list (e.g. 'shop' → shop, shopping).","on_invalid":"ignore","example":"shop"},{"name":"limit","type":"integer","required":false,"description":"Max TLDs to return (0/unset = all ~1450).","on_invalid":"ignore","example":100,"minimum":1}],"returns":"tlds[] (lowercased), count, total","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"search":"shop"}},{"name":"tld_detail","description":"Per-TLD metadata: ccTLD vs gTLD and its IANA RDAP server(s) (or a note that it is legacy-WHOIS-only, which explains why whois/availability 404 for that TLD).","required_params":["tld"],"optional_params":[],"params":[{"name":"tld","type":"string","required":true,"description":"A top-level domain, with or without a leading dot (e.g. com, io, co.uk). Returns its type + IANA RDAP server(s).","on_invalid":"reject","example":"com"}],"returns":"tld, type (ccTLD/gTLD), has_rdap, rdap_servers[], note","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"tld":"com"}},{"name":"tech_detect","description":"Tech-stack fingerprint from the homepage response headers + HTML: web server, CDN/WAF, and frameworks/CMS/analytics (WordPress, Next.js, Shopify, React, Bitrix, Tilda, Yandex.Metrica, …). Tries https, then plain http, then the www host, so HTTP-only and www-only-certificate sites are fingerprinted instead of reported as blocked; `https_available` tells you which it was.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, url, scheme, https_available, tls_certificate_valid, http_status, server, powered_by, generator, cdn[], technologies[] (+ blocked/note when only an edge/WAF answered)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"full_report","description":"One-call merge: whois + dns + dnssec + ssl_certs + subdomains (and optionally tech + hosting). meta.sections shows per-part status.","required_params":["domain"],"optional_params":["include_tech","include_hosting","include_pii","deep"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"include_tech","type":"boolean","required":false,"description":"If true, also run the tech-stack fingerprint section in full_report.","on_invalid":"ignore","default":false,"example":false},{"name":"include_hosting","type":"boolean","required":false,"description":"If true, also run the hosting/ASN/IP-owner section in full_report.","on_invalid":"ignore","default":false,"example":false},{"name":"include_pii","type":"boolean","required":false,"description":"If true, return the full WHOIS/RDAP registrant contact (vCard). Default false → personal data is dropped (GDPR), organization kept.","on_invalid":"ignore","default":false,"example":false},{"name":"deep","type":"boolean","required":false,"description":"If true, query the full crt.sh CT-log history first (slower, deeper, more subdomains) instead of the fast certspotter source.","on_invalid":"ignore","default":false,"example":false}],"returns":"domain + whois{} + dns{} + dnssec{} + ssl_certs{} + subdomains{} (+ tech{}/hosting{} when requested); meta.sections shows per-part status","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"domain":"github.com"}}]},{"name":"domain-risk","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Domain Risk API — fraud and brand-protection intelligence: 0-100 risk score, domain age and expiry lifecycle, parked/for-sale detection, typosquat and lookalike generation with registration checks, registrar, nameserver and email reputation (RDAP + DNS + Certificate Transparency, no API key required)","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/domain-risk/v1","spec_available":true,"actions":[{"name":"assess","description":"Comprehensive fraud and security risk report for one domain: a 0-100 risk score, human-readable reasons, and a risk level (low / medium / elevated / high). Combines domain age, expiry status, parked/for-sale detection, TLS certificate presence, hostname structure, brand impersonation signals, and email/DNSSEC legitimacy into a single verdict. The primary action for phishing detection and brand protection.","required_params":["domain"],"optional_params":["check_parked","include_pii"],"params":[{"name":"domain","type":"string","required":true,"description":"A full domain to evaluate (e.g. example.com, secure-login.io). A bare host, full URL, leading www., or an IDN (münchen.de) are accepted and normalized to its registrable form.","on_invalid":"reject","example":"example-login.com","aliases":["url","host"]},{"name":"check_parked","type":"boolean","required":false,"description":"If true (default), also fetch the domain's root page to detect a parked or for-sale landing page. A failed page probe never fails the overall risk assessment — only the parking signal is omitted.","on_invalid":"ignore","default":true,"example":true},{"name":"include_pii","type":"boolean","required":false,"description":"If true, return the full RDAP registrant contact. Default false → personal data dropped (GDPR), organization kept.","on_invalid":"ignore","default":false,"example":false}],"returns":"domain, registered, risk_score (0-100), risk_level (low|medium|elevated|high), reasons[] (plain-English explanation of each risk signal), lifecycle{age_days, age_band, days_to_expiry, expiry_risk, recently_registered, renewal_status}, signals{registrar, nameserver_provider, dnssec, has_certificate, mail{mx,spf,dmarc}, structural_flags[], impersonation}, parked{}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"google.com","check_parked":false}},{"name":"age","description":"Domain age + expiry-risk band + renewal status (lifecycle synthesis from RDAP dates — NOT a raw whois dump; use domain-intel.whois for that).","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"A full domain to evaluate (e.g. example.com, secure-login.io). A bare host, full URL, leading www., or an IDN (münchen.de) are accepted and normalized to its registrable form.","on_invalid":"reject","example":"example-login.com","aliases":["url","host"]}],"returns":"domain, registered, created/expires/updated, age_days, age_years, age_band (very_new|new|young|established|mature), days_to_expiry, expiry_risk (expired|imminent|soon|ok), recently_registered, renewal_status","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"parked","description":"Detect whether a domain is parked or listed for sale. Checks parking nameserver signals and the domain's root page for for-sale phrases and marketplace redirect hosts (Sedo, Afternic, GoDaddy, etc.). Returns a confidence-scored verdict: parked, for_sale, or actively in use. Returns 'unknown' when the page cannot be read.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"A full domain to evaluate (e.g. example.com, secure-login.io). A bare host, full URL, leading www., or an IDN (münchen.de) are accepted and normalized to its registrable form.","on_invalid":"reject","example":"example-login.com","aliases":["url","host"]}],"returns":"domain, parked (bool|null), for_sale (bool), confidence (high|medium|low), signals[] (each parking signal found), http_status, note","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"google.com"}},{"name":"typosquat","description":"Generate a brand's lookalike domains across 16 permutation families (meets/exceeds dnstwist; incl IDN homoglyph/homograph) then report which are ACTUALLY REGISTERED + their risk — the brand-protection product.","required_params":["domain"],"optional_params":["families","keywords","check_registered"],"params":[{"name":"domain","type":"string","required":true,"description":"A full domain to evaluate (e.g. example.com, secure-login.io). A bare host, full URL, leading www., or an IDN (münchen.de) are accepted and normalized to its registrable form.","on_invalid":"reject","example":"example-login.com","aliases":["url","host"]},{"name":"families","type":"array","required":false,"description":"Which typosquat permutation families to generate (comma-separated or array). Defaults to ALL 16 (meets/exceeds dnstwist): omission, repetition, transposition, replacement, insertion, vowel_swap, homoglyph, bitsquatting, hyphenation, addition, subdomain, tld_swap, combosquat, plural, homophones, various. Unknown names are ignored.","on_invalid":"ignore","allowed_values":[{"value":"omission","label":"omission"},{"value":"repetition","label":"repetition"},{"value":"transposition","label":"transposition"},{"value":"replacement","label":"replacement"},{"value":"insertion","label":"insertion"},{"value":"vowel_swap","label":"vowel_swap"},{"value":"homoglyph","label":"homoglyph"},{"value":"bitsquatting","label":"bitsquatting"},{"value":"hyphenation","label":"hyphenation"},{"value":"addition","label":"addition"},{"value":"subdomain","label":"subdomain"},{"value":"tld_swap","label":"tld_swap"},{"value":"combosquat","label":"combosquat"},{"value":"plural","label":"plural"},{"value":"homophones","label":"homophones"},{"value":"various","label":"various"}],"example":"homoglyph,replacement,tld_swap"},{"name":"keywords","type":"array","required":false,"description":"Additional keywords to include in the combosquat permutation family (e.g. your product name or campaign terms like 'checkout', 'wallet'). Combined with the built-in phishing keyword set (login, secure, verify…).","on_invalid":"ignore","example":"login,verify,wallet"},{"name":"check_registered","type":"boolean","required":false,"description":"If true (default), RDAP/DoH-check which generated lookalikes are actually registered (capped at 120 checks). False → return candidates only.","on_invalid":"ignore","default":true,"example":true}],"returns":"brand, generated, checked, registered_count, high_risk_count, registered[] (domain, family, risk, method; high-risk first), by_family{}, families[], note","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"paypal.com","families":"homoglyph,replacement,omission"}},{"name":"reputation","description":"Registrar / nameserver / age / mail-hygiene (SPF·DMARC·DNSSEC) trust signals → a 0-100 reputation_score + trust_level. Reputation is a positive-trust lens (vs assess's risk lens).","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"A full domain to evaluate (e.g. example.com, secure-login.io). A bare host, full URL, leading www., or an IDN (münchen.de) are accepted and normalized to its registrable form.","on_invalid":"reject","example":"example-login.com","aliases":["url","host"]}],"returns":"domain, registered, reputation_score (0-100), trust_level (high|medium|low), registrar, nameserver_provider, dnssec, age_years, mail{mx,spf,dmarc}, impersonation, signals[]","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"batch","description":"Risk-assess up to 50 domains in one call (RDAP + DNS + email hygiene scoring, no per-domain parked-page probe). Returns a risk verdict per domain plus a combined high-risk list — ideal for bulk fraud screening.","required_params":["domains"],"optional_params":[],"params":[{"name":"domains","type":"array","required":true,"description":"A list of full domains to risk-assess at once (comma-separated string or array). Capped at 50; invalid entries reported under 'invalid'.","on_invalid":"reject","example":"example.com,secure-paypa1.com,g00gle.com"}],"returns":"results[] (per-domain risk verdict), high_risk[], high_risk_count, checked, invalid[] (rejected inputs)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"domains":"google.com,g00gle.com"}}]},{"name":"donanimhaber","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"DonanımHaber Forum API — search, read and monitor Turkey's largest technology forum (forum.donanimhaber.com, active since 2001, ~700 sections). Keyword search across every post, full topic detail (opening post, author, dates, view/reply counts and replies), paginated section listings, and the section directory — clean JSON, Turkish text intact, no login.","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/donanimhaber/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword-search every post on DonanımHaber Forum — the site's own search index, not a page scrape. Returns the matching post's title, excerpt, section, author-visible timestamp and a deep link to the exact message. Filter to opening posts only (topic search), to one section, or to one thread; sort by recency or relevance. Ideal for Turkish-market demand signals, product mentions and support chatter.","required_params":["query"],"optional_params":["search_in","match","sort","first_post_only","section","topic","posted_within","limit","page"],"params":[{"name":"query","type":"string","required":true,"description":"Turkish (or English) keyword(s) to find in DonanımHaber Forum posts — e.g. 'veri çekme', 'ekran kartı', 'RTX 5090'. Turkish characters (ı ş ğ ç ö ü) are sent through unchanged.","on_invalid":"ignore","example":"veri çekme programı","aliases":["q","keyword","search","term"]},{"name":"search_in","type":"enum","required":false,"description":"Where to look. 'all' searches title AND body and is very broad (the site stems Turkish words, so 'veri' also matches 'verimli'). Use 'title' when you want precision — measured 204 title hits vs 19 541 all-field hits for the same query.","on_invalid":"ignore","allowed_values":[{"value":"all","label":"Title and post body (default)"},{"value":"title","label":"Topic title only — far more precise"},{"value":"body","label":"Post body only"}],"default":"all","example":"title","aliases":["in","field"]},{"name":"match","type":"enum","required":false,"description":"How the words are combined: 'both' = every word (any order), 'any' = at least one word, 'exact' = the phrase as typed.","on_invalid":"ignore","allowed_values":[{"value":"both","label":"All words, in any order (default)"},{"value":"any","label":"Any of the words"},{"value":"exact","label":"The exact phrase"}],"default":"both","example":"exact","aliases":["type","match_mode"]},{"name":"sort","type":"enum","required":false,"description":"Result order. 'date' (newest first) is the freshness feed; 'rank' is best-match first.","on_invalid":"ignore","allowed_values":[{"value":"date","label":"Newest first (default)"},{"value":"date_asc","label":"Oldest first"},{"value":"rank","label":"Best relevance match first"}],"default":"date","example":"rank","aliases":["order","order_by"]},{"name":"first_post_only","type":"boolean","required":false,"description":"Match only the OPENING post of each thread instead of every reply. Turns a noisy message search into a topic search — good for lead/demand hunting ('who is ASKING for this?').","on_invalid":"ignore","default":false,"example":true,"aliases":["opening_posts_only","scope"]},{"name":"section","type":"string","required":false,"description":"A forum section: the numeric id (2770), 'f2770', the section URL, or the '<slug>--f2770' slug. Use the `sections` action to find ids by name, or read `section_id` off any `search` hit.","on_invalid":"ignore","example":"2770","aliases":["section_id","forum","forum_id","f"]},{"name":"topic","type":"string","required":false,"description":"The topic: numeric topic id (163852334), the full topic URL, or the '<slug>--<id>' slug. All three resolve to the same thread.","on_invalid":"ignore","example":"163852334","aliases":["topic_id","id","url"]},{"name":"posted_within","type":"enum","required":false,"description":"Keep only posts newer than this. NOTE: the upstream search's own date-range field is a no-op (measured: identical totals for every value), so this filter is applied by us over a newest-first result stream — `total_matches` still reports the unfiltered upstream total, and `returned` reports what survived.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"Last 24 hours"},{"value":"3d","label":"Last 3 days"},{"value":"7d","label":"Last 7 days"},{"value":"30d","label":"Last 30 days"},{"value":"90d","label":"Last 90 days"},{"value":"365d","label":"Last year"}],"example":"7d","aliases":["freshness","since"]},{"name":"limit","type":"integer","required":false,"description":"How many posts to return (1–100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["max_results","count"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (1–1000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000,"aliases":["sayfa","p","offset_page"]},{"name":"search_offline","type":"boolean","required":false,"description":"Skip the site's search host (which is crawler-disallowed by its own robots.txt) and keyword-filter a robots-ALLOWED section listing instead. Requires `section`. Narrower coverage, fully robots-clean.","on_invalid":"ignore","default":false,"example":true}],"returns":"results[]{message_id, topic_id, is_opening_post, title, excerpt, matched_words[], section, section_id, posted_at, posted_label, url, topic_url, other_matches_in_topic[]}, total_matches, returned, page, pages_available, did_you_mean","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ekran kartı","search_in":"title","limit":10}},{"name":"topic","description":"Full detail for one DonanımHaber Forum thread: title, the complete opening post as clean text, the author (public handle, profile, staff title, lifetime post count), published/last-updated timestamps, the section it lives in, view / post / like counts, and the replies on the requested page with their own authors, timestamps and like counts.","required_params":["topic"],"optional_params":["page"],"params":[{"name":"topic","type":"string","required":true,"description":"The topic: numeric topic id (163852334), the full topic URL, or the '<slug>--<id>' slug. All three resolve to the same thread.","on_invalid":"ignore","example":"163852334","aliases":["topic_id","id","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (1–5000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":5000,"aliases":["sayfa","p","offset_page"]}],"returns":"topic{topic_id, title, body, author{name,profile_url,title,total_posts}, posted_at, updated_at, section, section_id, breadcrumb[], view_count, post_count, reply_count, like_count, page, pages_available, language, url}, replies[]{message_id, author, posted_at, text, likes, url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"topic":"163852334"}},{"name":"section","description":"List the topics in one DonanımHaber Forum section, newest activity first, with pagination (65 topics per page). Each row carries the title, the site's own opening-post teaser, the thread starter, reply and view counts, and the last-post timestamp — enough to monitor a section without opening a single thread.","required_params":["section"],"optional_params":["page","limit","query","posted_within","include_sticky"],"params":[{"name":"section","type":"string","required":true,"description":"A forum section: the numeric id (2770), 'f2770', the section URL, or the '<slug>--f2770' slug. Use the `sections` action to find ids by name, or read `section_id` off any `search` hit.","on_invalid":"ignore","example":"2770","aliases":["section_id","forum","forum_id","f"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (1–5000).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":5000,"aliases":["sayfa","p","offset_page"]},{"name":"limit","type":"integer","required":false,"description":"How many topics to return (1–65, default 65).","on_invalid":"ignore","default":65,"example":65,"minimum":1,"maximum":65,"aliases":["max_results","count"]},{"name":"query","type":"string","required":false,"description":"Optional client-side keyword filter over the titles/teasers on this page.","on_invalid":"ignore","example":"python","aliases":["q","filter"]},{"name":"posted_within","type":"enum","required":false,"description":"Keep only posts newer than this. NOTE: the upstream search's own date-range field is a no-op (measured: identical totals for every value), so this filter is applied by us over a newest-first result stream — `total_matches` still reports the unfiltered upstream total, and `returned` reports what survived.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"Last 24 hours"},{"value":"3d","label":"Last 3 days"},{"value":"7d","label":"Last 7 days"},{"value":"30d","label":"Last 30 days"},{"value":"90d","label":"Last 90 days"},{"value":"365d","label":"Last year"}],"example":"7d","aliases":["freshness","since"]},{"name":"include_sticky","type":"boolean","required":false,"description":"Include the section's pinned/announcement topics (they are not sorted by recency).","on_invalid":"ignore","default":true,"example":false}],"returns":"topics[]{topic_id, title, preview, author{name,profile_url}, reply_count, view_count, last_post_at, last_post_label, last_post_author, sticky, url}, section{id, name, description, breadcrumb[]}, returned, page, has_next_page","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"section":"2770","limit":20}},{"name":"sections","description":"The DonanımHaber Forum section directory — every public section with its numeric id, name and URL, optionally filtered by name. Use it to resolve a topic area ('SEO', 'yazılım', 'ekran kartı') to the `section` id that `search` and `section` take.","required_params":[],"optional_params":["query","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Filter sections whose name or slug contains this text (accent/case-insensitive). Omit for the full directory.","on_invalid":"ignore","example":"seo","aliases":["q","name","filter"]},{"name":"limit","type":"integer","required":false,"description":"How many sections to return (1–800, default 120).","on_invalid":"ignore","default":120,"example":120,"minimum":1,"maximum":800,"aliases":["max_results","count"]}],"returns":"sections[]{id, name, slug, description, url}, returned, total_available","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"seo","limit":20}}]},{"name":"donedeal","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"DoneDeal Ireland listings","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/donedeal/v1","spec_available":true,"actions":[{"name":"search","description":"Search published Ireland classifieds","required_params":[],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search words, 1–160 characters","on_invalid":"reject","example":"tractor"},{"name":"start","type":"integer","required":false,"description":"Native result offset; shallow paging qualified","on_invalid":"reject","default":0,"example":3,"minimum":0,"maximum":300},{"name":"limit","type":"integer","required":false,"description":"Regular result batch; source may additionally return promoted listings","on_invalid":"reject","default":10,"example":3,"minimum":1,"maximum":30}],"returns":"items, source total and next_start; promoted rows explicitly marked","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"tractor","limit":3}},{"name":"listing","description":"Published listing detail by search ID","required_params":[],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Numeric ID returned by search","on_invalid":"reject","example":"38010879"}],"returns":"Source identity, asking price, description, location, photos, attributes and available seller fields","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"38010879"}}]},{"name":"dongchedi","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Dongchedi API — live Chinese used-car listings scraper (懂车帝二手车, ByteDance): search by city, brand, series, price, registration year, mileage, fuel, gearbox, body type, size class, displacement, drivetrain, emission standard and origin; full listing detail with price in CNY, new-car price, mileage in km, registration month, transfer count, dealer, every photo, specs, a price-vs-market analysis and the full third-party inspection report — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dongchedi/v1","spec_available":true,"actions":[{"name":"search","description":"Search Dongchedi's live used-car inventory (懂车帝二手车). Filter by city, brand, series, price band, registration year, mileage, fuel, gearbox, vehicle type, size class, displacement, drivetrain, emission standard, origin, inspection report, then sort and page. Each row has price in CNY (and 万), new-car price, mileage in km, first-registration year, the car's city, transfer count, dealer id, photo and tags. Dongchedi's own `total` stops counting at 10 000 (`total_capped: true`), and paging stops at page × limit = 10 000 — narrow the filter to go deeper. There is no free-text keyword search on Dongchedi's used-car API: use `brand_id`/`series_id` (from `brands`/`series`).","required_params":[],"optional_params":["city","brand_id","series_id","min_price","max_price","min_year","max_year","min_mileage_km","max_mileage_km","fuel","gearbox","vehicle_type","size_class","displacement","drivetrain","emission_standard","origin","with_inspection_report","dongchedi_operated","sort","page","limit"],"params":[{"name":"city","type":"string","required":false,"description":"City to search, as Dongchedi names it in Chinese ('北京', '上海', '成都'); common pinyin/English names ('beijing', 'shanghai') are mapped. Default '全国' = nationwide. Call `cities` for the full list (371).","on_invalid":"reject","default":"全国","example":"北京","aliases":["area","location","market"]},{"name":"brand_id","type":"integer","required":false,"description":"Dongchedi brand id (2 = 奥迪 Audi, 3 = 奔驰 Mercedes, 4 = 宝马 BMW) — from `brands`.","on_invalid":"reject","example":2,"minimum":1,"aliases":["brand"]},{"name":"series_id","type":"integer","required":false,"description":"Model series id (99 = 奥迪A6L) — from `series`.","on_invalid":"reject","example":99,"minimum":1,"aliases":["series","model_id"]},{"name":"min_price","type":"number","required":false,"description":"Minimum asking price in 万元 (10 000 CNY) — Dongchedi's own unit. Dongchedi only honours whole 万, so a decimal is rounded down; the applied band is echoed.","on_invalid":"ignore","example":5,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum asking price in 万元. Rounded up to a whole 万.","on_invalid":"ignore","example":20,"minimum":0,"aliases":["price_max"]},{"name":"min_year","type":"integer","required":false,"description":"Earliest first-registration year (converted to Dongchedi's vehicle-age filter, whole years).","on_invalid":"ignore","minimum":1990,"maximum":2100,"aliases":["year_min"]},{"name":"max_year","type":"integer","required":false,"description":"Latest first-registration year.","on_invalid":"ignore","minimum":1990,"maximum":2100,"aliases":["year_max"]},{"name":"min_mileage_km","type":"integer","required":false,"description":"Mileage floor in km (Dongchedi filters in 10 000 km steps; rounded down, echoed in filters_applied).","on_invalid":"ignore","minimum":0,"aliases":["mileage_min"]},{"name":"max_mileage_km","type":"integer","required":false,"description":"Mileage ceiling in km (rounded up to 10 000 km).","on_invalid":"ignore","example":60000,"minimum":0,"aliases":["mileage_max"]},{"name":"fuel","type":"array","required":false,"description":"Fuel / energy type; several may be combined.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol (汽油)"},{"value":"diesel","label":"Diesel (柴油)"},{"value":"hybrid","label":"Hybrid (油电混合)"},{"value":"electric","label":"Battery electric (纯电动)"},{"value":"range_extender","label":"Range-extender EV (增程式)"},{"value":"plug_in_hybrid","label":"Plug-in hybrid (插电式混合动力)"},{"value":"mild_hybrid_48v","label":"Petrol + 48V mild hybrid"}],"aliases":["fuel_type","energy"]},{"name":"gearbox","type":"enum","required":false,"description":"Transmission.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual (手动)"},{"value":"automatic","label":"Automatic (自动)"}],"aliases":["transmission"]},{"name":"vehicle_type","type":"enum","required":false,"description":"Vehicle type (Dongchedi's 级别).","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"sedan"},{"value":"suv","label":"suv"},{"value":"mpv","label":"mpv"},{"value":"pickup","label":"pickup"},{"value":"sports_car","label":"sports car"},{"value":"light_bus","label":"light bus"},{"value":"microvan","label":"microvan"},{"value":"mini_truck","label":"mini truck"},{"value":"light_truck","label":"light truck"}],"aliases":["body_type","level"]},{"name":"size_class","type":"enum","required":false,"description":"Size segment (Dongchedi's 车系细分), e.g. compact_suv.","on_invalid":"reject","allowed_values":[{"value":"mini","label":"mini"},{"value":"small","label":"small"},{"value":"compact","label":"compact"},{"value":"midsize","label":"midsize"},{"value":"large","label":"large"},{"value":"full_size","label":"full size"},{"value":"small_suv","label":"small suv"},{"value":"compact_suv","label":"compact suv"},{"value":"midsize_suv","label":"midsize suv"},{"value":"large_suv","label":"large suv"},{"value":"full_size_suv","label":"full size suv"},{"value":"small_mpv","label":"small mpv"},{"value":"compact_mpv","label":"compact mpv"},{"value":"midsize_mpv","label":"midsize mpv"},{"value":"large_mpv","label":"large mpv"},{"value":"mini_pickup","label":"mini pickup"},{"value":"midsize_pickup","label":"midsize pickup"},{"value":"full_size_pickup","label":"full size pickup"},{"value":"heavy_pickup","label":"heavy pickup"},{"value":"super_heavy_pickup","label":"super heavy pickup"}],"aliases":["segment"]},{"name":"displacement","type":"enum","required":false,"description":"Engine displacement band in litres.","on_invalid":"reject","allowed_values":[{"value":"<=1.0","label":"1.0 L and under"},{"value":"1.1-1.6","label":"1.1-1.6"},{"value":"1.7-2.0","label":"1.7-2.0"},{"value":"2.1-2.5","label":"2.1-2.5"},{"value":"2.6-3.0","label":"2.6-3.0"},{"value":"3.1-4.0","label":"3.1-4.0"},{"value":">4.0","label":"over 4.0 L"}]},{"name":"drivetrain","type":"enum","required":false,"description":"Driven wheels.","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"Front-wheel drive (前驱)"},{"value":"rwd","label":"Rear-wheel drive (后驱)"},{"value":"awd","label":"Four-wheel drive (四驱)"}]},{"name":"emission_standard","type":"enum","required":false,"description":"China emission standard.","on_invalid":"reject","allowed_values":[{"value":"china4","label":"China IV (国四)"},{"value":"china5","label":"China V (国五)"},{"value":"china6","label":"China VI (国六)"}],"aliases":["emission"]},{"name":"origin","type":"enum","required":false,"description":"Manufacturer type (Dongchedi's 厂商属性).","on_invalid":"reject","allowed_values":[{"value":"joint_venture","label":"Joint venture (合资)"},{"value":"domestic","label":"Chinese own brand (自主)"},{"value":"joint_venture_own_brand","label":"JV own brand (合资自主)"},{"value":"imported","label":"Imported (进口)"}],"aliases":["manufacturer_type"]},{"name":"with_inspection_report","type":"boolean","required":false,"description":"Only cars with a third-party inspection report.","on_invalid":"ignore","default":false,"aliases":["inspected"]},{"name":"dongchedi_operated","type":"boolean","required":false,"description":"Only Dongchedi's own used-car business (懂懂二手车).","on_invalid":"ignore","default":false},{"name":"sort","type":"enum","required":false,"description":"Ordering. `price_asc` needs a city: nationwide, Dongchedi answers it with zero rows (measured).","on_invalid":"reject","allowed_values":[{"value":"default","label":"Dongchedi default"},{"value":"newest_listing","label":"Newest listing first (最新上架)"},{"value":"price_asc","label":"Cheapest first (needs a city)"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest_car","label":"Youngest car first (车龄由低到高)"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Result page (page × limit stops at 10 000).","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-80 (Dongchedi serves at most 80).","on_invalid":"ignore","default":40,"minimum":1,"maximum":80}],"returns":"results[]{listing_id, spu_id, url, title, brand, brand_id, series, series_id, spec_id, trim_name, model_year, price_cny, price_wan_cny, new_car_price_cny, new_car_price_wan_cny, new_car_price_display, mileage_km, mileage_wan_km, first_registration, year, is_registered, subtitle, city, registration_city, seller_type, seller_type_raw, certification, transfer_count, dealer_id, image, has_video, tags[], is_self_trade} + pagination{page, per_page, total, total_capped, has_more} + filters_applied","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":20}},{"name":"car_detail","description":"Everything Dongchedi publishes about one used car: price in CNY (and 万), new-car guide price incl. and excl. purchase tax, mileage in km, registration month, car age, transfer count, emission standard, displacement, gearbox, colours, maintenance record type, the car's city and its registration city, dealer (name, address, hours, licence image), power/drivetrain/suspension/dimensions, every photo, the seller's description, Dongchedi's price-vs-market analysis (average/min/max of similar cars) and the full third-party inspection report (accident, flood, fire, core-driving and exterior checks with every defect and its photo). The VIN is not published — `vin` is always null.","required_params":["listing_id"],"optional_params":["include_report"],"params":[{"name":"listing_id","type":"integer","required":true,"description":"Dongchedi listing id (`sku_id`) — the number in a listing URL `dongchedi.com/usedcar/<listing_id>`, returned as `listing_id` by `search`.","on_invalid":"reject","example":35003090,"minimum":1,"aliases":["sku_id","id","car_id"]},{"name":"include_report","type":"boolean","required":false,"description":"Include every inspection item (often 100+ rows). The summary and the defect list are always returned; false only trims the payload — it is the same upstream call.","on_invalid":"ignore","default":true}],"returns":"car{listing_id, spu_id, url, title, brand, brand_id, series, series_id, spec_id, trim_name, model_year, price_cny, price_wan_cny, new_car_price_cny, new_car_price_incl_tax_cny, mileage_km, mileage_wan_km, first_registration, year, car_age, city, registration_city, transfer_count, emission_standard, displacement, gearbox, maintenance_record, color, interior_color, headline, seller_type, dealer_id, dealer{dealer_id, name, short_name, city, address, business_hours, sells_to, cars_on_sale, phone, logo, business_license_image}, specs{horsepower, acceleration_0_100, fuel_type, gearbox, drivetrain, suspension, dimensions_mm}, photos[], photo_count, description, highlights, tags[], price_analysis{verdict, similar/same-year/similar-mileage avg/min/max price CNY + counts, popularity}, finance{down_payment_cny, monthly_payment_cny, term_months}, params[], vin (always null — not published), vin_published} + condition{report_published, report_type, summary[]{category, items_checked, defects}, defect_count, defects[]{category, group, part, finding, photos[]}, items[]{category, group, item, result, abnormal}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":35003090}},{"name":"brands","description":"Every car brand Dongchedi knows, with the `brand_id` that `search` and `series` take, its Chinese name, pinyin initial and logo.","required_params":[],"optional_params":["letter"],"params":[{"name":"letter","type":"string","required":false,"description":"Only brands under this pinyin initial (A-Z).","on_invalid":"ignore","example":"B","value_pattern":"^[A-Za-z]$"}],"returns":"brands[]{brand_id, name, letter, logo, new_car_series_on_sale}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"letter":"B"}},{"name":"series","description":"The model series of one brand that have used cars on Dongchedi, with the `series_id` that `search` takes.","required_params":["brand_id"],"optional_params":["city"],"params":[{"name":"brand_id","type":"integer","required":true,"description":"Brand id from `brands`.","on_invalid":"reject","example":2,"minimum":1,"aliases":["brand"]},{"name":"city","type":"string","required":false,"description":"Limit to series with stock in this city (Chinese name); default nationwide.","on_invalid":"reject","default":"全国","example":"全国"}],"returns":"brand_id + series[]{series_id, name, image}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"brand_id":2}},{"name":"cities","description":"All cities Dongchedi's used-car search accepts (Chinese names, the value `search`'s `city` takes) with their pinyin initial.","required_params":[],"optional_params":[],"params":[],"returns":"cities[]{name, initial}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"dorasuta","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Dorasuta (Dragon Star) API - Japanese trading-card shop: selling price per condition (状態A / 状態C) with stock, and buy-back (買取) price, for Pokémon, Yu-Gi-Oh!, One Piece, Duel Masters, MTG, Weiß Schwarz, Digimon, Lorcana and 23 more games; card search with set, rarity, stock, sale and sort filters, item detail, buy-back list, set lists. JPY, Japanese names. No account.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/dorasuta/v1","spec_available":true,"actions":[{"name":"search","description":"Cards and products for sale at Dorasuta in one game: name, condition (状態A or the cheaper 状態C play grade), price in JPY, stock count, rarity, shop product code, card number, set and image. Filter by keyword, set, rarity, in-stock, or one of the shop's listings (sale, damaged bargains, new releases, price reduced, collector); sort by rarity, price or name; 40 rows a page.","required_params":["game"],"optional_params":["query","set_id","rarity","in_stock_only","sort","feature","page"],"params":[{"name":"game","type":"enum","required":true,"description":"Card game, as the shop's own path name (pokemon-card, yugioh-jp, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, ...). Short names such as pokemon, yugioh, onepiece, lorcana are accepted too.","on_invalid":"reject","allowed_values":[{"value":"pokemon-card","label":"ポケモンカード (Pokémon TCG)"},{"value":"yugioh-jp","label":"遊戯王 (Yu-Gi-Oh! OCG)"},{"value":"yugioh-rushduel","label":"遊戯王 ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece-cardgame","label":"ONE PIECEカードゲーム (One Piece Card Game)"},{"value":"mtg","label":"マジック：ザ・ギャザリング (Magic: The Gathering)"},{"value":"duelmasters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss-schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカード (Digimon Card Game)"},{"value":"disneylorcana","label":"ロルカナ (Disney Lorcana)"},{"value":"union-arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"hololive-official-cardgame","label":"ホロライブ (hololive OFFICIAL CARD GAME)"},{"value":"gundam-gcg","label":"ガンダムＣＧ (Gundam Card Game)"},{"value":"gundam-ab","label":"ガンダムアーセナルベース (Gundam Arsenal Base)"},{"value":"dbs-cardgame-fw","label":"ドラゴンボールスーパーカードゲームフュージョンワールド (Dragon Ball Super Fusion World)"},{"value":"dbsdv","label":"ドラゴンボールスーパーダイバーズ (Dragon Ball Super Divers)"},{"value":"battlespirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"shadowverse-evolve","label":"シャドウバースエボルヴ (Shadowverse: Evolve)"},{"value":"wixoss","label":"ウィクロス (WIXOSS)"},{"value":"ultraman-cardgame","label":"ウルトラマンカードゲーム (Ultraman Card Game)"},{"value":"acgtcg","label":"ＡＣＧ (ACG TCG)"},{"value":"build-divide","label":"ビルディバイド (Build Divide)"},{"value":"mushijingi","label":"蟲神器 (Mushi Jingi)"},{"value":"xross-stars","label":"クロススターズ (Xross Stars)"},{"value":"conan-cardgame","label":"名探偵コナン (Detective Conan TCG)"},{"value":"haikyuvobacabreak","label":"ハイキュー！！バボカ！！BREAK (Haikyu!! VoBaCa!! BREAK)"},{"value":"palworld-official-cardgame","label":"パルワールドオフィシャルカードゲーム (Palworld Official Card Game)"},{"value":"llofficial-cardgame","label":"ラブライブ (Love Live! Official Card Game)"},{"value":"ijinden","label":"イジンデン (Ijinden)"},{"value":"senkaisengi","label":"千怪戦戯 (Senkai Sengi)"},{"value":"horobeat-cardgame","label":"ホロビート (Holobeat)"},{"value":"tcg","label":"新品商品 (Sealed products (all games))"}],"example":"pokemon-card"},{"name":"query","type":"string","required":false,"description":"Keyword as typed into the shop's search box: card name in Japanese (or part of it), or the printed card number the shop puts in the name (136/106, OP05-119). The shop's own product code (型番, PN136106) is NOT searchable.","on_invalid":"reject","example":"ピカチュウ","aliases":["q","keyword","kw","name"]},{"name":"set_id","type":"string","required":false,"description":"Limit to one set (expansion): the set_id from the sets action, e.g. 7042 = 【SV2a】ポケモンカード151.","on_invalid":"reject","example":"7042","aliases":["sid","set","series_id"]},{"name":"rarity","type":"string","required":false,"description":"Rarity as the shop labels it for that game (SAR, UR, SR, AR, シークレット, スーパー, ...). The list is per game and is returned as rarity_options.","on_invalid":"reject","example":"SAR"},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only lots with stock (the shop's 在庫あり checkbox).","on_invalid":"reject","default":false,"example":true,"aliases":["in_stock"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"rarity_desc","label":"Rarity, highest first (shop default)"},{"value":"rarity_asc","label":"Rarity, lowest first"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"name_asc","label":"Name (Japanese order) A→Z"},{"value":"name_desc","label":"Name (Japanese order) Z→A"}],"default":"rarity_desc","example":"price_asc"},{"name":"feature","type":"enum","required":false,"description":"One of the shop's own listings.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"SALE: discounted lots"},{"value":"damaged","label":"傷アリ特価: damaged-copy bargains"},{"value":"new","label":"新弾: newest releases"},{"value":"recommended","label":"おすすめ: shop picks"},{"value":"price_down","label":"値下げ: price reduced"},{"value":"collector","label":"コレクター向け: high-value / collector"}],"example":"sale"},{"name":"page","type":"integer","required":false,"description":"Result page; 40 rows per page.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500}],"returns":"game, query, filters{}, results[]{product_id, offer_id (the lot: one product per condition), game, name, title (as printed, 【プレイ用】 prefix kept), condition (状態A | 状態C), play_grade, real_photo, rarity, model_number (shop code), card_number (from the name, e.g. 136/106; null when the name has none), image, url, price_jpy, stock, in_stock, sold_out}, count, total_results, page, page_size (40), total_pages, has_more, rarity_options[]{id, label}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon-card","query":"ピカチュウ"}},{"name":"card","description":"One product: every condition lot with its price and stock, set, rarity, product code, card number, description, image, and what Dorasuta pays for it (buy-back price per condition and the most it takes), from the sale and buy-back shops in one call.","required_params":["product_id"],"optional_params":["game","include_buyback"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product id from a search row (product_id), or a dorasuta.jp / buy.dorasuta.jp product URL.","on_invalid":"reject","example":"570527","aliases":["pid","id","url"]},{"name":"game","type":"enum","required":false,"description":"Card game (pokemon-card, yugioh-jp, ...). Optional when product_id is a dorasuta.jp URL; defaults to pokemon-card otherwise.","on_invalid":"reject","allowed_values":[{"value":"pokemon-card","label":"ポケモンカード (Pokémon TCG)"},{"value":"yugioh-jp","label":"遊戯王 (Yu-Gi-Oh! OCG)"},{"value":"yugioh-rushduel","label":"遊戯王 ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece-cardgame","label":"ONE PIECEカードゲーム (One Piece Card Game)"},{"value":"mtg","label":"マジック：ザ・ギャザリング (Magic: The Gathering)"},{"value":"duelmasters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss-schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカード (Digimon Card Game)"},{"value":"disneylorcana","label":"ロルカナ (Disney Lorcana)"},{"value":"union-arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"hololive-official-cardgame","label":"ホロライブ (hololive OFFICIAL CARD GAME)"},{"value":"gundam-gcg","label":"ガンダムＣＧ (Gundam Card Game)"},{"value":"gundam-ab","label":"ガンダムアーセナルベース (Gundam Arsenal Base)"},{"value":"dbs-cardgame-fw","label":"ドラゴンボールスーパーカードゲームフュージョンワールド (Dragon Ball Super Fusion World)"},{"value":"dbsdv","label":"ドラゴンボールスーパーダイバーズ (Dragon Ball Super Divers)"},{"value":"battlespirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"shadowverse-evolve","label":"シャドウバースエボルヴ (Shadowverse: Evolve)"},{"value":"wixoss","label":"ウィクロス (WIXOSS)"},{"value":"ultraman-cardgame","label":"ウルトラマンカードゲーム (Ultraman Card Game)"},{"value":"acgtcg","label":"ＡＣＧ (ACG TCG)"},{"value":"build-divide","label":"ビルディバイド (Build Divide)"},{"value":"mushijingi","label":"蟲神器 (Mushi Jingi)"},{"value":"xross-stars","label":"クロススターズ (Xross Stars)"},{"value":"conan-cardgame","label":"名探偵コナン (Detective Conan TCG)"},{"value":"haikyuvobacabreak","label":"ハイキュー！！バボカ！！BREAK (Haikyu!! VoBaCa!! BREAK)"},{"value":"palworld-official-cardgame","label":"パルワールドオフィシャルカードゲーム (Palworld Official Card Game)"},{"value":"llofficial-cardgame","label":"ラブライブ (Love Live! Official Card Game)"},{"value":"ijinden","label":"イジンデン (Ijinden)"},{"value":"senkaisengi","label":"千怪戦戯 (Senkai Sengi)"},{"value":"horobeat-cardgame","label":"ホロビート (Holobeat)"},{"value":"tcg","label":"新品商品 (Sealed products (all games))"}],"example":"pokemon-card"},{"name":"include_buyback","type":"boolean","required":false,"description":"Also read the buy-back price (one more page). false = selling side only.","on_invalid":"reject","default":true,"example":false}],"returns":"product_id, game, name, card_number, set{id, name, code}, rarity, model_number, description, image, url, offers[]{offer_id, condition (状態A | 状態C), price_jpy, stock, in_stock}, price_jpy (lowest in-stock price, else the lowest listed), stock (total), in_stock, availability (schema.org), buyback{available, offers[]{offer_id, condition, buyback_price_jpy, buy_limit}, url}, buyback_price_jpy (highest buy price; null when the shop does not buy this card)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"570527","game":"pokemon-card"}},{"name":"buyback_search","description":"What Dorasuta pays for cards (買取 prices) in one game: name, buy-back price in JPY, the most it takes per order, rarity, product code, card number. Filter by keyword, set or rarity; sort by buy price; 40 rows a page.","required_params":["game"],"optional_params":["query","set_id","rarity","sort","page"],"params":[{"name":"game","type":"enum","required":true,"description":"Card game, as the shop's own path name (pokemon-card, yugioh-jp, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, ...). Short names such as pokemon, yugioh, onepiece, lorcana are accepted too.","on_invalid":"reject","allowed_values":[{"value":"pokemon-card","label":"ポケモンカード (Pokémon TCG)"},{"value":"yugioh-jp","label":"遊戯王 (Yu-Gi-Oh! OCG)"},{"value":"yugioh-rushduel","label":"遊戯王 ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece-cardgame","label":"ONE PIECEカードゲーム (One Piece Card Game)"},{"value":"mtg","label":"マジック：ザ・ギャザリング (Magic: The Gathering)"},{"value":"duelmasters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss-schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカード (Digimon Card Game)"},{"value":"disneylorcana","label":"ロルカナ (Disney Lorcana)"},{"value":"union-arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"hololive-official-cardgame","label":"ホロライブ (hololive OFFICIAL CARD GAME)"},{"value":"gundam-gcg","label":"ガンダムＣＧ (Gundam Card Game)"},{"value":"gundam-ab","label":"ガンダムアーセナルベース (Gundam Arsenal Base)"},{"value":"dbs-cardgame-fw","label":"ドラゴンボールスーパーカードゲームフュージョンワールド (Dragon Ball Super Fusion World)"},{"value":"dbsdv","label":"ドラゴンボールスーパーダイバーズ (Dragon Ball Super Divers)"},{"value":"battlespirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"shadowverse-evolve","label":"シャドウバースエボルヴ (Shadowverse: Evolve)"},{"value":"wixoss","label":"ウィクロス (WIXOSS)"},{"value":"ultraman-cardgame","label":"ウルトラマンカードゲーム (Ultraman Card Game)"},{"value":"acgtcg","label":"ＡＣＧ (ACG TCG)"},{"value":"build-divide","label":"ビルディバイド (Build Divide)"},{"value":"mushijingi","label":"蟲神器 (Mushi Jingi)"},{"value":"xross-stars","label":"クロススターズ (Xross Stars)"},{"value":"conan-cardgame","label":"名探偵コナン (Detective Conan TCG)"},{"value":"haikyuvobacabreak","label":"ハイキュー！！バボカ！！BREAK (Haikyu!! VoBaCa!! BREAK)"},{"value":"palworld-official-cardgame","label":"パルワールドオフィシャルカードゲーム (Palworld Official Card Game)"},{"value":"llofficial-cardgame","label":"ラブライブ (Love Live! Official Card Game)"},{"value":"ijinden","label":"イジンデン (Ijinden)"},{"value":"senkaisengi","label":"千怪戦戯 (Senkai Sengi)"},{"value":"horobeat-cardgame","label":"ホロビート (Holobeat)"},{"value":"tcg","label":"新品商品 (Sealed products (all games))"}],"example":"pokemon-card"},{"name":"query","type":"string","required":false,"description":"Keyword as typed into the shop's search box: card name in Japanese (or part of it), or the printed card number the shop puts in the name (136/106, OP05-119). The shop's own product code (型番, PN136106) is NOT searchable.","on_invalid":"reject","example":"ピカチュウ","aliases":["q","keyword","kw","name"]},{"name":"set_id","type":"string","required":false,"description":"Limit to one set (expansion): the set_id from the sets action, e.g. 7042 = 【SV2a】ポケモンカード151.","on_invalid":"reject","example":"7042","aliases":["sid","set","series_id"]},{"name":"rarity","type":"string","required":false,"description":"Rarity as the shop labels it for that game (SAR, UR, SR, AR, シークレット, スーパー, ...). The list is per game and is returned as rarity_options.","on_invalid":"reject","example":"SAR"},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"standard","label":"Shop order"},{"value":"price_asc","label":"Buy price, lowest first"},{"value":"price_desc","label":"Buy price, highest first"}],"default":"standard","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Result page; 40 rows per page.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500}],"returns":"game, query, filters{}, results[]{product_id, offer_id (the lot: one product per condition), game, name, title (as printed, 【プレイ用】 prefix kept), condition (状態A | 状態C), play_grade, real_photo, rarity, model_number (shop code), card_number (from the name, e.g. 136/106; null when the name has none), image, url, buyback_price_jpy, buy_limit (the most the shop takes in one order)}}, count, total_results, page, page_size, total_pages, has_more, rarity_options[]","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon-card","query":"ピカチュウ"}},{"name":"buyback_card","description":"Dorasuta's buy-back offer for one product: price per condition and the most it takes per order, with set, rarity and product code. available=false when the shop is not buying the card.","required_params":["product_id"],"optional_params":["game"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product id from a search row (product_id), or a dorasuta.jp / buy.dorasuta.jp product URL.","on_invalid":"reject","example":"570527","aliases":["pid","id","url"]},{"name":"game","type":"enum","required":false,"description":"Card game (pokemon-card, yugioh-jp, ...). Optional when product_id is a dorasuta.jp URL; defaults to pokemon-card otherwise.","on_invalid":"reject","allowed_values":[{"value":"pokemon-card","label":"ポケモンカード (Pokémon TCG)"},{"value":"yugioh-jp","label":"遊戯王 (Yu-Gi-Oh! OCG)"},{"value":"yugioh-rushduel","label":"遊戯王 ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece-cardgame","label":"ONE PIECEカードゲーム (One Piece Card Game)"},{"value":"mtg","label":"マジック：ザ・ギャザリング (Magic: The Gathering)"},{"value":"duelmasters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss-schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカード (Digimon Card Game)"},{"value":"disneylorcana","label":"ロルカナ (Disney Lorcana)"},{"value":"union-arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"hololive-official-cardgame","label":"ホロライブ (hololive OFFICIAL CARD GAME)"},{"value":"gundam-gcg","label":"ガンダムＣＧ (Gundam Card Game)"},{"value":"gundam-ab","label":"ガンダムアーセナルベース (Gundam Arsenal Base)"},{"value":"dbs-cardgame-fw","label":"ドラゴンボールスーパーカードゲームフュージョンワールド (Dragon Ball Super Fusion World)"},{"value":"dbsdv","label":"ドラゴンボールスーパーダイバーズ (Dragon Ball Super Divers)"},{"value":"battlespirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"shadowverse-evolve","label":"シャドウバースエボルヴ (Shadowverse: Evolve)"},{"value":"wixoss","label":"ウィクロス (WIXOSS)"},{"value":"ultraman-cardgame","label":"ウルトラマンカードゲーム (Ultraman Card Game)"},{"value":"acgtcg","label":"ＡＣＧ (ACG TCG)"},{"value":"build-divide","label":"ビルディバイド (Build Divide)"},{"value":"mushijingi","label":"蟲神器 (Mushi Jingi)"},{"value":"xross-stars","label":"クロススターズ (Xross Stars)"},{"value":"conan-cardgame","label":"名探偵コナン (Detective Conan TCG)"},{"value":"haikyuvobacabreak","label":"ハイキュー！！バボカ！！BREAK (Haikyu!! VoBaCa!! BREAK)"},{"value":"palworld-official-cardgame","label":"パルワールドオフィシャルカードゲーム (Palworld Official Card Game)"},{"value":"llofficial-cardgame","label":"ラブライブ (Love Live! Official Card Game)"},{"value":"ijinden","label":"イジンデン (Ijinden)"},{"value":"senkaisengi","label":"千怪戦戯 (Senkai Sengi)"},{"value":"horobeat-cardgame","label":"ホロビート (Holobeat)"},{"value":"tcg","label":"新品商品 (Sealed products (all games))"}],"example":"pokemon-card"}],"returns":"product_id, game, name, card_number, set{}, rarity, model_number, image, url, available, offers[]{offer_id, condition, buyback_price_jpy, buy_limit}, buyback_price_jpy","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"570527"}},{"name":"sets","description":"Every set (expansion, starter deck, promo group) of one game as Dorasuta files them, with the set_id used by search and buyback_search, the set code (SV2a, OP09, ...) and the group (パック, 構築済みデッキ, プロモ, その他).","required_params":["game"],"optional_params":["side"],"params":[{"name":"game","type":"enum","required":true,"description":"Card game, as the shop's own path name (pokemon-card, yugioh-jp, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, ...). Short names such as pokemon, yugioh, onepiece, lorcana are accepted too.","on_invalid":"reject","allowed_values":[{"value":"pokemon-card","label":"ポケモンカード (Pokémon TCG)"},{"value":"yugioh-jp","label":"遊戯王 (Yu-Gi-Oh! OCG)"},{"value":"yugioh-rushduel","label":"遊戯王 ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece-cardgame","label":"ONE PIECEカードゲーム (One Piece Card Game)"},{"value":"mtg","label":"マジック：ザ・ギャザリング (Magic: The Gathering)"},{"value":"duelmasters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss-schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカード (Digimon Card Game)"},{"value":"disneylorcana","label":"ロルカナ (Disney Lorcana)"},{"value":"union-arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"hololive-official-cardgame","label":"ホロライブ (hololive OFFICIAL CARD GAME)"},{"value":"gundam-gcg","label":"ガンダムＣＧ (Gundam Card Game)"},{"value":"gundam-ab","label":"ガンダムアーセナルベース (Gundam Arsenal Base)"},{"value":"dbs-cardgame-fw","label":"ドラゴンボールスーパーカードゲームフュージョンワールド (Dragon Ball Super Fusion World)"},{"value":"dbsdv","label":"ドラゴンボールスーパーダイバーズ (Dragon Ball Super Divers)"},{"value":"battlespirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"shadowverse-evolve","label":"シャドウバースエボルヴ (Shadowverse: Evolve)"},{"value":"wixoss","label":"ウィクロス (WIXOSS)"},{"value":"ultraman-cardgame","label":"ウルトラマンカードゲーム (Ultraman Card Game)"},{"value":"acgtcg","label":"ＡＣＧ (ACG TCG)"},{"value":"build-divide","label":"ビルディバイド (Build Divide)"},{"value":"mushijingi","label":"蟲神器 (Mushi Jingi)"},{"value":"xross-stars","label":"クロススターズ (Xross Stars)"},{"value":"conan-cardgame","label":"名探偵コナン (Detective Conan TCG)"},{"value":"haikyuvobacabreak","label":"ハイキュー！！バボカ！！BREAK (Haikyu!! VoBaCa!! BREAK)"},{"value":"palworld-official-cardgame","label":"パルワールドオフィシャルカードゲーム (Palworld Official Card Game)"},{"value":"llofficial-cardgame","label":"ラブライブ (Love Live! Official Card Game)"},{"value":"ijinden","label":"イジンデン (Ijinden)"},{"value":"senkaisengi","label":"千怪戦戯 (Senkai Sengi)"},{"value":"horobeat-cardgame","label":"ホロビート (Holobeat)"},{"value":"tcg","label":"新品商品 (Sealed products (all games))"}],"example":"pokemon-card"},{"name":"side","type":"enum","required":false,"description":"Which shop's set list.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Sets of the sale shop"},{"value":"buyback","label":"Sets of the buy-back shop"}],"default":"sale","example":"buyback"}],"returns":"game, side, sets[]{set_id, name, code, group, url}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon-card"}},{"name":"games","description":"The card games Dorasuta sells (31, plus its sealed-product shop) and which of them it buys (buy-back shop), with the game value the other actions take.","required_params":[],"optional_params":[],"params":[],"returns":"games[]{game, name, name_en, sale, buyback, sale_url, buyback_url}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"douglas","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Douglas API scraper — Europe's largest beauty & perfume retailer (douglas.*): search 13 countries, read the full product (variants/sizes, price per 100 ml, was-price, EU 30-day lowest price, EAN, ingredients, specs, rating, images), and autocomplete. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/douglas/v1","spec_available":true,"actions":[{"name":"search","description":"Search a Douglas storefront by keyword and/or category, with the site's own sorts and filters (brand, category, price range, on-sale). Each row: product + variant code, name, brand, the logged-out price, the struck was-price + discount, the EU 30-day lowest price, the per-100 ml/per-litre base price, rating + count, availability/stock, sale/new/exclusive flags, marketplace seller, images and images. EAN and ingredients are on product/detail. No-result searches return empty (the site's own 204); a keyword→category/brand redirect is reported and the real rows are kept.","required_params":[],"optional_params":["country","query","language","sort","page","brand","category","price_min","price_max","on_sale","include_facets","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Douglas storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — douglas.de (EUR)"},{"value":"at","label":"Austria — douglas.at (EUR)"},{"value":"ch","label":"Switzerland — douglas.ch (CHF; de/fr/it)"},{"value":"nl","label":"Netherlands — douglas.nl (EUR)"},{"value":"be","label":"Belgium — douglas.be (EUR; nl/fr)"},{"value":"pl","label":"Poland — douglas.pl (PLN)"},{"value":"it","label":"Italy — douglas.it (EUR)"},{"value":"es","label":"Spain — douglas.es (EUR)"},{"value":"cz","label":"Czechia — douglas.cz (CZK)"},{"value":"sk","label":"Slovakia — douglas.sk (EUR)"},{"value":"hu","label":"Hungary — douglas.hu (HUF)"},{"value":"ro","label":"Romania — douglas.ro (RON)"},{"value":"lt","label":"Lithuania — douglas.lt (EUR)"}],"default":"de"},{"name":"query","type":"string","required":false,"description":"Keyword to search (brand, product or product-type words). Optional when `category` is given (category browse).","on_invalid":"reject","example":"dior sauvage","aliases":["q","keyword"]},{"name":"language","type":"string","required":false,"description":"Interface language for multi-language countries (ch: de/fr/it, be: nl/fr). Ignored elsewhere; defaults to the country's primary language.","on_invalid":"ignore"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price ascending"},{"value":"price_desc","label":"Price descending"},{"value":"top_rated","label":"Top rated"},{"value":"newest","label":"Newest first"},{"value":"best_discount","label":"Biggest discount"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page; 48 products per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"brand","type":"string","required":false,"description":"Brand facet code (from a search response's facets, e.g. 'b0102' for Hugo Boss).","on_invalid":"ignore","example":"b0102"},{"name":"category","type":"string","required":false,"description":"Category code (allCategories facet, e.g. '0301'). Browse it alone, or narrow a keyword with it.","on_invalid":"ignore","example":"0301"},{"name":"price_min","type":"number","required":false,"description":"Minimum price in the country currency.","on_invalid":"reject","example":20,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in the country currency.","on_invalid":"reject","example":60,"minimum":0},{"name":"on_sale","type":"boolean","required":false,"description":"Only discounted products.","on_invalid":"ignore","default":false},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the filter facets (brands, categories, properties) with their codes.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Max proxy attempts on hardened storefronts (DE/PL/IT). Ignored elsewhere.","on_invalid":"ignore","default":6,"minimum":1,"maximum":10}],"returns":"results[]{product_code, base_product_code, variant_name, product_name, brand, brand_code, brand_line, url, price, currency, was_price, discount_percent, lowest_price_30d, lowest_price_30d_discount_percent, store_price, member_price, base_price{value, per_amount, per_unit, content_amount, content_unit}, rating, rating_count, rating_scale, availability{code, message, stock_status}, product_type, is_new, on_sale, flags[{code,label}], seller{marketplace,name,partner_id,fulfilled_by_douglas}, image, images}, count, total_results, total_pages, page, page_size, sort, query, country, currency, redirect_to, did_you_mean, corrected_from, search_mode ('search'|'suggest_index'), partial, facets (with include_facets)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"at","query":"dior sauvage"}},{"name":"product/detail","description":"The full Douglas product by code or URL: title, brand, price with was-price/discount and the EU 30-day lowest price, per-100 ml base price, the Douglas coupon/deal price when one runs, availability, rating, images, EAN, ingredients, application, bullet points, the specification table, the category breadcrumb, marketplace seller, and every size/colour variant each with its own price and base price. (On DE, when the full route is Akamai-gated, a listing-mode record is returned with ean/ingredients/specs null and partial=true.)","required_params":[],"optional_params":["country","product_id","url","language","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Douglas storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — douglas.de (EUR)"},{"value":"at","label":"Austria — douglas.at (EUR)"},{"value":"ch","label":"Switzerland — douglas.ch (CHF; de/fr/it)"},{"value":"nl","label":"Netherlands — douglas.nl (EUR)"},{"value":"be","label":"Belgium — douglas.be (EUR; nl/fr)"},{"value":"pl","label":"Poland — douglas.pl (PLN)"},{"value":"it","label":"Italy — douglas.it (EUR)"},{"value":"es","label":"Spain — douglas.es (EUR)"},{"value":"cz","label":"Czechia — douglas.cz (CZK)"},{"value":"sk","label":"Slovakia — douglas.sk (EUR)"},{"value":"hu","label":"Hungary — douglas.hu (HUF)"},{"value":"ro","label":"Romania — douglas.ro (RON)"},{"value":"lt","label":"Lithuania — douglas.lt (EUR)"}],"default":"de"},{"name":"product_id","type":"string","required":false,"description":"Douglas product code (a variant code like '1298545' or a base code like '5012091068').","on_invalid":"reject","example":"1298545","aliases":["code","product_code","sku"]},{"name":"url","type":"string","required":false,"description":"A douglas.* product URL (…/p/<code>) instead of product_id.","on_invalid":"reject","aliases":["product_url"]},{"name":"language","type":"string","required":false,"description":"Interface language for multi-language countries (ch: de/fr/it, be: nl/fr). Ignored elsewhere; defaults to the country's primary language.","on_invalid":"ignore"},{"name":"max_rotations","type":"integer","required":false,"description":"Max proxy attempts on hardened storefronts (DE/PL/IT). Ignored elsewhere.","on_invalid":"ignore","default":6,"minimum":1,"maximum":10}],"returns":"product{...all search-row fields..., ean, ingredients, application, bullet_points, specs[{group,name,value}], breadcrumb[{name,code,url}], coupon{code,price,base_price,discount_percent,starts_at,ends_at}, variant_display_type, variant_count, variants[{product_code,name,url,price,was_price,discount_percent,lowest_price_30d,store_price,base_price,availability,coupon,images}], max_order_quantity, mode, partial}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"at","product_id":"1078984"}},{"name":"suggest","description":"Douglas autocomplete for a partial query: product suggestions (code, variant name, product name, brand, url, image) and the ranked keyword/brand suggestions.","required_params":["query"],"optional_params":["country","language","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search (brand, product or product-type words). Optional when `category` is given (category browse).","on_invalid":"reject","example":"dior sauvage","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Douglas storefront. All 13 run on one platform; currency + language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — douglas.de (EUR)"},{"value":"at","label":"Austria — douglas.at (EUR)"},{"value":"ch","label":"Switzerland — douglas.ch (CHF; de/fr/it)"},{"value":"nl","label":"Netherlands — douglas.nl (EUR)"},{"value":"be","label":"Belgium — douglas.be (EUR; nl/fr)"},{"value":"pl","label":"Poland — douglas.pl (PLN)"},{"value":"it","label":"Italy — douglas.it (EUR)"},{"value":"es","label":"Spain — douglas.es (EUR)"},{"value":"cz","label":"Czechia — douglas.cz (CZK)"},{"value":"sk","label":"Slovakia — douglas.sk (EUR)"},{"value":"hu","label":"Hungary — douglas.hu (HUF)"},{"value":"ro","label":"Romania — douglas.ro (RON)"},{"value":"lt","label":"Lithuania — douglas.lt (EUR)"}],"default":"de"},{"name":"language","type":"string","required":false,"description":"Interface language for multi-language countries (ch: de/fr/it, be: nl/fr). Ignored elsewhere; defaults to the country's primary language.","on_invalid":"ignore"},{"name":"max_rotations","type":"integer","required":false,"description":"Max proxy attempts on hardened storefronts (DE/PL/IT). Ignored elsewhere.","on_invalid":"ignore","default":6,"minimum":1,"maximum":10}],"returns":"suggestions[{product_code, variant_name, product_name, brand, url, image}], keyword_suggestions[{term, url}], count, country","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"at","query":"chanel"}}]},{"name":"drom","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Drom API scraper — auto.drom.ru, Russia's largest car marketplace: search used and new cars by make, model and region with drom's own filters and sorts, and read the full ad record. Every car comes back with the price in roubles checked against the price string drom prints beside it, the published year, odometer, engine, gearbox, drive and body, whether a private person or a dealer is selling, and drom's own below/at/above-market price rating. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/drom/v1","spec_available":true,"actions":[{"name":"search","description":"Search auto.drom.ru the way its own visitors do: pick a make and model, narrow to a city or region with a radius, and apply drom's own year, price, odometer, engine volume, power, gearbox, fuel, drive, body, steering-side, damage, paperwork and seller-type filters. Every car returns the rouble price cross-checked against the price string drom renders next to it, the model year drom publishes, the odometer with drom's own formatted reading beside it, engine volume and power, gearbox, fuel and drive in both a stable code and drom's own Russian word, the body type, the city, whether a private person or a dealership is selling (drom's own flag, never inferred), drom's own price rating against the market, its row badges (only-on-drom, from-the-owner, brand-new, never-registered-in-Russia) and the ad's photos. Sort by price, model year, odometer, engine size or drom's price rating, and page through the result set 20 cars at a time up to page 100. The answer repeats every filter drom actually applied, read back out of drom's own echo — a filter drom dropped is an error, never a quietly widened result.","required_params":[],"optional_params":["make","model","region","page","sort","min_year","max_year","min_price","max_price","min_mileage","max_mileage","min_engine_volume","max_engine_volume","min_power","max_power","transmission","fuel_type","drive","body_type","wheel","seller_type","damaged_only","with_documents","unsold_only","with_photo_only","distance_km"],"params":[{"name":"make","type":"string","required":false,"description":"Make slug exactly as it appears in a drom URL (auto.drom.ru/<make>/). Omit it to search every make in Russia.","on_invalid":"reject","example":"toyota","value_pattern":"[a-z0-9][a-z0-9_-]{0,60}"},{"name":"model","type":"string","required":false,"description":"Model slug exactly as it appears in a drom URL (auto.drom.ru/<make>/<model>/). Requires `make`. Call `models` to list the slugs drom publishes for a make.","on_invalid":"reject","example":"camry","value_pattern":"[a-z0-9][a-z0-9_-]{0,60}"},{"name":"region","type":"string","required":false,"description":"City or region slug exactly as it appears in a drom URL (auto.drom.ru/<region>/<make>/). A slug drom does not know is reported as not found, never silently ignored.","on_invalid":"reject","example":"moscow","value_pattern":"[a-z0-9][a-z0-9_-]{0,60}"},{"name":"page","type":"integer","required":false,"description":"Result page, 20 cars each. Drom stops at page 100.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Drom's own result order. `relevance` is drom's default.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"year_desc","label":"year desc"},{"value":"year_asc","label":"year asc"},{"value":"price_rating","label":"price rating"},{"value":"mileage_asc","label":"mileage asc"},{"value":"engine_volume_desc","label":"engine volume desc"}],"default":"relevance","example":"price_asc"},{"name":"min_year","type":"integer","required":false,"description":"Oldest model year to include.","on_invalid":"reject","example":2018,"minimum":1940,"maximum":2030},{"name":"max_year","type":"integer","required":false,"description":"Newest model year to include.","on_invalid":"reject","example":2022,"minimum":1940,"maximum":2030},{"name":"min_price","type":"integer","required":false,"description":"Lowest asking price, roubles.","on_invalid":"reject","example":1000000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Highest asking price, roubles.","on_invalid":"reject","example":3000000,"minimum":0},{"name":"min_mileage","type":"integer","required":false,"description":"Lowest odometer reading, kilometres.","on_invalid":"reject","example":10000,"minimum":0},{"name":"max_mileage","type":"integer","required":false,"description":"Highest odometer reading, kilometres.","on_invalid":"reject","example":150000,"minimum":0},{"name":"min_engine_volume","type":"number","required":false,"description":"Smallest engine, litres (drom's own steps, e.g. 0.7 … 8.0).","on_invalid":"reject","example":2.0,"minimum":0.1,"maximum":15},{"name":"max_engine_volume","type":"number","required":false,"description":"Largest engine, litres.","on_invalid":"reject","example":3.5,"minimum":0.1,"maximum":15},{"name":"min_power","type":"integer","required":false,"description":"Lowest engine power, metric horsepower.","on_invalid":"reject","example":150,"minimum":1,"maximum":2000},{"name":"max_power","type":"integer","required":false,"description":"Highest engine power, metric horsepower.","on_invalid":"reject","example":300,"minimum":1,"maximum":2000},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. `automatic` is drom's own umbrella and includes CVT cars; `cvt` selects CVT only.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic (incl. CVT)"},{"value":"cvt","label":"CVT only"},{"value":"robot","label":"automated manual"},{"value":"other","label":"other"}],"example":"automatic"},{"name":"fuel_type","type":"enum","required":false,"description":"Fuel, as drom classifies it.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Бензин"},{"value":"diesel","label":"Дизель"},{"value":"electric","label":"Электро"},{"value":"hybrid","label":"Гибрид"},{"value":"lpg","label":"ГБО"}],"example":"diesel"},{"name":"drive","type":"enum","required":false,"description":"Driven wheels.","on_invalid":"reject","allowed_values":[{"value":"front","label":"передний"},{"value":"rear","label":"задний"},{"value":"awd","label":"4WD"}],"example":"awd"},{"name":"body_type","type":"enum","required":false,"description":"Body style, from drom's own list.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Седан"},{"value":"hatchback_5d","label":"Хэтчбек 5 дв."},{"value":"hatchback_3d","label":"Хэтчбек 3 дв."},{"value":"liftback","label":"Лифтбек"},{"value":"suv_5d","label":"Джип 5 дв."},{"value":"suv_3d","label":"Джип 3 дв."},{"value":"wagon","label":"Универсал"},{"value":"minivan","label":"Минивэн"},{"value":"pickup","label":"Пикап"},{"value":"coupe","label":"Купе"},{"value":"convertible","label":"Открытый"}],"example":"suv_5d"},{"name":"wheel","type":"enum","required":false,"description":"Steering side. Russia's used market carries a large right-hand-drive Japanese import stock, so this is a real filter there.","on_invalid":"reject","allowed_values":[{"value":"left","label":"левый"},{"value":"right","label":"правый"}],"example":"left"},{"name":"seller_type","type":"enum","required":false,"description":"Who is selling. Drom's own split; it partitions the result set exactly.","on_invalid":"reject","allowed_values":[{"value":"private","label":"private person"},{"value":"dealer","label":"dealership"}],"example":"private"},{"name":"damaged_only","type":"boolean","required":false,"description":"Only cars drom marks as damaged / not roadworthy.","on_invalid":"reject","example":false},{"name":"with_documents","type":"boolean","required":false,"description":"Only cars sold with full registration paperwork.","on_invalid":"reject","example":false},{"name":"unsold_only","type":"boolean","required":false,"description":"Hide ads drom has already marked as sold.","on_invalid":"reject","example":true},{"name":"with_photo_only","type":"boolean","required":false,"description":"Only ads that carry photos.","on_invalid":"reject","example":true},{"name":"distance_km","type":"integer","required":false,"description":"Widen the search that many kilometres around `region`. Drom ignores this without a region, so it is refused without one.","on_invalid":"reject","allowed_values":[{"value":100,"label":"+100 km"},{"value":200,"label":"+200 km"},{"value":500,"label":"+500 km"},{"value":1000,"label":"+1000 km"}],"example":100}],"returns":"{ query: {make, model, region, page, sort, url}, total, page, page_size, pages_available, has_more, filters_applied, filters_echoed, results: [ {listing_id, url, title, trim, year, price, price_shown, currency, price_rating, price_rating_label, mileage_km, mileage_label, engine_volume_l, power_hp, fuel_type, gearbox, drive, body_type, is_new, is_sold, seller_type, dealer_name, location, published_label, badges, image_count, images } ] }","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"toyota","model":"camry"}},{"name":"detail","description":"Read one drom ad in full, by its numeric id or by its URL. Returns the asking price in roubles cross-checked against the price string drom prints, drom's own estimate of what the car is worth on the market and its below/at/above-market rating, the published year, odometer (checked against drom's own formatted reading), engine volume and power, fuel with the hybrid and LPG flags drom sets, gearbox, drive, body, colour, steering side and owner count in drom's own words, the generation and trim with links to drom's catalogue, the masked VIN, whether drom records damage and full paperwork, the summary of drom's public vehicle-history check, the seller's kind (private person or dealership) with what the ad page publishes about it — the dealership's name, page, age, listing count and official flag, or a private seller's account age and avatar letter (drom prints no private name; the phone sits behind drom's click-to-reveal and is not fetched), the city, the publication date, the view counter, the seller's own description and every photo. A withdrawn or non-existent ad is reported as not found.","required_params":["listing"],"optional_params":[],"params":[{"name":"listing","type":"string","required":true,"description":"The ad's numeric id (the number in the URL before `.html`) or the full auto.drom.ru ad URL.","on_invalid":"reject","example":"616952799","value_pattern":"(?:\\d{6,12}|https?://[^\\s]+drom\\.ru/[^\\s]+)","aliases":["listing_id","id","url"]}],"returns":"{ listing: {listing_id, url, title, make, model, year, price, market_price, price_rating, mileage_km, engine_volume_l, power_hp, fuel_type, is_hybrid, gearbox_label, drive, body_type, colour_label, owners_label, wheel, generation, trim, vin_masked, has_damage, has_documents, seller{kind, dealer_name, dealer_url, dealer_official, dealer_listing_count, account_age, avatar_letter}, location, published_date, views_total, description, images, history_checks } }","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing":"616952799"}},{"name":"models","description":"List every model auto.drom.ru publishes for one make, with the slug `search` needs and the live ad count drom shows for it — so a caller never has to guess a slug. Drom's own top-models block is flagged. A make drom does not know is reported as not found.","required_params":["make"],"optional_params":[],"params":[{"name":"make","type":"string","required":true,"description":"Make slug exactly as it appears in a drom URL (auto.drom.ru/<make>/).","on_invalid":"reject","example":"toyota","value_pattern":"[a-z0-9][a-z0-9_-]{0,60}"}],"returns":"{ make: {slug, name, url}, count, results: [ {slug, name, url, ads_used, ads_new, is_top} ] }","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"toyota"}}]},{"name":"dubicars","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"DubiCars — UAE car marketplace (used + new, all seven emirates)","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/dubicars/v1","spec_available":true,"actions":[{"name":"search","description":"Search dubicars' UAE car stock by make, model, condition, emirate, seller type, model year, price and mileage, with eight verified sort orders. Returns 30 rows a page with price, mileage, year, emirate, regional specs, seller kind and the listing's refresh time. 🔴 A single query reaches at most 900 rows (the site refuses page 31+) even when it reports tens of thousands — `summary.total_results` and `summary.reachable_results` always say both numbers.","required_params":[],"optional_params":["make_id","model_id","condition","emirate","seller_type","year_min","year_max","price_min","price_max","km_min","km_max","sort","page","max_results","include_pii"],"params":[{"name":"make_id","type":"integer","required":false,"description":"Numeric make id as dubicars publishes it (Toyota 105, Nissan 75, BMW 13, Mercedes Benz 69, Ford 36, Lexus 59). Call the `makes` action for the full list of 168.","on_invalid":"reject","example":105,"minimum":1,"aliases":["make"]},{"name":"model_id","type":"integer","required":false,"description":"Numeric model id, scoped to the make. Call `models` with `make_id` for the list (Toyota Land Cruiser, Camry, Hilux…).","on_invalid":"reject","example":1540,"minimum":1,"aliases":["model"]},{"name":"condition","type":"enum","required":false,"description":"New / used split. Measured bite: `new` cuts the site total from 25,068 to 12,164, while `used` returns 25,067 — on dubicars 'used' effectively means the whole stock.","on_invalid":"reject","allowed_values":[{"value":"any","label":"New and used together (the site's default)"},{"value":"used","label":"The site's 'used' view — measured to cover almost the whole stock, so it narrows very little"},{"value":"new","label":"Brand-new / showroom stock only (a real narrowing: 12,164 of 25,068 site-wide)"}],"default":"any","example":"used"},{"name":"emirate","type":"enum","required":false,"description":"Emirate the car is listed in. Measured stock at capture: Dubai 22,547 · Sharjah 1,379 · Abu Dhabi 753 · Ajman 330 · Al Ain 38 · Ras Al Khaimah 10 · Fujairah 8 · Umm Al Quwain 2.","on_invalid":"reject","allowed_values":[{"value":"abu-dhabi","label":"Abu Dhabi"},{"value":"ajman","label":"Ajman"},{"value":"dubai","label":"Dubai"},{"value":"fujairah","label":"Fujairah"},{"value":"ras-al-khaimah","label":"Ras Al Khaimah"},{"value":"sharjah","label":"Sharjah"},{"value":"umm-al-quwain","label":"Umm Al Quwain"},{"value":"al-ain","label":"Al Ain"}],"example":"dubai","aliases":["location","city"]},{"name":"seller_type","type":"enum","required":false,"description":"Dealer stock or private-owner cars.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealers and showrooms (24,000 of 25,068 measured)"},{"value":"private","label":"Private owners (1,068 of 25,068 measured)"}],"example":"dealer"},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year (inclusive).","on_invalid":"reject","example":2020,"minimum":1950,"maximum":2100,"aliases":["min_year"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"reject","example":2026,"minimum":1950,"maximum":2100,"aliases":["max_year"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in AED.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in AED.","on_invalid":"reject","example":250000,"minimum":0,"aliases":["max_price"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km","mileage_min"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres.","on_invalid":"reject","example":100000,"minimum":0,"aliases":["max_km","mileage_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Every option was verified monotonic on live rows. 🔴 `newest` is the site's own 'Latest', which orders by the REFRESH (bump) time, not by when the ad was created — a re-bumped 2015 listing appears above a brand-new one.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Most recently refreshed first (the site's own 'Latest' — a BUMP date, not a listing date)"},{"value":"promoted","label":"The site's default order (paid placement first, then refresh time)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"year_desc","label":"Newest model year first"},{"value":"year_asc","label":"Oldest model year first"},{"value":"km_asc","label":"Lowest mileage first"},{"value":"km_desc","label":"Highest mileage first"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page of 30 rows. 🔴 dubicars refuses page 31 and above outright, so a single query exposes at most 900 rows however large its total is. A page above 30 is clamped and reported in `meta.warnings`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":30},{"name":"max_results","type":"integer","required":false,"description":"Stop after this many rows, walking pages of 30. Capped at 900, the site's reachable ceiling.","on_invalid":"reject","default":30,"example":60,"minimum":1,"maximum":900},{"name":"include_pii","type":"boolean","required":false,"description":"Include a PRIVATE seller's display name and phone number. Dealer names and phones are professional business facts and are always returned.","on_invalid":"reject","default":false,"example":false}],"returns":"`rows[]` plus a `summary`. Each row: id, url, title, make_id, model_id, year, kilometers (+ kilometers_reported), condition, price / price_currency / price_type / price_list / price_disagrees, emirate (+ emirate_slug), regional_specs, is_gcc_spec, listing_tier, is_premium, photos_count, image, refreshed_at, was_refreshed, position, seller_type, seller_name, seller_phone, seller_phone_alt, seller_id, seller_business_kind, seller_origin, seller_page, seller_pii_withheld. `price_currency` is read back from the source on every row rather than assumed. `summary` carries total_results (the site's own count for this query), reachable_results (min(total, 900) — dubicars refuses page 31+), last_page, has_more, page, page_size and filters_applied. `refreshed_at` is a bump time; dubicars publishes no creation date.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"make_id":105,"condition":"used","emirate":"dubai","sort":"newest","max_results":30}},{"name":"detail","description":"The full record for one listing: the seller's own description, the complete spec sheet (body type, fuel, cylinders, transmission, steering side, seats, doors, both colours, regional specs), every gallery photo and the seller block. Takes the listing URL from a `search` row — dubicars has no id-only listing route, so the URL (or id + slug) is required.","required_params":["url"],"optional_params":["include_pii"],"params":[{"name":"url","type":"string","required":true,"description":"Full listing URL exactly as `search` returns it in `rows[].url`, e.g. https://www.dubicars.com/2015-mercedes-benz-g500-…-909663.html. A bare numeric id is not enough: dubicars serves listings only at their slug URL.","on_invalid":"reject","example":"https://www.dubicars.com/2015-mercedes-benz-g500-mercedes-g-class-g500-modified-to-latest-g63-exterior-909663.html","aliases":["listing_url","link"]},{"name":"include_pii","type":"boolean","required":false,"description":"Include a PRIVATE seller's display name and phone number. Dealer contact details are always returned.","on_invalid":"reject","default":false,"example":false}],"returns":"One listing: id, url, title, description (the seller's own text), make, model, year, kilometers, price / price_currency / price_type, condition, body_type, fuel_type, transmission, cylinders, seats, doors, exterior_color, interior_color, steering_side, regional_specs, emirate, photos[] and photos_count, seller{type, name, phone, page, business_kind}, refreshed_at, specs{} (the site's own label/value rows verbatim). VIN, engine displacement, horsepower, trim and the creation date are not published by dubicars and are absent rather than guessed.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.dubicars.com/2015-mercedes-benz-g500-mercedes-g-class-g500-modified-to-latest-g63-exterior-909663.html"}},{"name":"count","description":"How many cars match a filter combination, from dubicars' own count endpoint — one tiny request, no result parsing. Built for market sizing and for checking whether a query fits under the 900-row reachable ceiling before you page through it.","required_params":[],"optional_params":["make_id","model_id","condition","emirate","seller_type","year_min","year_max","price_min","price_max","km_min","km_max"],"params":[{"name":"make_id","type":"integer","required":false,"description":"Numeric make id as dubicars publishes it (Toyota 105, Nissan 75, BMW 13, Mercedes Benz 69, Ford 36, Lexus 59). Call the `makes` action for the full list of 168.","on_invalid":"reject","example":105,"minimum":1,"aliases":["make"]},{"name":"model_id","type":"integer","required":false,"description":"Numeric model id, scoped to the make. Call `models` with `make_id` for the list (Toyota Land Cruiser, Camry, Hilux…).","on_invalid":"reject","example":1540,"minimum":1,"aliases":["model"]},{"name":"condition","type":"enum","required":false,"description":"New / used split. Measured bite: `new` cuts the site total from 25,068 to 12,164, while `used` returns 25,067 — on dubicars 'used' effectively means the whole stock.","on_invalid":"reject","allowed_values":[{"value":"any","label":"New and used together (the site's default)"},{"value":"used","label":"The site's 'used' view — measured to cover almost the whole stock, so it narrows very little"},{"value":"new","label":"Brand-new / showroom stock only (a real narrowing: 12,164 of 25,068 site-wide)"}],"default":"any","example":"used"},{"name":"emirate","type":"enum","required":false,"description":"Emirate the car is listed in. Measured stock at capture: Dubai 22,547 · Sharjah 1,379 · Abu Dhabi 753 · Ajman 330 · Al Ain 38 · Ras Al Khaimah 10 · Fujairah 8 · Umm Al Quwain 2.","on_invalid":"reject","allowed_values":[{"value":"abu-dhabi","label":"Abu Dhabi"},{"value":"ajman","label":"Ajman"},{"value":"dubai","label":"Dubai"},{"value":"fujairah","label":"Fujairah"},{"value":"ras-al-khaimah","label":"Ras Al Khaimah"},{"value":"sharjah","label":"Sharjah"},{"value":"umm-al-quwain","label":"Umm Al Quwain"},{"value":"al-ain","label":"Al Ain"}],"example":"dubai","aliases":["location","city"]},{"name":"seller_type","type":"enum","required":false,"description":"Dealer stock or private-owner cars.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealers and showrooms (24,000 of 25,068 measured)"},{"value":"private","label":"Private owners (1,068 of 25,068 measured)"}],"example":"dealer"},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year (inclusive).","on_invalid":"reject","example":2020,"minimum":1950,"maximum":2100,"aliases":["min_year"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"reject","example":2026,"minimum":1950,"maximum":2100,"aliases":["max_year"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in AED.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in AED.","on_invalid":"reject","example":250000,"minimum":0,"aliases":["max_price"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km","mileage_min"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres.","on_invalid":"reject","example":100000,"minimum":0,"aliases":["max_km","mileage_max"]}],"returns":"`{total_results, reachable_results, pages_available, fully_reachable, filters_applied}`. `fully_reachable` is false when the query's total exceeds the 900 rows paging can reach.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"make_id":105,"condition":"used"}},{"name":"makes","description":"Every car make dubicars lists, with the numeric `make_id` that `search`, `count` and `models` take, plus the make's logo. 168 makes at capture.","required_params":[],"optional_params":[],"params":[],"returns":"`rows[]` of {make_id, name, logo}. Sorted as dubicars publishes them.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"models","description":"Every model dubicars lists for one make, with the numeric `model_id` that `search` and `count` take. Omit `make_id` to get all makes at once.","required_params":[],"optional_params":["make_id"],"params":[{"name":"make_id","type":"integer","required":false,"description":"Make to list models for (Toyota 105). Omit for every make in one call — that answer is large, so prefer scoping it.","on_invalid":"reject","example":105,"minimum":1,"aliases":["make"]}],"returns":"`rows[]` of {make_id, make_name, model_id, name, url_key, group_id}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make_id":105}}]},{"name":"dubizzle","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"dubizzle API - UAE and Egypt classifieds. UAE defaults to AED; country=eg uses dubizzle.com.eg in EGP.","version":"0.3.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/dubizzle/v1","spec_available":true,"actions":[{"name":"search","description":"Give at least one of `query` or `category` — a bare listing of everything is not a search. (Both together is fine. The schema's `required_params` cannot express a one-of rule, which is why that field is empty.) country=eg searches Egypt in EGP; country=ae (default) searches UAE in AED. Search dubizzle's general classifieds (furniture, electronics, phones, fashion …) and the non-car Motors sections (number plates, motorcycles, boats, heavy vehicles, parts) by keyword, category and emirate: listing id, title, price in AED, condition, private or business seller, verified flags, premium/featured flags, location and dates, with the true total and category and emirate counts.","required_params":[],"optional_params":["query","category","emirate","price_min","price_max","seller_type","condition","sort","page","limit","language","country","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. dubizzle's search is typo-tolerant ('iphnoe' finds iPhones).","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Category slug path from `categories` or a search's category_facets, e.g. classified/furniture-home-garden or motors/number-plates. Use cars/search for used or rental cars and real_estate/search for property.","on_invalid":"reject","example":"classified/mobile-phones-pdas"},{"name":"emirate","type":"enum","required":false,"description":"One emirate, or all. Al Ain is listed on its own on dubizzle, separately from Abu Dhabi.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All emirates"},{"value":"dubai","label":"Dubai"},{"value":"abu-dhabi","label":"Abu Dhabi"},{"value":"sharjah","label":"Sharjah"},{"value":"ajman","label":"Ajman"},{"value":"ras-al-khaimah","label":"Ras Al Khaimah"},{"value":"umm-al-quwain","label":"Umm Al Quwain"},{"value":"fujairah","label":"Fujairah"},{"value":"al-ain","label":"Al Ain"}],"default":"all","example":"dubai","aliases":["city"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in AED (UAE) or EGP (Egypt).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in AED (UAE) or EGP (Egypt).","on_invalid":"reject","minimum":0},{"name":"seller_type","type":"enum","required":false,"description":"Only private sellers or only verified businesses (Classifieds only).","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private individuals"},{"value":"business","label":"Verified businesses"}]},{"name":"condition","type":"enum","required":false,"description":"Item condition as dubizzle's sellers declare it (Classifieds only). The source uses two disjoint vocabularies in this one field: a wear grade (poor, average, good, excellent, flawless) in categories such as furniture and fashion, and an item kind (new, pre_owned, scrap, refurbished) in phones and tablets. pre_owned means used without a stated grade, not a grade of its own. A row whose seller declared nothing returns condition=null.","on_invalid":"reject","allowed_values":[{"value":"poor","label":"Poor"},{"value":"average","label":"Average"},{"value":"good","label":"Good"},{"value":"excellent","label":"Excellent"},{"value":"flawless","label":"Flawless"},{"value":"new","label":"New"},{"value":"pre_owned","label":"Pre Owned"},{"value":"scrap","label":"Scrap"},{"value":"refurbished","label":"Refurbished"}]},{"name":"sort","type":"enum","required":false,"description":"Order of results. newest = strictly by date (paid ads at their real date); featured = dubizzle's own order, premium ads first. Anything else is rejected.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"featured","label":"dubizzle's default order (premium ads first)"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). dubizzle serves at most 10,000 results per search, so page × limit must stay within 10,000.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100.","on_invalid":"reject","default":25,"minimum":1,"maximum":100},{"name":"language","type":"enum","required":false,"description":"Language of titles, category names and attribute labels where dubizzle publishes both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en"},{"name":"country","type":"enum","required":false,"description":"UAE (default) or Egypt. Egypt supports search, cars/search, real_estate/search, listing and categories. Egypt accepts keyword, category slug, price bounds, page, limit and basic sort; UAE-specific filters are rejected.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt - dubizzle.com.eg (EGP)"},{"value":"ae","label":"United Arab Emirates — dubizzle.com (AED)"}],"default":"ae","example":"ae"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, uuid, vertical, title, url, short_url, price (AED, null when not published), currency, price_type (fixed|on_request|no_price), was_price, category, category_slug, location{emirate, emirate_slug, emirate_id, area, area_id, path[], building, lat, lng (businesses/agents, or include_pii)}, listed_at, listed_date, refreshed_at (last bump), seller_type, seller_type_code, seller_name (businesses only), is_premium, is_featured, is_promoted, is_highlighted, image, image_count, discount_percent, verified_user, verified_business, has_phone, has_whatsapp, business_id, condition, condition_label, brand, attributes[]{key, label, value, group}}, count, total_results, reachable_results, page, limit, total_pages, has_more, featured_count, premium_count, category_facets[]{category, count}, emirate_facets[]{emirate, emirate_slug, emirate_id, count}, vertical, currency, query, sort_applied, filters_applied","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"eg","query":"iphone","limit":3}},{"name":"cars/search","description":"Search used cars (or rental cars) on dubizzle Motors: make, model, trim, year, kilometres, price in AED, regional specs (GCC, American, European …), body type, transmission, fuel, colour, cylinders, horsepower, warranty, export-only flag, dealer or private seller and dealer name, emirate and area, premium/featured flags and dates. Rental cars add daily, weekly and monthly rates with km allowances. Sort by newest, price, kilometres or model year.","required_params":[],"optional_params":["section","make","model","query","emirate","year_min","year_max","km_min","km_max","price_min","price_max","regional_specs","body_type","transmission","fuel_type","cylinders","exterior_color","steering_side","warranty","target_market","seller_type","sort","page","limit","language","country","max_rotations"],"params":[{"name":"section","type":"enum","required":false,"description":"Used cars for sale (default) or rental cars.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used cars for sale"},{"value":"rental","label":"Cars for rent"}],"default":"used"},{"name":"make","type":"string","required":false,"description":"Make slug as dubizzle writes it (nissan, mercedes-benz, land-rover). `categories` with vertical motors lists every make and model with counts.","on_invalid":"reject","example":"nissan"},{"name":"model","type":"string","required":false,"description":"Model slug (patrol, land-cruiser); needs make.","on_invalid":"reject","example":"patrol"},{"name":"query","type":"string","required":false,"description":"Keyword. dubizzle's search is typo-tolerant ('iphnoe' finds iPhones).","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"emirate","type":"enum","required":false,"description":"One emirate, or all. Al Ain is listed on its own on dubizzle, separately from Abu Dhabi.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All emirates"},{"value":"dubai","label":"Dubai"},{"value":"abu-dhabi","label":"Abu Dhabi"},{"value":"sharjah","label":"Sharjah"},{"value":"ajman","label":"Ajman"},{"value":"ras-al-khaimah","label":"Ras Al Khaimah"},{"value":"umm-al-quwain","label":"Umm Al Quwain"},{"value":"fujairah","label":"Fujairah"},{"value":"al-ain","label":"Al Ain"}],"default":"all","example":"dubai","aliases":["city"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"km_min","type":"integer","required":false,"description":"Lowest kilometres.","on_invalid":"reject","minimum":0},{"name":"km_max","type":"integer","required":false,"description":"Highest kilometres.","on_invalid":"reject","minimum":0},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in AED (UAE) or EGP (Egypt).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in AED (UAE) or EGP (Egypt).","on_invalid":"reject","minimum":0},{"name":"regional_specs","type":"enum","required":false,"description":"The market the car was built for (GCC specs are the UAE's own).","on_invalid":"reject","allowed_values":[{"value":"gcc","label":"GCC Specs"},{"value":"american","label":"American Specs"},{"value":"european","label":"European Specs"},{"value":"japanese","label":"Japanese Specs"},{"value":"chinese","label":"Chinese Specs"},{"value":"korean","label":"Korean Specs"},{"value":"canadian","label":"Canadian Specs"},{"value":"other","label":"Other"}]},{"name":"body_type","type":"enum","required":false,"description":"Body type.","on_invalid":"reject","allowed_values":[{"value":"suv","label":"SUV"},{"value":"sedan","label":"Sedan"},{"value":"coupe","label":"Coupe"},{"value":"hatchback","label":"Hatchback"},{"value":"pickup_truck","label":"Pick Up Truck"},{"value":"van","label":"Van"},{"value":"soft_top_convertible","label":"Soft Top Convertible"},{"value":"hard_top_convertible","label":"Hard Top Convertible"},{"value":"crossover","label":"Crossover"},{"value":"sports_car","label":"Sports Car"},{"value":"wagon","label":"Wagon"},{"value":"utility_truck","label":"Utility Truck"},{"value":"other","label":"Other"}]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic Transmission"},{"value":"manual","label":"Manual Transmission"}]},{"name":"fuel_type","type":"enum","required":false,"description":"Fuel.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol"},{"value":"diesel","label":"Diesel"},{"value":"hybrid","label":"Hybrid"},{"value":"plug_in_hybrid","label":"Plug-in Hybrid"},{"value":"electric","label":"Electric"}]},{"name":"cylinders","type":"enum","required":false,"description":"Number of cylinders.","on_invalid":"reject","allowed_values":[{"value":"3","label":"3"},{"value":"4","label":"4"},{"value":"5","label":"5"},{"value":"6","label":"6"},{"value":"8","label":"8"},{"value":"10","label":"10"},{"value":"12","label":"12"}]},{"name":"exterior_color","type":"enum","required":false,"description":"Exterior colour.","on_invalid":"reject","allowed_values":[{"value":"white","label":"White"},{"value":"black","label":"Black"},{"value":"grey","label":"Grey"},{"value":"silver","label":"Silver"},{"value":"blue","label":"Blue"},{"value":"red","label":"Red"},{"value":"green","label":"Green"},{"value":"gold","label":"Gold"},{"value":"brown","label":"Brown"},{"value":"maroon","label":"Maroon"},{"value":"beige","label":"Beige"},{"value":"orange","label":"Orange"},{"value":"yellow","label":"Yellow"},{"value":"burgundy","label":"Burgundy"},{"value":"bronze","label":"Bronze"},{"value":"purple","label":"Purple"},{"value":"pink","label":"Pink"},{"value":"teal","label":"Teal"},{"value":"other","label":"Other Color"}]},{"name":"steering_side","type":"enum","required":false,"description":"Left- or right-hand drive.","on_invalid":"reject","allowed_values":[{"value":"left","label":"Left Hand"},{"value":"right","label":"Right Hand"}]},{"name":"warranty","type":"enum","required":false,"description":"Whether the car is sold with a warranty.","on_invalid":"reject","allowed_values":[{"value":"yes","label":"Yes"},{"value":"no","label":"No"},{"value":"does_not_apply","label":"Does not apply"}]},{"name":"target_market","type":"enum","required":false,"description":"Export-only cars cannot be registered in the UAE.","on_invalid":"reject","allowed_values":[{"value":"uae","label":"UAE (can be exported)"},{"value":"export_only","label":"Export only"}]},{"name":"seller_type","type":"enum","required":false,"description":"Dealers or private owners.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealers and showrooms"},{"value":"private","label":"Private owners"}]},{"name":"sort","type":"enum","required":false,"description":"Order of results. newest = strictly by date (paid ads at their real date); featured = dubizzle's own order, premium ads first. Anything else is rejected.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"featured","label":"dubizzle's default order (premium ads first)"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"km_asc","label":"Lowest kilometres first"},{"value":"km_desc","label":"Highest kilometres first"},{"value":"year_desc","label":"Newest model year first"},{"value":"year_asc","label":"Oldest model year first"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). dubizzle serves at most 10,000 results per search, so page × limit must stay within 10,000.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100.","on_invalid":"reject","default":25,"minimum":1,"maximum":100},{"name":"language","type":"enum","required":false,"description":"Language of titles, category names and attribute labels where dubizzle publishes both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en"},{"name":"country","type":"enum","required":false,"description":"UAE (default) or Egypt. Egypt supports search, cars/search, real_estate/search, listing and categories. Egypt accepts keyword, category slug, price bounds, page, limit and basic sort; UAE-specific filters are rejected.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt - dubizzle.com.eg (EGP)"},{"value":"ae","label":"United Arab Emirates — dubizzle.com (AED)"}],"default":"ae","example":"ae"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, uuid, vertical, title, url, short_url, price (AED, null when not published), currency, price_type (fixed|on_request|no_price), was_price, category, category_slug, location{emirate, emirate_slug, emirate_id, area, area_id, path[], building, lat, lng (businesses/agents, or include_pii)}, listed_at, listed_date, refreshed_at (last bump), seller_type, seller_type_code, seller_name (businesses only), is_premium, is_featured, is_promoted, is_highlighted, image, image_count, price_period (day for rentals), discount_percent, section, make, model, trim, year, kilometers, regional_specs, body_type, transmission, fuel_type, exterior_color, interior_color, doors, seating_capacity, cylinders, horsepower, engine_capacity, steering_side, warranty, target_market, rental_prices[]{period, price, allowed_km, extra_km_charge}, verified_user, verified_business, has_phone, has_whatsapp, business_id, attributes[]}, count, total_results, reachable_results, page, limit, total_pages, has_more, featured_count, premium_count, category_facets[], emirate_facets[], vertical, currency, query, sort_applied, filters_applied","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"nissan","model":"patrol"}},{"name":"real_estate/search","description":"Egypt returns general property listings in EGP; UAE-specific property filters are unavailable for Egypt. Search property for sale or for rent on dubizzle: residential, commercial, land, multiple units, rooms and short-term rentals. Price in AED with the rent period normalised (per year and per month) and the cheque schedule kept apart, bedrooms (studio flagged), bathrooms, size in sqft and sqm, furnishing, ready or off-plan, agency and agent, verification state, featured/premium flags, emirate, community, sub-community, building and coordinates.","required_params":[],"optional_params":["purpose","property_type","unit_type","category","query","emirate","price_min","price_max","bedrooms_min","bedrooms_max","bathrooms_min","bathrooms_max","size_min","size_max","furnished","completion_status","listed_by","verified_only","area_id","building_id","sort","page","limit","language","country","max_rotations"],"params":[{"name":"purpose","type":"enum","required":false,"description":"For rent (default) or for sale.","on_invalid":"reject","allowed_values":[{"value":"rent","label":"For rent"},{"value":"sale","label":"For sale"}],"default":"rent"},{"name":"property_type","type":"enum","required":false,"description":"Property type. land and multiple_units exist for sale only; rooms and short_term for rent only.","on_invalid":"reject","allowed_values":[{"value":"residential","label":"Residential"},{"value":"commercial","label":"Commercial"},{"value":"land","label":"Land (sale)"},{"value":"multiple_units","label":"Multiple units (sale)"},{"value":"rooms","label":"Rooms for rent / flatmates (rent)"},{"value":"short_term","label":"Short-term daily rentals (rent)"}],"default":"residential"},{"name":"unit_type","type":"enum","required":false,"description":"Residential unit type.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"Apartment"},{"value":"villa","label":"Villa"},{"value":"townhouse","label":"Townhouse"},{"value":"penthouse","label":"Penthouse"},{"value":"hotel_apartment","label":"Hotel Apartment"},{"value":"villa_compound","label":"Villa Compound"},{"value":"residential_building","label":"Residential Building"},{"value":"residential_floor","label":"Residential Floor"}]},{"name":"category","type":"string","required":false,"description":"Any property category slug path from `categories` (overrides unit_type).","on_invalid":"reject","example":"property-for-rent/commercial/office"},{"name":"query","type":"string","required":false,"description":"Keyword. dubizzle's search is typo-tolerant ('iphnoe' finds iPhones).","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"emirate","type":"enum","required":false,"description":"One emirate, or all. Al Ain is listed on its own on dubizzle, separately from Abu Dhabi.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All emirates"},{"value":"dubai","label":"Dubai"},{"value":"abu-dhabi","label":"Abu Dhabi"},{"value":"sharjah","label":"Sharjah"},{"value":"ajman","label":"Ajman"},{"value":"ras-al-khaimah","label":"Ras Al Khaimah"},{"value":"umm-al-quwain","label":"Umm Al Quwain"},{"value":"fujairah","label":"Fujairah"},{"value":"al-ain","label":"Al Ain"}],"default":"all","example":"dubai","aliases":["city"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in AED (UAE) or EGP (Egypt).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in AED (UAE) or EGP (Egypt).","on_invalid":"reject","minimum":0},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms (0 = studio).","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bedrooms_max","type":"integer","required":false,"description":"Most bedrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bathrooms_min","type":"integer","required":false,"description":"Fewest bathrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bathrooms_max","type":"integer","required":false,"description":"Most bathrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"size_min","type":"integer","required":false,"description":"Smallest size, sqft.","on_invalid":"reject","minimum":0},{"name":"size_max","type":"integer","required":false,"description":"Largest size, sqft.","on_invalid":"reject","minimum":0},{"name":"furnished","type":"boolean","required":false,"description":"Only furnished (true) or unfurnished (false).","on_invalid":"reject"},{"name":"completion_status","type":"enum","required":false,"description":"Ready or off-plan (sale only).","on_invalid":"reject","allowed_values":[{"value":"ready","label":"Ready / completed"},{"value":"off_plan","label":"Off-plan"}]},{"name":"listed_by","type":"enum","required":false,"description":"Listed by an agent or directly by the landlord.","on_invalid":"reject","allowed_values":[{"value":"agent","label":"Agents"},{"value":"landlord","label":"Landlords / owners"}]},{"name":"verified_only","type":"boolean","required":false,"description":"Only listings dubizzle marks as verified.","on_invalid":"reject"},{"name":"area_id","type":"integer","required":false,"description":"Community id from a row's location.area_id or sub_area_id.","on_invalid":"reject","minimum":1},{"name":"building_id","type":"integer","required":false,"description":"Building id from a row's location.building_id.","on_invalid":"reject","minimum":1},{"name":"sort","type":"enum","required":false,"description":"Order of results. newest = strictly by date (paid ads at their real date); featured = dubizzle's own order, premium ads first. Anything else is rejected.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"verified_first","label":"Verified listings first"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). dubizzle serves at most 10,000 results per search, so page × limit must stay within 10,000.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-100.","on_invalid":"reject","default":25,"minimum":1,"maximum":100},{"name":"language","type":"enum","required":false,"description":"Language of titles, category names and attribute labels where dubizzle publishes both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en"},{"name":"country","type":"enum","required":false,"description":"UAE (default) or Egypt. Egypt supports search, cars/search, real_estate/search, listing and categories. Egypt accepts keyword, category slug, price bounds, page, limit and basic sort; UAE-specific filters are rejected.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt - dubizzle.com.eg (EGP)"},{"value":"ae","label":"United Arab Emirates — dubizzle.com (AED)"}],"default":"ae","example":"ae"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, uuid, vertical, title, url, short_url, price (AED, null when not published), currency, price_type (fixed|on_request|no_price), was_price, category, category_slug, location{emirate, emirate_slug, emirate_id, area, area_id, path[], building, lat, lng (businesses/agents, or include_pii)}, listed_at, listed_date, refreshed_at (last bump), seller_type, seller_type_code, seller_name (businesses only), is_premium, is_featured, is_promoted, is_highlighted, image, image_count, purpose, property_type, rent_frequency (yearly|monthly|daily), price_per_year, price_per_month, rent_payment_schedule (cheques: yearly|quarterly|monthly|bi_yearly), bedrooms, is_studio, bathrooms, size_sqft, size_sqm, plot_area_sqft, furnished, completion_status (ready|off_plan), agency{id, name, tier}, agent{id, name}, reference, verification, is_verified, has_whatsapp, location{…, sub_area, sub_area_id, building_id}}, count, total_results, reachable_results, page, limit, total_pages, has_more, featured_count, premium_count, category_facets[], emirate_facets[], vertical, currency, query, sort_applied, filters_applied","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"purpose":"rent","emirate":"dubai"}},{"name":"listing","description":"Egypt accepts its numeric listing_id or dubizzle.com.eg URL and returns title, price in EGP, description, categories and attributes. UAE returns the full listing by uuid, URL, or numeric id with its vertical: every search field plus the description, every image, all attributes, the seller (dealer, business or agency name, verified flags, member since, active listings; private sellers stay anonymous), expiry date, variants for shop listings; property adds amenities, developer, handover year, agency fee and community fee.","required_params":[],"optional_params":["listing_id","uuid","url","vertical","include_description","language","country","max_rotations"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Numeric listing id from a search row. Ids repeat across dubizzle sections, so pass vertical with it.","on_invalid":"reject","example":"16978413","aliases":["id"]},{"name":"uuid","type":"string","required":false,"description":"The row's uuid.","on_invalid":"reject","example":"c1176220504d44869d6b4ba8157b71db"},{"name":"url","type":"string","required":false,"description":"A dubizzle listing URL (any emirate subdomain, English or Arabic).","on_invalid":"reject"},{"name":"vertical","type":"enum","required":false,"description":"The row's vertical; needed with a numeric listing_id.","on_invalid":"reject","allowed_values":[{"value":"motors","label":"Motors"},{"value":"classified","label":"Classifieds"},{"value":"property","label":"Property"}]},{"name":"include_description","type":"boolean","required":false,"description":"Motors and Classifieds descriptions need one extra request; set false to skip it.","on_invalid":"reject","default":true},{"name":"language","type":"enum","required":false,"description":"Language of titles, category names and attribute labels where dubizzle publishes both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en"},{"name":"country","type":"enum","required":false,"description":"UAE (default) or Egypt. Egypt supports search, cars/search, real_estate/search, listing and categories. Egypt accepts keyword, category slug, price bounds, page, limit and basic sort; UAE-specific filters are rejected.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt - dubizzle.com.eg (EGP)"},{"value":"ae","label":"United Arab Emirates — dubizzle.com (AED)"}],"default":"ae","example":"ae"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{…every search row field, description, description_status (ok|not_published|not_requested|unavailable|gone), images[], attributes[], seller{type, code, name, business_id, logo_url, verified_business, verified_user, phone_verified, member_since, active_listings, rating, review_count} (property: seller{type, code, name, agency, agent}), expires_at, variants[]{attribute, value, listing_id, price}, amenities[], handover_year, developer, agency_fee, annual_community_fee, updated_at, has_video, has_virtual_tour}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"16978413"}},{"name":"image","description":"One gallery photo as bytes, for an image URL that listing returned in images[] (UAE). Use it when your own downloader cannot fetch dubizzle's image host. The photo comes back base64-encoded with its content type and pixel size (dubizzle serves webp); every photo is checked to decode in full before it is returned. The URL with ?impolicy=dpc is the full-size photo, without it a small thumbnail. One photo per call.","required_params":["url"],"optional_params":["url","max_rotations"],"params":[{"name":"url","type":"string","required":true,"description":"An image URL from listing.images or a search row's image (https://dbz-images.dubizzle.com/images/…).","on_invalid":"reject","example":"https://dbz-images.dubizzle.com/images/2026/05/14/1883c0352d7e496aa6be4403e7157834-.jpeg?impolicy=dpc","aliases":["image_url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"url, content_type, bytes, width, height, data_base64 (verified to decode in full)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://dbz-images.dubizzle.com/images/2026/05/14/1883c0352d7e496aa6be4403e7157834-.jpeg?impolicy=dpc"}},{"name":"categories","description":"For Egypt: the full category tree (no vertical required). For UAE: the live category tree for one vertical with listing counts: Motors down to make and model, Classifieds down to sub-category, Property for sale or rent by type. Each node carries the slug path to pass as category (or make/model) to search. Optionally counted for one emirate or keyword.","required_params":[],"optional_params":["vertical","emirate","query","country","max_rotations"],"params":[{"name":"vertical","type":"enum","required":false,"description":"Which part of dubizzle.","on_invalid":"reject","allowed_values":[{"value":"motors","label":"Motors"},{"value":"classified","label":"Classifieds"},{"value":"property-for-sale","label":"Property for sale"},{"value":"property-for-rent","label":"Property for rent"}],"example":"motors"},{"name":"emirate","type":"enum","required":false,"description":"One emirate, or all. Al Ain is listed on its own on dubizzle, separately from Abu Dhabi.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All emirates"},{"value":"dubai","label":"Dubai"},{"value":"abu-dhabi","label":"Abu Dhabi"},{"value":"sharjah","label":"Sharjah"},{"value":"ajman","label":"Ajman"},{"value":"ras-al-khaimah","label":"Ras Al Khaimah"},{"value":"umm-al-quwain","label":"Umm Al Quwain"},{"value":"fujairah","label":"Fujairah"},{"value":"al-ain","label":"Al Ain"}],"default":"all","example":"dubai","aliases":["city"]},{"name":"query","type":"string","required":false,"description":"Optional keyword: counts are then for it.","on_invalid":"reject","aliases":["q"]},{"name":"country","type":"enum","required":false,"description":"UAE (default) or Egypt. Egypt supports search, cars/search, real_estate/search, listing and categories. Egypt accepts keyword, category slug, price bounds, page, limit and basic sort; UAE-specific filters are rejected.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt - dubizzle.com.eg (EGP)"},{"value":"ae","label":"United Arab Emirates — dubizzle.com (AED)"}],"default":"ae","example":"ae"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"categories[]{category, count, level, children[]}, count, total_results, vertical, emirate, query","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"vertical":"motors"}},{"name":"suggest","description":"dubizzle's own search suggestions for what a buyer has typed, most popular first, each with how many live listings match and in which section and category.","required_params":["query"],"optional_params":["query","limit","country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the buyer typed.","on_invalid":"reject","example":"iph","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"How many suggestions (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"country","type":"enum","required":false,"description":"UAE (default) or Egypt. Egypt supports search, cars/search, real_estate/search, listing and categories. Egypt accepts keyword, category slug, price bounds, page, limit and basic sort; UAE-specific filters are rejected.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt - dubizzle.com.eg (EGP)"},{"value":"ae","label":"United Arab Emirates — dubizzle.com (AED)"}],"default":"ae","example":"ae"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{query, popularity, listings_count, sections[]{section, count}, category}, count, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}}]},{"name":"duckduckgo","category":{"id":"search-seo","title":"Search & SEO"},"title":"DuckDuckGo Search API — duckduckgo.com results as JSON: organic results, ads with sitelinks, knowledge panel, related searches, inline news, videos, images and shopping ads, spelling correction; plus DuckDuckGo News, Images, Videos, Maps (local places), autocomplete and Instant Answers. Any region, safe-search level and time range, with pagination.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/duckduckgo/v1","spec_available":true,"actions":[{"name":"search","description":"A DuckDuckGo results page for a query: organic results, text ads with sitelinks, the knowledge panel, related searches, inline news, videos, images and shopping ads, and the spelling correction. Region, safe search, time range and pagination.","required_params":["q"],"optional_params":["region","safe","time","page","start","source"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, any language. DuckDuckGo operators work: site:, \"exact phrase\", -exclude, filetype:, intitle:.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"region","type":"string","required":false,"description":"Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.","on_invalid":"reject","default":"wt-wt","example":"us-en","aliases":["kl","locale"]},{"name":"safe","type":"enum","required":false,"description":"Safe search level (DuckDuckGo's own three levels). 1 / -1 / -2 also accepted.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"filter adult content"},{"value":"moderate","label":"DuckDuckGo's default"},{"value":"off","label":"no filtering"}],"default":"moderate","example":"moderate","aliases":["safesearch","kp"]},{"name":"time","type":"string","required":false,"description":"Only results from the last day (d), week (w), month (m) or year (y), or a custom range YYYY-MM-DD..YYYY-MM-DD (either end may be left open).","on_invalid":"reject","example":"w","aliases":["df","time_period","date"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Page 1 holds 10 organic rows, later pages 15 (the source's own page sizes).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":30},{"name":"start","type":"integer","required":false,"description":"Alternative to page: the raw result offset DuckDuckGo uses (0, 10, 25, 40 …).","on_invalid":"reject","example":10,"minimum":0,"maximum":500},{"name":"source","type":"enum","required":false,"description":"Which DuckDuckGo page to read. `auto` is the most complete and the most reliable.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"full results page; falls back to the HTML and lite pages if it cannot be read"},{"value":"js","label":"full results page only (organic, ads, knowledge panel, related searches, inline news/videos/images, shopping ads)"},{"value":"html","label":"html.duckduckgo.com only: organic rows"},{"value":"lite","label":"lite.duckduckgo.com only (DuckDuckGo Lite): organic rows with displayed link"}],"default":"auto","example":"auto"}],"returns":"search_parameters{q, region, safe, time, page, offset, source}, search_information{source, organic_count}, organic_results[{position, title, link, displayed_link, domain, site_name, snippet, date, favicon, rich_snippet{label: value}, video{duration, views}}], ads[{position, block_position, title, link (advertiser URL), tracking_link, displayed_link, domain, snippet, sitelinks[{title, link, tracking_link}], callouts[], logo}], knowledge_graph{title, type, entity_type, description, source, source_link, image, official_website, attributes[{label, value}], profiles[{network, id}], related_topics[], results[]}, related_searches[{query, link}], news_results[{position, title, link, snippet, source, date, relative_date, thumbnail}], inline_videos[], inline_images[], shopping_ads[{position, title, price, sale_price, brand, merchant, link, tracking_link, thumbnail}], spelling{original_query, suggested_query, kind}, pagination{current_page, next_page, next_start}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"best laptop 2026"}},{"name":"news","description":"DuckDuckGo News for a query: headline, link, excerpt, publisher, publication time and image.","required_params":["q"],"optional_params":["region","safe","time","page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, any language. DuckDuckGo operators work: site:, \"exact phrase\", -exclude, filetype:, intitle:.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"region","type":"string","required":false,"description":"Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.","on_invalid":"reject","default":"wt-wt","example":"us-en","aliases":["kl","locale"]},{"name":"safe","type":"enum","required":false,"description":"Safe search level (DuckDuckGo's own three levels). 1 / -1 / -2 also accepted.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"filter adult content"},{"value":"moderate","label":"DuckDuckGo's default"},{"value":"off","label":"no filtering"}],"default":"moderate","example":"moderate","aliases":["safesearch","kp"]},{"name":"time","type":"string","required":false,"description":"Only articles from the last day (d), week (w) or month (m).","on_invalid":"reject","example":"w","aliases":["df","time_period"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based (source page size: news 30, videos 60, images 100).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"news_results[{position, title, link, snippet, source, date (ISO 8601 UTC), relative_date, thumbnail}], search_parameters, pagination{current_page, next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"nvidia"}},{"name":"images","description":"DuckDuckGo Images for a query with size, colour, type, layout, licence and time filters: full image URL, thumbnail, source page, dimensions.","required_params":["q"],"optional_params":["region","safe","size","color","type","layout","license","time","page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, any language. DuckDuckGo operators work: site:, \"exact phrase\", -exclude, filetype:, intitle:.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"region","type":"string","required":false,"description":"Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.","on_invalid":"reject","default":"wt-wt","example":"us-en","aliases":["kl","locale"]},{"name":"safe","type":"enum","required":false,"description":"Safe search level (DuckDuckGo's own three levels). 1 / -1 / -2 also accepted.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"filter adult content"},{"value":"moderate","label":"DuckDuckGo's default"},{"value":"off","label":"no filtering"}],"default":"moderate","example":"moderate","aliases":["safesearch","kp"]},{"name":"size","type":"enum","required":false,"description":"Image size filter.","on_invalid":"reject","allowed_values":[{"value":"Small","label":"Small"},{"value":"Medium","label":"Medium"},{"value":"Large","label":"Large"},{"value":"Wallpaper","label":"Wallpaper"}],"example":"Large"},{"name":"color","type":"enum","required":false,"description":"Colour filter ('color' = colour images only, 'Monochrome' = black & white).","on_invalid":"reject","allowed_values":[{"value":"color","label":"color"},{"value":"Monochrome","label":"Monochrome"},{"value":"Red","label":"Red"},{"value":"Orange","label":"Orange"},{"value":"Yellow","label":"Yellow"},{"value":"Green","label":"Green"},{"value":"Blue","label":"Blue"},{"value":"Purple","label":"Purple"},{"value":"Pink","label":"Pink"},{"value":"Brown","label":"Brown"},{"value":"Black","label":"Black"},{"value":"Gray","label":"Gray"},{"value":"Teal","label":"Teal"},{"value":"White","label":"White"}],"example":"Blue"},{"name":"type","type":"enum","required":false,"description":"Image type filter.","on_invalid":"reject","allowed_values":[{"value":"photo","label":"photo"},{"value":"clipart","label":"clipart"},{"value":"gif","label":"gif"},{"value":"transparent","label":"transparent"},{"value":"line","label":"line"}],"example":"photo","aliases":["image_type"]},{"name":"layout","type":"enum","required":false,"description":"Aspect filter.","on_invalid":"reject","allowed_values":[{"value":"Square","label":"Square"},{"value":"Tall","label":"Tall"},{"value":"Wide","label":"Wide"}],"example":"Wide"},{"name":"license","type":"enum","required":false,"description":"Usage-rights filter (Public = public domain, Share / ShareCommercially / Modify / ModifyCommercially = free to share or modify, any = all Creative Commons).","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"Public","label":"Public"},{"value":"Share","label":"Share"},{"value":"ShareCommercially","label":"ShareCommercially"},{"value":"Modify","label":"Modify"},{"value":"ModifyCommercially","label":"ModifyCommercially"}],"example":"Public"},{"name":"time","type":"enum","required":false,"description":"Only images first seen in the last day / week / month / year.","on_invalid":"reject","allowed_values":[{"value":"d","label":"past day"},{"value":"w","label":"past week"},{"value":"m","label":"past month"},{"value":"y","label":"past year"}],"example":"m","aliases":["df"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based (source page size: news 30, videos 60, images 100).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"images_results[{position, title, image, thumbnail, source_page, width, height, domain, format, discovered_at}], search_parameters, pagination","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"red panda"}},{"name":"videos","description":"DuckDuckGo Videos for a query with time, resolution, length and licence filters: video link, duration, publisher, uploader, publication date, view count, thumbnail, embed URL.","required_params":["q"],"optional_params":["region","safe","time","resolution","duration","license","page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, any language. DuckDuckGo operators work: site:, \"exact phrase\", -exclude, filetype:, intitle:.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"region","type":"string","required":false,"description":"Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.","on_invalid":"reject","default":"wt-wt","example":"us-en","aliases":["kl","locale"]},{"name":"safe","type":"enum","required":false,"description":"Safe search level (DuckDuckGo's own three levels). 1 / -1 / -2 also accepted.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"filter adult content"},{"value":"moderate","label":"DuckDuckGo's default"},{"value":"off","label":"no filtering"}],"default":"moderate","example":"moderate","aliases":["safesearch","kp"]},{"name":"time","type":"enum","required":false,"description":"Only videos published in the last day / week / month.","on_invalid":"reject","allowed_values":[{"value":"d","label":"past day"},{"value":"w","label":"past week"},{"value":"m","label":"past month"}],"example":"w","aliases":["df"]},{"name":"resolution","type":"enum","required":false,"description":"Video resolution filter.","on_invalid":"reject","allowed_values":[{"value":"high","label":"HD"},{"value":"standard","label":"SD"}],"example":"high"},{"name":"duration","type":"enum","required":false,"description":"Video length filter.","on_invalid":"reject","allowed_values":[{"value":"short","label":"under 5 minutes"},{"value":"medium","label":"5-20 minutes"},{"value":"long","label":"over 20 minutes"}],"example":"short"},{"name":"license","type":"enum","required":false,"description":"Video licence filter.","on_invalid":"reject","allowed_values":[{"value":"creative_commons","label":"Creative Commons"},{"value":"youtube","label":"standard YouTube licence"}],"example":"creative_commons"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based (source page size: news 30, videos 60, images 100).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"video_results[{position, title, link, description, duration, published_at, publisher, uploader, views, embed_url, thumbnail, motion_thumbnail}], search_parameters, pagination","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"how to tie a tie"}},{"name":"maps","description":"DuckDuckGo Maps (local places) for a query inside a bounding box or around a point: name, category, address, coordinates, phone, website, rating, review count, price level, opening hours, recent reviews and the listing source (Tripadvisor, Yelp, Apple Maps).","required_params":["q"],"optional_params":["bbox","lat","lon","strict_bbox"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, any language. DuckDuckGo operators work: site:, \"exact phrase\", -exclude, filetype:, intitle:.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"bbox","type":"string","required":false,"description":"Search area as lat_top_left,lon_top_left,lat_bottom_right,lon_bottom_right. Give bbox or lat+lon.","on_invalid":"reject","example":"48.90,2.28,48.82,2.42"},{"name":"lat","type":"number","required":false,"description":"Latitude of the point to search around (with lon).","on_invalid":"reject","example":48.8566,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Longitude of the point to search around (with lat).","on_invalid":"reject","example":2.3522,"aliases":["lng","longitude"]},{"name":"strict_bbox","type":"boolean","required":false,"description":"With bbox: only places inside the box (true, default) or also nearby (false).","on_invalid":"reject","default":true,"example":true}],"returns":"local_results[{position, title, place_id, category, address, address_lines[], city, country_code, gps_coordinates{latitude, longitude}, timezone, phone, website, rating, reviews, price, is_closed, open_now, hours{Mon..Sun}, thumbnail, listing_source, listing_link, sources[{name, place_id}], profiles{}, review_details[{rating, snippet, date, user}]}], more_results_link, search_parameters","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"coffee","bbox":"48.90,2.28,48.82,2.42"}},{"name":"autocomplete","description":"DuckDuckGo's search suggestions for a partial query.","required_params":["q"],"optional_params":["region"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, any language. DuckDuckGo operators work: site:, \"exact phrase\", -exclude, filetype:, intitle:.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"region","type":"string","required":false,"description":"Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.","on_invalid":"reject","default":"wt-wt","example":"us-en","aliases":["kl","locale"]}],"returns":"suggestions[{position, suggestion}], q, region","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"pyth"}},{"name":"instant_answer","description":"DuckDuckGo's official Instant Answer for a query: Wikipedia-style abstract, direct answer, definition, infobox attributes, social profiles, related topics. Not every query has one.","required_params":["q"],"optional_params":["disambiguation"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, any language. DuckDuckGo operators work: site:, \"exact phrase\", -exclude, filetype:, intitle:.","on_invalid":"reject","example":"best laptop 2026","aliases":["query","keyword"]},{"name":"disambiguation","type":"boolean","required":false,"description":"false (default): the main article when the name is ambiguous (\"Berlin\" → the city). true: DuckDuckGo's list of meanings instead (related_topics).","on_invalid":"reject","default":false,"example":false}],"returns":"instant_answer{title, type, entity_type, description, source, source_link, image, official_website, answer, answer_type, definition, definition_source, definition_link, redirect, attributes[{label, value}], profiles[{network, id}], related_topics[{text, link, icon, group}], results[{text, link}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"Albert Einstein"}}]},{"name":"eauction-gr","category":{"id":"real-estate","title":"Real Estate"},"title":"eauction.gr — Greek electronic public auctions (notaries)","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/eauction-gr/v1","spec_available":true,"actions":[{"name":"search","description":"Search Greek electronic public auctions (eauction.gr, the notaries' platform): by auction date, posting date, status/outcome, item type and subtype, region, municipality, starting price, debtor name or auction code.","required_params":[],"optional_params":["date_from","date_to","posted_from","posted_to","status","outcome","item_type","item_subtype","region","municipality","min_price","max_price","debtor","code","sort","page"],"params":[{"name":"date_from","type":"string","required":false,"description":"Auction (conduct) date from, YYYY-MM-DD. Default: today in Greece — the source's own default. The source refuses very wide windows (it answers 'too many results'; measured: from 2026-07-01 = 31,984 results accepted, from 2026-05-01 refused) — narrow with date_to, item_type, region or status.","on_invalid":"reject","example":"2026-11-10","aliases":["auction_date_from","from"]},{"name":"date_to","type":"string","required":false,"description":"Auction (conduct) date to, YYYY-MM-DD, inclusive.","on_invalid":"reject","example":"2026-11-30","aliases":["auction_date_to","to"]},{"name":"posted_from","type":"string","required":false,"description":"Date the auction was posted on the platform, from (YYYY-MM-DD).","on_invalid":"reject","example":"2026-10-01"},{"name":"posted_to","type":"string","required":false,"description":"Date the auction was posted on the platform, to (YYYY-MM-DD).","on_invalid":"reject","example":"2026-10-31"},{"name":"status","type":"enum","required":false,"description":"Auction status as the source names it. 'completed' = conducted; combine with 'outcome' to keep only awarded or only no-bidder results.","on_invalid":"reject","allowed_values":[{"value":"posted","label":"Αναρτημένος"},{"value":"open","label":"Ανοιχτός"},{"value":"ready","label":"Έτοιμος προς διενέργεια"},{"value":"cancelled","label":"Ματαιωμένος"},{"value":"completed","label":"Ολοκληρωμένος"},{"value":"participants_finalized","label":"Οριστικοποιημένη Λίστα Συμμετοχών"},{"value":"suspended","label":"Σε αναστολή"},{"value":"all","label":"All statuses"}],"default":"all","example":"completed"},{"name":"outcome","type":"enum","required":false,"description":"Only with status=completed: awarded auctions or those that ended without bidders.","on_invalid":"reject","allowed_values":[{"value":"awarded","label":"Awarded (Κατακύρωση)"},{"value":"no_bidders","label":"Cancelled for lack of bidders"}],"example":"awarded"},{"name":"item_type","type":"enum","required":false,"description":"What is auctioned: real_estate (Ακίνητο), movable (Κινητό), other, perishable.","on_invalid":"reject","allowed_values":[{"value":"real_estate","label":"Ακίνητο"},{"value":"movable","label":"Κινητό"},{"value":"other","label":"Άλλο"},{"value":"perishable","label":"Ευπαθές Προϊόν"}],"example":"real_estate","aliases":["type","property_type"]},{"name":"item_subtype","type":"enum","required":false,"description":"Property/movable subtype (residence, shop, office, plot, farmland, hotel, ship, ...). Implies its item_type.","on_invalid":"reject","allowed_values":[{"value":"residence","label":"Κατοικία"},{"value":"other_commercial","label":"Άλλος Επαγγελματικός Χώρος"},{"value":"shop","label":"Κατάστημα"},{"value":"office","label":"Γραφείο"},{"value":"parking","label":"Θέση Στάθμευσης (parking)"},{"value":"storage","label":"Αποθήκη"},{"value":"industrial","label":"Βιομηχανικός / Βιοτεχνικός Χώρος"},{"value":"plot","label":"Οικόπεδο"},{"value":"plot_with_building","label":"Οικόπεδο με κτίσμα"},{"value":"farmland","label":"Αγροτεμάχιο"},{"value":"farmland_with_building","label":"Αγροτεμάχιο με κτίσμα"},{"value":"hotel","label":"Ξενοδοχειακή Μονάδα"},{"value":"ship","label":"Πλοία"},{"value":"other_movable","label":"Άλλος τύπος κινητού"}],"example":"residence","aliases":["subtype"]},{"name":"region","type":"enum","required":false,"description":"One of Greece's 13 regions (slug, the Greek name as printed by the source, or the source's numeric id from the 'filters' action). Real estate only.","on_invalid":"reject","allowed_values":[{"value":"east-macedonia-thrace","label":"Ανατολικής Μακεδονίας & Θράκης"},{"value":"attica","label":"Αττικής"},{"value":"north-aegean","label":"Βορείου Αιγαίου"},{"value":"western-greece","label":"Δυτικής Ελλάδας"},{"value":"western-macedonia","label":"Δυτικής Μακεδονίας"},{"value":"epirus","label":"Ηπείρου"},{"value":"thessaly","label":"Θεσσαλίας"},{"value":"ionian-islands","label":"Ιονίων Νήσων"},{"value":"central-macedonia","label":"Κεντρικής Μακεδονίας"},{"value":"crete","label":"Κρήτης"},{"value":"south-aegean","label":"Νοτίου Αιγαίου"},{"value":"peloponnese","label":"Πελοποννήσου"},{"value":"central-greece","label":"Στερεάς Ελλάδας"}],"example":"attica","value_pattern":"\\d{1,4}|[^\\x00-\\x7f].*"},{"name":"municipality","type":"string","required":false,"description":"Municipality (Δήμος) — the Greek name as printed by the source or its numeric id (see the 'filters' action). Real estate only; implies its region.","on_invalid":"reject","example":"Δράμας","value_pattern":".+"},{"name":"min_price","type":"integer","required":false,"description":"Minimum starting price (Τιμή 1ης Προσφοράς) in EUR, whole euros.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum starting price in EUR, whole euros.","on_invalid":"reject","example":200000,"minimum":0,"aliases":["price_max"]},{"name":"debtor","type":"string","required":false,"description":"Search by debtor name as published (5-399 characters, case-insensitive, Greek or Latin as the source wrote it). The source withholds names after an auction closes.","on_invalid":"reject","example":"AGROFARM","aliases":["debtor_name"]},{"name":"code","type":"string","required":false,"description":"The auction's unique code (Μοναδικός Κωδικός), or its beginning (5-49 characters). Lots carry the parent code plus -001, -002...","on_invalid":"reject","example":"GqeFH15cMq","aliases":["auction_code"]},{"name":"sort","type":"enum","required":false,"description":"Sort order (the source's four orders).","on_invalid":"reject","allowed_values":[{"value":"date_asc","label":"Auction date, earliest first"},{"value":"date_desc","label":"Auction date, latest first"},{"value":"price_asc","label":"Starting price, lowest first"},{"value":"price_desc","label":"Starting price, highest first"}],"default":"date_asc","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Result page, 20 auctions per page. has_more/next_page say whether another exists.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100000}],"returns":"Exact source total, last_page, has_more; per auction: auction_id (feeds detail), code, status + outcome, starting price EUR, auction date/time (Europe/Athens), posted date, debtor names as published, item type/subtype, region, municipality, lot/parent link, thumbnail URL.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"item_type":"real_estate","item_subtype":"residence","region":"attica"}},{"name":"detail","description":"Full public record of one auction: status, award amount when the source publishes it, starting price, schedule, debtors and pursuing creditors with tax ids as published, the auction officer (notary) and contact, notes, documents, photos, lots.","required_params":["auction_id"],"optional_params":["url"],"params":[{"name":"auction_id","type":"string","required":true,"description":"auction_id from search (or parent_auction_id / related_auctions[].auction_id).","on_invalid":"reject","example":"df4ebdad_g46ai5b7a7dccak2g0g76_7","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Alternatively the full eauction.gr /Auction/Details/ URL.","on_invalid":"reject","example":"https://www.eauction.gr/Auction/Details/df4ebdad_g46ai5b7a7dccak2g0g76_7"}],"returns":"code, status, outcome, award_amount_eur, starting_price_eur, auction_datetime_local, posted_at_local, publication_date, item type/subtype, ship type, region, municipality, debtors[{name,tax_id,source_id}], creditors[{name,tax_id,source_id}], legal_bulletin_url, duration (minutes, extensions), auction_officer{name,address,phone,email}, notes, documents[{type,file_name,url}], photos[], related_auctions[] (group/lots), personal_data_withheld_by_source.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"auction_id":"df4ebdad_g46ai5b7a7dccak2g0g76_7"}},{"name":"filters","description":"The source's own filter lists: statuses, outcomes, item types and subtypes, the 13 regions with their municipalities (ids + Greek names), ship types, sorts.","required_params":[],"optional_params":[],"params":[],"returns":"statuses[], outcomes[], item_types[{subtypes[]}], regions[{municipalities[]}], ship_types[], sorts[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"ebay","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"eBay API — search active listings, research sold prices, and fetch full item detail across 13 eBay marketplaces (no account required)","version":"0.3.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/ebay/v1","spec_available":true,"actions":[{"name":"search","description":"active-listing search by `query` -> results[]{item_id,title,price{value,currency},condition,buying_format,shipping,location,image,url,in_stock,stock_hint?,sold_count?,catalog_rating?}. Filters: domain(com/co.uk/de/...), page, max_results(<=240/page), sort(best_match|newly_listed|ending_soonest|price_low|price_high), condition(new|used|refurbished|open_box|for_parts), category, buy_it_now, auction. seller is item-page-only.","required_params":["query"],"optional_params":["domain","page","max_results","sort","condition","category","buy_it_now","auction","price_min","price_max","free_shipping","returns_accepted","best_offer","location","pickup_postcode","pickup_distance","ship_to_postal"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (item keywords).","on_invalid":"reject","example":"iphone 13 pro","aliases":["q"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match"},{"value":"newly_listed","label":"Newly listed"},{"value":"ending_soonest","label":"Ending soonest"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"price_asc","label":"Price: low to high (alias)"},{"value":"price_desc","label":"Price: high to low (alias)"}],"default":"best_match"},{"name":"condition","type":"enum","required":false,"description":"Only items in this condition (empty = all conditions).","on_invalid":"reject","allowed_values":[{"value":"new","label":"Brand new"},{"value":"open_box","label":"Open box"},{"value":"refurbished","label":"Refurbished"},{"value":"used","label":"Used / pre-owned"},{"value":"for_parts","label":"For parts or not working"}]},{"name":"category","type":"string","required":false,"description":"eBay category ID to narrow results — the number in an eBay category URL (e.g. 9355 = Cell Phones & Smartphones). Use the `categories` action to look an ID up by name. Empty = all.","on_invalid":"ignore","example":"9355","aliases":["category_id"]},{"name":"buy_it_now","type":"boolean","required":false,"description":"Only fixed-price (Buy It Now) listings.","on_invalid":"ignore","default":false},{"name":"auction","type":"boolean","required":false,"description":"Only auction listings.","on_invalid":"ignore","default":false},{"name":"price_min","type":"number","required":false,"description":"Minimum price (eBay _udlo), in the marketplace's currency.","on_invalid":"ignore","example":"100","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price (eBay _udhi), in the marketplace's currency.","on_invalid":"ignore","example":"500","minimum":0},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings with free shipping.","on_invalid":"ignore","default":false},{"name":"returns_accepted","type":"boolean","required":false,"description":"Only listings that accept returns.","on_invalid":"ignore","default":false},{"name":"best_offer","type":"boolean","required":false,"description":"Only listings that accept Best Offers.","on_invalid":"ignore","default":false},{"name":"location","type":"enum","required":false,"description":"Restrict by where the item is located. The choices follow the site's own Item location filter, so they depend on `domain`: `domestic` keeps only items in the site's home country (US Only on ebay.com, UK Only on ebay.co.uk). `uk` is the same as domestic and needs domain co.uk. The regional choice is North America on ebay.com and European Union on ebay.co.uk.","on_invalid":"ignore","allowed_values":[{"value":"domestic","label":"Home country of this eBay site only (US on ebay.com, UK on ebay.co.uk)"},{"value":"us","label":"Same as domestic (US Only on ebay.com)"},{"value":"uk","label":"UK Only (domain co.uk)"},{"value":"worldwide","label":"Available worldwide"},{"value":"north_america","label":"Regional: North America on ebay.com"},{"value":"european_union","label":"Regional: European Union on ebay.co.uk"}],"aliases":["item_location"]},{"name":"pickup_postcode","type":"string","required":false,"description":"Only listings available for collection in person near this UK postcode (eBay's 'Collection in person within' filter). Needs domain co.uk. Combine with pickup_distance.","on_invalid":"reject","example":"SW1A 1AA","aliases":["postcode"]},{"name":"pickup_distance","type":"integer","required":false,"description":"Collection radius in miles around pickup_postcode (default 25). eBay offers 10, 25, 50, 100, 200 and 500; other values act as the next option up (7 returned exactly the 10-mile results). Only used together with pickup_postcode.","on_invalid":"reject","example":25,"minimum":1,"maximum":500},{"name":"domain","type":"enum","required":false,"description":"Which eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"ebay.com — United States"},{"value":"co.uk","label":"ebay.co.uk — United Kingdom"},{"value":"de","label":"ebay.de — Germany"},{"value":"com.au","label":"ebay.com.au — Australia"},{"value":"ca","label":"ebay.ca — Canada"},{"value":"fr","label":"ebay.fr — France"},{"value":"it","label":"ebay.it — Italy"},{"value":"es","label":"ebay.es — Spain"},{"value":"nl","label":"ebay.nl — Netherlands"},{"value":"at","label":"ebay.at — Austria"},{"value":"ch","label":"ebay.ch — Switzerland"},{"value":"ie","label":"ebay.ie — Ireland"},{"value":"pl","label":"ebay.pl — Poland"}],"default":"com","aliases":["marketplace"]},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3…). Measured ceiling (2026-08-07, `iphone 13 pro`): pages 1–450 each return a full page of distinct items — no page repeats an earlier one — and page 470 returns nothing. At 240 results per page that is roughly 108,000 results deep, far more than any single query needs. Page until `meta.pagination.has_more` is false rather than probing for the end.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":450},{"name":"max_results","type":"integer","required":false,"description":"How many results to return per page (1–240). 240 is eBay's own hard ceiling, measured: 60/120/200/240 are all served exactly, and asking for 300 or 500 does NOT get you more — eBay serves about 250 and stops. Use `page` to go beyond 240; larger values are capped at 240.","on_invalid":"ignore","default":60,"example":60,"minimum":1,"maximum":240},{"name":"ship_to_postal","type":"string","required":false,"description":"Postal code in the site's own country to price shipping for: a US ZIP on ebay.com (33147), a UK postcode on ebay.co.uk (SW1A 1AA), a CAP on ebay.it (20121), a postcode on ebay.com.au (2000), etc. `shipping.rate` is then what that eBay site charges to ship there, and `ship_to.postal_code` confirms it. Without it: ebay.com uses a US address eBay picks itself, ebay.de a German one, and every other site a central postcode of its capital or main city (`ship_to` shows which). Matters for calculated shipping; a flat rate is the same for every address in the country. `ship_to_zip` is accepted as the same parameter.","on_invalid":"reject","example":"33147","aliases":["ship_to_zip","zip","zip_code","postal_code"]}],"returns":"results[]{item_id, title, price{value,currency}, condition (the listing's CONDITION in the site's own words — 'Brand New', 'Pre-Owned', 'Gebraucht', 'Occasion'; null when the card prints no condition. A product aspect is never returned here), aspects[]? (the card's OTHER subtitle rows — lens mount, shoe size, focal length, the seller's own strapline), buying_format, shipping, location, image, url, in_stock (true on every active card: eBay search lists only buyable listings), stock_hint? ('Last one', '3 left')} (meta.pagination for paging) + meta.ship_to{country, country_code, postal_code, source} (the buyer address eBay priced the cards for: the site's own country; card price and shipping text follow it) + meta.ship_to_status? ('destination_unresolved' when the page could not be priced for that country; card shipping is then null)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone 13 pro"}},{"name":"item_detail","description":"Full eBay item detail by item_id or listing URL: title, price, list price, currency, condition, availability, brand, model, MPN, images, category path, item specifics, seller (name, feedback score, review count), shipping terms, return policy, PLUS auction fields (bids, current_bid, time_left, end_time), watchers, quantity_available/quantity_sold, best_offer flag, and multi-variation SKUs (variations[]{dimension, values[]{value, out_of_stock}}), and listing_status ('active' / 'ended') so an ended listing is never mistaken for a buyable one. Shipping and stock are priced for a buyer in the site's own home country (US on com, Italy on it, UK on co.uk …; pass ship_to_postal for an exact postal code); `ship_to` says which address and `shipping_status` says why a rate is missing. Set include_description=1 to inline the full seller description text.","required_params":[],"optional_params":["item_id","url","domain","include_description","ship_to_postal","ship_to_zip"],"params":[{"name":"item_id","type":"string","required":false,"description":"eBay item number — the digits in the listing URL after /itm/. Provide item_id OR url (one of the two is required).","on_invalid":"reject","example":"287070621317","aliases":["id","itemId"]},{"name":"url","type":"string","required":false,"description":"Full eBay listing URL — alternative to item_id.","on_invalid":"reject","example":"https://www.ebay.com/itm/287070621317","aliases":["item_url"]},{"name":"include_description","type":"boolean","required":false,"description":"Also fetch and inline the full seller description text (one extra request; off by default for speed).","on_invalid":"ignore","default":false},{"name":"domain","type":"enum","required":false,"description":"Which eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"ebay.com — United States"},{"value":"co.uk","label":"ebay.co.uk — United Kingdom"},{"value":"de","label":"ebay.de — Germany"},{"value":"com.au","label":"ebay.com.au — Australia"},{"value":"ca","label":"ebay.ca — Canada"},{"value":"fr","label":"ebay.fr — France"},{"value":"it","label":"ebay.it — Italy"},{"value":"es","label":"ebay.es — Spain"},{"value":"nl","label":"ebay.nl — Netherlands"},{"value":"at","label":"ebay.at — Austria"},{"value":"ch","label":"ebay.ch — Switzerland"},{"value":"ie","label":"ebay.ie — Ireland"},{"value":"pl","label":"ebay.pl — Poland"}],"default":"com","aliases":["marketplace"]},{"name":"ship_to_postal","type":"string","required":false,"description":"Postal code in the site's own country to price shipping for: a US ZIP on ebay.com (33147), a UK postcode on ebay.co.uk (SW1A 1AA), a CAP on ebay.it (20121), a postcode on ebay.com.au (2000), etc. `shipping.rate` is then what that eBay site charges to ship there, and `ship_to.postal_code` confirms it. Without it: ebay.com uses a US address eBay picks itself, ebay.de a German one, and every other site a central postcode of its capital or main city (`ship_to` shows which). Matters for calculated shipping; a flat rate is the same for every address in the country. `ship_to_zip` is accepted as the same parameter.","on_invalid":"reject","example":"33147","aliases":["ship_to_zip","zip","zip_code","postal_code"]}],"returns":"item{item_id, title, price{value,currency}, list_price, condition, availability, brand, model, mpn, images[], category_path[], item_specifics{}, seller{name, feedback_pct, feedback_count}, shipping, return_policy, url, buying_format? ('auction' ONLY when the listing's own bid box is on the page — a fixed-price listing never carries it, and the bid count of a recommended listing is never read), bids?, current_bid?, time_left? (auction fields; present only on an auction), end_time?, watchers?, quantity_available?, quantity_sold?, best_offer, variations?[], description?, listing_status ('active' | 'ended' | null — eBay's own listing state from the page; 'ended' also when end_time is in the past; null when the page states neither. On an ended listing quantity_available is null: eBay keeps printing the last availability line on an ended page, so that number is not a buyable quantity). shipping{rate, currency, country, free} (the rate eBay charges to ship to `ship_to`; always an address in the site's own home country — USA on com, ITA on it, GBR on co.uk, AUS on com.au … rate 0 only when eBay itself says free, and then free=true. null when eBay shows no price for that destination — never 0 for that) + shipping_status ('ok' | 'not_shipped_to_destination' | 'pickup_only' | 'freight' | 'no_price_shown' | 'destination_unresolved' (the page could not be priced for the requested destination; shipping is null rather than another country's rate) | 'other_destination' (only on an eBay site outside the supported list: the only rate listed is for another country, named in shipping.country)) + shipping_note? (eBay's own shipping line when there is no rate) + ship_to{country, country_code, postal_code} (the address eBay priced the page for)}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"item_id":"287070621317"}},{"name":"items_batch","description":"Look up MANY eBay listings in ONE call by item number — up to 40 per request → the same full record `item_detail` returns for each one (title, price, condition, brand/model/MPN, images, category path, item specifics, seller reputation, shipping terms, return policy, auction fields, quantities). Built for enriching a price list or a competitor's catalogue in one round trip instead of one item at a time. COST, stated plainly so you can budget it: eBay publishes no batched item endpoint — every listing is its own page — so this costs ONE UPSTREAM REQUEST PER ITEM ID, exactly as if you had called item_detail N times, and it is priced that way. What you save is wall-clock, not requests: the fetches run concurrently, measured at 25.6s sequential vs 4.1s for 8 ids (6.2x). `meta.upstream_calls` always reports the true number. Anything eBay does not resolve comes back in `not_found` rather than being silently dropped, so a batch of 40 can never hide which one went missing. If you only need card-level fields (item_id, title, price, condition, shipping, image, url) there is a genuinely cheaper route that costs ONE upstream call: `search` with query `(id1,id2,id3)` — eBay's own OR syntax — measured to resolve 6 ids per call (a 7th is dropped) and to return no item specifics, seller or return policy. Shipping, price and stock are resolved exactly as item_detail resolves them (same page, same US buyer on domain com, same optional ship_to_postal), so the two actions agree.","required_params":["item_ids"],"optional_params":["domain","ship_to_postal","ship_to_zip"],"params":[{"name":"item_ids","type":"array","required":true,"description":"eBay item numbers to look up — up to 40 per call. The digits in a listing URL after /itm/. Accepts a list or a comma-separated string. Each id costs one upstream request. Ids eBay does not resolve are returned in `not_found` rather than dropped.","on_invalid":"reject","example":["287070621317","356789012345","195432109876"],"aliases":["item_id","ids","items"]},{"name":"domain","type":"enum","required":false,"description":"Which eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"ebay.com — United States"},{"value":"co.uk","label":"ebay.co.uk — United Kingdom"},{"value":"de","label":"ebay.de — Germany"},{"value":"com.au","label":"ebay.com.au — Australia"},{"value":"ca","label":"ebay.ca — Canada"},{"value":"fr","label":"ebay.fr — France"},{"value":"it","label":"ebay.it — Italy"},{"value":"es","label":"ebay.es — Spain"},{"value":"nl","label":"ebay.nl — Netherlands"},{"value":"at","label":"ebay.at — Austria"},{"value":"ch","label":"ebay.ch — Switzerland"},{"value":"ie","label":"ebay.ie — Ireland"},{"value":"pl","label":"ebay.pl — Poland"}],"default":"com","aliases":["marketplace"]},{"name":"ship_to_postal","type":"string","required":false,"description":"Postal code in the site's own country to price shipping for: a US ZIP on ebay.com (33147), a UK postcode on ebay.co.uk (SW1A 1AA), a CAP on ebay.it (20121), a postcode on ebay.com.au (2000), etc. `shipping.rate` is then what that eBay site charges to ship there, and `ship_to.postal_code` confirms it. Without it: ebay.com uses a US address eBay picks itself, ebay.de a German one, and every other site a central postcode of its capital or main city (`ship_to` shows which). Matters for calculated shipping; a flat rate is the same for every address in the country. `ship_to_zip` is accepted as the same parameter.","on_invalid":"reject","example":"33147","aliases":["ship_to_zip","zip","zip_code","postal_code"]}],"returns":"items[]{item_id, title, price{value,currency}, list_price, condition, availability, brand, model, mpn, images[], category_path[], item_specifics{}, seller{name, feedback_pct, feedback_count}, shipping, return_policy, url, bids?, current_bid?, end_time?, watchers?, quantity_available?, quantity_sold?, best_offer, description_url, listing_status ('active' | 'ended' | null; quantity_available is null on an ended listing), shipping{rate, currency, country, free} (the rate eBay charges to ship to `ship_to`; always an address in the site's own home country — USA on com, ITA on it, GBR on co.uk, AUS on com.au … rate 0 only when eBay itself says free, and then free=true. null when eBay shows no price for that destination — never 0 for that) + shipping_status ('ok' | 'not_shipped_to_destination' | 'pickup_only' | 'freight' | 'no_price_shown' | 'destination_unresolved' (the page could not be priced for the requested destination; shipping is null rather than another country's rate) | 'other_destination' (only on an eBay site outside the supported list: the only rate listed is for another country, named in shipping.country)) + shipping_note? (eBay's own shipping line when there is no rate) + ship_to{country, country_code, postal_code} (the address eBay priced the page for)} + not_found[] (item ids eBay did not resolve — ended, removed or invalid) + unavailable[] (item ids we could not fetch this time — retry them) + meta.upstream_calls (= the number of ids you sent; this action is billed per id, not per call)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"per_unit","credits":2,"per":1,"min":2},"example_params":{"item_ids":["287070621317","356789012345","195432109876"]}},{"name":"seller_items","description":"All active listings in a seller's storefront by `seller` username (eBay _ssn) -> results[]{item_id,title,price{value,currency},condition,buying_format,shipping,location,image,url}. Same card shape + filters/pagination as `search`. Use to scan a competitor's full catalog. Page-native paging via meta.pagination.","required_params":["seller"],"optional_params":["domain","page","max_results","sort","condition","category","price_min","price_max","free_shipping","returns_accepted","best_offer","location","pickup_postcode","pickup_distance","buy_it_now","auction","ship_to_postal"],"params":[{"name":"seller","type":"string","required":true,"description":"eBay seller username (store/usr name) — the handle in /usr/{seller} or the 'Sold by' link on a listing.","on_invalid":"reject","example":"musicmagpie","aliases":["seller_name","_ssn"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"best_match","label":"Best match"},{"value":"newly_listed","label":"Newly listed"},{"value":"ending_soonest","label":"Ending soonest"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"}],"default":"best_match"},{"name":"condition","type":"enum","required":false,"description":"Only items in this condition (empty = all conditions).","on_invalid":"reject","allowed_values":[{"value":"new","label":"Brand new"},{"value":"open_box","label":"Open box"},{"value":"refurbished","label":"Refurbished"},{"value":"used","label":"Used / pre-owned"},{"value":"for_parts","label":"For parts or not working"}]},{"name":"category","type":"string","required":false,"description":"eBay category ID to narrow results — the number in an eBay category URL (e.g. 9355 = Cell Phones & Smartphones). Use the `categories` action to look an ID up by name. Empty = all.","on_invalid":"ignore","example":"9355","aliases":["category_id"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price (eBay _udlo), in the marketplace's currency.","on_invalid":"ignore","example":"100","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price (eBay _udhi), in the marketplace's currency.","on_invalid":"ignore","example":"500","minimum":0},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings with free shipping.","on_invalid":"ignore","default":false},{"name":"returns_accepted","type":"boolean","required":false,"description":"Only listings that accept returns.","on_invalid":"ignore","default":false},{"name":"best_offer","type":"boolean","required":false,"description":"Only listings that accept Best Offers.","on_invalid":"ignore","default":false},{"name":"location","type":"enum","required":false,"description":"Restrict by where the item is located. The choices follow the site's own Item location filter, so they depend on `domain`: `domestic` keeps only items in the site's home country (US Only on ebay.com, UK Only on ebay.co.uk). `uk` is the same as domestic and needs domain co.uk. The regional choice is North America on ebay.com and European Union on ebay.co.uk.","on_invalid":"ignore","allowed_values":[{"value":"domestic","label":"Home country of this eBay site only (US on ebay.com, UK on ebay.co.uk)"},{"value":"us","label":"Same as domestic (US Only on ebay.com)"},{"value":"uk","label":"UK Only (domain co.uk)"},{"value":"worldwide","label":"Available worldwide"},{"value":"north_america","label":"Regional: North America on ebay.com"},{"value":"european_union","label":"Regional: European Union on ebay.co.uk"}],"aliases":["item_location"]},{"name":"pickup_postcode","type":"string","required":false,"description":"Only listings available for collection in person near this UK postcode (eBay's 'Collection in person within' filter). Needs domain co.uk. Combine with pickup_distance.","on_invalid":"reject","example":"SW1A 1AA","aliases":["postcode"]},{"name":"pickup_distance","type":"integer","required":false,"description":"Collection radius in miles around pickup_postcode (default 25). eBay offers 10, 25, 50, 100, 200 and 500; other values act as the next option up (7 returned exactly the 10-mile results). Only used together with pickup_postcode.","on_invalid":"reject","example":25,"minimum":1,"maximum":500},{"name":"domain","type":"enum","required":false,"description":"Which eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"ebay.com — United States"},{"value":"co.uk","label":"ebay.co.uk — United Kingdom"},{"value":"de","label":"ebay.de — Germany"},{"value":"com.au","label":"ebay.com.au — Australia"},{"value":"ca","label":"ebay.ca — Canada"},{"value":"fr","label":"ebay.fr — France"},{"value":"it","label":"ebay.it — Italy"},{"value":"es","label":"ebay.es — Spain"},{"value":"nl","label":"ebay.nl — Netherlands"},{"value":"at","label":"ebay.at — Austria"},{"value":"ch","label":"ebay.ch — Switzerland"},{"value":"ie","label":"ebay.ie — Ireland"},{"value":"pl","label":"ebay.pl — Poland"}],"default":"com","aliases":["marketplace"]},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3…). Measured ceiling (2026-08-07, `iphone 13 pro`): pages 1–450 each return a full page of distinct items — no page repeats an earlier one — and page 470 returns nothing. At 240 results per page that is roughly 108,000 results deep, far more than any single query needs. Page until `meta.pagination.has_more` is false rather than probing for the end.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":450},{"name":"max_results","type":"integer","required":false,"description":"How many results to return per page (1–240). 240 is eBay's own hard ceiling, measured: 60/120/200/240 are all served exactly, and asking for 300 or 500 does NOT get you more — eBay serves about 250 and stops. Use `page` to go beyond 240; larger values are capped at 240.","on_invalid":"ignore","default":60,"example":60,"minimum":1,"maximum":240},{"name":"ship_to_postal","type":"string","required":false,"description":"Postal code in the site's own country to price shipping for: a US ZIP on ebay.com (33147), a UK postcode on ebay.co.uk (SW1A 1AA), a CAP on ebay.it (20121), a postcode on ebay.com.au (2000), etc. `shipping.rate` is then what that eBay site charges to ship there, and `ship_to.postal_code` confirms it. Without it: ebay.com uses a US address eBay picks itself, ebay.de a German one, and every other site a central postcode of its capital or main city (`ship_to` shows which). Matters for calculated shipping; a flat rate is the same for every address in the country. `ship_to_zip` is accepted as the same parameter.","on_invalid":"reject","example":"33147","aliases":["ship_to_zip","zip","zip_code","postal_code"]}],"returns":"results[]{item_id, title, price{value,currency}, condition, buying_format, shipping, location, image, url, in_stock (true on every active card: eBay search lists only buyable listings), stock_hint? ('Last one', '3 left')} (meta.pagination for paging) + meta.ship_to{country, country_code, postal_code, source} (the buyer address eBay priced the cards for: the site's own country; card price and shipping text follow it) + meta.ship_to_status? ('destination_unresolved' when the page could not be priced for that country; card shipping is then null)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"seller":"musicmagpie"}},{"name":"seller_profile","description":"Seller reputation by `seller` username -> seller_profile{store_name, feedback_score, feedback_positive_pct, positive_pct_12mo, items_sold_display, followers_display, member_since, location, business_seller, top_rated, feedback_ratings{positive/neutral/negative:{m1,m6,m12}}}. From the public storefront + feedback pages (logged-out, no account).","required_params":["seller"],"optional_params":["domain"],"params":[{"name":"seller","type":"string","required":true,"description":"eBay seller username (store/usr name) — the handle in /usr/{seller} or the 'Sold by' link on a listing.","on_invalid":"reject","example":"musicmagpie","aliases":["seller_name","_ssn"]},{"name":"domain","type":"enum","required":false,"description":"Which eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"ebay.com — United States"},{"value":"co.uk","label":"ebay.co.uk — United Kingdom"},{"value":"de","label":"ebay.de — Germany"},{"value":"com.au","label":"ebay.com.au — Australia"},{"value":"ca","label":"ebay.ca — Canada"},{"value":"fr","label":"ebay.fr — France"},{"value":"it","label":"ebay.it — Italy"},{"value":"es","label":"ebay.es — Spain"},{"value":"nl","label":"ebay.nl — Netherlands"},{"value":"at","label":"ebay.at — Austria"},{"value":"ch","label":"ebay.ch — Switzerland"},{"value":"ie","label":"ebay.ie — Ireland"},{"value":"pl","label":"ebay.pl — Poland"}],"default":"com","aliases":["marketplace"]}],"returns":"seller_profile{store_name, feedback_score, feedback_positive_pct, positive_pct_12mo, items_sold_display, followers_display, member_since, location, business_seller, top_rated, feedback_ratings{}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"seller":"musicmagpie"}},{"name":"deals","description":"eBay Daily Deals grid (/deals) -> results[]{item_id,title,price{value,currency},was_price{value,currency},shipping,deal_badge,image,url}. Current promoted discounts site-wide for the marketplace. No query needed.","required_params":[],"optional_params":["domain","max_results","ship_to_postal"],"params":[{"name":"domain","type":"enum","required":false,"description":"Which eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"ebay.com — United States"},{"value":"co.uk","label":"ebay.co.uk — United Kingdom"},{"value":"de","label":"ebay.de — Germany"},{"value":"com.au","label":"ebay.com.au — Australia"},{"value":"ca","label":"ebay.ca — Canada"},{"value":"fr","label":"ebay.fr — France"},{"value":"it","label":"ebay.it — Italy"},{"value":"es","label":"ebay.es — Spain"},{"value":"nl","label":"ebay.nl — Netherlands"},{"value":"at","label":"ebay.at — Austria"},{"value":"ch","label":"ebay.ch — Switzerland"},{"value":"ie","label":"ebay.ie — Ireland"},{"value":"pl","label":"ebay.pl — Poland"}],"default":"com","aliases":["marketplace"]},{"name":"max_results","type":"integer","required":false,"description":"How many results to return per page (1–240). 240 is eBay's own hard ceiling, measured: 60/120/200/240 are all served exactly, and asking for 300 or 500 does NOT get you more — eBay serves about 250 and stops. Use `page` to go beyond 240; larger values are capped at 240.","on_invalid":"ignore","default":60,"example":60,"minimum":1,"maximum":240},{"name":"ship_to_postal","type":"string","required":false,"description":"Postal code in the site's own country to price shipping for: a US ZIP on ebay.com (33147), a UK postcode on ebay.co.uk (SW1A 1AA), a CAP on ebay.it (20121), a postcode on ebay.com.au (2000), etc. `shipping.rate` is then what that eBay site charges to ship there, and `ship_to.postal_code` confirms it. Without it: ebay.com uses a US address eBay picks itself, ebay.de a German one, and every other site a central postcode of its capital or main city (`ship_to` shows which). Matters for calculated shipping; a flat rate is the same for every address in the country. `ship_to_zip` is accepted as the same parameter.","on_invalid":"reject","example":"33147","aliases":["ship_to_zip","zip","zip_code","postal_code"]}],"returns":"results[]{item_id, title, price{value,currency}, was_price{value,currency}, shipping, deal_badge, image, url} + meta.ship_to{country, country_code, postal_code, source} (the buyer address eBay priced the cards for: the site's own country; card price and shipping text follow it) + meta.ship_to_status? ('destination_unresolved' when the page could not be priced for that country; card shipping is then null)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"max_results":60}},{"name":"categories","description":"eBay category tree / ID lookup (/n/all-categories) -> categories[]{category_id,name,slug} + groups[] (top-level departments). Pass `query` to filter by name so you can resolve a category name (e.g. 'cell phones') to the numeric ID used by search's `category` param — no need to know '9355' in advance.","required_params":[],"optional_params":["query","domain","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Filter categories by name/slug substring (case-insensitive). Empty = the full top-level tree.","on_invalid":"ignore","example":"cell phones","aliases":["q","name"]},{"name":"domain","type":"enum","required":false,"description":"Which eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"com","label":"ebay.com — United States"},{"value":"co.uk","label":"ebay.co.uk — United Kingdom"},{"value":"de","label":"ebay.de — Germany"},{"value":"com.au","label":"ebay.com.au — Australia"},{"value":"ca","label":"ebay.ca — Canada"},{"value":"fr","label":"ebay.fr — France"},{"value":"it","label":"ebay.it — Italy"},{"value":"es","label":"ebay.es — Spain"},{"value":"nl","label":"ebay.nl — Netherlands"},{"value":"at","label":"ebay.at — Austria"},{"value":"ch","label":"ebay.ch — Switzerland"},{"value":"ie","label":"ebay.ie — Ireland"},{"value":"pl","label":"ebay.pl — Poland"}],"default":"com","aliases":["marketplace"]},{"name":"max_results","type":"integer","required":false,"description":"How many results to return per page (1–240). 240 is eBay's own hard ceiling, measured: 60/120/200/240 are all served exactly, and asking for 300 or 500 does NOT get you more — eBay serves about 250 and stops. Use `page` to go beyond 240; larger values are capped at 240.","on_invalid":"ignore","default":60,"example":60,"minimum":1,"maximum":240}],"returns":"categories[]{category_id, name, slug}, groups[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"cell phones"}}]},{"name":"ebay-sold","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"eBay Sold Listings API — what a seller actually sold on eBay (item, price paid, recency, verified purchase) and the sold listing itself (sold date, final price, bids, format, condition, item specifics). Logged out, no account, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ebay-sold/v1","spec_available":true,"actions":[{"name":"seller_sales","description":"Completed sales of one eBay seller, newest first: each row is a purchase a buyer left feedback for — item title, item number, the price paid in the listing currency, 'Verified purchase', and the recency band eBay prints (Past month / Past 6 months / Past year / More than a year ago). Filter by words (eBay's own feedback search), by period, 25-200 rows per page. eBay prints no exact date here: pass a row's item_id to sold_item for the exact sold date (kept by eBay for roughly the last 90-120 days).","required_params":["seller"],"optional_params":["query","period","sort","page","limit"],"params":[{"name":"seller","type":"string","required":true,"description":"eBay seller username, exactly as on the seller's page.","on_invalid":"reject","example":"ed94falcon","aliases":["seller_name","username","user","_ssn"]},{"name":"query","type":"string","required":false,"description":"Only sales matching these words in eBay's own feedback search (measured: every row returned had the words in its item title).","on_invalid":"reject","example":"radio","aliases":["q","keyword","keywords"]},{"name":"period","type":"enum","required":false,"description":"Only sales whose feedback was left in this window.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All time"},{"value":"1m","label":"Past month"},{"value":"6m","label":"Past 6 months"},{"value":"12m","label":"Past 12 months"}],"default":"all","example":"6m"},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"relevance","label":"eBay relevance"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Page number; meta.total_pages says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"limit","type":"enum","required":false,"description":"Rows per page (eBay offers 25, 50, 100 or 200).","on_invalid":"reject","allowed_values":[{"value":"25","label":"25"},{"value":"50","label":"50"},{"value":"100","label":"100"},{"value":"200","label":"200"}],"default":"25","example":"100","aliases":["per_page"]}],"returns":"rows[]: feedback_id, item_id, title, item_url, item_link_published, price{value, currency, raw}, verified_purchase, period, buyer (as eBay masks it), buyer_feedback_score, rating, comment. meta: page, total_pages, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"seller":"ed94falcon"}},{"name":"sold_item","description":"One eBay listing by item number, read as a sold-listing record: did it sell (eBay's 'Sold' banner — an ended listing is not a sale), when (exact end time), for how much (final price in the listing currency, plus eBay's conversion), auction or fixed price, bid count, reserve, 'or Best Offer', the eBay site it was listed on, seller, condition, item location, item specifics, category path and images.","required_params":["item_id"],"optional_params":[],"params":[{"name":"item_id","type":"string","required":true,"description":"eBay item number (a seller_sales row's item_id, as is) or an ebay.*/itm/ URL.","on_invalid":"reject","example":"147591040580","aliases":["id","itemId","url"]}],"returns":"item{item_id, title, url, page_kind (full|archived), listing_status, sold (true = ended in a sale, false = ended unsold, null = still listed or archived), status_text, sold_at, ended_at, started_at, price{value, currency, raw}, price_is (final | current_asking), price_converted, units_sold, units_available, buying_format, bid_count, best_offer_enabled, has_reserve, marketplace, seller{username, url}, condition, item_location, shipping_text, shipping_quoted_for, brand, mpn, category_path[], item_specifics{}, images[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"147591040580"}}]},{"name":"ecosia","category":{"id":"search-seo","title":"Search & SEO"},"title":"Ecosia Search API — web, news, images, videos and autocomplete (SERP scraper)","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/ecosia/v1","spec_available":true,"actions":[{"name":"search","description":"Ecosia web results for a query: ranked organic results (position, title, URL, displayed URL, domain, snippet, date, sitelinks), related searches, knowledge panel, local businesses, inline videos, spelling correction, plus the index Ecosia answered from. Choose the region, SafeSearch level and the page.","required_params":["q"],"optional_params":["market","language","safe_search","page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language.","on_invalid":"reject","example":"best hiking boots","aliases":["query","keyword"]},{"name":"market","type":"enum","required":false,"description":"Ecosia search region (language-country, lowercase), the same list as Ecosia's own region menu. Sets which country's results and which language the index favours. en-ww = all regions.","on_invalid":"reject","allowed_values":[{"value":"en-us","label":"United States (English)"},{"value":"es-us","label":"United States (Spanish)"},{"value":"en-gb","label":"United Kingdom"},{"value":"en-ca","label":"Canada (English)"},{"value":"fr-ca","label":"Canada (French)"},{"value":"en-au","label":"Australia"},{"value":"en-nz","label":"New Zealand"},{"value":"en-ie","label":"Ireland"},{"value":"en-in","label":"India"},{"value":"en-za","label":"South Africa"},{"value":"en-sg","label":"Singapore"},{"value":"en-my","label":"Malaysia"},{"value":"en-ph","label":"Philippines"},{"value":"en-id","label":"Indonesia"},{"value":"en-th","label":"Thailand (English)"},{"value":"th-th","label":"Thailand (Thai)"},{"value":"en-vn","label":"Vietnam (English)"},{"value":"vi-vn","label":"Vietnam (Vietnamese)"},{"value":"en-sa","label":"Saudi Arabia (English)"},{"value":"ar-sa","label":"Saudi Arabia (Arabic)"},{"value":"de-de","label":"Germany"},{"value":"de-at","label":"Austria"},{"value":"de-ch","label":"Switzerland (German)"},{"value":"fr-ch","label":"Switzerland (French)"},{"value":"fr-fr","label":"France"},{"value":"fr-be","label":"Belgium (French)"},{"value":"nl-be","label":"Belgium (Dutch)"},{"value":"nl-nl","label":"Netherlands"},{"value":"es-es","label":"Spain"},{"value":"pt-pt","label":"Portugal"},{"value":"it-it","label":"Italy"},{"value":"pl-pl","label":"Poland"},{"value":"cz-cz","label":"Czechia"},{"value":"sk-sk","label":"Slovakia"},{"value":"hr-hr","label":"Croatia"},{"value":"ro-ro","label":"Romania"},{"value":"bg-bg","label":"Bulgaria"},{"value":"gr-gr","label":"Greece"},{"value":"da-dk","label":"Denmark"},{"value":"sv-se","label":"Sweden"},{"value":"nb-no","label":"Norway"},{"value":"fi-fi","label":"Finland"},{"value":"ee-ee","label":"Estonia"},{"value":"lv-lv","label":"Latvia"},{"value":"lt-lt","label":"Lithuania"},{"value":"uk-ua","label":"Ukraine"},{"value":"ru-ru","label":"Russia"},{"value":"tr-tr","label":"Türkiye"},{"value":"ja-jp","label":"Japan"},{"value":"ko-kr","label":"South Korea"},{"value":"zh-cn","label":"China"},{"value":"zh-hk","label":"Hong Kong SAR China"},{"value":"zh-tw","label":"Taiwan"},{"value":"pt-br","label":"Brazil"},{"value":"es-mx","label":"Mexico"},{"value":"es-ar","label":"Argentina"},{"value":"es-cl","label":"Chile"},{"value":"es-co","label":"Colombia"},{"value":"es-pe","label":"Peru"},{"value":"es-ve","label":"Venezuela"},{"value":"en-ww","label":"All regions"}],"default":"en-us","example":"en-us","aliases":["mkt","region"]},{"name":"language","type":"string","required":false,"description":"Interface language as a 2-letter code (en, de, fr, ja...). Defaults to the market's language. It changes the labels Ecosia writes into the page (for example the sitelink text), not which results are returned.","on_invalid":"ignore","example":"en","aliases":["hl","lang"]},{"name":"safe_search","type":"enum","required":false,"description":"Ecosia SafeSearch level.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"Filter explicit text, images and videos"},{"value":"moderate","label":"Filter explicit images and videos (Ecosia's default)"},{"value":"off","label":"No filtering"}],"default":"moderate","example":"moderate","aliases":["safe","safesearch"]},{"name":"page","type":"integer","required":false,"description":"1-based results page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10}],"returns":"query, market, page, results_provider, results[] (position/title/url/displayed_url/domain/url_is_redirect/snippet/date/source_name/thumbnail_url/sitelinks/ecosia_label/provider), ads[], related_searches[], knowledge_panel{}, local_results[], video_results[], spelling_suggestion, query_correction{}, has_next_page","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"best hiking boots"}},{"name":"news","description":"Ecosia News results: title, URL, publisher, publish time (UTC), snippet and thumbnail, with the source's own total count. Region, SafeSearch, recency window and page.","required_params":["q"],"optional_params":["market","language","safe_search","freshness","page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language.","on_invalid":"reject","example":"best hiking boots","aliases":["query","keyword"]},{"name":"market","type":"enum","required":false,"description":"Ecosia search region (language-country, lowercase), the same list as Ecosia's own region menu. Sets which country's results and which language the index favours. en-ww = all regions.","on_invalid":"reject","allowed_values":[{"value":"en-us","label":"United States (English)"},{"value":"es-us","label":"United States (Spanish)"},{"value":"en-gb","label":"United Kingdom"},{"value":"en-ca","label":"Canada (English)"},{"value":"fr-ca","label":"Canada (French)"},{"value":"en-au","label":"Australia"},{"value":"en-nz","label":"New Zealand"},{"value":"en-ie","label":"Ireland"},{"value":"en-in","label":"India"},{"value":"en-za","label":"South Africa"},{"value":"en-sg","label":"Singapore"},{"value":"en-my","label":"Malaysia"},{"value":"en-ph","label":"Philippines"},{"value":"en-id","label":"Indonesia"},{"value":"en-th","label":"Thailand (English)"},{"value":"th-th","label":"Thailand (Thai)"},{"value":"en-vn","label":"Vietnam (English)"},{"value":"vi-vn","label":"Vietnam (Vietnamese)"},{"value":"en-sa","label":"Saudi Arabia (English)"},{"value":"ar-sa","label":"Saudi Arabia (Arabic)"},{"value":"de-de","label":"Germany"},{"value":"de-at","label":"Austria"},{"value":"de-ch","label":"Switzerland (German)"},{"value":"fr-ch","label":"Switzerland (French)"},{"value":"fr-fr","label":"France"},{"value":"fr-be","label":"Belgium (French)"},{"value":"nl-be","label":"Belgium (Dutch)"},{"value":"nl-nl","label":"Netherlands"},{"value":"es-es","label":"Spain"},{"value":"pt-pt","label":"Portugal"},{"value":"it-it","label":"Italy"},{"value":"pl-pl","label":"Poland"},{"value":"cz-cz","label":"Czechia"},{"value":"sk-sk","label":"Slovakia"},{"value":"hr-hr","label":"Croatia"},{"value":"ro-ro","label":"Romania"},{"value":"bg-bg","label":"Bulgaria"},{"value":"gr-gr","label":"Greece"},{"value":"da-dk","label":"Denmark"},{"value":"sv-se","label":"Sweden"},{"value":"nb-no","label":"Norway"},{"value":"fi-fi","label":"Finland"},{"value":"ee-ee","label":"Estonia"},{"value":"lv-lv","label":"Latvia"},{"value":"lt-lt","label":"Lithuania"},{"value":"uk-ua","label":"Ukraine"},{"value":"ru-ru","label":"Russia"},{"value":"tr-tr","label":"Türkiye"},{"value":"ja-jp","label":"Japan"},{"value":"ko-kr","label":"South Korea"},{"value":"zh-cn","label":"China"},{"value":"zh-hk","label":"Hong Kong SAR China"},{"value":"zh-tw","label":"Taiwan"},{"value":"pt-br","label":"Brazil"},{"value":"es-mx","label":"Mexico"},{"value":"es-ar","label":"Argentina"},{"value":"es-cl","label":"Chile"},{"value":"es-co","label":"Colombia"},{"value":"es-pe","label":"Peru"},{"value":"es-ve","label":"Venezuela"},{"value":"en-ww","label":"All regions"}],"default":"en-us","example":"en-us","aliases":["mkt","region"]},{"name":"language","type":"string","required":false,"description":"Interface language as a 2-letter code (en, de, fr, ja...). Defaults to the market's language. It changes the labels Ecosia writes into the page (for example the sitelink text), not which results are returned.","on_invalid":"ignore","example":"en","aliases":["hl","lang"]},{"name":"safe_search","type":"enum","required":false,"description":"Ecosia SafeSearch level.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"Filter explicit text, images and videos"},{"value":"moderate","label":"Filter explicit images and videos (Ecosia's default)"},{"value":"off","label":"No filtering"}],"default":"moderate","example":"moderate","aliases":["safe","safesearch"]},{"name":"freshness","type":"enum","required":false,"description":"Only results from this recency window (Ecosia's own time filter).","on_invalid":"reject","allowed_values":[{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"}],"example":"week","aliases":["time_range","time"]},{"name":"page","type":"integer","required":false,"description":"1-based results page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"query, market, page, total_results, total_pages, news[] (position/title/url/domain/source/date/snippet/thumbnail_url)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"climate change"}},{"name":"images","description":"Ecosia image results: full-size image URL, thumbnail, source page, dimensions, format and accent colour, plus Ecosia's related-search chips. Filter by size, colour, type, aspect ratio, licence and recency.","required_params":["q"],"optional_params":["market","language","safe_search","freshness","size","color","image_type","aspect","license","page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language.","on_invalid":"reject","example":"best hiking boots","aliases":["query","keyword"]},{"name":"market","type":"enum","required":false,"description":"Ecosia search region (language-country, lowercase), the same list as Ecosia's own region menu. Sets which country's results and which language the index favours. en-ww = all regions.","on_invalid":"reject","allowed_values":[{"value":"en-us","label":"United States (English)"},{"value":"es-us","label":"United States (Spanish)"},{"value":"en-gb","label":"United Kingdom"},{"value":"en-ca","label":"Canada (English)"},{"value":"fr-ca","label":"Canada (French)"},{"value":"en-au","label":"Australia"},{"value":"en-nz","label":"New Zealand"},{"value":"en-ie","label":"Ireland"},{"value":"en-in","label":"India"},{"value":"en-za","label":"South Africa"},{"value":"en-sg","label":"Singapore"},{"value":"en-my","label":"Malaysia"},{"value":"en-ph","label":"Philippines"},{"value":"en-id","label":"Indonesia"},{"value":"en-th","label":"Thailand (English)"},{"value":"th-th","label":"Thailand (Thai)"},{"value":"en-vn","label":"Vietnam (English)"},{"value":"vi-vn","label":"Vietnam (Vietnamese)"},{"value":"en-sa","label":"Saudi Arabia (English)"},{"value":"ar-sa","label":"Saudi Arabia (Arabic)"},{"value":"de-de","label":"Germany"},{"value":"de-at","label":"Austria"},{"value":"de-ch","label":"Switzerland (German)"},{"value":"fr-ch","label":"Switzerland (French)"},{"value":"fr-fr","label":"France"},{"value":"fr-be","label":"Belgium (French)"},{"value":"nl-be","label":"Belgium (Dutch)"},{"value":"nl-nl","label":"Netherlands"},{"value":"es-es","label":"Spain"},{"value":"pt-pt","label":"Portugal"},{"value":"it-it","label":"Italy"},{"value":"pl-pl","label":"Poland"},{"value":"cz-cz","label":"Czechia"},{"value":"sk-sk","label":"Slovakia"},{"value":"hr-hr","label":"Croatia"},{"value":"ro-ro","label":"Romania"},{"value":"bg-bg","label":"Bulgaria"},{"value":"gr-gr","label":"Greece"},{"value":"da-dk","label":"Denmark"},{"value":"sv-se","label":"Sweden"},{"value":"nb-no","label":"Norway"},{"value":"fi-fi","label":"Finland"},{"value":"ee-ee","label":"Estonia"},{"value":"lv-lv","label":"Latvia"},{"value":"lt-lt","label":"Lithuania"},{"value":"uk-ua","label":"Ukraine"},{"value":"ru-ru","label":"Russia"},{"value":"tr-tr","label":"Türkiye"},{"value":"ja-jp","label":"Japan"},{"value":"ko-kr","label":"South Korea"},{"value":"zh-cn","label":"China"},{"value":"zh-hk","label":"Hong Kong SAR China"},{"value":"zh-tw","label":"Taiwan"},{"value":"pt-br","label":"Brazil"},{"value":"es-mx","label":"Mexico"},{"value":"es-ar","label":"Argentina"},{"value":"es-cl","label":"Chile"},{"value":"es-co","label":"Colombia"},{"value":"es-pe","label":"Peru"},{"value":"es-ve","label":"Venezuela"},{"value":"en-ww","label":"All regions"}],"default":"en-us","example":"en-us","aliases":["mkt","region"]},{"name":"language","type":"string","required":false,"description":"Interface language as a 2-letter code (en, de, fr, ja...). Defaults to the market's language. It changes the labels Ecosia writes into the page (for example the sitelink text), not which results are returned.","on_invalid":"ignore","example":"en","aliases":["hl","lang"]},{"name":"safe_search","type":"enum","required":false,"description":"Ecosia SafeSearch level.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"Filter explicit text, images and videos"},{"value":"moderate","label":"Filter explicit images and videos (Ecosia's default)"},{"value":"off","label":"No filtering"}],"default":"moderate","example":"moderate","aliases":["safe","safesearch"]},{"name":"freshness","type":"enum","required":false,"description":"Only results from this recency window (Ecosia's own time filter).","on_invalid":"reject","allowed_values":[{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"}],"example":"week","aliases":["time_range","time"]},{"name":"size","type":"enum","required":false,"description":"Ecosia's own 'size' filter.","on_invalid":"reject","allowed_values":[{"value":"small","label":"Small"},{"value":"medium","label":"Medium"},{"value":"large","label":"Large"},{"value":"wallpaper","label":"Wallpaper"}],"example":"small"},{"name":"color","type":"enum","required":false,"description":"Ecosia's own 'color' filter.","on_invalid":"reject","allowed_values":[{"value":"colorOnly","label":"colorOnly"},{"value":"monochrome","label":"monochrome"},{"value":"red","label":"red"},{"value":"orange","label":"orange"},{"value":"yellow","label":"yellow"},{"value":"green","label":"green"},{"value":"teal","label":"teal"},{"value":"blue","label":"blue"},{"value":"purple","label":"purple"},{"value":"pink","label":"pink"},{"value":"brown","label":"brown"},{"value":"black","label":"black"},{"value":"gray","label":"gray"},{"value":"white","label":"white"}],"example":"colorOnly"},{"name":"image_type","type":"enum","required":false,"description":"Ecosia's own 'imageType' filter.","on_invalid":"reject","allowed_values":[{"value":"photo","label":"Photo"},{"value":"clipart","label":"Clipart"},{"value":"line","label":"Line drawing"},{"value":"animatedgif","label":"Animated GIF"},{"value":"transparent","label":"Transparent background"}],"example":"photo"},{"name":"aspect","type":"enum","required":false,"description":"Ecosia's own 'aspect' filter.","on_invalid":"reject","allowed_values":[{"value":"square","label":"Square"},{"value":"wide","label":"Wide"},{"value":"tall","label":"Tall"}],"example":"square"},{"name":"license","type":"enum","required":false,"description":"Ecosia's own 'license' filter.","on_invalid":"reject","allowed_values":[{"value":"share","label":"Free to share"},{"value":"shareCommercially","label":"Free to share commercially"},{"value":"modify","label":"Free to modify"},{"value":"modifyCommercially","label":"Free to modify commercially"},{"value":"public","label":"Public domain"}],"example":"share"},{"name":"page","type":"integer","required":false,"description":"1-based results page. About 60 images per page. Pages overlap (Ecosia serves windows, not slices): dedupe on id.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10}],"returns":"query, market, page, total_results, images[] (position/id/title/image_url/thumbnail_url/source_url/domain/width/height/thumbnail_width/thumbnail_height/format/accent_color), related_searches[] (query/label/thumbnail_url)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"q":"red fox"}},{"name":"videos","description":"Ecosia video results: watch URL, platform, title, description, duration (ISO 8601 and seconds), publish date and thumbnail. Filter by length, resolution and recency.","required_params":["q"],"optional_params":["market","language","safe_search","freshness","length","resolution","page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language.","on_invalid":"reject","example":"best hiking boots","aliases":["query","keyword"]},{"name":"market","type":"enum","required":false,"description":"Ecosia search region (language-country, lowercase), the same list as Ecosia's own region menu. Sets which country's results and which language the index favours. en-ww = all regions.","on_invalid":"reject","allowed_values":[{"value":"en-us","label":"United States (English)"},{"value":"es-us","label":"United States (Spanish)"},{"value":"en-gb","label":"United Kingdom"},{"value":"en-ca","label":"Canada (English)"},{"value":"fr-ca","label":"Canada (French)"},{"value":"en-au","label":"Australia"},{"value":"en-nz","label":"New Zealand"},{"value":"en-ie","label":"Ireland"},{"value":"en-in","label":"India"},{"value":"en-za","label":"South Africa"},{"value":"en-sg","label":"Singapore"},{"value":"en-my","label":"Malaysia"},{"value":"en-ph","label":"Philippines"},{"value":"en-id","label":"Indonesia"},{"value":"en-th","label":"Thailand (English)"},{"value":"th-th","label":"Thailand (Thai)"},{"value":"en-vn","label":"Vietnam (English)"},{"value":"vi-vn","label":"Vietnam (Vietnamese)"},{"value":"en-sa","label":"Saudi Arabia (English)"},{"value":"ar-sa","label":"Saudi Arabia (Arabic)"},{"value":"de-de","label":"Germany"},{"value":"de-at","label":"Austria"},{"value":"de-ch","label":"Switzerland (German)"},{"value":"fr-ch","label":"Switzerland (French)"},{"value":"fr-fr","label":"France"},{"value":"fr-be","label":"Belgium (French)"},{"value":"nl-be","label":"Belgium (Dutch)"},{"value":"nl-nl","label":"Netherlands"},{"value":"es-es","label":"Spain"},{"value":"pt-pt","label":"Portugal"},{"value":"it-it","label":"Italy"},{"value":"pl-pl","label":"Poland"},{"value":"cz-cz","label":"Czechia"},{"value":"sk-sk","label":"Slovakia"},{"value":"hr-hr","label":"Croatia"},{"value":"ro-ro","label":"Romania"},{"value":"bg-bg","label":"Bulgaria"},{"value":"gr-gr","label":"Greece"},{"value":"da-dk","label":"Denmark"},{"value":"sv-se","label":"Sweden"},{"value":"nb-no","label":"Norway"},{"value":"fi-fi","label":"Finland"},{"value":"ee-ee","label":"Estonia"},{"value":"lv-lv","label":"Latvia"},{"value":"lt-lt","label":"Lithuania"},{"value":"uk-ua","label":"Ukraine"},{"value":"ru-ru","label":"Russia"},{"value":"tr-tr","label":"Türkiye"},{"value":"ja-jp","label":"Japan"},{"value":"ko-kr","label":"South Korea"},{"value":"zh-cn","label":"China"},{"value":"zh-hk","label":"Hong Kong SAR China"},{"value":"zh-tw","label":"Taiwan"},{"value":"pt-br","label":"Brazil"},{"value":"es-mx","label":"Mexico"},{"value":"es-ar","label":"Argentina"},{"value":"es-cl","label":"Chile"},{"value":"es-co","label":"Colombia"},{"value":"es-pe","label":"Peru"},{"value":"es-ve","label":"Venezuela"},{"value":"en-ww","label":"All regions"}],"default":"en-us","example":"en-us","aliases":["mkt","region"]},{"name":"language","type":"string","required":false,"description":"Interface language as a 2-letter code (en, de, fr, ja...). Defaults to the market's language. It changes the labels Ecosia writes into the page (for example the sitelink text), not which results are returned.","on_invalid":"ignore","example":"en","aliases":["hl","lang"]},{"name":"safe_search","type":"enum","required":false,"description":"Ecosia SafeSearch level.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"Filter explicit text, images and videos"},{"value":"moderate","label":"Filter explicit images and videos (Ecosia's default)"},{"value":"off","label":"No filtering"}],"default":"moderate","example":"moderate","aliases":["safe","safesearch"]},{"name":"freshness","type":"enum","required":false,"description":"Only results from this recency window (Ecosia's own time filter).","on_invalid":"reject","allowed_values":[{"value":"day","label":"Past 24 hours"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"}],"example":"week","aliases":["time_range","time"]},{"name":"length","type":"enum","required":false,"description":"Ecosia's own 'videoLength' filter.","on_invalid":"reject","allowed_values":[{"value":"short","label":"Under 5 minutes"},{"value":"medium","label":"5 to 20 minutes"},{"value":"long","label":"Over 20 minutes"}],"example":"short"},{"name":"resolution","type":"enum","required":false,"description":"Ecosia's own 'resolution' filter.","on_invalid":"reject","allowed_values":[{"value":"480p","label":"480p and above"},{"value":"720p","label":"720p and above"},{"value":"1080p","label":"1080p and above"}],"example":"480p"},{"name":"page","type":"integer","required":false,"description":"1-based results page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5}],"returns":"query, market, page, total_results, total_pages, videos[] (position/title/url/domain/platform/date/duration/duration_seconds/description/thumbnail_url)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"how to tie a tie"}},{"name":"autocomplete","description":"Ecosia search suggestions for a partial query, in the chosen region (the typeahead Ecosia's own search box shows, up to 10). Fast and cheap.","required_params":["q"],"optional_params":["market"],"params":[{"name":"q","type":"string","required":true,"description":"The partial query typed so far.","on_invalid":"reject","example":"berlin wea","aliases":["query","keyword","prefix"]},{"name":"market","type":"enum","required":false,"description":"Ecosia search region (language-country, lowercase), the same list as Ecosia's own region menu. Sets which country's results and which language the index favours. en-ww = all regions.","on_invalid":"reject","allowed_values":[{"value":"en-us","label":"United States (English)"},{"value":"es-us","label":"United States (Spanish)"},{"value":"en-gb","label":"United Kingdom"},{"value":"en-ca","label":"Canada (English)"},{"value":"fr-ca","label":"Canada (French)"},{"value":"en-au","label":"Australia"},{"value":"en-nz","label":"New Zealand"},{"value":"en-ie","label":"Ireland"},{"value":"en-in","label":"India"},{"value":"en-za","label":"South Africa"},{"value":"en-sg","label":"Singapore"},{"value":"en-my","label":"Malaysia"},{"value":"en-ph","label":"Philippines"},{"value":"en-id","label":"Indonesia"},{"value":"en-th","label":"Thailand (English)"},{"value":"th-th","label":"Thailand (Thai)"},{"value":"en-vn","label":"Vietnam (English)"},{"value":"vi-vn","label":"Vietnam (Vietnamese)"},{"value":"en-sa","label":"Saudi Arabia (English)"},{"value":"ar-sa","label":"Saudi Arabia (Arabic)"},{"value":"de-de","label":"Germany"},{"value":"de-at","label":"Austria"},{"value":"de-ch","label":"Switzerland (German)"},{"value":"fr-ch","label":"Switzerland (French)"},{"value":"fr-fr","label":"France"},{"value":"fr-be","label":"Belgium (French)"},{"value":"nl-be","label":"Belgium (Dutch)"},{"value":"nl-nl","label":"Netherlands"},{"value":"es-es","label":"Spain"},{"value":"pt-pt","label":"Portugal"},{"value":"it-it","label":"Italy"},{"value":"pl-pl","label":"Poland"},{"value":"cz-cz","label":"Czechia"},{"value":"sk-sk","label":"Slovakia"},{"value":"hr-hr","label":"Croatia"},{"value":"ro-ro","label":"Romania"},{"value":"bg-bg","label":"Bulgaria"},{"value":"gr-gr","label":"Greece"},{"value":"da-dk","label":"Denmark"},{"value":"sv-se","label":"Sweden"},{"value":"nb-no","label":"Norway"},{"value":"fi-fi","label":"Finland"},{"value":"ee-ee","label":"Estonia"},{"value":"lv-lv","label":"Latvia"},{"value":"lt-lt","label":"Lithuania"},{"value":"uk-ua","label":"Ukraine"},{"value":"ru-ru","label":"Russia"},{"value":"tr-tr","label":"Türkiye"},{"value":"ja-jp","label":"Japan"},{"value":"ko-kr","label":"South Korea"},{"value":"zh-cn","label":"China"},{"value":"zh-hk","label":"Hong Kong SAR China"},{"value":"zh-tw","label":"Taiwan"},{"value":"pt-br","label":"Brazil"},{"value":"es-mx","label":"Mexico"},{"value":"es-ar","label":"Argentina"},{"value":"es-cl","label":"Chile"},{"value":"es-co","label":"Colombia"},{"value":"es-pe","label":"Peru"},{"value":"es-ve","label":"Venezuela"},{"value":"en-ww","label":"All regions"}],"default":"en-us","example":"en-us","aliases":["mkt","region"]}],"returns":"query, market, count, suggestions[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"berlin"}}]},{"name":"edx","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"edX API scraper — search the edX online-course catalogue by keyword and pull full course/program detail. Search 6,000+ university and industry courses, professional certificates, MicroMasters, XSeries and online degrees from Harvard, MIT, IBM, Google, Stanford and 250+ partners — filter by level, subject, language, partner and product type. Returns title, partner/university, level, languages, duration, effort, price/free-audit status, skills, enrollment count and the full description, what-you'll-learn, prerequisites, syllabus, instructors and the courses inside a program. Browse every partner school and subject. No API key required.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/edx/v1","spec_available":true,"actions":[{"name":"search","description":"Search the edX catalogue by keyword (any topic, skill, tool or course/program title — 'python', 'machine learning', 'data science', 'cybersecurity', 'finance'). Returns a paginated list of result cards: name, url, type (course / program / executive education / degree), partner, level, languages, subjects, duration, effort, price, skills and enrollment. Optional filters: level, type, program_type, language, subject, partner, availability. Page with `page` (20 per page); meta.has_more / meta.total_count tell you how many. Feed a result's slug/url into the detail action.","required_params":["query"],"optional_params":["level","type","program_type","language","subject","partner","availability","page"],"params":[{"name":"query","type":"string","required":true,"description":"What to search edX for — a topic, skill, tool or course/program title ('python', 'machine learning', 'excel', 'cybersecurity', 'project management').","on_invalid":"reject","example":"machine learning","aliases":["q","keyword"]},{"name":"level","type":"string","required":false,"description":"Filter by difficulty: Introductory, Intermediate or Advanced.","on_invalid":"ignore","allowed_values":[{"value":"Introductory","label":"Introductory (beginner)"},{"value":"Intermediate","label":"Intermediate"},{"value":"Advanced","label":"Advanced"}],"example":"Introductory","aliases":["difficulty"]},{"name":"type","type":"string","required":false,"description":"Filter by product type: Course, Program, Executive Education or 2U Degree.","on_invalid":"ignore","allowed_values":[{"value":"Course","label":"Course"},{"value":"Program","label":"Program"},{"value":"Executive Education","label":"Executive Education"},{"value":"2U Degree","label":"Degree"}],"example":"Course","aliases":["product_type"]},{"name":"program_type","type":"string","required":false,"description":"For programs, filter by program type: Professional Certificate, MicroMasters, XSeries, MicroBachelors, Bachelors, Masters, Doctorate, Certificate.","on_invalid":"ignore","allowed_values":[{"value":"Professional Certificate","label":"Professional Certificate"},{"value":"MicroMasters","label":"MicroMasters"},{"value":"XSeries","label":"XSeries"},{"value":"MicroBachelors","label":"MicroBachelors"},{"value":"Bachelors","label":"Bachelors"},{"value":"Masters","label":"Masters"},{"value":"Doctorate","label":"Doctorate"},{"value":"Certificate","label":"Certificate"}],"example":"Professional Certificate"},{"name":"language","type":"string","required":false,"description":"Filter by course language (English, Spanish, French, Italian, Arabic, Portuguese, German, …). Use the subjects/partners-style facet names exactly.","on_invalid":"ignore","example":"English","aliases":["lang"]},{"name":"subject","type":"string","required":false,"description":"Filter by subject area (Computer Science, Business & Management, Data Analysis & Statistics, Engineering, Economics & Finance, …). See the subjects action.","on_invalid":"ignore","example":"Computer Science","aliases":["topic"]},{"name":"partner","type":"string","required":false,"description":"Filter by partner school/company exactly as named (Harvard University, MIT, IBM, Google Cloud, …). See the partners action.","on_invalid":"ignore","example":"Harvard University","aliases":["school"]},{"name":"availability","type":"string","required":false,"description":"Filter by availability: Available now, Upcoming or Archived.","on_invalid":"ignore","allowed_values":[{"value":"Available now","label":"Available now / current"},{"value":"Upcoming","label":"Upcoming"},{"value":"Archived","label":"Archived"}],"example":"Available now"},{"name":"page","type":"integer","required":false,"description":"Result page (20 per page). Page until meta.has_more is false; meta.total_count / meta.total_pages tell you how many.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"results[]{id, object_id, name, url, slug, type, program_type, partner, partners[], level, languages[], subjects[], availability, weeks_to_complete, min_effort, max_effort, subscription_eligible, recent_enrollment_count, skills[], image, short_description} + meta{page, has_more, next_page, total_count, total_pages}. (Price is on the detail action — edX's catalogue index does not carry per-result prices; audit/free-track status is per course run.)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"python"}},{"name":"detail","description":"Full detail for one edX course OR program by slug or URL. For a course: level, languages, duration, effort, price, enrollment count, full description, what-you'll-learn, overview, prerequisites, syllabus, skills, subjects, partners, instructors (faculty) and course runs (sessions). For a program (professional certificate / MicroMasters / XSeries / degree): the same plus the list of courses inside it. Pass a search result's url or slug.","required_params":[],"optional_params":["slug","url"],"params":[{"name":"slug","type":"string","required":false,"description":"The course/program slug — the path of an edX URL after the domain (a search result's `slug`, e.g. 'learn/python/harvard-university-cs50-s-introduction-to-programming-with-python').","on_invalid":"reject","example":"learn/python/harvard-university-cs50-s-introduction-to-programming-with-python","aliases":["course"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full edX course/program URL (a search result's `url`).","on_invalid":"ignore","example":"https://www.edx.org/learn/python/harvard-university-cs50-s-introduction-to-programming-with-python"}],"returns":"course_or_program{id, name, type, slug, url, level, availability, price{price, currency, free_audit_available, offer_categories[]}, enrollment_count, recent_enrollment_count, weeks_to_complete, description, what_you_will_learn[], overview[], prerequisites[], syllabus, skills[], subjects[], partners[]{name, key, slug, logo}, staff[], course_runs[], courses[] (programs only), programs[], image, video}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"learn/python/harvard-university-cs50-s-introduction-to-programming-with-python"}},{"name":"partners","description":"Browse every school, university and company that publishes on edX (Harvard, MIT, IBM, Google Cloud, Stanford, Delft, …) with the number of courses/programs each offers. Use a partner name as the search `partner` filter.","required_params":[],"optional_params":[],"params":[],"returns":"partners[]{name, course_count}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"subjects","description":"Browse edX's subject areas (Computer Science, Business & Management, Data Analysis & Statistics, Engineering, Economics & Finance, …) with the number of courses in each. Use a subject name as the search `subject` filter.","required_params":[],"optional_params":[],"params":[],"returns":"subjects[]{name, course_count}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"elcorteingles","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"El Corte Inglés API — search Spain's biggest department store (elcorteingles.es) and pull one product in full: every image, the complete colour x size matrix with a stable variant id, EAN-13, price and stock on every row, the specification table, brand, availability, star rating and top customer reviews — no account, no cookies, no browser","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/elcorteingles/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse elcorteingles.es. Give a Spanish free-text `query` ('zapatillas running', 'movil samsung', 'lavadora'), an El Corte Inglés product code or a bare EAN-13, or a `category` path to browse ('electronica/moviles-y-smartphones', 'moda-mujer/zapatos'). Every row carries El Corte Inglés' own product code, the product URL to feed straight into `product_detail`, the name, brand, EAN-13, price range across colours, the colour list, the variant count, how many of those variants are actually buyable, the image, the category hierarchy and whether the listing is a marketplace seller's. Sort by price, discount, rating, newness, name or stock; page through the whole result set. `category` browsing is the route El Corte Inglés' robots.txt allows and `meta.robots` reports which route answered.","required_params":[],"optional_params":["query","category","page","max_results","sort"],"params":[{"name":"query","type":"string","required":false,"description":"What to look for, in Spanish, across the whole elcorteingles.es catalogue ('zapatillas running', 'movil samsung', 'lavadora bosch', 'perfume mujer'). You may also pass an El Corte Inglés product code ('A56390869') or a bare EAN-13 ('8806097643135') — the site resolves both to the single matching product. Give `query` OR `category` (or both — `category` then scopes nothing, the keyword route wins and `meta.search_mode` says so). NOTE: keyword search uses elcorteingles.es' /search-nwx/ path, which their robots.txt disallows for crawlers; `category` browsing is the robots-clean route to the same rows and `meta.robots` reports which one answered your call.","on_invalid":"reject","example":"zapatillas running","aliases":["q","s","keyword","text","search"]},{"name":"category","type":"string","required":false,"description":"Browse one El Corte Inglés category instead of keyword searching — the path between elcorteingles.es/ and the trailing slash. A department on its own works (`electronica`, `deportes`, `libros`, `juguetes`, `hogar`, `moda-mujer`, `perfumeria`, `bebes`) and so does a real sub-category (`electronica/moviles-y-smartphones`, `electrodomesticos/lavadoras`, `moda-mujer/zapatos`, `deportes/ciclismo`, `libros/booktok`). Returns the same product rows, the same 12-per-page pagination and the same sorting as keyword search, and it is the route El Corte Inglés' robots.txt ALLOWS. ⚠ A sub-category they do not have does NOT 404 on their side — they quietly serve the parent department's page instead, with the site-wide 10,004 total and rows that have nothing to do with what you asked for. This API detects that (their page states which category it really served) and returns NOT_FOUND naming the fallback, rather than handing you a plausible wrong answer.","on_invalid":"reject","example":"electronica/moviles-y-smartphones","aliases":["category_path","c","browse"]},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-834). El Corte Inglés serves 12 tiles per page and publishes no way to ask for more — page size is fixed at their end (`itemsPerPage`, `size` and `limit` are all silently ignored, measured). Their result set is capped at 10,004 products, i.e. 834 pages. Page until `meta.pagination.has_more` is false — asking for a page past the end returns NOT_FOUND naming the real last page, never an empty list.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":834},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-60). Because El Corte Inglés fixes its own page at 12, asking for more fetches more of their pages — one upstream page request per 12 results, up to 5 pages per call. Each of those pages is roughly half a megabyte to a megabyte and a half of HTML, so this is the single biggest cost lever on this endpoint: `meta.pages_fetched` and `meta.bytes` report exactly what your call spent.","on_invalid":"ignore","default":12,"example":12,"minimum":1,"maximum":60,"aliases":["limit","max"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. These are El Corte Inglés' OWN sort keys, taken verbatim from the sort menu their pages publish — not invented, and each one measurably changes the result order. Omit for their recommended order. An unknown value is rejected here rather than sent: elcorteingles.es answers an unknown sort key with HTTP 503, not with an ignored parameter.","on_invalid":"reject","allowed_values":[{"value":"featuredDesc","label":"El Corte Inglés' own recommended order (the site default)"},{"value":"priceAsc","label":"Cheapest first"},{"value":"priceDesc","label":"Most expensive first"},{"value":"bestSellerQtyDesc","label":"Best sellers first"},{"value":"newInAsc","label":"Newest arrivals first"},{"value":"stockDesc","label":"Widest availability first"},{"value":"nameAsc","label":"Product name A-Z"},{"value":"nameDesc","label":"Product name Z-A"},{"value":"discountPerDesc","label":"Biggest discount first"},{"value":"ratingDesc","label":"Best rated first"}],"example":"priceAsc","aliases":["sorting","order","sort_by"]}],"returns":"products[]{product_id, product_type, url, path, name, brand, brand_slug, gtin13, categories[], hierarchy[], image, colour_count, colours[], variant_count, in_stock_variant_count, price, price_min, price_max, currency, availability, in_stock, is_marketplace, sellers[], is_gift_card, is_collection, size_guide, group_by}. `in_stock` is a boolean: true when at least one colour x size variant is buyable right now (El Corte Inglés' own buy flag), false when none is, null only when the row published no stock signal at all. meta.pagination{page, per_page, pages_fetched, total_results, total_pages, returned, has_more, next_page} — `total_results` is El Corte Inglés' OWN published figure for the query, and it is hard-capped by them at 10,004; `total_pages` is the last page that has products, so page until `has_more` is false rather than guessing. meta.search_mode is `query` | `category` | `id_lookup`; meta.sort echoes the ordering the site confirmed it applied; meta.robots says `allowed` or `disallowed_by_robots` for the path that answered. meta.tiles_seen / sponsored_slots / rejected_rows reconcile against El Corte Inglés' own 12-tile grid: `sponsored_slots` are paid placements carrying no product data (4 per unsorted keyword page, 0 on category pages) and `rejected_rows` are rows that did not look like products at all — that one is normally 0, and a non-zero value is your signal that their layout moved. A sponsored slot can never appear in `products[]`. NO SILENT EMPTIES: this endpoint returns ok:true with an empty `products[]` in exactly ONE situation — a keyword search where El Corte Inglés itself publishes a result count of 0. Paging past the end returns NOT_FOUND naming the real last page; a path that is not a product listing returns NOT_FOUND; and a page where the site claims results but publishes no readable rows returns a retryable PARSE_ERROR rather than an empty list. HONEST LIMITS: El Corte Inglés serves exactly 12 tiles per page and publishes NO page-size parameter, so a bigger `max_results` costs one extra page fetch per 12 rows. Some of those 12 tiles are paid placements carrying no product data, so an organic page is 8-12 rows and `returned` can legitimately be under 12. Search rows carry the colour/price/stock summary but NOT the specification table, the full image gallery, per-variant EANs or reviews — that is `product_detail`. The supermarket catalogue (/supermercado/) is NOT searchable here: it is a separate application whose result page is a 5-7 MB document that renders its rows client-side; `product_detail` does support supermarket products by URL or by their B-code.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":2},"example_params":{"query":"zapatillas running","max_results":12}},{"name":"product_detail","description":"Get one El Corte Inglés product in full, by URL, product code or EAN-13. ONE call returns the complete image gallery, the full colour x size variant matrix with a stable native variant id, an EAN-13, a price, a strike-through price and a live buyable flag on EVERY row, the specification table as El Corte Inglés publishes it (grouped, with their own glossary text), the brand, the availability, the star rating and the top customer reviews inline, plus the seller behind each variant (El Corte Inglés itself or a marketplace merchant), the active promotions and the EU-Omnibus 30-day lowest price. Supermarket products are supported too and return their EAN, gallery and full nutrition panel instead of a size matrix. A product El Corte Inglés has WITHDRAWN answers `NOT_FOUND` with `meta.withdrawn: true` and `meta.withdrawn_product` naming the product it was — their server keeps the page online for search engines but pulls every price, so there is no offer left to return. That verdict is permanent and `retryable: false`: it is the signal to drop the SKU from a monitoring list, not a transient failure to retry.","required_params":[],"optional_params":["url","product_id","ean","include_reviews","max_reviews"],"params":[{"name":"url","type":"string","required":false,"description":"The product's elcorteingles.es URL, exactly as `search` returns it in `products[].url`. This is the ZERO-EXTRA-COST path: the URL is the only key El Corte Inglés' product page resolves, because it embeds a category and a slug that cannot be derived from an id. Give `url`, `product_id` or `ean`.","on_invalid":"reject","example":"https://www.elcorteingles.es/electronica/A56390869-8806097643135-pr-samsung-galaxy-a17-5g-8gb-256gb-movil-libre-negro-256-gb-8-gb-ram/","aliases":["product_url","link"]},{"name":"product_id","type":"string","required":false,"description":"El Corte Inglés' own product code — `A56390869` for their catalogue, `MP_0623819_261BZ152012640` for a marketplace listing, `B001018009401193` for a supermarket item. Accepted for convenience, but be aware it costs ONE EXTRA upstream call: elcorteingles.es serves no product-by-id route, so the code is resolved through their own search first (measured: 1 result, every time). Pass `url` when you already have it.","on_invalid":"reject","example":"A56390869","aliases":["id","pid","code","code_a"]},{"name":"ean","type":"string","required":false,"description":"A bare EAN-13 / GTIN barcode. Resolved through El Corte Inglés' own search the same way `product_id` is (one extra call), which makes this endpoint usable for catalogue matching straight from a barcode. Returns NOT_FOUND if El Corte Inglés does not carry that barcode.","on_invalid":"reject","example":"8806097643135","aliases":["gtin","gtin13","barcode"]},{"name":"include_reviews","type":"boolean","required":false,"description":"Fetch the star rating and the top customer reviews (default true). El Corte Inglés does not publish either on its own product page — they come from Bazaarvoice, the review platform their page loads, in one extra ~2 KB request. Measured coverage is 27 of 48 live products across 9 categories: home, appliances and toys are well covered, books and fashion carry none at all. Set false to skip the call entirely.","on_invalid":"ignore","default":true,"aliases":["reviews","with_reviews"]},{"name":"max_reviews","type":"integer","required":false,"description":"How many reviews to return (1-8). Bazaarvoice's feed publishes at most 8 per page and this endpoint deliberately does not page through them — `rating.count` tells you the true total, which is frequently far larger (110 on one measured product).","on_invalid":"ignore","default":8,"example":8,"minimum":1,"maximum":8}],"returns":"product{product_id, product_type, url, path, name, full_name, brand, brand_slug, gtin13, description, categories[], breadcrumb[], category_path, price, price_min, price_max, list_price, currency, discount_percent, availability, in_stock, gallery[], videos[], colours[]{name, sku, image, thumbnail, images[], videos[], available, preselected}, variant_axes[], variant_count, in_stock_variant_count, variants[]{variant_id, gtin13, eci_reference, object_id, colour, axis, size, size_manufacturer, title, price, list_price, discount_percent, currency, lowest_recent_price, availability, in_stock, status, stock_reference, seller_id, is_marketplace, origin, offer_type, sellers[], images[], url, promotions[], nutrition}, specifications[]{group, attributes[]{name, values[], labels[], value, glossary[]}}, is_marketplace, sellers[], is_gift_card, is_digital, size_guide, promotions[], shipping, rating{value, best, count, source}, reviews[]{review_id, rating, title, text, author, date}}. meta.sources says, for THIS product, where each of gallery / variants / specifications / brand / availability actually came from, and meta.coverage counts how many of its variants carry an EAN, a price and a stock flag — so you see the completeness of the row you were given rather than trusting an average. FIELD NOTES: `variant_id` is the variant's own `sku` and `gtin13` its own EAN-13, both verbatim strings — a marketplace variant's sku is the merchant's offer id, which is why both are returned. `price` is what you pay today and `list_price` the struck-through price, null when there is no discount. `lowest_recent_price` is El Corte Inglés' own EU-Omnibus 30-day-lowest disclosure. `rating` and `reviews` come from Bazaarvoice, NOT from El Corte Inglés, and are null / empty for the many products with no reviews (measured 27 of 48 across 9 categories carry a rating; books and fashion carry none). El Corte Inglés publishes NO stock QUANTITY anywhere — only a buyable / not-buyable flag per variant — and no dimensions, weight or per-store stock.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"ean":"8806097643135","include_reviews":true}},{"name":"price","description":"Cheap price + stock refresh for ONE El Corte Inglés product, by URL, product code or EAN-13 — for re-checking products you already track, instead of paying for a full `product_detail`. Returns the current price (what you pay today), the strike-through price, the discount, the EU-Omnibus 30-day lowest price, the buyable flag for the product AND for every colour x size variant, and each variant's own EAN, price and seller. It reads El Corte Inglés' own JSON product feed (the one their storefront renders from) in ONE upstream call, about 2.5-6x fewer bytes than the product page; `url`, `product_id` and `ean` cost the same. It does NOT return the gallery, description, specifications or reviews — that is `product_detail`. Supermarket (B-code) items are not covered here; use `product_detail`. A code or barcode El Corte Inglés no longer lists returns NOT_FOUND, retryable:false.","required_params":[],"optional_params":["url","product_id","ean"],"params":[{"name":"url","type":"string","required":false,"description":"The product's elcorteingles.es URL, exactly as `search` returns it in `products[].url`. This is the ZERO-EXTRA-COST path: the URL is the only key El Corte Inglés' product page resolves, because it embeds a category and a slug that cannot be derived from an id. Give `url`, `product_id` or `ean`.","on_invalid":"reject","example":"https://www.elcorteingles.es/electronica/A56390869-8806097643135-pr-samsung-galaxy-a17-5g-8gb-256gb-movil-libre-negro-256-gb-8-gb-ram/","aliases":["product_url","link"]},{"name":"product_id","type":"string","required":false,"description":"El Corte Inglés' own product code — `A56390869` for their catalogue, `MP_0623819_261BZ152012640` for a marketplace listing, `B001018009401193` for a supermarket item. Accepted for convenience, but be aware it costs ONE EXTRA upstream call: elcorteingles.es serves no product-by-id route, so the code is resolved through their own search first (measured: 1 result, every time). Pass `url` when you already have it.","on_invalid":"reject","example":"A56390869","aliases":["id","pid","code","code_a"]},{"name":"ean","type":"string","required":false,"description":"A bare EAN-13 / GTIN barcode. Resolved through El Corte Inglés' own search the same way `product_id` is (one extra call), which makes this endpoint usable for catalogue matching straight from a barcode. Returns NOT_FOUND if El Corte Inglés does not carry that barcode.","on_invalid":"reject","example":"8806097643135","aliases":["gtin","gtin13","barcode"]}],"returns":"product{product_id, url, name, brand, gtin13, price, price_min, price_max, list_price, discount_percent, lowest_recent_price, currency, availability, in_stock, variant_count, in_stock_variant_count, is_marketplace, sellers[], variants[]{variant_id, gtin13, colour, size, price, list_price, discount_percent, currency, lowest_recent_price, availability, in_stock, status, seller_id, is_marketplace}}. Same price and stock fields, read from the same El Corte Inglés product service, as `product_detail` (measured 4/4 identical, 2026-09-18).","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.elcorteingles.es/electronica/A56390869-8806097643135-pr-samsung-galaxy-a17-5g-8gb-256gb-movil-libre-negro-256-gb-8-gb-ram/"}}]},{"name":"elgiganten","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Elgiganten / Elkjøp / Gigantti API — Nordic electronics prices, previous price, Club price, online and per-store stock, GTIN and specifications for Sweden, Denmark, Norway and Finland","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/elgiganten/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Elkjøp Nordic catalogue (elgiganten.se, elgiganten.dk, elkjop.no, gigantti.fi) by keyword and/or category or brand, with price range, in-stock-online, in-stock-at-a-store, on-sale, seller / marketplace and minimum-rating filters. Each row: sku, GTIN, manufacturer part number, title, brand, URL, image, price incl. and ex. VAT, previous price, discount, Club price, online stock level, number of stores with stock, click & collect, fast delivery, rating, review count, category path, energy class. Plus the source's own total. Either `query`, `category` or `brand` is required.","required_params":[],"optional_params":["country","query","category","brand","min_price","max_price","in_stock","store_id","on_sale","seller","marketplace","min_rating","page","page_size"],"params":[{"name":"country","type":"enum","required":false,"description":"Which store: se (Elgiganten Sweden), dk (Elgiganten Denmark), no (Elkjøp Norway), fi (Gigantti Finland). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — elgiganten.se (SEK)"},{"value":"dk","label":"Denmark — elgiganten.dk (DKK)"},{"value":"no","label":"Norway — elkjop.no (NOK)"},{"value":"fi","label":"Finland — gigantti.fi (EUR)"}],"default":"se","example":"se","aliases":["market","site"]},{"name":"query","type":"string","required":false,"description":"Search words as typed into the site's search box.","on_invalid":"reject","example":"iphone 16","aliases":["q","keyword","keywords","search"]},{"name":"category","type":"string","required":false,"description":"Category id as a row's category_ids returns it (PT115 = washing machines in every country), or the category name exactly as a row's categories prints it in that country's language (Tvättmaskin). An unknown category returns 0 rows.","on_invalid":"reject","example":"PT115","aliases":["category_id"]},{"name":"brand","type":"string","required":false,"description":"Brand exactly as rows print it (Apple, Samsung, LG …). An unknown brand returns 0 rows.","on_invalid":"reject","example":"Samsung"},{"name":"min_price","type":"number","required":false,"description":"Lowest price incl. VAT, in the country's currency.","on_invalid":"reject","example":3000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price incl. VAT, in the country's currency.","on_invalid":"reject","example":8000,"minimum":0,"aliases":["price_max"]},{"name":"in_stock","type":"boolean","required":false,"description":"true = only articles in stock for online delivery.","on_invalid":"reject","aliases":["in_stock_online"]},{"name":"store_id","type":"string","required":false,"description":"Only articles in stock at this store (store_id from the `stores` action or a product's store_stock).","on_invalid":"reject","example":"2019","aliases":["store"]},{"name":"on_sale","type":"boolean","required":false,"description":"true = only articles priced below their previous price.","on_invalid":"reject","aliases":["discounted"]},{"name":"seller","type":"string","required":false,"description":"Only articles sold by this seller, exactly as rows print it (the chain itself — Elgiganten, Elkjøp, Gigantti — or a marketplace seller).","on_invalid":"reject","example":"Conrad Elektronik","aliases":["merchant"]},{"name":"marketplace","type":"boolean","required":false,"description":"true = only marketplace sellers' articles; false = only articles sold by the chain itself.","on_invalid":"reject"},{"name":"min_rating","type":"number","required":false,"description":"Only articles rated at least this (1-5).","on_invalid":"reject","minimum":1,"maximum":5,"aliases":["rating"]},{"name":"page","type":"integer","required":false,"description":"Result page (the source stops at 1,500 results; see last_page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1500},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"results[]{sku, article_number, internal_code, manufacturer_part_number, gtin, title, brand, brand_id, url, image, country, currency, price, price_ex_vat, previous_price, previous_price_ex_vat, discount_amount, discount_pct, discount_mismatch, club_price, club_price_ex_vat, in_stock_online, online_stock_level, next_incoming, stores_with_stock_count, collect_at_store, fast_delivery, buyable_online, buyable_in_store, sales_status, rating, review_count, categories[], category_ids[], energy_class, campaign_text, seller, marketplace, release_date, has_variants} + total, page, page_size, last_page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 16","country":"se"}},{"name":"product","description":"Full catalogue record of one article in one country: title, brand, sku, GTIN, manufacturer part number, price incl. and ex. VAT, previous price (the site's lowest price of the 30 days before a reduction), discount, Club member price when published, online stock level and next incoming date, stock per store with store names, click & collect, fast delivery, sales status, rating and review count, energy class, short description, key selling points, labelled key specifications, payment plans, category path, release date.","required_params":["sku"],"optional_params":[],"params":[{"name":"sku","type":"string","required":false,"description":"Article number exactly as a search row returns it in `sku` (usually 6-7 digits, sometimes letters + digits like MEL21445; the last part of the product URL). A product URL of any of the four sites is accepted too.","on_invalid":"reject","example":"604300","aliases":["id","article_number","product_id","url"]},{"name":"country","type":"enum","required":false,"description":"Which store: se (Elgiganten Sweden), dk (Elgiganten Denmark), no (Elkjøp Norway), fi (Gigantti Finland). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — elgiganten.se (SEK)"},{"value":"dk","label":"Denmark — elgiganten.dk (DKK)"},{"value":"no","label":"Norway — elkjop.no (NOK)"},{"value":"fi","label":"Finland — gigantti.fi (EUR)"}],"default":"se","example":"se","aliases":["market","site"]}],"returns":"{…every search row field, short_description, bullet_points[], specs[]{attribute_id, label, value}, store_stock[]{store_id, store_name, city, listed_store, in_stock, stock_level, on_display}, payment_plans[]{provider, product, installments, per_installment, description} (empty for most articles), energy_scale}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"604300","country":"se"}},{"name":"stores","description":"The chain's stores in one country: store id (the id used by store stock and the store_id filter), name, street, postal code, city, coordinates, store page, click & collect.","required_params":[],"optional_params":["country","city"],"params":[{"name":"country","type":"enum","required":false,"description":"Which store: se (Elgiganten Sweden), dk (Elgiganten Denmark), no (Elkjøp Norway), fi (Gigantti Finland). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — elgiganten.se (SEK)"},{"value":"dk","label":"Denmark — elgiganten.dk (DKK)"},{"value":"no","label":"Norway — elkjop.no (NOK)"},{"value":"fi","label":"Finland — gigantti.fi (EUR)"}],"default":"se","example":"se","aliases":["market","site"]},{"name":"city","type":"string","required":false,"description":"Only stores whose city or name contains this text.","on_invalid":"reject","example":"Stockholm"}],"returns":"stores[]{store_id, name, street, postal_code, city, lat, lng, page_url, collect_at_store} + total","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"dk"}}]},{"name":"emag","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"eMAG API scraper — search, category browse, product detail & competing-merchant offers for eMAG, the leading marketplace in Romania (emag.ro), Bulgaria (emag.bg) and Hungary (emag.hu). Prices in RON/EUR/HUF, merchant names, ratings, stock. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/emag/v1","spec_available":true,"actions":[{"name":"search","description":"Search eMAG by keyword — paginated, sortable, and filterable by price range, brand, in-stock and minimum star rating. Every row carries the eMAG product code, title, current price with its own currency, the EU 'lowest price in the last 30 days' when eMAG publishes it, the MERCHANT selling it, stock state, rating and review count, and how many competing offers exist for the same product. `total` is eMAG's own result count for the filtered set. If eMAG redirects a keyword to one of its categories (it sends 'laptop' to its Laptops category, for example), you get that category's products and `redirected_to` tells you where it went.","required_params":["query"],"optional_params":["market","page","sort","price_min","price_max","brand","in_stock","min_rating","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for. Use the market's own language — Romanian on `ro` ('casti bluetooth', 'aspirator'), Bulgarian on `bg`, Hungarian on `hu`. English brand and model names work everywhere.","on_invalid":"reject","example":"casti bluetooth","aliases":["q","keyword"]},{"name":"market","type":"enum","required":false,"description":"Which eMAG storefront to read: `ro` (emag.ro, Romania — the default and by far the largest), `bg` (emag.bg, Bulgaria) or `hu` (emag.hu, Hungary). Product codes, category slugs and keywords are per-market — a code from emag.ro will not resolve on emag.hu. The currency is read from the page, so rows come back in RON, EUR and HUF respectively.","on_invalid":"reject","allowed_values":[{"value":"ro","label":"Romania — emag.ro (prices in RON)"},{"value":"bg","label":"Bulgaria — emag.bg (prices in EUR)"},{"value":"hu","label":"Hungary — emag.hu (prices in HUF)"}],"default":"ro","example":"ro","aliases":["country","site"]},{"name":"page","type":"integer","required":false,"description":"Result page — 1-based, 60 products per page. eMAG stops at page 100 regardless of how many results it claims; narrow with `category` filters rather than paging past that.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering. These are eMAG's own seven orderings, taken from the sort menu it publishes with every listing; anything else is rejected rather than passed through, because eMAG answers an unknown sort token with a generic no-results page instead of an error.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"eMAG's own default ordering"},{"value":"popular","label":"Most popular"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"reviews","label":"Most reviewed"},{"value":"discount","label":"Biggest discount"},{"value":"newest","label":"Newest first"}],"default":"relevance","example":"price_asc","aliases":["order"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price, in the market's own currency (RON on ro, EUR on bg, HUF on hu). Whole numbers only — that is the granularity eMAG's own price filter accepts.","on_invalid":"ignore","example":100,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price, in the market's own currency. Give either bound on its own and the other end is left open.","on_invalid":"ignore","example":500,"minimum":0,"aliases":["max_price"]},{"name":"brand","type":"string","required":false,"description":"Brand filter — eMAG's brand slug, lowercase with dashes ('apple', 'jbl', 'blue-star'). Take it from a product's brand link (/brands/brand/<slug>).","on_invalid":"ignore","example":"apple"},{"name":"in_stock","type":"boolean","required":false,"description":"true = only products eMAG currently has in stock. false (default) returns the category as eMAG orders it, out-of-stock rows included.","on_invalid":"ignore","default":false,"aliases":["stock"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose customer rating is at least this many stars (1-5). Products with no rating yet are excluded by eMAG when this is set.","on_invalid":"ignore","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many datacentre exits to try before giving up (1-14, default 6). About one exit in ten is pre-flagged by eMAG's WAF and is skipped automatically at a cost of ~0.2 s; the default already makes that vanishingly unlikely to surface. Leave it alone for typical use.","on_invalid":"ignore","default":6,"minimum":1,"maximum":14}],"returns":"products[]{product_id, product_code, offer_id, title, url, price, currency, lowest_price_30_days, recommended_retail_price, discount_percent, in_stock, availability, delivery_days_estimate, seller{id, name, slug, url, type (emag|marketplace), rating, rating_count (null — eMAG publishes a positive-feedback share, not a count), positive_feedback_percent, fulfilled_by_emag}, rating, review_count, question_count, image, other_offers_count, total_offers_count, campaigns[], super_category (eMAG's merchandising super-category), category (the leaf category name — null on the JSON listing route, which does not carry it; product/detail returns the full breadcrumb)}, count, total (eMAG's own result count), total_pages, reachable_pages (eMAG stops at 100), page, market, redirected_to (the eMAG path actually served when it redirects a keyword to a category, else null) (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"casti bluetooth"}},{"name":"category","description":"Browse an eMAG category by its slug, with the same filters as `search` — price range, brand, in-stock only, minimum star rating — plus sorting and pagination. Same row shape as `search`. This is the enumeration workhorse: use it when you want everything in a category rather than what a keyword happens to match, and `total` tells you how big the filtered set is before you page through it.","required_params":["category"],"optional_params":["market","page","sort","price_min","price_max","brand","in_stock","min_rating","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"eMAG category slug — the part before `/c` in a category URL (https://www.emag.ro/casti-bluetooth-telefoane/c → `casti-bluetooth-telefoane`). A full category URL is also accepted. Other live examples: telefoane-mobile · laptopuri · televizoare · aspiratoare · ceasuri-smartwatch.","on_invalid":"reject","example":"casti-bluetooth-telefoane","aliases":["slug","category_slug","category_url"]},{"name":"market","type":"enum","required":false,"description":"Which eMAG storefront to read: `ro` (emag.ro, Romania — the default and by far the largest), `bg` (emag.bg, Bulgaria) or `hu` (emag.hu, Hungary). Product codes, category slugs and keywords are per-market — a code from emag.ro will not resolve on emag.hu. The currency is read from the page, so rows come back in RON, EUR and HUF respectively.","on_invalid":"reject","allowed_values":[{"value":"ro","label":"Romania — emag.ro (prices in RON)"},{"value":"bg","label":"Bulgaria — emag.bg (prices in EUR)"},{"value":"hu","label":"Hungary — emag.hu (prices in HUF)"}],"default":"ro","example":"ro","aliases":["country","site"]},{"name":"page","type":"integer","required":false,"description":"Result page — 1-based, 60 products per page. eMAG stops at page 100 regardless of how many results it claims; narrow with `category` filters rather than paging past that.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering. These are eMAG's own seven orderings, taken from the sort menu it publishes with every listing; anything else is rejected rather than passed through, because eMAG answers an unknown sort token with a generic no-results page instead of an error.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"eMAG's own default ordering"},{"value":"popular","label":"Most popular"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"reviews","label":"Most reviewed"},{"value":"discount","label":"Biggest discount"},{"value":"newest","label":"Newest first"}],"default":"relevance","example":"price_asc","aliases":["order"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price, in the market's own currency (RON on ro, EUR on bg, HUF on hu). Whole numbers only — that is the granularity eMAG's own price filter accepts.","on_invalid":"ignore","example":100,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price, in the market's own currency. Give either bound on its own and the other end is left open.","on_invalid":"ignore","example":500,"minimum":0,"aliases":["max_price"]},{"name":"brand","type":"string","required":false,"description":"Brand filter — eMAG's brand slug, lowercase with dashes ('apple', 'jbl', 'blue-star'). Take it from a product's brand link (/brands/brand/<slug>).","on_invalid":"ignore","example":"apple"},{"name":"in_stock","type":"boolean","required":false,"description":"true = only products eMAG currently has in stock. false (default) returns the category as eMAG orders it, out-of-stock rows included.","on_invalid":"ignore","default":false,"aliases":["stock"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose customer rating is at least this many stars (1-5). Products with no rating yet are excluded by eMAG when this is set.","on_invalid":"ignore","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many datacentre exits to try before giving up (1-14, default 6). About one exit in ten is pre-flagged by eMAG's WAF and is skipped automatically at a cost of ~0.2 s; the default already makes that vanishingly unlikely to surface. Leave it alone for typical use.","on_invalid":"ignore","default":6,"minimum":1,"maximum":14}],"returns":"products[]{…same row as search}, count, total, total_pages, reachable_pages, page, title (eMAG's own name for the filtered listing), market, redirected_to","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"casti-bluetooth-telefoane","sort":"price_desc"}},{"name":"product/detail","description":"Full eMAG product by `code` or `url`: title, brand, manufacturer part number, current price and currency, the EU-mandated lowest price of the last 30 days and the manufacturer's RRP when eMAG publishes them, the discount computed from those rather than guessed, the merchant with its own rating and positive-feedback share, stock and delivery estimate, warranty and return period, the full image gallery, the description, the breadcrumb, the complete grouped specification table, and how many competing offers exist. Fields eMAG does not publish come back as null — nothing here is inferred.","required_params":[],"optional_params":["code","url","market","max_rotations"],"params":[{"name":"code","type":"string","required":false,"description":"The eMAG product code — the token after `/pd/` in a product URL (…/pd/DBFC7LYBM/). Every row `search` and `category` return carries it as `product_code`. Give `code` OR `url`.","on_invalid":"reject","example":"DBFC7LYBM","aliases":["product_code","pnk","part_number_key","id","sku"]},{"name":"url","type":"string","required":false,"description":"Full eMAG product URL — the alternative to `code`. The market is taken from the URL's own domain when you pass one.","on_invalid":"reject","example":"https://www.emag.ro/casti-apple-airpods-4-mxp63zm-a/pd/DBFC7LYBM/","aliases":["product_url"]},{"name":"market","type":"enum","required":false,"description":"Which eMAG storefront to read: `ro` (emag.ro, Romania — the default and by far the largest), `bg` (emag.bg, Bulgaria) or `hu` (emag.hu, Hungary). Product codes, category slugs and keywords are per-market — a code from emag.ro will not resolve on emag.hu. The currency is read from the page, so rows come back in RON, EUR and HUF respectively.","on_invalid":"reject","allowed_values":[{"value":"ro","label":"Romania — emag.ro (prices in RON)"},{"value":"bg","label":"Bulgaria — emag.bg (prices in EUR)"},{"value":"hu","label":"Hungary — emag.hu (prices in HUF)"}],"default":"ro","example":"ro","aliases":["country","site"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many datacentre exits to try before giving up (1-14, default 6). About one exit in ten is pre-flagged by eMAG's WAF and is skipped automatically at a cost of ~0.2 s; the default already makes that vanishingly unlikely to surface. Leave it alone for typical use.","on_invalid":"ignore","default":6,"minimum":1,"maximum":14}],"returns":"product{product_id, product_code, offer_id, title, brand, brand_url, manufacturer_part_number, url, market, price, currency, lowest_price_30_days, recommended_retail_price, discount_percent, promotion_note, in_stock, availability, delivery_days_estimate, free_delivery, fulfilled_by_emag, genius_eligible, warranty_months, return_period_days, condition, seller{id, name, slug, url, type, rating, positive_feedback_percent, fulfilled_by_emag}, rating, review_count, rating_scale (5 — eMAG publishes it in its ld+json AggregateRating), rating_worst, question_count, recommend_percent, images[], description, category, breadcrumb[], specs[]{group, name, value}, other_offers_count, other_offers_min_price}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"code":"DBFC7LYBM"}},{"name":"product/offers","description":"Every merchant selling the same product on eMAG, by `code` or `url` — the buybox offer plus each competing marketplace seller, with that seller's price. eMAG is a marketplace and publishes this set on the product page itself, so one call gives you the whole merchant table for price comparison. The buybox row is complete (seller rating, stock, delivery, warranty, return period); the competing rows carry what eMAG publishes for them — merchant name, offer id and price — and their remaining fields are null rather than filled in with the buybox's values.","required_params":[],"optional_params":["code","url","market","max_rotations"],"params":[{"name":"code","type":"string","required":false,"description":"The eMAG product code — the token after `/pd/` in a product URL (…/pd/DBFC7LYBM/). Every row `search` and `category` return carries it as `product_code`. Give `code` OR `url`.","on_invalid":"reject","example":"DBFC7LYBM","aliases":["product_code","pnk","part_number_key","id","sku"]},{"name":"url","type":"string","required":false,"description":"Full eMAG product URL — the alternative to `code`. The market is taken from the URL's own domain when you pass one.","on_invalid":"reject","example":"https://www.emag.ro/casti-apple-airpods-4-mxp63zm-a/pd/DBFC7LYBM/","aliases":["product_url"]},{"name":"market","type":"enum","required":false,"description":"Which eMAG storefront to read: `ro` (emag.ro, Romania — the default and by far the largest), `bg` (emag.bg, Bulgaria) or `hu` (emag.hu, Hungary). Product codes, category slugs and keywords are per-market — a code from emag.ro will not resolve on emag.hu. The currency is read from the page, so rows come back in RON, EUR and HUF respectively.","on_invalid":"reject","allowed_values":[{"value":"ro","label":"Romania — emag.ro (prices in RON)"},{"value":"bg","label":"Bulgaria — emag.bg (prices in EUR)"},{"value":"hu","label":"Hungary — emag.hu (prices in HUF)"}],"default":"ro","example":"ro","aliases":["country","site"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many datacentre exits to try before giving up (1-14, default 6). About one exit in ten is pre-flagged by eMAG's WAF and is skipped automatically at a cost of ~0.2 s; the default already makes that vanishingly unlikely to surface. Leave it alone for typical use.","on_invalid":"ignore","default":6,"minimum":1,"maximum":14}],"returns":"offers[]{offer_id, is_buybox, seller{…}, price, currency, lowest_price_30_days, recommended_retail_price, discount_percent, in_stock, availability, delivery_days_estimate, free_delivery, fulfilled_by_emag, genius_eligible, is_resealed, is_used, has_warranty, warranty_months, return_period_days, unit} sorted by price, plus offer_count, min_price, max_price, currency, product{product_code, title, url}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"code":"DBFC7LYBM"}}]},{"name":"email-health","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Email Deliverability & DNS Health API — check SPF, DKIM, DMARC, MX, BIMI, MTA-STS, TLS-RPT, DNSSEC, DANE and blacklist status with a 0-100 deliverability score","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/email-health/v1","spec_available":true,"actions":[{"name":"check","description":"Full email-health audit: SPF + DKIM + DMARC + MX + BIMI + MTA-STS + TLS-RPT + DNSSEC + blacklist, plus a 0-100 deliverability score and letter grade.","required_params":["domain"],"optional_params":["selector","selectors","bimi_selector","skip_blacklist"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"selector","type":"string","required":false,"description":"DKIM selector (the label before ._domainkey, e.g. 'google', 'selector1', 'k1'). Omit to autoscan ~30 common ESP selectors. DKIM selectors are provider-specific — pass the exact one if you know it.","on_invalid":"ignore","example":"google","aliases":["s"]},{"name":"selectors","type":"array","required":false,"description":"Optional comma-separated list (or array) of DKIM selectors to test instead of the common-selector autoscan.","on_invalid":"ignore","example":"google,selector1"},{"name":"bimi_selector","type":"string","required":false,"description":"BIMI selector (default per the BIMI spec is 'default').","on_invalid":"ignore","default":"default","example":"default"},{"name":"skip_blacklist","type":"boolean","required":false,"description":"If true, skip the DNSBL reputation lookups in 'check' (faster; blacklist is the slowest section — many IP×zone DoH queries).","on_invalid":"ignore","default":false,"example":false}],"returns":"domain, score{score,grade,breakdown}, spf{}, dkim{}, dmarc{}, mx{}, bimi{}, mta_sts{}, tls_rpt{}, dnssec{}, dane{} (informational, unscored), blacklist{}, issues[] (merged), summary{}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"google.com"}},{"name":"spf","description":"Parse + validate the SPF record: follow include:/redirect=, count the ≤10 DNS-lookup mechanisms, flag +all and void lookups, report the all-qualifier policy.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, found, record, valid, dns_lookups, void_lookups, all_qualifier, policy, mechanisms[], includes[], include_tree[], issues[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"google.com"}},{"name":"dmarc","description":"Parse the DMARC policy at _dmarc.<domain>: p/sp/pct/rua/ruf/adkim/aspf/fo + enforcement verdict.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, found, record, valid, policy, subdomain_policy, pct, rua[], ruf[], adkim, aspf, fo, enforced, tags{}, issues[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"paypal.com"}},{"name":"dkim","description":"DKIM selector lookup (<selector>._domainkey.<domain>): key type, public-key presence, RSA key-bit estimate, revocation. Autoscans ~30 common selectors if none given.","required_params":["domain"],"optional_params":["selector","selectors"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"selector","type":"string","required":false,"description":"DKIM selector (the label before ._domainkey, e.g. 'google', 'selector1', 'k1'). Omit to autoscan ~30 common ESP selectors. DKIM selectors are provider-specific — pass the exact one if you know it.","on_invalid":"ignore","example":"google","aliases":["s"]},{"name":"selectors","type":"array","required":false,"description":"Optional comma-separated list (or array) of DKIM selectors to test instead of the common-selector autoscan.","on_invalid":"ignore","example":"google,selector1"}],"returns":"domain, found, selectors_tested[], selectors_found[], records[] (selector, record, key_type, key_bits, public_key_present, revoked), issues[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"paypal.com","selector":"pp2"}},{"name":"mx","description":"MX records (sorted by preference) + a mail-provider guess from the exchange hostnames.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, found, count, records[] (preference, exchange), hosts[], provider, issues[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"blacklist","description":"DNSBL reputation: reverse the domain's A + MX-host IPs against live-proven public DNSBLs (SpamCop, Barracuda, UCEPROTECT, PSBL, Mailspike, GBUdb, DroneBL, s5h). Spamhaus/CBL are flagged as paid-key-required (public-resolver refused), not queried.","required_params":["domain"],"optional_params":["ips"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"ips","type":"array","required":false,"description":"Optional explicit IPv4 list (comma-separated or array) to check against the DNSBLs. Omit to auto-resolve the domain's A + MX-host IPs.","on_invalid":"ignore","example":"140.82.121.4"}],"returns":"domain, checked_ips[], ptr_records{ip:hostname}, listings[] (ip, zone, blacklist, return_codes), listed_count, clean, zones_checked[], paid_key_zones[], issues[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"mta_sts","description":"MTA-STS: the _mta-sts.<domain> TXT (id) plus the fetched https://mta-sts.<domain>/.well-known/mta-sts.txt policy (mode, mx[], max_age).","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, found, record, id, policy_fetched, mode, mx[], max_age, enforced, issues[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"google.com"}},{"name":"bimi","description":"BIMI brand-logo record at <selector>._bimi.<domain>: the published logo (SVG) URL and the VMC (Verified Mark Certificate) URL, plus whether a VMC is present. Standalone lookup (MXToolbox SuperTool exposes BIMI on its own — no full audit needed).","required_params":["domain"],"optional_params":["selector"],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]},{"name":"selector","type":"string","required":false,"description":"BIMI selector — the label before ._bimi (default per the BIMI spec is 'default'; large senders sometimes publish per-brand selectors).","on_invalid":"ignore","default":"default","example":"default","aliases":["bimi_selector"]}],"returns":"domain, found, record, selector, logo_url, vmc_url, has_vmc","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"cnn.com"}},{"name":"tls_rpt","description":"SMTP TLS Reporting (RFC 8460) record at _smtp._tls.<domain>: the rua= report destination(s) that receive aggregate TLS-negotiation failure reports. Standalone lookup.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, found, record, rua[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"google.com"}},{"name":"dnssec","description":"DNSSEC signing status: the DoH AD (Authenticated-Data) flag = the resolver cryptographically validated the answer, plus a DS record at the parent = the delegation is signed. Standalone lookup.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, signed, validated_ad_flag, has_ds_record","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"cloudflare.com"}},{"name":"dane","description":"DANE for SMTP (RFC 7672): TLSA records at _25._tcp.<mx-host> for every MX host, with per-host DNSSEC validation (DANE is only effective on a signed TLSA RRset). Value-add: MXToolbox has NO TLSA/DANE lookup.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The domain to inspect (a bare host like github.com; a full URL, a leading www., or a full email address are accepted and normalized to the registrable domain).","on_invalid":"reject","example":"github.com","aliases":["query","name"]}],"returns":"domain, found, mx_hosts_checked[], hosts[] (mx_host, found, records[] (usage, usage_label, selector, matching_type, association_data), dnssec_validated), record_count, issues[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"internet.nl"}},{"name":"batch","description":"Run the full 'check' audit on up to 25 domains in one call (each with score + grade).","required_params":["domains"],"optional_params":["skip_blacklist"],"params":[{"name":"domains","type":"array","required":true,"description":"Comma-separated list (or array) of up to 25 domains to run a full health check on in one call.","on_invalid":"reject","example":"github.com,paypal.com","aliases":["domain_list"]},{"name":"skip_blacklist","type":"boolean","required":false,"description":"If true, skip the DNSBL reputation lookups in 'check' (faster; blacklist is the slowest section — many IP×zone DoH queries).","on_invalid":"ignore","default":false,"example":false}],"returns":"results[] (domain, score, grade, found-summary), count, average_score","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"domains":"github.com,paypal.com"}}]},{"name":"email-preflight","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Email Preflight API — pre-send QA for HTML email: structure and accessibility lint, client CSS compatibility, spam-signal score, link and image checks, sender DNS auth and preview","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/email-preflight/v1","spec_available":true,"actions":[{"name":"audit_html","description":"Full pre-send structure + accessibility + deliverability lint of an HTML email: missing alt text, broken structure, mobile-width risks, dark-mode hints, tracking pixels, external assets, List-Unsubscribe check, Gmail-clip size budget, and prioritized recommendations. Pure local compute (no network).","required_params":["html"],"optional_params":["text_part","base_url","subject","check_links"],"params":[{"name":"html","type":"string","required":true,"description":"The full HTML of the email you are about to send (paste the source). Parsed read-only in a no-network, no-script sandbox.","on_invalid":"reject","example":"<html><body><h1>Hi</h1><img src=\"https://x.test/a.png\"></body></html>","aliases":["body","source","input"]},{"name":"text_part","type":"string","required":false,"description":"Optional plain-text alternative of the email. If omitted, the audit flags the missing multipart/alternative text part.","on_invalid":"ignore","example":"Hi — view this email in a browser at https://...","aliases":["plain_text","text"]},{"name":"base_url","type":"string","required":false,"description":"Optional base URL: relative links/images in the HTML are resolved against it before checking.","on_invalid":"ignore","example":"https://newsletter.acme.com/campaign/42","aliases":["base"]},{"name":"subject","type":"string","required":false,"description":"Optional subject line — included in the spam-signal analysis.","on_invalid":"ignore","example":"Your June statement is ready"},{"name":"check_links","type":"boolean","required":false,"description":"If true, audit_html ALSO resolves every link via url-resolver (adds latency + a sub-call per link). Default false = static lint only.","on_invalid":"ignore","default":false,"example":false}],"returns":"html_validity{parse_ok,warnings[]}, size{bytes,gmail_clip_risk,limit}, accessibility{missing_alt,images_total,issues[]}, structure{has_doctype,has_table_layout,uses_div_layout,heading_count}, mobile_width_risks[], dark_mode{has_meta_color_scheme,hints[]}, tracking_pixels[], external_assets[], unsubscribe{list_unsubscribe_header_present,has_unsubscribe_link,has_unsubscribe_text}, text_part{present,recommended}, recommendations[{severity,code,message}], score{0-100,grade}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"html":"<html><body><img src='https://x.test/a.png'><a href='https://x.test'>hi</a></body></html>"}},{"name":"css_support","description":"Email-client CSS/HTML compatibility map for the template (Can-I-Email data, MIT): which CSS features used in the HTML break or degrade in Outlook/Gmail/Apple Mail/Yahoo and friends. Pure local compute (offline snapshot).","required_params":["html"],"optional_params":[],"params":[{"name":"html","type":"string","required":true,"description":"The full HTML of the email you are about to send (paste the source). Parsed read-only in a no-network, no-script sandbox.","on_invalid":"reject","example":"<html><body><h1>Hi</h1><img src=\"https://x.test/a.png\"></body></html>","aliases":["body","source","input"]}],"returns":"features_detected[{feature,title,category,unsupported_in[],partial_in[],high_risk,support_map{}}], high_risk_count, clients_considered[], data_source (bundled-snapshot|curated-fallback), data_version, summary","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"html":"<div style='display:flex'>x</div>"}},{"name":"spam_score","description":"Deterministic spam-SIGNAL score for the email content (caps ratio, image-to-text ratio, spam phrases, missing unsubscribe, raw-IP links…). HONEST: a content signal score, NOT an inbox-placement prediction; SpamAssassin/Rspamd sidecar = the calibrated upgrade (see docs). Pure local compute.","required_params":["html"],"optional_params":["subject","text_part"],"params":[{"name":"html","type":"string","required":true,"description":"The full HTML of the email you are about to send (paste the source). Parsed read-only in a no-network, no-script sandbox.","on_invalid":"reject","example":"<html><body><h1>Hi</h1><img src=\"https://x.test/a.png\"></body></html>","aliases":["body","source","input"]},{"name":"subject","type":"string","required":false,"description":"Optional subject line — included in the spam-signal analysis.","on_invalid":"ignore","example":"Your June statement is ready"},{"name":"text_part","type":"string","required":false,"description":"Optional plain-text alternative of the email. If omitted, the audit flags the missing multipart/alternative text part.","on_invalid":"ignore","example":"Hi — view this email in a browser at https://...","aliases":["plain_text","text"]}],"returns":"score (>=5 ~ likely spam), verdict (clean_signal|suspicious|likely_spam), triggered_rules[{rule,score,description}], rule_count, metrics{words,caps_ratio,image_count,link_count,has_unsubscribe_text}, threshold_note, engine","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"html":"<p>100% FREE!!! ACT NOW — WIN CASH PRIZE</p>","subject":"FREE MONEY"}},{"name":"check_links","description":"Resolve every link in the email through url-resolver (SSRF-guarded): final URL, redirect chain, status, final domain. Bot-403/429 = `unverifiable` (honest — not marked broken). Inner-calls url-resolver per link.","required_params":["html"],"optional_params":["base_url"],"params":[{"name":"html","type":"string","required":true,"description":"The full HTML of the email you are about to send (paste the source). Parsed read-only in a no-network, no-script sandbox.","on_invalid":"reject","example":"<html><body><h1>Hi</h1><img src=\"https://x.test/a.png\"></body></html>","aliases":["body","source","input"]},{"name":"base_url","type":"string","required":false,"description":"Optional base URL: relative links/images in the HTML are resolved against it before checking.","on_invalid":"ignore","example":"https://newsletter.acme.com/campaign/42","aliases":["base"]}],"returns":"links[{url,final_url,final_domain,status,redirect_count,verdict: ok|broken|redirect|unverifiable|blocked|skipped}], counts{total,checked,ok,broken,redirect,unverifiable}, unique_domains[]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"html":"<a href='https://github.com'>a</a><a href='https://example.com'>b</a>"}},{"name":"check_images","description":"Audit every <img> in the email: alt text presence, dimensions declared, src scheme/format, http-vs-https, and (best-effort) reachability via url-resolver. Pure-compute by default; reachability adds sub-calls.","required_params":["html"],"optional_params":["base_url","check_reachable"],"params":[{"name":"html","type":"string","required":true,"description":"The full HTML of the email you are about to send (paste the source). Parsed read-only in a no-network, no-script sandbox.","on_invalid":"reject","example":"<html><body><h1>Hi</h1><img src=\"https://x.test/a.png\"></body></html>","aliases":["body","source","input"]},{"name":"base_url","type":"string","required":false,"description":"Optional base URL: relative links/images in the HTML are resolved against it before checking.","on_invalid":"ignore","example":"https://newsletter.acme.com/campaign/42","aliases":["base"]},{"name":"check_reachable","type":"boolean","required":false,"description":"If true, HEAD/GET each image via url-resolver to confirm it loads (adds latency + sub-calls).","on_invalid":"ignore","default":false,"example":false}],"returns":"images[{src,alt,has_alt,width,height,dimensions_declared,scheme,format,is_https,reachable}], counts{total,missing_alt,insecure_http,no_dimensions}, issues[]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"html":"<img src='https://x.test/a.png'><img src='b.png' alt='ok'>"}},{"name":"dns_auth","description":"Sender-domain email-authentication summary (SPF/DKIM/DMARC/MX + deliverability grade) via an inner-call to the email-health engine — REUSE, not re-implemented here (email-health owns DNS auth; this is a thin preflight wrapper).","required_params":["domain"],"optional_params":["dkim_selector","include_blacklist"],"params":[{"name":"domain","type":"string","required":true,"description":"The sending domain (the From: address domain). Its email authentication (SPF/DKIM/DMARC/MX) is summarized via email-health.","on_invalid":"reject","example":"acme.com","aliases":["sender_domain","d"]},{"name":"dkim_selector","type":"string","required":false,"description":"Optional DKIM selector to look up (e.g. 'google', 's1'). If omitted, email-health autoscans common selectors.","on_invalid":"ignore","example":"s1","aliases":["selector"]},{"name":"include_blacklist","type":"boolean","required":false,"description":"Also run the slower DNSBL reputation pass (email-health blacklist). Default false = auth-only (SPF/DKIM/DMARC/MX), the fast pre-send check.","on_invalid":"ignore","default":false,"example":false}],"returns":"domain, score{score,grade}, spf{found,policy}, dkim{found,selectors_found}, dmarc{found,policy,enforced}, mx{found,provider}, summary, source ('email-health inner-call'), reused_engine","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"preview_basic","description":"Basic visual preview: render the HTML to a PNG via web-capture's browser sandbox. HONEST: a browser render, NOT a real email-client render (no Outlook/Word engine). Degrades gracefully if web-capture is not deployed.","required_params":["html"],"optional_params":["width"],"params":[{"name":"html","type":"string","required":true,"description":"The full HTML of the email you are about to send (paste the source). Parsed read-only in a no-network, no-script sandbox.","on_invalid":"reject","example":"<html><body><h1>Hi</h1><img src=\"https://x.test/a.png\"></body></html>","aliases":["body","source","input"]},{"name":"width","type":"integer","required":false,"description":"Viewport width in px (typical email width = 600).","on_invalid":"ignore","default":600,"example":600,"minimum":320,"maximum":1200}],"returns":"image_b64 (PNG) or unavailable status, width, rendered_by ('web-capture'), disclaimer (browser != email-client render)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"html":"<h1>hi</h1>"}}]},{"name":"emirates-auction","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Emirates Auction — UAE government auctions: cars, number plates, property, surplus","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/emirates-auction/v1","spec_available":true,"actions":[{"name":"auctions","description":"Every Emirates Auction sale this engine can read, with the site's own live lot count for the ones running right now. This is the calendar you call first: it tells you which `auction` slugs have lots today (measured 2026-10-06: motors 984, general-items 166, Fujairah plates 80, Dubai property 26, 261 plates in all), which are between sessions, and which are bidder-restricted.","required_params":[],"optional_params":["language"],"params":[{"name":"language","type":"enum","required":false,"description":"Language of the auction names.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]}],"returns":"`{summary, rows[]}`. Each row: auction (the slug `search` takes), auction_type_id, title, lot_kind, classification, emirate, live_lot_count, is_live, url. `summary` carries the server time, the timezone and the total live lot count across all sales.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"language":"en"}},{"name":"search","description":"Lots in one Emirates Auction sale, filtered the way the site itself filters them. Works across every lot kind: cars and machinery, number plates, property, police and customs surplus, jewellery, ships, space for rent. Every auction row carries the live high bid, the bid count, the minimum next bid and the close time resolved to Asia/Dubai (+04:00) alongside the source's raw string — because on an auction a bare 'price' is not an answer.","required_params":["auction"],"optional_params":["query","sort","page","max_results","price_min","price_max","category_ids","make_ids","model_ids","type_ids","year_min","year_max","mileage_min","mileage_max","area_min","area_max","emirates","ownership","providers","plate_codes","plate_digits","plate_patterns","end_dates","language","verify_count"],"params":[{"name":"auction","type":"enum","required":true,"description":"Which Emirates Auction sale to read. Either the slug (`motors`, `plates-sharjah`, `properties`, `general-items`, `jewellery-watches`, `for-rent` …) or the site's own numeric `AuctionTypeId` (motors = 4, Dubai property = 9, Sharjah plates = 23). Call the `auctions` action first to see which sales are live right now and how many lots each one holds.","on_invalid":"reject","allowed_values":[{"value":"motors","label":"motors — Cars, bikes, trucks & machinery"},{"value":"motors-physical","label":"motors-physical — Vehicles — physical (on-site) auction"},{"value":"properties","label":"properties — Dubai & northern-emirates property"},{"value":"general-items","label":"general-items — General items (government surplus)"},{"value":"dubai-police-items","label":"dubai-police-items — General items — Dubai Police"},{"value":"abu-dhabi-police","label":"abu-dhabi-police — General items — Abu Dhabi Police"},{"value":"jewellery-watches","label":"jewellery-watches — Jewellery & watches"},{"value":"ships","label":"ships — Ships & barges"},{"value":"dubai-customs","label":"dubai-customs — Dubai Customs seizures"},{"value":"dubai-dates","label":"dubai-dates — Dubai Dates (palm trees)"},{"value":"expo","label":"expo — Expo 2020 Dubai assets"},{"value":"for-rent","label":"for-rent — Commercial space for rent"},{"value":"etisalat-numbers","label":"etisalat-numbers — e& (Etisalat) premium mobile numbers"},{"value":"emirates-skywards","label":"emirates-skywards — Emirates Skywards memberships"},{"value":"plates-abu-dhabi","label":"plates-abu-dhabi — Abu Dhabi number plates (online auction)"},{"value":"plates-uae","label":"plates-uae — UAE federal number plates (online auction)"},{"value":"plates-dubai","label":"plates-dubai — Dubai number plates (online auction)"},{"value":"plates-jet-ski","label":"plates-jet-ski — Jet-ski number plates (online auction)"},{"value":"plates-fujairah-online","label":"plates-fujairah-online — Fujairah number plates (online auction)"},{"value":"plates-sharjah","label":"plates-sharjah — Sharjah number plates (direct sale)"},{"value":"plates-ajman","label":"plates-ajman — Ajman number plates (direct sale)"},{"value":"plates-rak","label":"plates-rak — Ras Al Khaimah number plates (direct sale)"},{"value":"plates-uaq","label":"plates-uaq — Umm Al Quwain number plates (direct sale)"},{"value":"plates-fujairah","label":"plates-fujairah — Fujairah number plates (direct sale)"},{"value":"plates-abu-dhabi-physical","label":"plates-abu-dhabi-physical — Abu Dhabi number plates (physical auction)"},{"value":"plates-sharjah-physical","label":"plates-sharjah-physical — Sharjah number plates (physical auction)"},{"value":"plates-ajman-physical","label":"plates-ajman-physical — Ajman number plates (physical auction)"}],"example":"motors","value_pattern":"\\d{1,4}","aliases":["auction_type","auction_type_id","category"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, passed to the site's own `SearchKey`. It really filters (measured: `toyota` 107 of 984 vehicles, `rolls royce` 3). Arabic works too — the site is bilingual; set `language: ar` to get Arabic titles back as well. For plates, put the plate NUMBER here (or use the dedicated `plate_search` action).","on_invalid":"reject","example":"toyota","aliases":["q","keyword","search","text"]},{"name":"sort","type":"enum","required":false,"description":"Result order. `ending_soonest` is the site's own default. Only these orders are offered because only these were measured to actually reorder the result — the source accepts other column names and silently ignores them.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"ending soonest"},{"value":"ending_latest","label":"ending latest"},{"value":"price_low","label":"price low"},{"value":"price_high","label":"price high"},{"value":"fewest_bids","label":"fewest bids"},{"value":"most_bids","label":"most bids"},{"value":"year_oldest","label":"year oldest"},{"value":"year_newest","label":"year newest"},{"value":"featured","label":"featured"}],"default":"ending_soonest","example":"ending_soonest"},{"name":"page","type":"integer","required":false,"description":"1-based page. Walking past the last page returns 0 rows with `has_more: false` rather than repeating the last page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-200 (default 40).","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":200,"aliases":["page_size","limit"]},{"name":"price_min","type":"number","required":false,"description":"Lowest current price, in AED.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest current price, in AED.","on_invalid":"reject","example":500000,"minimum":0,"aliases":["max_price"]},{"name":"category_ids","type":"array","required":false,"description":"Numeric category ids from the `filters` action (`motors`: Bikes 2, Buses, Machinery…; `properties`: Apartment 2, Studio…). Use `filters` to get the ids with their live counts.","on_invalid":"reject","example":[2],"aliases":["categories","category_id"]},{"name":"make_ids","type":"array","required":false,"description":"Vehicle make ids from `filters` (`motors` only). 104 makes at capture.","on_invalid":"reject","example":[105],"aliases":["makes","make_id","make"]},{"name":"model_ids","type":"array","required":false,"description":"Vehicle model ids from `filters` (`motors` only). 430 models at capture.","on_invalid":"reject","example":[8543],"aliases":["models","model_id","model"]},{"name":"type_ids","type":"array","required":false,"description":"Vehicle body-type ids from `filters` (`motors` only), e.g. Saloon, Van.","on_invalid":"reject","example":[96],"aliases":["types","body_type"]},{"name":"year_min","type":"integer","required":false,"description":"Oldest model year (`motors`). Live range at capture: 1967-2026.","on_invalid":"reject","example":2020,"minimum":1900,"aliases":["min_year"]},{"name":"year_max","type":"integer","required":false,"description":"Newest model year (`motors`).","on_invalid":"reject","example":2026,"minimum":1900,"aliases":["max_year"]},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading in km (`motors`).","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_mileage","min_km"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading in km (`motors`).","on_invalid":"reject","example":50000,"minimum":0,"aliases":["max_mileage","max_km"]},{"name":"area_min","type":"number","required":false,"description":"Smallest built area in square FEET (`properties` — the site's own area filter is in ft²).","on_invalid":"reject","example":500,"minimum":0},{"name":"area_max","type":"number","required":false,"description":"Largest built area in square feet (`properties`).","on_invalid":"reject","example":5000,"minimum":0},{"name":"emirates","type":"array","required":false,"description":"Emirate names exactly as the `filters` action lists them (`Dubai`, `Sharjah`, `Ajman`, `Abu Dhabi` …). Applies to `properties`, `for-rent` and the surplus sales; the plate sales are already per-emirate.","on_invalid":"reject","example":["Dubai"],"aliases":["emirate","city"]},{"name":"ownership","type":"array","required":false,"description":"Property ownership type (`properties` only).","on_invalid":"ignore","allowed_values":[{"value":"Freehold","label":"Freehold"},{"value":"GCC","label":"GCC nationals"},{"value":"Leasehold","label":"Leasehold"}],"example":["Freehold"],"aliases":["gcc","tenure"]},{"name":"providers","type":"array","required":false,"description":"Seller / provider names as `filters` lists them (surplus sales).","on_invalid":"reject","example":["Dubai Police"]},{"name":"plate_codes","type":"array","required":false,"description":"Plate code letters/digits as `filters` lists them (plate sales).","on_invalid":"reject","example":["3"],"aliases":["plate_code","codes"]},{"name":"plate_digits","type":"array","required":false,"description":"How many digits the plate number has, e.g. `2`, `3`, `5` (plate sales).","on_invalid":"reject","example":["5"],"aliases":["digits","plate_digit_count"]},{"name":"plate_patterns","type":"array","required":false,"description":"The site's own plate pattern labels — X/Y/Z stand for repeating digit groups, so `XYZZZ` is one digit followed by a triple. 35 patterns were live in the Sharjah sale at capture. 🔴 Only a pattern the `filters` action lists for THAT sale matches: `XYZZZ` returned 5 plates, `XXYY` returned 0 across all ten sales.","on_invalid":"reject","example":["XYZZZ"],"aliases":["patterns"]},{"name":"end_dates","type":"array","required":false,"description":"Closing-day buckets exactly as the `filters` action publishes them (`EndDate` values such as `2026-10-06T00:00:00`, labelled Today / Tomorrow / …).","on_invalid":"reject","example":["2026-10-06T00:00:00"],"aliases":["end_date"]},{"name":"language","type":"enum","required":false,"description":"Language of the titles, categories and labels the source returns.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]},{"name":"verify_count","type":"boolean","required":false,"description":"Ask the source's OWN facet endpoint how many lots the SAME filter matches and publish it as `summary.source_filtered_count`, with `count_disagrees: true` when the two numbers differ — a second witness on every filter. Off by default because that extra call carries the whole facet sheet (measured 38-93 KB on `motors`, 4-6 KB on the smaller sales).","on_invalid":"reject","default":false,"example":true}],"returns":"`{summary, rows[]}`. `summary` = {auction, auction_type_id, auction_name, lot_kind, total_results, source_filtered_count, count_disagrees, returned, page, page_size, last_page, has_more, auction_running, auction_ends_at, server_time, timezone, utc_offset_hours, clock_drift_seconds, filters_applied, sort}. Each row: lot_id, lot_number, title, subtitle, url, auction, auction_type_id, auction_name, lot_kind, classification, sale_type, current_price (the LIVE HIGH BID on a bidding lot), price_display, price_basis, price_disagrees, currency, bid_count, min_increment, minimum_next_bid, start_price, ends_at (ISO-8601 with +04:00), ends_at_local (the source's raw naive string), ends_at_display, seconds_remaining, source_seconds_remaining, ended, starts_at, images[], tags[]. 🔴 SURFACE-SCOPED BY DESIGN: a plate DIRECT-SALE row carries no clock and no bid state (that sale has none), so bid_count / min_increment / minimum_next_bid / ends_at* / seconds_remaining / ended / images are absent there rather than null; `emirate` appears only where the source publishes it (property, rental) or where the sale itself is an emirate (plates). Vehicles add year, odometer_km, odometer_display, specs_region, has_360_view, view_360_url. Plates add plate_number, plate_code, plate_digits, plate_label, plate_status_code. Property adds property_type, area_sqm, area_sqft, bedrooms, bathrooms, living_rooms, office_rooms, address, latitude, longitude, ownership, reopen_price, description, subtitle, land_use, is_physical_auction. There is NO reserve flag: this source does not publish one (see `min_increment` / `minimum_next_bid` / `reopen_price` instead).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"auction":"motors","sort":"ending_soonest","max_results":20}},{"name":"detail","description":"The full sheet for one lot: the complete label/value spec table, every feature and condition bullet the sale publishes, the document links (a vehicle's inspection-report PDF, the terms), the whole photo gallery, the 360° viewer, the provider, the live bid state and the close time. Takes the `lot_id` and the `auction` a `search` row came from.","required_params":["auction","lot_id"],"optional_params":["language"],"params":[{"name":"auction","type":"enum","required":true,"description":"Which Emirates Auction sale to read. Either the slug (`motors`, `plates-sharjah`, `properties`, `general-items`, `jewellery-watches`, `for-rent` …) or the site's own numeric `AuctionTypeId` (motors = 4, Dubai property = 9, Sharjah plates = 23). Call the `auctions` action first to see which sales are live right now and how many lots each one holds.","on_invalid":"reject","allowed_values":[{"value":"motors","label":"motors — Cars, bikes, trucks & machinery"},{"value":"motors-physical","label":"motors-physical — Vehicles — physical (on-site) auction"},{"value":"properties","label":"properties — Dubai & northern-emirates property"},{"value":"general-items","label":"general-items — General items (government surplus)"},{"value":"dubai-police-items","label":"dubai-police-items — General items — Dubai Police"},{"value":"abu-dhabi-police","label":"abu-dhabi-police — General items — Abu Dhabi Police"},{"value":"jewellery-watches","label":"jewellery-watches — Jewellery & watches"},{"value":"ships","label":"ships — Ships & barges"},{"value":"dubai-customs","label":"dubai-customs — Dubai Customs seizures"},{"value":"dubai-dates","label":"dubai-dates — Dubai Dates (palm trees)"},{"value":"expo","label":"expo — Expo 2020 Dubai assets"},{"value":"for-rent","label":"for-rent — Commercial space for rent"},{"value":"etisalat-numbers","label":"etisalat-numbers — e& (Etisalat) premium mobile numbers"},{"value":"emirates-skywards","label":"emirates-skywards — Emirates Skywards memberships"},{"value":"plates-abu-dhabi","label":"plates-abu-dhabi — Abu Dhabi number plates (online auction)"},{"value":"plates-uae","label":"plates-uae — UAE federal number plates (online auction)"},{"value":"plates-dubai","label":"plates-dubai — Dubai number plates (online auction)"},{"value":"plates-jet-ski","label":"plates-jet-ski — Jet-ski number plates (online auction)"},{"value":"plates-fujairah-online","label":"plates-fujairah-online — Fujairah number plates (online auction)"},{"value":"plates-sharjah","label":"plates-sharjah — Sharjah number plates (direct sale)"},{"value":"plates-ajman","label":"plates-ajman — Ajman number plates (direct sale)"},{"value":"plates-rak","label":"plates-rak — Ras Al Khaimah number plates (direct sale)"},{"value":"plates-uaq","label":"plates-uaq — Umm Al Quwain number plates (direct sale)"},{"value":"plates-fujairah","label":"plates-fujairah — Fujairah number plates (direct sale)"},{"value":"plates-abu-dhabi-physical","label":"plates-abu-dhabi-physical — Abu Dhabi number plates (physical auction)"},{"value":"plates-sharjah-physical","label":"plates-sharjah-physical — Sharjah number plates (physical auction)"},{"value":"plates-ajman-physical","label":"plates-ajman-physical — Ajman number plates (physical auction)"}],"example":"motors","value_pattern":"\\d{1,4}","aliases":["auction_type","auction_type_id","category"]},{"name":"lot_id","type":"integer","required":true,"description":"The lot's `lot_id` from a `search` row (the site calls it `Id`). It is only valid inside its own auction, so `auction` must match the row you took it from. Lot ids are short-lived: a lot disappears when its auction closes, and closed auctions are not exposed, so take a fresh id from `search` or `ending_today` rather than reusing one.","on_invalid":"reject","minimum":1,"aliases":["id","item_id","lot"]},{"name":"language","type":"enum","required":false,"description":"Language of the labels and values.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]}],"returns":"One object: every `search` row field, plus specs{} (the label/value table, paired per row so a blank value cannot shift into the next label), features[] {group, text}, documents[] {title, url}, images[], provider, yard, description, vat_applies, inspection_report_url, canonical_url, similar_lots[], deposit{} (the deposit bands the sale requires), and the same server_time / timezone witnesses as `search`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":null},{"name":"plate_search","description":"🔑 THE PLATE SURFACE. Search UAE vehicle number plates across EVERY plate sale Emirates Auction has open — Sharjah, Ajman, Ras Al Khaimah, Umm Al Quwain and Fujairah direct sale plus the Abu Dhabi / UAE / Dubai / jet-ski bidding auctions — in one call, by plate number, code, digit count or pattern. UAE plates are a market of their own (short and repeating-digit plates trade for millions of dirhams) and no other engine in this catalogue covers it. Sales with no session open are reported in `summary.auctions_closed`, not hidden.","required_params":[],"optional_params":["query","plate_codes","plate_digits","plate_patterns","price_min","price_max","emirates","sort","max_results","language"],"params":[{"name":"query","type":"string","required":false,"description":"The plate number, or part of it. Blank returns every plate on sale, cheapest first.","on_invalid":"reject","example":"45440","aliases":["q","plate_number","number","keyword"]},{"name":"plate_codes","type":"array","required":false,"description":"Plate code(s), e.g. `3`, `A`, `AA` (see `filters`).","on_invalid":"reject","example":["3"],"aliases":["plate_code","codes"]},{"name":"plate_digits","type":"array","required":false,"description":"Digit count, e.g. `2` for a two-digit plate.","on_invalid":"reject","example":["5"],"aliases":["digits"]},{"name":"plate_patterns","type":"array","required":false,"description":"The site's pattern labels (`XYZZZ`, `XYZX`, `XYZYX` …). `filters` lists the live ones per sale.","on_invalid":"reject","example":["XYZZZ"],"aliases":["patterns"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in AED.","on_invalid":"reject","example":10000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in AED.","on_invalid":"reject","example":1000000,"minimum":0,"aliases":["max_price"]},{"name":"emirates","type":"array","required":false,"description":"Limit the fan-out to these emirates (`Sharjah`, `Ajman`, `Ras Al Khaimah`, `Umm Al Quwain`, `Fujairah`, `Abu Dhabi`, `Dubai`, `UAE`). Omit to search all.","on_invalid":"reject","example":["Sharjah"],"aliases":["emirate"]},{"name":"sort","type":"enum","required":false,"description":"Order inside each sale before the results are merged.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"ending soonest"},{"value":"ending_latest","label":"ending latest"},{"value":"price_low","label":"price low"},{"value":"price_high","label":"price high"},{"value":"fewest_bids","label":"fewest bids"},{"value":"most_bids","label":"most bids"},{"value":"year_oldest","label":"year oldest"},{"value":"year_newest","label":"year newest"},{"value":"featured","label":"featured"}],"default":"price_low","example":"price_low"},{"name":"max_results","type":"integer","required":false,"description":"Total plates to return across all sales.","on_invalid":"reject","default":60,"example":60,"minimum":1,"maximum":200,"aliases":["limit","page_size"]},{"name":"language","type":"enum","required":false,"description":"Language of the labels.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]}],"returns":"`{summary, rows[]}`. `summary` = {total_results, returned, auctions_searched[], auctions_closed[] (answered with no lots at all = no session open), auctions_no_match[] (open, but nothing matched the filter — a DIFFERENT answer, never merged with the first), auctions_restricted[], auctions_unreached[], price_range, server_time, timezone, filters_applied}. Each row is a plate: plate_number, plate_code, plate_digits, plate_label, emirate, auction, auction_type_id, sale_type (`direct_sale` for the buy-now emirates, `bidding_auction` for the online sales), current_price, price_basis, currency, bid_count, min_increment, minimum_next_bid, ends_at, ends_at_local, seconds_remaining, url.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"plate_digits":["5"],"sort":"price_low","max_results":40}},{"name":"ending_today","description":"Every lot closing TODAY across all of Emirates Auction, in one call, newest deadline first — the sweep a bidder actually runs each morning. Each row names its own sale (`auction_name`, `auction_type_id`) so a mixed feed stays attributable, and carries the same bid state and resolved close time as `search`. Measured 361-375 lots on 2026-10-06.","required_params":[],"optional_params":["query","price_min","price_max","sort","page","max_results","language"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword over the lots closing today.","on_invalid":"reject","example":"nissan","aliases":["q","keyword","search"]},{"name":"price_min","type":"number","required":false,"description":"Lowest current price in AED.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest current price in AED.","on_invalid":"reject","example":200000,"minimum":0,"aliases":["max_price"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"ending soonest"},{"value":"ending_latest","label":"ending latest"},{"value":"price_low","label":"price low"},{"value":"price_high","label":"price high"},{"value":"fewest_bids","label":"fewest bids"},{"value":"most_bids","label":"most bids"},{"value":"year_oldest","label":"year oldest"},{"value":"year_newest","label":"year newest"},{"value":"featured","label":"featured"}],"default":"ending_soonest","example":"ending_soonest"},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-200.","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":200,"aliases":["page_size","limit"]},{"name":"language","type":"enum","required":false,"description":"Language of the titles.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]}],"returns":"`{summary, rows[]}` in the same shape as `search`, with every row tagged with the sale it belongs to. `summary.min_end_date` is the next close of the day, both raw and resolved.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sort":"ending_soonest","max_results":20}},{"name":"filters","description":"The sale's own facet sheet AND its count oracle: every category, vehicle make and model, body type, plate code, plate pattern, digit count, emirate, ownership type, provider and closing-day bucket that is LIVE in that sale, each with the number of lots behind it, plus the price / year / mileage / area sliders. Pass the same filters you would pass to `search` and the answer is the source's own count for that exact combination — the cheap way to size a query before you page through it, and the ids `search` expects.","required_params":["auction"],"optional_params":["query","category_ids","make_ids","model_ids","type_ids","plate_codes","plate_digits","plate_patterns","emirates","ownership","providers","price_min","price_max","year_min","year_max","mileage_min","mileage_max","area_min","area_max","end_dates","language"],"params":[{"name":"auction","type":"enum","required":true,"description":"Which Emirates Auction sale to read. Either the slug (`motors`, `plates-sharjah`, `properties`, `general-items`, `jewellery-watches`, `for-rent` …) or the site's own numeric `AuctionTypeId` (motors = 4, Dubai property = 9, Sharjah plates = 23). Call the `auctions` action first to see which sales are live right now and how many lots each one holds.","on_invalid":"reject","allowed_values":[{"value":"motors","label":"motors — Cars, bikes, trucks & machinery"},{"value":"motors-physical","label":"motors-physical — Vehicles — physical (on-site) auction"},{"value":"properties","label":"properties — Dubai & northern-emirates property"},{"value":"general-items","label":"general-items — General items (government surplus)"},{"value":"dubai-police-items","label":"dubai-police-items — General items — Dubai Police"},{"value":"abu-dhabi-police","label":"abu-dhabi-police — General items — Abu Dhabi Police"},{"value":"jewellery-watches","label":"jewellery-watches — Jewellery & watches"},{"value":"ships","label":"ships — Ships & barges"},{"value":"dubai-customs","label":"dubai-customs — Dubai Customs seizures"},{"value":"dubai-dates","label":"dubai-dates — Dubai Dates (palm trees)"},{"value":"expo","label":"expo — Expo 2020 Dubai assets"},{"value":"for-rent","label":"for-rent — Commercial space for rent"},{"value":"etisalat-numbers","label":"etisalat-numbers — e& (Etisalat) premium mobile numbers"},{"value":"emirates-skywards","label":"emirates-skywards — Emirates Skywards memberships"},{"value":"plates-abu-dhabi","label":"plates-abu-dhabi — Abu Dhabi number plates (online auction)"},{"value":"plates-uae","label":"plates-uae — UAE federal number plates (online auction)"},{"value":"plates-dubai","label":"plates-dubai — Dubai number plates (online auction)"},{"value":"plates-jet-ski","label":"plates-jet-ski — Jet-ski number plates (online auction)"},{"value":"plates-fujairah-online","label":"plates-fujairah-online — Fujairah number plates (online auction)"},{"value":"plates-sharjah","label":"plates-sharjah — Sharjah number plates (direct sale)"},{"value":"plates-ajman","label":"plates-ajman — Ajman number plates (direct sale)"},{"value":"plates-rak","label":"plates-rak — Ras Al Khaimah number plates (direct sale)"},{"value":"plates-uaq","label":"plates-uaq — Umm Al Quwain number plates (direct sale)"},{"value":"plates-fujairah","label":"plates-fujairah — Fujairah number plates (direct sale)"},{"value":"plates-abu-dhabi-physical","label":"plates-abu-dhabi-physical — Abu Dhabi number plates (physical auction)"},{"value":"plates-sharjah-physical","label":"plates-sharjah-physical — Sharjah number plates (physical auction)"},{"value":"plates-ajman-physical","label":"plates-ajman-physical — Ajman number plates (physical auction)"}],"example":"motors","value_pattern":"\\d{1,4}","aliases":["auction_type","auction_type_id","category"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, passed to the site's own `SearchKey`. It really filters (measured: `toyota` 107 of 984 vehicles, `rolls royce` 3). Arabic works too — the site is bilingual; set `language: ar` to get Arabic titles back as well. For plates, put the plate NUMBER here (or use the dedicated `plate_search` action).","on_invalid":"reject","example":"toyota","aliases":["q","keyword","search","text"]},{"name":"price_min","type":"number","required":false,"description":"Lowest current price, in AED.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest current price, in AED.","on_invalid":"reject","example":500000,"minimum":0,"aliases":["max_price"]},{"name":"category_ids","type":"array","required":false,"description":"Numeric category ids from the `filters` action (`motors`: Bikes 2, Buses, Machinery…; `properties`: Apartment 2, Studio…). Use `filters` to get the ids with their live counts.","on_invalid":"reject","example":[2],"aliases":["categories","category_id"]},{"name":"make_ids","type":"array","required":false,"description":"Vehicle make ids from `filters` (`motors` only). 104 makes at capture.","on_invalid":"reject","example":[105],"aliases":["makes","make_id","make"]},{"name":"model_ids","type":"array","required":false,"description":"Vehicle model ids from `filters` (`motors` only). 430 models at capture.","on_invalid":"reject","example":[8543],"aliases":["models","model_id","model"]},{"name":"type_ids","type":"array","required":false,"description":"Vehicle body-type ids from `filters` (`motors` only), e.g. Saloon, Van.","on_invalid":"reject","example":[96],"aliases":["types","body_type"]},{"name":"year_min","type":"integer","required":false,"description":"Oldest model year (`motors`). Live range at capture: 1967-2026.","on_invalid":"reject","example":2020,"minimum":1900,"aliases":["min_year"]},{"name":"year_max","type":"integer","required":false,"description":"Newest model year (`motors`).","on_invalid":"reject","example":2026,"minimum":1900,"aliases":["max_year"]},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading in km (`motors`).","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_mileage","min_km"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading in km (`motors`).","on_invalid":"reject","example":50000,"minimum":0,"aliases":["max_mileage","max_km"]},{"name":"area_min","type":"number","required":false,"description":"Smallest built area in square FEET (`properties` — the site's own area filter is in ft²).","on_invalid":"reject","example":500,"minimum":0},{"name":"area_max","type":"number","required":false,"description":"Largest built area in square feet (`properties`).","on_invalid":"reject","example":5000,"minimum":0},{"name":"emirates","type":"array","required":false,"description":"Emirate names exactly as the `filters` action lists them (`Dubai`, `Sharjah`, `Ajman`, `Abu Dhabi` …). Applies to `properties`, `for-rent` and the surplus sales; the plate sales are already per-emirate.","on_invalid":"reject","example":["Dubai"],"aliases":["emirate","city"]},{"name":"ownership","type":"array","required":false,"description":"Property ownership type (`properties` only).","on_invalid":"ignore","allowed_values":[{"value":"Freehold","label":"Freehold"},{"value":"GCC","label":"GCC nationals"},{"value":"Leasehold","label":"Leasehold"}],"example":["Freehold"],"aliases":["gcc","tenure"]},{"name":"providers","type":"array","required":false,"description":"Seller / provider names as `filters` lists them (surplus sales).","on_invalid":"reject","example":["Dubai Police"]},{"name":"plate_codes","type":"array","required":false,"description":"Plate code letters/digits as `filters` lists them (plate sales).","on_invalid":"reject","example":["3"],"aliases":["plate_code","codes"]},{"name":"plate_digits","type":"array","required":false,"description":"How many digits the plate number has, e.g. `2`, `3`, `5` (plate sales).","on_invalid":"reject","example":["5"],"aliases":["digits","plate_digit_count"]},{"name":"plate_patterns","type":"array","required":false,"description":"The site's own plate pattern labels — X/Y/Z stand for repeating digit groups, so `XYZZZ` is one digit followed by a triple. 35 patterns were live in the Sharjah sale at capture. 🔴 Only a pattern the `filters` action lists for THAT sale matches: `XYZZZ` returned 5 plates, `XXYY` returned 0 across all ten sales.","on_invalid":"reject","example":["XYZZZ"],"aliases":["patterns"]},{"name":"end_dates","type":"array","required":false,"description":"Closing-day buckets exactly as the `filters` action publishes them (`EndDate` values such as `2026-10-06T00:00:00`, labelled Today / Tomorrow / …).","on_invalid":"reject","example":["2026-10-06T00:00:00"],"aliases":["end_date"]},{"name":"language","type":"enum","required":false,"description":"Language of the titles, categories and labels the source returns.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]}],"returns":"`{summary, facets}`. `summary` = {auction, auction_type_id, total_results (the source's count for the filter you passed), filters_applied, server_time, timezone}. `facets` holds the live option lists — categories[], makes[], models[], types[], plate_codes[], plate_patterns[], plate_digit_counts[], emirates[], ownership[], providers[], end_dates[] (each {id, title, count}) — and sliders{price, year, mileage, area} with {from, to, step}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"auction":"motors"}}]},{"name":"emlakjet","category":{"id":"real-estate","title":"Real Estate"},"title":"Emlakjet API scraper — Turkey real-estate listings: for-sale, for-rent, daily-rent and business-transfer property across all 81 Turkish provinces, with structured filters (price TRY, gross m², room layout 1+1/2+1/3+1, bathrooms, heating, posting date, seller type, sort) and every listing carrying price, room count, area, floor, province/district/neighbourhood with coordinates, publication and update dates and the estate office behind it — plus a full per-listing detail record (description, all photos, price history, heating, deed status, credit eligibility, building age), similar-listing lookup, an il/ilçe/mahalle location resolver and the estate-office and consultant directory. No API key and no account required.","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/emlakjet/v1","spec_available":true,"actions":[{"name":"search","description":"Search emlakjet.com property listings anywhere in Turkey. Pick the deal type (sale, rent, daily rent, transfer), the property type and a location — a province, district or neighbourhood — then narrow with price, gross m², room layout, bathrooms, heating, how recently it was posted and who is advertising. Every filter here was measured against the source's own unfiltered count. Each result carries the asking price as a number, the room layout, area in m², the floor, the full province/district/neighbourhood breakdown with latitude and longitude, the posting and update timestamps, badges, every photo and the estate office. `total` is emlakjet's own count for the query; emlakjet serves at most 50 pages of 30 for any one query, so narrow the query to reach deeper stock.","required_params":[],"optional_params":["trade_type","property_type","location","page","sort","include_pii","price_min","price_max","area_min","area_max","rooms","bath_count","heating","listed_within","seller_type"],"params":[{"name":"trade_type","type":"enum","required":false,"description":"Whether the listings are for sale, for rent, for daily rental, or a business transfer.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale (satılık)"},{"value":"rent","label":"For rent (kiralık)"},{"value":"daily_rent","label":"Daily rental (günlük kiralık)"},{"value":"transfer","label":"Business transfer (devren) — commercial only"}],"default":"sale","example":"sale","aliases":["listing_type","trade","deal_type"]},{"name":"property_type","type":"enum","required":false,"description":"The kind of property. 'residential' covers every home type; the narrower values restrict the search to that one type.","on_invalid":"reject","allowed_values":[{"value":"residential","label":"Housing — all homes (konut)"},{"value":"apartment","label":"Apartment flat (daire)"},{"value":"villa","label":"Villa"},{"value":"detached_house","label":"Detached house (müstakil ev)"},{"value":"residence","label":"Residence"},{"value":"summer_house","label":"Summer house (yazlık)"},{"value":"commercial","label":"Commercial / workplace (iş yeri)"},{"value":"land","label":"Land / plot (arsa)"},{"value":"building","label":"Whole building (bina)"},{"value":"tourism","label":"Tourism facility (turistik tesis)"},{"value":"timeshare","label":"Timeshare (devremülk)"}],"default":"residential","example":"residential","aliases":["category","estate_type","home_type"]},{"name":"location","type":"string","required":false,"description":"Where to search — an emlakjet location slug or the plain Turkish place name. A province ('istanbul', 'İzmir', 'Ankara'), a district ('istanbul-kadikoy', 'ankara-cankaya') or a neighbourhood ('istanbul-silivri-selimpasa-mahallesi'). Turkish letters are folded for you, so 'Kadıköy' and 'kadikoy' behave the same. Use the `locations` action to list the exact slugs. Omit it to search all of Turkey.","on_invalid":"reject","example":"istanbul","aliases":["city","il","area","where","loc"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Default is emlakjet's own relevance order.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Newest listings first"},{"value":"oldest","label":"Oldest listings first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"area_asc","label":"Smallest m² first"},{"value":"area_desc","label":"Largest m² first"},{"value":"unit_price_asc","label":"Lowest price per m² first"},{"value":"unit_price_desc","label":"Highest price per m² first"},{"value":"price_reduced","label":"Recently price-reduced first"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, 30 listings per page. emlakjet serves at most 50 pages (1500 listings) for any one query and silently re-serves page 1 above that, so a page past the ceiling is clamped and reported back in `page_clamped`. Narrow the query (district, price band) to reach deeper stock.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"include_pii","type":"boolean","required":false,"description":"Include the contact details emlakjet publishes on the page: the office phone number, the named consultant, their WhatsApp mobile and the licence document number. Off by default — the agency NAME is always returned without it.","on_invalid":"ignore","default":false,"example":false},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in Turkish lira (TRY). Measured to bite: Istanbul for-sale 25 149 listings drops to 17 201 at price_min=5 000 000.","on_invalid":"ignore","example":2000000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in Turkish lira (TRY). Measured to bite: the same 25 149 drops to 1 090 at price_max=2 000 000.","on_invalid":"ignore","example":4000000,"minimum":0,"aliases":["max_price"]},{"name":"area_min","type":"integer","required":false,"description":"Smallest gross floor area in m². Measured: area_min=150 cuts Istanbul for-sale from 25 149 to 6 130.","on_invalid":"ignore","example":100,"minimum":0,"aliases":["m2_min","surface_min","min_area"]},{"name":"area_max","type":"integer","required":false,"description":"Largest gross floor area in m². Measured: area_max=60 leaves 773.","on_invalid":"ignore","example":250,"minimum":0,"aliases":["m2_max","surface_max","max_area"]},{"name":"rooms","type":"array","required":false,"description":"Room layouts in the Turkish '<rooms>+<living rooms>' notation — 'studio', '1+1', '2+1', '3+1', '4+1', '5+1', '1.5+1', '2+0', up to '10+'. Several may be given; they are OR-ed. Measured: ['2+1'] leaves 11 686 of 25 149 in Istanbul.","on_invalid":"ignore","example":["2+1","3+1"],"aliases":["room_count","oda"]},{"name":"bath_count","type":"array","required":false,"description":"Number of bathrooms (1, 2, 3 ...). Several may be given. Measured: [2] leaves 7 775 of 25 149.","on_invalid":"ignore","example":[2],"aliases":["bathrooms","banyo"]},{"name":"heating","type":"array","required":false,"description":"Heating system: combi_gas, central_gas, underfloor, central_metered, floor_heater, gas_stove, air_conditioner, none. Measured: ['combi_gas'] leaves 19 121 of 25 149.","on_invalid":"ignore","example":["combi_gas"],"aliases":["heating_type","isitma"]},{"name":"listed_within","type":"enum","required":false,"description":"Keep only listings published inside this window. Measured: '7d' leaves 2 004 of 25 149 in Istanbul.","on_invalid":"ignore","allowed_values":[{"value":"24h","label":"Posted in the last 24 hours"},{"value":"3d","label":"Last 3 days"},{"value":"7d","label":"Last 7 days"},{"value":"15d","label":"Last 15 days"},{"value":"30d","label":"Last 30 days"}],"example":"7d","aliases":["date_range","posted_within"]},{"name":"seller_type","type":"enum","required":false,"description":"Who is advertising. Needs a location. Measured in Istanbul for-sale: agency 24 556, owner 480, of a 25 149 total.","on_invalid":"reject","allowed_values":[{"value":"agency","label":"From an estate office (emlakçıdan)"},{"value":"owner","label":"Directly from the owner (sahibinden)"},{"value":"builder","label":"From the developer (müteahhitten)"}],"example":"owner","aliases":["owner_type","from","kimden"]}],"returns":"results[]{listing_id, url, title, trade_type, category, estate_type, price{amount, currency, amount_try, price_per_m2, previous_amount, discount_rate_pct, is_opportunity}, rooms, area_m2, floor, location{summary, city{id,name,slug}, district, town, locality, latitude, longitude}, seller{id, name, type, logo_url}, badges[], has_video, has_virtual_tour, image_count, images[], created_at, first_published_at, updated_at} + total + count + page + page_size + max_pages + page_clamped + has_more + query{category_slug, location_slug, seller_segment, filters[]} + warnings[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"trade_type":"sale","property_type":"residential","location":"istanbul","price_min":2000000,"price_max":6000000,"rooms":["2+1","3+1"]}},{"name":"detail","description":"The full record for one emlakjet listing, by its listing number or URL. Adds everything the search card does not carry: the free-text description with the markup stripped, the complete photo set, the price history with the date of each change, gross AND net m² read from the source's own display string, building age, floor and building height, heating, parking, deed status, credit eligibility, whether it is inside a gated complex, furnishing, lift, fibre, deed verification, and the estate office with its membership length.","required_params":["listing_id"],"optional_params":["include_pii"],"params":[{"name":"listing_id","type":"string","required":true,"description":"An emlakjet listing number (the 'İlan Numarası' on the page, e.g. 19945815) or the full listing URL / /ilan/<slug>-<id> path — the `url` or `listing_id` of a search result.","on_invalid":"reject","example":"19945815","value_pattern":"\\d{5,12}|https?://.*|/ilan/.*","aliases":["id","ilan_no","url","listing_url"]},{"name":"include_pii","type":"boolean","required":false,"description":"Include the contact details emlakjet publishes on the page: the office phone number, the named consultant, their WhatsApp mobile and the licence document number. Off by default — the agency NAME is always returned without it.","on_invalid":"ignore","default":false,"example":false}],"returns":"listing{listing_id, url, title, description, trade_type, category, price{...}, price_history[]{amount, currency, changed_at}, rooms, bath_count, floor, building_floors, building_age, area_m2, gross_area_m2, net_area_m2, heating, parking, usage_status, deed_status, credit_eligible, in_complex, elevator, furnished, swap_accepted, dues, has_fiber, deed_verified, attributes{}, quick_infos{}, location{...}, seller{id, name, type, business_name, membership_years, profile_url}, badges[], images[], created_at, updated_at}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"19945815"}},{"name":"similar","description":"The listings emlakjet itself considers comparable to a given one — the cheap comparables surface for a valuation or a 'more like this' feed. Returns the same core fields as a search row (price, rooms, area, location, estate office) for each comparable.","required_params":["listing_id"],"optional_params":["include_pii"],"params":[{"name":"listing_id","type":"string","required":true,"description":"An emlakjet listing number (the 'İlan Numarası' on the page, e.g. 19945815) or the full listing URL / /ilan/<slug>-<id> path — the `url` or `listing_id` of a search result.","on_invalid":"reject","example":"19945815","value_pattern":"\\d{5,12}|https?://.*|/ilan/.*","aliases":["id","ilan_no","url","listing_url"]},{"name":"include_pii","type":"boolean","required":false,"description":"Include the contact details emlakjet publishes on the page: the office phone number, the named consultant, their WhatsApp mobile and the licence document number. Off by default — the agency NAME is always returned without it.","on_invalid":"ignore","default":false,"example":false}],"returns":"results[]{listing_id, url, title, trade_type, category, estate_type, price{amount, currency, previous_amount}, rooms, floor, location{summary, city, district, town, locality}, seller{id, name, type}, badges[], cover_image, first_published_at} + count + source_listing_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"19945815"}},{"name":"locations","description":"The location tree emlakjet searches by: all 81 Turkish provinces, the districts of one province, or the neighbourhoods (mahalle) and sub-localities of one district — each with the exact slug the `search` action expects and the numeric id emlakjet uses internally. Call it with no parameters for the provinces, with `city` for its districts, with `city` + `district` for its neighbourhoods.","required_params":[],"optional_params":["city","district"],"params":[{"name":"city","type":"string","required":false,"description":"A province slug, Turkish name or numeric id ('istanbul', 'İzmir', 34). With this set the action returns that province's districts.","on_invalid":"reject","example":"istanbul","aliases":["il","province","city_slug"]},{"name":"district","type":"string","required":false,"description":"A district slug, name or numeric id ('istanbul-kadikoy', 1622). Needs `city` unless a numeric district id is given. Returns that district's neighbourhoods.","on_invalid":"reject","example":"istanbul-kadikoy","aliases":["ilce","county","district_slug"]}],"returns":"results[]{id, name, slug, type, parent_id, children[]{id, name, slug, type}} + level + count + resolved{city, district}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"istanbul"}},{"name":"agencies","description":"The emlakjet estate-office and consultant directory — who is actually selling property in a given province, how much stock each one holds now and in the last three months, how long they have been on the platform, their experience in years and their median sale price. Pick `kind` to switch between offices (emlak ofisleri) and individual consultants (danışmanlar).","required_params":[],"optional_params":["kind","location","page","include_pii"],"params":[{"name":"kind","type":"enum","required":false,"description":"Whether to list estate offices or individual consultants.","on_invalid":"reject","allowed_values":[{"value":"offices","label":"Estate offices (emlak ofisleri)"},{"value":"agents","label":"Individual consultants (danışmanlar)"}],"default":"offices","example":"offices"},{"name":"location","type":"string","required":false,"description":"Restrict to one province — a slug or the Turkish name. Measured: Istanbul holds 1 948 of the 10 756 estate offices.","on_invalid":"reject","example":"istanbul","aliases":["city","il"]},{"name":"page","type":"integer","required":false,"description":"Directory page, 20 rows per page, at most 50 pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"include_pii","type":"boolean","required":false,"description":"Include the contact details emlakjet publishes on the page: the office phone number, the named consultant, their WhatsApp mobile and the licence document number. Off by default — the agency NAME is always returned without it.","on_invalid":"ignore","default":false,"example":false}],"returns":"results[]{id, name, slug, type, url, logo_url, city, district, listing_count, listing_count_last_3m, listing_count_last_1m, opportunity_count, membership_years, experience_years, languages[], median_sale_price, avg_marketing_days, office_name, full_name} + total + count + page + page_size + max_pages + page_clamped + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"kind":"offices","location":"istanbul"}}]},{"name":"empik","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Empik API scraper — Poland's largest books and media retailer plus its marketplace: search products, read the full product record (author, publisher, ISBN for books) and get EVERY merchant's offer for one product — price, condition, seller rating. Prices in PLN. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/empik/v1","spec_available":true,"actions":[{"name":"search","description":"Search empik.com by keyword and get the matching products: Empik product id, title, brand, image, the price actually charged, the list price and discount, the marketplace seller holding the buybox, category path, rating and delivery line. Filter by brand, seller, price band, condition, free delivery or (for books) author. Use the returned `product_id` with `product/offers` to get every seller's price for that product.","required_params":["query"],"optional_params":["page","sort","brand","seller_id","price_min","price_max","condition","free_delivery","author","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for on empik.com. Polish keywords match best; brand and model names ('iphone 16', 'lego speed champions') work directly. Empik matches LOOSELY — a search for 'iphone' returns 212 021 products because phone cases match too. Use `price_min` or `brand` to cut accessories out.","on_invalid":"reject","example":"wiedźmin","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-BASED. 60 products per page. Empik stops at page 80 (4 800 products) however large `total_results` is, and past that it silently re-serves page 1 — this endpoint refuses instead of handing you duplicates. `meta.pagination.last_page` is the real last page for your query.","on_invalid":"ignore","default":1,"minimum":1,"maximum":80},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Only orderings empik.com actually honours are accepted — an unknown value is rejected here rather than passed on, because the site silently ignores one it does not know.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Empik's own default ordering"},{"value":"popularity","label":"Most popular first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"discount_pct","label":"Biggest percentage discount first"},{"value":"discount_amount","label":"Biggest cash saving first"},{"value":"newest","label":"Most recently published first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Restrict to one brand, using Empik's own lower-case brand slug as it appears in its filters ('apple', 'spigen', 'lego'). Measured: 'iphone' 212 021 → 'iphone'+apple 12 267.","on_invalid":"ignore","example":"apple","aliases":["brand_facet"]},{"name":"seller_id","type":"string","required":false,"description":"Restrict to ONE marketplace seller, by the numeric Empik shop id that `product/offers` and `search` return as `seller.id` (0 = Empik itself). Measured: 'iphone' 212 021 → seller 3531 returns 40 products, all from that seller.","on_invalid":"ignore","example":"3531","aliases":["shop_id","merchant_id"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in PLN, inclusive.","on_invalid":"ignore","example":2000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in PLN, inclusive. Measured: 'iphone' 212 021 → price 2000-5000 leaves 293.","on_invalid":"ignore","example":5000,"minimum":0},{"name":"condition","type":"enum","required":false,"description":"Restrict by item condition. Empik's marketplace carries a real second-hand tier: 'iphone' 212 021 → used_good leaves 265.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Brand new"},{"value":"used_as_new","label":"Used, as new"},{"value":"used_good","label":"Used, good"},{"value":"used_acceptable","label":"Used, acceptable"},{"value":"damaged_packaging","label":"New, damaged packaging"}]},{"name":"free_delivery","type":"boolean","required":false,"description":"true keeps only offers Empik marks as free marketplace delivery. Measured: 'iphone' 212 021 → 31 008.","on_invalid":"ignore"},{"name":"author","type":"string","required":false,"description":"Books only: restrict to one author, using Empik's own 'Surname Firstname' spelling. Measured: 'wiedzmin' 1 803 → author='sapkowski andrzej' 524.","on_invalid":"ignore","example":"sapkowski andrzej"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{product_id, title, url, image, brand (null in categories where Empik files the creator instead — 1/71 on vinyl, 17/60 on books), price_pln (what you pay), list_price_pln (ALWAYS null on a search row — the grid publishes no list price and the tile's rounded percentage cannot rebuild one accurately; call product/detail for it), discount_pct (Empik's own tile figure, integer-rounded, and it under-reports — absent on 8 of 18 products product/detail shows as discounted), currency=PLN, seller{id, name, is_empik}, category, category_path[], delivery, rating, promoted}, count, promoted_count (sponsored tiles inside the grid — returned, flagged, and repeated on every page by the source), total_results (Empik's own printed match count), page, sort (meta.pagination carries last_page)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"wiedźmin"}},{"name":"product/detail","description":"The full Empik product record by `product_id` (or product URL): title, category breadcrumb, description, image gallery, rating, format/variant, the complete attribute table exactly as Empik groups it, and the creator block — author and publisher for books, performer and label for music, brand and producer for goods. For books it also returns ISBN-13 and EAN.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Empik product id — the code in the product URL (…/ostatnie-zyczenie…,p1102239921,ksiazka-p → p1102239921). A full product URL is also accepted. Empik uses three id shapes and all work: 'p1102239921', 'prod58904739' and a bare legacy number like '7291'. Every `search` row returns `product_id`.","on_invalid":"reject","example":"p1102239921","aliases":["id","pid","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, title, url, category, breadcrumb[], category_id, product_type, format, variant_name, release_date, rating, rating_count, image, images[], description, tags[], available_in_store, creators{brand, series, license, line, author[], publisher[], producer[], performer[], director[]}, isbn (books only), ean (books only), empik_index, pages, cover_type, language, original_language, edition_year, publication_date, specs[]{label, values[]}, price_pln, list_price_pln, currency=PLN, seller{…}, best_offer{…}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"p1102239921"}},{"name":"product/offers","description":"Every seller offer for one product — the price comparison itself. One row per merchant: seller name, Empik shop id, shop page, super-seller flag, seller rating and how many ratings it rests on, the price actually charged and the list price, whether the discount needs an Empik membership, the item condition (new, used as-new/good/acceptable, damaged packaging), declared dispatch window and the delivery line. Rows keep Empik's own ordering; `cheapest` is computed separately because that ordering is NOT purely by price.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Empik product id — the code in the product URL (…/ostatnie-zyczenie…,p1102239921,ksiazka-p → p1102239921). A full product URL is also accepted. Empik uses three id shapes and all work: 'p1102239921', 'prod58904739' and a bare legacy number like '7291'. Every `search` row returns `product_id`.","on_invalid":"reject","example":"p1102239921","aliases":["id","pid","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id} + offers[]{position, offer_id, seller{id, name, url, logo_url, super_seller, is_foreign, rating, rating_count, is_empik}, price_pln, list_price_pln, discount_pct (computed), discount_pct_source, discount_amount_pln, discount_type, membership_price, currency=PLN, unit_price_pln, min_price_pln, price_type, condition, condition_note, availability, availability_label, stock_level (null — Empik does not publish it logged-out), delivery, delivery_options[]} + count, seller_count, cheapest, most_expensive, cheapest_new, has_used, sort_info (Empik's own printed explanation of the ordering)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"p1102239921"}},{"name":"products/batch","description":"Up to 30 products in ONE request — id, title, url, category, rating, cover, creators and the current buybox offer (price, list price, seller) for each. This is the cheap way to refresh a watchlist: 30 products for the price of one call instead of 30 separate `product/detail` calls.","required_params":["product_ids"],"optional_params":["max_rotations"],"params":[{"name":"product_ids","type":"array","required":true,"description":"Up to 30 Empik product ids in one call. Above 30 the source returns only the first 30, so this endpoint rejects a longer list instead of silently dropping the rest.","on_invalid":"reject","example":["p1102239921","p1538551909"],"aliases":["ids"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{product_id, title, url, category, rating, rating_count, image, creators{brand, author[], publisher[], performer[]}, price_pln, list_price_pln, currency=PLN, seller{…}, best_offer{…}}, count, requested, missing[] (ids Empik returned nothing for)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"product_ids":["p1102239921","p1538551909"]}},{"name":"product/reviews","description":"Customer reviews for one product, 30 per page: author name, date, the 1-5 score, title and body, how many readers found it useful, whether Empik marks the purchase as verified. Also returns the full star histogram (how many votes at each score) and Empik's own AI summary of the reviews with its keyword list.","required_params":["product_id"],"optional_params":["page","sort","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Empik product id — the code in the product URL (…/ostatnie-zyczenie…,p1102239921,ksiazka-p → p1102239921). A full product URL is also accepted. Empik uses three id shapes and all work: 'p1102239921', 'prod58904739' and a bare legacy number like '7291'. Every `search` row returns `product_id`.","on_invalid":"reject","example":"p1102239921","aliases":["id","pid","url"]},{"name":"page","type":"integer","required":false,"description":"Review page, 1-BASED, 30 reviews per page. `total_reviews` and `pages` tell you how far you can go.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Review ordering. These are the six orderings empik.com itself publishes for its review list.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Empik's own 'most valuable' order"},{"value":"popular","label":"Most helpful first"},{"value":"highest_rate","label":"Highest rating first"},{"value":"lowest_rate","label":"Lowest rating first"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"}],"default":"default"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[]{review_id, author, created_at, score, title, content, useful_votes, useless_votes, verified_purchase, commercial, status}, count, total_reviews, pages, page, hidden_count, rating_histogram[]{score, votes}, total_votes, ai_summary{date, content, keywords[]} (null when Empik has not generated one)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"p1102239921"}},{"name":"product/variants","description":"The other editions of the same title — for a book: paperback, hardcover, ebook EPUB/MOBI, audiobook, foreign-language printing; for music: the other formats. Each variant returns its own resolvable Empik product id and URL, so you can feed it straight back into `product/offers`.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Empik product id — the code in the product URL (…/ostatnie-zyczenie…,p1102239921,ksiazka-p → p1102239921). A full product URL is also accepted. Empik uses three id shapes and all work: 'p1102239921', 'prod58904739' and a bare legacy number like '7291'. Every `search` row returns `product_id`.","on_invalid":"reject","example":"p1102239921","aliases":["id","pid","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"variants[]{product_id, name, url, price_pln (null — Empik leaves the price out of the variant list; call product/offers for it), release_date, sub_variants[]}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"p1102239921"}}]},{"name":"encar","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Encar API — South Korea's #1 used-car marketplace scraper: search live Encar listings by make, model, year, price, mileage, fuel, transmission and region, then pull full car detail (price in KRW, year, mileage, fuel, transmission, color, options, inspection & accident-record status, warranty, photos and dealer firm) and browse all Korean & imported makes with live counts. No API key, no login required.","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/encar/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Encar used-car listings by structured filters: make, model, trim, car_type (domestic/imported), fuel, transmission, region, price_min/max (in 만원 = 10,000 KRW), year_min/max and mileage_min/max. Sortable + paginated. Returns rich cards with price (native 만원 + KRW), year, mileage, fuel, transmission, region, trust/condition flags, thumbnail and photos.","required_params":[],"optional_params":["make","model","trim","car_type","fuel","transmission","region","price_min","price_max","year_min","year_max","mileage_min","mileage_max","sort","page","size"],"params":[{"name":"make","type":"string","required":false,"description":"Vehicle make: the `make_en` or `make` value from the `makes` action. English names (Hyundai, Kia, BMW, Mercedes-Benz, Toyota, MINI, Aston Martin…) are translated to Encar's Korean value; case, spaces and punctuation are ignored. Chevrolet and Renault cover both the Korean-built and the imported cars (narrow with car_type). The exact Korean name from a result also works.","on_invalid":"ignore","example":"Hyundai","aliases":["manufacturer","brand"]},{"name":"model","type":"string","required":false,"description":"Model name — use the EXACT model string returned by `search` (Korean, e.g. '더 뉴 아반떼'). Pair with `make`.","on_invalid":"ignore","example":"아반떼"},{"name":"trim","type":"string","required":false,"description":"Trim / badge — the exact value from a search result's `trim`.","on_invalid":"ignore","example":"시그니처","aliases":["badge","grade"]},{"name":"car_type","type":"enum","required":false,"description":"Limit to domestic Korean or imported cars. Omit for both.","on_invalid":"ignore","allowed_values":[{"value":"domestic","label":"Domestic Korean brands"},{"value":"imported","label":"Imported / foreign brands"}]},{"name":"fuel","type":"enum","required":false,"description":"Fuel / powertrain type.","on_invalid":"ignore","allowed_values":[{"value":"gasoline","label":"Gasoline"},{"value":"diesel","label":"Diesel"},{"value":"lpg","label":"LPG"},{"value":"hybrid","label":"Hybrid"},{"value":"electric","label":"Electric (EV)"},{"value":"hydrogen","label":"Hydrogen"},{"value":"gasoline_hybrid","label":"Gasoline + electric"},{"value":"cng","label":"CNG"}]},{"name":"transmission","type":"enum","required":false,"description":"Transmission type.","on_invalid":"ignore","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"}]},{"name":"region","type":"string","required":false,"description":"Dealer region (Korean province/city: 서울 Seoul, 경기 Gyeonggi, 부산 Busan, 인천 Incheon, 대구 Daegu…).","on_invalid":"ignore","example":"서울"},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in 만원 (10,000 KRW). 1000 = ₩10,000,000.","on_invalid":"ignore","example":1000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in 만원 (10,000 KRW). 4000 = ₩40,000,000.","on_invalid":"ignore","example":4000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Minimum model year (e.g. 2020). YYYYMM also accepted (202006).","on_invalid":"ignore","minimum":1980,"maximum":2030},{"name":"year_max","type":"integer","required":false,"description":"Maximum model year (e.g. 2024). YYYYMM also accepted (202412).","on_invalid":"ignore","minimum":1980,"maximum":2030},{"name":"mileage_min","type":"integer","required":false,"description":"Minimum odometer reading in kilometres.","on_invalid":"ignore","minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Maximum odometer reading in kilometres.","on_invalid":"ignore","example":50000,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Recently listed first"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"mileage_asc","label":"Mileage: low to high"},{"value":"mileage_desc","label":"Mileage: high to low"},{"value":"year_desc","label":"Year: new to old"},{"value":"year_asc","label":"Year: old to new"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Page number (1-based).","on_invalid":"ignore","default":1,"minimum":1},{"name":"size","type":"integer","required":false,"description":"Results per page (1–50). Defaults to 20.","on_invalid":"ignore","default":20,"minimum":1,"maximum":50}],"returns":"cars[]{id, make, model, trim, year, year_month, form_year, mileage_km, price_manwon, price_krw, fuel_type, transmission, ev_type, region, sell_type, trust_flags[], condition_flags[], thumbnail, photos[], url} + meta{total_results, pagination}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"Hyundai","size":20}},{"name":"detail","description":"Full detail for one car by `id`: price (만원 + KRW), make/model/grade (Korean + English), year, mileage, displacement, transmission, fuel, color, seats, body type, options, warranty, inspection & accident-record availability, seizing/pledge counts, VIN (when public), all photos, view count, free-text description and the selling dealer's firm. Dealer personal data (name/phone/id/address) is redacted unless include_pii is set.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Encar car id — the number in a dc_cardetailview carid= URL or a search result's `id`.","on_invalid":"reject","example":"41866115","aliases":["car_id","carid","vehicle_id"]}],"returns":"car{id, vehicle_no, vin, make, make_en, model, model_group, grade, grade_en, year, year_month, domestic, import_type, mileage_km, displacement_cc, transmission, fuel_type, color, seat_count, body_type, price_manwon, price_krw, status, trust_flags[], home_service, warranty_body_months, accident_record_available, accident_resume_available, inspection_available, seizing_count, pledge_count, photos[], option_codes[], view_count, first_advertised_at, description, dealer{firm_name, firm_code, user_type}, url}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"41866115"}},{"name":"makes","description":"Every make Encar lists, domestic and imported, with its live listing count: Encar's own manufacturer list (the same counts its site shows), not a fixed set. Pass a returned `make_en` (or `make`) to `search`'s `make` filter.","required_params":[],"optional_params":["car_type"],"params":[{"name":"car_type","type":"enum","required":false,"description":"Limit to domestic Korean or imported cars. Omit for both.","on_invalid":"ignore","allowed_values":[{"value":"domestic","label":"Domestic Korean brands"},{"value":"imported","label":"Imported / foreign brands"}]}],"returns":"makes[]{make, make_en, car_type, count}, missing_makes[] (makes of a car type Encar did not answer for in time)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"enjoei","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Enjoei API — Brazil's biggest second-hand fashion & lifestyle marketplace","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/enjoei/v1","spec_available":true,"actions":[{"name":"search","description":"Search Enjoei's live second-hand catalogue by keyword, brand, department, size, price, condition, discount or seller location. Returns the asking price and the seller's struck-through reference price on every row.","required_params":[],"optional_params":["query","department","subcategory","brand","price_min","price_max","condition","size_clothes","size_shoes","size_waist","sort","shipping_range","city","state","published_within","discount_min","discount_max","store_kind","per_page","cursor","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search, in Portuguese as the site indexes it (`tênis nike`, `vestido zara`). Optional when you are browsing a department, category or brand instead.","on_invalid":"reject","example":"nike","aliases":["q","term","keyword"]},{"name":"department","type":"string","required":false,"description":"Department slug, e.g. `mocas`, `rapazes`, `kids`, `casa`, `infoeletro`. Take the exact slug from a search row's `department`.","on_invalid":"reject","example":"rapazes"},{"name":"subcategory","type":"array","required":false,"description":"One or more sub-category slugs as they appear in a row's `subcategory` (`rapazes-roupas-bermudas`). Comma-separated is accepted.","on_invalid":"reject","example":"rapazes-roupas-bermudas"},{"name":"brand","type":"array","required":false,"description":"One or more brand slugs, exactly as `filters` returns them (`nike`, `zara`, `off-white`).","on_invalid":"reject","example":"nike"},{"name":"price_min","type":"number","required":false,"description":"Lowest listing price, in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest listing price, in BRL.","on_invalid":"reject","example":300,"minimum":0},{"name":"condition","type":"enum","required":false,"description":"Restrict to second-hand or to unused stock.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used — worn/second-hand"},{"value":"new","label":"new — never used"}],"example":"used"},{"name":"size_clothes","type":"array","required":false,"description":"Clothing sizes (`p`, `m`, `g`, `gg`) — shirts, tops, dresses.","on_invalid":"reject","example":"m"},{"name":"size_shoes","type":"array","required":false,"description":"Shoe sizes, Brazilian numbering (`38`, `40`).","on_invalid":"reject","example":"40"},{"name":"size_waist","type":"array","required":false,"description":"Waist sizes for trousers, shorts and skirts (`38`, `40`, `42`).","on_invalid":"reject","example":"40"},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the four orders Enjoei itself applies are offered — every other value the API accepts is ignored upstream and would silently not sort.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Enjoei's own relevance (default)"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"discount_desc","label":"biggest discount first"}],"default":"relevance","example":"price_asc"},{"name":"shipping_range","type":"enum","required":false,"description":"Limit to sellers near a place. Anything other than `same_country` needs `city` and/or `state`.","on_invalid":"reject","allowed_values":[{"value":"same_city","label":"same city"},{"value":"same_state","label":"same state"},{"value":"near_regions","label":"neighbouring regions"},{"value":"same_country","label":"anywhere in Brazil — no restriction, identical to leaving this out"}],"example":"same_state"},{"name":"city","type":"string","required":false,"description":"City the `shipping_range` is measured from.","on_invalid":"reject","example":"São Paulo"},{"name":"state","type":"string","required":false,"description":"Two-letter Brazilian state the `shipping_range` is measured from.","on_invalid":"reject","example":"SP"},{"name":"published_within","type":"enum","required":false,"description":"Only listings published in this window.","on_invalid":"reject","allowed_values":[{"value":"24h","label":"last 24 hours"},{"value":"7d","label":"last 7 days"},{"value":"14d","label":"last 14 days"},{"value":"30d","label":"last 30 days"}],"example":"7d"},{"name":"discount_min","type":"integer","required":false,"description":"Only listings discounted by at least this percentage.","on_invalid":"reject","example":30,"minimum":0,"maximum":100},{"name":"discount_max","type":"integer","required":false,"description":"Only listings discounted by at most this percentage.","on_invalid":"reject","example":90,"minimum":0,"maximum":100},{"name":"store_kind","type":"enum","required":false,"description":"Restrict to a kind of shop. These are the only two kinds Enjoei tags, and both are small slices of the catalogue (measured on `nike`: pro 190, celebrity 33).","on_invalid":"reject","allowed_values":[{"value":"pro","label":"enjoei pro — professional/high-volume sellers"},{"value":"celebrity","label":"famosas — celebrity shops"}],"example":"pro"},{"name":"per_page","type":"integer","required":false,"description":"Rows per page. Enjoei clamps this at 50 — a larger number is silently reduced, so the engine caps it too.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous page. Enjoei pages by cursor, not by page number.","on_invalid":"reject","aliases":["after"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry a failed upstream attempt before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"results[] with listing_id, slug, url, title, price, original_price, discount_percent, currency, condition, size, sizes[], variants[], brand, department, category, subcategory, image, free_shipping, shipping_type, bundle_allowed, promo_tags[], seller{username,display_name,url,avatar}; plus count, total_results, total_results_capped, next_cursor, has_more, filters{}, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike","per_page":30}},{"name":"product/detail","description":"One listing in full: the LIVE price (read from Enjoei's own pricing route, not the search index), description, every photo, weight, size, brand, category path, the offer range the seller will consider, and whether it is still on sale.","required_params":["listing"],"optional_params":["max_rotations"],"params":[{"name":"listing","type":"string","required":true,"description":"Listing id, slug or full product URL — `151426712`, `shorts-nike-nba-chicago-bulls-151426712` or the whole `/p/...` link.","on_invalid":"reject","example":"151426712","aliases":["id","listing_id","product","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry a failed upstream attempt before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, url, title, description, price, original_price, discount_percent, currency, status, is_sold, condition, size, variants[], brand, brand_verified, category_path[], google_product_category, weight_kg, images[], image_count, offer{accepted,min_price,max_price}, payment{}, seller_id, similar_query}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"listing":"151426712"}},{"name":"product/similar","description":"Listings comparable to a given one — same sub-category, same brand and a price band around it, which is the recipe Enjoei's own page uses. Useful for pricing a second-hand item against live competition.","required_params":["listing"],"optional_params":["per_page","sort","condition","max_rotations"],"params":[{"name":"listing","type":"string","required":true,"description":"Listing id, slug or full product URL — `151426712`, `shorts-nike-nba-chicago-bulls-151426712` or the whole `/p/...` link.","on_invalid":"reject","example":"151426712","aliases":["id","listing_id","product","url"]},{"name":"per_page","type":"integer","required":false,"description":"Rows per page. Enjoei clamps this at 50 — a larger number is silently reduced, so the engine caps it too.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the four orders Enjoei itself applies are offered — every other value the API accepts is ignored upstream and would silently not sort.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Enjoei's own relevance (default)"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"discount_desc","label":"biggest discount first"}],"default":"relevance","example":"price_asc"},{"name":"condition","type":"enum","required":false,"description":"Restrict to second-hand or to unused stock.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used — worn/second-hand"},{"value":"new","label":"new — never used"}],"example":"used"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry a failed upstream attempt before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"results[] with listing_id, slug, url, title, price, original_price, discount_percent, currency, condition, size, sizes[], variants[], brand, department, category, subcategory, image, free_shipping, shipping_type, bundle_allowed, promo_tags[], seller{username,display_name,url,avatar}; plus count, total_results, source_listing_id, filters{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"listing":"151426712"}},{"name":"seller/listings","description":"Everything a shop currently has for sale, with the same row shape as search and the same filters.","required_params":[],"optional_params":["seller","seller_id","query","brand","subcategory","price_min","price_max","condition","sort","per_page","cursor","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Shop handle (`@diego-a02c80` or `diego-a02c80`) or the shop URL.","on_invalid":"reject","example":"diego-a02c80","aliases":["shop","store","username","nickname"]},{"name":"seller_id","type":"string","required":false,"description":"Numeric shop id, as `seller_id` on a listing detail. Faster than the handle because it needs no lookup.","on_invalid":"reject","example":"42068502"},{"name":"query","type":"string","required":false,"description":"Free-text search, in Portuguese as the site indexes it (`tênis nike`, `vestido zara`). Optional when you are browsing a department, category or brand instead.","on_invalid":"reject","example":"nike","aliases":["q","term","keyword"]},{"name":"brand","type":"array","required":false,"description":"One or more brand slugs, exactly as `filters` returns them (`nike`, `zara`, `off-white`).","on_invalid":"reject","example":"nike"},{"name":"subcategory","type":"array","required":false,"description":"One or more sub-category slugs as they appear in a row's `subcategory` (`rapazes-roupas-bermudas`). Comma-separated is accepted.","on_invalid":"reject","example":"rapazes-roupas-bermudas"},{"name":"price_min","type":"number","required":false,"description":"Lowest listing price, in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest listing price, in BRL.","on_invalid":"reject","example":300,"minimum":0},{"name":"condition","type":"enum","required":false,"description":"Restrict to second-hand or to unused stock.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used — worn/second-hand"},{"value":"new","label":"new — never used"}],"example":"used"},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the four orders Enjoei itself applies are offered — every other value the API accepts is ignored upstream and would silently not sort.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Enjoei's own relevance (default)"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"discount_desc","label":"biggest discount first"}],"default":"relevance","example":"price_asc"},{"name":"per_page","type":"integer","required":false,"description":"Rows per page. Enjoei clamps this at 50 — a larger number is silently reduced, so the engine caps it too.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous page. Enjoei pages by cursor, not by page number.","on_invalid":"reject","aliases":["after"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry a failed upstream attempt before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"results[] with listing_id, slug, url, title, price, original_price, discount_percent, currency, condition, size, sizes[], variants[], brand, department, category, subcategory, image, free_shipping, shipping_type, bundle_allowed, promo_tags[], seller{username,display_name,url,avatar}; plus count, total_results, next_cursor, has_more, seller{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"seller":"diego-a02c80"}},{"name":"seller/sold","description":"A shop's completed sales: what the item was listed at AND what it actually sold for. Enjoei publishes both, which makes this the price-comparison surface for second-hand goods in Brazil.","required_params":["seller"],"optional_params":["page","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Shop handle (`@diego-a02c80` or `diego-a02c80`) or the shop URL.","on_invalid":"reject","example":"diego-a02c80","aliases":["shop","store","username","nickname"]},{"name":"page","type":"integer","required":false,"description":"1-based page of the sold shelf (40 rows per page).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry a failed upstream attempt before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"results[] with listing_id, slug, url, title, price, sold_price, discount_percent, currency, is_sold, image; plus count, total_results, page, page_size, has_more, seller","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller":"diego-a02c80"}},{"name":"seller/profile","description":"A shop's public page: handle, display name, city/state, bio, avatar, the date it joined, and its public counters — items for sale, items sold, likes received, followers and following.","required_params":["seller"],"optional_params":["max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Shop handle (`@diego-a02c80` or `diego-a02c80`) or the shop URL.","on_invalid":"reject","example":"diego-a02c80","aliases":["shop","store","username","nickname"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry a failed upstream attempt before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"seller{seller_id, username, display_name, url, location, badge, description, avatar, cover_image, member_since, is_business, on_vacation, listings_count, sold_count, liked_count, followers, following}. `location` is 'City, UF' and is null on a shop whose display line carries a merchandising badge instead (8 of 25 measured); that badge is returned as `badge`.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller":"diego-a02c80"}},{"name":"filters","description":"The brand and sub-category facets Enjoei itself offers for a query, each with its live listing count — the slugs you feed back into `search`.","required_params":[],"optional_params":["query","department","subcategory","brand","price_min","price_max","condition","size_clothes","size_shoes","size_waist","sort","shipping_range","city","state","published_within","discount_min","discount_max","store_kind","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search, in Portuguese as the site indexes it (`tênis nike`, `vestido zara`). Optional when you are browsing a department, category or brand instead.","on_invalid":"reject","example":"nike","aliases":["q","term","keyword"]},{"name":"department","type":"string","required":false,"description":"Department slug, e.g. `mocas`, `rapazes`, `kids`, `casa`, `infoeletro`. Take the exact slug from a search row's `department`.","on_invalid":"reject","example":"rapazes"},{"name":"subcategory","type":"array","required":false,"description":"One or more sub-category slugs as they appear in a row's `subcategory` (`rapazes-roupas-bermudas`). Comma-separated is accepted.","on_invalid":"reject","example":"rapazes-roupas-bermudas"},{"name":"brand","type":"array","required":false,"description":"One or more brand slugs, exactly as `filters` returns them (`nike`, `zara`, `off-white`).","on_invalid":"reject","example":"nike"},{"name":"price_min","type":"number","required":false,"description":"Lowest listing price, in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest listing price, in BRL.","on_invalid":"reject","example":300,"minimum":0},{"name":"condition","type":"enum","required":false,"description":"Restrict to second-hand or to unused stock.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used — worn/second-hand"},{"value":"new","label":"new — never used"}],"example":"used"},{"name":"size_clothes","type":"array","required":false,"description":"Clothing sizes (`p`, `m`, `g`, `gg`) — shirts, tops, dresses.","on_invalid":"reject","example":"m"},{"name":"size_shoes","type":"array","required":false,"description":"Shoe sizes, Brazilian numbering (`38`, `40`).","on_invalid":"reject","example":"40"},{"name":"size_waist","type":"array","required":false,"description":"Waist sizes for trousers, shorts and skirts (`38`, `40`, `42`).","on_invalid":"reject","example":"40"},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the four orders Enjoei itself applies are offered — every other value the API accepts is ignored upstream and would silently not sort.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Enjoei's own relevance (default)"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"discount_desc","label":"biggest discount first"}],"default":"relevance","example":"price_asc"},{"name":"shipping_range","type":"enum","required":false,"description":"Limit to sellers near a place. Anything other than `same_country` needs `city` and/or `state`.","on_invalid":"reject","allowed_values":[{"value":"same_city","label":"same city"},{"value":"same_state","label":"same state"},{"value":"near_regions","label":"neighbouring regions"},{"value":"same_country","label":"anywhere in Brazil — no restriction, identical to leaving this out"}],"example":"same_state"},{"name":"city","type":"string","required":false,"description":"City the `shipping_range` is measured from.","on_invalid":"reject","example":"São Paulo"},{"name":"state","type":"string","required":false,"description":"Two-letter Brazilian state the `shipping_range` is measured from.","on_invalid":"reject","example":"SP"},{"name":"published_within","type":"enum","required":false,"description":"Only listings published in this window.","on_invalid":"reject","allowed_values":[{"value":"24h","label":"last 24 hours"},{"value":"7d","label":"last 7 days"},{"value":"14d","label":"last 14 days"},{"value":"30d","label":"last 30 days"}],"example":"7d"},{"name":"discount_min","type":"integer","required":false,"description":"Only listings discounted by at least this percentage.","on_invalid":"reject","example":30,"minimum":0,"maximum":100},{"name":"discount_max","type":"integer","required":false,"description":"Only listings discounted by at most this percentage.","on_invalid":"reject","example":90,"minimum":0,"maximum":100},{"name":"store_kind","type":"enum","required":false,"description":"Restrict to a kind of shop. These are the only two kinds Enjoei tags, and both are small slices of the catalogue (measured on `nike`: pro 190, celebrity 33).","on_invalid":"reject","allowed_values":[{"value":"pro","label":"enjoei pro — professional/high-volume sellers"},{"value":"celebrity","label":"famosas — celebrity shops"}],"example":"pro"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry a failed upstream attempt before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"brands[]{name,slug,count}, subcategories[]{name,slug,count}, store_kinds[]{name,slug,count}, query. No result count: Enjoei zeroes `total` on any query that asks for facets, so ask `search` for the count.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"suggest","description":"Enjoei's own search typeahead: completed search terms and matching shops.","required_params":["term"],"optional_params":["max_rotations"],"params":[{"name":"term","type":"string","required":true,"description":"Partial search text to complete, as typed into Enjoei's search box.","on_invalid":"reject","example":"nik","aliases":["query","q","prefix"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry a failed upstream attempt before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"terms[]{text}, shops[]{text,username,url}, term","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"term":"nik"}}]},{"name":"enrich-app","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"App & SaaS Reputation API — resolve an app by name, store URL or domain into a fused reputation profile (store ratings, Trustpilot, TrustRadius, GitHub, Product Hunt, live status and news)","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/enrich-app/v1","spec_available":true,"actions":[{"name":"app_reputation","description":"name|store-URL|domain → entity-resolved app/SaaS reputation: store ratings + Trustpilot + GitHub + Product Hunt (basic) — see app_reputation_rich for the full fan-out (review samples + TrustRadius + status + news)","required_params":["query"],"optional_params":["country","stores","include","exclude","trustradius_slug"],"params":[{"name":"query","type":"string","required":true,"description":"App name, store URL/id, OR SaaS domain. PREFER a store URL or app id (apps.apple.com/.../id1232780281 or play.google.com/store/apps/details?id=notion.id) — it resolves the EXACT app deterministically. A SaaS domain (notion.so) is next-best (anchors Trustpilot/TrustRadius/GitHub). A bare name ('Notion') triggers a search + fuzzy match with a match_confidence score and surfaces same-name rivals in entity.candidates.","on_invalid":"reject","example":"https://apps.apple.com/us/app/notion/id1232780281","aliases":["q","app","name","url","store_url","domain"]},{"name":"country","type":"string","required":false,"description":"Store region (ISO-2) for Apple/Play ratings & reviews. Defaults to us. Use tr/jp/de/… for regional store data.","on_invalid":"reject","default":"us","example":"us"},{"name":"stores","type":"array","required":false,"description":"Which app stores to query. Default: both.","on_invalid":"reject","allowed_values":[{"value":"apple","label":"Apple App Store"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"include","type":"array","required":false,"description":"Run ONLY these field groups (cost control). `entity` is always computed. Default: all groups of this action.","on_invalid":"reject","allowed_values":[{"value":"stores","label":"Apple App Store + Google Play ratings/metadata"},{"value":"reviews_sample","label":"A small sample of recent store reviews (rich)"},{"value":"trust","label":"Trustpilot match (+ TrustRadius B2B-software reviews)"},{"value":"developer","label":"GitHub org / developer-repository signal"},{"value":"status","label":"Vendor live status / incident signal (rich)"},{"value":"news","label":"Recent news mentions of the app/vendor (rich)"},{"value":"launch","label":"Product Hunt launch signal"}],"example":["stores","trust"]},{"name":"exclude","type":"array","required":false,"description":"Drop these field groups from this action's default set.","on_invalid":"reject","allowed_values":[{"value":"stores","label":"Apple App Store + Google Play ratings/metadata"},{"value":"reviews_sample","label":"A small sample of recent store reviews (rich)"},{"value":"trust","label":"Trustpilot match (+ TrustRadius B2B-software reviews)"},{"value":"developer","label":"GitHub org / developer-repository signal"},{"value":"status","label":"Vendor live status / incident signal (rich)"},{"value":"news","label":"Recent news mentions of the app/vendor (rich)"},{"value":"launch","label":"Product Hunt launch signal"}],"example":["news"]},{"name":"trustradius_slug","type":"string","required":false,"description":"Optional explicit TrustRadius product slug. When omitted it is derived from the brand; provide it when the brand stem differs from the TrustRadius URL slug.","on_invalid":"reject","example":"notion"}],"returns":"entity{query,input_kind,resolved_name,match,match_confidence,domain,store_refs[],developer,candidates[] (same-name rivals)}, stores{apple{app_id,name,developer,rating,rating_count,...},google_play{}}, trust{trustpilot{found,name,domain,trust_score,stars,reviews_count,categories}}, developer{github_org|top_repos}, launch{product_hunt}, summary{reputation_index,signals[]}; provenance{per-group status + engine + coverage_note (B2C store-rich/Trustpilot-thin vs B2B SaaS the reverse; G2/Capterra explicitly out of scope)}; meta.extra.subcalls[]","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":5},"example_params":{"query":"https://apps.apple.com/us/app/notion/id1232780281","include":["stores"]}},{"name":"app_reputation_rich","description":"everything in app_reputation + a recent store-review sample + TrustRadius B2B reviews + vendor live status/incidents + recent news mentions","required_params":["query"],"optional_params":["country","stores","include","exclude","trustradius_slug"],"params":[{"name":"query","type":"string","required":true,"description":"App name, store URL/id, OR SaaS domain. PREFER a store URL or app id (apps.apple.com/.../id1232780281 or play.google.com/store/apps/details?id=notion.id) — it resolves the EXACT app deterministically. A SaaS domain (notion.so) is next-best (anchors Trustpilot/TrustRadius/GitHub). A bare name ('Notion') triggers a search + fuzzy match with a match_confidence score and surfaces same-name rivals in entity.candidates.","on_invalid":"reject","example":"https://apps.apple.com/us/app/notion/id1232780281","aliases":["q","app","name","url","store_url","domain"]},{"name":"country","type":"string","required":false,"description":"Store region (ISO-2) for Apple/Play ratings & reviews. Defaults to us. Use tr/jp/de/… for regional store data.","on_invalid":"reject","default":"us","example":"us"},{"name":"stores","type":"array","required":false,"description":"Which app stores to query. Default: both.","on_invalid":"reject","allowed_values":[{"value":"apple","label":"Apple App Store"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"include","type":"array","required":false,"description":"Run ONLY these field groups (cost control). `entity` is always computed. Default: all groups of this action.","on_invalid":"reject","allowed_values":[{"value":"stores","label":"Apple App Store + Google Play ratings/metadata"},{"value":"reviews_sample","label":"A small sample of recent store reviews (rich)"},{"value":"trust","label":"Trustpilot match (+ TrustRadius B2B-software reviews)"},{"value":"developer","label":"GitHub org / developer-repository signal"},{"value":"status","label":"Vendor live status / incident signal (rich)"},{"value":"news","label":"Recent news mentions of the app/vendor (rich)"},{"value":"launch","label":"Product Hunt launch signal"}],"example":["stores","trust"]},{"name":"exclude","type":"array","required":false,"description":"Drop these field groups from this action's default set.","on_invalid":"reject","allowed_values":[{"value":"stores","label":"Apple App Store + Google Play ratings/metadata"},{"value":"reviews_sample","label":"A small sample of recent store reviews (rich)"},{"value":"trust","label":"Trustpilot match (+ TrustRadius B2B-software reviews)"},{"value":"developer","label":"GitHub org / developer-repository signal"},{"value":"status","label":"Vendor live status / incident signal (rich)"},{"value":"news","label":"Recent news mentions of the app/vendor (rich)"},{"value":"launch","label":"Product Hunt launch signal"}],"example":["news"]},{"name":"trustradius_slug","type":"string","required":false,"description":"Optional explicit TrustRadius product slug. When omitted it is derived from the brand; provide it when the brand stem differs from the TrustRadius URL slug.","on_invalid":"reject","example":"notion"}],"returns":"app_reputation payload + reviews_sample{apple[],google_play[]}, trust.trustradius{found,name,rating_avg,review_count,sample[]}, status{vendor,indicator,is_operational,active_incidents}, news{articles[],count}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":10},"example_params":{"query":"https://apps.apple.com/us/app/notion/id1232780281"}},{"name":"batch","description":"reputation for up to 10 apps/domains in one call (basic groups, cache-first, per-item ok/error)","required_params":["queries"],"optional_params":["country","stores","include","exclude"],"params":[{"name":"queries","type":"array","required":true,"description":"Up to 10 app names / store URLs / domains (array or comma-separated). Each is enriched like app_reputation (basic groups, cache-first), with per-item ok/error.","on_invalid":"reject","example":["Notion","Spotify","https://notion.so"]},{"name":"country","type":"string","required":false,"description":"Store region (ISO-2) for Apple/Play ratings & reviews. Defaults to us. Use tr/jp/de/… for regional store data.","on_invalid":"reject","default":"us","example":"us"},{"name":"stores","type":"array","required":false,"description":"Which app stores to query. Default: both.","on_invalid":"reject","allowed_values":[{"value":"apple","label":"Apple App Store"},{"value":"google_play","label":"Google Play"}],"example":["apple","google_play"]},{"name":"include","type":"array","required":false,"description":"Run ONLY these field groups (cost control). `entity` is always computed. Default: all groups of this action.","on_invalid":"reject","allowed_values":[{"value":"stores","label":"Apple App Store + Google Play ratings/metadata"},{"value":"reviews_sample","label":"A small sample of recent store reviews (rich)"},{"value":"trust","label":"Trustpilot match (+ TrustRadius B2B-software reviews)"},{"value":"developer","label":"GitHub org / developer-repository signal"},{"value":"status","label":"Vendor live status / incident signal (rich)"},{"value":"news","label":"Recent news mentions of the app/vendor (rich)"},{"value":"launch","label":"Product Hunt launch signal"}],"example":["stores","trust"]},{"name":"exclude","type":"array","required":false,"description":"Drop these field groups from this action's default set.","on_invalid":"reject","allowed_values":[{"value":"stores","label":"Apple App Store + Google Play ratings/metadata"},{"value":"reviews_sample","label":"A small sample of recent store reviews (rich)"},{"value":"trust","label":"Trustpilot match (+ TrustRadius B2B-software reviews)"},{"value":"developer","label":"GitHub org / developer-repository signal"},{"value":"status","label":"Vendor live status / incident signal (rich)"},{"value":"news","label":"Recent news mentions of the app/vendor (rich)"},{"value":"launch","label":"Product Hunt launch signal"}],"example":["news"]}],"returns":"results[] (one app_reputation payload or {ok:false,error} per input), count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":4},"example_params":{"queries":["Notion","Spotify","https://notion.so"]}}]},{"name":"enrich-company","category":{"id":"utilities","title":"Utilities & AI"},"title":"Company Intelligence API — turn a domain into an enriched company profile: firmographics, reviews, local presence, brand trends, funding signals and tech footprint","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/enrich-company/v1","spec_available":true,"actions":[{"name":"company_domain","description":"domain → entity-resolved company profile (core groups) with per-field provenance","required_params":["domain"],"optional_params":["include","exclude"],"params":[{"name":"domain","type":"string","required":true,"description":"Company website domain to enrich (bare host like stripe.com; a full URL or leading www. is accepted and normalized).","on_invalid":"reject","example":"stripe.com"},{"name":"include","type":"array","required":false,"description":"Run ONLY these field groups (cost control). Default: all groups of this action. `entity` + `company` are always computed from whatever ran.","on_invalid":"reject","allowed_values":[{"value":"domain","label":"WHOIS/DNS/SSL/subdomains + domain age"},{"value":"tech","label":"Technology fingerprint (CMS/CDN/server)"},{"value":"presence","label":"Search presence, og profile, social links, redirect"},{"value":"news","label":"Recent news mentions"},{"value":"developer","label":"GitHub org/repos (+ packages in rich)"},{"value":"hiring","label":"ATS job board + open roles (+ employer firmographics in rich)"},{"value":"reputation","label":"Trustpilot match (+ reviews & Google Maps in rich)"}],"example":["domain","presence"]},{"name":"exclude","type":"array","required":false,"description":"Drop these field groups from this action's default set.","on_invalid":"reject","allowed_values":[{"value":"domain","label":"WHOIS/DNS/SSL/subdomains + domain age"},{"value":"tech","label":"Technology fingerprint (CMS/CDN/server)"},{"value":"presence","label":"Search presence, og profile, social links, redirect"},{"value":"news","label":"Recent news mentions"},{"value":"developer","label":"GitHub org/repos (+ packages in rich)"},{"value":"hiring","label":"ATS job board + open roles (+ employer firmographics in rich)"},{"value":"reputation","label":"Trustpilot match (+ reviews & Google Maps in rich)"}],"example":["apps"]}],"returns":"entity{input_domain,final_domain,match: exact-domain|redirected|brand-name|fuzzy, confidence, canonical_name, evidence[]}, company{name,name_latin,legal_name,description,logo_hint,phone,site_title — each {value,source,confidence,last_checked}}, domain{whois/dns/ssl/subdomains summary}, tech{technologies[],categories{cms/ecommerce/analytics/framework/cdn_hosting/payments/marketing_automation/chat_support/crm/email_provider}}, presence{search,og,social_links,redirect,website_alive,site_signals{has_contact_page,has_about_page,has_phone,has_quote_cta,has_service_keywords}}, news{articles[]}, developer{github_org,top_repos}, hiring{ats,jobs_count,by_department,sample_jobs}, reputation{trustpilot}; provenance{per-group status+engine+missing_reason: not_found|blocked|timeout|budget|unsupported|error|skipped}; meta.extra.subcalls[] (contributing sources, customer-safe)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":6},"example_params":{"domain":"github.com","include":["domain","presence"]}},{"name":"company_domain_rich","description":"everything in company_domain + firmographics (LinkedIn/Indeed/Glassdoor), review depth, local/maps match, brand trends, app/package presence, registry funding signals (Wikidata), traffic rank","required_params":["domain"],"optional_params":["include","exclude"],"params":[{"name":"domain","type":"string","required":true,"description":"Company website domain to enrich (bare host like stripe.com; a full URL or leading www. is accepted and normalized).","on_invalid":"reject","example":"stripe.com"},{"name":"include","type":"array","required":false,"description":"Run ONLY these field groups (cost control). Default: all groups of this action. `entity` + `company` are always computed from whatever ran.","on_invalid":"reject","allowed_values":[{"value":"domain","label":"WHOIS/DNS/SSL/subdomains + domain age"},{"value":"tech","label":"Technology fingerprint (CMS/CDN/server)"},{"value":"presence","label":"Search presence, og profile, social links, redirect"},{"value":"news","label":"Recent news mentions"},{"value":"developer","label":"GitHub org/repos (+ packages in rich)"},{"value":"hiring","label":"ATS job board + open roles (+ employer firmographics in rich)"},{"value":"reputation","label":"Trustpilot match (+ reviews & Google Maps in rich)"},{"value":"trends","label":"Google Trends brand interest (rich)"},{"value":"apps","label":"App Store / Google Play presence (rich)"},{"value":"funding","label":"Registry firmographics (Wikidata, notable cos) + funding press (rich)"},{"value":"traffic","label":"Domain popularity rank (Tranco; rank, not visits) (rich)"}],"example":["domain","presence"]},{"name":"exclude","type":"array","required":false,"description":"Drop these field groups from this action's default set.","on_invalid":"reject","allowed_values":[{"value":"domain","label":"WHOIS/DNS/SSL/subdomains + domain age"},{"value":"tech","label":"Technology fingerprint (CMS/CDN/server)"},{"value":"presence","label":"Search presence, og profile, social links, redirect"},{"value":"news","label":"Recent news mentions"},{"value":"developer","label":"GitHub org/repos (+ packages in rich)"},{"value":"hiring","label":"ATS job board + open roles (+ employer firmographics in rich)"},{"value":"reputation","label":"Trustpilot match (+ reviews & Google Maps in rich)"},{"value":"trends","label":"Google Trends brand interest (rich)"},{"value":"apps","label":"App Store / Google Play presence (rich)"},{"value":"funding","label":"Registry firmographics (Wikidata, notable cos) + funding press (rich)"},{"value":"traffic","label":"Domain popularity rank (Tranco; rank, not visits) (rich)"}],"example":["apps"]}],"returns":"company_domain payload + company{industry,founded,employees,headquarters{raw,city,region,country,country_code},revenue_range,specialties,parent,ticker}, hiring.employer{linkedin,indeed,glassdoor}, reputation{trustpilot deep,maps}, trends{}, apps{}, funding{registry(Wikidata),recent_funding_news[],total_raised:null-if-unknown}, traffic{tranco rank+tier — rank not visits}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":14},"example_params":{"domain":"github.com"}},{"name":"batch","description":"enrich up to 10 domains in one call (core groups, cache-first, per-domain ok/error)","required_params":["domains"],"optional_params":["include","exclude"],"params":[{"name":"domains","type":"array","required":true,"description":"Up to 10 domains (array or comma-separated). Each is enriched like company_domain; per-domain ok/error, cache-first.","on_invalid":"reject","example":["stripe.com","shopify.com"]},{"name":"include","type":"array","required":false,"description":"Run ONLY these field groups (cost control). Default: all groups of this action. `entity` + `company` are always computed from whatever ran.","on_invalid":"reject","allowed_values":[{"value":"domain","label":"WHOIS/DNS/SSL/subdomains + domain age"},{"value":"tech","label":"Technology fingerprint (CMS/CDN/server)"},{"value":"presence","label":"Search presence, og profile, social links, redirect"},{"value":"news","label":"Recent news mentions"},{"value":"developer","label":"GitHub org/repos (+ packages in rich)"},{"value":"hiring","label":"ATS job board + open roles (+ employer firmographics in rich)"},{"value":"reputation","label":"Trustpilot match (+ reviews & Google Maps in rich)"}],"example":["domain","presence"]},{"name":"exclude","type":"array","required":false,"description":"Drop these field groups from this action's default set.","on_invalid":"reject","allowed_values":[{"value":"domain","label":"WHOIS/DNS/SSL/subdomains + domain age"},{"value":"tech","label":"Technology fingerprint (CMS/CDN/server)"},{"value":"presence","label":"Search presence, og profile, social links, redirect"},{"value":"news","label":"Recent news mentions"},{"value":"developer","label":"GitHub org/repos (+ packages in rich)"},{"value":"hiring","label":"ATS job board + open roles (+ employer firmographics in rich)"},{"value":"reputation","label":"Trustpilot match (+ reviews & Google Maps in rich)"}],"example":["apps"]}],"returns":"results[] (one company_domain payload or {ok:false,error} per input), count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":24},"example_params":{"domains":["stripe.com","shopify.com"]}}]},{"name":"enrich-hiring","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Hiring Signals API — turn a company domain into a hiring snapshot: ATS provider, open-role counts, departments, seniority, remote ratio and tech-stack signals","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/enrich-hiring/v1","spec_available":true,"actions":[{"name":"hiring_signal","description":"domain → company hiring snapshot: ATS provider + direct open-roles count, per-source counts (deduped), departments/seniority/remote-ratio/tech-signals, entity-confirm, honest snapshot intensity","required_params":[],"optional_params":["domain","company_name","ats_slug","ats_provider","countries"],"params":[{"name":"domain","type":"string","required":false,"description":"Company website domain (bare host like stripe.com; a full URL or leading www. is accepted and normalized). The ATS board slug is derived from the domain stem. Provide `domain` OR `company_name` (domain gives the strongest entity anchor).","on_invalid":"reject","example":"stripe.com","aliases":["company_domain"]},{"name":"company_name","type":"string","required":false,"description":"Company name, used when no domain is available (entity-match is weaker without a domain). Also seeds the ATS slug guess.","on_invalid":"reject","example":"Stripe","aliases":["company","name"]},{"name":"ats_slug","type":"string","required":false,"description":"Advanced: force the ATS board token/subdomain (skips slug auto-detect). Use when the board slug differs from the domain stem (e.g. a parent-company board).","on_invalid":"reject","example":"stripe"},{"name":"ats_provider","type":"enum","required":false,"description":"Advanced: force the ATS provider (skips the parallel probe). One of greenhouse / lever / ashby / workable.","on_invalid":"ignore","allowed_values":[{"value":"greenhouse","label":"Greenhouse"},{"value":"lever","label":"Lever"},{"value":"ashby","label":"Ashby"},{"value":"workable","label":"Workable"}],"example":"greenhouse"},{"name":"countries","type":"array","required":false,"description":"Optional country hints for the keyword job sources (best-effort location filter; ATS count is global).","on_invalid":"reject","example":["US","GB"]}],"returns":"entity{input, resolved_name, confidence, match: ats-board|name-only, evidence[]}, ats{provider, slug, direct_jobs_count, matched}, jobs{count_by_source{ats,linkedin,indeed}, dedup_count, deduplicated_total, sample[]{title,location,department,seniority,remote,source,url,posted}}, departments[]{name,count,pct}, seniority_mix[]{level,count,pct}, remote_ratio, tech_signals[]{name,count}, current_hiring_intensity{level,basis,open_jobs}, coverage[]{source,status,count,note}, freshness; meta.extra.subcalls[] (contributing sources, customer-safe)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":6},"example_params":{"domain":"stripe.com"}},{"name":"hiring_signal_rich","description":"everything in hiring_signal + employer firmographics (linkedin company / glassdoor employer: industry, employee_count, HQ, founded, rating) which anchor a headcount-relative intensity (open-roles-to-headcount ratio)","required_params":[],"optional_params":["domain","company_name","ats_slug","ats_provider","countries"],"params":[{"name":"domain","type":"string","required":false,"description":"Company website domain (bare host like stripe.com; a full URL or leading www. is accepted and normalized). The ATS board slug is derived from the domain stem. Provide `domain` OR `company_name` (domain gives the strongest entity anchor).","on_invalid":"reject","example":"stripe.com","aliases":["company_domain"]},{"name":"company_name","type":"string","required":false,"description":"Company name, used when no domain is available (entity-match is weaker without a domain). Also seeds the ATS slug guess.","on_invalid":"reject","example":"Stripe","aliases":["company","name"]},{"name":"ats_slug","type":"string","required":false,"description":"Advanced: force the ATS board token/subdomain (skips slug auto-detect). Use when the board slug differs from the domain stem (e.g. a parent-company board).","on_invalid":"reject","example":"stripe"},{"name":"ats_provider","type":"enum","required":false,"description":"Advanced: force the ATS provider (skips the parallel probe). One of greenhouse / lever / ashby / workable.","on_invalid":"ignore","allowed_values":[{"value":"greenhouse","label":"Greenhouse"},{"value":"lever","label":"Lever"},{"value":"ashby","label":"Ashby"},{"value":"workable","label":"Workable"}],"example":"greenhouse"},{"name":"countries","type":"array","required":false,"description":"Optional country hints for the keyword job sources (best-effort location filter; ATS count is global).","on_invalid":"reject","example":["US","GB"]}],"returns":"hiring_signal payload + employer{linkedin{industry,employee_count,company_size,headquarters,founded,specialties}, glassdoor{industry,size,overall_rating,review_count}}; current_hiring_intensity gains open_to_headcount_ratio when a headcount is known","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":10},"example_params":{"domain":"stripe.com"}},{"name":"batch","description":"hiring_signal for up to 10 domains in one call (cache-first, per-item ok/error)","required_params":["domains"],"optional_params":[],"params":[{"name":"domains","type":"array","required":true,"description":"Up to 10 domains (array or comma-separated). Each gets a hiring_signal snapshot; per-item ok/error, cache-first.","on_invalid":"reject","example":["stripe.com","shopify.com"]}],"returns":"results[] (one hiring_signal payload or {ok:false,error} per input), count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":5},"example_params":{"domains":["stripe.com","shopify.com"]}}]},{"name":"enrich-local","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Local Business Intelligence API — turn a business name and location into a place profile with multi-source reviews, website health and legitimacy signals","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/enrich-local/v1","spec_available":true,"actions":[{"name":"business_lookup","description":"name+location ‖ place_query → matched place (Google Maps) + multi-source review presence + website health + indexed presence + negative-news + legitimacy signal list, with an honest coverage_note + per-group provenance.","required_params":[],"optional_params":["name","location","place_query","lat","lng","country","yelp_enc_biz_id","include","exclude"],"params":[{"name":"name","type":"string","required":false,"description":"Business name to look up. Pair with `location` (or lat/lng) for accurate chain-branch matching. Provide this+location OR `place_query`.","on_invalid":"reject","example":"Katz's Delicatessen"},{"name":"location","type":"string","required":false,"description":"City / neighborhood / address the business is in. Disambiguates same-named branches (used with `name`).","on_invalid":"reject","example":"Manhattan, New York"},{"name":"place_query","type":"string","required":false,"description":"Free-text place query (name + place hint in one string). Alternative to name+location.","on_invalid":"reject","example":"Blue Bottle Coffee Williamsburg"},{"name":"lat","type":"number","required":false,"description":"Latitude to geo-bias the match around — strongest branch disambiguator (pair with lng).","on_invalid":"ignore","example":40.7223,"minimum":-90,"maximum":90},{"name":"lng","type":"number","required":false,"description":"Longitude to geo-bias the match around (pair with lat).","on_invalid":"ignore","example":-73.9874,"minimum":-180,"maximum":180},{"name":"country","type":"string","required":false,"description":"ISO-3166 country hint (us, gb, tr…) — improves region-source routing (Yelp=US/CA, Tripadvisor=travel) and the coverage_note.","on_invalid":"ignore","example":"US"},{"name":"yelp_enc_biz_id","type":"string","required":false,"description":"Optional Yelp business identifier (the encrypted ID, not the URL slug). This is a shortcut: the engine already resolves a business name to its Yelp ID automatically — pass this only when you already have it and want to skip the lookup step.","on_invalid":"ignore","example":"gZz9A8k8ORC_xl0aHxtY4w"},{"name":"include","type":"array","required":false,"description":"Run ONLY these enrichment groups (cost control). Default: all. `place` (Google Maps) is always resolved — it is the anchor.","on_invalid":"reject","allowed_values":[{"value":"reviews","label":"Multi-source review presence (Yelp/Tripadvisor/Trustpilot) + sample"},{"value":"website","label":"Website/domain health (domain-intel: age, SSL, DNS)"},{"value":"presence","label":"Indexed web-presence signal (google-search)"},{"value":"news","label":"Negative-news signal scan (news-intel)"},{"value":"legitimacy","label":"Legitimacy signal list (built from the above — R17 signal-only)"}],"example":["reviews","website"]},{"name":"exclude","type":"array","required":false,"description":"Drop these enrichment groups from the default set.","on_invalid":"reject","allowed_values":[{"value":"reviews","label":"Multi-source review presence (Yelp/Tripadvisor/Trustpilot) + sample"},{"value":"website","label":"Website/domain health (domain-intel: age, SSL, DNS)"},{"value":"presence","label":"Indexed web-presence signal (google-search)"},{"value":"news","label":"Negative-news signal scan (news-intel)"},{"value":"legitimacy","label":"Legitimacy signal list (built from the above — R17 signal-only)"}],"example":["news"]}],"returns":"place{name,address,phone,phone_display,website,domain,category,categories,rating,review_count,latitude,longitude,maps_url,hours_today}, match{match_confidence,name_similarity,distance_km,geo_validated,alternatives_considered,runner_up}, review_presence{google,yelp,tripadvisor,trustpilot — each {found, rating, review_count, sample[]}}, website{domain,domain_age_days,ssl_active,registrar,dns_summary,website_alive}, presence{indexed,top_results[]}, negative_news{found,articles[]}, legitimacy{signals[],unknowns[],coverage_note,disclaimer}, freshness; provenance{per-group status+engine+missing_reason}; meta.extra.subcalls[] (contributing sources)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":8},"example_params":{"name":"Katz's Delicatessen","location":"Manhattan","lat":40.7223,"lng":-73.9874,"include":["website"]}},{"name":"batch","description":"enrich up to 10 businesses in one call (lead-list use-case; per-item ok/error, cache-first).","required_params":["businesses"],"optional_params":["include","exclude"],"params":[{"name":"businesses","type":"array","required":true,"description":"Up to 10 businesses (each {name,location} / {place_query} / {name,lat,lng}). Lead-list enrichment; per-item ok/error, cache-first.","on_invalid":"reject","example":[{"name":"Katz's Delicatessen","location":"Manhattan"},{"place_query":"Noma Copenhagen"}]},{"name":"include","type":"array","required":false,"description":"Run ONLY these enrichment groups (cost control). Default: all. `place` (Google Maps) is always resolved — it is the anchor.","on_invalid":"reject","allowed_values":[{"value":"reviews","label":"Multi-source review presence (Yelp/Tripadvisor/Trustpilot) + sample"},{"value":"website","label":"Website/domain health (domain-intel: age, SSL, DNS)"},{"value":"presence","label":"Indexed web-presence signal (google-search)"},{"value":"news","label":"Negative-news signal scan (news-intel)"},{"value":"legitimacy","label":"Legitimacy signal list (built from the above — R17 signal-only)"}],"example":["reviews","website"]},{"name":"exclude","type":"array","required":false,"description":"Drop these enrichment groups from the default set.","on_invalid":"reject","allowed_values":[{"value":"reviews","label":"Multi-source review presence (Yelp/Tripadvisor/Trustpilot) + sample"},{"value":"website","label":"Website/domain health (domain-intel: age, SSL, DNS)"},{"value":"presence","label":"Indexed web-presence signal (google-search)"},{"value":"news","label":"Negative-news signal scan (news-intel)"},{"value":"legitimacy","label":"Legitimacy signal list (built from the above — R17 signal-only)"}],"example":["news"]}],"returns":"results[] (one business_lookup payload or {ok:false,error} per input), count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":8},"example_params":{"businesses":[{"name":"Katz's Delicatessen","location":"Manhattan"},{"place_query":"Noma Copenhagen"}]}}]},{"name":"enrich-package","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Package & Dependency Trust API — score an open-source package or repository (npm, PyPI, Go, Cargo, RubyGems): downloads, maintainers, license, repo health and vulnerabilities, plus lockfile scanning","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/enrich-package/v1","spec_available":true,"actions":[{"name":"package_trust","description":"ecosystem+package → registry metadata + downloads + maintainers + license + resolved repository health + vulnerabilities + partial trust score (with per-sub-score inputs)","required_params":["ecosystem","package"],"optional_params":["version","mode"],"params":[{"name":"ecosystem","type":"enum","required":true,"description":"Package ecosystem. npm/pypi get full registry metadata + downloads; maven/rubygems/crates/go get vulnerabilities + declared-repository health (the wider OSV ecosystem set).","on_invalid":"reject","allowed_values":[{"value":"npm","label":"npm (Node.js) — full metadata + downloads + vuln"},{"value":"pypi","label":"PyPI (Python) — full metadata + downloads + vuln"},{"value":"maven","label":"Maven (Java) — vuln + declared-repo health (registry metadata via repo)"},{"value":"rubygems","label":"RubyGems (Ruby) — vuln + declared-repo health"},{"value":"crates","label":"crates.io (Rust) — vuln + declared-repo health"},{"value":"go","label":"Go modules — vuln + declared-repo health"}],"example":"npm","aliases":["registry"]},{"name":"package","type":"string","required":true,"description":"Package name as published in its registry (npm 'lodash', PyPI 'requests', Maven 'group:artifact', Go import path). Scoped npm names like '@scope/pkg' are supported.","on_invalid":"reject","example":"lodash","aliases":["name","pkg"]},{"name":"version","type":"string","required":false,"description":"Exact installed version to assess for vulnerabilities. Omit to assess the latest published version + ALL known vulns of the package.","on_invalid":"ignore","example":"4.17.15"},{"name":"mode","type":"enum","required":false,"description":"basic = registry metadata + license + repo health + score; rich (default) adds the full vulnerability scan, release cadence, contributor bus-factor and a stackoverflow community signal.","on_invalid":"ignore","allowed_values":[{"value":"basic","label":"registry + license + repo + score (no vuln deep / SO)"},{"value":"rich","label":"everything: vulns + contributors + releases + stackoverflow signal"}],"default":"rich","example":"rich"}],"returns":"package{name,ecosystem,version,description,homepage}, metadata{license{value,spdx,tier,risk_note}, maintainers[], keywords, version_count, latest}, downloads{monthly|recent}, repo{found,host,owner,repo,repo_url,match{confidence,class,source_field,name_similarity,evidence[],reason}, health{stars,forks,open_issues,archived,pushed_at,last_release,releases_12mo,contributors,bus_factor}}, vulnerabilities{count,highest_severity,by_severity,items[]}, dependencies{direct_count,sample}, community{stackoverflow}, score{popularity,maintenance,security,license,dependency_risk — each {score|'unknown',inputs,method,flags?}, overall{trust_score,grade,scored_components,unknown_components}}; provenance{per-group status+engine+missing_reason}; meta.extra.subcalls[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"ecosystem":"npm","package":"lodash","version":"4.17.15","mode":"rich"}},{"name":"repo_trust","description":"owner/repo → repository health + release cadence + bus-factor signal + repo-anchored trust sub-scores (popularity/maintenance), independent of any registry","required_params":["owner","repo"],"optional_params":[],"params":[{"name":"owner","type":"string","required":true,"description":"GitHub repository owner / org (e.g. 'facebook').","on_invalid":"reject","example":"lodash"},{"name":"repo","type":"string","required":true,"description":"GitHub repository name (e.g. 'react').","on_invalid":"reject","example":"lodash"}],"returns":"repo{owner,repo,repo_url,health{stars,forks,watchers,open_issues,archived,license,pushed_at,created_at,last_release,releases_12mo,contributors,bus_factor,top_languages}}, score{popularity,maintenance,license,overall}; provenance; meta.extra.subcalls[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"owner":"facebook","repo":"react"}},{"name":"lockfile_scan","description":"manifest/lockfile text → dependency list + each dep's vuln/risk summary via one batched vuln scan (BOUNDED: direct + lockfile-pinned deps, max 100; truncated:true when capped). package.json/lock, requirements.txt, go.sum/mod, Cargo.lock, Gemfile.lock","required_params":["content"],"optional_params":["filename","ecosystem"],"params":[{"name":"content","type":"string","required":true,"description":"Raw manifest/lockfile text: package.json, package-lock.json, requirements.txt, go.sum/go.mod, Cargo.lock, or Gemfile.lock. Direct (+ lockfile-pinned) deps are scanned; bounded to 100 deps.","on_invalid":"reject","example":"lodash==4.17.15\nrequests>=2.0\nflask==2.0.0"},{"name":"filename","type":"string","required":false,"description":"Optional filename hint to disambiguate the manifest format (e.g. 'package-lock.json', 'go.sum'). Auto-detected if omitted.","on_invalid":"ignore","example":"requirements.txt"},{"name":"ecosystem","type":"enum","required":false,"description":"Optional ecosystem hint when the manifest format is ambiguous.","on_invalid":"ignore","allowed_values":[{"value":"npm","label":"npm (Node.js) — full metadata + downloads + vuln"},{"value":"pypi","label":"PyPI (Python) — full metadata + downloads + vuln"},{"value":"maven","label":"Maven (Java) — vuln + declared-repo health (registry metadata via repo)"},{"value":"rubygems","label":"RubyGems (Ruby) — vuln + declared-repo health"},{"value":"crates","label":"crates.io (Rust) — vuln + declared-repo health"},{"value":"go","label":"Go modules — vuln + declared-repo health"}],"example":"npm"}],"returns":"manifest{ecosystem,format,dependency_count,truncated,parsed_count}, summary{vulnerable_deps,total_vulns,highest_severity,by_severity,clean_deps}, dependencies[] (ecosystem,name,version,vuln_count,highest_severity,vulns[]); meta.extra.subcalls[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":5},"example_params":{"content":"lodash\nflask==2.0.0\nrequests==2.20.0","filename":"requirements.txt"}},{"name":"batch","description":"trust-score up to 10 packages in one call (basic depth, per-item ok/error)","required_params":["items"],"optional_params":[],"params":[{"name":"items","type":"array","required":true,"description":"Up to 10 {ecosystem, package, version?} objects. Each is trust-scored like package_trust (basic depth); per-item ok/error.","on_invalid":"reject","example":[{"ecosystem":"npm","package":"lodash","version":"4.17.15"},{"ecosystem":"pypi","package":"requests"}]}],"returns":"results[] (one package_trust basic payload or {ok:false,error} per item), count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"items":[{"ecosystem":"npm","package":"lodash","version":"4.17.15"},{"ecosystem":"pypi","package":"requests"}]}}]},{"name":"enrich-property","category":{"id":"real-estate","title":"Real Estate"},"title":"Property Snapshot API — turn an address or listing URL into one normalized property record: status, price, sold history, key facts and valuation across the US, UK and more","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/enrich-property/v1","spec_available":true,"actions":[{"name":"snapshot","description":"address OR listing_url → one normalized property snapshot: status, price, sold-history, core facts, valuation (where available), per-field provenance + a match block (how the address was resolved + match_confidence).","required_params":[],"optional_params":["address","listing_url","country","mode"],"params":[{"name":"address","type":"string","required":false,"description":"Free-text property address (street + city + state/postcode). Provide this OR listing_url. For the most reliable match include the unit/apt and the postcode. Supported countries: US, UK, Japan.","on_invalid":"reject","example":"1444 Fairmont St NW #4, Washington, DC 20009","aliases":["query","q"]},{"name":"listing_url","type":"string","required":false,"description":"A copied listing URL — routed to the right source automatically (zillow.com, redfin.com, realtor.com, rightmove.co.uk, suumo.jp). Provide this OR address.","on_invalid":"reject","example":"https://www.zillow.com/homedetails/.../117892026_zpid/","aliases":["url"]},{"name":"country","type":"enum","required":false,"description":"Optional ISO country hint to skip auto-detection (US/GB/JP). Recommended when an address is ambiguous (e.g. a bare ZIP/outcode).","on_invalid":"ignore","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"JP","label":"Japan"}],"example":"US"},{"name":"mode","type":"enum","required":false,"description":"Depth of the snapshot. rich adds area market_context; cross_validated (US) reconciles facts across all 3 US sources.","on_invalid":"ignore","allowed_values":[{"value":"standard","label":"Snapshot: status + price + facts + history"},{"value":"rich","label":"+ local market context (medians/DOM) for the area"},{"value":"cross_validated","label":"US only: query all of zillow+redfin+realtor and reconcile price/facts across sources (most expensive)"}],"default":"standard","example":"standard"}],"returns":"property{address_normalized,country,source_engine,source_id,listing_url}, match{mode: url|address-search, confidence, reasons[], candidates_considered, unit_disambiguated}, status (active|for_rent|sold|off_market|unknown), price{list:{value,currency,source}, rent, sold_history[]{price,date,source}, price_per_area}, valuation{estimate,source} (null for UK — no AVM), facts{beds,baths,area{value,unit},year_built,property_type,lot_area — each {value,source,confidence}}, market_context? (rich), photos[] (refs), cross_validation? (cross_validated mode), coverage{supported,note}, provenance{per-source status+engine+missing_reason}; meta.extra.subcalls[] (contributing sources, customer-safe)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":5},"example_params":{"listing_url":"https://www.zillow.com/homedetails/x/117892026_zpid/"}},{"name":"resolve","description":"address → ranked candidate listings[] (id + source + match_confidence) so the customer picks the exact property (apartment-unit / stale-listing disambiguation). The false-match-reducing flow — call this when a snapshot returns low confidence.","required_params":["address"],"optional_params":["country","limit"],"params":[{"name":"address","type":"string","required":false,"description":"Free-text property address (street + city + state/postcode). Provide this OR listing_url. For the most reliable match include the unit/apt and the postcode. Supported countries: US, UK, Japan.","on_invalid":"reject","example":"1444 Fairmont St NW #4, Washington, DC 20009","aliases":["query","q"]},{"name":"country","type":"enum","required":false,"description":"Optional ISO country hint to skip auto-detection (US/GB/JP). Recommended when an address is ambiguous (e.g. a bare ZIP/outcode).","on_invalid":"ignore","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"JP","label":"Japan"}],"example":"US"},{"name":"limit","type":"integer","required":false,"description":"Max candidate listings to return (resolve action).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":25}],"returns":"query, country, candidates[]{source_engine, source_id, listing_url, address_line, match_confidence, match_reasons[], list_price, beds, baths, status, latitude, longitude}, count, best{...}, coverage{...}, provenance{...}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"address":"137 Mellison Road, Tooting, London, SW17"}},{"name":"batch","description":"snapshot up to 10 addresses/listing-URLs in one call (standard mode, cache-first, per-item ok/error).","required_params":["items"],"optional_params":["country"],"params":[{"name":"items","type":"array","required":true,"description":"Up to 10 addresses and/or listing URLs (array). Each is snapshotted independently; per-item ok/error.","on_invalid":"reject","example":["1600 Amphitheatre Pkwy, Mountain View, CA","https://www.rightmove.co.uk/properties/148711631"],"aliases":["addresses","queries"]},{"name":"country","type":"enum","required":false,"description":"Optional ISO country hint to skip auto-detection (US/GB/JP). Recommended when an address is ambiguous (e.g. a bare ZIP/outcode).","on_invalid":"ignore","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"JP","label":"Japan"}],"example":"US"}],"returns":"results[] (one snapshot payload or {ok:false,error} per input), count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":5},"example_params":{"items":["1600 Amphitheatre Pkwy, Mountain View, CA","https://www.rightmove.co.uk/properties/148711631"]}},{"name":"coverage","description":"Static capability map: which countries/sources are supported, per-country source set, and the documented gaps (UK has no AVM; JP only 4 prefectures). No sub-calls.","required_params":[],"optional_params":[],"params":[],"returns":"countries{US,GB,JP}{sources[], valuation, notes}, url_routing{domain→engine}, unsupported_policy","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"enrich-recall","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Product Safety & Recall Match API — match a product by barcode or title+brand against EU Safety Gate (RAPEX) recalls, with confidence scoring","version":"2.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/enrich-recall/v1","spec_available":true,"actions":[{"name":"product_match","description":"Resolve a product (GTIN ‖ title+brand ‖ listing_url) and match it against EU Safety Gate (RAPEX) recalls with transparent confidence. recalls[] = high-confidence (brand independently matched); possible[] = lower-confidence candidates.","required_params":[],"optional_params":["gtin","title","brand","category","listing_url","max_results"],"params":[{"name":"gtin","type":"string","required":false,"description":"Product barcode (GTIN-8/12/13/14, UPC, EAN or ISBN). The engine resolves it to {title, brand, category} via the barcode engine, then matches recalls. Provide this OR (title + brand) OR listing_url.","on_invalid":"reject","example":"0860007279478","aliases":["barcode","upc","ean","isbn"]},{"name":"title","type":"string","required":false,"description":"Product title/name. Use with `brand` when you have no barcode. Ignored if `gtin` resolves a product.","on_invalid":"reject","example":"Sichuan Chili Crisp"},{"name":"brand","type":"string","required":false,"description":"Product brand / manufacturer. STRONGLY recommended with `title` — brand is the independent false-match guard (a title match with a different brand is never asserted).","on_invalid":"reject","example":"Fly By Jing"},{"name":"category","type":"string","required":false,"description":"Optional product category hint (food / drug / device / toy / apparel …) — improves category-fit scoring. Auto-derived from the barcode when available.","on_invalid":"reject","example":"food"},{"name":"listing_url","type":"string","required":false,"description":"A marketplace product URL (amazon/ebay/…). MINIMUM support: the host is recorded and you must still pass title (+brand) for matching. Full URL→product resolution is the enrich-url engine's job.","on_invalid":"reject","example":"https://www.amazon.com/dp/B0..."},{"name":"max_results","type":"integer","required":false,"description":"Max recalls[] + max possible[] returned (each list capped at this).","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":50}],"returns":"identity{resolved_title,brand,category,gtin,source,resolved:bool}, recalls[]{match_confidence,matched_on[],components{brand,title,category,exact_id},agency,recall_id,classification,severity_score,recalling_firm,product,hazard,remedy,status,date,url}, possible[] (same shape, lower confidence), counts{recalls,possible,candidates_scored}, sources_searched[], coverage_gaps[], no_match_note","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"gtin":"0860007279478"}},{"name":"batch","description":"Scan up to 25 catalog products in one call (seller pre-listing audit). Each item is product_match'd; per-item ok/error + a roll-up summary.","required_params":["items"],"optional_params":["max_results"],"params":[{"name":"items","type":"array","required":true,"description":"Up to 25 products (seller-catalog scan). Each item = a {gtin} OR {title, brand[, category]} object (or a bare barcode string). Per-item ok/error; one bad item never sinks the batch.","on_invalid":"reject","example":[{"gtin":"0860007279478"},{"title":"Magnetic Toy Balls","brand":"ACME"}]},{"name":"max_results","type":"integer","required":false,"description":"Max recalls[] + max possible[] returned (each list capped at this).","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":50}],"returns":"results[] (one product_match payload per item, with input echoed), count, ok_count, flagged_count (items with >=1 recalls[] hit), no_match_note","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"items":[{"gtin":"0860007279478"},{"title":"Magnetic Toy Balls","brand":"ACME"}]}}]},{"name":"enrich-store","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Online Store Intelligence API — turn a store domain into a profile: e-commerce platform (Shopify, WooCommerce, Magento and more), catalog sample, tech stack and reputation","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/enrich-store/v1","spec_available":true,"actions":[{"name":"store_lookup","description":"store domain → platform verdict + store metadata + tech-stack + catalog sample (price/discount/stock signals) + reputation (mode-scaled depth)","required_params":["store"],"optional_params":["mode","max_items","include_marketplace"],"params":[{"name":"store","type":"string","required":true,"description":"Store domain or URL (e.g. allbirds.com or https://shop.example.com). A leading www. / scheme / path is accepted and normalized.","on_invalid":"reject","example":"allbirds.com"},{"name":"mode","type":"enum","required":false,"description":"Depth of the lookup. Default basic. catalog scales credits with max_items; rich adds reputation/SERP depth.","on_invalid":"ignore","allowed_values":[{"value":"basic","label":"Platform + store metadata + tech + a first-page catalog sample + reputation lite (cheapest)."},{"value":"catalog","label":"Basic + a budgeted multi-page catalog harvest (max_items-capped) for price/discount/stock distribution over a larger sample."},{"value":"rich","label":"Basic + deep reputation (Trustpilot reviews + Google Maps) + SERP presence + optional marketplace presence."}],"default":"basic","example":"basic"},{"name":"max_items","type":"integer","required":false,"description":"catalog mode only: walk store pages until this many products are sampled (hard-capped at 1000; for a FULL product harvest use the shopify engine directly — this is enrichment, not bulk export).","on_invalid":"ignore","default":250,"example":250,"minimum":1,"maximum":1000},{"name":"include_marketplace","type":"boolean","required":false,"description":"rich mode only: also probe Amazon/Etsy presence for the brand (OPTIONAL — false-match risk; every hit carries a confidence score, none is asserted as definitive).","on_invalid":"ignore","default":false,"example":false}],"returns":"platform{name,confidence,ecommerce_confirmed,supported,partial,evidence,technologies[]}, store_info{name,domain,currency,description,country,myshopify_domain,...}, catalog{catalog_sample{size,products[],price_range{min,max,median,avg,currency},discount_ratio,avg_discount_percent,in_stock_ratio,stock_signals,top_vendors[],top_product_types[]},catalog_estimate{total_products_estimate,estimate_source,collections_count}} — catalog_sample (fetched+analysed) is NET-separate from catalog_estimate (size hint); NO revenue/sales estimation, tech{technologies[],cdn,server}, reputation{trustpilot{found,trust_score,stars,reviews_count,categories,sample_reviews[]},maps{found,rating,review_count,address,...}}, presence{serp[],social_links,policies}, marketplace{amazon,etsy — optional+confidence}; provenance{per-group status+engine+missing_reason: not_found|blocked|timeout|budget|unsupported|error|skipped}; meta.extra.subcalls[] (contributing sources)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":8},"example_params":{"store":"allbirds.com"}},{"name":"platform_detect","description":"store domain → ecommerce platform verdict (shopify|woocommerce|magento|bigcommerce|prestashop|custom_or_unknown) from the store's own public JSON capability test + technographic fingerprint — fast, no catalog fetch","required_params":["store"],"optional_params":[],"params":[{"name":"store","type":"string","required":true,"description":"Store domain or URL (e.g. allbirds.com or https://shop.example.com). A leading www. / scheme / path is accepted and normalized.","on_invalid":"reject","example":"allbirds.com"}],"returns":"platform{name,confidence,ecommerce_confirmed,supported,partial,evidence,technologies[],note}, store_info{name,domain} (when shopify), provenance{platform}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"store":"allbirds.com"}},{"name":"batch","description":"look up to 5 stores in one call (basic mode, cache-first, per-store ok/error)","required_params":["stores"],"optional_params":[],"params":[{"name":"stores","type":"array","required":true,"description":"Up to 5 store domains (array or comma-separated). Each is looked up in basic mode, cache-first, per-store ok/error.","on_invalid":"reject","example":["allbirds.com","gymshark.com"]}],"returns":"results[] (one store_lookup-basic payload or {ok:false,error} per input), count, ok_count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":20},"example_params":{"stores":["allbirds.com","gymshark.com"]}}]},{"name":"enrich-trust","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Business Trust API — public trust and reputation signals for any domain or company","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/enrich-trust/v1","spec_available":true,"actions":[{"name":"business_trust","description":"domain‖company_name → entity-resolved PUBLIC trust signals: positive_signals[], risk_signals[], unknowns[] + a respectful heuristic recommendation. NOT KYB/AML.","required_params":[],"optional_params":["domain","company_name","country","business_type","depth"],"params":[{"name":"domain","type":"string","required":false,"description":"Business website domain to assess (bare host like stripe.com; a full URL or leading www. is accepted and normalized). Provide `domain` OR `company_name` — domain gives the strongest signals.","on_invalid":"reject","example":"stripe.com","aliases":["website","url"]},{"name":"company_name","type":"string","required":false,"description":"Business name to assess when you have no domain. Weaker than `domain` (no domain-lifecycle signals); pair with `country` for accurate region-routing and entity confirmation.","on_invalid":"reject","example":"Trendyol","aliases":["company","name"]},{"name":"country","type":"string","required":false,"description":"ISO-3166 alpha-2 country hint (e.g. TR, BR, KR, US). Drives region-routing for reputation sources and suppresses false risks (an absent US-only source is not a risk abroad). Inferred from the ccTLD when omitted.","on_invalid":"reject","example":"TR"},{"name":"business_type","type":"enum","required":false,"description":"Optional hint that tunes which signals matter and prevents false risks (e.g. b2b → no public reviews is expected, never penalized).","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto-detect from signals (default)"},{"value":"local","label":"Local/physical business — weight maps/reviews higher"},{"value":"ecommerce","label":"Online store — check Shopify/store signals"},{"value":"saas","label":"SaaS/app — check app-store presence"},{"value":"brand","label":"Consumer brand — check search-trend interest"},{"value":"b2b","label":"B2B/enterprise — reviews scarce is NORMAL, not a risk"}],"default":"auto","example":"ecommerce"},{"name":"depth","type":"enum","required":false,"description":"basic = domain/presence/reputation/news core; rich adds region-routed reputation (Yelp/TripAdvisor/ReclameAqui/Naver), store/app presence, brand trends and review depth.","on_invalid":"reject","allowed_values":[{"value":"basic","label":"Core signals (~7 cr)"},{"value":"rich","label":"Core + regional reputation, store/app, brand trends, review depth (~14 cr)"}],"default":"basic","example":"basic"}],"returns":"entity (input, kind: domain|name, match type, confidence, canonical_name, country, evidence[]), positive_signals[] (code, label, evidence, source), risk_signals[] (code, label, evidence, source), unknowns[] (code, label, reason, source — includes a sanctions: not_checked notice), reputation (trustpilot score/reviews, Google Maps rating/reviews, regional sources), domain_signals (age_days, parked, impersonation risk, ssl, dns), recommendation (proceed | review | high_risk | insufficient_data), score_method, disclaimer; meta.subcalls[] listing each contributing source","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":7},"example_params":{"domain":"stripe.com","depth":"basic"}},{"name":"batch","description":"assess up to 10 domains in one call (core signals, cache-first, per-item ok/error)","required_params":["domains"],"optional_params":["country","business_type"],"params":[{"name":"domains","type":"array","required":true,"description":"Up to 10 domains (array or comma-separated). Each is assessed like `business_trust`; per-item ok/error, cache-first.","on_invalid":"reject","example":["stripe.com","shopify.com"]},{"name":"country","type":"string","required":false,"description":"ISO-3166 alpha-2 country hint (e.g. TR, BR, KR, US). Drives region-routing for reputation sources and suppresses false risks (an absent US-only source is not a risk abroad). Inferred from the ccTLD when omitted.","on_invalid":"reject","example":"TR"},{"name":"business_type","type":"enum","required":false,"description":"Optional hint that tunes which signals matter and prevents false risks (e.g. b2b → no public reviews is expected, never penalized).","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto-detect from signals (default)"},{"value":"local","label":"Local/physical business — weight maps/reviews higher"},{"value":"ecommerce","label":"Online store — check Shopify/store signals"},{"value":"saas","label":"SaaS/app — check app-store presence"},{"value":"brand","label":"Consumer brand — check search-trend interest"},{"value":"b2b","label":"B2B/enterprise — reviews scarce is NORMAL, not a risk"}],"default":"auto","example":"ecommerce"}],"returns":"results[] (one business_trust payload or {ok:false,error} per input), count, ok_count, disclaimer","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":24},"example_params":{"domains":["stripe.com","shopify.com"]}}]},{"name":"enrich-url","category":{"id":"utilities","title":"Utilities & AI"},"title":"URL Intelligence API — resolve any URL to its final/clean URL, classify the entity type, find the canonical domain and route it to the right data engine","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/enrich-url/v1","spec_available":true,"actions":[{"name":"classify","description":"Any URL → final_url, cleaned_url (tracking stripped), domain, entity_type{value,confidence,source}, platform, recommended{engine,action,params} (the Reef deep-fetch card; web-extract fallback for unknown hosts), tracking{affiliate,stripped_params}.","required_params":["url"],"optional_params":["deep"],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL — short/affiliate/tracking/canonical — or a bare host (stripe.com). Redirects are followed + tracking stripped by the inner url-resolver (SSRF-guarded). Private/internal targets are blocked there.","on_invalid":"reject","example":"https://amzn.to/3xExample","aliases":["link","u"]},{"name":"deep","type":"boolean","required":false,"description":"Advanced: when true, run an additional structured-data pass even when the page type was already identified, for deeper detail. Default false = fastest, most cost-efficient path.","on_invalid":"ignore","default":false,"example":false}],"returns":"input_url, final_url, cleaned_url, canonical_url, domain, registrable_domain, is_short_link, redirect{redirected,hops,chain_hosts}, entity_type{value,confidence,source}, platform, identifier, recommended{engine,action,params} (null→web-extract fallback card), tracking{is_affiliate,affiliate_network,merchant_hint,stripped_params[]}, preview{title,description,image,site_name,og_type}, provenance{resolver,classifier status+missing_reason}, meta.extra.subcalls[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.amazon.com/dp/B08N5WRWNW?tag=aff-20&utm_source=x"}},{"name":"extract_entity","description":"Any URL → a lightweight entity card with title, image, description, price, author and publication date — great for link previews and deciding which Reef engine to call next. Use the recommended{} field from classify for the full deep-fetch.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL — short/affiliate/tracking/canonical — or a bare host (stripe.com). Redirects are followed + tracking stripped by the inner url-resolver (SSRF-guarded). Private/internal targets are blocked there.","on_invalid":"reject","example":"https://amzn.to/3xExample","aliases":["link","u"]}],"returns":"final_url, domain, entity_type{value,confidence,source}, platform, entity{title,name,image,description,price,currency,author,published_at,site_name,canonical}, recommended{engine,action,params}, source (og|jsonld|resolver-preview|web-extract), provenance","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://github.com/torvalds/linux"}},{"name":"batch","description":"Classify up to 20 URLs in one call (the link-list cleanup + routing use-case): per-URL ok/error, each independently resolved + classified.","required_params":["urls"],"optional_params":[],"params":[{"name":"urls","type":"array","required":true,"description":"Up to 20 URLs (array or comma-separated). Each is resolved + classified independently; per-URL ok/error.","on_invalid":"reject","example":["https://amzn.to/a","https://github.com/torvalds/linux","stripe.com"],"aliases":["links"]}],"returns":"results[] (one classify payload or {ok:false,error} per input), count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"urls":["https://amzn.to/a","https://github.com/torvalds/linux","stripe.com"]}},{"name":"catalog_resolve","description":"META (no network): given a known platform name OR a URL's host, return which Reef engine+action handles it and the param key it needs — the routing table itself (url-resolver marketplace engine_hints + the non-marketplace platform map). For agents discovering 'which engine for X'.","required_params":[],"optional_params":["platform","url"],"params":[{"name":"platform","type":"string","required":false,"description":"A platform name (instagram/youtube/github/amazon/…) to resolve to its Reef engine+action. Omit both platform and url to list the full table.","on_invalid":"ignore","example":"instagram"},{"name":"url","type":"string","required":false,"description":"Optional URL whose host is mapped to its Reef engine (no network fetch — host-only routing lookup).","on_invalid":"ignore","example":"https://www.instagram.com/nasa/"}],"returns":"query, matched (bool), platform, entity_type, recommended{engine,action,param_key}, known_platforms[] (when no query: the full routing table)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"platform":"instagram"}}]},{"name":"equipmentfacts","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Equipment Facts API - heavy equipment auctions, lots and live bids (equipmentfacts.com)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/equipmentfacts/v1","spec_available":true,"actions":[{"name":"auctions","description":"Every upcoming (or past) auction on Equipment Facts, one clean row per auction: title, auctioneer (name, phone, website, logo), date and start time (UTC and as shown), type (online timed sale or on-site / webcast auction) and bidding format, status, location and address, description, equipment types, lot count (online sales) and the catalogue and bidding links. Filter by type, state, date, keyword or auctioneer; 25 per page with the site's own total.","required_params":[],"optional_params":["status","auction_type","state","date","query","auctioneer_id","page"],"params":[{"name":"status","type":"enum","required":false,"description":"Upcoming auctions (default) or past auctions (auction results).","on_invalid":"reject","allowed_values":[{"value":"upcoming","label":"Upcoming and today's auctions (default)"},{"value":"past","label":"Past auctions / auction results"}],"default":"upcoming"},{"name":"auction_type","type":"enum","required":false,"description":"online = timed online sales (AuctionTime); onsite = live on-site / webcast auctions.","on_invalid":"reject","allowed_values":[{"value":"online","label":"Online auction (AuctionTime timed online sale)"},{"value":"onsite","label":"On-site auction (live, usually with online webcast bidding)"}]},{"name":"state","type":"string","required":false,"description":"US state or Canadian province, by name or 2-letter code (TX).","on_invalid":"reject","example":"Texas"},{"name":"date","type":"string","required":false,"description":"Only auctions on this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-11-14"},{"name":"query","type":"string","required":false,"description":"Only auctions matching these words (title, description, auctioneer).","on_invalid":"reject","example":"tractor","aliases":["q","keyword"]},{"name":"auctioneer_id","type":"integer","required":false,"description":"Only this auctioneer's auctions (auctions[].auctioneer.account_id).","on_invalid":"reject","example":3084184},{"name":"page","type":"integer","required":false,"description":"Page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000}],"returns":"auctions[]{auction_id, title, auctioneer{name, account_id, phone, website, logo}, auction_type (online|onsite), auction_type_label, bidding_format (timed_online|onsite_with_online_bidding|virtual_online_only|onsite_only), bidding_format_label, date, starts_at (UTC), start_time_text, ends_at, status (upcoming|today|live_now|past), description, equipment_types[], location{address, city, state, postal_code, country, formatted}, currency, lot_count, pre_bidding, event_group_id, catalogue_url, bidding_url, auctiontime_url}, count, duplicates_removed (the site repeats a few auctions on its own page; total_results is the site's count including them), total_results, total_pages, page, page_size, has_more, filters_applied","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"lots","description":"The lots (equipment items) of one Equipment Facts auction: lot number, title, year, make, model, category, serial / VIN, hours, mileage, specs, description, photos, location, lot URL and the live bid state (current bid, next bid, increment, bid count and closing time on online sales). Filter by keyword, category or lot number; sort by lot number, year, make or model. 28 per page.","required_params":[],"optional_params":["auction_id","url","page","sort","query","category","lot_number","include_bids"],"params":[{"name":"auction_id","type":"integer","required":false,"description":"The auction's id (auctions[].auction_id).","on_invalid":"reject","example":258042341},{"name":"url","type":"string","required":false,"description":"An auction catalogue URL (auctions[].catalogue_url) instead of auction_id.","on_invalid":"reject","example":"https://www.equipmentfacts.com/listings/upcoming-auctions/rebel-auction/equipment?EventID=258042341"},{"name":"page","type":"integer","required":false,"description":"Page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"sort","type":"enum","required":false,"description":"Order of lots.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Catalogue order (default)"},{"value":"lot_number","label":"Lot number"},{"value":"year_asc","label":"Year: low to high"},{"value":"year_desc","label":"Year: high to low"},{"value":"manufacturer","label":"Manufacturer"},{"value":"model","label":"Model"},{"value":"recently_added","label":"Recently added"},{"value":"recently_updated","label":"Recently updated"}]},{"name":"query","type":"string","required":false,"description":"Only lots matching these words.","on_invalid":"reject","example":"caterpillar","aliases":["q","keyword"]},{"name":"category","type":"integer","required":false,"description":"Only this category id (filters facet=category).","on_invalid":"reject","example":1031},{"name":"lot_number","type":"string","required":false,"description":"Only this lot number.","on_invalid":"reject","example":"10"},{"name":"include_bids","type":"boolean","required":false,"description":"Read the live bid state (current bid, next bid, increment, bid count on online sales, closing time) from the site's bid service: one extra small request. false = only what the lot list carries.","on_invalid":"reject","default":true}],"returns":"auction{auction_id, id_kind, status, auctioneer{name, account_id, phone}, auction_date_text, currency, location, catalogue_url}, lots[]{lot_id, lot_number, title, year, manufacturer, model, category{id, name}, condition, serial_number, vin, stock_number, hours, mileage, mileage_unit (mi|km, as the seller wrote it), specs{label: value}, description, quantity, currency, image, images[], image_count, video_count, url, auction_type (online|onsite), event_id, auction_date_text, closes_at (UTC, online sales), location{city, state, postal_code, country, formatted}, auctioneer{name, account_id, phone, website}, is_auction_result, sold_price (always null: not shown logged out), current_bid, starting_bid (online), next_bid, bid_increment, bid_count (online sales only), bidding_open, time_left_seconds, updated_text}, count, total_results, total_pages, page, page_size, has_more, bids_status (ok|partial|unavailable|not_requested|not_applicable), filters_applied","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.equipmentfacts.com/listings/upcoming-auctions/rebel-auction/equipment?EventID=258042341"}},{"name":"lot","description":"One lot in full: title, lot number, year, make, model, category, condition, serial / VIN, hours, mileage, every spec, the whole description, every photo (full size), item location, the live bid state, closing time, buyer's premium, the auction (date, location, catalogue) and the auctioneer, previous and next lot. Online-sale lots are served from AuctionTime, the same platform.","required_params":[],"optional_params":["lot_id","url"],"params":[{"name":"lot_id","type":"integer","required":false,"description":"The lot's id (lots[].lot_id).","on_invalid":"reject","example":262143691},{"name":"url","type":"string","required":false,"description":"A lot URL (lots[].url) instead of lot_id.","on_invalid":"reject","example":"https://www.equipmentfacts.com/listing/upcoming-auctions/262143691/2016-ver-mac-message-board-arrow-boards"}],"returns":"lot{lot_id, lot_number, title, year, manufacturer, model, category, condition, serial_number, vin, stock_number, hours, mileage, mileage_unit, specs{}, description, images[], image, image_count, videos[], url, site (equipmentfacts|auctiontime), auction_type, is_auction_result, sold_price (null), auction{event_id, title, date_label, date_text, starts_text, timezone, location, phone, catalogue_url, auctioneer_url, is_virtual}, auctioneer{name, account_id, phone, website, location, items_sold}, item_location{…}, buyers_premium{currency, overall_cap, internet_bidder_cap, ranges[]}, currency, closes_at, previous_lot_id, next_lot_id, current_bid, starting_bid, next_bid, bid_increment, bid_count, bidding_open, time_left_seconds, external_id}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.equipmentfacts.com/listing/upcoming-auctions/262143691/2016-ver-mac-message-board-arrow-boards"}},{"name":"search","description":"Search lots across every Equipment Facts auction by keyword, manufacturer, category, year range, state, country, condition, auction type or auction date. Each row is a lot with its specs, hours / mileage, photos, location, auction and the live bid state; 28 per page with the site's own total.","required_params":[],"optional_params":["query","manufacturer","category","year_min","year_max","state","country","condition","auction_type","auction_date","status","sort","page","include_bids"],"params":[{"name":"query","type":"string","required":false,"description":"Words to search lots for.","on_invalid":"reject","example":"excavator","aliases":["q","keyword"]},{"name":"manufacturer","type":"string","required":false,"description":"Manufacturer, as the site spells it.","on_invalid":"reject","example":"JOHN DEERE"},{"name":"category","type":"integer","required":false,"description":"Category id (filters facet=category; 1031 = Excavators).","on_invalid":"reject","example":1031},{"name":"year_min","type":"integer","required":false,"description":"Earliest year.","on_invalid":"reject","example":2015},{"name":"year_max","type":"integer","required":false,"description":"Latest year.","on_invalid":"reject","example":2022},{"name":"state","type":"string","required":false,"description":"US state or Canadian province, by name or 2-letter code (TX).","on_invalid":"reject","example":"Texas"},{"name":"country","type":"string","required":false,"description":"USA, Canada or Mexico.","on_invalid":"reject","example":"USA"},{"name":"condition","type":"enum","required":false,"description":"Condition.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used"},{"value":"new","label":"New"},{"value":"salvaged","label":"Salvaged"},{"value":"rebuilt","label":"Rebuilt"}]},{"name":"auction_type","type":"enum","required":false,"description":"online = timed online sales (AuctionTime); onsite = live on-site / webcast auctions.","on_invalid":"reject","allowed_values":[{"value":"online","label":"Online auction (AuctionTime timed online sale)"},{"value":"onsite","label":"On-site auction (live, usually with online webcast bidding)"}]},{"name":"auction_date","type":"string","required":false,"description":"Only lots selling on this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-11-14"},{"name":"status","type":"enum","required":false,"description":"Upcoming auctions (default) or past auctions (auction results).","on_invalid":"reject","allowed_values":[{"value":"upcoming","label":"Upcoming and today's auctions (default)"},{"value":"past","label":"Past auctions / auction results"}],"default":"upcoming"},{"name":"sort","type":"enum","required":false,"description":"Order of results. The default pages completely; the site's relevance order repeats and skips rows from page to page.","on_invalid":"reject","allowed_values":[{"value":"recently_added","label":"Recently added (default; stable across pages)"},{"value":"relevance","label":"The site's relevance order (NOT stable across pages: rows repeat / go missing)"},{"value":"lot_number","label":"Lot number"},{"value":"year_asc","label":"Year: low to high"},{"value":"year_desc","label":"Year: high to low"},{"value":"manufacturer","label":"Manufacturer"},{"value":"model","label":"Model"},{"value":"recently_updated","label":"Recently updated"}],"default":"recently_added"},{"name":"page","type":"integer","required":false,"description":"Page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"include_bids","type":"boolean","required":false,"description":"Read the live bid state (current bid, next bid, increment, bid count on online sales, closing time) from the site's bid service: one extra small request. false = only what the lot list carries.","on_invalid":"reject","default":true}],"returns":"results[]{lot_id, lot_number, title, year, manufacturer, model, category{id, name}, condition, serial_number, vin, stock_number, hours, mileage, mileage_unit (mi|km, as the seller wrote it), specs{label: value}, description, quantity, currency, image, images[], image_count, video_count, url, auction_type (online|onsite), event_id, auction_date_text, closes_at (UTC, online sales), location{city, state, postal_code, country, formatted}, auctioneer{name, account_id, phone, website}, is_auction_result, sold_price (always null: not shown logged out), current_bid, starting_bid (online), next_bid, bid_increment, bid_count (online sales only), bidding_open, time_left_seconds, updated_text}, count, total_results, total_pages, page, page_size, has_more, bids_status, filters_applied","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"excavator","include_bids":false}},{"name":"filters","description":"The site's own filter values with counts — categories (with their ids), states, countries, conditions, auction types, auction dates or manufacturers — for upcoming lots or auctions. Use the values in auctions / search.","required_params":["facet"],"optional_params":["facet","scope","status","query"],"params":[{"name":"facet","type":"enum","required":true,"description":"Which filter. Auctions scope supports state, auction_type, auction_date.","on_invalid":"reject","allowed_values":[{"value":"category","label":"Category"},{"value":"state","label":"State"},{"value":"country","label":"Country"},{"value":"condition","label":"Condition"},{"value":"auction_type","label":"Auction Type"},{"value":"auction_date","label":"Auction Date"},{"value":"manufacturer","label":"Manufacturer"}]},{"name":"scope","type":"enum","required":false,"description":"Count lots or auctions.","on_invalid":"reject","allowed_values":[{"value":"lots","label":"Lots (default)"},{"value":"auctions","label":"Auctions"}],"default":"lots"},{"name":"status","type":"enum","required":false,"description":"Upcoming auctions (default) or past auctions (auction results).","on_invalid":"reject","allowed_values":[{"value":"upcoming","label":"Upcoming and today's auctions (default)"},{"value":"past","label":"Past auctions / auction results"}],"default":"upcoming"},{"name":"query","type":"string","required":false,"description":"Only count matches for these words.","on_invalid":"reject","example":"excavator","aliases":["q","keyword"]}],"returns":"options[]{name, value, count, parent_value}, count, total_options, truncated, facet, scope","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":null}]},{"name":"estante-virtual","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Estante Virtual API — live data from estantevirtual.com.br, Brazil's largest marketplace for used and new books, sold by thousands of independent sebos. Search editions by keyword, ISBN, author, publisher, year, city, sebo, category, language and price; list every copy of an edition with its price, condition and the seller's own condition note; open one copy for its sebo, weight and size; read a sebo's profile, city, rating and inventory; quote shipping to any Brazilian CEP. Prices in BRL. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/estante-virtual/v1","spec_available":true,"actions":[{"name":"search","description":"Search Estante Virtual's catalogue. One row per EDITION (copies grouped by ISBN) with the lowest price on offer, how many used and new copies exist, author, publisher, year, ISBN, language and synopsis. Filters: condition, author, publisher, year, city of the sebo, sebo, category, language, price range; every one was measured to change the total. Facets give the exact values each filter takes. 44 editions per page; the site serves at most 10,000 rows per query and the engine says where that ends. Give query, isbn or at least one filter.","required_params":[],"optional_params":["query","isbn","condition","author","publisher","year","city","seller","category","language","min_price","max_price","sort","page","facets_top","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text over title, author and publisher, matched the way the site's own search box matches it. A hyphenated ISBN is reduced to its digits first (the site otherwise splits it into hundreds of thousands of hits). Give `query`, `isbn` or at least one filter.","on_invalid":"reject","example":"machado de assis","aliases":["q","keyword","keywords","search","text"]},{"name":"isbn","type":"string","required":false,"description":"ISBN-13 or ISBN-10, dashes allowed. ISBN-10 is converted to the ISBN-13 the site indexes (it answers 0 for the 10-digit form).","on_invalid":"reject","example":"9788516096892","aliases":["isbn13","isbn10","ean"]},{"name":"condition","type":"enum","required":false,"description":"usado = used copies, novo = new copies.","on_invalid":"reject","allowed_values":[{"value":"usado","label":"used copy"},{"value":"novo","label":"new copy"}],"example":"usado","aliases":["tipo","tipo_de_livro"]},{"name":"author","type":"string","required":false,"description":"Author as the catalogue spells it, or its slug from `facets.authors`.","on_invalid":"reject","example":"Machado de Assis","aliases":["autor"]},{"name":"publisher","type":"string","required":false,"description":"Publisher, or its slug from `facets.publishers`.","on_invalid":"reject","example":"Moderna","aliases":["editora"]},{"name":"year","type":"integer","required":false,"description":"Publication year (exact).","on_invalid":"reject","example":2015,"minimum":1400,"maximum":2100,"aliases":["ano","ano_de_publicacao"]},{"name":"city","type":"string","required":false,"description":"City of the selling sebo, or its slug from `facets.cities`.","on_invalid":"reject","example":"Fortaleza","aliases":["cidade"]},{"name":"seller","type":"string","required":false,"description":"One sebo, by its name or slug (see `facets.sellers`).","on_invalid":"reject","example":"armazem-do-livro-usado","aliases":["sebo","sebos_e_livreiros"]},{"name":"category","type":"string","required":false,"description":"Site category, or its slug from `facets.categories`.","on_invalid":"reject","example":"Literatura Brasileira","aliases":["categoria"]},{"name":"language","type":"string","required":false,"description":"Language, or its slug from `facets.languages` (e.g. ingles, espanhol).","on_invalid":"reject","example":"Inglês","aliases":["idioma"]},{"name":"min_price","type":"number","required":false,"description":"Minimum price in BRL.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Maximum price in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the site's own relevance order (default)"},{"value":"lowest-first","label":"lowest price first"},{"value":"highest-first","label":"highest price first"},{"value":"new-releases","label":"most recently published first"}],"default":"relevance","example":"lowest-first"},{"name":"page","type":"integer","required":false,"description":"1-based page. Search pages hold 44 editions and the site serves at most 10,000 rows per query (last page 228).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"facets_top","type":"integer","required":false,"description":"How many values per facet to return (0 = none).","on_invalid":"reject","default":20,"example":20,"minimum":0,"maximum":100},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; nothing is masked.","on_invalid":"reject","default":false}],"returns":"books[]{book_id, title, authors[], publisher, year, isbn, language, lowest_price, lowest_price_list, discount_percent, currency, offers_by_condition{usado,novo}, offer_count, synopsis, image_url, url} + facets{condition, authors, publishers, years, cities, sellers, categories, languages}[]{value, label, count} + meta{total, page, per_page, last_page, has_more, result_window, filters_applied, filter_check, empty_verified}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"machado de assis","condition":"usado"}},{"name":"offers","description":"Every copy of one edition in one condition (used by default): price, list price, discount, the seller's own condition note, publisher, year, invoice and cover-photo flags, promo labels, photo. Filter by the sebo's city, the sebo, year and price; sort by price. The site's copy list does not name the sebo per copy; it publishes the edition's sebo and city breakdown (name + count), returned as facets — `offer` names the sebo of one copy.","required_params":["book_id"],"optional_params":["book_id","condition","city","seller","year","min_price","max_price","sort","page","per_page","facets_top","include_pii"],"params":[{"name":"book_id","type":"string","required":true,"description":"The `book_id` of a search row (an edition, ends with -BK), or its URL.","on_invalid":"reject","example":"57A-2294-000-BK","aliases":["id","edition_id","url"]},{"name":"condition","type":"enum","required":false,"description":"Which copies to list: usado (used, default) or novo (new).","on_invalid":"reject","allowed_values":[{"value":"usado","label":"used copy"},{"value":"novo","label":"new copy"}],"default":"usado","example":"usado"},{"name":"city","type":"string","required":false,"description":"City of the selling sebo, or its slug from `facets.cities`.","on_invalid":"reject","example":"Fortaleza","aliases":["cidade"]},{"name":"seller","type":"string","required":false,"description":"One sebo, by its name or slug (see `facets.sellers`).","on_invalid":"reject","example":"armazem-do-livro-usado","aliases":["sebo","sebos_e_livreiros"]},{"name":"year","type":"integer","required":false,"description":"Publication year (exact).","on_invalid":"reject","example":2015,"minimum":1400,"maximum":2100,"aliases":["ano","ano_de_publicacao"]},{"name":"min_price","type":"number","required":false,"description":"Minimum price in BRL.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Maximum price in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Copy order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the site's own relevance order (default)"},{"value":"lowest-first","label":"lowest price first"},{"value":"highest-first","label":"highest price first"}],"default":"relevance","example":"lowest-first"},{"name":"page","type":"integer","required":false,"description":"1-based page. Search pages hold 44 editions and the site serves at most 10,000 rows per query (last page 228).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Copies per page, 1-40.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":40,"aliases":["limit"]},{"name":"facets_top","type":"integer","required":false,"description":"How many values per facet to return (0 = none).","on_invalid":"reject","default":20,"example":20,"minimum":0,"maximum":100},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; nothing is masked.","on_invalid":"reject","default":false}],"returns":"offers[]{offer_id, sku, book_id, title, condition, condition_note, price, list_price, discount_percent, currency, available, authors[], publisher, year, isbn, language, category, has_invoice, has_cover_photo, promo_labels[], image_url, url} + facets{sellers, cities, years, ...} + meta{total, page, per_page, last_page, has_more, filters_applied, filter_check}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"book_id":"57A-2294-000-BK","condition":"usado","per_page":20}},{"name":"book","description":"One edition: title, authors, publisher, year, ISBN, language, synopsis, cover, and for each condition the cheapest copy (price, sebo, condition note, weight) plus how many copies and how many different sebos and cities offer it.","required_params":["book_id"],"optional_params":["book_id","facets_top"],"params":[{"name":"book_id","type":"string","required":true,"description":"The `book_id` of a search row (an edition, ends with -BK), or its URL.","on_invalid":"reject","example":"57A-2294-000-BK","aliases":["id","edition_id","url"]},{"name":"facets_top","type":"integer","required":false,"description":"How many values per facet to return (0 = none).","on_invalid":"reject","default":20,"example":20,"minimum":0,"maximum":100},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; nothing is masked.","on_invalid":"reject","default":false}],"returns":"book_id, title, authors[], publisher, year, isbn, language, synopsis, image_url, listed_since, cheapest_by_condition{usado,novo}{offer_id, price, list_price, condition_note, seller{id,name}, weight_g, ...}, offer_counts{usado,novo}, sellers{usado,novo}[], cities{usado,novo}[], url","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"book_id":"57A-2294-000-BK"}},{"name":"offer","description":"One copy as its page publishes it: the sebo (id, name, slug, and with include_seller its city, state, rating and since-date), price, list price, card price, installments, free-shipping flag, condition and the seller's condition note, weight and size, listing date, photos, availability, and the page's ld+json price as a cross-check.","required_params":["offer_id"],"optional_params":["offer_id","include_seller"],"params":[{"name":"offer_id","type":"string","required":true,"description":"The `offer_id` of a copy (from `offers`, `book` or `seller`), or its URL.","on_invalid":"reject","example":"TAP-0857-000","aliases":["id","copy_id","url"]},{"name":"include_seller","type":"boolean","required":false,"description":"Also read the sebo's page for its city, state, rating and since-date (one more page). false = the copy only.","on_invalid":"reject","default":true,"example":true},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; nothing is masked.","on_invalid":"reject","default":false}],"returns":"offer_id, sku, book_id, title, authors[], publisher, year, isbn, language, condition, condition_note, category, has_invoice, has_cover_photo, price, list_price, card_price, max_installments, installment_amount, free_shipping, available, listed_at, weight_g, height_cm, width_cm, depth_cm, seller{id, name, slug, url, city, state, rating_average, review_count, percent_recommended, on_estante_virtual_since}, image_urls[], ld_json_price, price_disagreements[], url","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"offer_id":"TAP-0857-000"}},{"name":"seller","description":"One sebo's public page: name, description, city, state and address, business contacts, pickup points, shipping methods, on-site since, tax id as the page carries it (CNPJ for a company, CPF for an individual seller, with its type), rating, review count, percent recommended and the latest reviews, plus one page (40 copies) of its inventory with the total.","required_params":["seller"],"optional_params":["seller","page"],"params":[{"name":"seller","type":"string","required":true,"description":"The sebo's slug (`seller.slug` on an offer), its name or its URL.","on_invalid":"reject","example":"armazem-do-livro-usado","aliases":["slug","seller_slug","sebo","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Search pages hold 44 editions and the site serves at most 10,000 rows per query (last page 228).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; nothing is masked.","on_invalid":"reject","default":false}],"returns":"seller_id, slug, name, description, city, state, address{}, contacts[], pickup_points[], shipping_methods[], on_estante_virtual_since, seller_type, tax_id, tax_id_type, rating_average, review_count, percent_recommended, latest_reviews[], inventory_total, inventory_last_page, inventory[]{offer_id, sku, book_id, title, condition, condition_note, price, list_price, discount_percent, currency, available, authors[], publisher, year, isbn, language, category, has_invoice, has_cover_photo, promo_labels[], image_url, url}, url","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"seller":"armazem-do-livro-usado"}},{"name":"shipping","description":"Shipping quote for one copy to one Brazilian CEP, as the copy page computes it: service, price, delivery days and dates, free-shipping flag. The quote depends on the destination CEP and the sebo, not on where the request comes from (measured).","required_params":["offer_id","cep"],"optional_params":["offer_id","cep"],"params":[{"name":"offer_id","type":"string","required":true,"description":"The `offer_id` of a copy (from `offers`, `book` or `seller`), or its URL.","on_invalid":"reject","example":"TAP-0857-000","aliases":["id","copy_id","url"]},{"name":"cep","type":"string","required":true,"description":"Brazilian destination CEP (8 digits, dash optional). The quote depends on it; the site gives no quote without one.","on_invalid":"reject","example":"01310-100","aliases":["zipcode","zip_code","cep_destino"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; nothing is masked.","on_invalid":"reject","default":false}],"returns":"offer_id, cep, seller{id, name}, price, options[]{service, price, free_shipping, min_days, max_days, min_date, max_date, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"offer_id":"TAP-0857-000","cep":"01310-100"}}]},{"name":"etsy","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Etsy API scraper — search handmade & vintage listings, full product detail (price, variations, materials, photos), shop profiles, a shop's full paginated catalog, category browse and all customer reviews from etsy.com","version":"2.3.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/etsy/v1","spec_available":true,"actions":[{"name":"listings/search","description":"Search Etsy handmade/vintage listings by keyword — returns listing cards with id, title, price, sale price, shop, image and listing URL. Supports category, price range, sort and pagination filters.","required_params":["query"],"optional_params":["max_pages","sort","min_price","max_price","category","free_shipping"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (listing keywords).","on_invalid":"reject","example":"handmade silver ring"},{"name":"max_pages","type":"integer","required":false,"description":"How many result pages to fetch in one call (1–10). Each page ≈ 12 listings (the set Etsy renders per page).","on_invalid":"ignore","default":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Best match (Etsy default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"recent","label":"Most recent"},{"value":"top_reviews","label":"Highest customer reviews"}],"default":"relevance"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter (in the site currency, USD).","on_invalid":"ignore","example":10},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter (in the site currency, USD).","on_invalid":"ignore","example":100},{"name":"category","type":"string","required":false,"description":"Restrict to an Etsy category slug (jewelry, home_and_living, clothing, art_and_collectibles, weddings, toys_and_games …).","on_invalid":"ignore","example":"jewelry"},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings that ship free.","on_invalid":"ignore"}],"returns":"items[]{listing_id, title, price, currency, list_price, shop_slug, shop_id, image_url, url, is_ad}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":2,"per":25,"min":1},"example_params":{"query":"silver ring"}},{"name":"listings/detail","description":"Full Etsy listing detail by listing ID or URL — title, price, sale price, currency, rating, review count, favorites (demand signal), stock-left, variations, gallery images, description, tags, materials, category and shipping estimate.","required_params":[],"optional_params":["listing_url","listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Etsy listing ID — the digits in the listing URL (etsy.com/listing/<id>/…). Provide listing_id OR listing_url.","on_invalid":"reject","example":"4466079382"},{"name":"listing_url","type":"string","required":false,"description":"Full listing URL — alternative to listing_id.","on_invalid":"reject","example":"https://www.etsy.com/listing/4466079382","aliases":["url"]}],"returns":"listing{listing_id, title, price, price_max, currency, original_price, on_sale, rating, review_count_display, favorites_count, stock_left, variations[], images[], image_count, description, tags[], materials[], categories[], shipping_estimate, shop_id, shop_slug, schema_product}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":2,"per":25,"min":1},"example_params":{"listing_id":"4466079382"}},{"name":"shops/detail","description":"Etsy shop profile by shop slug or URL — name, total lifetime sales, location, star rating, review count, admirers (followers), active-listings count, year opened and the shop's featured listings (deduped, with title/price/image).","required_params":[],"optional_params":["shop_url","shop_slug","url"],"params":[{"name":"shop_slug","type":"string","required":false,"description":"Shop name as it appears in the shop URL (etsy.com/shop/<slug>). Provide shop_slug OR shop_url.","on_invalid":"reject","example":"SilverRainSilver"},{"name":"shop_url","type":"string","required":false,"description":"Full shop URL — alternative to shop_slug.","on_invalid":"reject","example":"https://www.etsy.com/shop/SilverRainSilver","aliases":["url"]}],"returns":"shop{shop_slug, shop_name, sales_count, location, rating, review_count, followers_count, active_listings_count, opened_year, shop_id, featured_listings[]{listing_id, title, price, currency, image_url, url}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":2,"per":25,"min":1},"example_params":{"shop_slug":"SilverRainSilver"}},{"name":"shops/listings","description":"Browse a shop's full active catalog, paginated — every product the shop sells (not just the featured handful), with id, title, price, sale price, image and listing URL. Page through with max_pages to pull the whole inventory.","required_params":[],"optional_params":["shop_url","shop_slug","url","max_pages","sort"],"params":[{"name":"shop_slug","type":"string","required":false,"description":"Shop name from the shop URL (etsy.com/shop/<slug>). Provide shop_slug OR shop_url.","on_invalid":"reject","example":"SilverRainSilver"},{"name":"shop_url","type":"string","required":false,"description":"Full shop URL — alternative to shop_slug.","on_invalid":"reject","example":"https://www.etsy.com/shop/SilverRainSilver","aliases":["url"]},{"name":"max_pages","type":"integer","required":false,"description":"How many catalog pages to fetch (1–20). Each page ≈ 36 listings.","on_invalid":"ignore","default":1,"minimum":1,"maximum":20},{"name":"sort","type":"enum","required":false,"description":"Order within the shop.","on_invalid":"ignore","allowed_values":[{"value":"custom","label":"Shop's own arrangement (default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"recent","label":"Most recent"}],"default":"custom"}],"returns":"items[]{listing_id, title, price, currency, list_price, image_url, url} + total_listings, pages_fetched","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"shop_slug":"SilverRainSilver"}},{"name":"listings/category","description":"Browse Etsy by category (the /c/<category> grid) — discover trending/popular listings in a category without a keyword. Supports sub-categories, price range, sort and pagination.","required_params":["category"],"optional_params":["max_pages","sort","min_price","max_price","free_shipping"],"params":[{"name":"category","type":"string","required":true,"description":"Etsy category to browse. Use a top-level slug below, or a sub-path like 'jewelry/rings' / 'home_and_living/candles'.","on_invalid":"ignore","allowed_values":[{"value":"jewelry","label":"Jewelry"},{"value":"clothing","label":"Clothing & shoes"},{"value":"home_and_living","label":"Home & living"},{"value":"wedding_and_party","label":"Wedding & party"},{"value":"toys_and_entertainment","label":"Toys & games"},{"value":"art_and_collectibles","label":"Art & collectibles"},{"value":"craft_supplies_and_tools","label":"Craft supplies & tools"},{"value":"bags_and_purses","label":"Bags & purses"},{"value":"accessories","label":"Accessories"},{"value":"bath_and_beauty","label":"Bath & beauty"},{"value":"books_movies_and_music","label":"Books, movies & music"},{"value":"electronics_and_accessories","label":"Electronics & accessories"},{"value":"pet_supplies","label":"Pet supplies"},{"value":"shoes","label":"Shoes"},{"value":"paper_and_party_supplies","label":"Paper & party supplies"}],"example":"jewelry"},{"name":"max_pages","type":"integer","required":false,"description":"How many category pages to fetch (1–10). Each page ≈ 48 listings.","on_invalid":"ignore","default":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Etsy default"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"recent","label":"Most recent"},{"value":"top_reviews","label":"Highest customer reviews"}],"default":"relevance"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter (USD).","on_invalid":"ignore","example":10},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter (USD).","on_invalid":"ignore","example":100},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings that ship free.","on_invalid":"ignore"}],"returns":"items[]{listing_id, title, price, currency, list_price, shop_slug, image_url, url} + category, pages_fetched","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"jewelry/rings"}},{"name":"reviews/shop","description":"Customer reviews for an Etsy shop — star rating, review text, reviewer, date, the shop's reply, buyer photos and the listing each review is about. Pass shop_slug for the full paginated review stream (about 14 reviews per page). Passing only the numeric shop_id uses Etsy's compact shop-summary feed, which returns at most 6 reviews no matter what limit you ask for.","required_params":[],"optional_params":["shop_slug","shop_url","url","shop_id","limit","max_pages","exclude_listing_id"],"params":[{"name":"shop_slug","type":"string","required":false,"description":"Shop name as it appears in the shop URL (etsy.com/shop/<slug>). Preferred: this unlocks the full paginated review stream. Provide shop_slug, shop_url or shop_id.","on_invalid":"reject","example":"SilverRainSilver","aliases":["shop"]},{"name":"shop_url","type":"string","required":false,"description":"Full shop URL — alternative to shop_slug.","on_invalid":"reject","example":"https://www.etsy.com/shop/SilverRainSilver","aliases":["url"]},{"name":"shop_id","type":"string","required":false,"description":"Numeric Etsy shop ID (shops/detail returns it as shop_id). Works, but Etsy caps this route at 6 reviews — prefer shop_slug for more.","on_invalid":"reject","example":"7357402"},{"name":"limit","type":"integer","required":false,"description":"Maximum reviews to return.","on_invalid":"ignore","default":100,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"How many review pages to walk (1–20). Each page ≈ 14 reviews. Only applies when shop_slug/shop_url is given.","on_invalid":"ignore","default":3,"minimum":1,"maximum":20},{"name":"exclude_listing_id","type":"string","required":false,"description":"Skip reviews belonging to this listing (advanced).","on_invalid":"ignore","example":"4466079382"}],"returns":"reviews[]{review_id, transaction_id, rating, text, reviewer, reviewer_url, date, shop_response, listing_id, listing_title, listing_url, listing_image_url, photo_urls[]} + shop_slug, count, pages_fetched","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"shop_id":"7357402","limit":20}},{"name":"reviews/listing","description":"Customer reviews for a single Etsy listing — star rating, review text, reviewer, date, the shop's reply and buyer photos. Reviews are read from the shop's review stream (about 14 reviews per page, newest first) and filtered to this listing; raise max_pages to walk further back. rating and total_reported are null: Etsy no longer publishes the item's own totals on a page we can read.","required_params":[],"optional_params":["listing_url","listing_id","url","max_pages"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Etsy listing ID — the digits in the listing URL (etsy.com/listing/<id>/…). Provide listing_id OR listing_url.","on_invalid":"reject","example":"4466079382"},{"name":"listing_url","type":"string","required":false,"description":"Full listing URL — alternative to listing_id.","on_invalid":"reject","example":"https://www.etsy.com/listing/4466079382","aliases":["url"]},{"name":"max_pages","type":"integer","required":false,"description":"How many pages of the shop's review stream to walk (1–20). Each page is about 14 shop reviews and adds about 2-3 seconds; only the ones about this listing are returned.","on_invalid":"ignore","default":3,"minimum":1,"maximum":20}],"returns":"reviews[]{review_id, transaction_id, rating, text, reviewer, reviewer_url, date, shop_response, shop_response_by, photo_urls[]} + listing_id, shop_slug, rating, total_reported, count, pages_fetched, partial","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"listing_id":"4466079382","max_pages":3}},{"name":"search/suggest","description":"Etsy search autocomplete — keyword suggestions for a partial query (no account required).","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Partial search text to complete.","on_invalid":"reject","example":"silver ring"},{"name":"limit","type":"integer","required":false,"description":"How many suggestions to return.","on_invalid":"ignore","default":20,"minimum":1}],"returns":"suggestions[]{query, categories[]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"query":"silver ring"}}]},{"name":"eventbrite","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Eventbrite API scraper — search live events by city, keyword, category, date and price; pull full event detail (name, date, venue, organizer, ticket price range and image); get an organizer's profile and ALL their upcoming/past events (paginated); and browse a city or category's event listings from Eventbrite.com — no login, no API key","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/eventbrite/v1","spec_available":true,"actions":[{"name":"search","description":"Search Eventbrite for events by keyword in a city, with optional category, date and free-only filters. Paginated (~20 events/page). Returns each event's name, date, venue with coordinates, image and link.","required_params":[],"optional_params":["query","location","category","date","free","page"],"params":[{"name":"query","type":"string","required":false,"description":"What to search for — a keyword, artist, topic or event name ('music', 'jazz', 'startup', 'yoga'). Omit to list a city/category's events.","on_invalid":"ignore","example":"music","aliases":["q","keyword"]},{"name":"location","type":"string","required":false,"description":"Where to search. Use Eventbrite's location slug '<country>--<city>' (e.g. 'united-states--new-york', 'united-kingdom--london', 'ca--san-francisco'), a US '<state-abbr>--<city>' form, or 'online' for online-only events. Defaults to New York.","on_invalid":"ignore","example":"united-states--new-york","aliases":["geo","city"]},{"name":"category","type":"string","required":false,"description":"Optional category to narrow results (music, business, food-and-drink, arts, health, sports-and-fitness, community, film-and-media, fashion, hobbies, charity-and-causes, government, science-and-tech, travel-and-outdoor, holiday).","on_invalid":"ignore","example":"music"},{"name":"date","type":"enum","required":false,"description":"Optional date filter.","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Today"},{"value":"tomorrow","label":"Tomorrow"},{"value":"this-weekend","label":"This weekend"},{"value":"this-week","label":"This week"},{"value":"this-month","label":"This month"}],"example":"this-weekend"},{"name":"free","type":"boolean","required":false,"description":"Set true to return only free events.","on_invalid":"ignore","example":true},{"name":"page","type":"integer","required":false,"description":"Result page (~20/page). Page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"events[]{event_id, name, url, start_date, end_date, image, is_online, venue{name, street, city, region, postal_code, country, latitude, longitude}} + meta{page, has_more, next_page}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"music","location":"united-states--new-york"}},{"name":"detail","description":"Full detail for one event by id or url: name, description, start/end datetime, venue with full address and coordinates, organizer, ticket price range (low/high + currency), availability, language, status and image.","required_params":[],"optional_params":["event_id","url"],"params":[{"name":"event_id","type":"string","required":false,"description":"Eventbrite event id (the trailing number in an event URL /e/<name>-tickets-<id>). From a search result's event_id.","on_invalid":"reject","example":"1989917921069"},{"name":"url","type":"string","required":false,"description":"Alternatively a full Eventbrite event URL.","on_invalid":"ignore","example":"https://www.eventbrite.com/e/papi-juice-pride-tickets-1989917921069"}],"returns":"event{event_id, name, description, start_date, end_date, status, language, image, is_online, venue{...}, organizer{name, url, organizer_id}, offers{low_price, high_price, currency, availability, available_until}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"1989917921069"}},{"name":"organizer","description":"Profile for an event organizer by id or url: name, bio, verification, avatar, follower count, website and social links, and how many upcoming events they have.","required_params":[],"optional_params":["organizer_id","url"],"params":[{"name":"organizer_id","type":"string","required":false,"description":"Eventbrite organizer id (the number in /o/<name>-<id>). From an event detail's organizer.organizer_id.","on_invalid":"reject","example":"105655500371","aliases":["org_id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full Eventbrite organizer URL.","on_invalid":"ignore","example":"https://www.eventbrite.com/o/elsewhere-105655500371"}],"returns":"organizer{organizer_id, name, verified, bio, avatar_url, profile_url, followers, website, social_links} + meta{upcoming_events_total}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"organizer_id":"105655500371"}},{"name":"organizer_events","description":"An organizer's events, paginated (30/page). Choose upcoming (default) or past. Returns each event with name, start/end datetime, venue, category, price range and link.","required_params":["organizer_id"],"optional_params":["type","page"],"params":[{"name":"organizer_id","type":"string","required":true,"description":"Eventbrite organizer id to list events for.","on_invalid":"reject","example":"105655500371","aliases":["org_id"]},{"name":"type","type":"enum","required":false,"description":"'future' (upcoming, default) or 'past' events.","on_invalid":"ignore","allowed_values":[{"value":"future","label":"Upcoming"},{"value":"past","label":"Past"}],"default":"future","example":"future"},{"name":"page","type":"integer","required":false,"description":"Event page (30/page). Page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"events[]{event_id, name, url, start_date, end_date, timezone, summary, image, is_online, is_free, price_range, currency, status, category, venue{...}} + meta{page, has_more, next_page}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"organizer_id":"105655500371"}},{"name":"browse","description":"Browse Eventbrite's curated event listings for a city and/or category (the discovery shelf). Returns the featured events for that location/category — same event shape as search. This surface is a single curated page (not paginated); use `search` with a query for paginated results.","required_params":[],"optional_params":["location","category"],"params":[{"name":"location","type":"string","required":false,"description":"Where to search. Use Eventbrite's location slug '<country>--<city>' (e.g. 'united-states--new-york', 'united-kingdom--london', 'ca--san-francisco'), a US '<state-abbr>--<city>' form, or 'online' for online-only events. Defaults to New York.","on_invalid":"ignore","example":"united-states--new-york","aliases":["geo","city"]},{"name":"category","type":"string","required":false,"description":"Category to browse (music, business, food-and-drink, arts, health, sports-and-fitness, community, film-and-media, fashion, hobbies, charity-and-causes, science-and-tech, travel-and-outdoor). Omit for all categories.","on_invalid":"ignore","example":"food-and-drink"}],"returns":"events[]{event_id, name, url, start_date, end_date, image, is_online, venue{...}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"united-states--new-york"}}]},{"name":"facebook-ad-library","category":{"id":"social","title":"Social Media"},"title":"Facebook Ad Library API — Meta's public ad transparency library as JSON: search every ad running on Facebook, Instagram, Messenger, Threads, WhatsApp and Audience Network by keyword or advertiser, country, ad category (political & issue, housing, employment, financial / credit), status, media type, platform, language and date; each ad's creative (text, link, call to action, images, videos, carousel cards), dates, platforms and versions; political ads with spend, impressions, audience and 'paid for by'; EU reach and audience; advertiser search and page targeting. No login, no token.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/facebook-ad-library/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Ad Library like the site does: by keyword (`query`) and/or advertiser (`page_id`), in one country or ALL, filtered by ad category, active status, media type, platforms, languages and delivery dates, sorted by relevance, newest or fewest impressions. First page up to 30 ads with the source's total; each next_cursor page 10 more. `query` and `page_id` are both optional (empty = every ad matching the filters).","required_params":[],"optional_params":["query","page_id","country","ad_type","active_status","media_type","search_type","platforms","languages","start_date","end_date","sort","cursor"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword(s) to search in the ad text, the way the Ad Library search box does. Optional: empty = every ad matching the other filters (e.g. every political ad in a country).","on_invalid":"reject","example":"nike","aliases":["q","keyword","search_terms"]},{"name":"page_id","type":"string","required":false,"description":"Only ads of this Facebook page / advertiser (numeric page id from `advertisers` or from any ad row). Can be combined with `query`.","on_invalid":"reject","example":"15087023444","value_pattern":"\\d{5,25}","aliases":["advertiser_id","view_all_page_id"]},{"name":"country","type":"string","required":false,"description":"Where the ads were delivered: one two-letter ISO country code (US, GB, DE, FR, BR, IN …) or ALL. One country per call.","on_invalid":"reject","default":"ALL","example":"US","value_pattern":"(?i)[a-z]{2}|all"},{"name":"ad_type","type":"enum","required":false,"description":"Ad category, as the Ad Library's 'Ad category' selector. Political and issue ads carry spend, impressions, audience and 'paid for by'.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All ads"},{"value":"political_and_issue_ads","label":"Issues, elections or politics (spend, impressions, 'paid for by')"},{"value":"housing_ads","label":"Housing"},{"value":"employment_ads","label":"Employment"},{"value":"financial_products_and_services_ads","label":"Financial products and services (also accepts credit_ads)"}],"default":"all","example":"all","aliases":["type"]},{"name":"active_status","type":"enum","required":false,"description":"Whether the ad is still running.","on_invalid":"reject","allowed_values":[{"value":"active","label":"Active ads"},{"value":"inactive","label":"Inactive ads"},{"value":"all","label":"Active and inactive"}],"default":"active","example":"active","aliases":["status"]},{"name":"media_type","type":"enum","required":false,"description":"Creative media type.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All media"},{"value":"image","label":"Images"},{"value":"video","label":"Videos"},{"value":"meme","label":"Memes"},{"value":"image_and_meme","label":"Images and memes"},{"value":"none","label":"No image or video"}],"default":"all","example":"video"},{"name":"search_type","type":"enum","required":false,"description":"How `query` is matched. Exact phrase only narrows multi-word queries.","on_invalid":"reject","allowed_values":[{"value":"keyword_unordered","label":"All words, any order"},{"value":"keyword_exact_phrase","label":"Exact phrase"}],"default":"keyword_unordered","example":"keyword_exact_phrase"},{"name":"platforms","type":"array","required":false,"description":"Only ads shown on these platforms (one or several, comma-separated): facebook, instagram, messenger, audience_network, threads, whatsapp.","on_invalid":"reject","allowed_values":[{"value":"facebook","label":"Facebook"},{"value":"instagram","label":"Instagram"},{"value":"messenger","label":"Messenger"},{"value":"audience_network","label":"Audience Network"},{"value":"threads","label":"Threads"},{"value":"whatsapp","label":"Whatsapp"}],"example":"instagram","aliases":["platform","publisher_platforms"]},{"name":"languages","type":"array","required":false,"description":"Only ads in these languages (ISO 639-1 codes, comma-separated: en, es, de …).","on_invalid":"reject","example":"es","aliases":["language","content_languages"]},{"name":"start_date","type":"string","required":false,"description":"Ads that were running on or after this date (YYYY-MM-DD). This is the delivery window, not the ad's creation date.","on_invalid":"reject","example":"2026-10-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_from","date_min"]},{"name":"end_date","type":"string","required":false,"description":"Ads that were running on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-10-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_to","date_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. For political / issue ads the default (relevance) order is already most-impressions-first; impressions_asc reverses it. It does not reorder commercial ads (they publish no impressions).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (the site's default)"},{"value":"newest","label":"Most recently started first"},{"value":"impressions_asc","label":"Fewest impressions first (political / issue ads)"}],"default":"relevance","example":"newest","aliases":["sort_by"]},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous search page. It carries that search's filters, so pass it alone.","on_invalid":"reject","example":"","aliases":["next_cursor"]}],"returns":"ads[]: the Ad Library ad object verbatim — ad_archive_id, page_id, page_name, is_active, start_date / end_date (unix), publisher_platform[], collation_id, collation_count (number of versions), categories, spend / impressions_with_index / reach_estimate / currency (political & issue ads), targeted_or_reached_countries, gated_type, contains_sensitive_content, contains_digital_created_media, snapshot{body, title, caption, link_url, link_description, cta_text, cta_type, display_format, images[], videos[], cards[], byline ('paid for by'), page_profile_uri, page_like_count, page_categories, extra_texts / links / images / videos …} — plus ad_library_url, start_date_iso, end_date_iso, body_text, title, link_url, cta_text, cta_type, display_format, paid_for_by, impressions_text, spend_min / spend_max, impressions_min / impressions_max, reach_min / reach_max (numbers parsed from the source's range strings, which are kept), page_like_count / page_profile_uri / page_categories (the advertiser's), is_branded_content, creator_page (branded content: the creator whose post is promoted), image_urls[], video_urls[], cards_count. Also total_count (the source's estimate; capped at 50,001), total_capped, total_is_exact (false), has_more, next_cursor, page, filters (echo).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"nike","country":"US"}},{"name":"ad","description":"One ad by its Ad Library id: the full ad card (same fields as search) plus the transparency details — advertiser page (name, category, likes, Instagram account and followers, verification, about text), page spend by disclaimer, political insights (age × gender share, reach by region), EU transparency (targeted countries, age, gender, EU reach and reach by country × age × gender), payer and beneficiary, financial-services licensing.","required_params":["ad_archive_id"],"optional_params":["country"],"params":[{"name":"ad_archive_id","type":"string","required":true,"description":"Ad Library id of the ad (`ad_archive_id` from search; an Ad Library URL …/ads/library/?id=… is accepted too).","on_invalid":"reject","example":"2775753672810016","value_pattern":"\\d{5,25}","aliases":["ad_id","id","library_id"]},{"name":"country","type":"string","required":false,"description":"Country for the transparency details (two-letter code or ALL). EU countries return EU reach and audience; the political insights follow the ad's own country.","on_invalid":"reject","default":"ALL","example":"DE","value_pattern":"(?i)[a-z]{2}|all"}],"returns":"ad{the Ad Library ad object verbatim — ad_archive_id, page_id, page_name, is_active, start_date / end_date (unix), publisher_platform[], collation_id, collation_count (number of versions), categories, spend / impressions_with_index / reach_estimate / currency (political & issue ads), targeted_or_reached_countries, gated_type, contains_sensitive_content, contains_digital_created_media, snapshot{body, title, caption, link_url, link_description, cta_text, cta_type, display_format, images[], videos[], cards[], byline ('paid for by'), page_profile_uri, page_like_count, page_categories, extra_texts / links / images / videos …} — plus ad_library_url, start_date_iso, end_date_iso, body_text, title, link_url, cta_text, cta_type, display_format, paid_for_by, impressions_text, spend_min / spend_max, impressions_min / impressions_max, reach_min / reach_max (numbers parsed from the source's range strings, which are kept), page_like_count / page_profile_uri / page_categories (the advertiser's), is_branded_content, creator_page (branded content: the creator whose post is promoted), image_urls[], video_urls[], cards_count}, details{advertiser{page{about, id}, ad_library_page_info{page_spend{lifetime_by_disclaimer[], weekly_by_disclaimer[], current_week, is_political_page}, page_info{page_name, page_category, likes, ig_username, ig_followers, ig_verification, page_verification, page_alias, page_profile_uri, ...}}}, insights{age_gender_data[], location_data[], single_country} (political), aaa_info{payer_beneficiary_data[], targets_eu, ...}, transparency_by_location{eu_transparency{location_audience[], gender_audience, age_audience, eu_total_reach, age_country_gender_reach_breakdown[]}, uk_transparency, br_transparency}, verified_voice_context, violation_types, ...} (source object verbatim)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"ad_archive_id":"2775753672810016"}},{"name":"variations","description":"Every version of a collated ad (the 'N ads use this creative and text' group): one ad row per version, same fields as search.","required_params":["collation_id"],"optional_params":["country","active_status","cursor"],"params":[{"name":"collation_id","type":"string","required":true,"description":"collation_id of an ad row whose collation_count is 2 or more.","on_invalid":"reject","example":"1304647241132349","value_pattern":"\\d{5,25}","aliases":["collation_group_id"]},{"name":"country","type":"string","required":false,"description":"Country filter for the versions (two-letter code or ALL).","on_invalid":"reject","default":"ALL","example":"ALL","value_pattern":"(?i)[a-z]{2}|all"},{"name":"active_status","type":"enum","required":false,"description":"Whether the version is running.","on_invalid":"reject","allowed_values":[{"value":"active","label":"Active"},{"value":"inactive","label":"Inactive"},{"value":"all","label":"All"}],"default":"all","example":"all"},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous variations page.","on_invalid":"reject","example":"","aliases":["next_cursor"]}],"returns":"ads[]: the Ad Library ad object verbatim — ad_archive_id, page_id, page_name, is_active, start_date / end_date (unix), publisher_platform[], collation_id, collation_count (number of versions), categories, spend / impressions_with_index / reach_estimate / currency (political & issue ads), targeted_or_reached_countries, gated_type, contains_sensitive_content, contains_digital_created_media, snapshot{body, title, caption, link_url, link_description, cta_text, cta_type, display_format, images[], videos[], cards[], byline ('paid for by'), page_profile_uri, page_like_count, page_categories, extra_texts / links / images / videos …} — plus ad_library_url, start_date_iso, end_date_iso, body_text, title, link_url, cta_text, cta_type, display_format, paid_for_by, impressions_text, spend_min / spend_max, impressions_min / impressions_max, reach_min / reach_max (numbers parsed from the source's range strings, which are kept), page_like_count / page_profile_uri / page_categories (the advertiser's), is_branded_content, creator_page (branded content: the creator whose post is promoted), image_urls[], video_urls[], cards_count. Also total_count, is_complete, has_more, next_cursor.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"collation_id":"1304647241132349"}},{"name":"advertisers","description":"Find advertisers (Facebook pages) by name, the way the Ad Library search box suggests them: page id, name, category, likes, Instagram username / followers / verification, verification badge, country. Use page_id with search / advertiser_targeting.","required_params":["query"],"optional_params":["country","ad_type"],"params":[{"name":"query","type":"string","required":true,"description":"Advertiser / page name to look up, as typed into the Ad Library search box.","on_invalid":"reject","example":"coca cola","aliases":["q","keyword","name"]},{"name":"country","type":"string","required":false,"description":"Country (two-letter code or ALL).","on_invalid":"reject","default":"ALL","example":"US","value_pattern":"(?i)[a-z]{2}|all"},{"name":"ad_type","type":"enum","required":false,"description":"Restrict to advertisers of political / issue ads.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All advertisers"},{"value":"political_and_issue_ads","label":"Advertisers of political / issue ads"}],"default":"all","example":"all"}],"returns":"advertisers[]{page_id, name, category, likes, verification, country, entity_type, ig_username, ig_followers, ig_verification, page_alias, page_is_deleted, image_uri, page_url, ads_url}, keyword_suggestions[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"coca cola"}},{"name":"advertiser_targeting","description":"How a page targets its political / social-issue ads over the last 7, 30 or 90 days, as the Ad Library 'Audience' tab shows it: total spend, number of ads, and spend share by location, age, gender, language, detailed targeting, custom and lookalike audiences. Pages with no such ads return empty lists.","required_params":["page_id"],"optional_params":["days"],"params":[{"name":"page_id","type":"string","required":true,"description":"Numeric Facebook page id.","on_invalid":"reject","example":"108107432370909","value_pattern":"\\d{5,25}","aliases":["advertiser_id","view_all_page_id"]},{"name":"days","type":"enum","required":false,"description":"Reporting window.","on_invalid":"reject","allowed_values":[{"value":"7","label":"Last 7 days"},{"value":"30","label":"Last 30 days"},{"value":"90","label":"Last 90 days"}],"default":"30","example":"30","aliases":["timeframe"]}],"returns":"page_id, page_name, has_political_ads, summary{total_spend_formatted, main_currency, total_num_ads, ds, detailed_spend[]}, by_location[], by_age[], by_gender[], by_language[], detailed_targeting[], custom_audiences[], lookalike_audiences[] (source objects verbatim)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"page_id":"108107432370909","days":"30"}}]},{"name":"facebook-marketplace","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Facebook Marketplace API — search the public local classifieds of a US metro by keyword or category and read a full listing: price, condition, description, every photo, the city it sits in, when it was posted and whether it is still available. Marketplace is city-scoped and so is this API: 47 metros by name, or any Facebook city id.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/facebook-marketplace/v1","spec_available":true,"actions":[{"name":"search","description":"Search one metro's Marketplace listings by keyword: listing id, title, price (with the seller's earlier price when it was lowered), the city and state the item sits in, when it was posted, whether it is sold or pending, its photo and how it changes hands. Filter by price range, how recently it was posted, condition, delivery method and pending status; order by best match, newest, price or distance. The response always names the location Facebook actually resolved.","required_params":["query"],"optional_params":["location","price_min","price_max","days_listed","sort","condition","delivery","availability","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as a shopper would type it.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"location","type":"string","required":false,"description":"Which metro to search. Facebook Marketplace is city-scoped and the inventory really is different per city: six cities were compared against New York on the same query and none shared a single listing id. 47 US metros are supported by name; any other Facebook city can be reached by passing the numeric city id that every response returns as location.id. The response always names the location that was actually searched.","on_invalid":"reject","allowed_values":[{"value":"albuquerque","label":"albuquerque"},{"value":"anchorage","label":"anchorage"},{"value":"atlanta","label":"atlanta"},{"value":"austin","label":"austin"},{"value":"baltimore","label":"baltimore"},{"value":"boise","label":"boise"},{"value":"boston","label":"boston"},{"value":"buffalo","label":"buffalo"},{"value":"charlotte","label":"charlotte"},{"value":"chicago","label":"chicago"},{"value":"cincinnati","label":"cincinnati"},{"value":"cleveland","label":"cleveland"},{"value":"columbus","label":"columbus"},{"value":"dallas","label":"dallas"},{"value":"denver","label":"denver"},{"value":"detroit","label":"detroit"},{"value":"honolulu","label":"honolulu"},{"value":"houston","label":"houston"},{"value":"indianapolis","label":"indianapolis"},{"value":"jacksonville","label":"jacksonville"},{"value":"kansascity","label":"kansascity"},{"value":"la","label":"la"},{"value":"louisville","label":"louisville"},{"value":"memphis","label":"memphis"},{"value":"miami","label":"miami"},{"value":"milwaukee","label":"milwaukee"},{"value":"minneapolis","label":"minneapolis"},{"value":"nashville","label":"nashville"},{"value":"neworleans","label":"neworleans"},{"value":"nyc","label":"nyc"},{"value":"omaha","label":"omaha"},{"value":"orlando","label":"orlando"},{"value":"philly","label":"philly"},{"value":"phoenix","label":"phoenix"},{"value":"pittsburgh","label":"pittsburgh"},{"value":"portland","label":"portland"},{"value":"raleigh","label":"raleigh"},{"value":"richmond","label":"richmond"},{"value":"saltlakecity","label":"saltlakecity"},{"value":"sanantonio","label":"sanantonio"},{"value":"sandiego","label":"sandiego"},{"value":"sanfrancisco","label":"sanfrancisco"},{"value":"seattle","label":"seattle"},{"value":"stlouis","label":"stlouis"},{"value":"tampa","label":"tampa"},{"value":"tucson","label":"tucson"},{"value":"vegas","label":"vegas"}],"default":"nyc","example":"nyc","value_pattern":"\\d{5,}","aliases":["city"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price to include, in the market's currency.","on_invalid":"reject","example":500,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price to include, in the market's currency.","on_invalid":"reject","example":2000,"minimum":0},{"name":"days_listed","type":"enum","required":false,"description":"Only listings posted within this many days.","on_invalid":"reject","allowed_values":[{"value":1,"label":"last 24 hours"},{"value":7,"label":"last 7 days"},{"value":30,"label":"last 30 days"}],"example":7},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match (the site's default)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"distance","label":"Nearest first (the distance itself is not published)"}],"default":"best_match","example":"newest"},{"name":"condition","type":"enum","required":false,"description":"The condition the seller graded the item.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used_like_new","label":"Used - like new"},{"value":"used_good","label":"Used - good"},{"value":"used_fair","label":"Used - fair"}],"example":"new"},{"name":"delivery","type":"enum","required":false,"description":"How the item changes hands. 'shipping' returns nationwide listings, not just the chosen metro.","on_invalid":"reject","allowed_values":[{"value":"local_pickup","label":"Local pickup"},{"value":"shipping","label":"Shipped"}],"example":"shipping"},{"name":"availability","type":"enum","required":false,"description":"Restrict to listings the site marks as no longer freely available. Measured: these come back with status PENDING (a sale in progress), not sold.","on_invalid":"reject","allowed_values":[{"value":"pending","label":"Sale pending"}],"example":"pending"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to re-try this request before giving up.","on_invalid":"reject","default":4,"minimum":1,"maximum":6}],"returns":"results[]{listing_id, title, custom_title (vehicles carry the seller's own wording here), subtitles[] (the card's extra facts, e.g. a vehicle's mileage), url, price, price_formatted, price_was (the seller's earlier price when it was lowered), price_min, price_max, currency, city, state, city_id, posted_at, is_sold, is_pending, is_live, category_id, image, has_video, delivery_types[], listing_type}, count, total_results (null — the source publishes no count), source_has_more (the source's own flag, and it was True on EVERY call measured including ones with zero rows — do not read it as evidence that inventory exists), location{name, id}, currency, filters_applied[], dropped_non_listing_tiles","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","location":"nyc"}},{"name":"category","description":"Browse one of Facebook Marketplace's 17 categories inside a metro — vehicles, property for sale, property rentals, electronics, apparel, free stuff and the rest — with the same row shape and the same filters as search.","required_params":["category"],"optional_params":["location","price_min","price_max","days_listed","sort","condition","delivery","availability","max_rotations"],"params":[{"name":"category","type":"enum","required":true,"description":"Which Marketplace category to browse.","on_invalid":"reject","allowed_values":[{"value":"apparel","label":"Apparel"},{"value":"classifieds","label":"Classifieds"},{"value":"electronics","label":"Electronics"},{"value":"entertainment","label":"Entertainment"},{"value":"family","label":"Family"},{"value":"free","label":"Free Stuff"},{"value":"garden","label":"Garden & Outdoor"},{"value":"hobbies","label":"Hobbies"},{"value":"home","label":"Home Goods"},{"value":"home-improvements","label":"Home Improvement Supplies"},{"value":"instruments","label":"Musical Instruments"},{"value":"pets","label":"Pet Supplies"},{"value":"propertyforsale","label":"Home Sales"},{"value":"propertyrentals","label":"Property Rentals"},{"value":"sports","label":"Sporting Goods"},{"value":"toys","label":"Toys & Games"},{"value":"vehicles","label":"Vehicles"}],"example":"vehicles"},{"name":"location","type":"string","required":false,"description":"Which metro to search. Facebook Marketplace is city-scoped and the inventory really is different per city: six cities were compared against New York on the same query and none shared a single listing id. 47 US metros are supported by name; any other Facebook city can be reached by passing the numeric city id that every response returns as location.id. The response always names the location that was actually searched.","on_invalid":"reject","allowed_values":[{"value":"albuquerque","label":"albuquerque"},{"value":"anchorage","label":"anchorage"},{"value":"atlanta","label":"atlanta"},{"value":"austin","label":"austin"},{"value":"baltimore","label":"baltimore"},{"value":"boise","label":"boise"},{"value":"boston","label":"boston"},{"value":"buffalo","label":"buffalo"},{"value":"charlotte","label":"charlotte"},{"value":"chicago","label":"chicago"},{"value":"cincinnati","label":"cincinnati"},{"value":"cleveland","label":"cleveland"},{"value":"columbus","label":"columbus"},{"value":"dallas","label":"dallas"},{"value":"denver","label":"denver"},{"value":"detroit","label":"detroit"},{"value":"honolulu","label":"honolulu"},{"value":"houston","label":"houston"},{"value":"indianapolis","label":"indianapolis"},{"value":"jacksonville","label":"jacksonville"},{"value":"kansascity","label":"kansascity"},{"value":"la","label":"la"},{"value":"louisville","label":"louisville"},{"value":"memphis","label":"memphis"},{"value":"miami","label":"miami"},{"value":"milwaukee","label":"milwaukee"},{"value":"minneapolis","label":"minneapolis"},{"value":"nashville","label":"nashville"},{"value":"neworleans","label":"neworleans"},{"value":"nyc","label":"nyc"},{"value":"omaha","label":"omaha"},{"value":"orlando","label":"orlando"},{"value":"philly","label":"philly"},{"value":"phoenix","label":"phoenix"},{"value":"pittsburgh","label":"pittsburgh"},{"value":"portland","label":"portland"},{"value":"raleigh","label":"raleigh"},{"value":"richmond","label":"richmond"},{"value":"saltlakecity","label":"saltlakecity"},{"value":"sanantonio","label":"sanantonio"},{"value":"sandiego","label":"sandiego"},{"value":"sanfrancisco","label":"sanfrancisco"},{"value":"seattle","label":"seattle"},{"value":"stlouis","label":"stlouis"},{"value":"tampa","label":"tampa"},{"value":"tucson","label":"tucson"},{"value":"vegas","label":"vegas"}],"default":"nyc","example":"nyc","value_pattern":"\\d{5,}","aliases":["city"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price to include, in the market's currency.","on_invalid":"reject","example":500,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price to include, in the market's currency.","on_invalid":"reject","example":2000,"minimum":0},{"name":"days_listed","type":"enum","required":false,"description":"Only listings posted within this many days.","on_invalid":"reject","allowed_values":[{"value":1,"label":"last 24 hours"},{"value":7,"label":"last 7 days"},{"value":30,"label":"last 30 days"}],"example":7},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match (the site's default)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"distance","label":"Nearest first (the distance itself is not published)"}],"default":"best_match","example":"newest"},{"name":"condition","type":"enum","required":false,"description":"The condition the seller graded the item.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used_like_new","label":"Used - like new"},{"value":"used_good","label":"Used - good"},{"value":"used_fair","label":"Used - fair"}],"example":"new"},{"name":"delivery","type":"enum","required":false,"description":"How the item changes hands. 'shipping' returns nationwide listings, not just the chosen metro.","on_invalid":"reject","allowed_values":[{"value":"local_pickup","label":"Local pickup"},{"value":"shipping","label":"Shipped"}],"example":"shipping"},{"name":"availability","type":"enum","required":false,"description":"Restrict to listings the site marks as no longer freely available. Measured: these come back with status PENDING (a sale in progress), not sold.","on_invalid":"reject","allowed_values":[{"value":"pending","label":"Sale pending"}],"example":"pending"},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to re-try this request before giving up.","on_invalid":"reject","default":4,"minimum":1,"maximum":6}],"returns":"results[]{listing_id, title, custom_title (vehicles carry the seller's own wording here), subtitles[] (the card's extra facts, e.g. a vehicle's mileage), url, price, price_formatted, price_was (the seller's earlier price when it was lowered), price_min, price_max, currency, city, state, city_id, posted_at, is_sold, is_pending, is_live, category_id, image, has_video, delivery_types[], listing_type}, count, total_results (null — the source publishes no count), source_has_more (the source's own flag, and it was True on EVERY call measured including ones with zero rows — do not read it as evidence that inventory exists), location{name, id}, currency, filters_applied[], dropped_non_listing_tiles, category{slug, name, id}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"vehicles","location":"nyc"}},{"name":"listing","description":"The full listing by id or URL: title, the seller's full description, price and currency, the condition they graded it, the category path, every photo with its dimensions, the city it sits in with the city-level coordinates the site rounds to, when it was posted, whether it is available, pending or sold, how it can be delivered, and the seller as the public listing shows them: name, profile link, profile photo, the date they joined, and their 5-star rating with its count.","required_params":["listing_id"],"optional_params":["seller_attempts","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The number at the end of a Marketplace listing URL (facebook.com/marketplace/item/4511313592443983/ -> 4511313592443983). Every search row returns it as listing_id. A full URL is accepted too.","on_invalid":"reject","example":"4511313592443983","aliases":["id","url"]},{"name":"seller_attempts","type":"integer","required":false,"description":"How hard to try for the seller. Facebook includes the seller on only about one in ten of its public listing responses, at random - the same listing carries it on one read and not the next. 1 (the default) returns whatever the first response had. Raise it and the listing is read again until the seller appears, up to this many reads, which makes the call slower. Measured on 9 listings: 0 of 9 had the seller on the first read, 3 of 9 within six. The answer always reports seller_available and seller_lookups, so you can see what it cost and whether it worked.","on_invalid":"reject","default":1,"example":4,"minimum":1,"maximum":6},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to re-try this request before giving up.","on_invalid":"reject","default":4,"minimum":1,"maximum":6}],"returns":"listing{listing_id, title, custom_title, subtitles[], url, description, price, price_formatted, price_was, currency, condition, condition_label, attributes[]{name, value, label} (EMPTY on vehicles — the source leaves it so), vehicle{make, model, trim, odometer, odometer_unit, exterior_color, interior_color, fuel_type, transmission, number_of_owners, is_paid_off, seller_type, mpg_city, mpg_highway, mpg_combined, engine_size, horse_power} (null when the listing is not a vehicle), category, category_slug, category_id, category_path[]{name, slug, id}, location_text, latitude, longitude (city-level, as the site rounds them), posted_at, status, is_sold, is_pending, is_live, inventory_count, photos[]{url, width, height, caption}, photo_count, has_video, delivery_types[], shipping_offered, listing_type, seller{name, profile_id, profile_url, user_token, profile_picture, joined_at, rating, rating_count, ratings_are_private, combined_rating, combined_rating_count, is_verified, type} (null when this response did not carry it — see seller_attempts), seller_type (e.g. PRIVATE_SELLER on vehicles), is_business_seller, seller_badges[], seller_badge_summary (e.g. 'Highly rated on Marketplace'), seller_shop_id, dealership_name, seller_phone, seller_website, listing_address}, seller_available, seller_lookups","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"4511313592443983"}}]},{"name":"fairprice","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"FairPrice API — Singapore supermarket prices from fairprice.com.sg: price paid and regular price, discount, multi-buy deals, deposit, price per kg/l, stock, barcodes, ingredients and nutrition","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/fairprice/v1","spec_available":true,"actions":[{"name":"search","description":"Search NTUC FairPrice's online shop (Singapore): price paid and regular price, discount S$ and %, multi-buy deal, spend-and-save and gift promotions, container deposit, pack size and price per kg/l/pc, stock level, brand, barcodes, origin, dietary labels, rating. `query` required; filters brand, diet, origin, promo_type, min_price/max_price (FairPrice's price bands); sort; page; optional postal_code or store_id for that store's range and stock.","required_params":["query"],"optional_params":["brand","diet","origin","promo_type","min_price","max_price","sort","page","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed on fairprice.com.sg (English). A barcode or the FairPrice SKU also works.","on_invalid":"reject","example":"milk","aliases":["q","keyword","search","term"]},{"name":"brand","type":"string","required":false,"description":"Brand as its slug (a row's `brand_slug`, e.g. marigold, nestle-nan) or its printed name (Marigold).","on_invalid":"reject","example":"marigold","aliases":["brand_slug"]},{"name":"diet","type":"enum","required":false,"description":"One dietary attribute (the site's own facet): halal, healthier_choice, organic, vegetarian, gluten_free, lactose_free, trans_fat_free, hypoallergenic.","on_invalid":"reject","allowed_values":[{"value":"halal","label":"Halal"},{"value":"healthier_choice","label":"Healthier Choice"},{"value":"organic","label":"Organic"},{"value":"vegetarian","label":"Vegetarian"},{"value":"gluten_free","label":"Gluten-Free"},{"value":"lactose_free","label":"Lactose-Free"},{"value":"trans_fat_free","label":"Trans-Fat Free"},{"value":"hypoallergenic","label":"Hypoallergenic"}],"aliases":["dietary"]},{"name":"origin","type":"string","required":false,"description":"Country/place of origin as the site prints it (e.g. Japan, Malaysia, New Zealand).","on_invalid":"reject","example":"Japan","aliases":["country","country_of_origin"]},{"name":"promo_type","type":"enum","required":false,"description":"Only products in one FairPrice promotion programme: everyday_low_price, mix_and_match, price_slash (lowest price in 30 days), carton_and_bundle, promotions_boost, flash_sale, fresh_picks, free_gift, pwp.","on_invalid":"reject","allowed_values":[{"value":"everyday_low_price","label":"everyday-low-price"},{"value":"mix_and_match","label":"mix-and-match-1"},{"value":"price_slash","label":"curated-lowest-price-in-30-days"},{"value":"carton_and_bundle","label":"carton-and-bundle-deals"},{"value":"promotions_boost","label":"promotions-boost"},{"value":"flash_sale","label":"campaign-flash-sale"},{"value":"fresh_picks","label":"fresh-picks-1"},{"value":"free_gift","label":"free-gift-with-purchase"},{"value":"pwp","label":"pwp"}],"aliases":["promotion","tag"]},{"name":"min_price","type":"number","required":false,"description":"Lower bound of the REGULAR price in SGD. FairPrice only filters by its own price bands, so this must be one of 0, 3, 5, 10, 25 (any other value is rejected, not rounded).","on_invalid":"reject","example":3,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Upper bound of the REGULAR price in SGD: one of 3, 5, 10, 25. The band is applied to the regular price (`regular_price`, or `price` when there is no cut), so a discounted item whose regular price is above the bound is not returned.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc (by regular price) · brand_asc · brand_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"brand_asc","label":"brand_asc"},{"value":"brand_desc","label":"brand_desc"}],"default":"relevance","aliases":["sort_by","sorting"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50. Pages hold 20 products (fixed by the source); the source stops at page 50, so a listing shows at most 1,000 products.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"postal_code","type":"string","required":false,"description":"Singapore postal code (6 digits). FairPrice serves each address from one store and the range, stock and some discounts follow that store (measured: 'milk' 1,445 products at the default store, 1,244 at Sun Plaza, 719 at Bedok Mall). Omit for the site's default store. Costs one extra small lookup.","on_invalid":"reject","example":"529510","aliases":["pincode","postcode","zip","zip_code"]},{"name":"store_id","type":"integer","required":false,"description":"FairPrice store id as the `store` action returns it (e.g. 45). Takes precedence over postal_code.","on_invalid":"reject","example":45,"minimum":1,"maximum":100000,"aliases":["store"]}],"returns":"store{store_id, store_name, resolved_from}, query, category, filters, sort, total, page, page_size, last_page, has_more, returned, facets{brand[], Dietary Attributes[], Country/Place Of Origin[], price[], tag[]}, results[]{rank, product_id (-> product.product_id), sku, slug, name, brand, brand_slug, barcodes[], price (what a shopper pays), regular_price (price before the cut, null when no cut), discount_amount, discount_percent, currency (SGD), on_offer, price_cut_valid_to, multibuy{text, quantity, total_price, price_each, mix_and_match, any_of_product_ids[], valid_from, valid_to}, promotions[]{offer_id, type, kind (spend_and_save|spend_get_gift|buy_get_gift|other), text, short_text, quantity, total, total_type, min_spend, valid_from, valid_to}, pack_size, unit_price (price per kg / l / pc computed from pack_size), unit_price_unit, source_unit_price_text, sold_by_weight, deposit{amount, text}, in_stock, stock_level, online_stock, sponsored, rating, review_count, category{id, name, slug}, category_path[], origin, dietary[], nutrigrade, supplier, marketplace_seller, store{store_id, store_name}, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk"}},{"name":"category","description":"List one FairPrice category (slug from `categories`, e.g. fresh-milk) with the same row fields, filters and sorts as `search`.","required_params":["category"],"optional_params":["brand","diet","origin","promo_type","min_price","max_price","sort","page","postal_code","store_id"],"params":[{"name":"category","type":"string","required":true,"description":"Category slug as `categories` returns it (e.g. fresh-milk, dairy-chilled-eggs) or a fairprice.com.sg/category/<slug> URL.","on_invalid":"reject","example":"fresh-milk","aliases":["category_slug","slug"]},{"name":"brand","type":"string","required":false,"description":"Brand as its slug (a row's `brand_slug`, e.g. marigold, nestle-nan) or its printed name (Marigold).","on_invalid":"reject","example":"marigold","aliases":["brand_slug"]},{"name":"diet","type":"enum","required":false,"description":"One dietary attribute (the site's own facet): halal, healthier_choice, organic, vegetarian, gluten_free, lactose_free, trans_fat_free, hypoallergenic.","on_invalid":"reject","allowed_values":[{"value":"halal","label":"Halal"},{"value":"healthier_choice","label":"Healthier Choice"},{"value":"organic","label":"Organic"},{"value":"vegetarian","label":"Vegetarian"},{"value":"gluten_free","label":"Gluten-Free"},{"value":"lactose_free","label":"Lactose-Free"},{"value":"trans_fat_free","label":"Trans-Fat Free"},{"value":"hypoallergenic","label":"Hypoallergenic"}],"aliases":["dietary"]},{"name":"origin","type":"string","required":false,"description":"Country/place of origin as the site prints it (e.g. Japan, Malaysia, New Zealand).","on_invalid":"reject","example":"Japan","aliases":["country","country_of_origin"]},{"name":"promo_type","type":"enum","required":false,"description":"Only products in one FairPrice promotion programme: everyday_low_price, mix_and_match, price_slash (lowest price in 30 days), carton_and_bundle, promotions_boost, flash_sale, fresh_picks, free_gift, pwp.","on_invalid":"reject","allowed_values":[{"value":"everyday_low_price","label":"everyday-low-price"},{"value":"mix_and_match","label":"mix-and-match-1"},{"value":"price_slash","label":"curated-lowest-price-in-30-days"},{"value":"carton_and_bundle","label":"carton-and-bundle-deals"},{"value":"promotions_boost","label":"promotions-boost"},{"value":"flash_sale","label":"campaign-flash-sale"},{"value":"fresh_picks","label":"fresh-picks-1"},{"value":"free_gift","label":"free-gift-with-purchase"},{"value":"pwp","label":"pwp"}],"aliases":["promotion","tag"]},{"name":"min_price","type":"number","required":false,"description":"Lower bound of the REGULAR price in SGD. FairPrice only filters by its own price bands, so this must be one of 0, 3, 5, 10, 25 (any other value is rejected, not rounded).","on_invalid":"reject","example":3,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Upper bound of the REGULAR price in SGD: one of 3, 5, 10, 25. The band is applied to the regular price (`regular_price`, or `price` when there is no cut), so a discounted item whose regular price is above the bound is not returned.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc (by regular price) · brand_asc · brand_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"brand_asc","label":"brand_asc"},{"value":"brand_desc","label":"brand_desc"}],"default":"relevance","aliases":["sort_by","sorting"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50. Pages hold 20 products (fixed by the source); the source stops at page 50, so a listing shows at most 1,000 products.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"postal_code","type":"string","required":false,"description":"Singapore postal code (6 digits). FairPrice serves each address from one store and the range, stock and some discounts follow that store (measured: 'milk' 1,445 products at the default store, 1,244 at Sun Plaza, 719 at Bedok Mall). Omit for the site's default store. Costs one extra small lookup.","on_invalid":"reject","example":"529510","aliases":["pincode","postcode","zip","zip_code"]},{"name":"store_id","type":"integer","required":false,"description":"FairPrice store id as the `store` action returns it (e.g. 45). Takes precedence over postal_code.","on_invalid":"reject","example":45,"minimum":1,"maximum":100000,"aliases":["store"]}],"returns":"store{store_id, store_name, resolved_from}, query, category, filters, sort, total, page, page_size, last_page, has_more, returned, facets{brand[], Dietary Attributes[], Country/Place Of Origin[], price[], tag[]}, results[]{rank, product_id (-> product.product_id), sku, slug, name, brand, brand_slug, barcodes[], price (what a shopper pays), regular_price (price before the cut, null when no cut), discount_amount, discount_percent, currency (SGD), on_offer, price_cut_valid_to, multibuy{text, quantity, total_price, price_each, mix_and_match, any_of_product_ids[], valid_from, valid_to}, promotions[]{offer_id, type, kind (spend_and_save|spend_get_gift|buy_get_gift|other), text, short_text, quantity, total, total_type, min_spend, valid_from, valid_to}, pack_size, unit_price (price per kg / l / pc computed from pack_size), unit_price_unit, source_unit_price_text, sold_by_weight, deposit{amount, text}, in_stock, stock_level, online_stock, sponsored, rating, review_count, category{id, name, slug}, category_path[], origin, dietary[], nutrigrade, supplier, marketplace_seller, store{store_id, store_name}, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"fresh-milk"}},{"name":"promotions","description":"Everything FairPrice has on promotion right now (the site's promotions page, 28,563 products on 2026-10-15): price paid, regular price, discount, multi-buy and gift deals. Narrow with brand, diet, origin, promo_type, price bands. For promotions matching words, use `search` with `promo_type`.","required_params":[],"optional_params":["brand","diet","origin","promo_type","min_price","max_price","sort","page","postal_code","store_id"],"params":[{"name":"brand","type":"string","required":false,"description":"Brand as its slug (a row's `brand_slug`, e.g. marigold, nestle-nan) or its printed name (Marigold).","on_invalid":"reject","example":"marigold","aliases":["brand_slug"]},{"name":"diet","type":"enum","required":false,"description":"One dietary attribute (the site's own facet): halal, healthier_choice, organic, vegetarian, gluten_free, lactose_free, trans_fat_free, hypoallergenic.","on_invalid":"reject","allowed_values":[{"value":"halal","label":"Halal"},{"value":"healthier_choice","label":"Healthier Choice"},{"value":"organic","label":"Organic"},{"value":"vegetarian","label":"Vegetarian"},{"value":"gluten_free","label":"Gluten-Free"},{"value":"lactose_free","label":"Lactose-Free"},{"value":"trans_fat_free","label":"Trans-Fat Free"},{"value":"hypoallergenic","label":"Hypoallergenic"}],"aliases":["dietary"]},{"name":"origin","type":"string","required":false,"description":"Country/place of origin as the site prints it (e.g. Japan, Malaysia, New Zealand).","on_invalid":"reject","example":"Japan","aliases":["country","country_of_origin"]},{"name":"promo_type","type":"enum","required":false,"description":"Only products in one FairPrice promotion programme: everyday_low_price, mix_and_match, price_slash (lowest price in 30 days), carton_and_bundle, promotions_boost, flash_sale, fresh_picks, free_gift, pwp.","on_invalid":"reject","allowed_values":[{"value":"everyday_low_price","label":"everyday-low-price"},{"value":"mix_and_match","label":"mix-and-match-1"},{"value":"price_slash","label":"curated-lowest-price-in-30-days"},{"value":"carton_and_bundle","label":"carton-and-bundle-deals"},{"value":"promotions_boost","label":"promotions-boost"},{"value":"flash_sale","label":"campaign-flash-sale"},{"value":"fresh_picks","label":"fresh-picks-1"},{"value":"free_gift","label":"free-gift-with-purchase"},{"value":"pwp","label":"pwp"}],"aliases":["promotion","tag"]},{"name":"min_price","type":"number","required":false,"description":"Lower bound of the REGULAR price in SGD. FairPrice only filters by its own price bands, so this must be one of 0, 3, 5, 10, 25 (any other value is rejected, not rounded).","on_invalid":"reject","example":3,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Upper bound of the REGULAR price in SGD: one of 3, 5, 10, 25. The band is applied to the regular price (`regular_price`, or `price` when there is no cut), so a discounted item whose regular price is above the bound is not returned.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc (by regular price) · brand_asc · brand_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"brand_asc","label":"brand_asc"},{"value":"brand_desc","label":"brand_desc"}],"default":"relevance","aliases":["sort_by","sorting"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50. Pages hold 20 products (fixed by the source); the source stops at page 50, so a listing shows at most 1,000 products.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"postal_code","type":"string","required":false,"description":"Singapore postal code (6 digits). FairPrice serves each address from one store and the range, stock and some discounts follow that store (measured: 'milk' 1,445 products at the default store, 1,244 at Sun Plaza, 719 at Bedok Mall). Omit for the site's default store. Costs one extra small lookup.","on_invalid":"reject","example":"529510","aliases":["pincode","postcode","zip","zip_code"]},{"name":"store_id","type":"integer","required":false,"description":"FairPrice store id as the `store` action returns it (e.g. 45). Takes precedence over postal_code.","on_invalid":"reject","example":45,"minimum":1,"maximum":100000,"aliases":["store"]}],"returns":"store{store_id, store_name, resolved_from}, query, category, filters, sort, total, page, page_size, last_page, has_more, returned, facets{brand[], Dietary Attributes[], Country/Place Of Origin[], price[], tag[]}, results[]{rank, product_id (-> product.product_id), sku, slug, name, brand, brand_slug, barcodes[], price (what a shopper pays), regular_price (price before the cut, null when no cut), discount_amount, discount_percent, currency (SGD), on_offer, price_cut_valid_to, multibuy{text, quantity, total_price, price_each, mix_and_match, any_of_product_ids[], valid_from, valid_to}, promotions[]{offer_id, type, kind (spend_and_save|spend_get_gift|buy_get_gift|other), text, short_text, quantity, total, total_type, min_spend, valid_from, valid_to}, pack_size, unit_price (price per kg / l / pc computed from pack_size), unit_price_unit, source_unit_price_text, sold_by_weight, deposit{amount, text}, in_stock, stock_level, online_stock, sponsored, rating, review_count, category{id, name, slug}, category_path[], origin, dietary[], nutrigrade, supplier, marketplace_seller, store{store_id, store_name}, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"marigold"}},{"name":"product","description":"One FairPrice product by the `product_id` a search row returns (or its slug / URL): prices, discount with its end date, multi-buy and other promotions, deposit, stock at the store, barcodes, category path, images, and the label: key information, ingredients, storage, preparation, Nutri-Grade, nutrition table, product details.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"The `product_id` a search row returns (e.g. 1623656), or the row's `slug`, or a fairprice.com.sg/product/<slug> URL.","on_invalid":"reject","example":"1623656","aliases":["id","slug","url","product_url"]},{"name":"postal_code","type":"string","required":false,"description":"Singapore postal code (6 digits). FairPrice serves each address from one store and the range, stock and some discounts follow that store (measured: 'milk' 1,445 products at the default store, 1,244 at Sun Plaza, 719 at Bedok Mall). Omit for the site's default store. Costs one extra small lookup.","on_invalid":"reject","example":"529510","aliases":["pincode","postcode","zip","zip_code"]},{"name":"store_id","type":"integer","required":false,"description":"FairPrice store id as the `store` action returns it (e.g. 45). Takes precedence over postal_code.","on_invalid":"reject","example":45,"minimum":1,"maximum":100000,"aliases":["store"]}],"returns":"product{product_id, sku, slug, name, brand, brand_slug, barcodes[], price, regular_price, discount_amount, discount_percent, currency, on_offer, price_cut_valid_to, multibuy{...}, promotions[]{...}, pack_size, unit_price, unit_price_unit, source_unit_price_text, sold_by_weight, deposit, in_stock, stock_level, online_stock, sponsored, rating, review_count, category, category_path[], origin, dietary[], nutrigrade, supplier, marketplace_seller, store, image, url, images[], description, key_information, ingredients, storage, preparation, pack_type, product_type, nutrition{columns[], rows[]{nutrient, values[]}}, linkpoint_eligible, details[]{label, value}, tags[], secondary_category_ids[]}, store","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"1623656"}},{"name":"categories","description":"FairPrice's category tree from the shop menu (1,004 nodes on 2026-10-15): slug, id, name, URL, children. Slugs feed `category`.","required_params":[],"optional_params":["category","postal_code","store_id"],"params":[{"name":"category","type":"string","required":false,"description":"Return only this category's subtree; omit for the whole tree.","on_invalid":"reject","example":"dairy-chilled-eggs","aliases":["category_slug","parent"]},{"name":"postal_code","type":"string","required":false,"description":"Singapore postal code (6 digits). FairPrice serves each address from one store and the range, stock and some discounts follow that store (measured: 'milk' 1,445 products at the default store, 1,244 at Sun Plaza, 719 at Bedok Mall). Omit for the site's default store. Costs one extra small lookup.","on_invalid":"reject","example":"529510","aliases":["pincode","postcode","zip","zip_code"]},{"name":"store_id","type":"integer","required":false,"description":"FairPrice store id as the `store` action returns it (e.g. 45). Takes precedence over postal_code.","on_invalid":"reject","example":45,"minimum":1,"maximum":100000,"aliases":["store"]}],"returns":"parent, store, total_categories, categories[]{category, category_id, name, url, parent, depth, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"dairy-chilled-eggs"}},{"name":"store","description":"Which FairPrice store delivers to a Singapore postal code (the store whose range and stock the listings show when you pass the same `postal_code`, or its `store_id`).","required_params":["postal_code"],"optional_params":[],"params":[{"name":"postal_code","type":"string","required":true,"description":"Singapore postal code, 6 digits.","on_invalid":"reject","example":"529510","aliases":["pincode","postcode","zip","zip_code"]}],"returns":"postal_code, store_id, store_name, store_address, store_code, zone_id, delivery_fee, available_stores[]{store_id, store_name}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"529510"}}]},{"name":"falabella","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Falabella API scraper — falabella.com (Chile, Colombia, Peru): search and browse products with the internet price, event price, CMR card price and struck normal price kept apart, Falabella vs marketplace seller with seller rating, stock and delivery options, specifications, variants, ratings and reviews. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/falabella/v1","spec_available":true,"actions":[{"name":"search","description":"Search Falabella by keyword in Chile, Colombia or Peru. Each product comes with the price anyone pays online (internet or event price), the CMR card price and the struck normal price in separate fields, the discount, the seller (Falabella, a Falabella group store such as Sodimac or Tottus, or a marketplace seller), delivery badges, interest-free installments, variants and Falabella's search rating. Sort by price or rating; filter by brand, rating, discount or any filter Falabella lists. Keywords Falabella sends to a collection, category or product are followed; sponsored rows are removed and counted.","required_params":["query"],"optional_params":["country","page","sort","brand","min_rating","min_discount_pct","filters","include_sponsored","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Words a shopper would type on Falabella (Spanish).","on_invalid":"reject","example":"televisor","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Falabella storefront: cl (falabella.com, CLP), co (falabella.com.co, COP) or pe (falabella.com.pe, PEN). Prices, currency and catalogue follow the country.","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — falabella.com (CLP)"},{"value":"co","label":"Colombia — falabella.com.co (COP)"},{"value":"pe","label":"Peru — falabella.com.pe (PEN)"}],"default":"cl","example":"cl"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Falabella serves 48 organic products per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Falabella's own sort orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Recomendados"},{"value":"price_asc","label":"Precio de menor a mayor"},{"value":"price_desc","label":"Precio de mayor a menor"},{"value":"rating","label":"Los mejores evaluados"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand as Falabella lists it (e.g. samsung); same as filters f.product.brandName=samsung.","on_invalid":"reject","example":"samsung"},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (2-5), as Falabella's rating filter.","on_invalid":"reject","example":4,"minimum":2,"maximum":5},{"name":"min_discount_pct","type":"enum","required":false,"description":"Only products discounted at least this much (Falabella's 20/30/40/50% steps).","on_invalid":"reject","allowed_values":[{"value":"20","label":"20% dcto y más"},{"value":"30","label":"30% dcto y más"},{"value":"40","label":"40% dcto y más"},{"value":"50","label":"50% dcto y más"}],"example":"30"},{"name":"filters","type":"array","required":false,"description":"Any filter exactly as returned in filters_available[].values[].filter of a previous call (price bucket, seller type, category, size, colour, …). Several may be sent.","on_invalid":"reject","example":["f.range.derived.price.search=$100.000 - $200.000"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Sponsored rows are left out and counted in sponsored_dropped. true: returned with sponsored true.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no product matches the keyword, Falabella fills the page with unrelated products. They are dropped and counted in fallback_results_dropped; true returns them separately in fallback_results.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, sku_id, title, brand, url, image, images[], price, price_max, price_type (internet|event|normal), cmr_price (CMR card only), list_price (struck), discount_pct, cmr_discount_pct, cmr_saving, other_prices[], currency, discount_badge_pct, seller{id, name, kind (falabella|falabella_group|marketplace), is_falabella, verified}, marketplace, search_index_rating, search_index_review_count (search-index figures; product/detail has the review system's), rating_scale, badges[], delivery_badges[]{type, label}, installments[]{count, interest_free, payment_methods[]}, top_specifications[], best_seller, product_type, variants[]{type, options[]{value, variant_id, available, purchasable, price, url}}, sponsored}, count (organic rows), sponsored_dropped, sponsored_included, total_results, total_pages, page, page_size, has_more, page_notice, filters_available[]{name, type, values[]{label, count, filter, selected}}, site_applied_filters[], redirected_to{type, id, url}, sort, applied_filters, country, currency, query, matched_query, keyword_matches_on_page, site_semantic_fallback, fallback_results_dropped, fallback_total, fallback_results[] (opt-in)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"televisor"}},{"name":"category","description":"Every product in a Falabella category or collection (by id or URL), paged, with the same rows, sorts and filters as search, plus the category breadcrumb.","required_params":["category"],"optional_params":["country","page","sort","brand","min_rating","min_discount_pct","filters","include_sponsored","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A Falabella category id (cat690239, CATG36089), a category URL (/falabella-cl/category/cat690239/Zapatillas-urbanas-mujer), a collection URL (/falabella-cl/collection/iphone) or a brand page URL (/falabella-cl/brand/SAMSUNG).","on_invalid":"reject","example":"cat690239","aliases":["category_id","collection","url"]},{"name":"country","type":"enum","required":false,"description":"Falabella storefront: cl (falabella.com, CLP), co (falabella.com.co, COP) or pe (falabella.com.pe, PEN). Prices, currency and catalogue follow the country.","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — falabella.com (CLP)"},{"value":"co","label":"Colombia — falabella.com.co (COP)"},{"value":"pe","label":"Peru — falabella.com.pe (PEN)"}],"default":"cl","example":"cl"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Falabella serves 48 organic products per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Falabella's own sort orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Recomendados"},{"value":"price_asc","label":"Precio de menor a mayor"},{"value":"price_desc","label":"Precio de mayor a menor"},{"value":"rating","label":"Los mejores evaluados"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand as Falabella lists it (e.g. samsung); same as filters f.product.brandName=samsung.","on_invalid":"reject","example":"samsung"},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (2-5), as Falabella's rating filter.","on_invalid":"reject","example":4,"minimum":2,"maximum":5},{"name":"min_discount_pct","type":"enum","required":false,"description":"Only products discounted at least this much (Falabella's 20/30/40/50% steps).","on_invalid":"reject","allowed_values":[{"value":"20","label":"20% dcto y más"},{"value":"30","label":"30% dcto y más"},{"value":"40","label":"40% dcto y más"},{"value":"50","label":"50% dcto y más"}],"example":"30"},{"name":"filters","type":"array","required":false,"description":"Any filter exactly as returned in filters_available[].values[].filter of a previous call (price bucket, seller type, category, size, colour, …). Several may be sent.","on_invalid":"reject","example":["f.range.derived.price.search=$100.000 - $200.000"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Sponsored rows are left out and counted in sponsored_dropped. true: returned with sponsored true.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, sku_id, title, brand, url, image, images[], price, price_max, price_type (internet|event|normal), cmr_price (CMR card only), list_price (struck), discount_pct, cmr_discount_pct, cmr_saving, other_prices[], currency, discount_badge_pct, seller{id, name, kind (falabella|falabella_group|marketplace), is_falabella, verified}, marketplace, search_index_rating, search_index_review_count (search-index figures; product/detail has the review system's), rating_scale, badges[], delivery_badges[]{type, label}, installments[]{count, interest_free, payment_methods[]}, top_specifications[], best_seller, product_type, variants[]{type, options[]{value, variant_id, available, purchasable, price, url}}, sponsored}, count (organic rows), sponsored_dropped, sponsored_included, total_results, total_pages, page, page_size, has_more, page_notice, filters_available[]{name, type, values[]{label, count, filter, selected}}, site_applied_filters[], redirected_to{type, id, url}, sort, applied_filters, country, currency, category_type, category_id, breadcrumb[]{id, name, url}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"cat690239"}},{"name":"product/detail","description":"The full Falabella product record by id or URL: title, brand, model, internet or event price, CMR card price, struck normal price with discounts and validity dates, CMR points, the seller with its rating and verification, availability with stock per delivery option, home delivery and store pickup, interest-free installments, rating with star distribution, description, specifications, images and videos, every variant with its own prices and stock, and the category breadcrumb.","required_params":["product_id"],"optional_params":["variant_id","country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Falabella product id (the number after /product/ in the URL, e.g. 14794157) or the product URL. A URL also sets the country.","on_invalid":"reject","example":"14794157","aliases":["id","url"]},{"name":"variant_id","type":"string","required":false,"description":"One variant (size / colour SKU) of the product; its prices and stock become the top-level fields. Default: the variant Falabella shows first.","on_invalid":"reject","example":"14794163","aliases":["sku_id","sku"]},{"name":"country","type":"enum","required":false,"description":"Falabella storefront: cl (falabella.com, CLP), co (falabella.com.co, COP) or pe (falabella.com.pe, PEN). Prices, currency and catalogue follow the country.","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — falabella.com (CLP)"},{"value":"co","label":"Colombia — falabella.com.co (COP)"},{"value":"pe","label":"Peru — falabella.com.pe (PEN)"}],"default":"cl","example":"cl"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, variant_id, title, brand, brand_id, url, model, product_type, price, price_type, price_valid_until, cmr_price, cmr_price_valid_until, list_price, discount_pct, cmr_discount_pct, cmr_saving, other_prices[], discount_badge_pct, cmr_points, purchasable, availability (in_stock|out_of_stock|null), stock_quantity, stock_quantity_cap, stock_by_shipping_option[]{shipping_option, state, has_stock, quantity}, home_delivery, store_pickup, free_shipping, delivery_labels[], delivery_badges[], max_quantity, offers[]{seller, offering_id, seller_sku, status, active}, currency, seller{id, name, kind, is_falabella, business_name, verified, rating{score, on_time, cancellations, customer, scale}}, marketplace, installments[], rating, review_count, rating_scale, rating_distribution{5..1} (Spanish-language reviews, as the product page counts them), recommended_count, rating_all_locales, review_count_all_locales, description, short_description, specifications[]{name, value}, top_specifications[], country_of_origin, condition, images[], videos[], variants[]{variant_id, name, attributes{}, selected, price, cmr_price, list_price, …, availability, stock_quantity}, variant_count, category_id, breadcrumb[]{id, name, url}, international_shipping, return_policy, published}, country, currency, rating_status","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"14794157"}},{"name":"product/reviews","description":"Customer reviews of a Falabella product, paged and sorted (newest, oldest, highest or lowest rating, most helpful) and filterable by star rating: rating, title, text, date, reviewer nickname, recommendation, helpful votes, detailed ratings (comfort, size…), photos and seller responses, plus the average rating, review count and star distribution. Reviews and figures are the Spanish-language ones the product page counts; the all-languages totals are returned separately.","required_params":["product_id"],"optional_params":["country","page","page_size","sort","rating","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Falabella product id (the number after /product/ in the URL, e.g. 14794157) or the product URL. A URL also sets the country.","on_invalid":"reject","example":"14794157","aliases":["id","url"]},{"name":"country","type":"enum","required":false,"description":"Falabella storefront: cl (falabella.com, CLP), co (falabella.com.co, COP) or pe (falabella.com.pe, PEN). Prices, currency and catalogue follow the country.","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — falabella.com (CLP)"},{"value":"co","label":"Colombia — falabella.com.co (COP)"},{"value":"pe","label":"Peru — falabella.com.pe (PEN)"}],"default":"cl","example":"cl"},{"name":"page","type":"integer","required":false,"description":"Review page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page.","on_invalid":"reject","default":10,"minimum":1,"maximum":30},{"name":"sort","type":"enum","required":false,"description":"Review order. most_helpful follows helpful votes, which are 0 on most reviews.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Más recientes"},{"value":"oldest","label":"Más antiguas"},{"value":"highest_rating","label":"Mejor calificación"},{"value":"lowest_rating","label":"Peor calificación"},{"value":"most_helpful","label":"Más útiles"}],"default":"newest","example":"lowest_rating"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with exactly this many stars.","on_invalid":"reject","example":1,"minimum":1,"maximum":5},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"reviews[]{review_id, rating, rating_scale, title, text, date, author, author_location, recommended, helpful_votes, unhelpful_votes, badges[], secondary_ratings[]{label, value, scale, value_label}, photos[], seller_responses[], syndicated, reviewed_product_id, locale}, count, page, page_size, total_results (matching the rating filter), has_more, average_rating, review_count, rating_scale, rating_distribution{5..1}, recommended_count, rating_all_locales, review_count_all_locales, stats_status, product_id, sort, rating_filter, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"14794157"}},{"name":"search/suggest","description":"Falabella's search-box suggestions for what a shopper has typed, each with the categories Falabella proposes for it.","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper has typed so far.","on_invalid":"reject","example":"telev","aliases":["q","prefix"]},{"name":"country","type":"enum","required":false,"description":"Falabella storefront: cl (falabella.com, CLP), co (falabella.com.co, COP) or pe (falabella.com.pe, PEN). Prices, currency and catalogue follow the country.","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — falabella.com (CLP)"},{"value":"co","label":"Colombia — falabella.com.co (COP)"},{"value":"pe","label":"Peru — falabella.com.pe (PEN)"}],"default":"cl","example":"cl"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"suggestions[]{term, url, categories[]{name, category_id, url}}, count, query, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"televisor"}}]},{"name":"fanaticscollect","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Fanatics Collect API — fanaticscollect.com (formerly PWCC) trading-card auctions and marketplace: search live and sold Weekly auction, Premier auction and Buy Now lots by keyword, category (Pokémon English / Japanese, One Piece, Magic, Yu-Gi-Oh!, basketball, baseball, football …), grader, grade, year and price, with current bid, bid count, end time, sold price with and without buyer's premium, grade, cert and images; full lot detail with population, estimated value and recent sales of the same card; the public sales archive back to 2012; and the auction calendar. USD. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/fanaticscollect/v1","spec_available":true,"actions":[{"name":"search","description":"Search Fanatics Collect lots and listings — live now (default) or sold since 2022 — across Weekly auctions, Premier auctions and Buy Now. Each row carries the current bid and bid count (or the Buy Now price), the auction's end time, or for sold lots the sold price with the buyer's premium and the hammer price, plus grader, grade, cert number, category, estimated value, images and the listing link.","required_params":[],"optional_params":["query","status","type","category","category_group","grader","grade_min","grade_max","year_min","year_max","min_price","max_price","eye_appeal","auction_id","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Words to find in the lot title (year, set, player / character, number, grade). All words must match; typos are tolerated. Empty = browse with filters.","on_invalid":"reject","example":"charizard psa 10","aliases":["q","keyword"]},{"name":"status","type":"enum","required":false,"description":"live = open lots and listings now (default); sold = finished sales since 2022 with the sold price; all = both. For older sales use `sales_history`.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Open now (bidding or for sale)"},{"value":"sold","label":"Sold (results since 2022)"},{"value":"all","label":"Both"}],"default":"live","example":"live"},{"name":"type","type":"enum","required":false,"description":"Only Weekly auction lots, Premier auction lots or Buy Now listings.","on_invalid":"reject","allowed_values":[{"value":"weekly","label":"Weekly auction"},{"value":"premier","label":"Premier auction (monthly, high-end)"},{"value":"buy_now","label":"Buy Now (fixed price, offers allowed on some)"}],"example":"weekly","aliases":["marketplace"]},{"name":"category","type":"enum","required":false,"description":"One category as the site files it. 'pokemon' = all three Pokémon languages.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon — all languages"},{"value":"pokemon_english","label":"Pokémon (English)"},{"value":"pokemon_japanese","label":"Pokémon (Japanese)"},{"value":"pokemon_other_languages","label":"Pokémon (other languages)"},{"value":"one_piece","label":"One Piece"},{"value":"magic","label":"Magic: The Gathering"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"other_tcg","label":"Other trading card games (Lorcana, Dragon Ball, sealed TCG …)"},{"value":"basketball","label":"Basketball cards"},{"value":"baseball","label":"Baseball cards"},{"value":"football","label":"Football cards"},{"value":"soccer","label":"Soccer cards"},{"value":"hockey","label":"Hockey cards"},{"value":"combat_sports","label":"Combat sports (boxing, MMA, wrestling)"},{"value":"racing","label":"Racing cards"},{"value":"golf","label":"Golf cards"},{"value":"misc_sports","label":"Other sports cards"},{"value":"non_sports","label":"Non-sports cards"},{"value":"wax","label":"Sealed wax (boxes, packs)"},{"value":"memorabilia","label":"Memorabilia"},{"value":"tickets","label":"Tickets"},{"value":"photos","label":"Photos"}],"example":"pokemon"},{"name":"category_group","type":"enum","required":false,"description":"Top-level group (all trading card games, all sports cards …).","on_invalid":"reject","allowed_values":[{"value":"trading_card_games","label":"Trading Card Games"},{"value":"sports_cards","label":"Sports Cards"},{"value":"other","label":"Other (wax, memorabilia, tickets, photos)"},{"value":"comics","label":"Comics"},{"value":"video_games","label":"Video Games"}],"example":"trading_card_games"},{"name":"grader","type":"enum","required":false,"description":"Only items graded by one company.","on_invalid":"reject","allowed_values":[{"value":"PSA","label":"PSA"},{"value":"CGC","label":"CGC"},{"value":"BGS","label":"BGS (Beckett)"},{"value":"SGC","label":"SGC"},{"value":"CSG","label":"CSG"},{"value":"BVG","label":"BVG"},{"value":"BCCG","label":"BCCG"},{"value":"MBA","label":"MBA"},{"value":"WATA","label":"WATA (video games)"},{"value":"VGA","label":"VGA (video games)"},{"value":"CBCS","label":"CBCS (comics)"},{"value":"PCGS","label":"PCGS (coins)"},{"value":"UDA","label":"UDA (Upper Deck Authenticated)"},{"value":"GAI","label":"GAI"},{"value":"PSA/DNA","label":"PSA/DNA (autographs)"},{"value":"Other Approved","label":"Other approved graders"},{"value":"Ungraded","label":"Ungraded"}],"example":"PSA","aliases":["grading_service"]},{"name":"grade_min","type":"number","required":false,"description":"Grade at least this (e.g. 9.5).","on_invalid":"reject","example":9,"minimum":0,"maximum":10},{"name":"grade_max","type":"number","required":false,"description":"Grade at most this (graded items only).","on_invalid":"reject","example":10,"minimum":0,"maximum":10},{"name":"year_min","type":"integer","required":false,"description":"Card year from (inclusive).","on_invalid":"reject","example":1999,"minimum":1800,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Card year to (inclusive).","on_invalid":"reject","example":2003,"minimum":1800,"maximum":2100},{"name":"min_price","type":"number","required":false,"description":"price_usd at least this many USD — the current (or opening) bid on a live lot, the asking price on Buy Now, the hammer price on a sold lot.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"price_usd at most this many USD (same price as min_price).","on_invalid":"reject","example":5000,"minimum":0},{"name":"eye_appeal","type":"enum","required":false,"description":"Only items with Fanatics' (PWCC) eye-appeal rating A, E or S.","on_invalid":"reject","allowed_values":[{"value":"A","label":"Eye Appeal - A"},{"value":"E","label":"Eye Appeal - E"},{"value":"S","label":"Eye Appeal - S"}],"example":"A"},{"name":"auction_id","type":"string","required":false,"description":"Only lots of one auction event — an `auctions` row's auction_id.","on_invalid":"reject","example":"5f357468-43b2-11f1-bfbb-0a58a9feac02","value_pattern":"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's 'Recommended')"},{"value":"best_value","label":"Best value (the site's default sort)"},{"value":"recently_added","label":"Recently added"},{"value":"best_deals","label":"Best deals (the site's 'great price' ranking)"},{"value":"lot_number","label":"Lot number"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"year_asc","label":"Earliest card year first"},{"value":"year_desc","label":"Latest card year first"},{"value":"sold_date_asc","label":"Oldest sale first"},{"value":"sold_date_desc","label":"Newest sale first"}],"default":"relevance","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first. The source serves the first 2,399 results of a query (page × limit); narrow with filters to reach the rest.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":2399},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-50; the site's own page is 48).","on_invalid":"reject","default":24,"example":48,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"rows[]: listing_id, integer_id, object_id, type (weekly | premier | buy_now), status (live | sold), title, subtitle, lot, auction_id, auction_name, price_usd (what the site shows: current bid — opening bid while there are no bids — on a live lot, asking price on Buy Now, hammer on a sold lot), current_bid_usd (live lots with bids), buy_now_price_usd (live Buy Now), last_asking_price_usd (sold Buy Now), starting_bid_usd, bid_count, sold_price_usd (sold: what the buyer paid — auctions include the 20 % buyer's premium; on a Buy Now listing that accepted offers it is null, because an accepted offer can be below the asking price: `item` and `sales_history` have the paid price), sold_price_is_computed (true = the index lacks the sale record and the price is hammer × 1.20, the number the site's own page prints), hammer_price_usd (sold auction lots, without premium), sold_at, starts_at, ends_at (auction close; extended bidding follows), estimated_value_usd, allow_offers, has_offers, great_price, fanatics_authentic, flash, eye_appeal, favorited_count, grader, grade, cert, year, card_number, subject, category, category_group, subcategory, teams, certified_seller, seller_id, ships_internationally, listed_at, created_at, updated_at, image, images[{large, medium, small, thumbnail}], url. meta: total (matching lots; an estimate on very large sets, total_is_estimate), page, limit, has_more, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","category":"pokemon"}},{"name":"item","description":"One listing in full by its listing_id or URL: title, lot, the auction and its timer, current bid, starting price and bid count (auctions) or Buy Now price and offers, sold price and date, grader, grade, cert and graded population, card year / set / subject / number, Fanatics' estimated market value, the Card Ladder estimate, this listing's sales, the recent sales of the same card in the same grade, description and every image.","required_params":["listing_id"],"optional_params":["type"],"params":[{"name":"listing_id","type":"string","required":true,"description":"A search / sales_history row's listing_id, or the listing's fanaticscollect.com URL (/weekly/…, /premier/…, /buy-now/…).","on_invalid":"reject","example":"ee35da70-ce51-11f1-ac06-0afffb541911","aliases":["id","url"]},{"name":"type","type":"enum","required":false,"description":"Optional: the listing's type, when known (a URL already says it).","on_invalid":"reject","allowed_values":[{"value":"weekly","label":"Weekly auction"},{"value":"premier","label":"Premier auction (monthly, high-end)"},{"value":"buy_now","label":"Buy Now (fixed price, offers allowed on some)"}],"example":"weekly"}],"returns":"item{listing_id, integer_id, type, status (live | sold | closed), status_raw, title, subtitle, lot, current_bid_usd (live, with bids), hammer_price_usd (sold auction lots), starting_price_usd, bid_count, buy_now_price_usd, previous_asking_price_usd, allow_offers, quantity_available, sold_price_usd (what the buyer paid; auctions incl. the 20 % buyer's premium), sold_price_is_computed, sold_at, sales[{sold_at, sold_price_usd}], auction{auction_id, type, name, short_name, status, starts_at, ends_at, payout_date, extended_bidding{window_ends_at, window_seconds, window_number}}, estimated_value_usd, suggested_asking_price_usd, card_ladder{estimated_value_usd, confidence, url}, great_price, fanatics_authentic, flash, eye_appeal, favorited_count, certified_seller, card{grading_status, grader, grade, population, cert, cert_url, year, brand, set, subject, card_number, parallel, team}, vault_item_id, vault_origin, similar_sales[{sold_at, sold_price_usd}] (same card and grade, newest first), description, product_detail, image, images[], video, listed_at, updated_at, slug, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"61c7cdb4-c280-11f1-9bc0-0a58a9feac02"}},{"name":"sales_history","description":"Fanatics Collect's public sales archive (its 'Sales History' page): about 5.5 million sales since 2012, including the PWCC Monthly and Flash auctions — sold price and date, marketplace, category, grader, grade, eye appeal, year, cert and images. Filter by title words, kind of sale, category, grader, eye appeal, year and price; newest, oldest, highest or lowest first.","required_params":[],"optional_params":["query","type","category","grader","eye_appeal","year_min","year_max","min_price","max_price","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Words to find in the sold item's title.","on_invalid":"reject","example":"charizard psa 10","aliases":["q","keyword","title"]},{"name":"type","type":"enum","required":false,"description":"Only one kind of sale (the site's filter: Buy Now / Auction / Premier, plus the single auction kinds).","on_invalid":"reject","allowed_values":[{"value":"buy_now","label":"Buy Now sales"},{"value":"auction","label":"All auctions (Weekly + Monthly + Flash)"},{"value":"weekly","label":"Weekly auctions"},{"value":"premier","label":"Premier auctions"},{"value":"monthly","label":"PWCC Monthly auctions (2012-2022)"},{"value":"flash","label":"PWCC Flash auctions"}],"example":"weekly","aliases":["marketplace"]},{"name":"category","type":"enum","required":false,"description":"One category as the sales archive files it.","on_invalid":"reject","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"golf","label":"Golf"},{"value":"boxing_mma","label":"Boxing & MMA"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"},{"value":"racing","label":"Racing"},{"value":"misc_sports","label":"Misc Sports"},{"value":"non_sport","label":"Non-Sport"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"magic","label":"Magic The Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"collectible_card_games","label":"Collectible Card Games"},{"value":"memorabilia","label":"Memorabilia"},{"value":"photos","label":"Photos"},{"value":"comics","label":"Comics"},{"value":"tickets","label":"Tickets"},{"value":"coins","label":"Coins"},{"value":"video_games","label":"Video Games"}],"example":"pokemon"},{"name":"grader","type":"enum","required":false,"description":"Only one grading company (or ungraded).","on_invalid":"reject","allowed_values":[{"value":"PSA","label":"PSA"},{"value":"SGC","label":"SGC"},{"value":"BGS","label":"BGS"},{"value":"BVG","label":"BVG"},{"value":"BCCG","label":"BCCG"},{"value":"CGC","label":"CGC"},{"value":"CSG","label":"CSG"},{"value":"ungraded","label":"Ungraded"}],"example":"PSA","aliases":["grading_service"]},{"name":"eye_appeal","type":"enum","required":false,"description":"Only items with Fanatics' (PWCC) eye-appeal rating A, E or S.","on_invalid":"reject","allowed_values":[{"value":"A","label":"Eye Appeal - A"},{"value":"E","label":"Eye Appeal - E"},{"value":"S","label":"Eye Appeal - S"}],"example":"A"},{"name":"year_min","type":"integer","required":false,"description":"Card year from (inclusive).","on_invalid":"reject","example":1999,"minimum":1800,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Card year to (inclusive).","on_invalid":"reject","example":2003,"minimum":1800,"maximum":2100},{"name":"min_price","type":"number","required":false,"description":"Sold price at least this many USD.","on_invalid":"reject","example":1000,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Sold price at most this many USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"sold_date_desc","label":"Newest sale first (the site's default)"},{"value":"sold_date_asc","label":"Oldest sale first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"}],"default":"sold_date_desc","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first. The archive serves the first 999 sales of a query (page × limit); narrow with filters to reach older ones.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":999},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-50, the archive's own maximum).","on_invalid":"reject","default":20,"example":50,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"rows[]: sale_id, listing_id (sales since late 2022; opens `item`), integer_id, type (buy_now | weekly | premier | monthly | flash), title, subtitle, sold_price_usd, price_includes_buyers_premium (auctions yes, Buy Now no), sold_at (ISO with the US Pacific offset the archive uses), quantity, category, grader, grade, eye_appeal, year, cert, description, payment_status, image, images[], youtube_key, url. meta: total, page, limit, has_more, filters_applied.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","category":"pokemon"}},{"name":"auctions","description":"The Weekly and Premier auction events the site lists now — the live ones, the upcoming one and the last closed ones — with start and end times, status and payout date. Pass a row's auction_id to `search` to list that auction's lots.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: auction_id, type (weekly | premier), integer_id, name, short_name, status (LIVE | PREVIEW | CLOSED), starts_at, ends_at, payout_date, extended_bidding_window_ends_at, extended_bidding_window_seconds, url","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"farfetch","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Farfetch API scraper — the luxury fashion marketplace of boutiques (farfetch.com): search ~70 country storefronts with local prices, read the full product (every size with the boutique that sells it, its price, stock and ship-from, composition, made-in, duties/VAT basis) and autocomplete. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/farfetch/v1","spec_available":true,"actions":[{"name":"search","description":"Search Farfetch in any storefront country by keyword and/or designer/category, with the site's own sorts and filters (department, on-sale, price range, colour). Each row: item id, designer, name, the price a shopper pays in that country's currency, the struck price + sale %, the discounted offer of another size/boutique when one exists, the boutique id, the search-index stock quantity, sizes in stock, pre-owned + condition, members-only flag, and images. A query with no genuine match returns empty (padding counted in fallback_results_dropped).","required_params":[],"optional_params":["country","language","query","gender","sort","page","page_size","brand_id","category_id","color_id","on_sale","price_min","price_max","include_facets","include_fallback_results"],"params":[{"name":"country","type":"enum","required":false,"description":"Farfetch storefront country (ISO-2; 'uk' for the United Kingdom). Prices, the currency and the duties/VAT basis follow it. Default us.","on_invalid":"reject","allowed_values":[{"value":"us","label":"US (USD)"},{"value":"uk","label":"UK (GBP)"},{"value":"de","label":"DE (EUR)"},{"value":"fr","label":"FR (EUR)"},{"value":"it","label":"IT (EUR)"},{"value":"es","label":"ES (EUR)"},{"value":"nl","label":"NL (EUR)"},{"value":"at","label":"AT (EUR)"},{"value":"ch","label":"CH (CHF)"},{"value":"se","label":"SE (SEK)"},{"value":"dk","label":"DK (DKK)"},{"value":"no","label":"NO (EUR)"},{"value":"fi","label":"FI (EUR)"},{"value":"pl","label":"PL (PLN)"},{"value":"be","label":"BE (EUR)"},{"value":"lu","label":"LU (EUR)"},{"value":"pt","label":"PT (EUR)"},{"value":"ie","label":"IE (EUR)"},{"value":"gr","label":"GR (EUR)"},{"value":"cz","label":"CZ (EUR)"},{"value":"sk","label":"SK (EUR)"},{"value":"si","label":"SI (EUR)"},{"value":"hr","label":"HR (EUR)"},{"value":"bg","label":"BG (EUR)"},{"value":"ee","label":"EE (EUR)"},{"value":"lv","label":"LV (EUR)"},{"value":"lt","label":"LT (EUR)"},{"value":"ro","label":"RO (EUR)"},{"value":"hu","label":"HU (EUR)"},{"value":"cy","label":"CY (EUR)"},{"value":"mt","label":"MT (EUR)"},{"value":"ae","label":"AE (AED)"},{"value":"sa","label":"SA (SAR)"},{"value":"qa","label":"QA (QAR)"},{"value":"kw","label":"KW (USD)"},{"value":"bh","label":"BH (USD)"},{"value":"om","label":"OM (USD)"},{"value":"jo","label":"JO (USD)"},{"value":"eg","label":"EG (USD)"},{"value":"ma","label":"MA (USD)"},{"value":"il","label":"IL (USD)"},{"value":"jp","label":"JP (JPY)"},{"value":"kr","label":"KR (KRW)"},{"value":"au","label":"AU (AUD)"},{"value":"nz","label":"NZ (USD)"},{"value":"ca","label":"CA (CAD)"},{"value":"mx","label":"MX (MXN)"},{"value":"br","label":"BR (BRL)"},{"value":"ar","label":"AR (USD)"},{"value":"cl","label":"CL (CLP)"},{"value":"co","label":"CO (COP)"},{"value":"pe","label":"PE (USD)"},{"value":"sg","label":"SG (SGD)"},{"value":"hk","label":"HK (HKD)"},{"value":"mo","label":"MO (HKD)"},{"value":"tw","label":"TW (TWD)"},{"value":"in","label":"IN (USD)"},{"value":"cn","label":"CN (CNY)"},{"value":"th","label":"TH (USD)"},{"value":"my","label":"MY (USD)"},{"value":"id","label":"ID (USD)"},{"value":"ph","label":"PH (USD)"},{"value":"vn","label":"VN (USD)"},{"value":"za","label":"ZA (USD)"},{"value":"ng","label":"NG (USD)"},{"value":"ke","label":"KE (USD)"},{"value":"kz","label":"KZ (USD)"},{"value":"is","label":"IS (USD)"}],"default":"us","example":"uk"},{"name":"language","type":"enum","required":false,"description":"Language of names, labels, composition and made-in — and of the keyword index (search a Spanish word with language=es). Independent of country. Default en.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"zh","label":"Chinese"},{"value":"ru","label":"Russian"}],"default":"en","example":"de"},{"name":"query","type":"string","required":false,"description":"Keyword (designer, product, type). Optional when brand_id or category_id is given.","on_invalid":"reject","example":"gucci loafers","aliases":["q","keyword"]},{"name":"gender","type":"enum","required":false,"description":"Department.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All"},{"value":"women","label":"Women"},{"value":"men","label":"Men"},{"value":"kids","label":"Kids"}],"default":"all","example":"women"},{"name":"sort","type":"enum","required":false,"description":"Result order. best_discount restricts to sale items (the site's discount order only exists inside sale).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Our picks"},{"value":"newest","label":"New items"},{"value":"price_asc","label":"Price low→high"},{"value":"price_desc","label":"Price high→low"},{"value":"best_discount","label":"Biggest discount (sale only)"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":200},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (Farfetch allows up to 180).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":180},{"name":"brand_id","type":"string","required":false,"description":"Farfetch designer id (search rows return brand_id; facets list them).","on_invalid":"reject","example":"25354","aliases":["designer_id"]},{"name":"category_id","type":"string","required":false,"description":"Farfetch category id (from facets or product/detail category_paths), e.g. 135967 women's clothing.","on_invalid":"reject","example":"135967"},{"name":"color_id","type":"string","required":false,"description":"Colour facet id (from include_facets).","on_invalid":"reject","example":"1"},{"name":"on_sale","type":"boolean","required":false,"description":"Only products with at least one discounted offer (Farfetch's sale listing is product-level; a row's own on_sale says whether its page price is the discounted one).","on_invalid":"reject","default":false},{"name":"price_min","type":"number","required":false,"description":"Minimum price in the storefront currency.","on_invalid":"reject","example":100},{"name":"price_max","type":"number","required":false,"description":"Maximum price in the storefront currency.","on_invalid":"reject","example":500},{"name":"include_facets","type":"boolean","required":false,"description":"Also return facets (designers, categories, colours, price and discount ranges) with their ids and counts.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When a query matches nothing, Farfetch sometimes pads the page with unrelated products. By default they are dropped (fallback_results_dropped counts them); true returns them apart in fallback_results.","on_invalid":"reject","default":false}],"returns":"results[]{product_id, url, brand, brand_id, name, label, price, currency, was_price, discount_percent, on_sale, price_type, promotion_offer{price,full_price,discount_percent,type}, purchasable, boutique_id, search_index_stock_quantity, sizes_in_stock[], size_count, color_count, pre_owned, condition, members_only, image, images[]}, count, total_results, page, page_size, has_more, sort, query, gender, on_sale, country, language, currency, keyword_matches_on_page, fallback_results_dropped, facets[] (include_facets)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"us","query":"gucci"}},{"name":"product/detail","description":"The full Farfetch product by item id or URL in a storefront country: designer, name, the highlights list, season, gender, colour, designer style id, made-in, composition, care, measurements, condition for pre-owned, category path, the page price with struck price/sale %, the discounted offer of another size/boutique, and the duties/VAT basis, the boutique that sells it (name, country, city), total stock, and every size with the boutique offers for it (each boutique's own price, quantity and ship-from), plus the lowest/highest offer price and images.","required_params":[],"optional_params":["country","language","product_id","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Farfetch storefront country (ISO-2; 'uk' for the United Kingdom). Prices, the currency and the duties/VAT basis follow it. Default us.","on_invalid":"reject","allowed_values":[{"value":"us","label":"US (USD)"},{"value":"uk","label":"UK (GBP)"},{"value":"de","label":"DE (EUR)"},{"value":"fr","label":"FR (EUR)"},{"value":"it","label":"IT (EUR)"},{"value":"es","label":"ES (EUR)"},{"value":"nl","label":"NL (EUR)"},{"value":"at","label":"AT (EUR)"},{"value":"ch","label":"CH (CHF)"},{"value":"se","label":"SE (SEK)"},{"value":"dk","label":"DK (DKK)"},{"value":"no","label":"NO (EUR)"},{"value":"fi","label":"FI (EUR)"},{"value":"pl","label":"PL (PLN)"},{"value":"be","label":"BE (EUR)"},{"value":"lu","label":"LU (EUR)"},{"value":"pt","label":"PT (EUR)"},{"value":"ie","label":"IE (EUR)"},{"value":"gr","label":"GR (EUR)"},{"value":"cz","label":"CZ (EUR)"},{"value":"sk","label":"SK (EUR)"},{"value":"si","label":"SI (EUR)"},{"value":"hr","label":"HR (EUR)"},{"value":"bg","label":"BG (EUR)"},{"value":"ee","label":"EE (EUR)"},{"value":"lv","label":"LV (EUR)"},{"value":"lt","label":"LT (EUR)"},{"value":"ro","label":"RO (EUR)"},{"value":"hu","label":"HU (EUR)"},{"value":"cy","label":"CY (EUR)"},{"value":"mt","label":"MT (EUR)"},{"value":"ae","label":"AE (AED)"},{"value":"sa","label":"SA (SAR)"},{"value":"qa","label":"QA (QAR)"},{"value":"kw","label":"KW (USD)"},{"value":"bh","label":"BH (USD)"},{"value":"om","label":"OM (USD)"},{"value":"jo","label":"JO (USD)"},{"value":"eg","label":"EG (USD)"},{"value":"ma","label":"MA (USD)"},{"value":"il","label":"IL (USD)"},{"value":"jp","label":"JP (JPY)"},{"value":"kr","label":"KR (KRW)"},{"value":"au","label":"AU (AUD)"},{"value":"nz","label":"NZ (USD)"},{"value":"ca","label":"CA (CAD)"},{"value":"mx","label":"MX (MXN)"},{"value":"br","label":"BR (BRL)"},{"value":"ar","label":"AR (USD)"},{"value":"cl","label":"CL (CLP)"},{"value":"co","label":"CO (COP)"},{"value":"pe","label":"PE (USD)"},{"value":"sg","label":"SG (SGD)"},{"value":"hk","label":"HK (HKD)"},{"value":"mo","label":"MO (HKD)"},{"value":"tw","label":"TW (TWD)"},{"value":"in","label":"IN (USD)"},{"value":"cn","label":"CN (CNY)"},{"value":"th","label":"TH (USD)"},{"value":"my","label":"MY (USD)"},{"value":"id","label":"ID (USD)"},{"value":"ph","label":"PH (USD)"},{"value":"vn","label":"VN (USD)"},{"value":"za","label":"ZA (USD)"},{"value":"ng","label":"NG (USD)"},{"value":"ke","label":"KE (USD)"},{"value":"kz","label":"KZ (USD)"},{"value":"is","label":"IS (USD)"}],"default":"us","example":"uk"},{"name":"language","type":"enum","required":false,"description":"Language of names, labels, composition and made-in — and of the keyword index (search a Spanish word with language=es). Independent of country. Default en.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"zh","label":"Chinese"},{"value":"ru","label":"Russian"}],"default":"en","example":"de"},{"name":"product_id","type":"string","required":false,"description":"Farfetch item id (the number in …-item-<id>.aspx; search rows return product_id).","on_invalid":"reject","example":"28060177","aliases":["id","item_id"]},{"name":"url","type":"string","required":false,"description":"A farfetch.com product URL instead of product_id. Its /<country>/ subfolder sets the country unless country is given.","on_invalid":"reject","example":"https://www.farfetch.com/shopping/women/zimmermann-coco-cotton-hoodie-item-28060177.aspx","aliases":["product_url"]}],"returns":"product{product_id, url, brand, brand_id, name, highlights[], label, season, gender, color, designer_style_id, made_in, composition[{part,materials[{material,percentage}]}], care[{type,procedures[]}], measurements[{name,metric,imperial}], pre_owned, condition, breadcrumb[{id,name}], category_paths[[…]], price, currency, was_price, discount_percent, on_sale, price_type, promotion_offer, purchasable, taxes_and_duties{type,label}, boutique{id,name,country_code,country,city,stock_type}, available, stock_quantity, lowest_price, highest_price, boutique_count, size_scale{id,name,one_size}, sizes[{id,size,size_alt,scale,available,quantity,offers[{boutique_id,boutique_name,ships_from_country_code,ships_from_country,ships_from_city,stock_type,quantity,price,was_price,discount_percent,on_sale,purchasable}]}], colors[], images[], image}, country, language","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"uk","product_id":"28060177"}},{"name":"suggest","description":"Farfetch autocomplete for a partial keyword: designer, category and phrase suggestions with the designer/category id and the storefront URL.","required_params":["query"],"optional_params":["country","language","gender"],"params":[{"name":"query","type":"string","required":true,"description":"Partial keyword.","on_invalid":"reject","example":"guc","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Farfetch storefront country (ISO-2; 'uk' for the United Kingdom). Prices, the currency and the duties/VAT basis follow it. Default us.","on_invalid":"reject","allowed_values":[{"value":"us","label":"US (USD)"},{"value":"uk","label":"UK (GBP)"},{"value":"de","label":"DE (EUR)"},{"value":"fr","label":"FR (EUR)"},{"value":"it","label":"IT (EUR)"},{"value":"es","label":"ES (EUR)"},{"value":"nl","label":"NL (EUR)"},{"value":"at","label":"AT (EUR)"},{"value":"ch","label":"CH (CHF)"},{"value":"se","label":"SE (SEK)"},{"value":"dk","label":"DK (DKK)"},{"value":"no","label":"NO (EUR)"},{"value":"fi","label":"FI (EUR)"},{"value":"pl","label":"PL (PLN)"},{"value":"be","label":"BE (EUR)"},{"value":"lu","label":"LU (EUR)"},{"value":"pt","label":"PT (EUR)"},{"value":"ie","label":"IE (EUR)"},{"value":"gr","label":"GR (EUR)"},{"value":"cz","label":"CZ (EUR)"},{"value":"sk","label":"SK (EUR)"},{"value":"si","label":"SI (EUR)"},{"value":"hr","label":"HR (EUR)"},{"value":"bg","label":"BG (EUR)"},{"value":"ee","label":"EE (EUR)"},{"value":"lv","label":"LV (EUR)"},{"value":"lt","label":"LT (EUR)"},{"value":"ro","label":"RO (EUR)"},{"value":"hu","label":"HU (EUR)"},{"value":"cy","label":"CY (EUR)"},{"value":"mt","label":"MT (EUR)"},{"value":"ae","label":"AE (AED)"},{"value":"sa","label":"SA (SAR)"},{"value":"qa","label":"QA (QAR)"},{"value":"kw","label":"KW (USD)"},{"value":"bh","label":"BH (USD)"},{"value":"om","label":"OM (USD)"},{"value":"jo","label":"JO (USD)"},{"value":"eg","label":"EG (USD)"},{"value":"ma","label":"MA (USD)"},{"value":"il","label":"IL (USD)"},{"value":"jp","label":"JP (JPY)"},{"value":"kr","label":"KR (KRW)"},{"value":"au","label":"AU (AUD)"},{"value":"nz","label":"NZ (USD)"},{"value":"ca","label":"CA (CAD)"},{"value":"mx","label":"MX (MXN)"},{"value":"br","label":"BR (BRL)"},{"value":"ar","label":"AR (USD)"},{"value":"cl","label":"CL (CLP)"},{"value":"co","label":"CO (COP)"},{"value":"pe","label":"PE (USD)"},{"value":"sg","label":"SG (SGD)"},{"value":"hk","label":"HK (HKD)"},{"value":"mo","label":"MO (HKD)"},{"value":"tw","label":"TW (TWD)"},{"value":"in","label":"IN (USD)"},{"value":"cn","label":"CN (CNY)"},{"value":"th","label":"TH (USD)"},{"value":"my","label":"MY (USD)"},{"value":"id","label":"ID (USD)"},{"value":"ph","label":"PH (USD)"},{"value":"vn","label":"VN (USD)"},{"value":"za","label":"ZA (USD)"},{"value":"ng","label":"NG (USD)"},{"value":"ke","label":"KE (USD)"},{"value":"kz","label":"KZ (USD)"},{"value":"is","label":"IS (USD)"}],"default":"us","example":"uk"},{"name":"language","type":"enum","required":false,"description":"Language of names, labels, composition and made-in — and of the keyword index (search a Spanish word with language=es). Independent of country. Default en.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"zh","label":"Chinese"},{"value":"ru","label":"Russian"}],"default":"en","example":"de"},{"name":"gender","type":"enum","required":false,"description":"Department.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All"},{"value":"women","label":"Women"},{"value":"men","label":"Men"},{"value":"kids","label":"Kids"}],"default":"all","example":"women"}],"returns":"suggestions[{text, type, reference_type, reference_id, url}], count, country, gender","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","query":"guc"}}]},{"name":"feed-gateway","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"RSS & Feed API — universal RSS, Atom and JSON Feed parser: fetch, discover, merge and search any web feed in one normalized schema","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/feed-gateway/v1","spec_available":true,"actions":[{"name":"fetch","description":"Fetch ONE feed URL (RSS 2.0/0.9x, RSS 1.0/RDF, Atom, JSON-Feed 1.1 — auto-detected) and normalise it into one clean JSON schema. Broken XML, HTML entities, encoding mess and truncated feeds are repaired automatically (recovery step reported in meta).","required_params":["url"],"optional_params":["limit","sort_by","sort_dir","include_content","since","until"],"params":[{"name":"url","type":"string","required":true,"description":"Feed URL (RSS/Atom/JSON-Feed). Bare hosts get https:// prefixed. Private/internal/metadata targets are SSRF-blocked.","on_invalid":"reject","example":"https://feeds.bbci.co.uk/news/world/rss.xml"},{"name":"limit","type":"integer","required":false,"description":"Max items returned (1-100, default 50). Out-of-range values are clamped, never rejected.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":100},{"name":"sort_by","type":"enum","required":false,"description":"Item ordering. Competitors paywall sorting (rss2json needs an api_key for order_by) — here it is free.","on_invalid":"reject","allowed_values":[{"value":"feed_order","label":"Original feed order (default)"},{"value":"published","label":"Publish date"},{"value":"title","label":"Title (A-Z)"},{"value":"author","label":"Author name"}],"default":"feed_order","example":"published"},{"name":"sort_dir","type":"enum","required":false,"description":"Sort direction (applies when sort_by is not feed_order).","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Descending (newest/Z first)"},{"value":"asc","label":"Ascending (oldest/A first)"}],"default":"desc","example":"desc"},{"name":"include_content","type":"boolean","required":false,"description":"Include the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text.","on_invalid":"reject","default":false,"example":false},{"name":"since","type":"string","required":false,"description":"Only items published at/after this date (ISO 8601, e.g. 2026-06-01 or 2026-06-01T12:00:00Z).","on_invalid":"reject","example":"2026-06-01"},{"name":"until","type":"string","required":false,"description":"Only items published at/before this date (ISO 8601).","on_invalid":"reject","example":"2026-06-30"}],"returns":"{feed: {url, final_url, format, title, link, description, language, updated, image, author, generator, categories[]}, items[]: {id, title, link, published (ISO 8601 Z), updated, author, summary (clean plain text), categories[], enclosures[] {url,type,length,width,height,duration_seconds} (podcast/media RSS), image, podcast {duration_seconds,episode,season,episode_type,explicit,subtitle,keywords[]} (iTunes — present only on podcasts), media {credit,description,keywords[]} (Media RSS), content_html (only when include_content=true)}, item_count, total_items}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://feeds.bbci.co.uk/news/world/rss.xml","limit":10}},{"name":"discover","description":"Find the feeds of ANY website: parses <link rel=alternate> tags + visible anchor hints, then probes common feed paths at BOTH the host root (/feed, /rss.xml, /atom.xml, /index.xml, …) AND under the given path (e.g. /r/programming/.rss). Every candidate is fetched and VERIFIED as a real parseable feed before being returned — so it works even on sites that don't declare a feed link-tag.","required_params":["url"],"optional_params":["probe","limit"],"params":[{"name":"url","type":"string","required":true,"description":"Website URL (homepage or any page).","on_invalid":"reject","example":"https://www.theverge.com"},{"name":"probe","type":"boolean","required":false,"description":"Also probe common feed paths (/feed, /rss.xml, /atom.xml, …) beyond the page's declared link tags.","on_invalid":"reject","default":true,"example":true},{"name":"limit","type":"integer","required":false,"description":"Max feeds returned (1-20, default 10).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":20}],"returns":"{site, feeds[]: {url, format, title, item_count, discovered_via (link-tag|anchor|probe)}, count, candidates_checked}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.theverge.com"}},{"name":"merge","description":"Merge up to 10 feeds into ONE de-duplicated, date-sorted stream. Duplicates are detected on a canonical link key (tracking params stripped) falling back to guid/title. Each item carries its source_feed.","required_params":["urls"],"optional_params":["limit","sort_dir","dedup","since","until","include_content"],"params":[{"name":"urls","type":"array","required":true,"description":"Feed URLs to merge (max 10). Each URL is independently SSRF-guarded and fetched concurrently; one bad feed never fails the whole call.","on_invalid":"reject","example":["https://feeds.bbci.co.uk/news/world/rss.xml","https://hnrss.org/frontpage"]},{"name":"limit","type":"integer","required":false,"description":"Max items returned (1-200, default 100). Out-of-range values are clamped, never rejected.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":200},{"name":"sort_dir","type":"enum","required":false,"description":"Sort direction (applies when sort_by is not feed_order).","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Descending (newest/Z first)"},{"value":"asc","label":"Ascending (oldest/A first)"}],"default":"desc","example":"desc"},{"name":"dedup","type":"boolean","required":false,"description":"Remove duplicate stories across feeds (default true).","on_invalid":"reject","default":true,"example":true},{"name":"since","type":"string","required":false,"description":"Only items published at/after this date (ISO 8601, e.g. 2026-06-01 or 2026-06-01T12:00:00Z).","on_invalid":"reject","example":"2026-06-01"},{"name":"until","type":"string","required":false,"description":"Only items published at/before this date (ISO 8601).","on_invalid":"reject","example":"2026-06-30"},{"name":"include_content","type":"boolean","required":false,"description":"Include the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text.","on_invalid":"reject","default":false,"example":false}],"returns":"{items[]: {id, title, link, published (ISO 8601 Z), updated, author, summary (clean plain text), categories[], enclosures[] {url,type,length,width,height,duration_seconds} (podcast/media RSS), image, podcast {duration_seconds,episode,season,episode_type,explicit,subtitle,keywords[]} (iTunes — present only on podcasts), media {credit,description,keywords[]} (Media RSS), content_html (only when include_content=true)} each + source_feed {url, title}, item_count, total_before_dedup, unique_after_dedup, removed_duplicates, feeds[]: {url, ok, title, item_count, error}}","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"urls":["https://feeds.bbci.co.uk/news/world/rss.xml","https://feeds.bbci.co.uk/news/technology/rss.xml"],"limit":20}},{"name":"search","description":"Keyword-filter feed items (like RSSHub filter / Feedly search, but no account). Searches title/summary/author/categories (and content_html when include_content=true); multi-word queries match any or all terms; exclude= drops unwanted items.","required_params":[],"optional_params":["url","urls","query","exclude","fields","match","limit","sort_by","sort_dir","include_content","since","until"],"params":[{"name":"url","type":"string","required":false,"description":"Single feed URL to search. (search needs url OR urls.)","on_invalid":"reject","example":"https://feeds.bbci.co.uk/news/world/rss.xml"},{"name":"urls","type":"array","required":false,"description":"Multiple feed URLs to search at once (max 10). Each URL is independently SSRF-guarded and fetched concurrently; one bad feed never fails the whole call.","on_invalid":"reject","example":["https://feeds.bbci.co.uk/news/world/rss.xml","https://hnrss.org/frontpage"]},{"name":"query","type":"string","required":false,"description":"Keyword(s) to match, space-separated. Empty query + exclude acts as a pure exclusion filter. Case-insensitive substring match.","on_invalid":"reject","example":"climate"},{"name":"exclude","type":"string","required":false,"description":"Keyword(s) that DROP an item when present (RSSHub filter_out equivalent).","on_invalid":"reject","example":"opinion"},{"name":"fields","type":"array","required":false,"description":"Which item fields to match against (default title+summary).","on_invalid":"reject","allowed_values":[{"value":"title","label":"title"},{"value":"summary","label":"summary"},{"value":"content","label":"content"},{"value":"author","label":"author"},{"value":"categories","label":"categories"}],"default":["title","summary"],"example":["title","summary"]},{"name":"match","type":"enum","required":false,"description":"Multi-term combination mode.","on_invalid":"reject","allowed_values":[{"value":"any","label":"Match ANY term (OR)"},{"value":"all","label":"Match ALL terms (AND)"}],"default":"any","example":"any"},{"name":"limit","type":"integer","required":false,"description":"Max items returned (1-100, default 50). Out-of-range values are clamped, never rejected.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":100},{"name":"sort_by","type":"enum","required":false,"description":"Item ordering. Competitors paywall sorting (rss2json needs an api_key for order_by) — here it is free.","on_invalid":"reject","allowed_values":[{"value":"feed_order","label":"Original feed order (default)"},{"value":"published","label":"Publish date"},{"value":"title","label":"Title (A-Z)"},{"value":"author","label":"Author name"}],"default":"feed_order","example":"published"},{"name":"sort_dir","type":"enum","required":false,"description":"Sort direction (applies when sort_by is not feed_order).","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Descending (newest/Z first)"},{"value":"asc","label":"Ascending (oldest/A first)"}],"default":"desc","example":"desc"},{"name":"include_content","type":"boolean","required":false,"description":"Include the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text.","on_invalid":"reject","default":false,"example":false},{"name":"since","type":"string","required":false,"description":"Only items published at/after this date (ISO 8601, e.g. 2026-06-01 or 2026-06-01T12:00:00Z).","on_invalid":"reject","example":"2026-06-01"},{"name":"until","type":"string","required":false,"description":"Only items published at/before this date (ISO 8601).","on_invalid":"reject","example":"2026-06-30"}],"returns":"{items[]: {id, title, link, published (ISO 8601 Z), updated, author, summary (clean plain text), categories[], enclosures[] {url,type,length,width,height,duration_seconds} (podcast/media RSS), image, podcast {duration_seconds,episode,season,episode_type,explicit,subtitle,keywords[]} (iTunes — present only on podcasts), media {credit,description,keywords[]} (Media RSS), content_html (only when include_content=true)} each + source_feed when multi-feed, item_count, total_scanned, query, feeds[] (per-feed ok/error when urls used)}","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://feeds.bbci.co.uk/news/world/rss.xml","query":"a e i o u","match":"any"}},{"name":"batch","description":"Fetch up to 20 feeds in ONE call (concurrent, fault-isolated): each feed returns independently with its own ok/error — one dead feed never fails the batch.","required_params":["urls"],"optional_params":["limit","include_content","sort_by","sort_dir"],"params":[{"name":"urls","type":"array","required":true,"description":"Feed URLs to fetch (max 20). Each URL is independently SSRF-guarded and fetched concurrently; one bad feed never fails the whole call.","on_invalid":"reject","example":["https://feeds.bbci.co.uk/news/world/rss.xml","https://hnrss.org/frontpage"]},{"name":"limit","type":"integer","required":false,"description":"Max items returned (1-100, default 20). Out-of-range values are clamped, never rejected.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"include_content","type":"boolean","required":false,"description":"Include the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text.","on_invalid":"reject","default":false,"example":false},{"name":"sort_by","type":"enum","required":false,"description":"Item ordering. Competitors paywall sorting (rss2json needs an api_key for order_by) — here it is free.","on_invalid":"reject","allowed_values":[{"value":"feed_order","label":"Original feed order (default)"},{"value":"published","label":"Publish date"},{"value":"title","label":"Title (A-Z)"},{"value":"author","label":"Author name"}],"default":"feed_order","example":"published"},{"name":"sort_dir","type":"enum","required":false,"description":"Sort direction (applies when sort_by is not feed_order).","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Descending (newest/Z first)"},{"value":"asc","label":"Ascending (oldest/A first)"}],"default":"desc","example":"desc"}],"returns":"{results[]: {url, ok, feed, items[], item_count, error}, feed_count, ok_count, total_items}","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"urls":["https://feeds.bbci.co.uk/news/world/rss.xml","https://hnrss.org/frontpage"],"limit":5}}]},{"name":"festival-foods","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Festival Foods API scraper — shop.festfoods.com product search, categories, BOGO and On Sale, product detail and store locator with each Festival Foods store's price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/festival-foods/v1","spec_available":true,"actions":[{"name":"search","description":"Search shop.festfoods.com at one Festival Foods store: regular price (price list), was-price, member/card price and promotions apart, unit price, stock level, brand and size, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in the shop.festfoods.com search box ('milk').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"shop.festfoods.com pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Festival Foods store prices the results (Festival Foods prices and range differ by store). Default 54301 — then `store_defaulted` is true.","on_invalid":"reject","example":"54301","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Festival Foods store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34846"}],"returns":"products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"54301"}},{"name":"category","description":"Every product of a shop.festfoods.com collection (a category, a brand or a diet collection from `categories`) priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (n-milk-63176 …) or a shop.festfoods.com /store/festival-foods/collections/<slug> URL.","on_invalid":"reject","example":"n-milk-63176","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Festival Foods store prices the results (Festival Foods prices and range differ by store). Default 54301 — then `store_defaulted` is true.","on_invalid":"reject","example":"54301","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Festival Foods store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34846"}],"returns":"collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-63176","postal_code":"54301"}},{"name":"product/detail","description":"One Festival Foods product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price, promotions and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or a shop.festfoods.com /store/festival-foods/products/ URL.","on_invalid":"reject","example":"3306104","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Festival Foods store prices the results (Festival Foods prices and range differ by store). Default 54301 — then `store_defaulted` is true.","on_invalid":"reject","example":"54301","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Festival Foods store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34846"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"3306104","postal_code":"54301"}},{"name":"categories","description":"The shop.festfoods.com category tree (departments and their collections) or one collection's sub-collections; slugs feed `category`.","required_params":[],"optional_params":["slug","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Optional collection slug: returns its sub-collections. Without it: the whole category tree.","on_invalid":"reject","example":"n-milk-63176","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Festival Foods store prices the results (Festival Foods prices and range differ by store). Default 54301 — then `store_defaulted` is true.","on_invalid":"reject","example":"54301","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Festival Foods store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34846"}],"returns":"collections[]{slug,name,url,children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-63176"}},{"name":"stores","description":"Festival Foods stores around a US ZIP code, nearest first, with address, coordinates, distance and which services shop.festfoods.com offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find Festival Foods stores around (nearest first).","on_invalid":"reject","example":"54301","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"54301"}},{"name":"offers","description":"Festival Foods's current deal lists at one store: BOGO, On Sale.","required_params":[],"optional_params":["type","page","per_page","cursor","postal_code","store_id"],"params":[{"name":"type","type":"enum","required":false,"description":"Which deal list: bogo (BOGO), on_sale (On Sale).","on_invalid":"reject","allowed_values":[{"value":"bogo","label":"BOGO"},{"value":"on_sale","label":"On Sale"}],"default":"bogo"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Festival Foods store prices the results (Festival Foods prices and range differ by store). Default 54301 — then `store_defaulted` is true.","on_invalid":"reject","example":"54301","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Festival Foods store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34846"}],"returns":"type, collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"54301"}},{"name":"promotions","description":"Which Festival Foods deal lists are live now at one store, each with its name and product count.","required_params":[],"optional_params":["postal_code","store_id"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Festival Foods store prices the results (Festival Foods prices and range differ by store). Default 54301 — then `store_defaulted` is true.","on_invalid":"reject","example":"54301","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Festival Foods store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34846"}],"returns":"promotions[]{type,name,slug,url,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"54301"}}]},{"name":"file-convert","category":{"id":"utilities","title":"Utilities & AI"},"title":"File Conversion API — convert and process files: PDF tools, image convert/optimize, document-to-markdown (for RAG), OCR, Office-to-PDF, audio extraction and data-format conversion","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/file-convert/v1","spec_available":true,"actions":[{"name":"pdf_extract_text","description":"Extract text from a PDF (per page). mode=layout preserves visual alignment (pdfplumber); mode=plain is fastest. Flags likely-scanned PDFs.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"pages","type":"string","required":false,"description":"Page selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.","on_invalid":"ignore","example":"1-3,5"},{"name":"mode","type":"enum","required":false,"description":"plain = reading-order text; layout = whitespace-aligned text (tables stay readable).","on_invalid":"reject","allowed_values":[{"value":"plain","label":"Plain"},{"value":"layout","label":"Layout-aware"}],"default":"plain","example":"plain"}],"returns":"pages[] (page, text), page_count, pages_extracted, characters, empty_pages, likely_scanned (true ⇒ use ocr_pdf), stop_reason","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="}},{"name":"pdf_metadata","description":"PDF document properties: title/author/dates/producer, page count & size, encryption flag, AcroForm field count.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"}],"returns":"encrypted, page_count, title, author, subject, creator, producer, creation_date, modification_date, page_size_points, has_form, form_field_count","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="}},{"name":"pdf_merge","description":"Merge 2-20 PDFs into one (input order preserved). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"files_b64","type":"array","required":false,"description":"Array of base64 files (max 20 total inputs). Combine freely with file_urls; base64 entries come first in the processing order.","on_invalid":"ignore","example":["JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="]},{"name":"file_urls","type":"array","required":false,"description":"Array of https URLs (each SSRF-guarded and fetched server-side).","on_invalid":"ignore","example":["https://pdfobject.com/pdf/sample.pdf","https://pdfobject.com/pdf/sample.pdf"]},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"}],"returns":"input_files, page_count, files[] (merged.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"files_b64":["JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="]}},{"name":"pdf_split","description":"Split a PDF: pages='2-5,8' extracts those pages into one PDF; chunk_size=N splits the whole document into N-page parts (max 100 parts). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"pages","type":"string","required":false,"description":"Pages to EXTRACT into a single PDF (mutually exclusive with chunk_size).","on_invalid":"ignore","example":"1-3,5"},{"name":"chunk_size","type":"integer","required":false,"description":"Split into parts of N pages each (1 = one PDF per page). Ignored when 'pages' is given.","on_invalid":"reject","example":1,"minimum":1,"maximum":500}],"returns":"page_count, parts, files[] (part_NNN.pdf or extracted.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","chunk_size":1}},{"name":"pdf_rotate","description":"Rotate pages clockwise by 90/180/270° (all pages or a range). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"pages","type":"string","required":false,"description":"Page selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.","on_invalid":"ignore","example":"1-3,5"},{"name":"angle","type":"enum","required":false,"description":"Clockwise rotation angle.","on_invalid":"reject","allowed_values":[{"value":90,"label":"90° CW"},{"value":180,"label":"180°"},{"value":270,"label":"270° CW"}],"default":90,"example":90}],"returns":"page_count, rotated_pages, angle, files[] (rotated.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","angle":90}},{"name":"pdf_to_images","description":"Render PDF pages to PNG/JPG/WebP (pypdfium2). Max 20 pages per call, dpi ≤ 300. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"pages","type":"string","required":false,"description":"Page selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.","on_invalid":"ignore","example":"1-3,5"},{"name":"to","type":"enum","required":false,"description":"Image format for the rendered pages (alias: format).","on_invalid":"reject","allowed_values":[{"value":"png","label":"PNG"},{"value":"jpg","label":"JPG"},{"value":"webp","label":"WebP"}],"default":"png","example":"png","aliases":["format"]},{"name":"dpi","type":"integer","required":false,"description":"Render resolution (36-300).","on_invalid":"reject","default":150,"example":150,"minimum":36,"maximum":300}],"returns":"page_count, rendered, dpi, stop_reason, files[] (page_NNN.png, each with width/height)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","dpi":72}},{"name":"images_to_pdf","description":"Combine 1-20 images into a single PDF (one page per image; page_size=a4/letter centers each image on a standard page). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"files_b64","type":"array","required":false,"description":"Array of base64 files (max 20 total inputs). Combine freely with file_urls; base64 entries come first in the processing order.","on_invalid":"ignore","example":["iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg==","iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="]},{"name":"file_urls","type":"array","required":false,"description":"Array of https URLs (each SSRF-guarded and fetched server-side).","on_invalid":"ignore","example":["https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png","https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"]},{"name":"file_b64","type":"string","required":false,"description":"Single image as base64 (or use files_b64).","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"page_size","type":"enum","required":false,"description":"auto = page matches each image; a4/letter = white page, image fitted+centred.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Image size"},{"value":"a4","label":"A4"},{"value":"letter","label":"Letter"}],"default":"auto","example":"auto"}],"returns":"image_count, page_size, files[] (images.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"files_b64":["iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="]}},{"name":"pdf_watermark","description":"Stamp a text or image watermark over pages (true alpha overlay; diagonal or centred). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"pages","type":"string","required":false,"description":"Page selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.","on_invalid":"ignore","example":"1-3,5"},{"name":"text","type":"string","required":false,"description":"Watermark text (UTF-8, DejaVu font). Provide text OR image_b64/image_url.","on_invalid":"ignore","example":"CONFIDENTIAL"},{"name":"image_b64","type":"string","required":false,"description":"Watermark image as base64 (PNG with alpha recommended; scaled to ~40% page width).","on_invalid":"ignore"},{"name":"image_url","type":"string","required":false,"description":"Watermark image URL (SSRF-guarded fetch).","on_invalid":"ignore"},{"name":"opacity","type":"number","required":false,"description":"Watermark opacity 0.02-1.0.","on_invalid":"reject","default":0.25,"example":0.25,"minimum":0.02,"maximum":1.0},{"name":"position","type":"enum","required":false,"description":"Text placement.","on_invalid":"reject","allowed_values":[{"value":"diagonal","label":"Diagonal"},{"value":"center","label":"Centred"}],"default":"diagonal","example":"diagonal"},{"name":"color","type":"enum","required":false,"description":"Text colour.","on_invalid":"reject","allowed_values":[{"value":"gray","label":"Gray"},{"value":"red","label":"Red"},{"value":"black","label":"Black"},{"value":"blue","label":"Blue"}],"default":"gray","example":"gray"},{"name":"font_size","type":"integer","required":false,"description":"Text size in pixels at 2× page scale (default: auto ≈ page/10).","on_invalid":"reject","example":24,"minimum":8,"maximum":400}],"returns":"page_count, watermarked_pages, kind (text|image), files[] (watermarked.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","text":"CANARY"}},{"name":"pdf_fill_form","description":"AcroForm filling. Without 'fields' → lists the form fields (discovery). With 'fields' → fills and returns the PDF (NeedAppearances set). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUi9BY3JvRm9ybTw8L0ZpZWxkc1s2IDAgUiA3IDAgUl0vREEoL0hlbHYgMCBUZiAwIGcpL0RSPDwvRm9udDw8L0hlbHYgNSAwIFIvWmFEYiA4IDAgUj4+Pj4vTmVlZEFwcGVhcmFuY2VzIHRydWU+Pj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0hlbHYgNSAwIFIvWmFEYiA4IDAgUj4+Pj4vQW5ub3RzWzYgMCBSIDcgMCBSXT4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNjU+PnN0cmVhbQpCVCAvSGVsdiAxNCBUZiA3MiA3NDAgVGQgKFJlZWZBUEkgZ29sZGVuIEFjcm9Gb3JtIHRlc3QgUERGKSBUaiBFVAplbmRzdHJlYW1lbmRvYmoKNSAwIG9iajw8L1R5cGUvRm9udC9TdWJ0eXBlL1R5cGUxL0Jhc2VGb250L0hlbHZldGljYS9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmc+PmVuZG9iago2IDAgb2JqPDwvVHlwZS9Bbm5vdC9TdWJ0eXBlL1dpZGdldC9GVC9UeC9UKG5hbWUpL1RVKEZ1bGwgbmFtZSkvRmYgMC9WKCkvUmVjdFs3MiA2NjAgMzcyIDY5MF0vREEoL0hlbHYgMTIgVGYgMCBnKS9GIDQvUCAzIDAgUi9NSzw8L0JDWzAgMCAwXS9CR1sxIDEgMV0+Pj4+ZW5kb2JqCjcgMCBvYmo8PC9UeXBlL0Fubm90L1N1YnR5cGUvV2lkZ2V0L0ZUL0J0bi9UKGFncmVlKS9UVShJIGFncmVlKS9WL09mZi9BUy9PZmYvUmVjdFs3MiA2MjAgOTIgNjQwXS9EQSgvWmFEYiAwIFRmIDAgZykvRiA0L1AgMyAwIFIvTUs8PC9CQ1swIDAgMF0vQkdbMSAxIDFdL0NBKDQpPj4vQVA8PC9OPDwvWWVzIDkgMCBSL09mZiAxMCAwIFI+Pj4+Pj5lbmRvYmoKOCAwIG9iajw8L1R5cGUvRm9udC9TdWJ0eXBlL1R5cGUxL0Jhc2VGb250L1phcGZEaW5nYmF0cz4+ZW5kb2JqCjkgMCBvYmo8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9Gb3JtL0JCb3hbMCAwIDIwIDIwXS9SZXNvdXJjZXM8PC9Gb250PDwvWmFEYiA4IDAgUj4+Pj4vTGVuZ3RoIDQ2Pj5zdHJlYW0KcSBCVCAvWmFEYiAxNCBUZiAwIGcgNCA0IFRkICg0KSBUaiBFVCBRCmVuZHN0cmVhbWVuZG9iagoxMCAwIG9iajw8L1R5cGUvWE9iamVjdC9TdWJ0eXBlL0Zvcm0vQkJveFswIDAgMjAgMjBdL1Jlc291cmNlczw8Pj4vTGVuZ3RoIDg+PnN0cmVhbQpxICBRCmVuZHN0cmVhbWVuZG9iagp4cmVmCjAgMTEKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAwMDAxNjMgMDAwMDAgbiAKMDAwMDAwMDIxMiAwMDAwMCBuIAowMDAwMDAwMzU1IDAwMDAwIG4gCjAwMDAwMDA0NjUgMDAwMDAgbiAKMDAwMDAwMDU1MSAwMDAwMCBuIAowMDAwMDAwNzEyIDAwMDAwIG4gCjAwMDAwMDA5MTUgMDAwMDAgbiAKMDAwMDAwMDk3OSAwMDAwMCBuIAowMDAwMDAxMTM5IDAwMDAwIG4gCnRyYWlsZXI8PC9TaXplIDExL1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMTI0NAolJUVPRgo="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"form.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"fields","type":"object","required":false,"description":"{field_name: value} map. Checkbox values are usually /Yes — run discovery mode first.","on_invalid":"ignore","example":{"name":"Jane Doe","agree":"/Yes"}}],"returns":"mode (list|fill), has_form, field_count, fields[]/fields_filled, fields_unknown[], files[] (filled.pdf, fill mode only)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUi9BY3JvRm9ybTw8L0ZpZWxkc1s2IDAgUiA3IDAgUl0vREEoL0hlbHYgMCBUZiAwIGcpL0RSPDwvRm9udDw8L0hlbHYgNSAwIFIvWmFEYiA4IDAgUj4+Pj4vTmVlZEFwcGVhcmFuY2VzIHRydWU+Pj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0hlbHYgNSAwIFIvWmFEYiA4IDAgUj4+Pj4vQW5ub3RzWzYgMCBSIDcgMCBSXT4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNjU+PnN0cmVhbQpCVCAvSGVsdiAxNCBUZiA3MiA3NDAgVGQgKFJlZWZBUEkgZ29sZGVuIEFjcm9Gb3JtIHRlc3QgUERGKSBUaiBFVAplbmRzdHJlYW1lbmRvYmoKNSAwIG9iajw8L1R5cGUvRm9udC9TdWJ0eXBlL1R5cGUxL0Jhc2VGb250L0hlbHZldGljYS9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmc+PmVuZG9iago2IDAgb2JqPDwvVHlwZS9Bbm5vdC9TdWJ0eXBlL1dpZGdldC9GVC9UeC9UKG5hbWUpL1RVKEZ1bGwgbmFtZSkvRmYgMC9WKCkvUmVjdFs3MiA2NjAgMzcyIDY5MF0vREEoL0hlbHYgMTIgVGYgMCBnKS9GIDQvUCAzIDAgUi9NSzw8L0JDWzAgMCAwXS9CR1sxIDEgMV0+Pj4+ZW5kb2JqCjcgMCBvYmo8PC9UeXBlL0Fubm90L1N1YnR5cGUvV2lkZ2V0L0ZUL0J0bi9UKGFncmVlKS9UVShJIGFncmVlKS9WL09mZi9BUy9PZmYvUmVjdFs3MiA2MjAgOTIgNjQwXS9EQSgvWmFEYiAwIFRmIDAgZykvRiA0L1AgMyAwIFIvTUs8PC9CQ1swIDAgMF0vQkdbMSAxIDFdL0NBKDQpPj4vQVA8PC9OPDwvWWVzIDkgMCBSL09mZiAxMCAwIFI+Pj4+Pj5lbmRvYmoKOCAwIG9iajw8L1R5cGUvRm9udC9TdWJ0eXBlL1R5cGUxL0Jhc2VGb250L1phcGZEaW5nYmF0cz4+ZW5kb2JqCjkgMCBvYmo8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9Gb3JtL0JCb3hbMCAwIDIwIDIwXS9SZXNvdXJjZXM8PC9Gb250PDwvWmFEYiA4IDAgUj4+Pj4vTGVuZ3RoIDQ2Pj5zdHJlYW0KcSBCVCAvWmFEYiAxNCBUZiAwIGcgNCA0IFRkICg0KSBUaiBFVCBRCmVuZHN0cmVhbWVuZG9iagoxMCAwIG9iajw8L1R5cGUvWE9iamVjdC9TdWJ0eXBlL0Zvcm0vQkJveFswIDAgMjAgMjBdL1Jlc291cmNlczw8Pj4vTGVuZ3RoIDg+PnN0cmVhbQpxICBRCmVuZHN0cmVhbWVuZG9iagp4cmVmCjAgMTEKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAwMDAxNjMgMDAwMDAgbiAKMDAwMDAwMDIxMiAwMDAwMCBuIAowMDAwMDAwMzU1IDAwMDAwIG4gCjAwMDAwMDA0NjUgMDAwMDAgbiAKMDAwMDAwMDU1MSAwMDAwMCBuIAowMDAwMDAwNzEyIDAwMDAwIG4gCjAwMDAwMDA5MTUgMDAwMDAgbiAKMDAwMDAwMDk3OSAwMDAwMCBuIAowMDAwMDAxMTM5IDAwMDAwIG4gCnRyYWlsZXI8PC9TaXplIDExL1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMTI0NAolJUVPRgo="}},{"name":"pdf_redact","description":"TRUE redaction: target pages are re-rendered with the matches blacked out and REBUILT — original text/fonts/layers destroyed, then verified by re-extraction (output withheld if any remnant). Redacted pages lose selectable text. Find by 'terms' and/or explicit 'areas'. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"terms","type":"array","required":false,"description":"Text terms to find & redact (case-insensitive, matched across words on a line).","on_invalid":"ignore","example":["Jane Doe","ACME-2024-001"]},{"name":"areas","type":"array","required":false,"description":"Explicit boxes: {page, x0, y0, x1, y1} in PDF points, origin TOP-left.","on_invalid":"ignore","example":[{"page":1,"x0":72,"y0":90,"x1":300,"y1":120}]},{"name":"dpi","type":"integer","required":false,"description":"Rebuild resolution for redacted pages.","on_invalid":"reject","default":200,"example":200,"minimum":120,"maximum":300}],"returns":"page_count, redacted_pages, pages[], matches, verified_removed (always true on success), method, files[] (redacted.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","terms":["golden"]}},{"name":"pdf_compress","description":"Shrink a PDF: stream recompression + embedded-image re-encode (level=low/balanced/strong; strong also caps image resolution). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"level","type":"enum","required":false,"description":"Compression aggressiveness.","on_invalid":"reject","allowed_values":[{"value":"low","label":"Low (quality 85)"},{"value":"balanced","label":"Balanced (quality 75)"},{"value":"strong","label":"Strong (quality 60 + downscale)"}],"default":"balanced","example":"balanced"}],"returns":"bytes_before, bytes_after, saved_pct, images_recoded, level, files[] (compressed.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="}},{"name":"pdf_protect","description":"Encrypt a PDF with AES-256 (user password to open; optional owner password). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":["user_password"],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"user_password","type":"string","required":true,"description":"Password required to OPEN the PDF (min 4 chars).","on_invalid":"ignore","example":"s3cret!"},{"name":"owner_password","type":"string","required":false,"description":"Optional owner/permissions password (defaults to the user password.","on_invalid":"ignore","example":"owner123"}],"returns":"page_count, algorithm (AES-256), files[] (protected.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","user_password":"canary123"}},{"name":"pdf_unlock","description":"Remove encryption from a PDF — REQUIRES the correct password (we never crack or bypass protection). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":["password"],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNjQ+PnN0cmVhbQrpKGDFfcWpNJhwgBvsFFzVQL9DwsFTy36zcGXftL4ci6vYoPE1iyw1XypQVtobWFkJn8eA0q4g8jlAQouAqf7mCmVuZHN0cmVhbWVuZG9iago1IDAgb2JqPDwvVHlwZS9Gb250L1N1YnR5cGUvVHlwZTEvQmFzZUZvbnQvSGVsdmV0aWNhPj5lbmRvYmoKNiAwIG9iajw8L0ZpbHRlci9TdGFuZGFyZC9WIDEvUiAyL088MjRlODI1ODljYTJhMzBiMWM4MTczZmZjY2Y0YTRmYTc2YWYyZThkMWVjZThiODJmMzY1MzBjYTllNmJmNmZiOT4vVTxhZmM4MTZlZmExYzJhYjAyMGQ4ZGYwYmZjOGY5MmM4YTM4OGIyNjZlNzk5Mzc1MTY4NmQwZjliMjIxZDQxZDI4Pi9QIC0xPj5lbmRvYmoKeHJlZgowIDcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAwMDAwNTIgMDAwMDAgbiAKMDAwMDAwMDEwMSAwMDAwMCBuIAowMDAwMDAwMjExIDAwMDAwIG4gCjAwMDAwMDAzMjAgMDAwMDAgbiAKMDAwMDAwMDM4MSAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA3L1Jvb3QgMSAwIFIvRW5jcnlwdCA2IDAgUi9JRFs8NTI2NTY1NjY0MTUwNDk2NzZmNmM2NDY1NmUzMDMwMzAzMT48NTI2NTY1NjY0MTUwNDk2NzZmNmM2NDY1NmUzMDMwMzAzMT5dPj4Kc3RhcnR4cmVmCjU2NAolJUVPRgo="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"locked.pdf"},{"name":"password","type":"string","required":true,"description":"The PDF's legitimate password. (The base64 example above is an encrypted sample whose password is 'reefapi'.)","on_invalid":"ignore","example":"reefapi"}],"returns":"page_count, was_encrypted, files[] (unlocked.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNjQ+PnN0cmVhbQrpKGDFfcWpNJhwgBvsFFzVQL9DwsFTy36zcGXftL4ci6vYoPE1iyw1XypQVtobWFkJn8eA0q4g8jlAQouAqf7mCmVuZHN0cmVhbWVuZG9iago1IDAgb2JqPDwvVHlwZS9Gb250L1N1YnR5cGUvVHlwZTEvQmFzZUZvbnQvSGVsdmV0aWNhPj5lbmRvYmoKNiAwIG9iajw8L0ZpbHRlci9TdGFuZGFyZC9WIDEvUiAyL088MjRlODI1ODljYTJhMzBiMWM4MTczZmZjY2Y0YTRmYTc2YWYyZThkMWVjZThiODJmMzY1MzBjYTllNmJmNmZiOT4vVTxhZmM4MTZlZmExYzJhYjAyMGQ4ZGYwYmZjOGY5MmM4YTM4OGIyNjZlNzk5Mzc1MTY4NmQwZjliMjIxZDQxZDI4Pi9QIC0xPj5lbmRvYmoKeHJlZgowIDcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAwMDAwNTIgMDAwMDAgbiAKMDAwMDAwMDEwMSAwMDAwMCBuIAowMDAwMDAwMjExIDAwMDAwIG4gCjAwMDAwMDAzMjAgMDAwMDAgbiAKMDAwMDAwMDM4MSAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA3L1Jvb3QgMSAwIFIvRW5jcnlwdCA2IDAgUi9JRFs8NTI2NTY1NjY0MTUwNDk2NzZmNmM2NDY1NmUzMDMwMzAzMT48NTI2NTY1NjY0MTUwNDk2NzZmNmM2NDY1NmUzMDMwMzAzMT5dPj4Kc3RhcnR4cmVmCjU2NAolJUVPRgo=","password":"reefapi"}},{"name":"pdf_repair","description":"Best-effort structural repair (broken xref/trailer/stream lengths) via a tolerant qpdf parse + clean rewrite. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"}],"returns":"page_count, readable_after_repair, note, files[] (repaired.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="}},{"name":"image_convert","description":"Convert between raster formats (jpg/png/webp/tiff/bmp/gif/avif; animated gif/webp preserved where the target supports it). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":["to"],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"photo.png"},{"name":"to","type":"enum","required":true,"description":"Target format: jpg, png, webp, tiff, bmp, gif, avif.","on_invalid":"reject","allowed_values":[{"value":"jpg","label":"JPG"},{"value":"png","label":"PNG"},{"value":"webp","label":"WEBP"},{"value":"tiff","label":"TIFF"},{"value":"bmp","label":"BMP"},{"value":"gif","label":"GIF"},{"value":"avif","label":"AVIF"}],"example":"jpg"},{"name":"quality","type":"integer","required":false,"description":"Encode quality 1-100 (jpg/webp/avif).","on_invalid":"reject","default":85,"example":85,"minimum":1,"maximum":100}],"returns":"from, to, width, height, frames, files[]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg==","to":"webp"}},{"name":"image_resize","description":"Resize with fit=contain (aspect kept, fits inside box) / cover (fills+crops) / stretch. No upscaling unless upscale=true. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"photo.png"},{"name":"width","type":"integer","required":false,"description":"Target width px (give width and/or height).","on_invalid":"reject","example":800,"minimum":1,"maximum":20000},{"name":"height","type":"integer","required":false,"description":"Target height px.","on_invalid":"reject","example":8,"minimum":1,"maximum":20000},{"name":"fit","type":"enum","required":false,"description":"Resize strategy.","on_invalid":"reject","allowed_values":[{"value":"contain","label":"Contain"},{"value":"cover","label":"Cover"},{"value":"stretch","label":"Stretch"}],"default":"contain","example":"contain"},{"name":"upscale","type":"boolean","required":false,"description":"Allow enlarging beyond the source size.","on_invalid":"ignore","default":false,"example":false},{"name":"to","type":"enum","required":false,"description":"Optional output format (default: keep source).","on_invalid":"reject","allowed_values":[{"value":"jpg","label":"JPG"},{"value":"png","label":"PNG"},{"value":"webp","label":"WEBP"},{"value":"tiff","label":"TIFF"},{"value":"bmp","label":"BMP"},{"value":"gif","label":"GIF"},{"value":"avif","label":"AVIF"}],"default":"","example":"jpg"},{"name":"quality","type":"integer","required":false,"description":"Encode quality 1-100 (jpg/webp/avif).","on_invalid":"reject","default":85,"example":85,"minimum":1,"maximum":100}],"returns":"from_size, to_size, fit, files[]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg==","width":64}},{"name":"image_optimize","description":"Smart perceptual compression (TinyPNG-style): binary-searches the lowest quality whose decoded result stays visually equal to the source, per a per-channel error budget (effort=low/balanced/strong). Optionally convert to webp/avif while optimizing. Never returns a bigger file. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"photo.png"},{"name":"to","type":"enum","required":false,"description":"auto = keep format (exotic sources → webp).","on_invalid":"reject","allowed_values":[{"value":"auto","label":"AUTO"},{"value":"jpg","label":"JPG"},{"value":"png","label":"PNG"},{"value":"webp","label":"WEBP"},{"value":"avif","label":"AVIF"}],"default":"auto","example":"auto"},{"name":"effort","type":"enum","required":false,"description":"How much visual error to allow.","on_invalid":"reject","allowed_values":[{"value":"low","label":"Visually lossless"},{"value":"balanced","label":"Balanced"},{"value":"strong","label":"Max savings"}],"default":"balanced","example":"balanced"}],"returns":"from, to, bytes_before, bytes_after, saved_pct, quality, method, files[]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="}},{"name":"image_thumbnail","description":"Fast thumbnail (16-2048px box; square=true centre-crops to a square). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"photo.png"},{"name":"size","type":"integer","required":false,"description":"Bounding-box size in px.","on_invalid":"reject","default":256,"example":256,"minimum":16,"maximum":2048},{"name":"square","type":"boolean","required":false,"description":"Centre-crop to square.","on_invalid":"ignore","default":false,"example":false},{"name":"to","type":"enum","required":false,"description":"Thumbnail format.","on_invalid":"reject","allowed_values":[{"value":"webp","label":"WEBP"},{"value":"jpg","label":"JPG"},{"value":"png","label":"PNG"}],"default":"webp","example":"webp"}],"returns":"from_size, to_size, files[] (thumb.webp)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg==","size":64}},{"name":"image_metadata","description":"Read image facts + EXIF (+GPS) — and with strip=true return a copy with ALL metadata removed (EXIF/GPS/XMP/ICC).","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"photo.png"},{"name":"strip","type":"boolean","required":false,"description":"Also return a metadata-stripped copy.","on_invalid":"ignore","default":false,"example":false}],"returns":"format, mode, width, height, frames, bytes, exif{}, gps{}, has_gps, stripped, files[] (stripped.jpg/png when strip=true)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="}},{"name":"image_rotate","description":"Rotate (90/180/270 clockwise) and/or flip (horizontal/vertical). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"photo.png"},{"name":"angle","type":"enum","required":false,"description":"Clockwise rotation.","on_invalid":"reject","allowed_values":[{"value":0,"label":"None"},{"value":90,"label":"90° CW"},{"value":180,"label":"180°"},{"value":270,"label":"270° CW"}],"default":0,"example":0},{"name":"flip","type":"enum","required":false,"description":"Optional mirror.","on_invalid":"reject","allowed_values":[{"value":"horizontal","label":"Horizontal"},{"value":"vertical","label":"Vertical"}],"default":"","example":"horizontal"}],"returns":"angle, flip, size, files[]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg==","angle":90}},{"name":"image_crop","description":"Crop a pixel box (x, y from top-left + width × height). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":["width","height"],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"photo.png"},{"name":"x","type":"integer","required":false,"description":"Left edge px.","on_invalid":"reject","default":0,"example":0,"minimum":0},{"name":"y","type":"integer","required":false,"description":"Top edge px.","on_invalid":"reject","default":0,"example":0,"minimum":0},{"name":"width","type":"integer","required":true,"description":"Crop width px.","on_invalid":"reject","example":16,"minimum":1},{"name":"height","type":"integer","required":true,"description":"Crop height px.","on_invalid":"reject","example":16,"minimum":1}],"returns":"from_size, box, files[]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg==","width":8,"height":8}},{"name":"doc_to_markdown","description":"Document → clean markdown for RAG/agents. PDF uses a layout engine (headings from font sizes, real pipe-tables, reading order); docx/pptx/xlsx/html via MarkItDown. mode=fast trades structure for speed. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0ndXRmLTgnPjx0aXRsZT5Hb2xkZW48L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+UmVlZkFQSSBnb2xkZW4gdGVzdCBwYWdlPC9oMT48cD5BIHRpbnkgZG9jdW1lbnQgZm9yIGNhbmFyeSBydW5zLjwvcD48dGFibGU+PHRyPjx0aD5lbmdpbmU8L3RoPjx0aD50aWVyPC90aD48L3RyPjx0cj48dGQ+ZmlsZS1jb252ZXJ0PC90ZD48dGQ+dXRpbGl0aWVzPC90ZD48L3RyPjx0cj48dGQ+d2ViLWV4dHJhY3Q8L3RkPjx0ZD5kYXRhPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://example.com/"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.html"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"pages","type":"string","required":false,"description":"Page selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.","on_invalid":"ignore","example":"1-3,5"},{"name":"mode","type":"enum","required":false,"description":"PDF only: layout = headings+tables; fast = plain text spine.","on_invalid":"reject","allowed_values":[{"value":"layout","label":"Layout-aware (PDF)"},{"value":"fast","label":"Fast/plain"}],"default":"layout","example":"layout"}],"returns":"markdown_preview (first 2000 chars), characters, page_count, tables, likely_scanned, files[] (document.md — full markdown)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"file_b64":"PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0ndXRmLTgnPjx0aXRsZT5Hb2xkZW48L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+UmVlZkFQSSBnb2xkZW4gdGVzdCBwYWdlPC9oMT48cD5BIHRpbnkgZG9jdW1lbnQgZm9yIGNhbmFyeSBydW5zLjwvcD48dGFibGU+PHRyPjx0aD5lbmdpbmU8L3RoPjx0aD50aWVyPC90aD48L3RyPjx0cj48dGQ+ZmlsZS1jb252ZXJ0PC90ZD48dGQ+dXRpbGl0aWVzPC90ZD48L3RyPjx0cj48dGQ+d2ViLWV4dHJhY3Q8L3RkPjx0ZD5kYXRhPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4="}},{"name":"extract_tables","description":"Pull every table out of a PDF / xlsx / docx / html as JSON rows (+optional CSV files). Max 50 tables.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0ndXRmLTgnPjx0aXRsZT5Hb2xkZW48L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+UmVlZkFQSSBnb2xkZW4gdGVzdCBwYWdlPC9oMT48cD5BIHRpbnkgZG9jdW1lbnQgZm9yIGNhbmFyeSBydW5zLjwvcD48dGFibGU+PHRyPjx0aD5lbmdpbmU8L3RoPjx0aD50aWVyPC90aD48L3RyPjx0cj48dGQ+ZmlsZS1jb252ZXJ0PC90ZD48dGQ+dXRpbGl0aWVzPC90ZD48L3RyPjx0cj48dGQ+d2ViLWV4dHJhY3Q8L3RkPjx0ZD5kYXRhPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://example.com/"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.html"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"pages","type":"string","required":false,"description":"Page selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.","on_invalid":"ignore","example":"1-3,5"},{"name":"as_csv","type":"boolean","required":false,"description":"Also return each table as a CSV file.","on_invalid":"ignore","default":false,"example":false}],"returns":"table_count, tables[] (source, rows, columns, data[][]), stop_reason, files[] (table_N.csv when as_csv)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"file_b64":"PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0ndXRmLTgnPjx0aXRsZT5Hb2xkZW48L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+UmVlZkFQSSBnb2xkZW4gdGVzdCBwYWdlPC9oMT48cD5BIHRpbnkgZG9jdW1lbnQgZm9yIGNhbmFyeSBydW5zLjwvcD48dGFibGU+PHRyPjx0aD5lbmdpbmU8L3RoPjx0aD50aWVyPC90aD48L3RyPjx0cj48dGQ+ZmlsZS1jb252ZXJ0PC90ZD48dGQ+dXRpbGl0aWVzPC90ZD48L3RyPjx0cj48dGQ+d2ViLWV4dHJhY3Q8L3RkPjx0ZD5kYXRhPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4="}},{"name":"ocr_image","description":"OCR an image → text + word count + confidence (tesseract 5, printed text; languages: eng/deu/fra/spa/tur, combinable).","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"photo.png"},{"name":"language","type":"array","required":false,"description":"OCR language(s): eng, deu, fra, spa, tur — array or comma-joined.","on_invalid":"ignore","default":"eng","example":["eng","deu"],"aliases":["lang"]}],"returns":"text, words, mean_confidence (0-100), language, width, height, note","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"file_b64":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAH0lEQVR42mN4l+VFFcQwatCoQaMGjRo0atCoQQNvEAB6hKyuf+L5NQAAAABJRU5ErkJggg=="}},{"name":"ocr_pdf","description":"OCR a scanned PDF: output=text → per-page text+confidence; output=searchable_pdf → image+invisible-text-layer PDF. OCR-light: max 10 pages per call (use 'pages' to window). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg=="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://pdfobject.com/pdf/sample.pdf"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.pdf"},{"name":"password","type":"string","required":false,"description":"Password for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).","on_invalid":"ignore","example":"x"},{"name":"pages","type":"string","required":false,"description":"Page selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.","on_invalid":"ignore","example":"1-3,5"},{"name":"language","type":"array","required":false,"description":"OCR language(s): eng, deu, fra, spa, tur.","on_invalid":"ignore","default":"eng","example":"eng","aliases":["lang"]},{"name":"output","type":"enum","required":false,"description":"Result kind.","on_invalid":"reject","allowed_values":[{"value":"text","label":"Plain text"},{"value":"searchable_pdf","label":"Searchable PDF"}],"default":"text","example":"text"}],"returns":"page_count, pages_ocr, language, stop_reason; text mode: pages[] (page, text, words, mean_confidence), text, mean_confidence; searchable_pdf mode: files[] (searchable.pdf)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"file_b64":"JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNTQ+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChSZWVmQVBJIGdvbGRlbiB0ZXN0IFBERikgVGogRVQKZW5kc3RyZWFtZW5kb2JqCjUgMCBvYmo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMS9CYXNlRm9udC9IZWx2ZXRpY2E+PmVuZG9iagp4cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1MiAwMDAwMCBuIAowMDAwMDAwMTAxIDAwMDAwIG4gCjAwMDAwMDAyMTEgMDAwMDAgbiAKMDAwMDAwMDMxMCAwMDAwMCBuIAp0cmFpbGVyPDwvU2l6ZSA2L1Jvb3QgMSAwIFI+PgpzdGFydHhyZWYKMzcxCiUlRU9GCg==","pages":"1"}},{"name":"office_convert","description":"Office → PDF (and html/txt; spreadsheets also → csv; text docs also → docx) via LibreOffice headless — docx/doc/odt/rtf/pptx/ppt/odp/xlsx/xls/ods/html/markdown/txt/csv in. Fonts: Noto (CJK/RTL) + Liberation (Arial/Times metrics). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0ndXRmLTgnPjx0aXRsZT5Hb2xkZW48L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+UmVlZkFQSSBnb2xkZW4gdGVzdCBwYWdlPC9oMT48cD5BIHRpbnkgZG9jdW1lbnQgZm9yIGNhbmFyeSBydW5zLjwvcD48dGFibGU+PHRyPjx0aD5lbmdpbmU8L3RoPjx0aD50aWVyPC90aD48L3RyPjx0cj48dGQ+ZmlsZS1jb252ZXJ0PC90ZD48dGQ+dXRpbGl0aWVzPC90ZD48L3RyPjx0cj48dGQ+d2ViLWV4dHJhY3Q8L3RkPjx0ZD5kYXRhPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4="},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://example.com/"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"report.html"},{"name":"to","type":"enum","required":false,"description":"Target: pdf (default) | html | txt | csv (spreadsheets only) | docx (text documents only).","on_invalid":"reject","allowed_values":[{"value":"pdf","label":"PDF"},{"value":"html","label":"HTML"},{"value":"txt","label":"TXT"},{"value":"csv","label":"CSV"},{"value":"docx","label":"DOCX"}],"default":"pdf","example":"pdf"},{"name":"from","type":"enum","required":false,"description":"Set from=md when sending markdown (it has no magic bytes; .md filename also works).","on_invalid":"ignore","allowed_values":[{"value":"md","label":"Markdown"}],"default":""}],"returns":"from, to, engine, files, fidelity_note, files[] (converted.pdf …)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"file_b64":"PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0ndXRmLTgnPjx0aXRsZT5Hb2xkZW48L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+UmVlZkFQSSBnb2xkZW4gdGVzdCBwYWdlPC9oMT48cD5BIHRpbnkgZG9jdW1lbnQgZm9yIGNhbmFyeSBydW5zLjwvcD48dGFibGU+PHRyPjx0aD5lbmdpbmU8L3RoPjx0aD50aWVyPC90aD48L3RyPjx0cj48dGQ+ZmlsZS1jb252ZXJ0PC90ZD48dGQ+dXRpbGl0aWVzPC90ZD48L3RyPjx0cj48dGQ+d2ViLWV4dHJhY3Q8L3RkPjx0ZD5kYXRhPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4=","to":"pdf"}},{"name":"audio_extract","description":"Extract the audio track from a video (mp4/webm/mkv/avi) → mp3 (default) / m4a / wav / flac / ogg / opus. Stream-copies losslessly when the codec already matches the target. NOT a video transcoder (phase-2). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore"},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://download.samplelib.com/mp4/sample-5s.mp4"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"clip.mp4"},{"name":"to","type":"enum","required":false,"description":"Audio output format.","on_invalid":"reject","allowed_values":[{"value":"mp3","label":"MP3"},{"value":"m4a","label":"M4A"},{"value":"wav","label":"WAV"},{"value":"flac","label":"FLAC"},{"value":"ogg","label":"OGG"},{"value":"opus","label":"OPUS"}],"default":"mp3","example":"mp3"},{"name":"bitrate","type":"enum","required":false,"description":"Target bitrate (forces transcode; default 192k/encoder default).","on_invalid":"reject","allowed_values":[{"value":"64k","label":"64k"},{"value":"96k","label":"96k"},{"value":"128k","label":"128k"},{"value":"160k","label":"160k"},{"value":"192k","label":"192k"},{"value":"256k","label":"256k"},{"value":"320k","label":"320k"}],"default":"","example":"192k"}],"returns":"from, to, method (stream-copy|transcode:enc), source_codec, duration_s, sample_rate, channels, files[] (audio.mp3)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"file_url":"https://download.samplelib.com/mp4/sample-5s.mp4"}},{"name":"audio_convert","description":"Convert between audio formats (mp3/wav/flac/ogg/m4a in → mp3/m4a/wav/flac/ogg/opus out; ffmpeg LGPL build). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":["to"],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"UklGRsQPAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YaAPAAAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDw"},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://download.samplelib.com/mp4/sample-5s.mp4"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"clip.wav"},{"name":"to","type":"enum","required":true,"description":"Target format: mp3, m4a, wav, flac, ogg, opus.","on_invalid":"reject","allowed_values":[{"value":"mp3","label":"MP3"},{"value":"m4a","label":"M4A"},{"value":"wav","label":"WAV"},{"value":"flac","label":"FLAC"},{"value":"ogg","label":"OGG"},{"value":"opus","label":"OPUS"}],"example":"mp3"},{"name":"bitrate","type":"enum","required":false,"description":"Target bitrate.","on_invalid":"reject","allowed_values":[{"value":"64k","label":"64k"},{"value":"96k","label":"96k"},{"value":"128k","label":"128k"},{"value":"160k","label":"160k"},{"value":"192k","label":"192k"},{"value":"256k","label":"256k"},{"value":"320k","label":"320k"}],"default":"","example":"192k"}],"returns":"from, to, method, source_codec, duration_s, files[]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"file_b64":"UklGRsQPAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YaAPAAAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDw","to":"mp3"}},{"name":"media_probe","description":"ffprobe metadata for any audio/video file: container, duration, bitrate, per-stream codec/sample-rate/resolution, curated tags.","required_params":[],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"UklGRsQPAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YaAPAAAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDw"},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://download.samplelib.com/mp4/sample-5s.mp4"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"clip.wav"}],"returns":"container, duration_s, bit_rate, size_bytes, stream_count, streams[] (type, codec, sample_rate/width/height…), tags{}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"UklGRsQPAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YaAPAAAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDwAADgD+EdWCgLLkwuEyn/HkEReAGE8UbjbdhB0n/RPNbq32PtD/0TDY0bxCZmLaouaSolIfUTaQRY9KflFNr90jjR+9TV3bnqIfo5Ch0ZCSWULNoulSspI5UWVQc49yTo4tvm0yDR5tPi2yToOPdVB5UWKSOVK9oulCwJJR0ZOQoh+rnq1d371DjR/dIU2qflWPRpBPUTJSFpKqouZi3EJo0bEw0P/WPt6t881n/RQdJt2EbjhPF4AUER/x4TKUwuCy5YKOEd4A8AACDwH+Ko1/XRtNHt1gHhv+6I/nwOuhyTJ78tgS7EKRYgnRLxAu3yc+Q82ZrSVtGX1dveC+yX+6gLWRrsJQMtyC4FKysiRxXfBcf14+b32mzTJtFr1Nfca+mr+MgI3BceJBos4C4aLB4k3BfICKv4a+nX3GvUJtFs0/fa4+bH9d8FRxUrIgUryC4DLewlWRqoC5f7C+zb3pfVVtGa0jzZc+Tt8vECnRIWIMQpgS6/LZMnuhx8Doj+v+4B4e3WtNH10ajXH+Ig8AAA4A/hHVgoCy5MLhMp/x5BEXgBhPFG423YQdJ/0TzW6t9j7Q/9Ew2NG8QmZi2qLmkqJSH1E2kEWPSn5RTa/dI40fvU1d256iH6OQodGQkllCzaLpUrKSOVFlUHOPck6OLb5tMg0ebT4tsk6Dj3VQeVFikjlSvaLpQsCSUdGTkKIfq56tXd+9Q40f3SFNqn5Vj0aQT1EyUhaSqqLmYtxCaNGxMND/1j7erfPNZ/0UHSbdhG44TxeAFBEf8eEylMLgsuWCjhHeAPAAAg8B/iqNf10bTR7dYB4b/uiP58Drockye/LYEuxCkWIJ0S8QLt8nPkPNma0lbRl9Xb3gvsl/uoC1ka7CUDLcguBSsrIkcV3wXH9ePm99ps0ybRa9TX3Gvpq/jICNwXHiQaLOAuGiweJNwXyAir+Gvp19xr1CbRbNP32uPmx/XfBUcVKyIFK8guAy3sJVkaqAuX+wvs296X1VbRmtI82XPk7fLxAp0SFiDEKYEuvy2TJ7ocfA6I/r/uAeHt1rTR9dGo1x/iIPAAAOAP4R1YKAsuTC4TKf8eQRF4AYTxRuNt2EHSf9E81urfY+0P/RMNjRvEJmYtqi5pKiUh9RNpBFj0p+UU2v3SONH71NXdueoh+jkKHRkJJZQs2i6VKykjlRZVBzj3JOji2+bTINHm0+LbJOg491UHlRYpI5Ur2i6ULAklHRk5CiH6uerV3fvUONH90hTap+VY9GkE9RMlIWkqqi5mLcQmjRsTDQ/9Y+3q3zzWf9FB0m3YRuOE8XgBQRH/HhMpTC4LLlgo4R3gDwAAIPAf4qjX9dG00e3WAeG/7oj+fA66HJMnvy2BLsQpFiCdEvEC7fJz5DzZmtJW0ZfV294L7Jf7qAtZGuwlAy3ILgUrKyJHFd8Fx/Xj5vfabNMm0WvU19xr6av4yAjcFx4kGizgLhosHiTcF8gIq/hr6dfca9Qm0WzT99rj5sf13wVHFSsiBSvILgMt7CVZGqgLl/sL7Nvel9VW0ZrSPNlz5O3y8QKdEhYgxCmBLr8tkye6HHwOiP6/7gHh7da00fXRqNcf4iDw"}},{"name":"data_convert","description":"Deterministic data-format conversion: CSV ↔ JSON ↔ XML ↔ YAML ↔ Excel(xlsx) (any direction; tabular targets need tabular-shaped input — clean error otherwise). 200k-row cap. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.","required_params":["to"],"optional_params":[],"params":[{"name":"file_b64","type":"string","required":false,"description":"The input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.","on_invalid":"ignore","example":"bmFtZSxjcmVkaXRzLGNhdGVnb3J5CnBkZl9tZXJnZSwxLHBkZgppbWFnZV9vcHRpbWl6ZSwyLGltYWdlCm9jcl9wZGYsMixvY3IK"},{"name":"file_url","type":"string","required":false,"description":"https URL of the input file — fetched server-side through the private/internal/metadata addresses are SSRF-blocked. Max 25MB.","on_invalid":"ignore","example":"https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv"},{"name":"filename","type":"string","required":false,"description":"Optional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.","on_invalid":"ignore","example":"data.csv"},{"name":"to","type":"enum","required":true,"description":"Target format: csv, json, xml, yaml, xlsx.","on_invalid":"reject","allowed_values":[{"value":"csv","label":"CSV"},{"value":"json","label":"JSON"},{"value":"xml","label":"XML"},{"value":"yaml","label":"YAML"},{"value":"xlsx","label":"XLSX"}],"example":"json"},{"name":"from","type":"enum","required":false,"description":"Optional source override for ambiguous text (e.g. YAML without a leading ---); binary formats are always sniffed.","on_invalid":"reject","allowed_values":[{"value":"csv","label":"CSV"},{"value":"json","label":"JSON"},{"value":"xml","label":"XML"},{"value":"yaml","label":"YAML"},{"value":"xlsx","label":"Excel"}],"default":""},{"name":"delimiter","type":"string","required":false,"description":"CSV delimiter override (default: sniffed).","on_invalid":"ignore","example":","},{"name":"sheet","type":"string","required":false,"description":"Excel source: sheet name (default: first).","on_invalid":"ignore"}],"returns":"from, to, rows, files[] (converted.json …)","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"file_b64":"bmFtZSxjcmVkaXRzLGNhdGVnb3J5CnBkZl9tZXJnZSwxLHBkZgppbWFnZV9vcHRpbWl6ZSwyLGltYWdlCm9jcl9wZGYsMixvY3IK","to":"json"}},{"name":"formats","description":"Capability matrix: every action with its accepted input formats, targets and caps — machine-readable (the Zamzar /formats equivalent).","required_params":[],"optional_params":[],"params":[],"returns":"actions{action: {accepts[], targets[], caps{}}}, input_policy, output_policy","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"finance","category":{"id":"finance","title":"Finance & Data"},"title":"Finance API — real-time quotes, charts, fundamentals, analyst ratings, screener, options, technicals & earnings/IPO/economic calendars (incl. a market-wide earnings calendar) on Yahoo Finance data + FRED macroeconomic series","version":"1.0.3","pii_redact_default":false,"mint_reusable":null,"base_path":"/finance/v1","spec_available":true,"actions":[{"name":"quote","description":"single or multi-symbol quote","required_params":["symbol"],"optional_params":["symbols"],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol, or use `symbols` for several (e.g. 'AAPL'). crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC'.","on_invalid":"reject","example":"AAPL","aliases":["symbols"]},{"name":"symbols","type":"string","required":false,"description":"Multiple symbols (array or comma-separated) for a batch quote.","on_invalid":"reject","example":"AAPL,MSFT"}],"returns":"quotes[] — symbol, price, change, changePercent, currency, marketCap, volume, exchange, quoteType, marketState","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"chart","description":"OHLCV chart data","required_params":["symbol"],"optional_params":["range","interval"],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"range","type":"enum","required":false,"description":"History window. Common Yahoo ranges shown; other Yahoo range tokens are also accepted. Pair with interval.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"},{"value":"6mo","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"5y","label":"5 years"},{"value":"10y","label":"10 years"},{"value":"ytd","label":"Year to date"},{"value":"max","label":"Max available"}],"default":"1mo","example":"6mo"},{"name":"interval","type":"enum","required":false,"description":"Candle granularity. Intraday intervals only cover short ranges (Yahoo limitation); daily+ cover long ranges.","on_invalid":"ignore","allowed_values":[{"value":"1m","label":"1 minute"},{"value":"2m","label":"2 min"},{"value":"5m","label":"5 min"},{"value":"15m","label":"15 min"},{"value":"30m","label":"30 min"},{"value":"60m","label":"60 min"},{"value":"90m","label":"90 min"},{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1wk","label":"1 week"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"}],"default":"1d","example":"1d"}],"returns":"symbol, currency, range, interval, points[]{timestamp,open,high,low,close,volume}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"search","description":"symbol search","required_params":["query"],"optional_params":["quotesCount"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (company name or symbol).","on_invalid":"reject","example":"apple","aliases":["q"]},{"name":"quotesCount","type":"integer","required":false,"description":"How many symbol matches to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1}],"returns":"query, quotes[]{symbol,name,exchange,quoteType,score}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"apple"}},{"name":"fundamentals","description":"quoteSummary modules","required_params":["symbol"],"optional_params":["modules"],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"modules","type":"string","required":false,"description":"Comma-separated Yahoo quoteSummary modules (e.g. 'price,financialData,earnings'). Omit for a broad default module set.","on_invalid":"reject","example":"price,summaryDetail,financialData"}],"returns":"symbol, modules{<module>:{...}} (Yahoo quoteSummary)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"analyst","description":"recommendations, upgrades/downgrades, price targets","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{recommendationTrend,upgradeDowngradeHistory,financialData}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"holders","description":"insider/institution/fund ownership and holder activity","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{insider/institution/fund ownership + holder activity}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"news","description":"Yahoo Finance news search","required_params":["query"],"optional_params":["count","symbol"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword OR a ticker symbol to pull news for (either works).","on_invalid":"reject","example":"AAPL","aliases":["q","symbol"]},{"name":"symbol","type":"string","required":false,"description":"Ticker symbol to fetch news for (alternative to query).","on_invalid":"reject","example":"AAPL"},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1}],"returns":"query, news[]{uuid,title,publisher,link,providerPublishTime,type,thumbnail}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"apple"}},{"name":"options","description":"option chain","required_params":["symbol"],"optional_params":["date"],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"date","type":"integer","required":false,"description":"Optional option-chain expiration as a Unix timestamp; omit for the nearest expiry.","on_invalid":"ignore","example":1718323200}],"returns":"symbol, expirationDates[], strikes[], calls[], puts[] (option contracts)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"calendar","description":"earnings/calendar quoteSummary modules","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{calendarEvents,earnings}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"events","description":"dividends and splits from chart events","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, dividends[], splits[], capitalGains[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"screener_predefined","description":"Yahoo saved screeners","required_params":[],"optional_params":["scrIds","count","start"],"params":[{"name":"scrIds","type":"enum","required":false,"description":"A Yahoo predefined screener id. Common ones shown; any valid Yahoo saved-screener id is accepted.","on_invalid":"ignore","allowed_values":[{"value":"most_actives","label":"Most actives"},{"value":"day_gainers","label":"Day gainers"},{"value":"day_losers","label":"Day losers"},{"value":"growth_technology_stocks","label":"Growth tech stocks"},{"value":"most_shorted_stocks","label":"Most shorted"},{"value":"undervalued_growth_stocks","label":"Undervalued growth"},{"value":"aggressive_small_caps","label":"Aggressive small caps"},{"value":"small_cap_gainers","label":"Small-cap gainers"}],"default":"day_gainers","example":"most_actives","aliases":["scr_ids"]},{"name":"count","type":"integer","required":false,"description":"Number of screener rows to return.","on_invalid":"ignore","default":25,"example":5,"minimum":1},{"name":"start","type":"integer","required":false,"description":"Result offset for pagination.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"scrIds, quotes[] (the saved-screener result rows)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"scrIds":"most_actives"}},{"name":"screener","description":"Yahoo custom screener POST","required_params":[],"optional_params":["criteria","size","offset","sortField","sortType"],"params":[{"name":"criteria","type":"object","required":false,"description":"Yahoo custom-screener query object ({operator, operands:[...]}); omit for an unfiltered screen.","on_invalid":"ignore","aliases":["query"]},{"name":"size","type":"integer","required":false,"description":"Number of screener results.","on_invalid":"ignore","default":25,"example":5,"minimum":1,"aliases":["count"]},{"name":"offset","type":"integer","required":false,"description":"Result offset for screener pagination.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"sortField","type":"string","required":false,"description":"Screener field to sort by (e.g. intradaymarketcap, percentchange, dayvolume).","on_invalid":"ignore","default":"intradaymarketcap","example":"intradaymarketcap"},{"name":"sortType","type":"enum","required":false,"description":"Sort direction for the screener.","on_invalid":"ignore","allowed_values":[{"value":"DESC","label":"Descending"},{"value":"ASC","label":"Ascending"}],"default":"DESC","example":"DESC"},{"name":"quoteType","type":"enum","required":false,"description":"Instrument type the screener targets.","on_invalid":"ignore","allowed_values":[{"value":"EQUITY","label":"Stocks"},{"value":"ETF","label":"ETFs"},{"value":"MUTUALFUND","label":"Mutual funds"},{"value":"INDEX","label":"Indices"},{"value":"CURRENCY","label":"FX"},{"value":"CRYPTOCURRENCY","label":"Crypto"},{"value":"FUTURE","label":"Futures"}],"default":"EQUITY","example":"EQUITY"}],"returns":"quotes[] (custom-screener matches), request{size,offset}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"size":5}},{"name":"market_summary","description":"market summary indices","required_params":[],"optional_params":["region"],"params":[{"name":"region","type":"string","required":false,"description":"Yahoo market region code (e.g. US, GB, DE, FR, IN, JP).","on_invalid":"ignore","default":"US","example":"US"},{"name":"lang","type":"string","required":false,"description":"Yahoo response language tag (e.g. en-US).","on_invalid":"ignore","default":"en-US","example":"en-US"}],"returns":"items[] — market summary indices for the region","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"region":"US"}},{"name":"trending","description":"trending symbols","required_params":[],"optional_params":["region","count"],"params":[{"name":"region","type":"string","required":false,"description":"Yahoo market region code (e.g. US, GB, DE, FR, IN, JP).","on_invalid":"ignore","default":"US","example":"US"},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1}],"returns":"region, quotes[] — trending symbols","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"region":"US"}},{"name":"lookup","description":"Yahoo symbol universe lookup","required_params":["query"],"optional_params":["count"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (company name or symbol).","on_invalid":"reject","example":"apple","aliases":["q"]},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":20,"example":20,"minimum":1},{"name":"type","type":"enum","required":false,"description":"Restrict the symbol lookup to one quote type. Omit for all types.","on_invalid":"ignore","allowed_values":[{"value":"equity","label":"Stocks"},{"value":"etf","label":"ETFs"},{"value":"mutualfund","label":"Mutual funds"},{"value":"index","label":"Indices"},{"value":"currency","label":"FX"},{"value":"cryptocurrency","label":"Crypto"},{"value":"future","label":"Futures"}],"example":"equity","aliases":["quoteType"]}],"returns":"query, type, documents[] — matching symbols","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"apple"}},{"name":"technicals","description":"local technical indicators from chart OHLCV","required_params":["symbol"],"optional_params":["range","interval","periods"],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"range","type":"enum","required":false,"description":"History window. Common Yahoo ranges shown; other Yahoo range tokens are also accepted. Pair with interval.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"},{"value":"6mo","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"5y","label":"5 years"},{"value":"10y","label":"10 years"},{"value":"ytd","label":"Year to date"},{"value":"max","label":"Max available"}],"default":"1y","example":"6mo"},{"name":"interval","type":"enum","required":false,"description":"Candle granularity. Intraday intervals only cover short ranges (Yahoo limitation); daily+ cover long ranges.","on_invalid":"ignore","allowed_values":[{"value":"1m","label":"1 minute"},{"value":"2m","label":"2 min"},{"value":"5m","label":"5 min"},{"value":"15m","label":"15 min"},{"value":"30m","label":"30 min"},{"value":"60m","label":"60 min"},{"value":"90m","label":"90 min"},{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1wk","label":"1 week"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"}],"default":"1d","example":"1d"},{"name":"periods","type":"string","required":false,"description":"Comma-separated SMA/EMA lookback periods to compute (e.g. '20,50'). RSI(14)/MACD/Bollinger/ATR/ADX are always included.","on_invalid":"ignore","default":"20,50","example":"20,50"}],"returns":"symbol, points[], indicators{sma/ema/rsi14/macd/bollinger20/atr14/adx14/...}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL","range":"6mo","interval":"1d"}},{"name":"economic","description":"FRED economic series via official API","required_params":["series","fred_api_key"],"optional_params":["limit","sort_order"],"params":[{"name":"series","type":"string","required":true,"description":"FRED economic series id (e.g. GDP, UNRATE, CPIAUCSL).","on_invalid":"reject","example":"GDP","aliases":["series_id"]},{"name":"fred_api_key","type":"string","required":true,"description":"Your own FRED API key (St. Louis Fed) — required; this surface is key-gated and not proxied by the gateway.","on_invalid":"reject","example":"<your-fred-key>","aliases":["api_key"]},{"name":"limit","type":"integer","required":false,"description":"Max FRED observations to return.","on_invalid":"ignore","default":100,"example":100,"minimum":1},{"name":"sort_order","type":"enum","required":false,"description":"Order of the returned FRED observations.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Newest first"},{"value":"asc","label":"Oldest first"}],"default":"desc","example":"desc"}],"returns":"series, observations[]{date,value} (FRED)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"series":"GDP","fred_api_key":"<your-fred-key>"}},{"name":"v1/market/tickers","description":"public NASDAQ/NYSE/AMEX ticker universe","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"Max tickers to return (0/omit = full universe).","on_invalid":"ignore","default":0,"example":50,"minimum":1}],"returns":"tickers[]{symbol,name,exchange,etf,source} — NASDAQ/NYSE/AMEX universe","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"limit":10}},{"name":"v1/search","description":"RapidAPI-compatible alias for search","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (company name or symbol).","on_invalid":"reject","example":"apple","aliases":["q"]},{"name":"quotesCount","type":"integer","required":false,"description":"How many symbol matches to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1}],"returns":"query, quotes[]{symbol,name,exchange,quoteType,score}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"apple"}},{"name":"v1/market/quotes","description":"RapidAPI-compatible alias for quote","required_params":["symbol"],"optional_params":["symbols"],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol, or use `symbols` for several (e.g. 'AAPL'). crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC'.","on_invalid":"reject","example":"AAPL","aliases":["symbols"]},{"name":"symbols","type":"string","required":false,"description":"Multiple symbols (array or comma-separated) for a batch quote.","on_invalid":"reject","example":"AAPL,MSFT"}],"returns":"quotes[] — symbol, price, change, changePercent, currency, marketCap, volume, exchange, quoteType, marketState","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbols":["AAPL","MSFT"],"symbol":"AAPL"}},{"name":"v1/stock/history","description":"RapidAPI-compatible alias for chart","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"range","type":"enum","required":false,"description":"History window. Common Yahoo ranges shown; other Yahoo range tokens are also accepted. Pair with interval.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"},{"value":"6mo","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"5y","label":"5 years"},{"value":"10y","label":"10 years"},{"value":"ytd","label":"Year to date"},{"value":"max","label":"Max available"}],"default":"1mo","example":"6mo"},{"name":"interval","type":"enum","required":false,"description":"Candle granularity. Intraday intervals only cover short ranges (Yahoo limitation); daily+ cover long ranges.","on_invalid":"ignore","allowed_values":[{"value":"1m","label":"1 minute"},{"value":"2m","label":"2 min"},{"value":"5m","label":"5 min"},{"value":"15m","label":"15 min"},{"value":"30m","label":"30 min"},{"value":"60m","label":"60 min"},{"value":"90m","label":"90 min"},{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1wk","label":"1 week"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"}],"default":"1d","example":"1d"}],"returns":"symbol, currency, range, interval, points[]{timestamp,open,high,low,close,volume}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL","range":"1mo","interval":"1d"}},{"name":"v2/stock/history","description":"RapidAPI-compatible alias for chart","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"range","type":"enum","required":false,"description":"History window. Common Yahoo ranges shown; other Yahoo range tokens are also accepted. Pair with interval.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"},{"value":"6mo","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"5y","label":"5 years"},{"value":"10y","label":"10 years"},{"value":"ytd","label":"Year to date"},{"value":"max","label":"Max available"}],"default":"1mo","example":"6mo"},{"name":"interval","type":"enum","required":false,"description":"Candle granularity. Intraday intervals only cover short ranges (Yahoo limitation); daily+ cover long ranges.","on_invalid":"ignore","allowed_values":[{"value":"1m","label":"1 minute"},{"value":"2m","label":"2 min"},{"value":"5m","label":"5 min"},{"value":"15m","label":"15 min"},{"value":"30m","label":"30 min"},{"value":"60m","label":"60 min"},{"value":"90m","label":"90 min"},{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1wk","label":"1 week"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"}],"default":"1d","example":"1d"}],"returns":"symbol, currency, range, interval, points[]{timestamp,open,high,low,close,volume}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL","range":"1mo","interval":"1d"}},{"name":"v1/market/screener","description":"RapidAPI-compatible alias for screener","required_params":[],"optional_params":["criteria","scrIds"],"params":[{"name":"scrIds","type":"enum","required":false,"description":"A Yahoo predefined screener id. Common ones shown; any valid Yahoo saved-screener id is accepted.","on_invalid":"ignore","allowed_values":[{"value":"most_actives","label":"Most actives"},{"value":"day_gainers","label":"Day gainers"},{"value":"day_losers","label":"Day losers"},{"value":"growth_technology_stocks","label":"Growth tech stocks"},{"value":"most_shorted_stocks","label":"Most shorted"},{"value":"undervalued_growth_stocks","label":"Undervalued growth"},{"value":"aggressive_small_caps","label":"Aggressive small caps"},{"value":"small_cap_gainers","label":"Small-cap gainers"}],"default":"day_gainers","example":"most_actives","aliases":["scr_ids"]},{"name":"criteria","type":"object","required":false,"description":"Yahoo custom-screener query object ({operator, operands:[...]}); omit for an unfiltered screen.","on_invalid":"ignore","aliases":["query"]},{"name":"size","type":"integer","required":false,"description":"Number of screener results.","on_invalid":"ignore","default":25,"example":5,"minimum":1,"aliases":["count"]},{"name":"offset","type":"integer","required":false,"description":"Result offset for screener pagination.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"sortField","type":"string","required":false,"description":"Screener field to sort by (e.g. intradaymarketcap, percentchange, dayvolume).","on_invalid":"ignore","default":"intradaymarketcap","example":"intradaymarketcap"},{"name":"sortType","type":"enum","required":false,"description":"Sort direction for the screener.","on_invalid":"ignore","allowed_values":[{"value":"DESC","label":"Descending"},{"value":"ASC","label":"Ascending"}],"default":"DESC","example":"DESC"},{"name":"quoteType","type":"enum","required":false,"description":"Instrument type the screener targets.","on_invalid":"ignore","allowed_values":[{"value":"EQUITY","label":"Stocks"},{"value":"ETF","label":"ETFs"},{"value":"MUTUALFUND","label":"Mutual funds"},{"value":"INDEX","label":"Indices"},{"value":"CURRENCY","label":"FX"},{"value":"CRYPTOCURRENCY","label":"Crypto"},{"value":"FUTURE","label":"Futures"}],"default":"EQUITY","example":"EQUITY"}],"returns":"quotes[] — predefined (scrIds) or custom (criteria) screener results","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"scrIds":"most_actives","count":5}},{"name":"v1/stock/modules","description":"RapidAPI-compatible alias for quoteSummary modules","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"modules","type":"string","required":false,"description":"Comma-separated Yahoo quoteSummary modules (e.g. 'price,financialData,earnings'). Omit for a broad default module set.","on_invalid":"reject","example":"price,summaryDetail,financialData"}],"returns":"symbol, modules{<module>:{...}} (Yahoo quoteSummary)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/market/news","description":"RapidAPI-compatible alias for news","required_params":["query"],"optional_params":["symbol"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword OR a ticker symbol to pull news for (either works).","on_invalid":"reject","example":"AAPL","aliases":["q","symbol"]},{"name":"symbol","type":"string","required":false,"description":"Ticker symbol to fetch news for (alternative to query).","on_invalid":"reject","example":"AAPL"},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1}],"returns":"query, news[]{uuid,title,publisher,link,providerPublishTime,type,thumbnail}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL","count":5,"query":"apple"}},{"name":"v2/market/news","description":"RapidAPI-compatible alias for news","required_params":["query"],"optional_params":["symbol"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword OR a ticker symbol to pull news for (either works).","on_invalid":"reject","example":"AAPL","aliases":["q","symbol"]},{"name":"symbol","type":"string","required":false,"description":"Ticker symbol to fetch news for (alternative to query).","on_invalid":"reject","example":"AAPL"},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1}],"returns":"query, news[]{uuid,title,publisher,link,providerPublishTime,type,thumbnail}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL","count":5,"query":"apple"}},{"name":"v1/options","description":"RapidAPI-compatible alias for options","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"date","type":"integer","required":false,"description":"Optional option-chain expiration as a Unix timestamp; omit for the nearest expiry.","on_invalid":"ignore","example":1718323200}],"returns":"symbol, expirationDates[], strikes[], calls[], puts[] (option contracts)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/most-active","description":"options most-active contracts derived from Yahoo option chains","required_params":[],"optional_params":["symbol","symbols","count"],"params":[{"name":"symbol","type":"string","required":false,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"symbols","type":"string","required":false,"description":"One or more symbols as an array or comma-separated string (e.g. 'AAPL,MSFT' or ['AAPL','MSFT']).","on_invalid":"reject","example":"AAPL,MSFT"},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":25,"example":5,"minimum":1}],"returns":"contracts[] ranked by volume, symbols[], ranking","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/unusual-options-activity","description":"unusual options activity derived from Yahoo option chain volume/open-interest","required_params":[],"optional_params":["symbol","symbols","count"],"params":[{"name":"symbol","type":"string","required":false,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"symbols","type":"string","required":false,"description":"One or more symbols as an array or comma-separated string (e.g. 'AAPL,MSFT' or ['AAPL','MSFT']).","on_invalid":"reject","example":"AAPL,MSFT"},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":25,"example":5,"minimum":1}],"returns":"contracts[] ranked by volume/open-interest ratio (unusualScore)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"calendar/earnings","description":"symbol earnings calendar via quoteSummary","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{calendarEvents,earnings}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"calendar/earnings_market","description":"market-wide upcoming earnings calendar (all symbols) via Yahoo visualization","required_params":[],"optional_params":["start","end","date","count","offset","region","lang"],"params":[{"name":"start","type":"string","required":false,"description":"Earliest earnings date (YYYY-MM-DD) — returns earnings ON or AFTER this day. Defaults to today.","on_invalid":"ignore","example":"2026-06-21","aliases":["date","date_from"]},{"name":"end","type":"string","required":false,"description":"Latest earnings date (YYYY-MM-DD) — trims results to ON or BEFORE this day. Optional; omit for all upcoming.","on_invalid":"ignore","example":"2026-07-15","aliases":["date_to"]},{"name":"count","type":"integer","required":false,"description":"Max earnings events to return (capped at 100).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"offset","type":"integer","required":false,"description":"Pagination offset across the upcoming-earnings list.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"region","type":"string","required":false,"description":"Yahoo market region code (e.g. US, GB, DE, FR, IN, JP).","on_invalid":"ignore","default":"US","example":"US"},{"name":"lang","type":"string","required":false,"description":"Yahoo response language tag (e.g. en-US).","on_invalid":"ignore","default":"en-US","example":"en-US"}],"returns":"events[]{symbol,companyName,eventStartDate,eventStartTime,ePSEstimate,reportedEPS,surprise}, calendar_type, start, end — market-wide upcoming earnings across all symbols","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"count":5}},{"name":"calendar/dividends","description":"symbol dividends via chart events","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, dividends[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"calendar/economic_events","description":"global economic events via Yahoo visualization calendar","required_params":[],"optional_params":["start","end","count","offset"],"params":[{"name":"start","type":"string","required":false,"description":"Window start date (YYYY-MM-DD). Defaults to today.","on_invalid":"ignore","example":"2026-01-01","aliases":["date_from"]},{"name":"end","type":"string","required":false,"description":"Window end date (YYYY-MM-DD). Defaults to ~30 days out.","on_invalid":"ignore","example":"2026-12-31","aliases":["date_to"]},{"name":"count","type":"integer","required":false,"description":"Max events to return (capped at 100).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"offset","type":"integer","required":false,"description":"Event pagination offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"events[] — global economic events, calendar_type, start, end","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"start":"2026-01-01"}},{"name":"calendar/public_offerings","description":"public offerings derived from Yahoo IPO calendar deal types","required_params":[],"optional_params":["start","end","count","offset"],"params":[{"name":"start","type":"string","required":false,"description":"Window start date (YYYY-MM-DD). Defaults to today.","on_invalid":"ignore","example":"2026-01-01","aliases":["date_from"]},{"name":"end","type":"string","required":false,"description":"Window end date (YYYY-MM-DD). Defaults to ~30 days out.","on_invalid":"ignore","example":"2026-12-31","aliases":["date_to"]},{"name":"count","type":"integer","required":false,"description":"Max events to return (capped at 100).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"offset","type":"integer","required":false,"description":"Event pagination offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"events[] — public offerings derived from IPO deal types","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"start":"2026-01-01"}},{"name":"calendar/ipo","description":"IPO calendar via Yahoo visualization calendar","required_params":[],"optional_params":["start","end","count","offset"],"params":[{"name":"start","type":"string","required":false,"description":"Window start date (YYYY-MM-DD). Defaults to today.","on_invalid":"ignore","example":"2026-01-01","aliases":["date_from"]},{"name":"end","type":"string","required":false,"description":"Window end date (YYYY-MM-DD). Defaults to ~30 days out.","on_invalid":"ignore","example":"2026-12-31","aliases":["date_to"]},{"name":"count","type":"integer","required":false,"description":"Max events to return (capped at 100).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"offset","type":"integer","required":false,"description":"Event pagination offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"events[] — IPO calendar, calendar_type, start, end","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"start":"2026-01-01"}},{"name":"calendar/stock-splits","description":"symbol stock splits via chart events","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, splits[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"calendar/count","description":"count of calendar events in a window (economic/ipo)","required_params":[],"optional_params":["calendar_type","type","start","end"],"params":[{"name":"calendar_type","type":"enum","required":false,"description":"Which calendar to count events from. `earnings` counts the same rows calendar/earnings_market returns for the window.","on_invalid":"ignore","allowed_values":[{"value":"economic_event","label":"Economic events"},{"value":"ipo_info","label":"IPOs"},{"value":"ipo","label":"IPOs (type= alias value)"},{"value":"earnings","label":"Company earnings dates"}],"example":"economic_event","aliases":["type"]},{"name":"start","type":"string","required":false,"description":"Window start date (YYYY-MM-DD). Defaults to today.","on_invalid":"ignore","example":"2026-01-01","aliases":["date_from"]},{"name":"end","type":"string","required":false,"description":"Window end date (YYYY-MM-DD). Defaults to ~30 days out.","on_invalid":"ignore","example":"2026-12-31","aliases":["date_to"]}],"returns":"calendar_type, count, count_capped, counted_up_to, upstream_total, start, end","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"calendar_type":"economic_event"}},{"name":"futures","description":"futures chain: related contract months via Yahoo futuresChain","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, futures[] (related contract months), details","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"ES=F"}},{"name":"insights","description":"trading insights: technical events, key technicals, valuation, recommendation, significant developments","required_params":["symbol"],"optional_params":["reportsCount"],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"reportsCount","type":"integer","required":false,"description":"How many research/insights reports to include.","on_invalid":"ignore","default":5,"example":5,"minimum":1}],"returns":"symbol, instrumentInfo, recommendation, significantDevelopments[], events, companySnapshot","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"research","description":"what analysts are saying: research-report metadata via Yahoo insights","required_params":["symbol"],"optional_params":["reportsCount"],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"reportsCount","type":"integer","required":false,"description":"How many research/insights reports to include.","on_invalid":"ignore","default":5,"example":5,"minimum":1}],"returns":"symbol, reports[] (analyst research metadata)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"fund/fees","description":"ETF/mutual-fund fees and expenses via Yahoo fundProfile","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, fees, feesCategory, family, categoryName, legalType, managementInfo","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"SPY"}},{"name":"fund/holdings","description":"ETF/mutual-fund top holdings, sector weightings, asset allocation via Yahoo topHoldings","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, holdings[], sectorWeightings[], allocation{stock,bond,cash,...}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"SPY"}},{"name":"recommendations","description":"peer/similar symbols via Yahoo recommendationsbysymbol","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, recommendedSymbols[] (peer/similar symbols)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"news/details","description":"full news article content by uuid via Yahoo caas","required_params":["uuid"],"optional_params":[],"params":[{"name":"uuid","type":"string","required":true,"description":"Yahoo news article uuid (from a news item's `uuid`).","on_invalid":"reject","example":"0c0f0a00-0000-0000-0000-000000000000","aliases":["id","uuids"]}],"returns":"uuid, title, summary, author, publishedAt, provider, url, body_html","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"uuid":"0c0f0a00-0000-0000-0000-000000000000"}},{"name":"screener/fields","description":"queryable screener field catalog (filters) via Yahoo screeners","required_params":[],"optional_params":["type"],"params":[{"name":"type","type":"enum","required":false,"description":"Instrument whose screener field catalog to return.","on_invalid":"ignore","allowed_values":[{"value":"equity","label":"Equity"},{"value":"mutualfund","label":"Mutual fund"},{"value":"etf","label":"ETF"},{"value":"index","label":"Index"},{"value":"future","label":"Future"}],"default":"equity","example":"equity","aliases":["instrument"]}],"returns":"instrument, fields[]{id,displayName,type,sortable}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"equity"}},{"name":"market/tickers-by-type","description":"symbol lookup filtered by quote type (equity/etf/mutualfund/future/index/currency)","required_params":["query"],"optional_params":["type","count"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (company name or symbol).","on_invalid":"reject","example":"apple","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"Restrict the symbol lookup to one quote type. Omit for all types.","on_invalid":"ignore","allowed_values":[{"value":"equity","label":"Stocks"},{"value":"etf","label":"ETFs"},{"value":"mutualfund","label":"Mutual funds"},{"value":"index","label":"Indices"},{"value":"currency","label":"FX"},{"value":"cryptocurrency","label":"Crypto"},{"value":"future","label":"Futures"}],"example":"equity","aliases":["quoteType"]},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":20,"example":20,"minimum":1}],"returns":"query, type, documents[] — symbols filtered by quote type","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"apple"}},{"name":"v1/stock/profile","description":"quoteSummary alias for assetProfile,summaryProfile","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{assetProfile,summaryProfile}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/statistics","description":"quoteSummary alias for defaultKeyStatistics","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{defaultKeyStatistics}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/financial-data","description":"quoteSummary alias for financialData","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{financialData}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/sec-filings","description":"quoteSummary alias for secFilings,assetProfile","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{secFilings,assetProfile}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/earnings","description":"quoteSummary alias for earnings,earningsTrend,earningsHistory","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{earnings,earningsTrend,earningsHistory}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/calendar-events","description":"quoteSummary alias for calendarEvents","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{calendarEvents}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/insider-holders","description":"quoteSummary alias for insiderHolders","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{insiderHolders}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/balance-sheet","description":"quoteSummary alias for balanceSheetHistory","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{balanceSheetHistory}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v2/stock/balance-sheet","description":"quoteSummary alias for balanceSheetHistory,balanceSheetHistoryQuarterly","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{balanceSheetHistory,balanceSheetHistoryQuarterly}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/institution-ownership","description":"quoteSummary alias for institutionOwnership","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{institutionOwnership}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/insider-transactions","description":"quoteSummary alias for insiderTransactions","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{insiderTransactions}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/index-trend","description":"quoteSummary alias for indexTrend","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{indexTrend}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/income-statement","description":"quoteSummary alias for incomeStatementHistory,incomeStatementHistoryQuarterly","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{incomeStatementHistory,incomeStatementHistoryQuarterly}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/cashflow-statement","description":"quoteSummary alias for cashflowStatementHistory,cashflowStatementHistoryQuarterly","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{cashflowStatementHistory,cashflowStatementHistoryQuarterly}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/recommendation-trend","description":"quoteSummary alias for recommendationTrend","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{recommendationTrend}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/net-share-purchase-activity","description":"quoteSummary alias for netSharePurchaseActivity","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{netSharePurchaseActivity}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/stock/upgrade-downgrade-history","description":"quoteSummary alias for upgradeDowngradeHistory","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{upgradeDowngradeHistory}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/insider-trades","description":"quoteSummary alias for insiderTransactions,insiderHolders,netSharePurchaseActivity","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, modules{insiderTransactions,insiderHolders,netSharePurchaseActivity}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/indicators/sma","description":"local SMA indicator from chart OHLCV","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"range","type":"enum","required":false,"description":"History window. Common Yahoo ranges shown; other Yahoo range tokens are also accepted. Pair with interval.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"},{"value":"6mo","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"5y","label":"5 years"},{"value":"10y","label":"10 years"},{"value":"ytd","label":"Year to date"},{"value":"max","label":"Max available"}],"default":"1mo","example":"6mo"},{"name":"interval","type":"enum","required":false,"description":"Candle granularity. Intraday intervals only cover short ranges (Yahoo limitation); daily+ cover long ranges.","on_invalid":"ignore","allowed_values":[{"value":"1m","label":"1 minute"},{"value":"2m","label":"2 min"},{"value":"5m","label":"5 min"},{"value":"15m","label":"15 min"},{"value":"30m","label":"30 min"},{"value":"60m","label":"60 min"},{"value":"90m","label":"90 min"},{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1wk","label":"1 week"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"}],"default":"1d","example":"1d"},{"name":"period","type":"integer","required":false,"description":"Lookback period for the single moving-average indicator.","on_invalid":"ignore","default":20,"example":20,"minimum":2}],"returns":"symbol, indicator (sma), key, value","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/indicators/rsi","description":"local RSI indicator from chart OHLCV","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"range","type":"enum","required":false,"description":"History window. Common Yahoo ranges shown; other Yahoo range tokens are also accepted. Pair with interval.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"},{"value":"6mo","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"5y","label":"5 years"},{"value":"10y","label":"10 years"},{"value":"ytd","label":"Year to date"},{"value":"max","label":"Max available"}],"default":"1mo","example":"6mo"},{"name":"interval","type":"enum","required":false,"description":"Candle granularity. Intraday intervals only cover short ranges (Yahoo limitation); daily+ cover long ranges.","on_invalid":"ignore","allowed_values":[{"value":"1m","label":"1 minute"},{"value":"2m","label":"2 min"},{"value":"5m","label":"5 min"},{"value":"15m","label":"15 min"},{"value":"30m","label":"30 min"},{"value":"60m","label":"60 min"},{"value":"90m","label":"90 min"},{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1wk","label":"1 week"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"}],"default":"1d","example":"1d"}],"returns":"symbol, indicator (rsi), key, value","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/indicators/macd","description":"local MACD indicator from chart OHLCV","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"range","type":"enum","required":false,"description":"History window. Common Yahoo ranges shown; other Yahoo range tokens are also accepted. Pair with interval.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"},{"value":"6mo","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"5y","label":"5 years"},{"value":"10y","label":"10 years"},{"value":"ytd","label":"Year to date"},{"value":"max","label":"Max available"}],"default":"1mo","example":"6mo"},{"name":"interval","type":"enum","required":false,"description":"Candle granularity. Intraday intervals only cover short ranges (Yahoo limitation); daily+ cover long ranges.","on_invalid":"ignore","allowed_values":[{"value":"1m","label":"1 minute"},{"value":"2m","label":"2 min"},{"value":"5m","label":"5 min"},{"value":"15m","label":"15 min"},{"value":"30m","label":"30 min"},{"value":"60m","label":"60 min"},{"value":"90m","label":"90 min"},{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1wk","label":"1 week"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"}],"default":"1d","example":"1d"}],"returns":"symbol, indicator (macd), key, value","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"v1/indicators/adx","description":"local ADX indicator from chart OHLCV","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"range","type":"enum","required":false,"description":"History window. Common Yahoo ranges shown; other Yahoo range tokens are also accepted. Pair with interval.","on_invalid":"ignore","allowed_values":[{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"},{"value":"6mo","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"5y","label":"5 years"},{"value":"10y","label":"10 years"},{"value":"ytd","label":"Year to date"},{"value":"max","label":"Max available"}],"default":"1mo","example":"6mo"},{"name":"interval","type":"enum","required":false,"description":"Candle granularity. Intraday intervals only cover short ranges (Yahoo limitation); daily+ cover long ranges.","on_invalid":"ignore","allowed_values":[{"value":"1m","label":"1 minute"},{"value":"2m","label":"2 min"},{"value":"5m","label":"5 min"},{"value":"15m","label":"15 min"},{"value":"30m","label":"30 min"},{"value":"60m","label":"60 min"},{"value":"90m","label":"90 min"},{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"5d","label":"5 days"},{"value":"1wk","label":"1 week"},{"value":"1mo","label":"1 month"},{"value":"3mo","label":"3 months"}],"default":"1d","example":"1d"}],"returns":"symbol, indicator (adx), key, value","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"stock/get-futures-chain","description":"apidojo-compatible alias for futures","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, futures[] (related contract months), details","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"stock/get-insights","description":"apidojo-compatible alias for insights","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"reportsCount","type":"integer","required":false,"description":"How many research/insights reports to include.","on_invalid":"ignore","default":5,"example":5,"minimum":1}],"returns":"symbol, instrumentInfo, recommendation, significantDevelopments[], events, companySnapshot","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"stock/v3/get-insights","description":"apidojo-compatible alias for insights","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"reportsCount","type":"integer","required":false,"description":"How many research/insights reports to include.","on_invalid":"ignore","default":5,"example":5,"minimum":1}],"returns":"symbol, instrumentInfo, recommendation, significantDevelopments[], events, companySnapshot","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"stock/get-what-analysts-are-saying","description":"apidojo-compatible alias for research","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"},{"name":"reportsCount","type":"integer","required":false,"description":"How many research/insights reports to include.","on_invalid":"ignore","default":5,"example":5,"minimum":1}],"returns":"symbol, reports[] (analyst research metadata)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"stock/get-fees-and-expenses","description":"apidojo-compatible alias for fund/fees","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, fees, feesCategory, family, categoryName, legalType, managementInfo","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"stock/get-top-holdings","description":"apidojo-compatible alias for fund/holdings","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, holdings[], sectorWeightings[], allocation{stock,bond,cash,...}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"stock/v2/get-recommendations","description":"apidojo-compatible alias for recommendations","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Ticker symbol (Yahoo format: equities 'AAPL', crypto 'BTC-USD', FX 'EURUSD=X', index '^GSPC', future 'ES=F'). Case-insensitive.","on_invalid":"reject","example":"AAPL"}],"returns":"symbol, recommendedSymbols[] (peer/similar symbols)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"AAPL"}},{"name":"news/v2/get-details","description":"apidojo-compatible alias for news/details","required_params":["uuid"],"optional_params":[],"params":[{"name":"uuid","type":"string","required":true,"description":"Yahoo news article uuid (from a news item's `uuid`).","on_invalid":"reject","example":"0c0f0a00-0000-0000-0000-000000000000","aliases":["id","uuids"]}],"returns":"uuid, title, summary, author, publishedAt, provider, url, body_html","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"uuid":"0c0f0a00-0000-0000-0000-000000000000"}},{"name":"screeners/get-filters","description":"apidojo-compatible alias for screener/fields","required_params":[],"optional_params":[],"params":[{"name":"type","type":"enum","required":false,"description":"Instrument whose screener field catalog to return.","on_invalid":"ignore","allowed_values":[{"value":"equity","label":"Equity"},{"value":"mutualfund","label":"Mutual fund"},{"value":"etf","label":"ETF"},{"value":"index","label":"Index"},{"value":"future","label":"Future"}],"default":"equity","example":"equity","aliases":["instrument"]}],"returns":"instrument, fields[]{id,displayName,type,sortable}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"equity"}},{"name":"market/get-tickers-by-quote-type","description":"apidojo-compatible alias for market/tickers-by-type","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (company name or symbol).","on_invalid":"reject","example":"apple","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"Restrict the symbol lookup to one quote type. Omit for all types.","on_invalid":"ignore","allowed_values":[{"value":"equity","label":"Stocks"},{"value":"etf","label":"ETFs"},{"value":"mutualfund","label":"Mutual funds"},{"value":"index","label":"Indices"},{"value":"currency","label":"FX"},{"value":"cryptocurrency","label":"Crypto"},{"value":"future","label":"Futures"}],"example":"equity","aliases":["quoteType"]},{"name":"count","type":"integer","required":false,"description":"Maximum number of results to return.","on_invalid":"ignore","default":20,"example":20,"minimum":1}],"returns":"query, type, documents[] — symbols filtered by quote type","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"apple"}}]},{"name":"fitness","category":{"id":"utilities","title":"Utilities & AI"},"title":"Fitness & Exercise API — exercise database with step-by-step instructions, muscle targeting, and equipment filters (wger.de open data, 800+ exercises)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/fitness/v1","spec_available":true,"actions":[{"name":"exercises","description":"Browse or search the full exercise library (800+ exercises from wger.de). Filter by name keyword; returns each exercise's name, body part, target muscle, equipment, step-by-step instructions, and animation URL.","required_params":[],"optional_params":["name","term","limit","offset","language"],"params":[{"name":"name","type":"string","required":false,"description":"Free-text search term to filter exercises by name.","on_invalid":"ignore","example":"press"},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 20). Larger values are clamped to 100.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N results). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"language","type":"integer","required":false,"description":"wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.","on_invalid":"ignore","default":2,"example":2}],"returns":"results[] (id, name, bodyPart, target, equipment, secondaryMuscles[], instructions[], gifUrl/imageUrl, license, licenseAuthor), count, next_offset","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"press"}},{"name":"by_bodypart","description":"All exercises targeting a specific body part — e.g. 'chest', 'back', 'shoulders', 'upper arms', 'waist'. Returns name, target muscle, equipment, and instructions for each.","required_params":["bodypart"],"optional_params":["bodyPart","limit","offset","language"],"params":[{"name":"bodypart","type":"string","required":true,"description":"Body part / category to filter by (e.g. chest, back, shoulders, upper arms, upper legs, lower legs, waist, cardio). Matched by substring; use bodypart_list for the live options.","on_invalid":"reject","example":"chest","aliases":["bodyPart"]},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 20). Larger values are clamped to 100.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N results). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"language","type":"integer","required":false,"description":"wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.","on_invalid":"ignore","default":2,"example":2}],"returns":"results[] (exercise name, bodyPart, target, equipment, instructions[], gifUrl), count, bodypart","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"bodypart":"chest","limit":5}},{"name":"by_equipment","description":"All exercises that use a specific piece of equipment — e.g. 'barbell', 'dumbbell', 'kettlebell', 'none' (bodyweight). Returns name, target muscle, body part, and instructions.","required_params":["equipment"],"optional_params":["limit","offset","language"],"params":[{"name":"equipment","type":"string","required":true,"description":"Equipment name to filter by (e.g. barbell, dumbbell, kettlebell, none). Matched by substring; use equipment_list for the live options.","on_invalid":"reject","example":"barbell"},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 20). Larger values are clamped to 100.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N results). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"language","type":"integer","required":false,"description":"wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.","on_invalid":"ignore","default":2,"example":2}],"returns":"results[] (exercise name, equipment, target, bodyPart, instructions[], gifUrl), count, equipment","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"equipment":"barbell"}},{"name":"by_target","description":"All exercises that target a specific muscle — e.g. 'biceps', 'triceps', 'quads', 'glutes', 'lats'. Returns name, equipment, body part, and step-by-step instructions.","required_params":["target"],"optional_params":["limit","offset","language"],"params":[{"name":"target","type":"string","required":true,"description":"Target muscle to filter by (e.g. biceps, triceps, quads, glutes). Matched by substring; use target_list for the live options.","on_invalid":"reject","example":"biceps"},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 20). Larger values are clamped to 100.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N results). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"language","type":"integer","required":false,"description":"wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.","on_invalid":"ignore","default":2,"example":2}],"returns":"results[] (exercise name, target, equipment, bodyPart, instructions[], gifUrl), count, target","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"target":"biceps"}},{"name":"exercise_detail","description":"Full detail for a single exercise by its id — name, body part, primary and secondary muscles, equipment, step-by-step instructions, animation URL, and license.","required_params":["id"],"optional_params":["exercise_id","language"],"params":[{"name":"id","type":"integer","required":true,"description":"A single wger exercise id (the `id` of a search/filter result).","on_invalid":"reject","example":1962,"aliases":["exercise_id"]},{"name":"language","type":"integer","required":false,"description":"wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.","on_invalid":"ignore","default":2,"example":2}],"returns":"exercise{} (full normalized record including primaryMuscles[], instructions[], equipment, gifUrl, license)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":1962}},{"name":"bodypart_list","description":"List all available body part categories (e.g. chest, back, shoulders, waist, cardio). Use these values with the by_bodypart action.","required_params":[],"optional_params":[],"params":[],"returns":"bodyParts[] (the available body-part / category names)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"equipment_list","description":"List all available equipment types (e.g. barbell, dumbbell, kettlebell, none). Use these values with the by_equipment action.","required_params":[],"optional_params":[],"params":[],"returns":"equipment[] (the available equipment names)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"target_list","description":"List all available target muscles (e.g. biceps, triceps, quads, glutes, lats). Use these values with the by_target action.","required_params":[],"optional_params":[],"params":[],"returns":"targets[] (the available target-muscle names)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"fiverr","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Fiverr.com API scraper — live gig search, gig detail and public seller profiles from Fiverr in clean JSON: title, starting price, packages, delivery time, ratings, review counts, seller level and country. No login required.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/fiverr/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Fiverr GIGS by keyword. Returns title, starting price + delivery days, package count, rating, review count, category, gig attributes (style/format/…), images, and the seller's handle, level, country, languages and rating. Paid 'promoted' gigs are dropped by default and flagged when kept.","required_params":["query"],"optional_params":["limit","offset","include_promoted"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to search Fiverr gigs — e.g. 'logo design', 'python developer', 'voice over'. Fiverr has no keyword-free browse; use the `category` action to walk a category instead.","on_invalid":"ignore","example":"logo design","aliases":["q","keyword","search"]},{"name":"limit","type":"integer","required":false,"description":"How many gigs to return (1–96). Fiverr serves 48 per page; asking for more walks additional pages.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":96,"aliases":["max_results","count"]},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (0–480); skip this many gigs before returning `limit`.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":480,"aliases":["skip","start"]},{"name":"include_promoted","type":"boolean","required":false,"description":"Fiverr injects paid 'promoted' gigs into the top of EVERY results page and repeats the same ads across pages. Default false drops them so paging returns new organic gigs; set true to keep them (each row is flagged `is_promoted`).","on_invalid":"ignore","default":false,"example":false,"aliases":["include_ads","ads"]}],"returns":"gigs[]{id, title, slug, url, is_promoted, is_pro, price{from,currency,delivery_days,package_count}, rating, reviews_count, category_id, attributes[], images[], seller{id,username,display_name,country_code,level,rating,ratings_count,languages[],url}}, total_count, returned, offset","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"logo design","limit":10}},{"name":"category","description":"Browse a Fiverr CATEGORY without a keyword — same gig rows as `search`, taken from the category landing page. Use when you want the market for a whole sub-category (e.g. website development) rather than a search term.","required_params":["category"],"optional_params":["limit","offset","include_promoted"],"params":[{"name":"category","type":"string","required":true,"description":"Category path to browse, as it appears after /categories/ — e.g. 'graphics-design/creative-logo-design' or 'programming-tech/website-development'. A one-segment path ('graphics-design') redirects to its dominant sub-category.","on_invalid":"ignore","example":"programming-tech/website-development","aliases":["path","cat","slug"]},{"name":"limit","type":"integer","required":false,"description":"How many gigs to return (1–96). Fiverr serves 48 per page; asking for more walks additional pages.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":96,"aliases":["max_results","count"]},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (0–480); skip this many gigs before returning `limit`.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":480,"aliases":["skip","start"]},{"name":"include_promoted","type":"boolean","required":false,"description":"Fiverr injects paid 'promoted' gigs into the top of EVERY results page and repeats the same ads across pages. Default false drops them so paging returns new organic gigs; set true to keep them (each row is flagged `is_promoted`).","on_invalid":"ignore","default":false,"example":false,"aliases":["include_ads","ads"]}],"returns":"gigs[]{…same shape as search…}, total_count, returned, offset, category","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"programming-tech/website-development"}},{"name":"gig","description":"Full detail for ONE Fiverr gig by URL or '<seller>/<slug>': description, every pricing package (title, price, delivery hours, revisions), FAQ, review summary and the most recent reviews with their order price band, plus the seller block.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"The gig to fetch: a full Fiverr gig URL, or '<seller>/<gig-slug>'. A bare numeric gig id is NOT resolvable without the seller handle — take the `url` or `slug`+`seller.username` from a `search` row.","on_invalid":"ignore","example":"https://www.fiverr.com/faizankhanani/create-a-modern-minimalist-logo-design","aliases":["gig","gig_url","url","slug"]}],"returns":"gig{id, title, url, status, category{}, sub_category{}, description, rating, reviews_count, orders_in_queue, packages[]{id,title,price,delivery_hours,revisions}, faq[], reviews_summary{}, reviews[], seller{}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"https://www.fiverr.com/faizankhanani/create-a-modern-minimalist-logo-design"}},{"name":"seller","description":"PUBLIC business profile of a Fiverr seller by handle or profile URL: display name, headline, bio, country, timezone, join date, languages, skills, seller level, Pro/verified flags, response time, hourly rate, rating, review count and the gigs they list.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"The seller to fetch: a Fiverr handle or profile URL. Returns the PUBLIC business profile — handle, display name, country, languages, level, ratings and listed gigs.","on_invalid":"ignore","example":"faizankhanani","aliases":["seller","user","handle","id"]}],"returns":"seller{id, username, display_name, headline, description, country, country_code, timezone, joined_at, languages[], avatar, is_pro, is_verified, is_on_vacation, is_highly_responsive, is_agency, level, response_time_hours, hourly_rate, rating, reviews_count, skills[], gigs[], gigs_count, url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"faizankhanani"}}]},{"name":"flightaware","category":{"id":"travel","title":"Travel & Lodging"},"title":"FlightAware API — live flight tracker & status scraper: real-time flight status by flight number, origin/destination airports with gates and terminals, scheduled vs actual departure/arrival times, aircraft type and airline, live ADS-B position (altitude, groundspeed, heading, track), trip progress and filed flight plan — plus airport arrivals/departures activity boards from FlightAware.com, no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/flightaware/v1","spec_available":true,"actions":[{"name":"flight_status","description":"Live status for one flight by ident or flight number. Returns origin/destination (airport name, IATA/ICAO, gate, terminal, timezone, coordinates), scheduled / estimated / actual times for gate-out, take-off, landing and gate-in, aircraft type, airline, trip progress (percent complete, miles flown/remaining), the live position (altitude, groundspeed, heading) when airborne, and the filed flight plan.","required_params":["ident"],"optional_params":[],"params":[{"name":"ident","type":"string","required":true,"description":"Flight identifier — an airline flight number in ICAO form (UAL100, DAL47, BAW178) or IATA form (UA100, DL47, BA178), or a registration/callsign. IATA is auto-resolved to the operating flight. The aircraft's most recent/active leg is returned.","on_invalid":"reject","example":"UAL100","aliases":["flight","flight_number","q"]}],"returns":"flight{ident, status, airline{}, aircraft{}, origin{}, destination{}, gate_departure{scheduled,estimated,actual}, takeoff{}, landing{}, gate_arrival{}, progress{percent_complete,flown_miles,remaining_miles}, position{latitude,longitude,altitude_100ft,groundspeed_kts,heading}, flight_plan{route,filed_altitude,...}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"ident":"UAL100"}},{"name":"live_position","description":"Live ADS-B track for one airborne flight: current position plus the full position history (lat/lon/altitude/groundspeed per timestamp) FlightAware has logged for this leg. Use flight_status first to confirm the flight is airborne. For grounded / arrived flights `position` is null and `track` is whatever was logged on the ground.","required_params":["ident"],"optional_params":[],"params":[{"name":"ident","type":"string","required":true,"description":"Flight identifier — an airline flight number in ICAO form (UAL100, DAL47, BAW178) or IATA form (UA100, DL47, BA178), or a registration/callsign. IATA is auto-resolved to the operating flight. The aircraft's most recent/active leg is returned.","on_invalid":"reject","example":"UAL100","aliases":["flight","flight_number","q"]}],"returns":"flight{ident, status, position{latitude,longitude,altitude_100ft,groundspeed_kts,heading,timestamp}, origin{}, destination{}, track[]{timestamp,latitude,longitude,altitude_100ft,groundspeed_kts}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"ident":"UAL100"}},{"name":"airport_board","description":"Live activity board for an airport: the arrivals, departures, en-route or scheduled flights FlightAware shows for that airport. Each row gives the flight ident, aircraft type, the other airport (IATA), and the scheduled/estimated times. Feed an ident back into flight_status for full detail.","required_params":["airport"],"optional_params":["board","limit"],"params":[{"name":"airport","type":"string","required":true,"description":"Airport code — ICAO (KJFK, EGLL, EDDF) or IATA (JFK, LHR, FRA). ICAO is the most reliable. Returns the live activity boards for that airport.","on_invalid":"reject","example":"KJFK","aliases":["code","icao","iata","q"]},{"name":"board","type":"enum","required":false,"description":"Which activity board to return: arrivals, departures, enroute or scheduled.","on_invalid":"reject","allowed_values":[{"value":"arrivals","label":"Arrivals"},{"value":"departures","label":"Departures"},{"value":"enroute","label":"En route to this airport"},{"value":"scheduled","label":"Scheduled departures"}],"default":"arrivals","example":"arrivals"},{"name":"limit","type":"integer","required":false,"description":"Max flights to return from the board (1-20; FlightAware renders ~20 per board to logged-out requests).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":20}],"returns":"airport{name, iata, icao} + board (the requested type) + flights[]{ident, aircraft_type, origin_airport|destination_airport (IATA), *_airport_name, departure_time/arrival_time (or status for enroute), url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"airport":"KJFK","board":"arrivals"}}]},{"name":"flights","category":{"id":"travel","title":"Travel & Lodging"},"title":"Flights API — flight search, cheapest-day price graph, airport/IATA lookup & seat specs (worldwide, live prices, booking links)","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/flights/v1","spec_available":true,"actions":[{"name":"search_flights","description":"Search flights from origin to destination for a given date. Returns ranked itineraries with price, all flight segments (carrier, flight number, departure/arrival times), total journey duration and a direct booking link. Supports one-way and return trips.","required_params":["origin","destination","depart_date"],"optional_params":["return_date","depart_date_end","return_date_end","adults","children","infants","cabin_class","currency","max_stops","sort","limit"],"params":[{"name":"origin","type":"string","required":true,"description":"Departure: IATA code (LON/JFK), city name, or Kiwi location id.","on_invalid":"reject","example":"London","aliases":["from"]},{"name":"destination","type":"string","required":true,"description":"Arrival: IATA code, city name, or Kiwi location id.","on_invalid":"reject","example":"New York","aliases":["to"]},{"name":"depart_date","type":"string","required":true,"description":"Outbound date, YYYY-MM-DD (must be a future date).","on_invalid":"reject","example":"2026-12-12","aliases":["date","departure_date"]},{"name":"return_date","type":"string","required":false,"description":"Return date, YYYY-MM-DD. Omit for a one-way search.","on_invalid":"ignore","example":"2026-12-19","aliases":["return"]},{"name":"depart_date_end","type":"string","required":false,"description":"End of an outbound date RANGE (YYYY-MM-DD); search any departure between depart_date and this.","on_invalid":"ignore","example":"2026-12-15"},{"name":"return_date_end","type":"string","required":false,"description":"End of a return date RANGE (YYYY-MM-DD).","on_invalid":"ignore","example":"2026-12-22"},{"name":"adults","type":"integer","required":false,"description":"Number of adult passengers.","on_invalid":"ignore","default":1,"example":1,"minimum":0},{"name":"children","type":"integer","required":false,"description":"Number of child passengers (2-11).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"infants","type":"integer","required":false,"description":"Number of infant passengers (<2).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"cabin_class","type":"enum","required":false,"description":"Cabin class (unknown values fall back to economy).","on_invalid":"ignore","allowed_values":[{"value":"economy","label":"Economy (default)"},{"value":"premium_economy","label":"Premium economy"},{"value":"business","label":"Business"},{"value":"first","label":"First class"}],"default":"economy","example":"business","aliases":["cabin"]},{"name":"currency","type":"string","required":false,"description":"ISO-4217 currency for prices (e.g. USD, EUR, GBP). Default USD.","on_invalid":"ignore","default":"USD","example":"EUR"},{"name":"max_stops","type":"integer","required":false,"description":"Max number of stops (0 = direct only). Omit for any.","on_invalid":"ignore","example":1,"minimum":0,"aliases":["stops_max"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering (unknown values fall back to price).","on_invalid":"ignore","allowed_values":[{"value":"price","label":"Cheapest (default)"},{"value":"duration","label":"Fastest"},{"value":"quality","label":"Best quality"},{"value":"date","label":"Departure date"},{"value":"popularity","label":"Most popular"}],"default":"price","example":"duration"},{"name":"limit","type":"integer","required":false,"description":"Max itineraries to return (default 20).","on_invalid":"ignore","default":20,"example":5,"minimum":1}],"returns":"flights[]{price{amount,currency}, segments[]{carrier,carrier_code,flight_no,departure,arrival}, duration_seconds, booking_url, origin, destination} (return trips have outbound/inbound legs), count, trip_type, total_available","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"origin":"London","destination":"New York","depart_date":"2026-12-12","limit":5}},{"name":"search_places","description":"Resolve a city or airport name to location IDs used in flight search — useful when you want to pin an exact airport rather than a city (e.g. 'Heathrow' → LHR).","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"City or airport name / IATA code to resolve to Kiwi place ids.","on_invalid":"reject","example":"London","aliases":["term","q"]},{"name":"limit","type":"integer","required":false,"description":"Max place matches to return (default 8).","on_invalid":"ignore","default":8,"example":8,"minimum":1}],"returns":"places[]{id, name, type}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"London"}},{"name":"airport_info","description":"Look up airports and cities by name or IATA code. Returns full reference data: IATA + ICAO codes, GPS coordinates, timezone, country, and — for a city — the list of all its airports. Useful to validate a code, geolocate an airport, or map a city to its airports.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Airport or city name / IATA code (e.g. 'Heathrow', 'LHR', 'Istanbul').","on_invalid":"reject","example":"Heathrow","aliases":["term","q"]},{"name":"limit","type":"integer","required":false,"description":"Max matches to return (default 5).","on_invalid":"ignore","default":5,"example":5,"minimum":1}],"returns":"places[]{id, name, type (Station/City/Country), iata, icao, timezone, gps{lat,lng}, country, country_code, airports_count, airports[]{iata,icao,name,gps}}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Heathrow"}},{"name":"price_graph","description":"Find the cheapest day to fly. Returns the lowest price for each departure date across a date range, each tagged CHEAP / AVERAGE / EXPENSIVE, plus the single cheapest option. Set nights_min/nights_max for a return trip; omit them for one-way. One fast call.","required_params":["origin","destination","depart_date"],"optional_params":["depart_date_end","nights_min","nights_max","adults","children","infants","cabin_class","currency"],"params":[{"name":"origin","type":"string","required":true,"description":"Departure: IATA code (LON/JFK), city name, or Kiwi location id.","on_invalid":"reject","example":"London","aliases":["from"]},{"name":"destination","type":"string","required":true,"description":"Arrival: IATA code, city name, or Kiwi location id.","on_invalid":"reject","example":"New York","aliases":["to"]},{"name":"depart_date","type":"string","required":true,"description":"Start of the departure date range, YYYY-MM-DD (future).","on_invalid":"reject","example":"2026-12-12","aliases":["date","departure_date"]},{"name":"depart_date_end","type":"string","required":false,"description":"End of the departure date range, YYYY-MM-DD. Defaults to ~30 days after depart_date if omitted.","on_invalid":"ignore","example":"2027-01-11"},{"name":"nights_min","type":"integer","required":false,"description":"Minimum number of nights at the destination — turns the price graph into a return-trip search (omit both for one-way).","on_invalid":"ignore","example":5,"minimum":0},{"name":"nights_max","type":"integer","required":false,"description":"Maximum number of nights at the destination — turns the price graph into a return-trip search (omit both for one-way).","on_invalid":"ignore","example":9,"minimum":0},{"name":"adults","type":"integer","required":false,"description":"Number of adult passengers.","on_invalid":"ignore","default":1,"example":1,"minimum":0},{"name":"children","type":"integer","required":false,"description":"Number of child passengers (2-11).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"infants","type":"integer","required":false,"description":"Number of infant passengers (<2).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"cabin_class","type":"enum","required":false,"description":"Cabin class (unknown values fall back to economy).","on_invalid":"ignore","allowed_values":[{"value":"economy","label":"Economy (default)"},{"value":"premium_economy","label":"Premium economy"},{"value":"business","label":"Business"},{"value":"first","label":"First class"}],"default":"economy","example":"business","aliases":["cabin"]},{"name":"currency","type":"string","required":false,"description":"ISO-4217 currency for prices (e.g. USD, EUR, GBP). Default USD.","on_invalid":"ignore","default":"USD","example":"EUR"}],"returns":"prices[]{date, return_date, price, currency, rating}, cheapest{date,price}, count, currency, trip_type, origin, destination","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"origin":"London","destination":"New York","depart_date":"2026-12-12","depart_date_end":"2026-12-19"}},{"name":"seat_info","description":"Get the seat specs and amenities for a specific flight: seat pitch, width and recline (legroom/comfort), plus power, Wi-Fi and in-flight entertainment availability. Look up by airline + flight number + route + date. Returns honest empty when the flight is unknown.","required_params":["carrier","flight_number","source","destination","date"],"optional_params":["cabin_class"],"params":[{"name":"carrier","type":"string","required":true,"description":"Operating airline IATA code (2 chars, e.g. BA = British Airways, AA = American, LH = Lufthansa).","on_invalid":"reject","example":"BA","aliases":["airline"]},{"name":"flight_number","type":"string","required":true,"description":"Flight number (numeric part only, e.g. 177; 'BA177' is also accepted).","on_invalid":"reject","example":"177","aliases":["code","number"]},{"name":"source","type":"string","required":true,"description":"Departure airport IATA code (e.g. LHR).","on_invalid":"reject","example":"LHR","aliases":["origin","from"]},{"name":"destination","type":"string","required":true,"description":"Arrival airport IATA code (e.g. JFK).","on_invalid":"reject","example":"JFK","aliases":["to"]},{"name":"date","type":"string","required":true,"description":"Flight date, YYYY-MM-DD (must be a future date).","on_invalid":"reject","example":"2026-12-12","aliases":["depart_date","departure_date"]},{"name":"cabin_class","type":"enum","required":false,"description":"Cabin class (unknown values fall back to economy).","on_invalid":"ignore","allowed_values":[{"value":"economy","label":"Economy (default)"},{"value":"premium_economy","label":"Premium economy"},{"value":"business","label":"Business"},{"value":"first","label":"First class"}],"default":"economy","example":"business","aliases":["cabin"]}],"returns":"flight, carrier, source, destination, cabin_class, found, seat{pitch{value,unit}, width{value,unit}, recline{value,unit}, has_power, has_wifi, has_audio_video, power, audio_video}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"carrier":"BA","flight_number":"177","source":"LHR","destination":"JFK","date":"2026-12-12"}}]},{"name":"flipkart","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Flipkart API scraper — India's largest e-commerce marketplace (flipkart.com): product search with full filters, product detail (price/specs/variants/offers), buyer reviews, categories, sellers, similar products, available filters and autocomplete","version":"2.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/flipkart/v1","spec_available":true,"actions":[{"name":"search","description":"Flipkart product search with filters — keyword search returning product cards (title/price/mrp/discount/rating/image/url) plus the total result count, paginated. Filter by brand, price range, minimum rating, minimum discount, F-Assured and any category facet (use the `filters` action to discover what a query supports). Set `language` (hi, bn, ta, te, kn, ml, mr, gu, pa, or, as) for Flipkart's own localized product text in 11 Indian languages.","required_params":["q"],"optional_params":["page","sort","brand","min_price","max_price","min_rating","min_discount","f_assured","no_cost_emi","include_out_of_stock","facets","language"],"params":[{"name":"q","type":"string","required":true,"description":"Search keyword.","on_invalid":"reject","example":"laptop","aliases":["query"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Sort order.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"popularity","label":"Popularity"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"recency_desc","label":"Newest first"}],"example":"popularity"},{"name":"brand","type":"string","required":false,"description":"Filter to a brand (exact Flipkart brand name, e.g. Samsung, HP).","on_invalid":"reject","example":"Samsung"},{"name":"min_price","type":"number","required":false,"description":"Minimum price in ₹ (INR). Applied to the returned cards.","on_invalid":"ignore","example":10000},{"name":"max_price","type":"number","required":false,"description":"Maximum price in ₹ (INR). Applied to the returned cards.","on_invalid":"ignore","example":50000},{"name":"min_rating","type":"enum","required":false,"description":"Keep only products rated this many stars and up.","on_invalid":"ignore","allowed_values":[{"value":"4","label":"4★ & above"},{"value":"3","label":"3★ & above"},{"value":"2","label":"2★ & above"},{"value":"1","label":"1★ & above"}],"example":"4"},{"name":"min_discount","type":"enum","required":false,"description":"Keep only products with at least this % discount.","on_invalid":"ignore","allowed_values":[{"value":"10","label":"10% or more"},{"value":"20","label":"20% or more"},{"value":"30","label":"30% or more"},{"value":"40","label":"40% or more"},{"value":"50","label":"50% or more"},{"value":"60","label":"60% or more"},{"value":"70","label":"70% or more"},{"value":"80","label":"80% or more"}],"example":"30"},{"name":"f_assured","type":"boolean","required":false,"description":"When true, restrict to F-Assured (Flipkart-Assured quality/delivery) listings.","on_invalid":"ignore","default":false},{"name":"no_cost_emi","type":"boolean","required":false,"description":"When true, restrict to products with a No Cost EMI offer.","on_invalid":"ignore","default":false},{"name":"include_out_of_stock","type":"boolean","required":false,"description":"When true, include out-of-stock products in the results.","on_invalid":"ignore","default":false},{"name":"facets","type":"array","required":false,"description":"Advanced: raw category-facet filter fragment(s) taken from the `filters` action's `param` field (e.g. 'facets.processor[]=Core i7'). Pass one string or a list to stack several facets.","on_invalid":"ignore","example":["facets.processor[]=Core i7","facets.ram_capacity[]=16 GB"]},{"name":"language","type":"enum","required":false,"description":"Language of the product text (title, subtitle, key_specs), served from Flipkart's own localized site. Default English. Translation is Flipkart's and partial: brand/model names stay in Latin script and some cards are not translated. Prices, ids and product urls are identical across languages.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English (default)"},{"value":"hi","label":"Hindi — हिन्दी"},{"value":"bn","label":"Bengali — বাংলা"},{"value":"ta","label":"Tamil — தமிழ்"},{"value":"te","label":"Telugu — తెలుగు"},{"value":"kn","label":"Kannada — ಕನ್ನಡ"},{"value":"ml","label":"Malayalam — മലയാളം"},{"value":"mr","label":"Marathi — मराठी"},{"value":"gu","label":"Gujarati — ગુજરાતી"},{"value":"pa","label":"Punjabi — ਪੰਜਾਬੀ"},{"value":"or","label":"Odia — ଓଡ଼ିଆ"},{"value":"as","label":"Assamese — অসমীয়া"}],"default":"en","example":"hi","aliases":["lang"]}],"returns":"results[] (title, price, mrp, discount, rating, image, url) + total_results + filters_applied + page + has_more + next_page (+ language when not English)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"laptop"}},{"name":"product","description":"full product page facts (title/price/mrp/rating/specs/highlights/images/seller/similar)","required_params":[],"optional_params":["url","itm_id"],"params":[{"name":"url","type":"string","required":false,"description":"Full Flipkart product URL.","on_invalid":"reject","example":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"},{"name":"itm_id","type":"string","required":false,"description":"Flipkart item id (the itmXXXX in a /p/ URL).","on_invalid":"reject","example":"itm5a14f3731bf15"}],"returns":"product{title, brand, breadcrumbs[], description, price, mrp, discount_percent, currency, rating, rating_count, review_count, rating_breakup, parameter_ratings, in_stock, seller{}, variants[]{value,price,in_stock,url}, offers[]{type,title,value}, images[], highlights[], specifications[]{name,value}, return_policy, cod_available, no_cost_emi, delivery, similar_products[]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"itm_id":"itm5a14f3731bf15"}},{"name":"reviews","description":"Flipkart buyer reviews for a product, paginated — each review has rating, title, body, reviewer name, location, certified-buyer badge, helpful/up/down votes and date, plus the product's total review count. Page through with meta.next_page to collect them all.","required_params":[],"optional_params":["url","slug","itm_id","page","sort"],"params":[{"name":"url","type":"string","required":false,"description":"Full Flipkart product URL.","on_invalid":"reject","example":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"},{"name":"slug","type":"string","required":false,"description":"Product slug (the part before /p/; derived from url if omitted).","on_invalid":"reject"},{"name":"itm_id","type":"string","required":false,"description":"Flipkart item id (the itmXXXX in a /p/ URL).","on_invalid":"reject","example":"itm5a14f3731bf15"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Review ordering.","on_invalid":"ignore","allowed_values":[{"value":"MOST_RECENT","label":"Most recent"},{"value":"MOST_HELPFUL","label":"Most helpful"},{"value":"POSITIVE_FIRST","label":"Positive first"},{"value":"NEGATIVE_FIRST","label":"Negative first"}],"example":"MOST_RECENT"}],"returns":"reviews[]{rating, title, text, author, location, certified_buyer, helpful_count, upvote, downvote, created} + total_review_count + itm_id + page + has_more + next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"itm_id":"itm5a14f3731bf15"}},{"name":"category","description":"category/browse listing cards from a Flipkart category URL/path — a `/pr?sid=…` category link, a `~cs-…` curated collection, or a store/hub page such as /mobiles or /mobile-phones-store","required_params":[],"optional_params":["url","path","page"],"params":[{"name":"url","type":"string","required":false,"description":"Full Flipkart category URL. (category needs url OR path.)","on_invalid":"reject","example":"https://www.flipkart.com/mobiles/pr?sid=tyy,4io"},{"name":"path","type":"string","required":false,"description":"Site-relative category path (alternative to url).","on_invalid":"reject"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"results[] listing cards, source, page, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.flipkart.com/mobiles/pr?sid=tyy,4io"}},{"name":"browse","description":"Alias of the `category` action — browse/listing cards from a Flipkart category URL or site-relative path. (browse needs url OR path.)","required_params":[],"optional_params":["url","path","page"],"params":[{"name":"url","type":"string","required":false,"description":"Full Flipkart category URL (alias of the category action). (browse needs url OR path.)","on_invalid":"reject","example":"https://www.flipkart.com/mobiles/pr?sid=tyy,4io"},{"name":"path","type":"string","required":false,"description":"Site-relative category path (alternative to url), e.g. /mobiles/pr?sid=tyy,4io.","on_invalid":"reject"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"results[] listing cards (same as category), source, page, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.flipkart.com/mobiles/pr?sid=tyy,4io"}},{"name":"similar","description":"similar/related products from a product page reco widgets","required_params":[],"optional_params":["url","itm_id","product_id"],"params":[{"name":"url","type":"string","required":false,"description":"Full Flipkart product URL.","on_invalid":"reject","example":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"},{"name":"itm_id","type":"string","required":false,"description":"Flipkart item id (the itmXXXX in a /p/ URL).","on_invalid":"reject","example":"itm5a14f3731bf15"},{"name":"product_id","type":"string","required":false,"description":"Flipkart product id (FSN) to exclude from results.","on_invalid":"reject"}],"returns":"results[] related products (title, price, rating, url)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"}},{"name":"seller","description":"Who sells a product: seller id, fulfilment and availability, resolved from a product URL — plus storefront catalog cards when a storefront path is supplied. Start with `product_url` (the live-verified route); Flipkart has no public /seller/<id> storefront, so a bare `seller_id` returns metadata only.","required_params":[],"optional_params":["product_url","url","seller_id","seller_path","seller_url","product_id","page"],"params":[{"name":"product_url","type":"string","required":false,"description":"Flipkart product URL to resolve the seller from — the recommended locator.","on_invalid":"reject","example":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"},{"name":"url","type":"string","required":false,"description":"Generic Flipkart URL (seller storefront or product); treated like product_url when it points at a product.","on_invalid":"reject"},{"name":"seller_id","type":"string","required":false,"description":"Flipkart seller id. Note: Flipkart publishes no /seller/<id> storefront, so this alone yields no catalog — use product_url, or seller_path/seller_url if you already have a storefront link.","on_invalid":"reject"},{"name":"seller_path","type":"string","required":false,"description":"Site-relative seller storefront path.","on_invalid":"reject"},{"name":"seller_url","type":"string","required":false,"description":"Full seller storefront URL.","on_invalid":"reject"},{"name":"product_id","type":"string","required":false,"description":"Product id for seller-of-this-product lookup.","on_invalid":"reject"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"seller{seller_id, catalog_count, ...}, results[] storefront cards, page, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_url":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"}},{"name":"autocomplete","description":"search autosuggest suggestions for a partial query","required_params":["q"],"optional_params":[],"params":[{"name":"q","type":"string","required":true,"description":"Search keyword.","on_invalid":"reject","example":"laptop","aliases":["query"]}],"returns":"suggestions[] {text, query, source}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"laptop"}},{"name":"categories","description":"top-level navigation/category links from homepage state","required_params":[],"optional_params":[],"params":[],"returns":"categories[] {title, url} from the homepage navigation","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"variants","description":"Product variants (the sibling SKUs — color/storage/size) each with its OWN price, stock status and product URL, from the product page.","required_params":[],"optional_params":["url","itm_id","product_id"],"params":[{"name":"url","type":"string","required":false,"description":"Full Flipkart product URL.","on_invalid":"reject","example":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"},{"name":"itm_id","type":"string","required":false,"description":"Flipkart item id (the itmXXXX in a /p/ URL).","on_invalid":"reject","example":"itm5a14f3731bf15"},{"name":"product_id","type":"string","required":false,"description":"Flipkart product id (FSN).","on_invalid":"reject"}],"returns":"variants[]{value, product_id, price, currency, in_stock, url}, product_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"}},{"name":"filters","description":"Available search filters (facets) for a query — every filter Flipkart offers for these results: brand, price, rating, discount, offers, availability and category-specific facets (processor, RAM, screen size, etc.), each value carrying a count and a ready-to-use filter `param`. Feed a value's `param` back into search's `facets` argument.","required_params":["q"],"optional_params":["brand"],"params":[{"name":"q","type":"string","required":true,"description":"Search keyword.","on_invalid":"reject","example":"laptop","aliases":["query"]},{"name":"brand","type":"string","required":false,"description":"Optionally scope the facets to a brand first.","on_invalid":"reject"}],"returns":"filters[]{id, title, values[]{value, count, param, selected}} + total_results + query","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"laptop"}},{"name":"offers","description":"Bank, EMI, exchange and cashback offers for a product (the offer strip on the product page): e.g. 'Flipkart Axis Bank Card 5% cashback', 'Exchange offer up to ₹X off', 'No Cost EMI'. Honest-empty when a product has no active offers.","required_params":[],"optional_params":["url","itm_id"],"params":[{"name":"url","type":"string","required":false,"description":"Full Flipkart product URL.","on_invalid":"reject","example":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"},{"name":"itm_id","type":"string","required":false,"description":"Flipkart item id (the itmXXXX in a /p/ URL).","on_invalid":"reject","example":"itm5a14f3731bf15"}],"returns":"offers[]{type, title, value} + no_cost_emi + cod_available + product_id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"}},{"name":"serviceability","description":"Does this product deliver to this Indian pincode, by when, and for what delivery charge. One call checks one product at one pincode; there is no batch or all-pincodes mode. An undeliverable pincode is ok:true with serviceable:false and null delivery fields. `available` only means the listing is on sale, so read `serviceable` for delivery. The seller and listing can change with the pincode.","required_params":["pincode"],"optional_params":["url","itm_id","product_id"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian pincode to check delivery for. A malformed pincode, or one Flipkart itself rejects as invalid, returns INVALID_PARAM.","on_invalid":"reject","example":"560001"},{"name":"product_id","type":"string","required":false,"description":"Flipkart product id (FSN), the pid= in a product URL. The most exact locator: it names one colour/size SKU.","on_invalid":"reject","example":"SATHZ4K8VZ6SVZHH","aliases":["pid"]},{"name":"url","type":"string","required":false,"description":"Full Flipkart product URL.","on_invalid":"reject","example":"https://www.flipkart.com/apple-iphone-16-white-128-gb/p/itm7c0281cd247be"},{"name":"itm_id","type":"string","required":false,"description":"Flipkart item id (the itmXXXX in a /p/ URL).","on_invalid":"reject","example":"itm5a14f3731bf15"}],"returns":"pincode, product_id, listing_id, available, serviceable, delivery_date (YYYY-MM-DD, IST), delivery_timestamp (epoch ms), delivery_text, delivery_charge (0 = free), currency, seller{id, name}, pincode_recognized (true, or null when Flipkart's pincode check could not be completed)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"SATHZ4K8VZ6SVZHH","pincode":"560001"}}]},{"name":"flo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"FLO API scraper — search, category browse & product detail for FLO (flo.com.tr), Turkey's largest footwear retailer. Sizes, colors, prices (TRY), discounts, coupons & stock. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/flo/v1","spec_available":true,"actions":[{"name":"search","description":"Search FLO by keyword (`query`), paginated. Every card carries product_id, title, brand, price, special_price (discount), sizes[] (with per-size stock), colors[], image, url, seller_type (flo|marketplace).","required_params":["query"],"optional_params":["page","sort","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword (Turkish or brand name).","on_invalid":"reject","example":"nike spor ayakkabı","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page — 1-based, 24 products/page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"string","required":false,"description":"Sort order: price_asc (cheapest first) · price_desc · newest. Also accepts a raw FLO sort token (e.g. 'filter_price:asc').","on_invalid":"ignore","allowed_values":[{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"newest","label":"newest"}],"example":"price_asc","aliases":["order","siralama"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-16, default 8).","on_invalid":"ignore","default":8,"minimum":1,"maximum":16}],"returns":"products[]{product_id, title, brand, price, special_price, original_price, discount_rate, currency, in_stock, image, sizes[], colors[], seller_id, seller_type, category}, count, total, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"category/products","description":"Browse a FLO category (`category` slug + optional `cinsiyet` gender), paginated — the deep shoe-enumeration workhorse. Same rich card shape as search (sizes, colors, discount, stock).","required_params":["category"],"optional_params":["cinsiyet","page","sort","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"FLO category slug, e.g. spor-ayakkabi · kosu-ayakkabisi · yuruyus-ayakkabisi · gunluk-ayakkabi · bot · sandalet · terlik · sneaker · hali-saha-ayakkabisi. May also be a full category URL.","on_invalid":"reject","example":"spor-ayakkabi","aliases":["slug","category_slug"]},{"name":"cinsiyet","type":"string","required":false,"description":"Gender filter for category browse: erkek · kadin · unisex · erkek-cocuk · kiz-cocuk.","on_invalid":"ignore","allowed_values":[{"value":"erkek","label":"Men"},{"value":"kadin","label":"Women"},{"value":"unisex","label":"Unisex"},{"value":"erkek-cocuk","label":"Boys"},{"value":"kiz-cocuk","label":"Girls"}],"example":"erkek","aliases":["gender"]},{"name":"page","type":"integer","required":false,"description":"Result page — 1-based, 24 products/page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"string","required":false,"description":"Sort order: price_asc (cheapest first) · price_desc · newest. Also accepts a raw FLO sort token (e.g. 'filter_price:asc').","on_invalid":"ignore","allowed_values":[{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"newest","label":"newest"}],"example":"price_asc","aliases":["order","siralama"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-16, default 8).","on_invalid":"ignore","default":8,"minimum":1,"maximum":16}],"returns":"products[]{…same card as search}, count, total, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"spor-ayakkabi","cinsiyet":"erkek"}},{"name":"product/detail","description":"Full FLO product by its page `url`: title, brand, price, original_price, discount_percent, currency=TRY, images[] (full gallery), sizes[] (per-size stock with a unit count and a barcode on every size), colors[], coupons[], badges (free-shipping/campaign), rating, seller, description, stock. Pass the url — FLO has no route that takes the product id by itself, and search and category rows already carry the url for exactly this call.","required_params":["url"],"optional_params":["max_rotations"],"params":[{"name":"url","type":"string","required":true,"description":"Full FLO product URL (…/urun/<slug>-<sku>). This is the only address FLO answers to: the trailing digits are not a route on their own, so the id alone cannot open a product. Every row `search` and `category/products` return carries this url.","on_invalid":"reject","example":"https://www.flo.com.tr/urun/nike-revolution-7-erkek-siyah-kosu-ayakkabisi-101465072","aliases":["product_url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-16, default 8).","on_invalid":"ignore","default":8,"minimum":1,"maximum":16}],"returns":"product{product_id, title, brand, model_code, url, price, original_price, discount_percent, currency=TRY, in_stock, stock_message, sizes[], colors[], color, gender, images[], coupons[], badges[], rating, rating_count, description, category, breadcrumb[], seller{}, attributes{}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.flo.com.tr/urun/nike-court-borough-low-recraft-beyaz-unisex-sneaker-101792825"}}]},{"name":"fnac","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Fnac API scraper — fnac.com (France) plus Belgium, Switzerland and Portugal: search products, read the product (EAN, price with the struck 30-day-lowest price and eco-fee, member price, seller, other offers, specs), list every marketplace offer and read reviews. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/fnac/v1","spec_available":true,"actions":[{"name":"search","description":"Search a Fnac storefront by keyword with the site's own sorts and filters (price range, sold by Fnac). Each row: product id, title, URL, brand or contributors, the price with the struck 30-day-lowest price and discount when shown, the member price where the storefront shows one, the store-pickup price on books, condition (new/used + grade), seller (Fnac or marketplace), availability, rating + count, other new/used offers with their from-prices, badges and image.","required_params":["query"],"optional_params":["country","page","sort","price_min","price_max","sold_by_fnac","include_fallback_results","max_rotations","retailer"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to search (in the storefront's language: 'casque bluetooth', 'livro'). When Fnac answers a keyword with a category page instead of a result list, the response says so in `redirected_to` / `redirect_type` and returns that page's products.","on_invalid":"reject","example":"casque bluetooth","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Fnac storefront. Prices come back in that storefront's currency (CHF for ch). Product ids are shared across storefronts but price, stock and sellers differ. A pasted product URL sets the country itself.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"fnac.com — France, EUR"},{"value":"be","label":"fr.fnac.be — Belgium, EUR"},{"value":"ch","label":"fr.fnac.ch — Switzerland, CHF"},{"value":"pt","label":"fnac.pt — Portugal, EUR"},{"value":"es","label":"fnac.es — not available (returns MARKET_UNAVAILABLE)"}],"default":"fr","example":"fr"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Fnac serves 20 products per page; `total_pages` says how many exist.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"sort","type":"enum","required":false,"description":"Order of the results — the site's own orderings.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Fnac's default order"},{"value":"price_asc","label":"Fnac's 'lowest price' order (not strictly monotonic on the shown price)"},{"value":"price_desc","label":"Fnac's 'highest price' order"},{"value":"rating","label":"Fnac's 'customer rating' order"}],"default":"relevance"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in the storefront currency. Sent to Fnac's own price filter and re-checked on the returned rows (outliers dropped, counted in `dropped_outside_price_range`). Part of fnac.com's traffic only offers fixed price bands; the response's `price_filter_mode` says which applied ('exact' or 'bands' — with bands, `total_results` counts the bands).","on_invalid":"reject","example":20,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in the storefront currency (see price_min).","on_invalid":"reject","example":50,"minimum":0},{"name":"sold_by_fnac","type":"boolean","required":false,"description":"Only products sold by Fnac itself (Fnac's 'Vendu par Fnac' filter).","on_invalid":"reject"},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no product on the page contains a query word, Fnac pads the page with fuzzy matches. false (default): results are empty and `fallback_results_dropped` counts them. true: they are returned apart, in `fallback_results`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8},{"name":"retailer","type":"enum","required":false,"description":"Retailer; original Fnac behavior is the default. Darty does not support auxiliary actions or advanced filters.","on_invalid":"reject","allowed_values":[{"value":"fnac","label":"Original Fnac storefronts"},{"value":"darty","label":"Darty France: first-page search and full detail"}],"default":"fnac"}],"returns":"results[]{position, product_id, catalog, product_code, offer_id, title, url, brand, product_type, contributors[{name, role}], price, currency, struck_price, struck_price_type, discount_percent, member_price, member_price_label, store_pickup_price, store_pickup_label, condition ('new'|'used'), condition_grade, seller{name, id, type, is_fnac}, fulfilled_by, availability, availability_code, rating, rating_count, rating_scale, other_offers[{condition, count, from_price}], lowest_new_offer_price, lowest_used_offer_price, badges[], image}, count, total_results, total_pages, page, page_size, sort, sort_applied, query, country, currency, applied_filters, dropped_outside_price_range, keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[] (only with include_fallback_results=true), sponsored_dropped, page_notice","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"retailer":"darty","query":"television","country":"fr"}},{"name":"product/detail","description":"The Fnac product record by URL or product_id: title, brand or contributors, EAN, SKU, MPN, the buy-box price with the struck 30-day-lowest price and discount, the eco-participation and copie-privée levy it includes, member price where shown, store-pickup price on books, availability (in stock / pre-order), condition, seller (Fnac or marketplace, with rating and sales count), delivery, the other new/used offers summary, star rating + count, energy class, images, video, description, specs and breadcrumb.","required_params":[],"optional_params":["url","product_id","country","max_rotations","retailer"],"params":[{"name":"url","type":"string","required":false,"description":"A Fnac product URL (fnac.com, fr.fnac.be, fr.fnac.ch, fnac.pt). Every search row returns one.","on_invalid":"reject","example":"https://www.fnac.com/Casque-audio-sans-fil-SONY-Bluetooth-a-reduction-de-bruit-WH-CH720N-Noir/a17689644/w-4","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"Instead of url: the Fnac product id (digits, as `product_id` in search rows) or the URL code (a17689644, mp50936938).","on_invalid":"reject","example":"17689644","aliases":["prid","product_code"]},{"name":"country","type":"enum","required":false,"description":"Fnac storefront. Prices come back in that storefront's currency (CHF for ch). Product ids are shared across storefronts but price, stock and sellers differ. A pasted product URL sets the country itself.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"fnac.com — France, EUR"},{"value":"be","label":"fr.fnac.be — Belgium, EUR"},{"value":"ch","label":"fr.fnac.ch — Switzerland, CHF"},{"value":"pt","label":"fnac.pt — Portugal, EUR"},{"value":"es","label":"fnac.es — not available (returns MARKET_UNAVAILABLE)"}],"default":"fr","example":"fr"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8},{"name":"retailer","type":"enum","required":false,"description":"Retailer; original Fnac behavior is the default. Darty does not support auxiliary actions or advanced filters.","on_invalid":"reject","allowed_values":[{"value":"fnac","label":"Original Fnac storefronts"},{"value":"darty","label":"Darty France: first-page search and full detail"}],"default":"fnac"}],"returns":"product{product_id, catalog, product_code, sku, ean, mpn, title, url, brand, contributors[], price, currency, struck_price, struck_price_type, discount_percent, eco_participation, copy_levy, price_includes_eco_fee, member_price, member_price_label, member_perk, store_pickup_price, store_pickup_label, store_pickup_only, store_availability, badges[], availability (headline offer: in_stock|out_of_stock|pre_order|limited), availability_text (the page's wording when Fnac sells the headline offer, else null), availability_type, fnac_availability, fnac_availability_type, fnac_availability_code (Fnac's own status, kept apart), stock_status, in_stock, is_preorder, condition, condition_grade, seller{name, id, type, is_fnac, location, rating, rating_scale, sales_count}, fulfilled_by, delivery{label, price, estimate}, other_offers[{condition, count, from_price}], lowest_new_offer_price, lowest_used_offer_price, page_offers[], rating, rating_count, rating_scale, energy_class, images[], video_url, description, specs[{name, value}], breadcrumb[{name, url}], category, country}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"retailer":"darty","product_id":"8245134"}},{"name":"product/offers","description":"Every offer for one product (Fnac/Darty and marketplace sellers, new and used), by URL or product_id, with the site's condition filter and sorts: seller name + rating + review count, condition (new/refurbished/used + grade), price, shipping price, total price, delivery estimate and badges.","required_params":[],"optional_params":["url","product_id","country","condition","sort","page","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"A Fnac product URL (fnac.com, fr.fnac.be, fr.fnac.ch, fnac.pt). Every search row returns one.","on_invalid":"reject","example":"https://www.fnac.com/Casque-audio-sans-fil-SONY-Bluetooth-a-reduction-de-bruit-WH-CH720N-Noir/a17689644/w-4","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"Instead of url: the Fnac product id (digits, as `product_id` in search rows) or the URL code (a17689644, mp50936938).","on_invalid":"reject","example":"17689644","aliases":["prid","product_code"]},{"name":"country","type":"enum","required":false,"description":"Fnac storefront. Prices come back in that storefront's currency (CHF for ch). Product ids are shared across storefronts but price, stock and sellers differ. A pasted product URL sets the country itself.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"fnac.com — France, EUR"},{"value":"be","label":"fr.fnac.be — Belgium, EUR"},{"value":"ch","label":"fr.fnac.ch — Switzerland, CHF"},{"value":"pt","label":"fnac.pt — Portugal, EUR"},{"value":"es","label":"fnac.es — not available (returns MARKET_UNAVAILABLE)"}],"default":"fr","example":"fr"},{"name":"condition","type":"enum","required":false,"description":"Fnac's own offer filter.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every offer"},{"value":"new","label":"New offers only"},{"value":"used","label":"Used and refurbished offers only"}],"default":"all"},{"name":"sort","type":"enum","required":false,"description":"Order of the offers — the site's own orderings.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Fnac's default order"},{"value":"best_selling","label":"Seller sales count"},{"value":"price_asc","label":"Cheapest price + shipping first"},{"value":"price_desc","label":"Dearest price + shipping first"},{"value":"seller_rating","label":"Best-rated seller first"},{"value":"delivery","label":"Fastest delivery first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Offer page, 1-based. Fnac serves 10 offers per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8}],"returns":"offers[]{offer_id, seller{name, is_fnac_group, rating, rating_scale, rating_count}, condition, condition_label, condition_grade, price, currency, shipping_price, total_price, delivery_estimate, badges[]}, count, product_id, catalog, country, currency, filter_applied, sort_applied, cheapest_total_on_page, page, page_size","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"17689644"}},{"name":"product/reviews","description":"Customer reviews for a product, by URL or product_id, paged and sortable: score, title, text, author display name, date, purchase date, verified-purchase flag and helpful votes, plus the average rating and review count.","required_params":[],"optional_params":["url","product_id","country","sort","page","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"A Fnac product URL (fnac.com, fr.fnac.be, fr.fnac.ch, fnac.pt). Every search row returns one.","on_invalid":"reject","example":"https://www.fnac.com/Casque-audio-sans-fil-SONY-Bluetooth-a-reduction-de-bruit-WH-CH720N-Noir/a17689644/w-4","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"Instead of url: the Fnac product id (digits, as `product_id` in search rows) or the URL code (a17689644, mp50936938).","on_invalid":"reject","example":"17689644","aliases":["prid","product_code"]},{"name":"country","type":"enum","required":false,"description":"Fnac storefront. Prices come back in that storefront's currency (CHF for ch). Product ids are shared across storefronts but price, stock and sellers differ. A pasted product URL sets the country itself.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"fnac.com — France, EUR"},{"value":"be","label":"fr.fnac.be — Belgium, EUR"},{"value":"ch","label":"fr.fnac.ch — Switzerland, CHF"},{"value":"pt","label":"fnac.pt — Portugal, EUR"},{"value":"es","label":"fnac.es — not available (returns MARKET_UNAVAILABLE)"}],"default":"fr","example":"fr"},{"name":"sort","type":"enum","required":false,"description":"Order of the reviews.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Most recent first (Fnac's default)"},{"value":"most_helpful","label":"Most helpful first"},{"value":"rating_desc","label":"Best scores first"},{"value":"rating_asc","label":"Lowest scores first"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based. Fnac serves 10 reviews per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8}],"returns":"reviews[]{id, score, title, content, author, date, purchase_date, verified_purchase, origin, trust_note, helpful_yes, helpful_no}, count, total_reviews, average_rating, rating_scale, page, total_pages, sort, page_notice, product_id, country","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.fnac.com/Casque-audio-sans-fil-SONY-Bluetooth-a-reduction-de-bruit-WH-CH720N-Noir/a17689644/w-4"}}]},{"name":"forum","category":{"id":"social","title":"Social Media"},"title":"Forum Feed API — live, dated topic streams from developer, e-commerce, no-code and real-estate communities","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/forum/v1","spec_available":true,"actions":[{"name":"latest","description":"Newest topics from one forum, each with its creation time. Ask for the last 24 hours and you get exactly what people opened today.","required_params":["site"],"optional_params":["limit","since_hours","order_by"],"params":[{"name":"site","type":"enum","required":true,"description":"Which forum to read. Each one is a live community whose members discuss the tools they use and the problems they hit.","on_invalid":"reject","allowed_values":[{"value":"n8n","label":"community.n8n.io (automation)"},{"value":"make","label":"community.make.com (automation)"},{"value":"bubble","label":"forum.bubble.io (no-code)"},{"value":"retool","label":"community.retool.com (internal-tools)"},{"value":"shopify","label":"community.shopify.com (ecommerce)"},{"value":"biggerpockets","label":"www.biggerpockets.com (real-estate)"},{"value":"localsearchforum","label":"www.localsearchforum.com (local-seo)"},{"value":"ecommercefuel","label":"www.ecommercefuel.com (ecommerce)"},{"value":"uipath","label":"forum.uipath.com (rpa-automation)"},{"value":"frappe","label":"discuss.frappe.io (erp)"},{"value":"shopifydev","label":"community.shopify.dev (ecommerce-dev)"},{"value":"openai","label":"community.openai.com (ai-dev)"},{"value":"cursor","label":"forum.cursor.com (ai-dev)"},{"value":"huggingface","label":"discuss.huggingface.co (ai-ml)"},{"value":"discoursemeta","label":"meta.discourse.org (forum-ops)"},{"value":"streamlit","label":"discuss.streamlit.io (data-apps)"},{"value":"namepros","label":"www.namepros.com (domains)"},{"value":"dnforum","label":"www.dnforum.com (domains)"},{"value":"ebay","label":"community.ebay.com (ecommerce)"},{"value":"elitetrader","label":"www.elitetrader.com (trading)"},{"value":"trade2win","label":"www.trade2win.com (trading)"},{"value":"esri","label":"community.esri.com (gis-geodata)"},{"value":"betangel","label":"www.betangel.com (betting-trading)"},{"value":"plesk","label":"talk.plesk.com (hosting-ops)"},{"value":"etsy","label":"community.etsy.com (ecommerce)"},{"value":"powerbi","label":"community.fabric.microsoft.com (data-apps)"},{"value":"propertychat","label":"www.propertychat.com.au (real-estate)"},{"value":"affiliatefix","label":"www.affiliatefix.com (affiliate)"}],"example":"n8n","aliases":["forum","community"]},{"name":"limit","type":"integer","required":false,"description":"How many topics to return (1-200). Discourse forums page automatically to reach the number you ask for; RSS feeds return whatever the feed publishes, so the real count can be lower.","on_invalid":"ignore","default":30,"example":50,"minimum":1,"maximum":200},{"name":"since_hours","type":"integer","required":false,"description":"Only return topics created within this many hours. Use 24 for what was posted today. Filtering is on the creation time, not the last reply, so an old thread that got a new comment is not returned unless you also set order_by=bumped.","on_invalid":"ignore","example":24,"minimum":1,"maximum":8760,"aliases":["hours","within_hours"]},{"name":"order_by","type":"enum","required":false,"description":"Which timestamp to sort and filter by. Use created to find new questions; use bumped to find threads that are active again.","on_invalid":"reject","allowed_values":[{"value":"created","label":"when the topic was opened"},{"value":"bumped","label":"when it last got a reply"}],"default":"created","example":"created"}],"returns":"site, host, platform, vertical, count, topics[]{title, url, excerpt, created_at, bumped_at, age_hours, replies, views, category, author, id}. created_at and bumped_at are separate on purpose: a topic opened years ago can be bumped today, and treating the bump as the creation date makes an old thread look new.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"site":"n8n","limit":10}},{"name":"sites","description":"Every forum this API can read, with its platform and market.","required_params":[],"optional_params":[],"params":[],"returns":"count, verticals[], sites[]{site, host, platform, vertical}, not_covered[], measured_and_rejected{host: reason}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"topic","description":"The full text of one topic: the opening post and every reply.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"Full URL of a forum topic. Returns the opening post and the replies as plain text.","on_invalid":"reject","example":"https://community.n8n.io/t/welcome-to-the-n8n-community/1","aliases":["topic_url","link"]}],"returns":"url, title, created_at, post_count, posts[]{author, created_at, text}. Discourse forums only; an RSS-only forum returns INVALID_PARAM naming the sites that do support it.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://community.n8n.io/t/n8n-webhooks-made-easy-a-step-by-step-tutorial/56681"}},{"name":"search","description":"Search inside one forum. Results come back in the forum's own relevance order, not by date, so use latest when you need recency.","required_params":["site","query"],"optional_params":["limit"],"params":[{"name":"site","type":"enum","required":true,"description":"Which forum to read. Each one is a live community whose members discuss the tools they use and the problems they hit.","on_invalid":"reject","allowed_values":[{"value":"n8n","label":"community.n8n.io (automation)"},{"value":"make","label":"community.make.com (automation)"},{"value":"bubble","label":"forum.bubble.io (no-code)"},{"value":"retool","label":"community.retool.com (internal-tools)"},{"value":"shopify","label":"community.shopify.com (ecommerce)"},{"value":"biggerpockets","label":"www.biggerpockets.com (real-estate)"},{"value":"localsearchforum","label":"www.localsearchforum.com (local-seo)"},{"value":"ecommercefuel","label":"www.ecommercefuel.com (ecommerce)"},{"value":"uipath","label":"forum.uipath.com (rpa-automation)"},{"value":"frappe","label":"discuss.frappe.io (erp)"},{"value":"shopifydev","label":"community.shopify.dev (ecommerce-dev)"},{"value":"openai","label":"community.openai.com (ai-dev)"},{"value":"cursor","label":"forum.cursor.com (ai-dev)"},{"value":"huggingface","label":"discuss.huggingface.co (ai-ml)"},{"value":"discoursemeta","label":"meta.discourse.org (forum-ops)"},{"value":"streamlit","label":"discuss.streamlit.io (data-apps)"},{"value":"namepros","label":"www.namepros.com (domains)"},{"value":"dnforum","label":"www.dnforum.com (domains)"},{"value":"ebay","label":"community.ebay.com (ecommerce)"},{"value":"elitetrader","label":"www.elitetrader.com (trading)"},{"value":"trade2win","label":"www.trade2win.com (trading)"},{"value":"esri","label":"community.esri.com (gis-geodata)"},{"value":"betangel","label":"www.betangel.com (betting-trading)"},{"value":"plesk","label":"talk.plesk.com (hosting-ops)"},{"value":"etsy","label":"community.etsy.com (ecommerce)"},{"value":"powerbi","label":"community.fabric.microsoft.com (data-apps)"},{"value":"propertychat","label":"www.propertychat.com.au (real-estate)"},{"value":"affiliatefix","label":"www.affiliatefix.com (affiliate)"}],"example":"n8n","aliases":["forum","community"]},{"name":"query","type":"string","required":true,"description":"Words to search for inside the forum.","on_invalid":"reject","example":"api rate limit","aliases":["q","term","search"]},{"name":"limit","type":"integer","required":false,"description":"How many topics to return (1-200). Discourse forums page automatically to reach the number you ask for; RSS feeds return whatever the feed publishes, so the real count can be lower.","on_invalid":"ignore","default":30,"example":50,"minimum":1,"maximum":200}],"returns":"site, query, count, topics[]{title, url, created_at, excerpt, id}. Discourse forums only; an RSS-only forum returns INVALID_PARAM naming the sites that do support it.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"n8n","query":"webhook","limit":10}}]},{"name":"fotocasa","category":{"id":"real-estate","title":"Real Estate"},"title":"Fotocasa API scraper — Spanish property data: for-sale and rental listings across Spain with the site's own filters (price, rooms, bathrooms, surface, property type, condition, new-build, amenities, keywords, sort), full property detail (price and price per m², rooms, surface, floor, orientation, condition, energy certificate, features, every photo, coordinates and the listing agency), agency profiles with their live stock, and location autocomplete — from fotocasa.es, Spain's #2 property marketplace. No API key, no login.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/fotocasa/v1","spec_available":true,"actions":[{"name":"location_search","description":"Resolve a Spanish place name, district, postcode or street to fotocasa locations. Returns up to ten ranked matches with the combined-location id that `search` takes, the administrative level, and coordinates.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Place to resolve: a town, district, neighbourhood, province, postcode or street, in Spanish.","on_invalid":"reject","example":"Madrid","aliases":["location","q","text"]},{"name":"limit","type":"integer","required":false,"description":"How many matches to return. Fotocasa always computes ten, so ten is also the ceiling.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":10}],"returns":"matches[]{name, display_name, level (PROVINCE/MUNICIPALITY/DISTRICT/NEIGHBORHOOD/ZIP_CODE/STREET…), location_id (pass to search; null for zip-code and street matches, which fotocasa does not make searchable), location_code, latitude, longitude, has_children, searchable}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Madrid"}},{"name":"search","description":"Search Spanish property listings by location — for sale or to rent — with fotocasa's own filters: price range, rooms, bathrooms, surface, property type, state of repair, new-build vs resale, amenities, free text and sort order. Location is mandatory in one of four forms (location, location_slug, location_id or url). 30 listings per page; paginate with page/max_pages.","required_params":[],"optional_params":["location","location_slug","location_id","zone","transaction","property_type","price_min","price_max","rooms_min","rooms_max","bathrooms_min","bathrooms_max","surface_min","surface_max","features","condition","construction","extras","subtypes","keywords","sort","page","max_pages","include_promoted","url"],"params":[{"name":"location","type":"string","required":false,"description":"Where to search — REQUIRED unless you pass location_slug, location_id or url. Free text in Spanish ('Madrid', 'Chamberí, Madrid', 'Las Rozas de Madrid', 'Bilbao'): it is resolved through fotocasa's own location service and the match that was used is reported in meta.location_resolved. Spain is searched by place, so one of these four location inputs must always be supplied.","on_invalid":"ignore","example":"Madrid","aliases":["q","query","place"]},{"name":"location_slug","type":"string","required":false,"description":"A fotocasa location slug, used verbatim as the URL segment and therefore the cheapest option (no resolver call). Examples: madrid-capital, barcelona-capital, bilbao, valencia-capital, malaga, las-rozas-de-madrid, espana. Note the pattern: 'madrid' is the PROVINCE and 'madrid-capital' is the city.","on_invalid":"ignore","example":"madrid-capital","aliases":["location_segment","slug"]},{"name":"location_id","type":"string","required":false,"description":"A fotocasa combined-location id, exactly as location_search returns it (nine comma-separated numbers). This targets a province, town, district or neighbourhood precisely. Zip-code and street suggestions do NOT carry one and cannot be used here.","on_invalid":"ignore","example":"724,14,28,173,0,28079,0,0,0","aliases":["combined_location_id","combinedLocationIds"]},{"name":"zone","type":"string","required":false,"description":"District/zone slug inside the location (default todas-las-zonas = the whole town). Only meaningful together with location_slug.","on_invalid":"ignore","default":"todas-las-zonas","example":"chamberi"},{"name":"transaction","type":"enum","required":false,"description":"Sale or rental market. Default buy.","on_invalid":"reject","allowed_values":[{"value":"buy","label":"For sale"},{"value":"rent","label":"To rent"},{"value":"comprar","label":"= buy"},{"value":"alquiler","label":"= rent"},{"value":"sale","label":"= buy"},{"value":"for-sale","label":"= buy"},{"value":"to-rent","label":"= rent"}],"default":"buy","example":"buy","aliases":["channel","operation"]},{"name":"property_type","type":"enum","required":false,"description":"Which fotocasa catalogue to search. These are the segments the site itself serves; anything else is rejected rather than quietly returning the wrong catalogue.","on_invalid":"reject","allowed_values":[{"value":"viviendas","label":"Homes — flats and houses together"},{"value":"pisos","label":"Flats/apartments"},{"value":"aticos","label":"Penthouses"},{"value":"chalets","label":"Houses, villas and chalets"},{"value":"duplex","label":"Duplexes"},{"value":"estudios","label":"Studios"},{"value":"garajes","label":"Garage / parking spaces"},{"value":"locales","label":"Commercial premises"},{"value":"oficinas","label":"Offices"},{"value":"naves-industriales","label":"Industrial units"},{"value":"terrenos","label":"Land and plots"},{"value":"trasteros","label":"Storage rooms"},{"value":"edificios","label":"Whole buildings"},{"value":"homes","label":"= viviendas"},{"value":"flats","label":"= pisos"},{"value":"houses","label":"= chalets"},{"value":"land","label":"= terrenos"},{"value":"offices","label":"= oficinas"}],"default":"viviendas","example":"viviendas","aliases":["type"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR (monthly rent when transaction=rent).","on_invalid":"ignore","example":200000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR (monthly rent when transaction=rent).","on_invalid":"ignore","example":400000,"minimum":0,"aliases":["max_price"]},{"name":"rooms_min","type":"integer","required":false,"description":"Minimum number of rooms (bedrooms).","on_invalid":"ignore","example":2,"minimum":0,"maximum":20,"aliases":["min_rooms","bedrooms_min"]},{"name":"rooms_max","type":"integer","required":false,"description":"Maximum number of rooms (bedrooms).","on_invalid":"ignore","example":4,"minimum":0,"maximum":20,"aliases":["max_rooms","bedrooms_max"]},{"name":"bathrooms_min","type":"integer","required":false,"description":"Minimum number of bathrooms.","on_invalid":"ignore","example":2,"minimum":0,"maximum":20,"aliases":["min_bathrooms"]},{"name":"bathrooms_max","type":"integer","required":false,"description":"Maximum number of bathrooms.","on_invalid":"ignore","example":3,"minimum":0,"maximum":20,"aliases":["max_bathrooms"]},{"name":"surface_min","type":"integer","required":false,"description":"Minimum built surface in m².","on_invalid":"ignore","example":80,"minimum":0,"aliases":["min_surface","min_m2"]},{"name":"surface_max","type":"integer","required":false,"description":"Maximum built surface in m².","on_invalid":"ignore","example":150,"minimum":0,"aliases":["max_surface","max_m2"]},{"name":"features","type":"array","required":false,"description":"Amenities the property must have — ALL of them (fotocasa intersects them: lift + pool returned 1 170 of 11 979 Madrid listings). Pass a list or a comma-separated string; a raw numeric fotocasa feature id is also accepted. Note that swimming_pool matches a COMMUNAL pool as well as a private one — 26 of the 31 rows on the first filtered page came back with the amenity `community_pool`.","on_invalid":"ignore","allowed_values":[{"value":"air_conditioning","label":"air conditioning"},{"value":"balcony","label":"balcony"},{"value":"furnished","label":"furnished"},{"value":"garden","label":"garden"},{"value":"heating","label":"heating"},{"value":"laundry_room","label":"laundry room"},{"value":"lift","label":"lift"},{"value":"parking","label":"parking"},{"value":"parquet","label":"parquet"},{"value":"patio","label":"patio"},{"value":"storage_room","label":"storage room"},{"value":"swimming_pool","label":"swimming pool"},{"value":"terrace","label":"terrace"},{"value":"wardrobes","label":"wardrobes"}],"example":["lift","swimming_pool"]},{"name":"condition","type":"array","required":false,"description":"State of repair. Several values may be combined.","on_invalid":"ignore","allowed_values":[{"value":"almost_new","label":"almost new"},{"value":"for_renovation","label":"for renovation"},{"value":"good","label":"good"},{"value":"needs_renovation","label":"needs renovation"},{"value":"new_home","label":"new home"},{"value":"refurbished","label":"refurbished"},{"value":"very_good","label":"very good"}],"example":["good"]},{"name":"construction","type":"enum","required":false,"description":"New build vs resale. On Madrid this split 270 vs 11 713 of 11 984.","on_invalid":"ignore","allowed_values":[{"value":"new_build","label":"New build only"},{"value":"second_hand","label":"Resale only"},{"value":"any","label":"Both"}],"example":"second_hand"},{"name":"extras","type":"array","required":false,"description":"Listing-level flags fotocasa filters on: price_drop, bank_owned, with_videos, with_video_or_virtual_tour, quality_seal, subsidised_housing and friends.","on_invalid":"ignore","allowed_values":[{"value":"bank_owned","label":"bank owned"},{"value":"finished","label":"finished"},{"value":"price_drop","label":"price drop"},{"value":"quality_seal","label":"quality seal"},{"value":"subsidised_housing","label":"subsidised housing"},{"value":"with_building_specs","label":"with building specs"},{"value":"with_photos","label":"with photos"},{"value":"with_video_or_virtual_tour","label":"with video or virtual tour"},{"value":"with_videos","label":"with videos"}],"example":["price_drop"]},{"name":"subtypes","type":"array","required":false,"description":"Numeric fotocasa property-subtype ids to include (UNION, unlike features): 2 apartment, 3 house/chalet, 5 semi-detached, 6 penthouse, 7 duplex, 8 loft, 9 rural, 52 ground floor, 54 studio, 14/58/59/60 land. Usually the property_type segment is easier; this exists for combinations the segments cannot express.","on_invalid":"ignore","example":[6]},{"name":"keywords","type":"string","required":false,"description":"Free-text term matched against the listing (Spanish). 'piscina' cut Madrid from 11 984 to 1 704.","on_invalid":"ignore","example":"piscina","aliases":["text"]},{"name":"sort","type":"enum","required":false,"description":"Result order. These four are the orders fotocasa actually serves — its other sort keys return a server error, so they are not offered.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Fotocasa's own ranking (default)"},{"value":"newest","label":"Most recently published first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"example":"newest"},{"name":"page","type":"integer","required":false,"description":"First page to fetch (30 listings per page). Fotocasa stops at page 333; beyond that it silently re-serves page 333, so deeper requests are refused here instead.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":333},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch in one call (1-20). Each page is one upstream request.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20},{"name":"include_promoted","type":"boolean","required":false,"description":"Fotocasa injects ONE extra promoted listing above each results page (31 rows where its own page size is 30) and rotates it per request. It is a real property, so it is returned by default flagged `promoted: true` and counted in meta.promoted_count. Set false to receive only the 30 organic rows.","on_invalid":"ignore","default":true,"example":true},{"name":"url","type":"string","required":false,"description":"Alternatively paste a fotocasa search URL straight from the browser; its path and query are used as-is and page/max_pages still apply.","on_invalid":"ignore","example":"https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l"}],"returns":"items[]{property_id, detail_url, promoted, transaction, property_type, property_subtype, price, price_display, price_period, price_per_m2, rooms, bathrooms, surface_m2, floor (+floor_code), orientation, condition, antiquity, amenities[], address{}, latitude, longitude, images[], published_at, days_online, description, agency{}}, count, total_results (fotocasa's own market total), promoted_count, page_size, pages_fetched, location{slug, zone, literal, resolved}, filters_applied, stop_reason","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"location_slug":"madrid-capital"}},{"name":"property_detail","description":"The full fotocasa listing: price and price per m², rooms, bathrooms, surface and land surface, floor, orientation, state of repair, age band, heating and hot-water type, energy-performance certificate, the agency's own feature list, the whole description, every photo, exact-or-approximate coordinates, breadcrumbs and the listing agency.","required_params":[],"optional_params":["property_id","url","transaction","property_type"],"params":[{"name":"property_id","type":"string","required":false,"description":"Fotocasa property id — the digits before /d in a listing URL, or a search result's property_id.","on_invalid":"ignore","example":"184662317","aliases":["id","ad_id"]},{"name":"url","type":"string","required":false,"description":"Alternatively the full fotocasa listing URL. Pass this OR property_id.","on_invalid":"ignore","example":"https://www.fotocasa.es/es/comprar/vivienda/madrid/x/184662317/d"},{"name":"transaction","type":"enum","required":false,"description":"Sale or rental market. Default buy.","on_invalid":"reject","allowed_values":[{"value":"buy","label":"For sale"},{"value":"rent","label":"To rent"},{"value":"comprar","label":"= buy"},{"value":"alquiler","label":"= rent"},{"value":"sale","label":"= buy"},{"value":"for-sale","label":"= buy"},{"value":"to-rent","label":"= rent"}],"default":"buy","example":"buy","aliases":["channel","operation"]},{"name":"property_type","type":"enum","required":false,"description":"Which fotocasa catalogue to search. These are the segments the site itself serves; anything else is rejected rather than quietly returning the wrong catalogue.","on_invalid":"reject","allowed_values":[{"value":"viviendas","label":"Homes — flats and houses together"},{"value":"pisos","label":"Flats/apartments"},{"value":"aticos","label":"Penthouses"},{"value":"chalets","label":"Houses, villas and chalets"},{"value":"duplex","label":"Duplexes"},{"value":"estudios","label":"Studios"},{"value":"garajes","label":"Garage / parking spaces"},{"value":"locales","label":"Commercial premises"},{"value":"oficinas","label":"Offices"},{"value":"naves-industriales","label":"Industrial units"},{"value":"terrenos","label":"Land and plots"},{"value":"trasteros","label":"Storage rooms"},{"value":"edificios","label":"Whole buildings"},{"value":"homes","label":"= viviendas"},{"value":"flats","label":"= pisos"},{"value":"houses","label":"= chalets"},{"value":"land","label":"= terrenos"},{"value":"offices","label":"= oficinas"}],"default":"viviendas","example":"viviendas","aliases":["type"]}],"returns":"listing{property_id, title, url, price, price_per_m2, price_period, rooms, bathrooms, surface_m2, land_surface_m2, floor, orientation, condition, antiquity, heating, hot_water, has_lift, furnished, energy_certificate{}, extra_features[], description, reference, published_at, address{}, latitude, longitude, coordinates_are_exact, images[], breadcrumbs[], agency{}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"property_id":"184662317"}},{"name":"agency","description":"An estate agency's fotocasa profile and its live stock: address, town, website, opening hours, quality seal and registration numbers, plus the listings it is advertising (15 per page, same listing shape as search).","required_params":["agency"],"optional_params":["page","transaction","property_type"],"params":[{"name":"agency","type":"string","required":true,"description":"Agency slug as it appears in its fotocasa profile URL (/es/pro/<slug>/), or the full profile URL. Every search result carries it as agency.profile_url.","on_invalid":"reject","example":"olisson-club","aliases":["slug","url"]},{"name":"page","type":"integer","required":false,"description":"Agency listing page (15 listings per page).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200},{"name":"transaction","type":"enum","required":false,"description":"Sale or rental market. Default buy.","on_invalid":"reject","allowed_values":[{"value":"buy","label":"For sale"},{"value":"rent","label":"To rent"},{"value":"comprar","label":"= buy"},{"value":"alquiler","label":"= rent"},{"value":"sale","label":"= buy"},{"value":"for-sale","label":"= buy"},{"value":"to-rent","label":"= rent"}],"default":"buy","example":"buy","aliases":["channel","operation"]},{"name":"property_type","type":"enum","required":false,"description":"Which fotocasa catalogue to search. These are the segments the site itself serves; anything else is rejected rather than quietly returning the wrong catalogue.","on_invalid":"reject","allowed_values":[{"value":"viviendas","label":"Homes — flats and houses together"},{"value":"pisos","label":"Flats/apartments"},{"value":"aticos","label":"Penthouses"},{"value":"chalets","label":"Houses, villas and chalets"},{"value":"duplex","label":"Duplexes"},{"value":"estudios","label":"Studios"},{"value":"garajes","label":"Garage / parking spaces"},{"value":"locales","label":"Commercial premises"},{"value":"oficinas","label":"Offices"},{"value":"naves-industriales","label":"Industrial units"},{"value":"terrenos","label":"Land and plots"},{"value":"trasteros","label":"Storage rooms"},{"value":"edificios","label":"Whole buildings"},{"value":"homes","label":"= viviendas"},{"value":"flats","label":"= pisos"},{"value":"houses","label":"= chalets"},{"value":"land","label":"= terrenos"},{"value":"offices","label":"= oficinas"}],"default":"viviendas","example":"viviendas","aliases":["type"]}],"returns":"agency{name, slug, description, address, town, province, zip_code, website, logo, created_at, has_quality_seal, official_registrations[], business_hours{}, latitude, longitude}, items[] (as search), count, total_listings, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"agency":"olisson-club"}}]},{"name":"freelancer","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Freelancer.com API scraper — live freelance projects, freelancer & employer profiles, design contests, and the full skill/category taxonomy from Freelancer.com: budget, bids/proposals, skills, client country, ratings and portfolio, in clean JSON. No login required.","version":"1.0.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/freelancer/v1","spec_available":true,"actions":[{"name":"search","description":"Search live freelance PROJECTS on Freelancer.com by keyword, skills, category, budget/hourly band, freshness, country, and language; sorted by recency, bids, or bid-deadline. Returns title, description, budget{type,min,max,currency}, skills[], bids_count (proposals), posted_at, client_country, owner_id, location and url. Freelancer's logged-out API publishes no client identity (owner_id is null).","required_params":[],"optional_params":["query","match","skills","category","project_types","budget_min","budget_max","posted_within","countries","languages","sort","limit","offset"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to match in the project title/description — e.g. 'logo design', 'React developer', 'mobile app'. Omit to browse the newest projects.","on_invalid":"ignore","example":"react native developer","aliases":["q","keyword","search"]},{"name":"match","type":"enum","required":false,"description":"Freelancer's own search treats a multi-word query as OR, so 'data scraping python' can return unrelated projects. 'any' re-ranks by word coverage without dropping anything; 'all' filters to projects matching every word.","on_invalid":"ignore","allowed_values":[{"value":"any","label":"Keep every upstream result, but rank the ones containing more of your query words first (default)."},{"value":"all","label":"Only return projects whose text contains every word of your query."}],"default":"any","example":"all","aliases":["match_mode"]},{"name":"skills","type":"array","required":false,"description":"Filter to projects requiring these skill IDs (use the `skills` action to resolve a skill name → id, e.g. 'PHP'→13). Multiple = OR.","on_invalid":"ignore","example":[13,9],"aliases":["job_ids","skill_ids"]},{"name":"category","type":"string","required":false,"description":"Top-level category SEO slug to scope the search (see the `categories` action for the full list, e.g. 'design-media-architecture').","on_invalid":"ignore","example":"websites-it-software","aliases":["cat"]},{"name":"project_types","type":"array","required":false,"description":"Restrict to 'fixed' (fixed-price) and/or 'hourly' projects. Omit for both.","on_invalid":"ignore","allowed_values":[{"value":"fixed","label":"Fixed-price projects"},{"value":"hourly","label":"Hourly projects"}],"example":["fixed"],"aliases":["type","types"]},{"name":"budget_min","type":"number","required":false,"description":"Minimum average project budget (in the project's own currency). For hourly projects this is the hourly-rate floor.","on_invalid":"ignore","example":250,"minimum":0,"aliases":["min_budget","min_avg_price"]},{"name":"budget_max","type":"number","required":false,"description":"Maximum average project budget (project currency). Pair with budget_min.","on_invalid":"ignore","example":2000,"minimum":0,"aliases":["max_budget","max_avg_price"]},{"name":"posted_within","type":"enum","required":false,"description":"Only projects posted within this window (server-side from_time filter). Great for a fresh-leads feed.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"24h","label":"Last 24 hours"},{"value":"3d","label":"Last 3 days"},{"value":"7d","label":"Last 7 days"},{"value":"30d","label":"Last 30 days"}],"example":"24h","aliases":["posted","freshness"]},{"name":"countries","type":"array","required":false,"description":"Filter by project country name(s) (e.g. 'United States', 'United Kingdom'). Multiple = OR. (Unauthenticated: client identity is not exposed — only the project's listed country is used.)","on_invalid":"ignore","example":["United States"],"aliases":["country"]},{"name":"languages","type":"array","required":false,"description":"Filter by the project's language code(s) (ISO-639, e.g. 'en', 'es').","on_invalid":"ignore","example":["en"],"aliases":["lang"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"time_updated","label":"Most recently updated (default)"},{"value":"time_submitted","label":"Newest first (just posted)"},{"value":"bid_count","label":"Most bids first"},{"value":"bid_enddate","label":"Bidding ending soonest"}],"default":"time_updated","example":"time_submitted","aliases":["sort_field","sort_by"]},{"name":"limit","type":"integer","required":false,"description":"How many projects to return (1–100). Use `offset` to page.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100,"aliases":["max_results","count"]},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (0–5000); skip this many results before returning `limit`.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":5000,"aliases":["skip","page_offset"]}],"returns":"projects[]{id, title, description, type, budget{type,min,max,currency}, skills[], status, bids_count, posted_at, client_country, owner_id, location{}, featured, urgent, nda, seo_url, url}, total_count, returned, offset","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"python","limit":10}},{"name":"project","description":"Full detail for one Freelancer.com project by numeric id, project URL, or SEO slug — everything from `search` plus hourly-commitment, timeframe, qualifications, escrow status and selected-bid count.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"The project to fetch: a numeric project id (40505996), a project URL (https://www.freelancer.com/projects/<slug>), or the SEO slug itself.","on_invalid":"ignore","example":"40505996","aliases":["project_id","url","seo_url"]}],"returns":"project{...all search fields..., detail{hourly_info, timeframe, qualifications[], is_escrow, selected_bids_count}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"40675266"}},{"name":"user","description":"Profile of a Freelancer.com freelancer or employer by username/handle or id, as the API publishes it: display name, public name, company, country/city/location, timezone, role, hourly rate, reputation (rating/reviews/completion/repeat-hire), skills, membership, badges, portfolio and registration year. Name/e-mail/phone/address keys are returned as the API sends them (null on the logged-out API).","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"The freelancer/employer to fetch: a Freelancer username (fmsiddique) or a numeric user id. Returns the profile as the API publishes it.","on_invalid":"ignore","example":"fmsiddique","aliases":["user","user_id","id"]}],"returns":"user{id, username, display_name, public_name, company, first_name, last_name, email, phone, date_of_birth, address, role, country, city, location{}, timezone, hourly_rate, primary_currency, registration_year, preferred_freelancer, portfolio_count, membership, skills[], badges[], reputation{...}, employer_reputation{...}, portfolio[], profile_url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"fmsiddique"}},{"name":"contests","description":"Browse live OPEN Freelancer.com design/creative CONTESTS (accepting entries) — prize, currency, entry count, skills, and deadlines. Filter by keyword and skills.","required_params":[],"optional_params":["query","skills","limit","offset"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to match in the project title/description — e.g. 'logo design', 'React developer', 'mobile app'. Omit to browse the newest projects.","on_invalid":"ignore","example":"react native developer","aliases":["q","keyword","search"]},{"name":"skills","type":"array","required":false,"description":"Filter to projects requiring these skill IDs (use the `skills` action to resolve a skill name → id, e.g. 'PHP'→13). Multiple = OR.","on_invalid":"ignore","example":[13,9],"aliases":["job_ids","skill_ids"]},{"name":"limit","type":"integer","required":false,"description":"How many contests to return (1–50).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["max_results","count"]},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (0–5000); skip this many results before returning `limit`.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":5000,"aliases":["skip","page_offset"]}],"returns":"contests[]{id, title, description, prize, currency, entry_count, skills[], status, guaranteed, featured, end_at, url}, total_count, returned, offset","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":8}},{"name":"skills","description":"Resolve a skill name to Freelancer.com skill id(s) (for search's `skills` filter), or list the most-popular skills with their active-project counts — the marketplace's skill taxonomy.","required_params":[],"optional_params":["query","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Skill name (or fragment) to resolve to Freelancer skill id(s) you can feed to search's `skills` filter (e.g. 'php' → {id:13,name:'PHP'}). Omit to list the most-popular skills.","on_invalid":"ignore","example":"python","aliases":["q","name","skill"]},{"name":"limit","type":"integer","required":false,"description":"Max skills to return (1–200, default 60).","on_invalid":"ignore","default":60,"minimum":1,"maximum":200}],"returns":"skills[]{id, name, category, seo_url, active_project_count}, returned","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"php","limit":10}},{"name":"categories","description":"List the top-level Freelancer.com job categories (Websites/IT, Design, Writing, Mobile…) with their active-project counts — the browse taxonomy for scoping a search.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{id, name, seo_url, active_project_count}, returned","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"funda","category":{"id":"real-estate","title":"Real Estate"},"title":"Funda.nl API scraper — Netherlands real estate data: for-sale (koop) and for-rent (huur) property listings across every Dutch city, town and province with full filters (price EUR, rooms, surface m², plot, property type, sort), each listing with price, rooms, surface, energy label, construction type, photos, agent and address, a full per-listing detail record (description, all photos, complete Kenmerken spec table, year built), plus an area resolver that maps a Dutch place name to Funda's search area — no API key required","version":"1.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/funda/v1","spec_available":true,"actions":[{"name":"search","description":"Search Funda.nl property listings by area (for sale or for rent), with structured filters: price (EUR), rooms, living surface (m²), plot size, property type and sort. Each result carries price, object type, surface, rooms, bedrooms, energy label, construction type, address, agent and the primary photo. Paginate with page.","required_params":["area"],"optional_params":["contract","home_type","sort","page","price_min","price_max","rooms_min","rooms_max","surface_min","surface_max","plot_min","plot_max","availability"],"params":[{"name":"area","type":"string","required":true,"description":"Where to search — a Dutch city, town or province ('amsterdam', 'rotterdam', 'utrecht', 'den-haag', 'noord-holland'). Free text is accepted and resolved to Funda's area-slug automatically (a province is resolved to its provincie- slug).","on_invalid":"reject","example":"amsterdam","aliases":["location","loc","city","where","selected_area"]},{"name":"contract","type":"enum","required":false,"description":"Listing type: for sale (koop) or for rent (huur). Rent prices are monthly.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"For sale (koop)"},{"value":"rent","label":"For rent (huur)"}],"default":"sale","example":"sale"},{"name":"home_type","type":"string","required":false,"description":"Property type — one or several comma-separated: house, apartment. e.g. 'house,apartment'.","on_invalid":"ignore","example":"apartment","aliases":["object_type","property_type"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Most relevant (default)"},{"value":"newest","label":"Most recently published"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"surface_high","label":"Largest living surface first"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (15 listings per page; paginate with page += 1).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR (asking price for sale, monthly rent when contract=rent).","on_invalid":"ignore","example":250000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR.","on_invalid":"ignore","example":500000,"minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Minimum number of rooms.","on_invalid":"ignore","example":3,"minimum":1,"maximum":30,"aliases":["rooms"]},{"name":"rooms_max","type":"integer","required":false,"description":"Maximum number of rooms.","on_invalid":"ignore","example":6,"minimum":1,"maximum":30},{"name":"surface_min","type":"integer","required":false,"description":"Minimum living surface in square metres (m²).","on_invalid":"ignore","example":75,"minimum":0,"aliases":["floor_area_min"]},{"name":"surface_max","type":"integer","required":false,"description":"Maximum living surface in square metres (m²).","on_invalid":"ignore","example":150,"minimum":0,"aliases":["floor_area_max"]},{"name":"plot_min","type":"integer","required":false,"description":"Minimum plot (land) size in square metres (m²).","on_invalid":"ignore","example":100,"minimum":0},{"name":"plot_max","type":"integer","required":false,"description":"Maximum plot (land) size in square metres (m²).","on_invalid":"ignore","example":1000,"minimum":0},{"name":"availability","type":"enum","required":false,"description":"Market status to include. Funda's default view is listings still for sale; use 'sold' for sold listings, 'under_offer' for ones under bid or sold subject to conditions, or 'all' for every status.","on_invalid":"ignore","allowed_values":[{"value":"available","label":"Still on the market (Funda's default)"},{"value":"sold","label":"Sold / no longer available"},{"value":"under_offer","label":"Under bid or sold under reservation"},{"value":"all","label":"Every status"}],"example":"sold","aliases":["status"]}],"returns":"results[]{id (= global_id), global_id, tiny_id (the number inside `url`), url, contract, object_type, price{amount_eur, kind}, surface_m2, surface_range_m2 (only when the listing is a new-build project spanning a range), plot_m2, plot_range_m2, rooms, bedrooms, energy_label, construction_type, status (available | sold | under_bid | sold_under_reservation), status_raw, publish_date, listing_kind, media_types (floor_plan/photo_360/video), headline, address{city, postal_code, street, house_number, municipality, neighbourhood, district, province}, agent{office_name, office_id, association, url}, primary_photo_url, photo_count, photos[] (every image of the listing, not just the first)} + total + count + page + max_pages + area + filters_applied","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"area":"amsterdam"}},{"name":"detail","description":"Full record for a single listing by its Funda detail URL or path (funda.nl/detail/koop/<city>/<slug>/<id>/). Returns price, address, description, every photo at full resolution, and the complete Kenmerken (specifications) table — surface, rooms, year built, energy label, heating, location and more.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"A Funda listing detail URL or path — the funda.nl/detail/koop/<city>/<slug>/<id>/ link from a search result's `url`. A full https URL or just the /detail/... path both work.","on_invalid":"reject","example":"https://www.funda.nl/detail/koop/amsterdam/appartement-kanaalstraat-140-h/44409331/","aliases":["listing_url","path","detail_url"]}],"returns":"listing{id (= global_id, joins onto a search row), global_id, tiny_id, canonical_id, url, name, object_type, description, price{amount_eur}, address{street, city, province, postal_code}, photos[] (the FULL gallery — the page's ld+json carries only the first 6, so these come from the page state), photo_count, floor_plans[], photos_360[], videos, brochure_url, virtual_tour, features[]{group, label, value}, year_built, surface_m2, plot_m2, volume_m3, rooms, bedrooms, bathrooms, floors, construction_type, status, offered_since, acceptance, ownership, agent (always null — Funda does not publish the brokerage on the listing page itself; take `agent` from the matching search row), energy_label is NOT returned here for the same reason: the listing page's specification row for it carries interface text rather than the label, so the honest source for the energy label is the search result}. Funda runs three id spaces for one home — the global id, the short id in the link a search result gives you, and the id on the page's own canonical address — so all three come back under their own names and `id` is the one that matches search.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.funda.nl/detail/koop/amsterdam/appartement-albert-cuypstraat-94-3/44570149/"}},{"name":"area","description":"Area resolver — map a free-text Dutch place name to Funda's search area-slug and report the live listing count there. Use it to power a search box or to confirm the exact area the search will use (a city resolves to its slug, a province to its provincie- slug).","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text Dutch place to resolve — a city, town or province ('Amsterdam', 'Den Haag', 'Noord-Holland').","on_invalid":"reject","example":"Den Haag","aliases":["q","input","area","location","city"]}],"returns":"resolved{query, area_slug, label, total_for_sale} + matched (bool)","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Den Haag"}}]},{"name":"galaxus","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Galaxus & Digitec API — search Switzerland's largest online store and read products with CHF/EUR price, previous price, stock count, delivery date, pickup stock, specs, GTIN, price history, seller offers and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/galaxus/v1","spec_available":true,"actions":[{"name":"search","description":"Search Galaxus (galaxus.ch, digitec.ch and the galaxus.de/.at/.fr/.it/.nl/.be storefronts) by keyword with the site's own filters: category id, brand id, price range, minimum star rating, and offer type (sold by Galaxus, in stock, second-hand, on promotion); 8 sort orders. Each row: product id, name, brand, price incl. and excl. VAT in CHF/EUR, previous price and its type, discount, promotion counter, offer type (Galaxus retail / marketplace / second-hand / refurbished), availability and delivery class, rating and count, category, energy class, image. Plus the source's total and the category / brand / offer-type facets with counts.","required_params":["query"],"optional_params":["site","category_id","brand_id","min_price","max_price","min_rating","offer","sort","page","page_size","lang"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed into the Galaxus search box. The source never auto-redirects to a category here (the site does on its own pages), so the result is the plain keyword search.","on_invalid":"reject","example":"kopfhörer","aliases":["q","keyword","keywords","search"]},{"name":"site","type":"enum","required":false,"description":"Which storefront to read. Prices, currency, VAT and assortment follow the storefront: ch = galaxus.ch (CHF), digitec = digitec.ch (CHF, electronics-focused subset of the same catalogue), de/at/fr/it/nl/be = galaxus.<cc> (EUR).","on_invalid":"reject","allowed_values":[{"value":"ch","label":"galaxus.ch (Switzerland, CHF)"},{"value":"digitec","label":"digitec.ch (Switzerland, CHF)"},{"value":"de","label":"galaxus.de (Germany, EUR)"},{"value":"at","label":"galaxus.at (Austria, EUR)"},{"value":"fr","label":"galaxus.fr (France, EUR)"},{"value":"it","label":"galaxus.it (Italy, EUR)"},{"value":"nl","label":"galaxus.nl (Netherlands, EUR)"},{"value":"be","label":"galaxus.be (Belgium, EUR)"}],"default":"ch","aliases":["country","store","shop","domain"]},{"name":"category_id","type":"string","required":false,"description":"Galaxus category (product type) id, e.g. 48 = headphones, 24 = smartphones. Search facets list the ids with counts.","on_invalid":"reject","example":"48","aliases":["category","product_type_id","pt"]},{"name":"brand_id","type":"string","required":false,"description":"Galaxus brand id, e.g. 47 = Apple. Search facets list the ids with counts. A brand id the source does not know returns 0 rows.","on_invalid":"reject","example":"47","aliases":["brand","bra"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price incl. VAT in the storefront's currency. Swiss writing is accepted: 1'250, 1’250.–","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price incl. VAT in the storefront's currency.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max"]},{"name":"min_rating","type":"enum","required":false,"description":"Only products whose average star rating is at least this (the site's own three buckets).","on_invalid":"reject","allowed_values":[{"value":"4.75","label":"4.75 stars and up"},{"value":"3.75","label":"3.75 stars and up"},{"value":"2.75","label":"2.75 stars and up"}],"aliases":["rating"]},{"name":"offer","type":"enum","required":false,"description":"Offer filter as on the site: galaxus = sold by Galaxus itself, in_stock = in stock now, second_hand = used / resale / refurbished, promotion = on promotion.","on_invalid":"reject","allowed_values":[{"value":"galaxus","label":"Sold by Galaxus"},{"value":"in_stock","label":"In stock"},{"value":"second_hand","label":"Second-hand"},{"value":"promotion","label":"On promotion"}],"aliases":["offer_type","availability"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's 8 orders).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Lowest price"},{"value":"price_desc","label":"Highest price"},{"value":"rating","label":"Best rated"},{"value":"newest","label":"Newest"},{"value":"discount","label":"Biggest discount"},{"value":"bestseller","label":"Most sold"},{"value":"availability","label":"Availability"}],"default":"relevance","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Result page. The source serves at most the first ~2,000 rows of any search (offset 2000 is its last page start); pages past that are refused with the last valid page number.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":84},{"name":"page_size","type":"enum","required":false,"description":"Rows per page.","on_invalid":"reject","allowed_values":[{"value":"24","label":"24 rows"},{"value":"48","label":"48 rows"},{"value":"96","label":"96 rows"}],"default":"24","aliases":["limit","per_page"]},{"name":"lang","type":"enum","required":false,"description":"Interface language of names, specifications and descriptions. Default = the storefront's first language (de for ch/digitec/de/at). ch and digitec also take fr, it, en; every site takes en. Note: with en the source leaves some product descriptions empty and some specification group names in German.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"en","label":"English"},{"value":"nl","label":"Dutch"}],"aliases":["language"]}],"returns":"results[]{product_id, name, full_name, properties, brand, brand_id, url, price, price_excl_vat, currency, previous_price{price, price_excl_vat, type, rebate_pct}, discount_pct, promotion{type, rebate_pct, items_total, items_sold}, offer_type, offer_id, availability_icon, delivery_class, is_future_release, rating, rating_count, category{id,name,url}, energy_class, image, price_per_unit{price, price_excl_vat, currency, unit}, sales_counter, labels[], variant_labels[], min_order_quantity, can_add_to_cart} + total, page, page_size, last_page, has_more, search_pass, fallback_results (true = no keyword match, rows come from the site's semantic fallback), corrected_query, price_basis, facets{categories[], brands[], offer_types[], price_range}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"kopfhörer","brand_id":"47"}},{"name":"product","description":"Full Galaxus/Digitec product record by id: price incl./excl. VAT, previous price with its type, discount, promotion counter, volume prices, offer type and marketplace merchant, number of seller offers, central-warehouse stock count, expected delivery time, stock per pickup branch, GTIN/EAN, manufacturer part number, brand, category, rating, questions, sales rank in category, price-history summary (low/high, typical/low/high verdict), energy class, description, summary, key and full specifications, warranty, return policy, variants (colour/storage with their own price), images.","required_params":["product_id"],"optional_params":["site","lang"],"params":[{"name":"product_id","type":"string","required":true,"description":"Galaxus product id exactly as a search row returns it (digits, e.g. 76663413). A galaxus/digitec product URL ending in -76663413 is accepted too. The same id works on every site.","on_invalid":"reject","example":"76663413","aliases":["id","productId","url","item_id"]},{"name":"site","type":"enum","required":false,"description":"Which storefront to read. Prices, currency, VAT and assortment follow the storefront: ch = galaxus.ch (CHF), digitec = digitec.ch (CHF, electronics-focused subset of the same catalogue), de/at/fr/it/nl/be = galaxus.<cc> (EUR).","on_invalid":"reject","allowed_values":[{"value":"ch","label":"galaxus.ch (Switzerland, CHF)"},{"value":"digitec","label":"digitec.ch (Switzerland, CHF)"},{"value":"de","label":"galaxus.de (Germany, EUR)"},{"value":"at","label":"galaxus.at (Austria, EUR)"},{"value":"fr","label":"galaxus.fr (France, EUR)"},{"value":"it","label":"galaxus.it (Italy, EUR)"},{"value":"nl","label":"galaxus.nl (Netherlands, EUR)"},{"value":"be","label":"galaxus.be (Belgium, EUR)"}],"default":"ch","aliases":["country","store","shop","domain"]},{"name":"lang","type":"enum","required":false,"description":"Interface language of names, specifications and descriptions. Default = the storefront's first language (de for ch/digitec/de/at). ch and digitec also take fr, it, en; every site takes en. Note: with en the source leaves some product descriptions empty and some specification group names in German.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"en","label":"English"},{"value":"nl","label":"Dutch"}],"aliases":["language"]}],"returns":"{product_id, site, name, full_name, brand, brand_id, gtin, manufacturer_part_number, url, category{id,name,url}, price, price_excl_vat, currency, price_basis, previous_price{...}, discount_pct, promotion, volume_discounts[], offer_type, offer_id, merchant{name,country,url}, offer_count, availability{icon, delivery_class, stock_status, warehouse_quantity, warehouse_more_than_10, expected_delivery_at, pickup[]{branch, icon, available_quantity, more_than_10, collectable_at}}, rating, rating_count, questions_answered, questions_unanswered, sales_rank_in_category, price_history_summary{type, reason, fluctuation, low, high}, energy_class, description, summary[], key_specifications[], specifications[]{group,name,values[]}, warranties[], return_policy, variants[]{group,value,product_id,price,offer_type,availability_icon}, images[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"76663413"}},{"name":"price_history","description":"Price history of a Galaxus product for the chosen storefront (the data behind the site's own price chart, which shows the lowest price of each day): each point is a price and the date it took effect, so a point holds until the next one. The first point can be older than the window: it is the price in force when the window starts. Default window 365 days.","required_params":["product_id"],"optional_params":["site","days"],"params":[{"name":"product_id","type":"string","required":true,"description":"Galaxus product id exactly as a search row returns it (digits, e.g. 76663413). A galaxus/digitec product URL ending in -76663413 is accepted too. The same id works on every site.","on_invalid":"reject","example":"76663413","aliases":["id","productId","url","item_id"]},{"name":"site","type":"enum","required":false,"description":"Which storefront to read. Prices, currency, VAT and assortment follow the storefront: ch = galaxus.ch (CHF), digitec = digitec.ch (CHF, electronics-focused subset of the same catalogue), de/at/fr/it/nl/be = galaxus.<cc> (EUR).","on_invalid":"reject","allowed_values":[{"value":"ch","label":"galaxus.ch (Switzerland, CHF)"},{"value":"digitec","label":"digitec.ch (Switzerland, CHF)"},{"value":"de","label":"galaxus.de (Germany, EUR)"},{"value":"at","label":"galaxus.at (Austria, EUR)"},{"value":"fr","label":"galaxus.fr (France, EUR)"},{"value":"it","label":"galaxus.it (Italy, EUR)"},{"value":"nl","label":"galaxus.nl (Netherlands, EUR)"},{"value":"be","label":"galaxus.be (Belgium, EUR)"}],"default":"ch","aliases":["country","store","shop","domain"]},{"name":"days","type":"integer","required":false,"description":"How far back, in days (7-1095).","on_invalid":"reject","default":365,"example":365,"minimum":7,"maximum":1095}],"returns":"points[]{date, valid_from, price, price_excl_vat, currency} + latest (= current price on 8 of 8 products checked), low, high, has_history_older_than_3_months","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"47736372"}},{"name":"offers","description":"Every offer for one Galaxus product in one call: Galaxus's own retail offer and each marketplace seller's offer with price incl./excl. VAT, seller name and country, availability and delivery class.","required_params":["product_id"],"optional_params":["site"],"params":[{"name":"product_id","type":"string","required":true,"description":"Galaxus product id exactly as a search row returns it (digits, e.g. 76663413). A galaxus/digitec product URL ending in -76663413 is accepted too. The same id works on every site.","on_invalid":"reject","example":"76663413","aliases":["id","productId","url","item_id"]},{"name":"site","type":"enum","required":false,"description":"Which storefront to read. Prices, currency, VAT and assortment follow the storefront: ch = galaxus.ch (CHF), digitec = digitec.ch (CHF, electronics-focused subset of the same catalogue), de/at/fr/it/nl/be = galaxus.<cc> (EUR).","on_invalid":"reject","allowed_values":[{"value":"ch","label":"galaxus.ch (Switzerland, CHF)"},{"value":"digitec","label":"digitec.ch (Switzerland, CHF)"},{"value":"de","label":"galaxus.de (Germany, EUR)"},{"value":"at","label":"galaxus.at (Austria, EUR)"},{"value":"fr","label":"galaxus.fr (France, EUR)"},{"value":"it","label":"galaxus.it (Italy, EUR)"},{"value":"nl","label":"galaxus.nl (Netherlands, EUR)"},{"value":"be","label":"galaxus.be (Belgium, EUR)"}],"default":"ch","aliases":["country","store","shop","domain"]}],"returns":"offers[]{offer_id, offer_type, price, price_excl_vat, currency, seller, seller_country, seller_url, availability_icon, delivery_class, can_add_to_cart, url} + cheapest","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"76663413"}},{"name":"reviews","description":"Buyer reviews of a Galaxus product: star rating, title, text, date, author display name, verified-buyer flag, pros/cons, helpful votes, images. Reviews of the product's other variants are included, as on the site.","required_params":["product_id"],"optional_params":["site","sort","rating","page","page_size","lang"],"params":[{"name":"product_id","type":"string","required":true,"description":"Galaxus product id exactly as a search row returns it (digits, e.g. 76663413). A galaxus/digitec product URL ending in -76663413 is accepted too. The same id works on every site.","on_invalid":"reject","example":"76663413","aliases":["id","productId","url","item_id"]},{"name":"site","type":"enum","required":false,"description":"Which storefront to read. Prices, currency, VAT and assortment follow the storefront: ch = galaxus.ch (CHF), digitec = digitec.ch (CHF, electronics-focused subset of the same catalogue), de/at/fr/it/nl/be = galaxus.<cc> (EUR).","on_invalid":"reject","allowed_values":[{"value":"ch","label":"galaxus.ch (Switzerland, CHF)"},{"value":"digitec","label":"digitec.ch (Switzerland, CHF)"},{"value":"de","label":"galaxus.de (Germany, EUR)"},{"value":"at","label":"galaxus.at (Austria, EUR)"},{"value":"fr","label":"galaxus.fr (France, EUR)"},{"value":"it","label":"galaxus.it (Italy, EUR)"},{"value":"nl","label":"galaxus.nl (Netherlands, EUR)"},{"value":"be","label":"galaxus.be (Belgium, EUR)"}],"default":"ch","aliases":["country","store","shop","domain"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"most_helpful","label":"Most helpful"},{"value":"newest","label":"Newest"},{"value":"positive","label":"Most positive"},{"value":"negative","label":"Most negative"}],"default":"most_helpful"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with this many stars.","on_invalid":"reject","minimum":1,"maximum":5,"aliases":["stars"]},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":20,"minimum":1,"maximum":50,"aliases":["limit"]},{"name":"lang","type":"enum","required":false,"description":"Interface language of names, specifications and descriptions. Default = the storefront's first language (de for ch/digitec/de/at). ch and digitec also take fr, it, en; every site takes en. Note: with en the source leaves some product descriptions empty and some specification group names in German.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"en","label":"English"},{"value":"nl","label":"Dutch"}],"aliases":["language"]}],"returns":"reviews[]{review_id, rating, title, text, date, author, verified_buyer, helpful_votes, unhelpful_votes, pros[], cons[], images[], comments, original_language} + total_reviews","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"76663413"}}]},{"name":"gardrops","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Gardrops Turkey Second-Hand Fashion Marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/gardrops/v1","spec_available":true,"actions":[{"name":"search","description":"Search Gardrops, Turkey's second-hand fashion marketplace: women, men, kids, home and electronics, listed by private sellers. Free text plus the site's own filters (category, brand, size, colour, condition, price, seller city, premium, celebrity closets) and its five sort orders. Nothing is required: no parameters browses the live catalogue.","required_params":[],"optional_params":["query","keyword","category","brand_ids","size_ids","colour_ids","condition","min_price","max_price","city_ids","premium_only","celebrity_only","sort","page","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text as a Turkish shopper types it: `zara elbise`, `nike air force`, `vintage deri ceket`. The source reads brands and categories out of the text (returned as `interpreted_as`) and ranks by relevance; loosely related items pad the tail, so the total is a relevance count, not an exact-match count.","on_invalid":"reject","example":"zara elbise","aliases":["q","text"]},{"name":"keyword","type":"string","required":false,"description":"Strict word filter (the site's 'Kelime ile filtrele'): only listings whose text contains the word. Unlike `query` it is not padded with related items, so a word nobody uses returns 0. Combine it with `category` for an exact in-category search.","on_invalid":"reject","example":"zara","aliases":["contains"]},{"name":"category","type":"string","required":false,"description":"A Gardrops category code, the same code the site puts in its URLs: rc1 = Kadın, cg1 = Kadın › Giyim, c2 = Elbise, c2-sc203 = Uzun Elbise. Codes come from the `categories` action or a product's category.code. (Bare numeric ids are refused: the same number means different categories at different levels.)","on_invalid":"reject","example":"c2","value_pattern":"(rc|cg|c)\\d{1,6}(-sc\\d{1,6})*","aliases":["category_code"]},{"name":"brand_ids","type":"array","required":false,"description":"One or more Gardrops brand ids (Zara 3101 …), from `filters`, `suggest` or a product's brand_id.","on_invalid":"reject","example":[3101]},{"name":"size_ids","type":"array","required":false,"description":"One or more size ids from `filters`. Ids are per size table: clothing 38 is 21, shoe 38 is 176.","on_invalid":"reject","example":[4]},{"name":"colour_ids","type":"array","required":false,"description":"One or more colour ids (Siyah 2, Beyaz 17 …), from `filters`.","on_invalid":"reject","example":[2],"aliases":["color_ids"]},{"name":"condition","type":"array","required":false,"description":"Item condition, one or more of the site's five: NEW_WITH_TAGS (Yeni & Etiketli), LIKE_NEW (Yeni, no tag), VERY_GOOD (Çok iyi durumda), GOOD (İyi durumda), FAIR (Makul ürün).","on_invalid":"reject","allowed_values":[{"value":"NEW_WITH_TAGS","label":"New with tags"},{"value":"LIKE_NEW","label":"New, no tags"},{"value":"VERY_GOOD","label":"Very good"},{"value":"GOOD","label":"Good"},{"value":"FAIR","label":"Fair"}],"example":["NEW_WITH_TAGS"],"aliases":["conditions"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in Turkish lira.","on_invalid":"reject","example":500,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in Turkish lira.","on_invalid":"reject","example":2000,"minimum":0},{"name":"city_ids","type":"array","required":false,"description":"Seller city ids (İstanbul Anadolu 341, İstanbul Avrupa 342, Ankara 6, İzmir 35 …), from `filters`.","on_invalid":"reject","example":[6],"aliases":["location_ids"]},{"name":"premium_only","type":"boolean","required":false,"description":"Only Gardrops Premium listings (items the platform sells on the owner's behalf).","on_invalid":"reject","default":false,"example":false},{"name":"celebrity_only","type":"boolean","required":false,"description":"Only listings from the site's celebrity closets.","on_invalid":"reject","default":false,"example":false},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's five: relevance (Önerilen), newest, oldest, price_asc, price_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"relevance","example":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page of 72 rows. Gardrops serves at most 50 pages (3,600 rows) of any result; `last_page` says where this one ends.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, total, total_display, page, page_size, last_page, has_more, sort, filters_applied, interpreted_as[], products[]}. Each product: {id, seller_id, url, slug, brand_name, size, listed_price_try, price_raw, currency, image, like_count, free_shipping, is_premium, is_new_listing, is_sold, premium_coupon_try, seller{id, nickname, profile_url, avatar}}. Rows carry no title: pass id + seller_id to `product` for the full record. seller.nickname is as the search index holds it and can lag a rename; seller_id is the stable key.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"zara elbise","condition":["NEW_WITH_TAGS"],"sort":"newest"}},{"name":"product","description":"One Gardrops listing in full: title, description, price, every image, brand, category path, size, colour, condition, shipping, badges, bundle coupons, buy / offer availability and the seller (nickname, profile link, rating, rating count). Needs the product id AND its seller id, both on every search row.","required_params":[],"optional_params":["id","seller_id","url","include_pii"],"params":[{"name":"id","type":"integer","required":false,"description":"Gardrops product id: the `id` of a search or listing row.","on_invalid":"reject","example":71680169,"aliases":["product_id","pid"]},{"name":"seller_id","type":"integer","required":false,"description":"The product's seller id: the `seller_id` of the same row. Gardrops needs both.","on_invalid":"reject","example":996726,"aliases":["puid"]},{"name":"url","type":"string","required":false,"description":"Or the product URL (https://www.gardrops.com/<slug>-p-<id>-<seller_id>).","on_invalid":"reject","example":"https://www.gardrops.com/zara-bohem-elbise-70aa60e30c668ec1-p-71680169-996726"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, seller_id, url, slug, title, description, brand_name, brand_id, category{name, code, path[{name, code}]}, size, colour, condition, condition_label, listed_price_try, final_price_try, price_raw, currency, is_sold, free_shipping, shipping_label, is_premium, is_swappable, can_buy, can_make_offer, like_count, image, images[], images_count, badges[], coupons[], bundle_offer, attributes[{name, value}], seller{id, nickname, profile_url, avatar, rating_average, rating_count}}. Give `id` + `seller_id`, or `url`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.gardrops.com/zara-bohem-elbise-70aa60e30c668ec1-p-71680169-996726"}},{"name":"seller","description":"A Gardrops seller's public profile: nickname, bio, membership age, last seen, listing / sold / bought counts, rating and review count, followers, verification badges, vacation mode and city when the seller shows it.","required_params":["seller_id"],"optional_params":["include_pii"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"The seller's numeric id: `seller_id` of any search row or product.","on_invalid":"reject","example":996726,"aliases":["owner_id","profile_id"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, nickname, profile_url, avatar, bio, member_since_text, last_seen_text, location, is_verified, is_phone_verified, is_premium_store, vacation_mode, donation_active, listing_count, sold_count, bought_count, rating_average, rating_count, follower_count, following_count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":996726}},{"name":"seller_listings","description":"Every live listing in one seller's closet, 18 per page, newest first. Rows have the same shape and ids as `search` rows.","required_params":["seller_id"],"optional_params":["page","include_pii"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"The seller's numeric id: `seller_id` of any search row or product.","on_invalid":"reject","example":996726,"aliases":["owner_id","profile_id"]},{"name":"page","type":"integer","required":false,"description":"1-based page of 18 rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{seller_id, page, page_size, has_more, products[]}. Each product: {id, seller_id, url, slug, brand_name, size, listed_price_try, price_raw, currency, image, like_count, free_shipping, is_premium, is_new_listing, is_sold, premium_coupon_try, seller{id, nickname, profile_url, avatar}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":996726}},{"name":"seller_reviews","description":"The reviews buyers left for a seller, 18 per page, newest first: star rating, text, how long ago, and the reviewer's nickname and profile link.","required_params":["seller_id"],"optional_params":["page","include_pii"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"The seller's numeric id: `seller_id` of any search row or product.","on_invalid":"reject","example":996726,"aliases":["owner_id","profile_id"]},{"name":"page","type":"integer","required":false,"description":"1-based page of 18 rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{seller_id, rating_average, rating_count, page, page_size, has_more, reviews[{id, rating, text, date_text, reviewer{id, nickname, profile_url, avatar, is_verified}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":996726}},{"name":"filters","description":"The filter values Gardrops offers for a query: brands, sizes per size table, colours, conditions, sub-categories with live counts, price bands and seller cities. Use it to find the ids `search` filters on.","required_params":[],"optional_params":["query","keyword","category","brand_ids","size_ids","colour_ids","condition","min_price","max_price","city_ids","premium_only","celebrity_only","brand_limit","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text as a Turkish shopper types it: `zara elbise`, `nike air force`, `vintage deri ceket`. The source reads brands and categories out of the text (returned as `interpreted_as`) and ranks by relevance; loosely related items pad the tail, so the total is a relevance count, not an exact-match count.","on_invalid":"reject","example":"zara elbise","aliases":["q","text"]},{"name":"keyword","type":"string","required":false,"description":"Strict word filter (the site's 'Kelime ile filtrele'): only listings whose text contains the word. Unlike `query` it is not padded with related items, so a word nobody uses returns 0. Combine it with `category` for an exact in-category search.","on_invalid":"reject","example":"zara","aliases":["contains"]},{"name":"category","type":"string","required":false,"description":"A Gardrops category code, the same code the site puts in its URLs: rc1 = Kadın, cg1 = Kadın › Giyim, c2 = Elbise, c2-sc203 = Uzun Elbise. Codes come from the `categories` action or a product's category.code. (Bare numeric ids are refused: the same number means different categories at different levels.)","on_invalid":"reject","example":"c2","value_pattern":"(rc|cg|c)\\d{1,6}(-sc\\d{1,6})*","aliases":["category_code"]},{"name":"brand_ids","type":"array","required":false,"description":"One or more Gardrops brand ids (Zara 3101 …), from `filters`, `suggest` or a product's brand_id.","on_invalid":"reject","example":[3101]},{"name":"size_ids","type":"array","required":false,"description":"One or more size ids from `filters`. Ids are per size table: clothing 38 is 21, shoe 38 is 176.","on_invalid":"reject","example":[4]},{"name":"colour_ids","type":"array","required":false,"description":"One or more colour ids (Siyah 2, Beyaz 17 …), from `filters`.","on_invalid":"reject","example":[2],"aliases":["color_ids"]},{"name":"condition","type":"array","required":false,"description":"Item condition, one or more of the site's five: NEW_WITH_TAGS (Yeni & Etiketli), LIKE_NEW (Yeni, no tag), VERY_GOOD (Çok iyi durumda), GOOD (İyi durumda), FAIR (Makul ürün).","on_invalid":"reject","allowed_values":[{"value":"NEW_WITH_TAGS","label":"New with tags"},{"value":"LIKE_NEW","label":"New, no tags"},{"value":"VERY_GOOD","label":"Very good"},{"value":"GOOD","label":"Good"},{"value":"FAIR","label":"Fair"}],"example":["NEW_WITH_TAGS"],"aliases":["conditions"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in Turkish lira.","on_invalid":"reject","example":500,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in Turkish lira.","on_invalid":"reject","example":2000,"minimum":0},{"name":"city_ids","type":"array","required":false,"description":"Seller city ids (İstanbul Anadolu 341, İstanbul Avrupa 342, Ankara 6, İzmir 35 …), from `filters`.","on_invalid":"reject","example":[6],"aliases":["location_ids"]},{"name":"premium_only","type":"boolean","required":false,"description":"Only Gardrops Premium listings (items the platform sells on the owner's behalf).","on_invalid":"reject","default":false,"example":false},{"name":"celebrity_only","type":"boolean","required":false,"description":"Only listings from the site's celebrity closets.","on_invalid":"reject","default":false,"example":false},{"name":"brand_limit","type":"integer","required":false,"description":"How many brands to return (the list holds about 1,800, alphabetical).","on_invalid":"reject","default":200,"example":200,"minimum":1,"maximum":5000},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, total_display, sort, interpreted_as[], brand_count, brands[{id, name}], sizes[{id, name, group, section}], colours[{id, name, swatch}], conditions[{code, id, name, description}], subcategories[{id, name, section, parent, count}], price_bands[], cities[{id, name}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"zara elbise","brand_limit":20}},{"name":"categories","description":"The whole Gardrops category tree (Kadın, Erkek, Çocuk, Ev, Elektronik down to leaf categories), each node with the `code` that `search` takes as `category`.","required_params":[],"optional_params":["include_pii"],"params":[{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{count, categories[{code, id, level, name, children[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"suggest","description":"Gardrops' own search suggestions for a few letters, each with the ready-made `search` parameters it stands for (brand, category, text).","required_params":["query"],"optional_params":["include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far.","on_invalid":"reject","example":"zara","aliases":["q"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, suggestions[{text, context, params}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"zara"}}]},{"name":"gaspedaal","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Gaspedaal.nl API scraper — the Dutch car aggregator: search the combined stock of the Netherlands' vehicle sites in one call and get, for every car, the list of sites that list it (AutoTrack, AutoScout24, ANWB, dealer sites, lease portals) with the click-out that resolves to the real listing. Price, year, mileage, fuel, gearbox, body, colour, power, dealer and town, plus brand/model trees. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/gaspedaal/v1","spec_available":true,"actions":[{"name":"search","description":"Search Gaspedaal's aggregated Dutch car stock. Every row is ONE car with sources[] = every site that lists it (measured 1-11 sources per car, mean 4.6 over 500 rows). Rows are de-duplicated by ad_id inside the call and duplicates_dropped says how many repeats the live result set served. 100 cars per full page, which is fixed by the site; total_results is Gaspedaal's own count and the whole set is page-able. Every filter here was measured to change that total in the same run. Call with no parameters to page the whole Dutch market.","required_params":[],"optional_params":["query","brand","model","brand_id","model_id","price_min","price_max","year_min","year_max","mileage_min","mileage_max","power_kw_min","power_kw_max","engine_cc_min","engine_cc_max","cylinders_min","cylinders_max","seats_min","seats_max","towing_kg_min","weight_kg_max","road_tax_max","ev_range_km_min","ev_battery_kwh_min","listed_within_days","doors","fuel","transmission","body_type","colour","seller_type","warranty","nap_only","vat_deductible","postcode","radius_km","source_site","exclude_source_site","only_source_site","sort","page","resolve_source_urls","max_resolved_urls"],"params":[{"name":"query","type":"string","required":false,"description":"Free text, exactly as typed into Gaspedaal's search box: it matches the trim text, brand, model, dealer name and town.","on_invalid":"reject","example":"panoramadak","aliases":["keyword","q"]},{"name":"brand","type":"string","required":false,"description":"Brand SLUG as Gaspedaal spells it in its own urls (volkswagen, mercedes-benz, bmw). The brands action lists every slug with its id and live car count.","on_invalid":"reject","example":"volkswagen","value_pattern":"[a-z0-9][a-z0-9\\-]{0,48}","aliases":["make"]},{"name":"model","type":"string","required":false,"description":"Model SLUG for that brand (golf, polo, 3-serie). Requires brand. The models action lists them.","on_invalid":"reject","example":"golf","value_pattern":"[a-z0-9][a-z0-9\\-]{0,48}"},{"name":"brand_id","type":"string","required":false,"description":"Numeric Gaspedaal brand id, the alternative to brand. Use this when you want the id form (brands returns both).","on_invalid":"reject","example":"187","value_pattern":"\\d{1,6}"},{"name":"model_id","type":"string","required":false,"description":"Numeric Gaspedaal model id. Requires brand_id.","on_invalid":"reject","example":"753","value_pattern":"\\d{1,8}"},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, EUR.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price, EUR.","on_invalid":"reject","example":15000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Earliest build year.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest build year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer, km.","on_invalid":"reject","minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer, km.","on_invalid":"reject","example":120000,"minimum":0},{"name":"power_kw_min","type":"integer","required":false,"description":"Lowest engine power, kW.","on_invalid":"reject","minimum":0},{"name":"power_kw_max","type":"integer","required":false,"description":"Highest engine power, kW.","on_invalid":"reject","minimum":0},{"name":"engine_cc_min","type":"integer","required":false,"description":"Lowest cylinder capacity, cc.","on_invalid":"reject","minimum":0},{"name":"engine_cc_max","type":"integer","required":false,"description":"Highest cylinder capacity, cc.","on_invalid":"reject","minimum":0},{"name":"cylinders_min","type":"integer","required":false,"description":"Lowest number of cylinders.","on_invalid":"reject","minimum":1,"maximum":16},{"name":"cylinders_max","type":"integer","required":false,"description":"Highest number of cylinders.","on_invalid":"reject","minimum":1,"maximum":16},{"name":"seats_min","type":"integer","required":false,"description":"Lowest number of seats.","on_invalid":"reject","example":7,"minimum":1,"maximum":9},{"name":"seats_max","type":"integer","required":false,"description":"Highest number of seats.","on_invalid":"reject","minimum":1,"maximum":9},{"name":"towing_kg_min","type":"integer","required":false,"description":"Lowest braked towing weight, kg.","on_invalid":"reject","example":1500,"minimum":0},{"name":"weight_kg_max","type":"integer","required":false,"description":"Highest kerb weight, kg.","on_invalid":"reject","minimum":0},{"name":"road_tax_max","type":"integer","required":false,"description":"Highest Dutch road tax (wegenbelasting) per month, EUR, as Gaspedaal publishes it.","on_invalid":"reject","minimum":0},{"name":"ev_range_km_min","type":"integer","required":false,"description":"Lowest electric range, km (electric cars).","on_invalid":"reject","example":400,"minimum":0},{"name":"ev_battery_kwh_min","type":"integer","required":false,"description":"Lowest battery capacity, kWh (electric cars).","on_invalid":"reject","minimum":0},{"name":"listed_within_days","type":"integer","required":false,"description":"Only cars Gaspedaal has had on offer for at most this many days.","on_invalid":"reject","example":7,"minimum":1,"maximum":365},{"name":"doors","type":"integer","required":false,"description":"Exact number of doors.","on_invalid":"reject","minimum":2,"maximum":7},{"name":"fuel","type":"string","required":false,"description":"Fuel type. Several may be given comma-separated (petrol,diesel) — Gaspedaal ORs them.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"diesel","label":"diesel"},{"value":"electric","label":"electric"},{"value":"lpg","label":"lpg"},{"value":"cng","label":"cng"},{"value":"hydrogen","label":"hydrogen"},{"value":"hybrid","label":"hybrid"}],"example":"electric"},{"name":"transmission","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"automatic"},{"value":"manual","label":"manual"}]},{"name":"body_type","type":"string","required":false,"description":"Body style. Several may be given comma-separated.","on_invalid":"reject","allowed_values":[{"value":"hatchback","label":"hatchback"},{"value":"estate","label":"estate"},{"value":"mpv","label":"mpv"},{"value":"saloon","label":"saloon"},{"value":"suv","label":"suv"},{"value":"van","label":"van"},{"value":"cabrio","label":"cabrio"},{"value":"coupe","label":"coupe"},{"value":"pickup","label":"pickup"},{"value":"camper","label":"camper"}],"example":"suv"},{"name":"colour","type":"string","required":false,"description":"Exterior colour as Gaspedaal classifies it. Several may be given comma-separated.","on_invalid":"reject","allowed_values":[{"value":"beige","label":"beige"},{"value":"blue","label":"blue"},{"value":"brown","label":"brown"},{"value":"yellow","label":"yellow"},{"value":"gold","label":"gold"},{"value":"grey","label":"grey"},{"value":"green","label":"green"},{"value":"orange","label":"orange"},{"value":"purple","label":"purple"},{"value":"red","label":"red"},{"value":"white","label":"white"},{"value":"silver","label":"silver"},{"value":"black","label":"black"}],"example":"red","aliases":["color"]},{"name":"seller_type","type":"enum","required":false,"description":"Who is selling, using Gaspedaal's own seller classes.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private seller"},{"value":"brand_dealer_selected_make","label":"Brand dealer of the selected make"},{"value":"official_brand_dealer","label":"Official brand dealer"},{"value":"subdealer","label":"Subdealer"},{"value":"bovag_garage","label":"BOVAG garage"},{"value":"independent_garage","label":"Independent garage"}]},{"name":"warranty","type":"enum","required":false,"description":"Only cars sold with this warranty.","on_invalid":"reject","allowed_values":[{"value":"bovag","label":"BOVAG warranty"},{"value":"manufacturer","label":"Manufacturer warranty"}]},{"name":"nap_only","type":"boolean","required":false,"description":"Only cars with a verified Dutch NAP mileage record.","on_invalid":"reject"},{"name":"vat_deductible","type":"boolean","required":false,"description":"true = VAT-deductible cars only (btw-auto); false = margin cars only (marge-auto).","on_invalid":"reject"},{"name":"postcode","type":"string","required":false,"description":"Dutch postcode to search around. Needed for radius_km and for sort=distance.","on_invalid":"reject","example":"1012AB","value_pattern":"\\d{4}\\s?[A-Za-z]{0,2}"},{"name":"radius_km","type":"integer","required":false,"description":"Radius around postcode. Requires postcode; 25 km is used when a postcode is given without it. Any whole number 1-500 is accepted, the listed values are the ones the site's own form offers.","on_invalid":"reject","allowed_values":[{"value":5,"label":"5 km"},{"value":10,"label":"10 km"},{"value":15,"label":"15 km"},{"value":25,"label":"25 km"},{"value":50,"label":"50 km"},{"value":75,"label":"75 km"},{"value":100,"label":"100 km"},{"value":150,"label":"150 km"}],"default":25,"example":25,"minimum":1,"maximum":500},{"name":"source_site","type":"integer","required":false,"description":"Only cars that are listed on this source site (its numeric id, which every sources[] entry returns and the source_sites action lists). Measured: id 2 = AutoTrack, 213 002 of 348 971 cars.","on_invalid":"reject","example":2,"minimum":1},{"name":"exclude_source_site","type":"integer","required":false,"description":"Drop this source site from every car's sources[], and drop cars that have no other source left.","on_invalid":"reject","minimum":1},{"name":"only_source_site","type":"integer","required":false,"description":"Only cars whose ONLY source is this site — i.e. exclusive to it. Measured: id 2 = 7 700 cars, each with exactly one source.","on_invalid":"reject","minimum":1},{"name":"sort","type":"enum","required":false,"description":"Order. Omitted = Gaspedaal's own relevance order. sort=distance needs postcode.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"distance","label":"distance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"mileage_asc","label":"mileage_asc"},{"value":"mileage_desc","label":"mileage_desc"},{"value":"year_asc","label":"year_asc"},{"value":"year_desc","label":"year_desc"},{"value":"newest","label":"newest"}]},{"name":"page","type":"integer","required":false,"description":"Result page; 100 cars per full page. The last page of a result set is partial and the page after it returns zero rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":3490},{"name":"resolve_source_urls","type":"boolean","required":false,"description":"Follow each source site's click-out and return the real listing url on that site in sources[].source_url. Costs one extra request per source, so it is capped by max_resolved_urls and by the call budget; anything not resolved stays null and is counted in source_urls_unresolved.","on_invalid":"reject","default":false},{"name":"max_resolved_urls","type":"integer","required":false,"description":"Upper bound on how many source click-outs resolve_source_urls may follow in one call.","on_invalid":"reject","default":10,"minimum":1,"maximum":40}],"returns":"{total_results, page, page_size, pages, has_more, count, duplicates_dropped, sources_total, source_sites_seen, source_urls_resolved, source_urls_unresolved, price_conflicts, sort_applied, filters_applied{}, search_url, cars[{ad_id, gaspedaal_url, title, brand, model, trim, price_eur, price_eur_schema, price_conflict, currency, year, mileage_km, mileage_conflict, fuel, fuel_source, transmission, transmission_source, body_type, body_type_source, colour, colour_source, doors, engine_cc, power_kw, power_hp, condition, listed_at, photo_url, photo_url_small, seller{name, schema_name, schema_type, page_url, city, province, province_code, country}, source_count, sources[{site, site_id, kind, site_ad_id, click_out_url, source_url, logo_url}]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"volkswagen","model":"golf","max_results":20}},{"name":"listing","description":"One car by its Gaspedaal ad id, with the complete source group: every site that lists it, the click-out for each and — unless you switch it off — the resolved real listing url on each source site. Same fields as a search row, both price witnesses compared. A dead or removed ad id returns NOT_FOUND (the site answers HTTP 200 with zero rows, which this engine does NOT pass off as an empty success).","required_params":["ad_id"],"optional_params":["resolve_source_urls","max_resolved_urls"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The Gaspedaal ad id, as every search row returns it. Dutch car ads turn over fast, so take a fresh id from search.","on_invalid":"reject","example":"141844812","value_pattern":"\\d{4,12}","aliases":["listing_id","id"]},{"name":"resolve_source_urls","type":"boolean","required":false,"description":"Resolve each source site's click-out into the real listing url on that site. On by default for a single car; set false to save the extra requests.","on_invalid":"reject","default":true},{"name":"max_resolved_urls","type":"integer","required":false,"description":"Upper bound on how many source click-outs resolve_source_urls may follow in one call.","on_invalid":"reject","default":10,"minimum":1,"maximum":40}],"returns":"{car{…same shape as a search row…}, source_urls_resolved, source_urls_unresolved}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"ad_id":"141844812"}},{"name":"brands","description":"Every car brand Gaspedaal has stock for, with the slug the search action takes, the numeric brand id, and the live number of cars the site itself prints next to the brand.","required_params":[],"optional_params":[],"params":[],"returns":"{count, total_cars, brands[{brand_id, slug, name, car_count, popular}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"models","description":"Every model Gaspedaal lists for one brand, with the slug and id the search action takes. Give brand as a slug or brand_id as the numeric id — one of the two is required; calling with neither returns MISSING_PARAM.","required_params":[],"optional_params":["brand","brand_id"],"params":[{"name":"brand","type":"string","required":false,"description":"Brand slug (volkswagen). Give this OR brand_id — one of the two is required.","on_invalid":"reject","example":"volkswagen","value_pattern":"[a-z0-9][a-z0-9\\-]{0,48}","aliases":["make"]},{"name":"brand_id","type":"string","required":false,"description":"Numeric brand id. Give this OR brand.","on_invalid":"reject","example":"187","value_pattern":"\\d{1,6}"}],"returns":"{brand{brand_id, slug, name}, count, models[{model_id, slug, name, parent_slug}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"volkswagen"}},{"name":"source_sites","description":"Which Dutch sites Gaspedaal is aggregating right now, counted from a live sample of its own result pages: site name, the numeric id the search filters take, the kind of site (dealer / other / financial / garageconcept) and how many cars of the sample it appeared on. This is a SAMPLE, not a registry — sample_cars says how big it was.","required_params":[],"optional_params":["pages"],"params":[{"name":"pages","type":"integer","required":false,"description":"How many 100-car result pages to sample. More pages find more of the long-tail sites and cost one request each.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":3}],"returns":"{sample_cars, sample_pages, count, sites[{site_id, site, kind, cars_seen, share_pct}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"pages":1}}]},{"name":"gazelle","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Gazelle API — live data from buy.gazelle.com, the US first-party refurbished phone and tablet store (an ecoATM company). Browse the whole live catalogue — 1,000 products over 108 model lines and 13,329 priced variants on 2026-10-08 — with a price for every cosmetic grade (Fair / Good / Excellent), every colour, every capacity and every carrier, then open one product for the complete model matrix: each storage x carrier sibling with its own offer table, the real unit count behind each variant (which no JSON surface of the site publishes) and the new-device MSRP to measure the saving against. Also returns Gazelle's own faceted inventory census and its 205 collections. One seller, one warranty, USD, no login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/gazelle/v1","spec_available":true,"actions":[{"name":"search","description":"Browse the Gazelle catalogue: one row per PRODUCT (a model x storage x carrier) with its price band, the cheapest price AT EACH cosmetic grade, the colours and grades it is stocked in, and how many of its variants can actually be bought today. Free-text `q` plus filters on brand, model line, capacity, carrier, colour, cosmetic grade, device class, price band and stock. Two numbers are always given side by side, because the source makes them differ: `price_min` over every published variant and `price_min_available` over the ones you can buy — on 55 of the 153 in-stock products the cheapest variant is sold out and the cheapest buyable one costs more. Gazelle's catalogue endpoint honours only `limit` and `page` (every filter and sort parameter it advertises was measured returning the identical product ids in the identical order), so the filtering and ordering here are done by this API over the source's own fields and `meta.filtering` says so rather than pretending otherwise.","required_params":[],"optional_params":["collection","q","brand","model","storage","carrier","color","condition","product_type","min_price","max_price","in_stock_only","sort","limit","page"],"params":[{"name":"collection","type":"string","required":false,"description":"Which Gazelle collection to read, by the storefront's own handle: `all` (the whole live catalogue, 1,000 products on 2026-10-08), `iphone` (332), `ipads`, `samsung-galaxy`, `google-phones`, `unlocked`, `best-sellers`, `clearance`, and 202 more that the `collections` action lists. Narrowing the collection is also the way to make this call cheaper: the source only honours `limit` and `page`, so a smaller collection is fewer pages to read. A handle that does not exist is NOT_FOUND — the source answers one with an empty list and HTTP 200, exactly like a real collection that happens to be empty, so the handle is verified separately.","on_invalid":"reject","default":"all","example":"iphone","value_pattern":"[a-z0-9][a-z0-9-]{0,119}","aliases":["collection_handle","category","coll"]},{"name":"q","type":"string","required":false,"description":"Free-text match over each product's title, model line and tags, applied by this API over the rows the source returned. All words must appear (order does not matter), so `pro max 256` finds the 256 GB Pro Max products. Gazelle's own catalogue endpoint ignores every query parameter except `limit` and `page` (measured: `q=iphone 15` returned the identical 250 product ids in the identical order as no query at all), so nothing here is passed to it as a filter.","on_invalid":"reject","example":"iphone 15 pro","aliases":["query","keyword","search","text"]},{"name":"brand","type":"enum","required":false,"description":"Keep only this manufacturer. Live on 2026-10-08: Apple, Samsung and Google only, and the storefront's own counts were 518 / 304 / 177 of its 1,000 products — it publishes no other brand in stock. The source's own `Brand:` tag is missing on 477 of 1,000 products, so brand is derived from the model line (which covers all 108 of them) and each row says which witness was used in `brand_source`.","on_invalid":"reject","allowed_values":[{"value":"Apple","label":"Apple"},{"value":"Samsung","label":"Samsung"},{"value":"Google","label":"Google"},{"value":"OnePlus","label":"OnePlus"},{"value":"Motorola","label":"Motorola"},{"value":"LG","label":"LG"},{"value":"Sony","label":"Sony"},{"value":"Nokia","label":"Nokia"},{"value":"Microsoft","label":"Microsoft"}],"example":"Apple","aliases":["make","manufacturer"]},{"name":"model","type":"array","required":false,"description":"Keep only these model lines, matched case-insensitively against the source's own model name — 'iPhone 15 Pro', 'Galaxy S24 Ultra', 'Google Pixel 9', 'iPad Pro 11-inch (M4)'. 108 model lines were live on 2026-10-08 and every `search` row returns its own as `model_line`. A prefix is enough: 'iPhone 15' also matches 'iPhone 15 Pro' and 'iPhone 15 Plus'.","on_invalid":"reject","example":["iPhone 15 Pro"],"aliases":["models","model_line","model_lines"]},{"name":"storage","type":"array","required":false,"description":"Keep only these capacities, in GB (16, 32, 64, 128, 256, 512, 1024 = 1 TB, 2048 = 2 TB). Gazelle's own counts over its whole live catalogue: 256 GB is the commonest with 336 products, then 512 GB (261), 128 GB (214), 1 TB (129), 64 GB (31), 2 TB (15), 32 GB (9), 16 GB (2). '1TB' and '1024' both work.","on_invalid":"reject","example":[256],"aliases":["storages","storage_gb","capacity"]},{"name":"carrier","type":"enum","required":false,"description":"Keep only devices on this carrier. Gazelle's own counts over its whole live catalogue: Unlocked 307 products, Verizon 205, AT&T 201, T-Mobile 198, Wi-Fi 87 (the Wi-Fi-only iPads). The source spells that last one two different ways in its own tags (`WiFi` on 56 products, `WIFI` on 31); both are accepted and every row keeps the source's own spelling in `carrier_raw`.","on_invalid":"reject","allowed_values":[{"value":"Unlocked","label":"Unlocked"},{"value":"AT&T","label":"AT&T"},{"value":"T-Mobile","label":"T-Mobile"},{"value":"Verizon","label":"Verizon"},{"value":"Wi-Fi","label":"Wi-Fi"}],"example":"Unlocked","aliases":["carriers","network","lock"]},{"name":"color","type":"array","required":false,"description":"Keep only products offered in these colours, matched case-insensitively against the source's own colour names. 118 distinct colour names were live on 2026-10-08 — Silver, Blue, Graphite, Black, White, Space Gray, Obsidian, Natural Titanium, Cosmic Orange and so on. A colour selects the PRODUCT when any of its variants has it; use `product` for the colour-by-condition price table.","on_invalid":"reject","example":["Natural Titanium"],"aliases":["colors","colour","colours"]},{"name":"condition","type":"enum","required":false,"description":"Keep only products available in this cosmetic grade. Gazelle grades every device itself into exactly three tiers and prices each one separately: measured on the iPhone 17e 256 GB in one run, Fair USD 489.99, Good 509.99, Excellent 524.99. Nearly every product carries all three — 4,442 Fair / 4,442 Good / 4,438 Excellent variants, and the storefront's own facet counts 922 / 923 / 922 products out of 1,000 — so this is most useful together with `in_stock_only` — a grade is often the thing that is sold out.","on_invalid":"reject","allowed_values":[{"value":"Fair","label":"visible wear, the cheapest tier"},{"value":"Good","label":"light wear"},{"value":"Excellent","label":"minimal to no visible wear"}],"example":"Excellent","aliases":["conditions","cosmetic_condition","grade"]},{"name":"product_type","type":"enum","required":false,"description":"Keep only this device class, the source's own words. The live catalogue on 2026-10-08 was 824 Cell Phones, 175 iPads and 1 Digital Warranty — and nothing else. Gazelle's MacBook and Apple-Watch collections still exist but return zero products, so there is no laptop or watch class to ask for.","on_invalid":"reject","allowed_values":[{"value":"Cell Phones","label":"Cell Phones"},{"value":"iPads","label":"iPads"},{"value":"Digital Warranty","label":"Digital Warranty"}],"example":"Cell Phones","aliases":["type","device_type"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in USD MAJOR units (400 = USD 400.00, not 40000). Compared against each product's cheapest variant — or, with `in_stock_only`, its cheapest BUYABLE variant, which on 55 of the 153 in-stock products is a different and dearer number. Live prices ran USD 46.99 to 2,199.99.","on_invalid":"reject","example":400,"minimum":0,"aliases":["minPrice","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price, same units as `min_price`. Combine the two for a band.","on_invalid":"reject","example":800,"minimum":0,"aliases":["maxPrice","price_max"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"Keep only products with at least one BUYABLE variant, and judge every other filter against the buyable variants alone. This matters more on Gazelle than on most catalogues: it publishes 13,329 priced variants of which only 464 were buyable on 2026-10-08, across 153 of the 1,000 products. Off by default so you can see the full price history of the catalogue; switch it on to see what can actually be bought today.","on_invalid":"reject","default":false,"example":true,"aliases":["in_stock","available_only","availability"]},{"name":"sort","type":"enum","required":false,"description":"Row order. Applied by this API, like the filters: the source's catalogue endpoint ignores its own `sort_by` parameter there (measured — `sort_by=price-ascending`, `price-descending` and `title-ascending` each returned the identical 250 product ids in the identical order). Any sort other than `source` reads the whole collection first so that the order is over the real catalogue and not over one page of it.","on_invalid":"reject","allowed_values":[{"value":"source","label":"the storefront's own order (the default)"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"title_asc","label":"A-Z by title"},{"value":"title_desc","label":"Z-A by title"},{"value":"newest","label":"most recently published first"},{"value":"oldest","label":"longest-listed first"},{"value":"stock_first","label":"buyable products first, then cheapest"}],"default":"source","example":"price_asc","aliases":["sort_by","order"]},{"name":"limit","type":"integer","required":false,"description":"How many product rows to return, 1-250 (default 50). This is the API's page size, not the source's: Gazelle serves 250 products per request and silently clamps anything larger, so a `limit` of 250 with no filter is exactly one upstream call.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["per_page","page_size","count"]},{"name":"page","type":"integer","required":false,"description":"Which page of `limit` rows to return, 1-based. Paging over the FILTERED and SORTED result, so it is stable for a given set of parameters. `meta.has_more` and `meta.total_matched` tell you when to stop; the live catalogue is small enough (1,000 products) that everything is reachable.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100,"aliases":["p","offset_page"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: the only seller is Gazelle itself, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"products[]{handle, product_id, title, url, brand, brand_source, model_line, storage_gb, storage_label, carrier, carrier_raw, product_type, currency, price_min, price_max, price_min_available, price_max_available, compare_at_price_max, in_stock, variant_count, available_variant_count, colors[], colors_available[], conditions[], conditions_available[], price_by_condition{}, price_by_condition_available{}, tags[], image_url, image_count, created_at, updated_at, published_at, detail_params{handle}} + seller{} + meta{collection, total_matched, source_product_count, source_variant_count, source_available_variant_count, in_stock_product_count, returned, page, has_more, price_range{min,max}, filters_applied{}, filtering, source_pages_read, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":6},"example_params":{"collection":"iphone","in_stock_only":true,"sort":"price_asc","limit":25}},{"name":"product","description":"The COMPLETE live offer table of one Gazelle product and, by default, of every sibling product of the same model — each capacity x carrier combination — in a single request, straight from the storefront's own variant picker. Per offer: colour, cosmetic grade, price, the crossed-out price when there is a real one, and THE ACTUAL UNIT COUNT, which neither /products.json nor the product's own JSON endpoint publishes anywhere on the site. Per product: the new-device MSRP and the saving against it, the warranty code, the collections it sits in, and the cheapest price at each grade. Measured on 2026-10-08: 8 sibling products / 72 offers for the iPhone 17e, 12 / 144 for the Galaxy Z Fold8 Ultra, 3 / 36 for the iPhone 11 Pro 512 GB. The page's own schema.org block is read as a second witness for price and availability and any disagreement is reported in `meta.ld_json_cross_check`, not hidden. An unknown handle is NOT_FOUND.","required_params":["handle"],"optional_params":["include_group","in_stock_only_offers"],"params":[{"name":"handle","type":"string","required":true,"description":"The product handle, as the storefront's own URL spells it — the part after /products/. Every `search` row returns it as `handle` and as ready-made `detail_params`. A full buy.gazelle.com product URL is also accepted and the handle is taken out of it. A handle that does not exist is NOT_FOUND (the source answers HTTP 404 for one).","on_invalid":"reject","example":"iphone-17e-256gb-unlocked","value_pattern":"[a-z0-9][a-z0-9-]{0,119}","aliases":["product","product_handle","slug","url"]},{"name":"include_group","type":"boolean","required":false,"description":"Also return every SIBLING product of the same model — each storage and carrier combination, with its own full offer table. This is the reason to use `product` rather than read a search row: Gazelle's product page ships the whole group in one response, so a single call returns the complete model matrix. Measured: 8 products / 72 variants for the iPhone 17e, 12 / 144 for the Galaxy Z Fold8 Ultra, 3 / 36 for the iPhone 11 Pro 512 GB. Switch it off for the requested product alone.","on_invalid":"reject","default":true,"example":true,"aliases":["group","siblings","include_siblings"]},{"name":"in_stock_only_offers","type":"boolean","required":false,"description":"Drop offers whose unit count is zero. Gazelle publishes sold-out variants with a live price (67 of the iPhone 17e group's 72 variants were at zero units), so this is off by default — the full table is the price history. The counts themselves are the real thing: no JSON surface of the site publishes them, only this page does.","on_invalid":"reject","default":false,"example":true,"aliases":["in_stock_offers","hide_sold_out"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: the only seller is Gazelle itself, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"product{handle, product_id, title, url, brand, brand_source, model_line, model, storage_gb, storage_label, carrier, carrier_raw, product_type, currency, msrp, msrp_minor, price_min, price_max, price_min_available, price_max_available, savings_vs_msrp_pct, in_stock, variant_count, available_variant_count, units_in_stock, units_by_condition{}, colors[], colors_available[], conditions[], conditions_available[], price_by_condition{}, price_by_condition_available{}, warranty_code, tags[], collections[], image_url, description, published_at, offers[]{variant_id, sku, title, color, condition, condition_rank, price, price_minor, currency, compare_at_price, available, units_in_stock, inventory_policy, inventory_tracked, incoming, next_incoming_date, requires_shipping, shipping_weight_grams, image_url, url}}, group[]{same shape}, seller{}, summary{group_product_count, offer_count, available_offer_count, units_in_stock, price_min, price_max, price_min_available, price_by_condition{}, units_by_condition{}, storages_gb[], carriers[], colors[], conditions[]} + meta{handle, stock_source, ld_json_cross_check{}, offers_hidden_sold_out}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"handle":"iphone-17e-256gb-unlocked"}},{"name":"facets","description":"Gazelle's own inventory census of one collection: every value its storefront filter form offers for brand, model, capacity, carrier, colour, cosmetic grade and availability, each with THE SOURCE'S OWN product count beside it, plus the price slider's bounds and the live page count of the grid. This is the one number on the site that can be trusted about size: `collections.json` claims 4,058 products for `all` while the catalogue pages out at 1,000, and claims 1,224 MacBooks where there are none. Unlike the catalogue endpoint, the collection page really does honour filters, so `filters` returns Gazelle's own answer to a combined question (how many Unlocked iPhone 15 Pro in Excellent, etc.). Filter values are case-sensitive at the source — `brand=apple` returns 0 products with HTTP 200 while `brand=Apple` returns all 332 — so every value sent is checked against the form the source renders back and anything it does not offer lands in `meta.warnings`.","required_params":[],"optional_params":["collection","filters","min_price","max_price"],"params":[{"name":"collection","type":"string","required":false,"description":"Which Gazelle collection to read, by the storefront's own handle: `all` (the whole live catalogue, 1,000 products on 2026-10-08), `iphone` (332), `ipads`, `samsung-galaxy`, `google-phones`, `unlocked`, `best-sellers`, `clearance`, and 202 more that the `collections` action lists. Narrowing the collection is also the way to make this call cheaper: the source only honours `limit` and `page`, so a smaller collection is fewer pages to read. A handle that does not exist is NOT_FOUND — the source answers one with an empty list and HTTP 200, exactly like a real collection that happens to be empty, so the handle is verified separately.","on_invalid":"reject","default":"all","example":"iphone","value_pattern":"[a-z0-9][a-z0-9-]{0,119}","aliases":["collection_handle","category","coll"]},{"name":"filters","type":"object","required":false,"description":"Narrow the facet counts with the storefront's OWN filters, as {filter: value} or {filter: [values]} over brand, model, storage, carrier, color, condition and availability. Unlike the catalogue endpoint, the collection page really does honour these, so the counts that come back are Gazelle's own answer to a combined question. Values are case-sensitive at the source — `brand=apple` returned 0 products and `brand=Apple` returned all 332 — so every value sent is checked against the filter form the source renders back and anything it does not offer is reported in `meta.warnings` instead of passing as a successful narrowing.","on_invalid":"reject","example":{"carrier":"Unlocked","condition":"Excellent"},"aliases":["filter","narrow"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in USD MAJOR units (400 = USD 400.00, not 40000). Compared against each product's cheapest variant — or, with `in_stock_only`, its cheapest BUYABLE variant, which on 55 of the 153 in-stock products is a different and dearer number. Live prices ran USD 46.99 to 2,199.99.","on_invalid":"reject","example":400,"minimum":0,"aliases":["minPrice","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price, same units as `min_price`. Combine the two for a band.","on_invalid":"reject","example":800,"minimum":0,"aliases":["maxPrice","price_max"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: the only seller is Gazelle itself, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"collection{handle, title, url, products_count_claimed}, facets[]{filter, source_parameter, label, values[]{value, product_count}}, grid{products_per_page, last_page, approx_live_products, empty_notice, handles[]}, price_input{} + meta{collection, filters_applied{}, filters_not_offered[], approx_live_products, products_count_claimed, count_discrepancy}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"collection":"iphone"}},{"name":"collections","description":"Every collection the Gazelle storefront publishes — 205 on 2026-10-08 — with its handle, title, URL and ready-made `search_params`. This is how you find the handle to narrow `search` and `facets` with, which is also how you make those calls cheap. The count the source attaches to each collection is published as `products_count_claimed` and nothing else, because it is not a live number: it says 4,058 for `all` where the catalogue really pages out at 1,000, and it says 1,224 for `macbook-pro` and 2 for `apple-watches` where both return zero products and the storefront itself prints 'No products found'. Use `facets` or `search` for a number you can rely on.","required_params":[],"optional_params":["q","limit"],"params":[{"name":"q","type":"string","required":false,"description":"Keep only collections whose handle or title contains this text (case-insensitive).","on_invalid":"reject","example":"iphone","aliases":["query","keyword","search"]},{"name":"limit","type":"integer","required":false,"description":"How many collections to return, 1-250. Gazelle published 205 on 2026-10-08, so the default returns all of them.","on_invalid":"reject","default":250,"example":250,"minimum":1,"maximum":250,"aliases":["per_page","count"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: the only seller is Gazelle itself, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"collections[]{handle, title, collection_id, url, products_count_claimed, published_at, updated_at, image_url, search_params{}} + meta{total_collections, returned, products_count_claimed_warning}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"iphone","limit":100}}]},{"name":"gebrauchtwagen-at","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Gebrauchtwagen.at API — the Austrian used and new car market live: every car listed for sale in Austria on gebrauchtwagen.at, searchable by make, model, price, first registration, mileage, power, fuel, gearbox, body type, offer type (used, new, Jahreswagen, demo, day registration), dealer or private seller, VAT-deductible, price rating, postcode radius and listing age; then one listing in full: gross and net price with VAT rate, the site's price rating with its median and bands, full technical data, equipment list, consumption and CO2, photos, location with coordinates, and the dealer with phone numbers and ratings. Plus makes and models.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/gebrauchtwagen-at/v1","spec_available":true,"actions":[{"name":"search","description":"Search cars for sale in Austria with the filters the site applies itself. Up to 20 rows a page. 🔴 The source serves at most 4,000 rows per query (narrow with filters to reach the rest); the total is exact.","required_params":[],"optional_params":["make","model","make_id","model_id","query","price_min","price_max","year_min","year_max","mileage_min","mileage_max","power_kw_min","power_kw_max","fuel","transmission","body_type","offer_type","seller_type","seller_id","vat_deductible","price_rating","online_since_days","zip","radius_km","sort","order","page","limit"],"params":[{"name":"make","type":"string","required":false,"description":"Make as the site's own slug: 'volkswagen', 'bmw', 'mercedes-benz', 'skoda'. The `makes` action lists every make with its slug and id. An unknown slug is refused (INVALID_PARAM), never served as the whole market.","on_invalid":"reject","example":"volkswagen","aliases":["brand"]},{"name":"model","type":"string","required":false,"description":"Model slug inside `make`: 'golf', 'x3', 'c-klasse', 'model-3'. Needs `make`.","on_invalid":"reject","example":"golf"},{"name":"make_id","type":"integer","required":false,"description":"Numeric make id instead of the slug (Volkswagen = 74, BMW = 13) — from `makes`.","on_invalid":"reject","example":74,"minimum":1},{"name":"model_id","type":"integer","required":false,"description":"Numeric model id instead of the slug (VW Golf = 2084) — from `models`. Needs make_id.","on_invalid":"reject","example":2084,"minimum":1},{"name":"query","type":"string","required":false,"description":"Free text matched against the listing (e.g. 'gti', 'allrad', 'anhängerkupplung').","on_invalid":"reject","example":"gti","aliases":["q","keyword"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR (the advertised consumer price).","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR.","on_invalid":"reject","example":25000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"First registration from this year.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"First registration up to this year.","on_invalid":"reject","example":2023,"minimum":1900,"maximum":2100},{"name":"mileage_min","type":"integer","required":false,"description":"Minimum mileage in km.","on_invalid":"reject","example":10000,"minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Maximum mileage in km.","on_invalid":"reject","example":100000,"minimum":0},{"name":"power_kw_min","type":"integer","required":false,"description":"Minimum power in kW.","on_invalid":"reject","example":100,"minimum":0},{"name":"power_kw_max","type":"integer","required":false,"description":"Maximum power in kW.","on_invalid":"reject","example":200,"minimum":0},{"name":"fuel","type":"array","required":false,"description":"Fuel code(s), one or several comma-separated (one request either way): B petrol, D diesel, E electric, 2 petrol hybrid, 3 diesel hybrid, L LPG, C CNG, H hydrogen, M ethanol, O other. English words (petrol, diesel, electric, lpg …) are accepted too.","on_invalid":"reject","allowed_values":[{"value":"B","label":"Benzin (petrol)"},{"value":"D","label":"Diesel"},{"value":"E","label":"Elektro (electric)"},{"value":"2","label":"Elektro/Benzin (petrol hybrid)"},{"value":"3","label":"Elektro/Diesel (diesel hybrid)"},{"value":"L","label":"Autogas (LPG)"},{"value":"C","label":"Erdgas (CNG)"},{"value":"H","label":"Wasserstoff (hydrogen)"},{"value":"M","label":"Ethanol"},{"value":"O","label":"Sonstige (other)"}],"example":"D","value_pattern":"(?i)(petrol|gasoline|benzin|diesel|electric|elektro|ev|hybrid_petrol|hybrid_diesel|lpg|cng|hydrogen|ethanol|other)"},{"name":"transmission","type":"enum","required":false,"description":"Gearbox: automatic, manual or semi_automatic.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatik"},{"value":"manual","label":"Schaltgetriebe"},{"value":"semi_automatic","label":"Halbautomatik"}],"example":"automatic","aliases":["gear"]},{"name":"body_type","type":"enum","required":false,"description":"Body type, as the site groups it.","on_invalid":"reject","allowed_values":[{"value":"small_car","label":"Kleinwagen"},{"value":"convertible","label":"Cabrio"},{"value":"coupe","label":"Coupé"},{"value":"suv","label":"SUV/Geländewagen/Pickup"},{"value":"estate","label":"Kombi"},{"value":"sedan","label":"Limousine"},{"value":"van","label":"Van/Kleinbus"},{"value":"transporter","label":"Transporter"},{"value":"other","label":"Sonstige"}],"example":"suv"},{"name":"offer_type","type":"enum","required":false,"description":"Vehicle offer type: used, new, annual (Jahreswagen), classic (Oldtimer), demo (Vorführwagen), pre_registered (Tageszulassung).","on_invalid":"reject","allowed_values":[{"value":"used","label":"Gebraucht"},{"value":"new","label":"Neu"},{"value":"annual","label":"Jahreswagen (one-year-old car)"},{"value":"classic","label":"Oldtimer"},{"value":"demo","label":"Vorführfahrzeug"},{"value":"pre_registered","label":"Tageszulassung (day registration)"}],"example":"used","aliases":["condition"]},{"name":"seller_type","type":"enum","required":false,"description":"Only dealers or only private sellers.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Händler — commercial dealers"},{"value":"private","label":"Privat — private sellers"}],"example":"private"},{"name":"seller_id","type":"string","required":false,"description":"One seller's stock: the `seller.seller_id` of any search row or listing.","on_invalid":"reject","example":"21521778"},{"name":"vat_deductible","type":"boolean","required":false,"description":"Only listings whose dealer issues a VAT invoice (MwSt. ausweisbar) — the ones with a net price.","on_invalid":"reject","example":true},{"name":"price_rating","type":"enum","required":false,"description":"The site's own price rating: very_good, good or fair.","on_invalid":"reject","allowed_values":[{"value":"very_good","label":"Sehr guter Preis"},{"value":"good","label":"Guter Preis"},{"value":"fair","label":"Fairer Preis"}],"example":"very_good"},{"name":"online_since_days","type":"integer","required":false,"description":"Only listings put online in the last N days (1-7 or 14, the site's own choices).","on_invalid":"reject","allowed_values":[{"value":1,"label":"listed in the last 1 day(s)"},{"value":2,"label":"listed in the last 2 day(s)"},{"value":3,"label":"listed in the last 3 day(s)"},{"value":4,"label":"listed in the last 4 day(s)"},{"value":5,"label":"listed in the last 5 day(s)"},{"value":6,"label":"listed in the last 6 day(s)"},{"value":7,"label":"listed in the last 7 day(s)"},{"value":14,"label":"listed in the last 14 day(s)"}],"example":1},{"name":"zip","type":"string","required":false,"description":"Austrian postcode for a radius search (needs radius_km).","on_invalid":"reject","example":"1010"},{"name":"radius_km","type":"integer","required":false,"description":"Radius around `zip` in km (the site's own steps).","on_invalid":"reject","allowed_values":[{"value":10,"label":"10 km"},{"value":20,"label":"20 km"},{"value":50,"label":"50 km"},{"value":100,"label":"100 km"},{"value":150,"label":"150 km"},{"value":200,"label":"200 km"},{"value":250,"label":"250 km"},{"value":300,"label":"300 km"},{"value":400,"label":"400 km"}],"example":20},{"name":"sort","type":"enum","required":false,"description":"Sort key.","on_invalid":"reject","allowed_values":[{"value":"standard","label":"The site's default order (best results)"},{"value":"price","label":"Price"},{"value":"year","label":"First registration"},{"value":"mileage","label":"Mileage"},{"value":"power","label":"Power"},{"value":"newest","label":"Newest listing first (the site's 'age' key)"},{"value":"make","label":"Make/model alphabetical"}],"default":"standard","example":"price"},{"name":"order","type":"enum","required":false,"description":"Sort direction for `sort` (ignored for standard).","on_invalid":"reject","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"default":"asc","example":"asc"},{"name":"page","type":"integer","required":false,"description":"Page number. 🔴 The source serves at most 4,000 rows per query (page × limit ≤ 4,000); `meta.pagination.last_page` says where it stops.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":4000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-20 (the source's page size). Under a sort the source returns fewer (17 measured).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":20}],"returns":"listings[] — listing_id, url, title, subtitle, make, model, model_id, model_group, variant, model_version, engine, offer_type, price (EUR, advertised), currency, price_display, price_vat_label, price_on_request, price_is_symbolic, price_before_reduction_display, super_deal, first_registration (YYYY-MM), year, mileage_km, power_kw, power_hp, fuel, transmission, engine_ccm, available_now, available_from, location{country_code, postcode, city, street}, seller{seller_id, type, company_name, contact_name, phones[], rating, rating_count, dealer_page, logo}, image, image_count, placement, ad_tier. meta: total, pagination{page, limit, last_page, has_more, retrievable_max}, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"volkswagen","model":"golf","fuel":"D","year_min":2018}},{"name":"listing","description":"One car in full by its listing_id: price (gross) with net price and VAT rate where the dealer publishes them, negotiable / on-request flags, the site's price rating (category, market median and the price bands), make/model/version ids, first registration, mileage, kW/PS, fuel, gearbox, drive, body, colour, seats, doors, weight, previous owners, service history, consumption and CO2, equipment by category, warranty, description, every photo, location with coordinates and the seller (company, contact, phones, ratings by category).","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The listing's id: `listing_id` of a search row (a GUID).","on_invalid":"reject","example":"0f38a516-be54-4c22-989c-f4b31cb81626","aliases":["id"]}],"returns":"listing{} — the search-row fields plus make_id, legal_category, is_new, price_net, vat_rate, vat_deductible, price_negotiable, price_is_final, price_dealer, price_rating{category, median, ranges[]}, production_year, fuel_code, gears, cylinders, drive_train, body_type, color, paint_type, upholstery, seats, doors, weight_kg, previous_owners, full_service_history, fuel_consumption_l_100km, co2_g_km, electric_range_km, equipment{category: [..]}, warranty, description, images[], status, created_at, dealer_reference, location{lat, lng}, seller{recommend_pct, ratings_by_category[], imprint_url, stock_url}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"0f38a516-be54-4c22-989c-f4b31cb81626"}},{"name":"makes","description":"Every make the site offers with its slug and numeric id, plus the site's own filter vocabularies (fuel, body type, gearbox, offer type, price rating, sort keys) with their labels.","required_params":[],"optional_params":[],"params":[],"returns":"makes[{make_id, name, slug, top}], filters{fuel[], body_type[], transmission[], offer_type[], price_rating[], sort[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}},{"name":"models","description":"Models, model lines ('Golf (alle)') and model groups of one make, with ids — the values `search` takes as model / model_id.","required_params":["make_id"],"optional_params":[],"params":[{"name":"make_id","type":"integer","required":true,"description":"Numeric make id from `makes` (Volkswagen = 74).","on_invalid":"reject","example":74,"minimum":1}],"returns":"models[{model_id, name, slug, model_line_id}], model_lines[{id, name}], model_groups[{id, name}], top_model_ids[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"make_id":74}}]},{"name":"gelsons","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Gelson's API scraper — shop.gelsons.com product search, categories, Weekly Ad and On Sale, product detail and store locator with each Gelson's store's price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/gelsons/v1","spec_available":true,"actions":[{"name":"search","description":"Search shop.gelsons.com at one Gelson's store: regular price (price list), was-price, member/card price and promotions apart, unit price, stock level, brand and size, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in the shop.gelsons.com search box ('milk').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"shop.gelsons.com pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Gelson's store prices the results (Gelson's prices and range differ by store). Default 91403 — then `store_defaulted` is true.","on_invalid":"reject","example":"91403","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Gelson's store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"589"}],"returns":"products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"91403"}},{"name":"category","description":"Every product of a shop.gelsons.com collection (a category, a brand or a diet collection from `categories`) priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (n-milk-82337 …) or a shop.gelsons.com /store/gelsons/collections/<slug> URL.","on_invalid":"reject","example":"n-milk-82337","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Gelson's store prices the results (Gelson's prices and range differ by store). Default 91403 — then `store_defaulted` is true.","on_invalid":"reject","example":"91403","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Gelson's store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"589"}],"returns":"collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-82337","postal_code":"91403"}},{"name":"product/detail","description":"One Gelson's product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price, promotions and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or a shop.gelsons.com /store/gelsons/products/ URL.","on_invalid":"reject","example":"17297468","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Gelson's store prices the results (Gelson's prices and range differ by store). Default 91403 — then `store_defaulted` is true.","on_invalid":"reject","example":"91403","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Gelson's store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"589"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"17297468","postal_code":"91403"}},{"name":"categories","description":"The shop.gelsons.com category tree (departments and their collections) or one collection's sub-collections; slugs feed `category`.","required_params":[],"optional_params":["slug","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Optional collection slug: returns its sub-collections. Without it: the whole category tree.","on_invalid":"reject","example":"n-milk-82337","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Gelson's store prices the results (Gelson's prices and range differ by store). Default 91403 — then `store_defaulted` is true.","on_invalid":"reject","example":"91403","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Gelson's store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"589"}],"returns":"collections[]{slug,name,url,children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-82337"}},{"name":"stores","description":"Gelson's stores around a US ZIP code, nearest first, with address, coordinates, distance and which services shop.gelsons.com offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find Gelson's stores around (nearest first).","on_invalid":"reject","example":"91403","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"postal_code":"91403"}},{"name":"offers","description":"Gelson's's current deal lists at one store: Weekly Ad, On Sale.","required_params":[],"optional_params":["type","page","per_page","cursor","postal_code","store_id"],"params":[{"name":"type","type":"enum","required":false,"description":"Which deal list: weekly_ad (Weekly Ad), on_sale (On Sale).","on_invalid":"reject","allowed_values":[{"value":"weekly_ad","label":"Weekly Ad"},{"value":"on_sale","label":"On Sale"}],"default":"weekly_ad"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Gelson's store prices the results (Gelson's prices and range differ by store). Default 91403 — then `store_defaulted` is true.","on_invalid":"reject","example":"91403","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Gelson's store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"589"}],"returns":"type, collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"91403"}},{"name":"promotions","description":"Which Gelson's deal lists are live now at one store, each with its name and product count.","required_params":[],"optional_params":["postal_code","store_id"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Gelson's store prices the results (Gelson's prices and range differ by store). Default 91403 — then `store_defaulted` is true.","on_invalid":"reject","example":"91403","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Gelson's store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"589"}],"returns":"promotions[]{type,name,slug,url,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"91403"}}]},{"name":"gemrate","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"GemRate API scraper - universal graded card population report across PSA, Beckett (BGS), SGC and CGC: population by grade, gem rates, card and set pop reports, population history, most-graded cards, athlete checklists and daily grading volume. Sports cards and TCG (Pokemon, Magic, One Piece). No account.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/gemrate/v1","spec_available":true,"actions":[{"name":"search","description":"Find graded cards across PSA, BGS, SGC and CGC by free text (year, set, player or character, card number, parallel): each match with its GemRate id, total graded population, gem count, gem rate, which graders are included and the card image. 10 matches per page, up to 5 pages.","required_params":["query"],"optional_params":["page"],"params":[{"name":"query","type":"string","required":true,"description":"Free text: player or character, year, set, card number, parallel.","on_invalid":"reject","example":"charizard base set","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Results page (1-5; the site serves at most 50 matches).","on_invalid":"reject","default":1,"minimum":1,"maximum":5}],"returns":"query, results[]{gemrate_id, description, year, set_name, name, card_number, parallel, category, total_population, gems, gem_rate, gem_rate_percent, graders_included[], is_universal_match, image_front, url}, count, page, has_more","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard base set"}},{"name":"card","description":"One card's full population report across PSA, Beckett, SGC and CGC: combined population and gem rate, the count at every grade on GemRate's universal scale with percent of total and percent graded higher, and per grader the total graded, gem count, gem rate, every grade count including half grades, PSA qualified grades, the grader's own card name and set, the last population change and front/back images.","required_params":[],"optional_params":["gemrate_id","query"],"params":[{"name":"gemrate_id","type":"string","required":false,"description":"The card's GemRate id from `search` (40 characters) or its gemrate.com/card/… URL.","on_invalid":"reject","example":"ffb8699bb7f435eff4e9761f8e29358e351d777e","aliases":["id","url","card_url"]},{"name":"query","type":"string","required":false,"description":"Instead of gemrate_id: free text; the best match is used and reported in `match`.","on_invalid":"reject","example":"1999 Pokemon Base Charizard 4","aliases":["q"]}],"returns":"card{gemrate_id, universal_gemrate_id, description, year, set_name, name, card_number, parallel, category, population_type, graders_included[], total_population, gems, gem_rate, gem_rate_percent, universal_grades[]{grade, label, count, percent_of_total, percent_graded_higher}, qualified_grades[]{grade, count}, by_grader[]{grader, grader_name, total_graded, gems, gem_rate, gem_rate_percent, grades[]{grade (e.g. 10, 9.5, 10 Pristine, 10 Black Label, Auth), count, universal_grade, is_gem}, qualified_grades[], qualified_total, last_population_change, grader_card{gemrate_id, description, year, set_name, name, card_number, parallel, category, spec_id}, grader_pop_report_url, set_pop_url}, last_population_change, data_last_updated, image_front, image_back, url}, match{query, matched, other_matches[]} (query input only)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"gemrate_id":"ffb8699bb7f435eff4e9761f8e29358e351d777e"}},{"name":"card_history","description":"How a card's graded population has grown: BGS and SGC weekly history for the last year with every grade count, gems and gem rate each week; PSA weekly total graded for the last year plus graded past month, prior month, past-month gem rate, 30-day momentum, last gem date and the most recent cert.","required_params":[],"optional_params":["gemrate_id","query","grader","year","category","set_name","name","card_number","parallel"],"params":[{"name":"gemrate_id","type":"string","required":false,"description":"The card's GemRate id from `search` (40 characters) or its gemrate.com/card/… URL.","on_invalid":"reject","example":"ffb8699bb7f435eff4e9761f8e29358e351d777e","aliases":["id","url","card_url"]},{"name":"query","type":"string","required":false,"description":"Instead of gemrate_id: free text; the best match is used and reported in `match`.","on_invalid":"reject","example":"1999 Pokemon Base Charizard 4","aliases":["q"]},{"name":"grader","type":"enum","required":false,"description":"Which grader's history. CGC history is not published by the site.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every grader the card has (PSA, BGS, SGC)"},{"value":"psa","label":"PSA"},{"value":"bgs","label":"Beckett (BGS)"},{"value":"sgc","label":"SGC"}],"default":"all"},{"name":"year","type":"string","required":false,"description":"With grader bgs/sgc and no gemrate_id: the grader's own card fields (set_pop rows carry them as trend_params).","on_invalid":"reject"},{"name":"category","type":"string","required":false,"description":"With the fields form: the grader's category slug (e.g. tcg-cards, basketball-cards).","on_invalid":"reject"},{"name":"set_name","type":"string","required":false,"description":"With the fields form: the grader's own set name.","on_invalid":"reject"},{"name":"name","type":"string","required":false,"description":"With the fields form: the grader's own card name.","on_invalid":"reject"},{"name":"card_number","type":"string","required":false,"description":"With the fields form: card number as the grader lists it.","on_invalid":"reject"},{"name":"parallel","type":"string","required":false,"description":"With the fields form: parallel / variety, if any.","on_invalid":"reject"}],"returns":"gemrate_id, description, histories[]{grader, total_graded, gems, gem_rate, last_population_change, history[]{date, total_graded, gems, gem_rate, grades[]{grade (e.g. 10, 9.5, 10 Pristine, 10 Black Label, Auth), count, universal_grade, is_gem}} (bgs/sgc), weekly_total_graded_1y[] (psa, oldest first, 52 weekly points, dates not published), graded_past_month, graded_prior_month, gem_rate_past_month, momentum_30d_percent, last_gem_date, recent_cert{cert_number, grade, url} (psa), available, note}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":4},"example_params":{"gemrate_id":"ffb8699bb7f435eff4e9761f8e29358e351d777e"}},{"name":"set_pop","description":"A set's population report from one grader (PSA, BGS, SGC or CGC): every card and parallel with total graded, gems, gem rate and the count at each grade. PSA rows add graded past month and prior month, 30-day gem rate and momentum, the last-year weekly trend, last gem date and a recent cert number. Filter by player/character name, sort, paginate.","required_params":["year","category","set_name"],"optional_params":["grader","name","sort","limit","page","min_total"],"params":[{"name":"grader","type":"enum","required":false,"description":"Grading company. 'beckett' is accepted for bgs.","on_invalid":"reject","allowed_values":[{"value":"psa","label":"PSA"},{"value":"bgs","label":"Beckett (BGS)"},{"value":"sgc","label":"SGC"},{"value":"cgc","label":"CGC"}],"default":"psa"},{"name":"year","type":"string","required":true,"description":"Set year (4 digits).","on_invalid":"reject","example":"1999","value_pattern":"(18|19|20)\\d\\d"},{"name":"category","type":"enum","required":true,"description":"Card category (aliases accepted: pokemon/tcg/magic → tcg-cards, baseball, basketball, football, hockey, soccer, golf, boxing, non-sport, multi-sport…).","on_invalid":"reject","allowed_values":[{"value":"baseball-cards","label":"Baseball"},{"value":"basketball-cards","label":"Basketball"},{"value":"football-cards","label":"Football"},{"value":"hockey-cards","label":"Hockey"},{"value":"soccer-cards","label":"Soccer"},{"value":"tcg-cards","label":"TCG (Pokemon, Magic, Yu-Gi-Oh!, One Piece…)"},{"value":"non-sport-cards","label":"Non-sport"},{"value":"multi-sport-cards","label":"Multi-sport"},{"value":"boxing-wrestling-cards-mma","label":"Boxing / Wrestling / MMA"},{"value":"golf-cards","label":"Golf"},{"value":"minor-league-cards","label":"Minor league"},{"value":"misc-cards","label":"Misc"},{"value":"baseball-coins","label":"Baseball coins"},{"value":"basketball-coins","label":"Basketball coins"},{"value":"football-coins","label":"Football coins"},{"value":"hockey-coins","label":"Hockey coins"},{"value":"multi-sport-coins","label":"Multi-sport coins"},{"value":"non-sports-coins","label":"Non-sport coins"},{"value":"packs","label":"Packs"},{"value":"pins","label":"Pins"},{"value":"tickets","label":"Tickets"}],"example":"tcg-cards"},{"name":"set_name","type":"string","required":true,"description":"The set name exactly as the grader spells it (from `sets`, a card's by_grader rows, or `top_cards`).","on_invalid":"reject","example":"Pokemon Game"},{"name":"name","type":"string","required":false,"description":"Only cards whose name contains this text.","on_invalid":"reject","example":"Charizard","aliases":["player"]},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"total_desc","label":"Most graded first (default)"},{"value":"gems_desc","label":"Most gem-grade copies first"},{"value":"gem_rate_desc","label":"Highest gem rate first"},{"value":"gem_rate_asc","label":"Lowest gem rate first (hardest to gem)"},{"value":"total_asc","label":"Least graded first (lowest population)"}],"default":"total_desc"},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"Page of rows.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"min_total","type":"integer","required":false,"description":"Only rows with at least this many graded.","on_invalid":"reject","default":0,"minimum":0}],"returns":"grader, year, category, set_name, set_totals{cards, total_graded, gems, gem_rate}, results[]{gemrate_id (psa), card_number, name, parallel, subset (cgc), description (psa), total_graded, gems, gem_rate, gem_rate_percent, grades[]{grade (e.g. 10, 9.5, 10 Pristine, 10 Black Label, Auth), count, universal_grade, is_gem}, half_and_qualified_total, graded_past_month, graded_prior_month, gem_rate_past_month, momentum_30d_percent, weekly_total_graded_1y[], last_gem_date, recent_cert{} (psa), trend_params{} (bgs/sgc), url}, count, page, limit, total_rows, has_more, sort, source_url","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":4},"example_params":{"year":"1999","category":"tcg-cards","set_name":"Pokemon Game"}},{"name":"sets","description":"Every set a grader has graded for one year and category, with total graded, gems and gem rate per set (the set names to use in set_pop and set_history).","required_params":["year","category"],"optional_params":["grader","query","sort","limit","page","min_total"],"params":[{"name":"grader","type":"enum","required":false,"description":"Grading company. 'beckett' is accepted for bgs.","on_invalid":"reject","allowed_values":[{"value":"psa","label":"PSA"},{"value":"bgs","label":"Beckett (BGS)"},{"value":"sgc","label":"SGC"},{"value":"cgc","label":"CGC"}],"default":"psa"},{"name":"year","type":"string","required":true,"description":"Set year (4 digits).","on_invalid":"reject","example":"1999","value_pattern":"(18|19|20)\\d\\d"},{"name":"category","type":"enum","required":true,"description":"Card category (aliases accepted: pokemon/tcg/magic → tcg-cards, baseball, basketball, football, hockey, soccer, golf, boxing, non-sport, multi-sport…).","on_invalid":"reject","allowed_values":[{"value":"baseball-cards","label":"Baseball"},{"value":"basketball-cards","label":"Basketball"},{"value":"football-cards","label":"Football"},{"value":"hockey-cards","label":"Hockey"},{"value":"soccer-cards","label":"Soccer"},{"value":"tcg-cards","label":"TCG (Pokemon, Magic, Yu-Gi-Oh!, One Piece…)"},{"value":"non-sport-cards","label":"Non-sport"},{"value":"multi-sport-cards","label":"Multi-sport"},{"value":"boxing-wrestling-cards-mma","label":"Boxing / Wrestling / MMA"},{"value":"golf-cards","label":"Golf"},{"value":"minor-league-cards","label":"Minor league"},{"value":"misc-cards","label":"Misc"},{"value":"baseball-coins","label":"Baseball coins"},{"value":"basketball-coins","label":"Basketball coins"},{"value":"football-coins","label":"Football coins"},{"value":"hockey-coins","label":"Hockey coins"},{"value":"multi-sport-coins","label":"Multi-sport coins"},{"value":"non-sports-coins","label":"Non-sport coins"},{"value":"packs","label":"Packs"},{"value":"pins","label":"Pins"},{"value":"tickets","label":"Tickets"}],"example":"tcg-cards"},{"name":"query","type":"string","required":false,"description":"Only sets whose name contains this text.","on_invalid":"reject","example":"Pokemon","aliases":["set_name"]},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"total_desc","label":"Most graded first (default)"},{"value":"gems_desc","label":"Most gem-grade copies first"},{"value":"gem_rate_desc","label":"Highest gem rate first"},{"value":"gem_rate_asc","label":"Lowest gem rate first (hardest to gem)"},{"value":"total_asc","label":"Least graded first (lowest population)"}],"default":"total_desc"},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"Page of rows.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"min_total","type":"integer","required":false,"description":"Only rows with at least this many graded.","on_invalid":"reject","default":0,"minimum":0}],"returns":"grader, year, category, results[]{set_name, total_graded, gems, gem_rate, gem_rate_percent}, count, total_rows, has_more, totals{sets, total_graded, gems}","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{"year":"1999","category":"tcg-cards"}},{"name":"set_history","description":"A set's grading history: total graded and gems every day the population changed, with graded in the last 7, 30 and 365 days. PSA back to 2021 for sports and TCG; BGS (from late 2021) and SGC (from 2022) for sports sets.","required_params":["year","category","set_name"],"optional_params":["grader","days"],"params":[{"name":"grader","type":"enum","required":false,"description":"PSA, BGS or SGC (no CGC set history; BGS and SGC history covers sports sets, not TCG).","on_invalid":"reject","allowed_values":[{"value":"psa","label":"PSA"},{"value":"bgs","label":"Beckett (BGS)"},{"value":"sgc","label":"SGC"}],"default":"psa"},{"name":"year","type":"string","required":true,"description":"Set year (4 digits).","on_invalid":"reject","example":"1999","value_pattern":"(18|19|20)\\d\\d"},{"name":"category","type":"enum","required":true,"description":"Card category (aliases accepted: pokemon/tcg/magic → tcg-cards, baseball, basketball, football, hockey, soccer, golf, boxing, non-sport, multi-sport…).","on_invalid":"reject","allowed_values":[{"value":"baseball-cards","label":"Baseball"},{"value":"basketball-cards","label":"Basketball"},{"value":"football-cards","label":"Football"},{"value":"hockey-cards","label":"Hockey"},{"value":"soccer-cards","label":"Soccer"},{"value":"tcg-cards","label":"TCG (Pokemon, Magic, Yu-Gi-Oh!, One Piece…)"},{"value":"non-sport-cards","label":"Non-sport"},{"value":"multi-sport-cards","label":"Multi-sport"},{"value":"boxing-wrestling-cards-mma","label":"Boxing / Wrestling / MMA"},{"value":"golf-cards","label":"Golf"},{"value":"minor-league-cards","label":"Minor league"},{"value":"misc-cards","label":"Misc"},{"value":"baseball-coins","label":"Baseball coins"},{"value":"basketball-coins","label":"Basketball coins"},{"value":"football-coins","label":"Football coins"},{"value":"hockey-coins","label":"Hockey coins"},{"value":"multi-sport-coins","label":"Multi-sport coins"},{"value":"non-sports-coins","label":"Non-sport coins"},{"value":"packs","label":"Packs"},{"value":"pins","label":"Pins"},{"value":"tickets","label":"Tickets"}],"example":"tcg-cards"},{"name":"set_name","type":"string","required":true,"description":"The set name exactly as the grader spells it (from `sets`, a card's by_grader rows, or `top_cards`).","on_invalid":"reject","example":"Pokemon Game"},{"name":"days","type":"integer","required":false,"description":"Only the last N days of history (default: everything).","on_invalid":"reject","minimum":1,"maximum":4000}],"returns":"grader, year, category, set_name, latest{date, total_graded, gems, gem_rate}, graded_last_7_days, graded_last_30_days, graded_last_365_days, history[]{date, total_graded, gems, gem_rate}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{"year":"1999","category":"tcg-cards","set_name":"Pokemon Game"}},{"name":"top_cards","description":"The most graded cards of all time at PSA, BGS, SGC or CGC, overall or in one category: rank, year, set, player or character, card number, parallel, total graded, gems and gem rate.","required_params":[],"optional_params":["grader","category","limit"],"params":[{"name":"grader","type":"enum","required":false,"description":"Grading company. 'beckett' is accepted for bgs.","on_invalid":"reject","allowed_values":[{"value":"psa","label":"PSA"},{"value":"bgs","label":"Beckett (BGS)"},{"value":"sgc","label":"SGC"},{"value":"cgc","label":"CGC"}],"default":"psa"},{"name":"category","type":"enum","required":false,"description":"Optional category (default: all categories).","on_invalid":"reject","allowed_values":[{"value":"baseball-cards","label":"Baseball"},{"value":"basketball-cards","label":"Basketball"},{"value":"football-cards","label":"Football"},{"value":"hockey-cards","label":"Hockey"},{"value":"soccer-cards","label":"Soccer"},{"value":"tcg-cards","label":"TCG (Pokemon, Magic, Yu-Gi-Oh!, One Piece…)"},{"value":"non-sport-cards","label":"Non-sport"},{"value":"multi-sport-cards","label":"Multi-sport"},{"value":"boxing-wrestling-cards-mma","label":"Boxing / Wrestling / MMA"},{"value":"golf-cards","label":"Golf"},{"value":"minor-league-cards","label":"Minor league"},{"value":"misc-cards","label":"Misc"},{"value":"baseball-coins","label":"Baseball coins"},{"value":"basketball-coins","label":"Basketball coins"},{"value":"football-coins","label":"Football coins"},{"value":"hockey-coins","label":"Hockey coins"},{"value":"multi-sport-coins","label":"Multi-sport coins"},{"value":"non-sports-coins","label":"Non-sport coins"},{"value":"packs","label":"Packs"},{"value":"pins","label":"Pins"},{"value":"tickets","label":"Tickets"}]},{"name":"limit","type":"integer","required":false,"description":"How many cards (the site publishes the top 100, 500 or 1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000}],"returns":"grader, category, results[]{rank, year, set_name, name, card_number, parallel, category, total_graded, gems, gem_rate, gem_rate_percent}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{"grader":"psa","limit":20}},{"name":"player","description":"Every graded card of one athlete or character at one grader (a full checklist with population): year, set, card number, parallel, total graded, gems, gem rate and, at PSA, the card id and a recent cert. Filter by year or set, sort, paginate.","required_params":["player"],"optional_params":["grader","category","year","set_name","sort","limit","page","min_total"],"params":[{"name":"player","type":"string","required":true,"description":"Athlete or character name as graders spell it (Michael Jordan, Pikachu).","on_invalid":"reject","example":"Shohei Ohtani","aliases":["name","character"]},{"name":"grader","type":"enum","required":false,"description":"Grading company. 'beckett' is accepted for bgs.","on_invalid":"reject","allowed_values":[{"value":"psa","label":"PSA"},{"value":"bgs","label":"Beckett (BGS)"},{"value":"sgc","label":"SGC"},{"value":"cgc","label":"CGC"}],"default":"psa"},{"name":"category","type":"enum","required":false,"description":"Optional category (default: all).","on_invalid":"reject","allowed_values":[{"value":"baseball-cards","label":"Baseball"},{"value":"basketball-cards","label":"Basketball"},{"value":"football-cards","label":"Football"},{"value":"hockey-cards","label":"Hockey"},{"value":"soccer-cards","label":"Soccer"},{"value":"tcg-cards","label":"TCG (Pokemon, Magic, Yu-Gi-Oh!, One Piece…)"},{"value":"non-sport-cards","label":"Non-sport"},{"value":"multi-sport-cards","label":"Multi-sport"},{"value":"boxing-wrestling-cards-mma","label":"Boxing / Wrestling / MMA"},{"value":"golf-cards","label":"Golf"},{"value":"minor-league-cards","label":"Minor league"},{"value":"misc-cards","label":"Misc"},{"value":"baseball-coins","label":"Baseball coins"},{"value":"basketball-coins","label":"Basketball coins"},{"value":"football-coins","label":"Football coins"},{"value":"hockey-coins","label":"Hockey coins"},{"value":"multi-sport-coins","label":"Multi-sport coins"},{"value":"non-sports-coins","label":"Non-sport coins"},{"value":"packs","label":"Packs"},{"value":"pins","label":"Pins"},{"value":"tickets","label":"Tickets"}]},{"name":"year","type":"string","required":false,"description":"Only cards from this year.","on_invalid":"reject"},{"name":"set_name","type":"string","required":false,"description":"Only cards whose set name contains this text.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"total_desc","label":"Most graded first (default)"},{"value":"gems_desc","label":"Most gem-grade copies first"},{"value":"gem_rate_desc","label":"Highest gem rate first"},{"value":"gem_rate_asc","label":"Lowest gem rate first (hardest to gem)"},{"value":"total_asc","label":"Least graded first (lowest population)"},{"value":"year_desc","label":"Newest first"},{"value":"year_asc","label":"Oldest first"}],"default":"total_desc"},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"Page of rows.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"min_total","type":"integer","required":false,"description":"Only rows with at least this many graded.","on_invalid":"reject","default":0,"minimum":0}],"returns":"player, grader, category, totals{cards, total_graded, gems}, results[]{year, set_name, name, card_number, parallel, category, total_graded, gems, gem_rate, gem_rate_percent, half_and_qualified_total, gemrate_id, universal_gemrate_id, recent_cert{cert_number, grade, url}, url}, count, page, limit, total_rows, has_more","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":5},"example_params":{"player":"Shohei Ohtani"}},{"name":"universal_sets","description":"GemRate's Universal Pop Report sets (cards matched across PSA, BGS, SGC and CGC): each set with total graded, each grader's count and market share, checklist size and how many cards have grades.","required_params":[],"optional_params":["category","year","query","limit","page"],"params":[{"name":"category","type":"string","required":false,"description":"Baseball, Basketball, Football, Hockey, Soccer, TCG…","on_invalid":"reject","example":"TCG"},{"name":"year","type":"string","required":false,"description":"Only sets from this year.","on_invalid":"reject"},{"name":"query","type":"string","required":false,"description":"Only sets whose name contains this text.","on_invalid":"reject","aliases":["set_name"]},{"name":"limit","type":"integer","required":false,"description":"Sets per page (1-1000; the report has ~400).","on_invalid":"reject","default":500,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"Page of rows.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000}],"returns":"results[]{set_id, year, set_name, category, total_graded, checklist_size, cards_with_grades, percent_with_grades, by_grader[]{grader, total_graded, share_percent}, recently_added, url}, count, total_rows, has_more","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"TCG"}},{"name":"universal_set","description":"One Universal Pop Report set: every card with its combined population and gem rate, the universal grade breakdown and each grader's total, gems, gem rate, grade counts, last graded and last gem date.","required_params":[],"optional_params":["set_id","year","set_name","name","sort","limit","page","min_total"],"params":[{"name":"set_id","type":"string","required":false,"description":"Set id from universal_sets (or the set's gemrate.com URL).","on_invalid":"reject","example":"535f4f725225a27e2c76df910cccab6c4659803d","aliases":["url"]},{"name":"year","type":"string","required":false,"description":"With set_name instead of set_id.","on_invalid":"reject"},{"name":"set_name","type":"string","required":false,"description":"Instead of set_id: the set name from universal_sets.","on_invalid":"reject"},{"name":"name","type":"string","required":false,"description":"Only cards whose name contains this text.","on_invalid":"reject","aliases":["player"]},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"total_desc","label":"Most graded first (default)"},{"value":"gems_desc","label":"Most gem-grade copies first"},{"value":"gem_rate_desc","label":"Highest gem rate first"},{"value":"gem_rate_asc","label":"Lowest gem rate first (hardest to gem)"},{"value":"total_asc","label":"Least graded first (lowest population)"}],"default":"total_desc"},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"Page of rows.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"min_total","type":"integer","required":false,"description":"Only rows with at least this many graded.","on_invalid":"reject","default":0,"minimum":0}],"returns":"set{set_id, year, set_name, category, url}, totals{cards, total_graded, gems}, results[]{checklist_id, year, set_name, name, card_number, parallel, category, description, total_graded, gems, gem_rate, gem_rate_percent, universal_grades[]{grade, label, count}, by_grader[]{grader, total_graded, gems, gem_rate, grades[]{grade (e.g. 10, 9.5, 10 Pristine, 10 Black Label, Auth), count, universal_grade, is_gem}, description, last_graded, last_gem_date, data_date, gemrate_id, grader_pop_report_url}}, count, total_rows, has_more","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":3},"example_params":{"set_id":"535f4f725225a27e2c76df910cccab6c4659803d"}},{"name":"set_search","description":"Find PSA sets by name across every year and category (e.g. '2023 prizm basketball'): year, category, the set name to use in set_pop / set_history and the set's total PSA graded.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Year, brand, product and sport words (at least 3 characters). PSA sets only - the site offers this search for PSA.","on_invalid":"reject","example":"2023 prizm basketball","aliases":["q","set_name"]}],"returns":"query, results[]{year, category, set_name, description, psa_total_graded}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard base set"}},{"name":"iconic_cards","description":"GemRate's Iconic Tracker: about 100 of the most iconic sports and TCG cards, ranked, each with its combined population and gem rate across PSA, BGS, SGC and CGC, the universal grade breakdown and every grader's total, gems, grade counts, last graded and last gem date.","required_params":[],"optional_params":["category","name","sort","limit","page"],"params":[{"name":"category","type":"string","required":false,"description":"Only this category (baseball, basketball, football, pokemon...), as the tracker labels it.","on_invalid":"reject","example":"baseball"},{"name":"name","type":"string","required":false,"description":"Only cards whose name contains this text.","on_invalid":"reject","aliases":["player"]},{"name":"sort","type":"enum","required":false,"description":"Row order.","on_invalid":"reject","allowed_values":[{"value":"rank","label":"The tracker's rank"},{"value":"total_desc","label":"Most graded first (default)"},{"value":"gems_desc","label":"Most gem-grade copies first"},{"value":"gem_rate_desc","label":"Highest gem rate first"},{"value":"gem_rate_asc","label":"Lowest gem rate first (hardest to gem)"},{"value":"total_asc","label":"Least graded first (lowest population)"}],"default":"rank"},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"Page of rows.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000}],"returns":"results[]{rank, checklist_id, year, set_name, name, card_number, parallel, category, description, total_graded, gems, gem_rate, gem_rate_percent, universal_grades[], by_grader[]{grader, total_graded, gems, gem_rate, grades[]{grade (e.g. 10, 9.5, 10 Pristine, 10 Black Label, Auth), count, universal_grade, is_gem}, last_graded, last_gem_date, ...}, collectors_note}, count, total_rows, has_more","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"baseball"}},{"name":"grading_volume","description":"How many cards are being graded: total graded all time, graded yesterday and in the last 7 and 30 days against the prior period, daily average, annual pace, the same per category, daily, weekly and monthly volume, and this week's most graded players, sets and cards (sports or TCG).","required_params":[],"optional_params":["segment"],"params":[{"name":"segment","type":"enum","required":false,"description":"Which top-players/sets/cards lists to return (volume figures cover every category either way).","on_invalid":"reject","allowed_values":[{"value":"combined","label":"Sports and TCG"},{"value":"sports","label":"Sports cards"},{"value":"tcg","label":"TCG"}],"default":"combined"}],"returns":"segment, summary{date, grading_date, total_graded_all_time, graded_last_day, graded_prior_day, graded_last_7_days, graded_prior_7_days, graded_last_30_days, graded_prior_30_days, change_percent_day, change_percent_7_days, change_percent_30_days}, daily_average_past_30_days, daily_average_prior_30_days, annual_pace, by_category[]{category, …same fields}, top_players_this_week[]{name, category, graded_all_time, graded_last_week, graded_prior_week, weekly_change_percent}, top_sets_this_week[]{year, set_name, category, …}, top_cards_this_week[]{year, set_name, name, card_number, parallel, graded_all_time, gems_all_time, graded_last_week, gem_rate_all_time_percent, …}, daily[]{date, graded, total_graded_all_time}, weekly[]{week, graded}, monthly[]{month, graded}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{}}]},{"name":"generate","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Generation API — create PDFs, social/OG images, charts, QR codes, barcodes (EAN/UPC/Code-128/ISBN), favicon bundles, WiFi-join QR, code-snippet images, vCard (.vcf) and iCal (.ics) files from templates, inline HTML/CSS, or a single parameter set (stateless: input → ready-to-use asset)","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/generate/v1","spec_available":true,"actions":[{"name":"pdf_render","description":"Render a PDF from inline HTML/CSS (Jinja2) or a built-in template_name + data (invoice/receipt/certificate/report). WeasyPrint, fonts pinned, network-off. Output: inline base64 (≤8MB) or one-time download token.","required_params":[],"optional_params":["html","template_name","data","paper","filename","allow_hosts"],"params":[{"name":"html","type":"string","required":false,"description":"Inline HTML/CSS document (Jinja2 syntax allowed; rendered in a SANDBOXED env — no code execution). Mutually exclusive with template_name.","on_invalid":"ignore","example":"<h1>{{ title }}</h1>","aliases":["html_string"]},{"name":"template_name","type":"enum","required":false,"description":"Built-in PDF template (stateless — lives in engine, not stored). Supply `data` matching its contract (see template_list).","on_invalid":"reject","allowed_values":[{"value":"invoice","label":"invoice"},{"value":"receipt","label":"receipt"},{"value":"certificate","label":"certificate"},{"value":"report","label":"report"}],"aliases":["template"]},{"name":"data","type":"object","required":false,"description":"Template variables (JSON object) — merged into the template. For built-ins see each template's data_contract.","on_invalid":"ignore","example":{"title":"Hello"},"aliases":["vars","variables","context"]},{"name":"paper","type":"enum","required":false,"description":"Page size override for built-in templates.","on_invalid":"reject","allowed_values":[{"value":"A4","label":"A4"},{"value":"A4 landscape","label":"A4 landscape"},{"value":"Letter","label":"Letter"},{"value":"Letter landscape","label":"Letter landscape"},{"value":"A5","label":"A5"},{"value":"Legal","label":"Legal"}]},{"name":"filename","type":"string","required":false,"description":"Suggested download filename.","on_invalid":"ignore","example":"invoice-1042.pdf"},{"name":"allow_hosts","type":"string","required":false,"description":"Comma-separated https hosts whose images/CSS the PDF may fetch (default NONE = network-off, SSRF-safe). Use data: URIs to embed assets without this.","on_invalid":"ignore","example":"cdn.example.com"}],"returns":"file{file_b64|download_token, filename, content_type=application/pdf, bytes, pages_hint, delivery}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"template_name":"invoice","data":{"company":{"name":"Acme"},"items":[{"description":"Widget","qty":2,"unit_price":9.5}],"subtotal":19.0,"total":19.0}}},{"name":"pdf_from_html","description":"Shortcut for rendering inline HTML directly to PDF — the same WeasyPrint engine as pdf_render; `html` is required.","required_params":["html"],"optional_params":["data","paper","filename","allow_hosts"],"params":[{"name":"html","type":"string","required":true,"description":"HTML/CSS document to render (Jinja2 allowed, sandboxed).","on_invalid":"reject","example":"<!doctype html><h1>Report</h1>","aliases":["html_string"]},{"name":"data","type":"object","required":false,"description":"Optional Jinja2 variables for the HTML.","on_invalid":"ignore","aliases":["vars"]},{"name":"paper","type":"enum","required":false,"description":"Page size (only if your CSS uses {{ paper }}).","on_invalid":"reject","allowed_values":[{"value":"A4","label":"A4"},{"value":"A4 landscape","label":"A4 landscape"},{"value":"Letter","label":"Letter"},{"value":"A5","label":"A5"},{"value":"Legal","label":"Legal"}]},{"name":"filename","type":"string","required":false,"description":"Suggested filename.","on_invalid":"ignore","example":"page.pdf"},{"name":"allow_hosts","type":"string","required":false,"description":"Allowlisted https hosts for remote assets (default none).","on_invalid":"ignore"}],"returns":"file{...,content_type=application/pdf}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"html":"<!doctype html><h1>{{ t }}</h1>","data":{"t":"Hello"}}},{"name":"pdf_from_url","description":"Render a built-in or inline template to PDF, populating it with data fetched live from a JSON URL you supply. Useful when your invoice or report data lives at a public API endpoint — no manual copy-paste needed.","required_params":["data_url"],"optional_params":["template_name","html","data_path","paper","filename"],"params":[{"name":"data_url","type":"string","required":true,"description":"https URL returning a JSON object used as template `data`.","on_invalid":"reject","example":"https://api.example.com/invoice/1042.json","aliases":["url","json_url"]},{"name":"template_name","type":"enum","required":false,"description":"Built-in template to fill.","on_invalid":"reject","allowed_values":[{"value":"invoice","label":"invoice"},{"value":"receipt","label":"receipt"},{"value":"certificate","label":"certificate"},{"value":"report","label":"report"}],"aliases":["template"]},{"name":"html","type":"string","required":false,"description":"Inline HTML template (instead of template_name).","on_invalid":"ignore"},{"name":"data_path","type":"string","required":false,"description":"Optional dotted path into the fetched JSON to use as data (e.g. 'result.invoice').","on_invalid":"ignore","example":"data.invoice"},{"name":"paper","type":"enum","required":false,"description":"Page size override.","on_invalid":"reject","allowed_values":[{"value":"A4","label":"A4"},{"value":"A4 landscape","label":"A4 landscape"},{"value":"Letter","label":"Letter"},{"value":"A5","label":"A5"},{"value":"Legal","label":"Legal"}]},{"name":"filename","type":"string","required":false,"description":"Suggested filename.","on_invalid":"ignore"}],"returns":"file{...,content_type=application/pdf}, data_source","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"data_url":"https://api.github.com/repos/python/cpython"}},{"name":"og_image","description":"Render a social / Open Graph card image (1200×630 default) from a built-in template or an inline layout spec. Supports automatic text-wrap and font scaling for long titles, colour gradients and badge overlays.","required_params":[],"optional_params":["template_name","layout","vars","width","height","format","filename"],"params":[{"name":"template_name","type":"enum","required":false,"description":"Built-in card layout. See template_list for each layout's vars.","on_invalid":"reject","allowed_values":[{"value":"og_basic","label":"og_basic"},{"value":"og_article","label":"og_article"},{"value":"og_quote","label":"og_quote"},{"value":"og_product","label":"og_product"}],"default":"og_basic","example":"og_basic","aliases":["template"]},{"name":"vars","type":"object","required":false,"description":"Card content (JSON): title/subtitle/badge/quote/author/site/name/tagline/cta + colors bg/bg2/fg/accent (hex).","on_invalid":"ignore","example":{"title":"Launch day","subtitle":"v1.0 is live","bg":"#0b1f3a","accent":"#38bdf8"},"aliases":["data","variables"]},{"name":"layout","type":"object","required":false,"description":"Inline layout override (JSON) — {size:[w,h], ...} for a fully custom card without a built-in template.","on_invalid":"ignore"},{"name":"width","type":"integer","required":false,"description":"Canvas width px.","on_invalid":"ignore","default":1200,"example":1200,"minimum":200,"maximum":4000},{"name":"height","type":"integer","required":false,"description":"Canvas height px.","on_invalid":"ignore","default":630,"example":630,"minimum":200,"maximum":4000},{"name":"format","type":"enum","required":false,"description":"Output image format.","on_invalid":"reject","allowed_values":[{"value":"png","label":"PNG (default)"},{"value":"jpeg","label":"JPEG"},{"value":"webp","label":"WebP"}],"default":"png","example":"png","aliases":["image_format"]},{"name":"filename","type":"string","required":false,"description":"Suggested filename.","on_invalid":"ignore","example":"og-card.png"}],"returns":"file{file_b64|download_token, content_type=image/png|jpeg|webp, bytes}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"template_name":"og_basic","vars":{"title":"Launch day","subtitle":"v1.0 is live"}}},{"name":"image_from_template","description":"Alias of og_image (explicit Bannerbear 'create image from template' naming). template_name + vars → PNG.","required_params":["template_name"],"optional_params":["vars","width","height","format","filename"],"params":[{"name":"template_name","type":"enum","required":true,"description":"Built-in image template.","on_invalid":"reject","allowed_values":[{"value":"og_basic","label":"og_basic"},{"value":"og_article","label":"og_article"},{"value":"og_quote","label":"og_quote"},{"value":"og_product","label":"og_product"}],"aliases":["template"]},{"name":"vars","type":"object","required":false,"description":"Template variables (see template_list).","on_invalid":"ignore","aliases":["data"]},{"name":"width","type":"integer","required":false,"description":"Canvas width px.","on_invalid":"ignore","default":1200,"example":1200,"minimum":200,"maximum":4000},{"name":"height","type":"integer","required":false,"description":"Canvas height px.","on_invalid":"ignore","default":630,"example":630,"minimum":200,"maximum":4000},{"name":"format","type":"enum","required":false,"description":"Output format.","on_invalid":"reject","allowed_values":[{"value":"png","label":"PNG (default)"},{"value":"jpeg","label":"JPEG"},{"value":"webp","label":"WebP"}],"default":"png","example":"png","aliases":["image_format"]},{"name":"filename","type":"string","required":false,"description":"Suggested filename.","on_invalid":"ignore"}],"returns":"file{...,content_type=image/*}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"template_name":"invoice"}},{"name":"image_from_url","description":"Render an image template with `vars` fetched from a JSON URL (proxy, SSRF-validated). Data-driven banner generation.","required_params":["data_url"],"optional_params":["template_name","layout","data_path","width","height","format","filename"],"params":[{"name":"data_url","type":"string","required":true,"description":"https URL returning a JSON object used as card `vars`.","on_invalid":"reject","example":"https://api.example.com/card.json","aliases":["url","json_url"]},{"name":"template_name","type":"enum","required":false,"description":"Built-in template.","on_invalid":"reject","allowed_values":[{"value":"og_basic","label":"og_basic"},{"value":"og_article","label":"og_article"},{"value":"og_quote","label":"og_quote"},{"value":"og_product","label":"og_product"}],"default":"og_basic","example":"og_basic","aliases":["template"]},{"name":"layout","type":"object","required":false,"description":"Inline layout override (JSON).","on_invalid":"ignore"},{"name":"data_path","type":"string","required":false,"description":"Dotted path into the JSON to use as vars.","on_invalid":"ignore"},{"name":"width","type":"integer","required":false,"description":"Canvas width px.","on_invalid":"ignore","default":1200,"example":1200,"minimum":200,"maximum":4000},{"name":"height","type":"integer","required":false,"description":"Canvas height px.","on_invalid":"ignore","default":630,"example":630,"minimum":200,"maximum":4000},{"name":"format","type":"enum","required":false,"description":"Output format.","on_invalid":"reject","allowed_values":[{"value":"png","label":"PNG (default)"},{"value":"jpeg","label":"JPEG"},{"value":"webp","label":"WebP"}],"default":"png","example":"png","aliases":["image_format"]},{"name":"filename","type":"string","required":false,"description":"Suggested filename.","on_invalid":"ignore"}],"returns":"file{...,content_type=image/*}, data_source","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"data_url":"https://api.github.com/repos/python/cpython","template_name":"og_basic"}},{"name":"chart","description":"Render a chart from a Chart.js-style spec — returns a PNG or SVG image. Supported chart types: bar, horizontal_bar, line, area, pie, doughnut, scatter and radar. Powered by a matplotlib backend.","required_params":["spec"],"optional_params":["format","filename"],"params":[{"name":"spec","type":"object","required":true,"description":"Chart spec: {type, data:{labels:[...], datasets:[{label, data:[...], color?}]}, options:{title, x_label, y_label, width, height, legend}}.","on_invalid":"ignore","example":{"type":"bar","data":{"labels":["Q1","Q2","Q3"],"datasets":[{"label":"Sales","data":[12,19,7]}]},"options":{"title":"Quarterly Sales"}},"aliases":["chart","config"]},{"name":"format","type":"enum","required":false,"description":"Output format.","on_invalid":"reject","allowed_values":[{"value":"png","label":"PNG raster (default)"},{"value":"svg","label":"SVG vector"}],"default":"png","example":"png","aliases":["image_format"]},{"name":"filename","type":"string","required":false,"description":"Suggested filename.","on_invalid":"ignore","example":"chart.png"}],"returns":"file{file_b64|download_token, content_type=image/png|svg+xml, bytes, chart_type}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"spec":{"type":"bar","data":{"labels":["A","B","C"],"datasets":[{"label":"x","data":[1,2,3]}]}}}},{"name":"chart_types","description":"List all supported chart types with a description of each. No input required.","required_params":[],"optional_params":[],"params":[],"returns":"types[{type, description}]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"batch_pdf","description":"Render up to 20 PDFs in one call. `jobs` = array of pdf_render param objects.","required_params":["jobs"],"optional_params":[],"params":[{"name":"jobs","type":"object","required":true,"description":"Array of ≤20 pdf_render param objects ({html|template_name, data, ...}).","on_invalid":"ignore","aliases":["items","documents"]}],"returns":"files[] (one delivery entry per job; per-job error captured inline), count","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":null},{"name":"batch_image","description":"Render up to 20 images in one call. `jobs` = array of og_image param objects.","required_params":["jobs"],"optional_params":[],"params":[{"name":"jobs","type":"object","required":true,"description":"Array of ≤20 og_image param objects ({template_name|layout, vars, ...}).","on_invalid":"ignore","aliases":["items","images"]}],"returns":"files[] (one entry per job), count","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":null},{"name":"template_list","description":"List built-in templates (PDF + image) with their data contracts. Stateless — there is NO stored-template management (create/upload/delete out of scope).","required_params":[],"optional_params":[],"params":[],"returns":"pdf[{name,description,data_contract}], og_image[{name,...,size}], note","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"validate_html","description":"Lint HTML/CSS for the PDF path WITHOUT rendering: flags remote resources that the SSRF-safe renderer will block, size, and tag-balance hints. Deterministic.","required_params":["html"],"optional_params":[],"params":[{"name":"html","type":"string","required":true,"description":"HTML document to lint.","on_invalid":"reject","example":"<h1>Hi</h1><img src='https://x/y.png'>"}],"returns":"valid, bytes, remote_resources[], tags_open, tags_close, issues[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"html":"<img src='https://evil.example/x.png'>"}},{"name":"health","description":"Renderer diagnostics — which backends (WeasyPrint/Pillow/matplotlib) are loadable and their versions. No input.","required_params":[],"optional_params":[],"params":[],"returns":"pdf_backend, weasyprint_version, image_backend, chart_backend, matplotlib_version, max_image_pixels","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"qr","description":"Generate a QR code (PNG or SVG) with custom fg/bg color, error-correction, and an OPTIONAL center logo fetched from logo_url (SSRF-guarded, via proxy). Use error_correction=h when embedding a logo so it stays scannable.","required_params":["data"],"optional_params":["format","error_correction","scale","border","color","background","logo_url","logo_size"],"params":[{"name":"data","type":"string","required":true,"description":"The content to encode: a URL, text, vCard string, etc.","on_invalid":"reject","example":"https://reefapi.com","aliases":["text","content","value"]},{"name":"format","type":"enum","required":false,"description":"Output image format. png supports logo-embed + colors; svg is scalable (logo-embed requires png).","on_invalid":"reject","allowed_values":[{"value":"png","label":"png"},{"value":"svg","label":"svg"}],"default":"png","example":"png","aliases":["kind","output"]},{"name":"error_correction","type":"enum","required":false,"description":"Recovery level: l~7% · m~15% · q~25% · h~30%. Use h with a logo.","on_invalid":"reject","allowed_values":[{"value":"l","label":"l"},{"value":"m","label":"m"},{"value":"q","label":"q"},{"value":"h","label":"h"}],"default":"m","example":"m","aliases":["ec","error"]},{"name":"scale","type":"integer","required":false,"description":"Module size in pixels.","on_invalid":"reject","default":8,"example":8,"minimum":1,"maximum":40,"aliases":["size"]},{"name":"border","type":"integer","required":false,"description":"Quiet-zone width in modules (spec default 4).","on_invalid":"reject","default":4,"example":4,"minimum":0,"maximum":20},{"name":"color","type":"string","required":false,"description":"Foreground (dark) color: #rrggbb / #rgb / basic CSS name.","on_invalid":"ignore","example":"#000000","aliases":["fg","foreground","dark"]},{"name":"background","type":"string","required":false,"description":"Background color, or 'transparent'.","on_invalid":"ignore","example":"#ffffff","aliases":["bg","light"]},{"name":"logo_url","type":"string","required":false,"description":"URL of a logo to embed in the center (PNG output only). Fetched through the proxy with a full SSRF guard.","on_invalid":"ignore","example":"https://reefapi.com/logo.png","aliases":["logo","image_url"]},{"name":"logo_size","type":"number","required":false,"description":"Logo size as a fraction of the QR side (0.05–0.30; >0.25 risks unscannable codes even at EC-H).","on_invalid":"reject","default":0.22,"example":0.22,"minimum":0.05,"maximum":0.3}],"returns":"png_base64+data_uri | svg, version, error_correction, designator, modules, is_micro, logo_embedded","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"data":"https://reefapi.com","format":"png"}},{"name":"barcode","description":"Generate a 1D barcode IMAGE (PNG or SVG) from data: EAN-13/8, UPC-A, Code-128, Code-39, ISBN-10/13, ITF, GS1-128, JAN, PZN, Codabar. Check digits are validated — a wrong EAN/UPC/ISBN check digit returns a structured error, not a silent fix.","required_params":["data","type"],"optional_params":["format","show_text","module_height","color","background"],"params":[{"name":"data","type":"string","required":true,"description":"The value to encode. For EAN/UPC supply the digits; the check digit is computed (or validated if you include it).","on_invalid":"reject","example":"5901234123457","aliases":["text","value","content"]},{"name":"type","type":"enum","required":true,"description":"Barcode symbology.","on_invalid":"reject","allowed_values":[{"value":"ean13","label":"ean13"},{"value":"ean8","label":"ean8"},{"value":"ean14","label":"ean14"},{"value":"upca","label":"upca"},{"value":"code128","label":"code128"},{"value":"code39","label":"code39"},{"value":"isbn13","label":"isbn13"},{"value":"isbn10","label":"isbn10"},{"value":"issn","label":"issn"},{"value":"itf","label":"itf"},{"value":"gs1_128","label":"gs1_128"},{"value":"jan","label":"jan"},{"value":"pzn","label":"pzn"},{"value":"codabar","label":"codabar"}],"example":"ean13","aliases":["symbology","format_type"]},{"name":"format","type":"enum","required":false,"description":"Output image format.","on_invalid":"reject","allowed_values":[{"value":"png","label":"png"},{"value":"svg","label":"svg"}],"default":"png","example":"png","aliases":["kind","output"]},{"name":"show_text","type":"boolean","required":false,"description":"Print the human-readable value under the bars.","on_invalid":"ignore","default":true,"example":true,"aliases":["write_text"]},{"name":"module_height","type":"number","required":false,"description":"Bar height in mm.","on_invalid":"reject","default":15.0,"example":15.0,"minimum":2.0,"maximum":100.0},{"name":"color","type":"string","required":false,"description":"Bar color (#rrggbb / name).","on_invalid":"ignore","example":"#000000","aliases":["fg","foreground"]},{"name":"background","type":"string","required":false,"description":"Background color (#rrggbb / name).","on_invalid":"ignore","example":"#ffffff","aliases":["bg"]}],"returns":"png_base64+data_uri | svg, type, full_code (with check digit), label, bytes; on bad check digit → error with the valid_code","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"data":"5901234123457","type":"ean13"}},{"name":"code_image","description":"Render a syntax-highlighted code snippet as a PNG with a carbon/ray.so-style window frame. 500+ languages (Pygments), 40+ themes, optional line numbers.","required_params":["code"],"optional_params":["language","theme","window_style","line_numbers","font_size"],"params":[{"name":"code","type":"string","required":true,"description":"The source code to render.","on_invalid":"reject","example":"def hello(name):\n    return f'Hi {name}'","aliases":["source","text"]},{"name":"language","type":"string","required":false,"description":"Language for highlighting (python, javascript, go, rust, sql…). Omit to auto-detect.","on_invalid":"ignore","example":"python","aliases":["lang"]},{"name":"theme","type":"enum","required":false,"description":"Color theme (Pygments style).","on_invalid":"reject","allowed_values":[{"value":"abap","label":"abap"},{"value":"algol","label":"algol"},{"value":"algol_nu","label":"algol_nu"},{"value":"arduino","label":"arduino"},{"value":"autumn","label":"autumn"},{"value":"borland","label":"borland"},{"value":"bw","label":"bw"},{"value":"coffee","label":"coffee"},{"value":"colorful","label":"colorful"},{"value":"default","label":"default"},{"value":"dracula","label":"dracula"},{"value":"emacs","label":"emacs"},{"value":"friendly","label":"friendly"},{"value":"friendly_grayscale","label":"friendly_grayscale"},{"value":"fruity","label":"fruity"},{"value":"github-dark","label":"github-dark"},{"value":"gruvbox-dark","label":"gruvbox-dark"},{"value":"gruvbox-light","label":"gruvbox-light"},{"value":"igor","label":"igor"},{"value":"inkpot","label":"inkpot"},{"value":"lightbulb","label":"lightbulb"},{"value":"lilypond","label":"lilypond"},{"value":"lovelace","label":"lovelace"},{"value":"manni","label":"manni"},{"value":"material","label":"material"},{"value":"monokai","label":"monokai"},{"value":"murphy","label":"murphy"},{"value":"native","label":"native"},{"value":"nord","label":"nord"},{"value":"nord-darker","label":"nord-darker"},{"value":"one-dark","label":"one-dark"},{"value":"paraiso-dark","label":"paraiso-dark"},{"value":"paraiso-light","label":"paraiso-light"},{"value":"pastie","label":"pastie"},{"value":"perldoc","label":"perldoc"},{"value":"rainbow_dash","label":"rainbow_dash"},{"value":"rrt","label":"rrt"},{"value":"sas","label":"sas"},{"value":"solarized-dark","label":"solarized-dark"},{"value":"solarized-light","label":"solarized-light"},{"value":"staroffice","label":"staroffice"},{"value":"stata-dark","label":"stata-dark"},{"value":"stata-light","label":"stata-light"},{"value":"tango","label":"tango"},{"value":"trac","label":"trac"},{"value":"vim","label":"vim"},{"value":"vs","label":"vs"},{"value":"xcode","label":"xcode"},{"value":"zenburn","label":"zenburn"}],"default":"monokai","example":"monokai","aliases":["style"]},{"name":"window_style","type":"enum","required":false,"description":"Frame: dark/darker/light window chrome with traffic-light dots, or 'none' for a bare image.","on_invalid":"reject","allowed_values":[{"value":"dark","label":"dark"},{"value":"darker","label":"darker"},{"value":"light","label":"light"},{"value":"none","label":"none"}],"default":"dark","example":"dark","aliases":["window"]},{"name":"line_numbers","type":"boolean","required":false,"description":"Show line numbers in the gutter.","on_invalid":"ignore","default":false,"example":false,"aliases":["line_nums"]},{"name":"font_size","type":"integer","required":false,"description":"Font size in px.","on_invalid":"reject","default":20,"example":20,"minimum":10,"maximum":48}],"returns":"png_base64+data_uri, language (resolved), theme, window_style, lines, bytes","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"code":"print('hello')","language":"python"}},{"name":"favicon","description":"Turn one source image into a complete favicon bundle: multi-resolution favicon.ico, a named PNG set (16→512 incl. apple-touch-icon + android-chrome), site.webmanifest, and the ready-to-paste <head> <link> snippet. Source from image_url (SSRF-guarded) or a base64 upload.","required_params":[],"optional_params":["image_url","image_base64"],"params":[{"name":"image_url","type":"string","required":false,"description":"URL of the source image (PNG/JPG/etc). Fetched through the proxy with a full SSRF guard. Provide this OR image_base64.","on_invalid":"ignore","example":"https://reefapi.com/logo.png","aliases":["url","logo_url"]},{"name":"image_base64","type":"string","required":false,"description":"Base64-encoded source image (data-URI prefix accepted). Use instead of image_url for direct uploads.","on_invalid":"ignore","aliases":["upload","image","file"]}],"returns":"favicon_ico{png_base64,sizes}, pngs{name:{size,png_base64}}, site_webmanifest{}, link_snippet (HTML), source{width,height}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"image_url":"https://reefapi.com/logo.png"}},{"name":"vcard","description":"Build a vCard (.vcf) contact file from contact fields (vCard 3.0 or 4.0). Returns the raw .vcf text + a base64 data-URI you can download or encode into a QR.","required_params":[],"optional_params":["full_name","first_name","last_name","organization","title","phone","email","url","address","note","birthday","version","as_qr"],"params":[{"name":"full_name","type":"string","required":false,"description":"Full display name (or supply first_name/last_name).","on_invalid":"ignore","example":"Jane Doe","aliases":["name","fn"]},{"name":"first_name","type":"string","required":false,"description":"Given name.","on_invalid":"ignore","example":"Jane","aliases":["given_name"]},{"name":"last_name","type":"string","required":false,"description":"Family name.","on_invalid":"ignore","example":"Doe","aliases":["family_name"]},{"name":"organization","type":"string","required":false,"description":"Company/organization.","on_invalid":"ignore","example":"Acme Inc","aliases":["org","company"]},{"name":"title","type":"string","required":false,"description":"Job title.","on_invalid":"ignore","example":"CTO","aliases":["job_title"]},{"name":"phone","type":"string","required":false,"description":"Phone number(s) — string or array.","on_invalid":"ignore","example":"+1-555-0100","aliases":["phones","tel"]},{"name":"email","type":"string","required":false,"description":"Email address(es) — string or array.","on_invalid":"ignore","example":"jane@acme.com","aliases":["emails"]},{"name":"url","type":"string","required":false,"description":"Website URL(s) — string or array.","on_invalid":"ignore","example":"https://acme.com","aliases":["website","urls"]},{"name":"address","type":"string","required":false,"description":"Postal address (single line).","on_invalid":"ignore","example":"1 Market St, San Francisco, CA"},{"name":"note","type":"string","required":false,"description":"Free-text note.","on_invalid":"ignore","example":"Met at the API conference"},{"name":"birthday","type":"string","required":false,"description":"Birthday (YYYY-MM-DD).","on_invalid":"ignore","example":"1990-05-01"},{"name":"version","type":"enum","required":false,"description":"vCard spec version (3.0 = widest compatibility, 4.0 = modern).","on_invalid":"reject","allowed_values":[{"value":"3.0","label":"3.0"},{"value":"4.0","label":"4.0"}],"default":"3.0","example":"3.0"},{"name":"as_qr","type":"boolean","required":false,"description":"Also return a scannable PNG QR of the vCard (add-to-contacts).","on_invalid":"ignore","default":false,"example":false}],"returns":"vcard (raw .vcf text), data_uri (text/vcard), full_name, version, field_count [+ qr_png_base64 if as_qr]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"full_name":"Jane Doe","email":"jane@acme.com","phone":"+15550100"}},{"name":"ical","description":"Build an iCalendar (.ics) event file from event fields (RFC 5545). Supports timed or all-day events, end-time or duration, location, description, organizer. Returns the raw .ics + a base64 data-URI.","required_params":["summary","start"],"optional_params":["end","duration_minutes","location","description","url","organizer_email","uid","as_qr"],"params":[{"name":"summary","type":"string","required":true,"description":"Event title.","on_invalid":"reject","example":"Team Standup","aliases":["title"]},{"name":"start","type":"string","required":true,"description":"Start: ISO-8601 (2026-07-01T15:00:00+00:00) or YYYY-MM-DD (all-day).","on_invalid":"reject","example":"2026-07-01T15:00:00Z","aliases":["start_time"]},{"name":"end","type":"string","required":false,"description":"End time (ISO-8601 or YYYY-MM-DD). Omit to use duration_minutes.","on_invalid":"ignore","example":"2026-07-01T15:30:00Z","aliases":["end_time"]},{"name":"duration_minutes","type":"integer","required":false,"description":"Event length in minutes (used when `end` is absent).","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":100000},{"name":"location","type":"string","required":false,"description":"Event location.","on_invalid":"ignore","example":"Zoom / HQ Room 4"},{"name":"description","type":"string","required":false,"description":"Event details.","on_invalid":"ignore","example":"Daily sync","aliases":["note"]},{"name":"url","type":"string","required":false,"description":"Event URL.","on_invalid":"ignore","example":"https://meet.example.com/abc"},{"name":"organizer_email","type":"string","required":false,"description":"Organizer email.","on_invalid":"ignore","example":"host@acme.com"},{"name":"uid","type":"string","required":false,"description":"Stable UID (auto-generated if omitted).","on_invalid":"ignore"},{"name":"as_qr","type":"boolean","required":false,"description":"Also return a scannable PNG QR of the event.","on_invalid":"ignore","default":false,"example":false}],"returns":"ical (raw .ics text), data_uri (text/calendar), summary, all_day, uid, start [+ qr_png_base64 if as_qr]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"summary":"Standup","start":"2026-07-01T15:00:00Z","duration_minutes":30}},{"name":"wifi","description":"Generate a WiFi-join QR code (PNG/SVG) from network credentials — scan to connect, no typing. Encodes the standard WIFI: payload (WPA/WEP/open, hidden networks).","required_params":["ssid"],"optional_params":["password","encryption","hidden","format","scale","error_correction"],"params":[{"name":"ssid","type":"string","required":true,"description":"Network name (SSID).","on_invalid":"reject","example":"MyNetwork","aliases":["network","name"]},{"name":"password","type":"string","required":false,"description":"Network password (required unless encryption=nopass).","on_invalid":"ignore","example":"s3cret-pass","aliases":["pass","psk"]},{"name":"encryption","type":"enum","required":false,"description":"Security type: WPA (incl. WPA2/WPA3), WEP, or nopass (open network).","on_invalid":"reject","allowed_values":[{"value":"WPA","label":"WPA"},{"value":"WEP","label":"WEP"},{"value":"nopass","label":"nopass"}],"default":"WPA","example":"WPA"},{"name":"hidden","type":"boolean","required":false,"description":"Mark the network as hidden (non-broadcast SSID).","on_invalid":"ignore","default":false,"example":false},{"name":"format","type":"enum","required":false,"description":"Output image format.","on_invalid":"reject","allowed_values":[{"value":"png","label":"png"},{"value":"svg","label":"svg"}],"default":"png","example":"png","aliases":["kind"]},{"name":"scale","type":"integer","required":false,"description":"Module size in pixels.","on_invalid":"reject","default":8,"example":8,"minimum":1,"maximum":40,"aliases":["size"]},{"name":"error_correction","type":"enum","required":false,"description":"QR recovery level.","on_invalid":"reject","allowed_values":[{"value":"l","label":"l"},{"value":"m","label":"m"},{"value":"q","label":"q"},{"value":"h","label":"h"}],"default":"m","example":"m","aliases":["ec"]}],"returns":"png_base64+data_uri | svg, ssid, encryption, hidden, version, modules","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"ssid":"MyNet","password":"pw12345","encryption":"WPA"}},{"name":"batch","description":"Generate up to 50 small assets in one request. Items run independently — a bad item yields its own error entry, never fails the batch. NOTE: items that fetch a remote logo_url/image_url ARE supported and SSRF-guarded.","required_params":["items"],"optional_params":[],"params":[{"name":"items","type":"array","required":true,"description":"Up to 50 items, each {action, params} where action is qr|barcode|code_image|favicon|vcard|ical|wifi.","on_invalid":"reject","example":[{"action":"qr","params":{"data":"https://reefapi.com"}},{"action":"barcode","params":{"data":"5901234123457","type":"ean13"}}],"aliases":["calls","requests"]}],"returns":"count, ok_count, results[{action, ok, data|error}]","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"items":[{"action":"qr","params":{"data":"x"}},{"action":"barcode","params":{"data":"5901234123457","type":"ean13"}},{"action":"barcode","params":{"data":"bad","type":"ean13"}}]}}]},{"name":"geo-intel","category":{"id":"utilities","title":"Utilities & AI"},"title":"AI Search Visibility API (GEO) — measure a website's AI citability: AI-crawler access (robots.txt), llms.txt, schema.org structured data and meta signals → a 0-100 AI-readiness score with ranked fixes","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/geo-intel/v1","spec_available":true,"actions":[{"name":"check","description":"Full AI-readiness report for a URL: AI-crawler access map + llms.txt + schema + meta + 0-100 score + ranked fix recommendations. One call, everything.","required_params":["url"],"optional_params":["path","bots","follow_redirects"],"params":[{"name":"url","type":"string","required":true,"description":"The site to analyse. Accepts a full URL (https://example.com/page) or a bare domain (example.com → https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked. Alias: domain.","on_invalid":"reject","example":"https://docs.anthropic.com","aliases":["domain","site","website"]},{"name":"path","type":"string","required":false,"description":"The path to evaluate robots.txt access against (default '/'). Use a real content path (e.g. /blog/post) to test whether AI bots may fetch THAT page.","on_invalid":"ignore","default":"/","example":"/"},{"name":"bots","type":"array","required":false,"description":"Optional subset of AI-bot tokens to report (comma-separated or array). Omit for the full 50+ bot map. Unknown tokens are still checked against robots.txt verbatim.","on_invalid":"ignore","example":["GPTBot","ClaudeBot","PerplexityBot"]},{"name":"follow_redirects","type":"boolean","required":false,"description":"Follow redirects (e.g. http→https, apex→www) before analysing the final URL (default true). Each hop is independently SSRF-validated.","on_invalid":"ignore","default":true,"example":true}],"returns":"url, final_url, score{score,grade,breakdown,recommendations}, ai_crawlers{bots[],summary}, llms_txt{present,valid,sections,links}, structured_data{types,citable_types,...}, meta{canonical,og,robots_meta,...}, extractability{text_ratio,likely_js_app}, sitemaps[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://docs.anthropic.com"}},{"name":"crawlers","description":"AI-crawler access map from robots.txt: per-bot allow/block (Google longest-match), operator, AI engine, purpose (search/training/agent), crawl-delay, sitemaps.","required_params":["url"],"optional_params":["path","bots"],"params":[{"name":"url","type":"string","required":true,"description":"The site to analyse. Accepts a full URL (https://example.com/page) or a bare domain (example.com → https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked. Alias: domain.","on_invalid":"reject","example":"https://docs.anthropic.com","aliases":["domain","site","website"]},{"name":"path","type":"string","required":false,"description":"The path to evaluate robots.txt access against (default '/'). Use a real content path (e.g. /blog/post) to test whether AI bots may fetch THAT page.","on_invalid":"ignore","default":"/","example":"/"},{"name":"bots","type":"array","required":false,"description":"Optional subset of AI-bot tokens to report (comma-separated or array). Omit for the full 50+ bot map. Unknown tokens are still checked against robots.txt verbatim.","on_invalid":"ignore","example":["GPTBot","ClaudeBot","PerplexityBot"]}],"returns":"robots_status, bots[] (token, operator, engine, category, allowed, rule, critical, cites), summary{total,allowed,blocked,critical_blocked}, blanket_block_all, sitemaps[], crawl_delays{}, parse_errors[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.nytimes.com"}},{"name":"llms_txt","description":"Detect + parse + validate /llms.txt (and /llms-full.txt) — the emerging AI-context standard. Content-type sniffed so an HTML 404 can't masquerade as a real file.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"The site to analyse. Accepts a full URL (https://example.com/page) or a bare domain (example.com → https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked. Alias: domain.","on_invalid":"reject","example":"https://docs.anthropic.com","aliases":["domain","site","website"]}],"returns":"llms_txt{present,valid,title,sections[],links_sample[],findings[],bytes}, llms_full_txt{present,bytes}, recommendations[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://stripe.com"}},{"name":"schema","description":"Extract and classify schema.org structured data (JSON-LD and @graph) for AI citability signals: Organization, Article, FAQ, BreadcrumbList, Product, Speakable — plus microdata and RDFa presence.","required_params":["url"],"optional_params":["follow_redirects"],"params":[{"name":"url","type":"string","required":true,"description":"The site to analyse. Accepts a full URL (https://example.com/page) or a bare domain (example.com → https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked. Alias: domain.","on_invalid":"reject","example":"https://docs.anthropic.com","aliases":["domain","site","website"]},{"name":"follow_redirects","type":"boolean","required":false,"description":"Follow redirects (e.g. http→https, apex→www) before analysing the final URL (default true). Each hop is independently SSRF-validated.","on_invalid":"ignore","default":true,"example":true}],"returns":"structured_data{jsonld_blocks,types[],citable_types[],high_value_types[],has_organization,has_article,has_faq,has_breadcrumb,has_speakable,has_microdata,has_rdfa}, recommendations[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.nytimes.com"}},{"name":"score","description":"Composite AI-readiness score (0-100) + transparent per-pillar breakdown (crawler_access 40 / structured_data 25 / llms_txt 15 / meta 12 / crawlability 8) + ranked recommendations.","required_params":["url"],"optional_params":["path","follow_redirects"],"params":[{"name":"url","type":"string","required":true,"description":"The site to analyse. Accepts a full URL (https://example.com/page) or a bare domain (example.com → https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked. Alias: domain.","on_invalid":"reject","example":"https://docs.anthropic.com","aliases":["domain","site","website"]},{"name":"path","type":"string","required":false,"description":"The path to evaluate robots.txt access against (default '/'). Use a real content path (e.g. /blog/post) to test whether AI bots may fetch THAT page.","on_invalid":"ignore","default":"/","example":"/"},{"name":"follow_redirects","type":"boolean","required":false,"description":"Follow redirects (e.g. http→https, apex→www) before analysing the final URL (default true). Each hop is independently SSRF-validated.","on_invalid":"ignore","default":true,"example":true}],"returns":"score, grade (A-F), breakdown{pillar:{score,max}}, recommendations[] (priority, pillar, points_recoverable, fix), signals{} (the raw inputs)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://github.com"}},{"name":"batch","description":"Score up to 20 sites concurrently in one call (each independently SSRF-guarded). Returns a compact score+grade per URL.","required_params":["urls"],"optional_params":[],"params":[{"name":"urls","type":"array","required":true,"description":"List of sites to score in one call (max 20); each is independently SSRF-guarded and fetched concurrently.","on_invalid":"reject","example":["https://stripe.com","https://github.com"]}],"returns":"results[] (url, ok, score, grade, critical_blocked[], llms_txt_present, has_structured_data) , count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"urls":["https://stripe.com","https://github.com"]}}]},{"name":"geo-postal","category":{"id":"utilities","title":"Utilities & AI"},"title":"Postal Code & Geocoding API — reverse-geocode coordinates or postal codes to administrative regions worldwide: country, state/county, ZIP/PIN, FIPS, NUTS/LAU codes and census GEOIDs","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/geo-postal/v1","spec_available":true,"actions":[{"name":"eu_regions","description":"Coordinates OR postal code → EU/EFTA/candidate statistical regions: country, NUTS 0-3 hierarchy, LAU commune (GISCO NUTS-2024 + LAU-2024 + TERCET pc2025).","required_params":[],"optional_params":["lat","lon","postal_code","country","include_geometry"],"params":[{"name":"lat","type":"number","required":false,"description":"WGS84 latitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":52.52,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"WGS84 longitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":13.405,"minimum":-180,"maximum":180,"aliases":["lng","longitude"]},{"name":"postal_code","type":"string","required":false,"description":"Postal code to resolve. Spaces/dashes are ignored, case-insensitive (e.g. '10115', '75001', 'SW1A1AA').","on_invalid":"reject","example":"10115","aliases":["postcode","zip","zip_code","pcode"]},{"name":"country","type":"string","required":false,"description":"ISO-3166 alpha-2 country code (e.g. DE, FR, TR, IN, US). Greece accepts GR or EL.","on_invalid":"ignore","example":"DE","aliases":["country_code","cc"]},{"name":"include_geometry","type":"boolean","required":false,"description":"If true, include the (simplified) boundary polygon as GeoJSON. Default false — geometries are large; lookups never depend on this.","on_invalid":"ignore","default":false,"example":false,"aliases":["geometry"]}],"returns":"found, country{code,name}, nuts0..nuts3{code,name}, lau{gisco_id,lau_id,name}, postal_places[] (postal input), normalized_input, match_type, confidence, low_confidence, source, dataset_version (+geometry if requested)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"lat":52.52,"lon":13.405}},{"name":"tr_regions","description":"Türkiye: koordinat, posta kodu VEYA il/ilçe/mahalle adı → resmî idari hiyerarşi (il+plaka, ilçe, mahalle/köy, posta kodları) + NUTS-TR istatistik kodları.","required_params":[],"optional_params":["lat","lon","postal_code","province","district","neighborhood","include_geometry"],"params":[{"name":"lat","type":"number","required":false,"description":"WGS84 latitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":52.52,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"WGS84 longitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":13.405,"minimum":-180,"maximum":180,"aliases":["lng","longitude"]},{"name":"postal_code","type":"string","required":false,"description":"Postal code to resolve. Spaces/dashes are ignored, case-insensitive (e.g. '10115', '75001', 'SW1A1AA').","on_invalid":"reject","example":"34710","aliases":["postcode","zip","zip_code","pcode"]},{"name":"province","type":"string","required":false,"description":"Province (il) name, e.g. İstanbul, Ankara, İzmir. Turkish characters optional (istanbul works).","on_invalid":"reject","example":"İstanbul","aliases":["il","city"]},{"name":"district","type":"string","required":false,"description":"District (ilçe) name within the province.","on_invalid":"reject","example":"Kadıköy","aliases":["ilce"]},{"name":"neighborhood","type":"string","required":false,"description":"Neighborhood (mahalle) or village (köy) name.","on_invalid":"reject","example":"Caferağa","aliases":["mahalle","koy","village"]},{"name":"include_geometry","type":"boolean","required":false,"description":"If true, include the (simplified) boundary polygon as GeoJSON. Default false — geometries are large; lookups never depend on this.","on_invalid":"ignore","default":false,"example":false,"aliases":["geometry"]}],"returns":"found, province{id,plate,name,nuts1..3,region,population,coordinates,phone_area_codes,is_metropolitan}, district{id,name,population}, matches[] (mahalle/köy w/ postal_code,population,kind), postal_codes[], normalized_input, match_type, confidence, source, dataset_version","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"lat":41.0082,"lon":28.9784}},{"name":"in_postal","description":"India: PIN code OR post-office name → post offices, district, state, lat/lon centroid (official All-India Pincode Directory).","required_params":[],"optional_params":["pincode","office","state","district"],"params":[{"name":"pincode","type":"string","required":false,"description":"6-digit Indian PIN code, e.g. 400001 (Mumbai GPO).","on_invalid":"reject","example":"400001","aliases":["pin","postal_code","zip"]},{"name":"office","type":"string","required":false,"description":"Post-office name to search (exact or prefix), when the PIN is unknown.","on_invalid":"reject","example":"Connaught Place","aliases":["post_office","q"]},{"name":"state","type":"string","required":false,"description":"Optional state filter for office search.","on_invalid":"ignore","example":"MAHARASHTRA"},{"name":"district","type":"string","required":false,"description":"Optional district filter for office search.","on_invalid":"ignore","example":"MUMBAI"}],"returns":"found, pincode, offices[]{name,type,delivery,district,state,lat,lon}, district, state, centroid{lat,lon}, office_count, normalized_input, match_type, confidence, source, dataset_version","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"pincode":"400001"}},{"name":"us_regions","description":"United States: ZIP code OR coordinates → state, county + 5-digit county FIPS, place, ZIP centroid, and the CGAZ state/county boundary. Built WITHOUT census.gov (GeoNames ZIP directory carries county FIPS; ANSI state-FIPS is a public-domain constant). For census-grade ZCTA + tract/block GEOIDs use the `us_census` action (TIGER/ZCTA polygons + Census Geocoder, gov-pending/91).","required_params":[],"optional_params":["postal_code","lat","lon","include_geometry"],"params":[{"name":"postal_code","type":"string","required":false,"description":"Postal code to resolve. Spaces/dashes are ignored, case-insensitive (e.g. '10115', '75001', 'SW1A1AA').","on_invalid":"reject","example":"10001","aliases":["postcode","zip","zip_code","pcode"]},{"name":"lat","type":"number","required":false,"description":"WGS84 latitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":52.52,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"WGS84 longitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":13.405,"minimum":-180,"maximum":180,"aliases":["lng","longitude"]},{"name":"include_geometry","type":"boolean","required":false,"description":"If true, include the (simplified) boundary polygon as GeoJSON. Default false — geometries are large; lookups never depend on this.","on_invalid":"ignore","default":false,"example":false,"aliases":["geometry"]}],"returns":"found, zip, place, state{code,name,fips}, county{name,fips}, centroid{lat,lon}, boundary{adm1,adm2} (coord mode), census{zcta,tract,...} when the TIGER extension is loaded else census_pending (see us_census), normalized_input, match_type, confidence, source, dataset_version","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"postal_code":"10001"}},{"name":"us_census","description":"United States census-grade geocode: street ADDRESS, ZIP, or coordinates → state, county (+5-digit FIPS), census TRACT GEOID, census BLOCK GEOID, ZCTA, and tract/ZCTA land-area — with match_type + confidence. Coordinates/ZIP resolve the ZCTA offline from pinned TIGER/ZCTA-2024 polygons (zero egress); the authoritative tract/block GEOID + address geocoding come from the US Census Geocoder, cached. US-Gov public domain (Title 17 §105).","required_params":[],"optional_params":["address","postal_code","lat","lon","include_geometry","live"],"params":[{"name":"address","type":"string","required":false,"description":"One-line US street address to geocode to its census tract/block (uses the Census Geocoder; rooftop interpolation, not a deliverability/CASS claim).","on_invalid":"reject","example":"1600 Pennsylvania Ave NW, Washington, DC 20500","aliases":["street","q"]},{"name":"postal_code","type":"string","required":false,"description":"Postal code to resolve. Spaces/dashes are ignored, case-insensitive (e.g. '10115', '75001', 'SW1A1AA').","on_invalid":"reject","example":"10001","aliases":["postcode","zip","zip_code","pcode"]},{"name":"lat","type":"number","required":false,"description":"WGS84 latitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":52.52,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"WGS84 longitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":13.405,"minimum":-180,"maximum":180,"aliases":["lng","longitude"]},{"name":"include_geometry","type":"boolean","required":false,"description":"If true, include the (simplified) boundary polygon as GeoJSON. Default false — geometries are large; lookups never depend on this.","on_invalid":"ignore","default":false,"example":false,"aliases":["geometry"]},{"name":"live","type":"boolean","required":false,"description":"If true (default) and an exact tract/block GEOID is needed, query the Census Geocoder (cached). Set false for offline-only (ZCTA polygon + nearest-tract centroid) with no .gov call.","on_invalid":"ignore","default":true,"example":true}],"returns":"found, input_kind, zcta{geoid,land_sqmi,water_sqmi}, state{code,name,fips}, county{name,fips}, tract{geoid,number,land_sqmi,match}, block{geoid} (live), matched_address (address mode), coordinates{lat,lon}, source, match_type, confidence, low_confidence, normalized_input, dataset_version (+geometry if requested)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"lat":40.7505,"lon":-73.9967,"live":true}},{"name":"admin_boundary","description":"GLOBAL coordinates → administrative boundary hierarchy ADM0/ADM1/ADM2 (geoBoundaries CGAZ composite, CC-BY 4.0).","required_params":["lat","lon"],"optional_params":["levels","include_geometry"],"params":[{"name":"lat","type":"number","required":true,"description":"WGS84 latitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":52.52,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":true,"description":"WGS84 longitude of the point to resolve (decimal degrees).","on_invalid":"reject","example":13.405,"minimum":-180,"maximum":180,"aliases":["lng","longitude"]},{"name":"levels","type":"string","required":false,"description":"Comma-separated geoBoundaries levels to resolve: 0 (country), 1 (state/region), 2 (county/municipality). Default all three.","on_invalid":"ignore","default":"0,1,2","example":"0,1,2"},{"name":"include_geometry","type":"boolean","required":false,"description":"If true, include the (simplified) boundary polygon as GeoJSON. Default false — geometries are large; lookups never depend on this.","on_invalid":"ignore","default":false,"example":false,"aliases":["geometry"]}],"returns":"found, adm0{id,name,iso3}, adm1{id,name,iso3}, adm2{id,name,iso3} (each w/ own match_type+confidence), normalized_input, match_type, confidence, source, dataset_version (+geometry if requested)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"lat":35.6762,"lon":139.6503}},{"name":"postal_lookup","description":"country + postal code → region metadata for ~100 countries (GeoNames postal directory) with country-specific enrichment (EU→NUTS3, TR→mahalle, IN→offices).","required_params":["country","postal_code"],"optional_params":[],"params":[{"name":"country","type":"string","required":true,"description":"ISO-3166 alpha-2 country code (e.g. DE, FR, TR, IN, US). Greece accepts GR or EL.","on_invalid":"ignore","example":"DE","aliases":["country_code","cc"]},{"name":"postal_code","type":"string","required":true,"description":"Postal code to resolve. Spaces/dashes are ignored, case-insensitive (e.g. '10115', '75001', 'SW1A1AA').","on_invalid":"reject","example":"75001","aliases":["postcode","zip","zip_code","pcode"]}],"returns":"found, country, postal_code, places[]{name,admin1(+code),admin2(+code),admin3(+code),lat,lon,accuracy}, nuts3 (EU), tr_matches[] (TR), in_offices[] (IN), coverage_note, normalized_input, match_type, confidence, source, dataset_version","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"FR","postal_code":"75001"}},{"name":"postal_search","description":"country + city/place → its postal codes (zip-by-city); country + admin1 only → that state's codes (zip-by-state); country only → the country's states/regions list (GeoNames directory).","required_params":["country"],"optional_params":["place","admin1","limit"],"params":[{"name":"country","type":"string","required":true,"description":"ISO-3166 alpha-2 country code (e.g. DE, FR, TR, IN, US). Greece accepts GR or EL.","on_invalid":"ignore","example":"DE","aliases":["country_code","cc"]},{"name":"place","type":"string","required":false,"description":"Place/city name to list postal codes for. Accent and case-insensitive (munchen finds München). Omit it and pass only admin1 for a state-wide listing; omit both for the country's admin-1 (state/region) list.","on_invalid":"reject","example":"München","aliases":["city","q"]},{"name":"admin1","type":"string","required":false,"description":"Optional admin-1 (state/region) filter, name or code.","on_invalid":"ignore","example":"Bayern","aliases":["state","region"]},{"name":"limit","type":"integer","required":false,"description":"Max codes to return (1-100, default 50).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":100}],"returns":"found, country, place, postal_codes[]{postal_code,name,admin1,admin2,lat,lon}, code_count, truncated — OR (country-only mode) regions[]{name,code,postal_code_count}; normalized_input, match_type, confidence, source, dataset_version","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"DE","place":"München","limit":10}},{"name":"postal_distance","description":"Great-circle distance between two postal codes (same or different countries).","required_params":["country","from","to"],"optional_params":["to_country","unit"],"params":[{"name":"country","type":"string","required":true,"description":"ISO-3166 alpha-2 country code (e.g. DE, FR, TR, IN, US). Greece accepts GR or EL.","on_invalid":"ignore","example":"DE","aliases":["country_code","cc"]},{"name":"from","type":"string","required":true,"description":"Origin postal code (in `country`).","on_invalid":"reject","example":"10001","aliases":["from_postal","postal_code1"]},{"name":"to","type":"string","required":true,"description":"Destination postal code (in `to_country`, default same country).","on_invalid":"reject","example":"90210","aliases":["to_postal","postal_code2"]},{"name":"to_country","type":"string","required":false,"description":"Destination ISO-3166 alpha-2 country if different.","on_invalid":"ignore","example":"US"},{"name":"unit","type":"enum","required":false,"description":"Distance unit (km default, mi).","on_invalid":"ignore","allowed_values":[{"value":"km","label":"kilometers"},{"value":"mi","label":"miles"}],"default":"km","example":"km"}],"returns":"found, distance, unit, from{postal_code,name,lat,lon}, to{postal_code,name,lat,lon}, method ('haversine_centroid' — postal CENTROIDS, not rooftop), normalized_input, match_type, confidence, source, dataset_version","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","from":"10001","to":"90210"}},{"name":"postal_radius","description":"All postal codes within a radius of a postal code (centroid-based).","required_params":["country","postal_code","radius_km"],"optional_params":["limit"],"params":[{"name":"country","type":"string","required":true,"description":"ISO-3166 alpha-2 country code (e.g. DE, FR, TR, IN, US). Greece accepts GR or EL.","on_invalid":"ignore","example":"DE","aliases":["country_code","cc"]},{"name":"postal_code","type":"string","required":true,"description":"Postal code to resolve. Spaces/dashes are ignored, case-insensitive (e.g. '10115', '75001', 'SW1A1AA').","on_invalid":"reject","example":"10115","aliases":["postcode","zip","zip_code","pcode"]},{"name":"radius_km","type":"number","required":true,"description":"Search radius in kilometres (0.1-100).","on_invalid":"reject","example":5,"minimum":0.1,"maximum":100,"aliases":["radius"]},{"name":"limit","type":"integer","required":false,"description":"Max codes to return, nearest first (1-100).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":100}],"returns":"found, center{postal_code,name,lat,lon}, results[]{postal_code,name,admin1,distance_km}, result_count, truncated, normalized_input, match_type, confidence, source, dataset_version","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"DE","postal_code":"10115","radius_km":3}},{"name":"batch","description":"Resolve up to 50 mixed lookups in one call (cheap local queries).","required_params":["items"],"optional_params":[],"params":[{"name":"items","type":"array","required":true,"description":"Up to 50 lookup items. Each is an object with an `action` (eu_regions|tr_regions|in_postal|admin_boundary|postal_lookup) plus that action's params. Items resolve independently — one bad item never fails the batch.","on_invalid":"reject","example":[{"action":"eu_regions","lat":52.52,"lon":13.405},{"action":"postal_lookup","country":"FR","postal_code":"75001"}],"aliases":["inputs","batch"]}],"returns":"count, found_count, results[] (each = the single-action record, tagged with its action)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"items":[{"action":"eu_regions","lat":48.8566,"lon":2.3522},{"action":"postal_lookup","country":"TR","postal_code":"34710"}]}}]},{"name":"getir","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Getir API scraper — Getir and GetirBüyük (Turkey) quick-commerce grocery: find products, read the full product record with price, struck price, unit price, ingredients, nutrition table and product-safety details, browse categories and discounted products. Prices in TRY. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/getir/v1","spec_available":true,"actions":[{"name":"search","description":"Find Getir products by keyword across the public catalogue (all 17 categories, or one with `category`). Each row has price, struck-through price and discount, unit price, pack size, brand, shelf, images and diet tags. Filter by brand, price range or discounted only; sort by match, price, discount or unit price. Choose the Getir or GetirBüyük catalogue with `service`.","required_params":["query"],"optional_params":["service","category","brand","discounted_only","min_price","max_price","sort","page","page_size","include_hidden","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Words to find in product names, brands, pack sizes, diet tags and shelf names. Turkish or ASCII spelling both match ('cay' finds 'Çay'); every word must match.","on_invalid":"reject","example":"kuzeyden","aliases":["q","keyword"]},{"name":"service","type":"enum","required":false,"description":"Which Getir grocery catalogue to read. They are separate price lists: the same product usually costs a different amount on each.","on_invalid":"reject","allowed_values":[{"value":"getir","label":"Getir quick market (default)"},{"value":"buyuk","label":"GetirBüyük large-basket market"}],"default":"getir"},{"name":"category","type":"string","required":false,"description":"Limit to one top category: its id or slug (from `categories`), its exact name ('Su & İçecek') or its getir.com URL. One category is one upstream read; without it all 17 are read.","on_invalid":"reject","example":"551430043427d5010a3a5c5e","aliases":["category_id"]},{"name":"brand","type":"string","required":false,"description":"Only this brand: its exact name (case and Turkish letters ignored) or the brand id every row carries.","on_invalid":"reject","example":"Kuzeyden","aliases":["brand_id"]},{"name":"discounted_only","type":"boolean","required":false,"description":"true = only products with a struck-through price.","on_invalid":"ignore","default":false},{"name":"min_price","type":"number","required":false,"description":"Lowest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best name/brand match first (default)"},{"value":"site_order","label":"Getir's own shelf order"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"discount_percent","label":"Biggest discount first"},{"value":"unit_price_asc","label":"Lowest price per kg / litre / piece first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-200, default 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":200},{"name":"include_hidden","type":"boolean","required":false,"description":"false (default) returns only products getir.com shows on its own category pages. true also returns the sold-by-weight rows Getir's catalogue carries but does not list without a delivery address: loose fruit and vegetables (no product record exists for them) and weight-sold meat and deli items (product/detail works for these).","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (24-char id, string), title, short_name, brand{id,name}, size (pack size as printed, e.g. '24 x 500 ml'), price (TRY number), currency=TRY, original_price (struck-through price, else null), discount_percent, discount_amount, unit_price, unit_price_unit ('piece' | 'kg' | 'l' | 'g'), sold_by ('piece' | 'weight'), is_bundle, image, images[], badge_images[] (Getir publishes badges as images only), tags[] (e.g. 'Vegan', 'Glutensiz'), category{id,name,slug,url}, subcategory{id,name}, subcategories[] (every shelf the product sits on), url, in_stock (null — stock depends on the delivery warehouse), rating/review_count/rating_scale (null — Getir publishes no ratings)}, count, total_results, page, page_size, page_count, hidden_rows_dropped, service, service_name, match_mode ('catalogue'), query","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"kuzeyden","category":"551430043427d5010a3a5c5e"}},{"name":"product/detail","description":"The full Getir product record by id, slug or getir.com URL: title, brand, pack size, every image, price, struck-through price and discount, unit price, weight options for items sold by weight, bundle contents, description, ingredients, usage, the nutrition table, the product-safety block (origin, manufacturer, registration number) and the category.","required_params":["product_id"],"optional_params":["service","resolve_brand","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"The 24-character Getir product id every row returns, the product slug ('kuzeyden-su-h8DcoZauDv') or a getir.com product URL (a /buyuk/ URL selects GetirBüyük).","on_invalid":"reject","example":"603545c9877ea1efbab7dc90","aliases":["id","slug","url"]},{"name":"service","type":"enum","required":false,"description":"Which Getir grocery catalogue to read. They are separate price lists: the same product usually costs a different amount on each.","on_invalid":"reject","allowed_values":[{"value":"getir","label":"Getir quick market (default)"},{"value":"buyuk","label":"GetirBüyük large-basket market"}],"default":"getir"},{"name":"resolve_brand","type":"boolean","required":false,"description":"true (default) also reads the product's category shelf to add the brand name, category name and shelf. Getir's product record carries only the brand id. false = one small read, brand name null.","on_invalid":"ignore","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id (24-char id, string), title, short_name, brand{id,name}, size (pack size as printed, e.g. '24 x 500 ml'), price (TRY number), currency=TRY, original_price (struck-through price, else null), discount_percent, discount_amount, unit_price, unit_price_unit ('piece' | 'kg' | 'l' | 'g'), sold_by ('piece' | 'weight'), is_bundle, image, images[], badge_images[] (Getir publishes badges as images only), tags[] (e.g. 'Vegan', 'Glutensiz'), category{id,name,slug,url}, subcategory{id,name}, subcategories[] (every shelf the product sits on), url, in_stock (null — stock depends on the delivery warehouse), rating/review_count/rating_scale (null — Getir publishes no ratings), slug, share_link, unit_quantity, price_scope ('domain' = one price across the service), weight_options{initial,initial_text,step,minimum,unit}, bundle_items[]{product_id,title,size,count,image}, info_messages[], description, ingredients, usage, nutrition[]{title,basis,items[]{name,value,value_number,unit}}, origin, manufacturer, product_safety{label: value}, category_ids[], listed, barcode (null — not published), service, service_name}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"603545c9877ea1efbab7dc90"}},{"name":"category","description":"Every product on one Getir top category (optionally one shelf inside it), in Getir's own shelf order or sorted by price, discount or unit price, paged. The response lists the category's shelves with how many products each one holds.","required_params":["category"],"optional_params":["service","subcategory","brand","discounted_only","min_price","max_price","sort","page","page_size","include_hidden","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A top category: its id or slug (from `categories`), its exact name ('Su & İçecek') or its getir.com category URL.","on_invalid":"reject","example":"551430043427d5010a3a5c5e","aliases":["category_id","slug","url"]},{"name":"service","type":"enum","required":false,"description":"Which Getir grocery catalogue to read. They are separate price lists: the same product usually costs a different amount on each.","on_invalid":"reject","allowed_values":[{"value":"getir","label":"Getir quick market (default)"},{"value":"buyuk","label":"GetirBüyük large-basket market"}],"default":"getir"},{"name":"subcategory","type":"string","required":false,"description":"Only one shelf inside the category: its id or exact name ('Maden Suyu'), from `categories` or the response's `category.subcategories`.","on_invalid":"reject","aliases":["subcategory_id"]},{"name":"brand","type":"string","required":false,"description":"Only this brand: its exact name (case and Turkish letters ignored) or the brand id every row carries.","on_invalid":"reject","example":"Kuzeyden","aliases":["brand_id"]},{"name":"discounted_only","type":"boolean","required":false,"description":"true = only products with a struck-through price.","on_invalid":"ignore","default":false},{"name":"min_price","type":"number","required":false,"description":"Lowest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"site_order","label":"Getir's own shelf order (default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"discount_percent","label":"Biggest discount first"},{"value":"unit_price_asc","label":"Lowest price per kg / litre / piece first"}],"default":"site_order"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-200, default 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":200},{"name":"include_hidden","type":"boolean","required":false,"description":"false (default) returns only products getir.com shows on its own category pages. true also returns the sold-by-weight rows Getir's catalogue carries but does not list without a delivery address: loose fruit and vegetables (no product record exists for them) and weight-sold meat and deli items (product/detail works for these).","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (24-char id, string), title, short_name, brand{id,name}, size (pack size as printed, e.g. '24 x 500 ml'), price (TRY number), currency=TRY, original_price (struck-through price, else null), discount_percent, discount_amount, unit_price, unit_price_unit ('piece' | 'kg' | 'l' | 'g'), sold_by ('piece' | 'weight'), is_bundle, image, images[], badge_images[] (Getir publishes badges as images only), tags[] (e.g. 'Vegan', 'Glutensiz'), category{id,name,slug,url}, subcategory{id,name}, subcategories[] (every shelf the product sits on), url, in_stock (null — stock depends on the delivery warehouse), rating/review_count/rating_scale (null — Getir publishes no ratings)}, count, total_results, page, page_size, page_count, hidden_rows_dropped, service, service_name, match_mode ('catalogue'), category{id,name,slug,url,product_count,subcategories[]{id,name,rows}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"551430043427d5010a3a5c5e"}},{"name":"categories","description":"Getir's category tree: the 17 top categories with id, slug, URL, image and product count, and every shelf (subcategory) inside each with its product count.","required_params":[],"optional_params":["service","max_rotations"],"params":[{"name":"service","type":"enum","required":false,"description":"Which Getir grocery catalogue to read. They are separate price lists: the same product usually costs a different amount on each.","on_invalid":"reject","allowed_values":[{"value":"getir","label":"Getir quick market (default)"},{"value":"buyuk","label":"GetirBüyük large-basket market"}],"default":"getir"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"categories[]{id, name, slug, url, image, product_count, subcategories[]{id, name, product_count}}, count, service, service_name","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"deals","description":"Discounted Getir products — every product with a struck-through price, across the catalogue or in one category, biggest discount first by default. Filter by brand, price or minimum discount.","required_params":[],"optional_params":["service","category","brand","min_discount_percent","min_price","max_price","sort","page","page_size","max_rotations"],"params":[{"name":"service","type":"enum","required":false,"description":"Which Getir grocery catalogue to read. They are separate price lists: the same product usually costs a different amount on each.","on_invalid":"reject","allowed_values":[{"value":"getir","label":"Getir quick market (default)"},{"value":"buyuk","label":"GetirBüyük large-basket market"}],"default":"getir"},{"name":"category","type":"string","required":false,"description":"Limit to one top category: its id or slug (from `categories`), its exact name ('Su & İçecek') or its getir.com URL. One category is one upstream read; without it all 17 are read.","on_invalid":"reject","example":"551430043427d5010a3a5c5e","aliases":["category_id"]},{"name":"brand","type":"string","required":false,"description":"Only this brand: its exact name (case and Turkish letters ignored) or the brand id every row carries.","on_invalid":"reject","example":"Kuzeyden","aliases":["brand_id"]},{"name":"min_discount_percent","type":"integer","required":false,"description":"Only products discounted at least this much.","on_invalid":"reject","default":1,"minimum":1,"maximum":99},{"name":"min_price","type":"number","required":false,"description":"Lowest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"discount_percent","label":"Biggest discount first (default)"},{"value":"site_order","label":"Getir's own shelf order"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"unit_price_asc","label":"Lowest price per kg / litre / piece first"}],"default":"discount_percent"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-200, default 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":200},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (24-char id, string), title, short_name, brand{id,name}, size (pack size as printed, e.g. '24 x 500 ml'), price (TRY number), currency=TRY, original_price (struck-through price, else null), discount_percent, discount_amount, unit_price, unit_price_unit ('piece' | 'kg' | 'l' | 'g'), sold_by ('piece' | 'weight'), is_bundle, image, images[], badge_images[] (Getir publishes badges as images only), tags[] (e.g. 'Vegan', 'Glutensiz'), category{id,name,slug,url}, subcategory{id,name}, subcategories[] (every shelf the product sits on), url, in_stock (null — stock depends on the delivery warehouse), rating/review_count/rating_scale (null — Getir publishes no ratings)}, count, total_results, page, page_size, page_count, hidden_rows_dropped, service, service_name, match_mode ('catalogue')","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"551430043427d5010a3a5c5e"}}]},{"name":"getmobil","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Getmobil API — live data from getmobil.com, Turkey's refurbished-electronics marketplace: refurbished iPhones, Samsung and Xiaomi phones, iPads, MacBooks, tablets and smartwatches. Search or browse the catalogue, then open any device variant for its live TRY price, stock, the five Getmobil cosmetic-condition tiers (Premium+, Premium, Mükemmel, İyi, Outlet) with each tier's price, every storage and colour option, every seller's competing offer with seller score and shipping days, the full technical spec sheet and the model's complete storage x colour x condition price matrix. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/getmobil/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search across getmobil.com, exactly as its own search box answers: one row per device VARIANT (model + storage + colour + condition) with the live buy-box price in TRY, stock, the source's own attribute list and the variant id to open with `product`. 20 rows per page. `meta.total_results` is the source's own match count. Matching is fuzzy at the source (accessories match phone keywords); use `category` for an exact model. `sort`, `price_min`/`price_max` and `brand` were each measured to change the total; the condition filter is NOT honoured by the source's search and is therefore only offered on `category`.","required_params":["query"],"optional_params":["sort","price_min","price_max","brand","page"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text keyword, exactly what you would type in getmobil.com's search box (model, brand, accessory). Matching is the source's own and it is FUZZY: measured 2026-10-07, 'iphone 13' reported 6828 matches including accessories, while a nonsense keyword honestly reported 0. For an exact model use `category` with the model's path instead.","on_invalid":"reject","example":"iphone 13","aliases":["q","term","keyword","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order. The source silently ignores an order it does not know, so only these four are accepted. Measured on /cep-telefonu: price_asc first row 3,900 TRY, price_desc first row 125,000 TRY.","on_invalid":"reject","allowed_values":[{"value":"default","label":"getmobil's own 'Önerilen' order"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"newest","label":"newest listings first"}],"default":"default","example":"price_asc"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in TRY. Measured on /cep-telefonu: 278 models -> price 20,000-30,000: 52.","on_invalid":"reject","example":20000,"minimum":0,"aliases":["min_price","minPrice"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in TRY. Works with or without `price_min`.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["max_price","maxPrice"]},{"name":"brand","type":"enum","required":false,"description":"One brand, by getmobil's own brand slug. Measured on /cep-telefonu: 278 models -> samsung 93, apple 39. On keyword search 'iphone 13' + samsung: 6828 -> 6.","on_invalid":"reject","allowed_values":[{"value":"apple","label":"Apple"},{"value":"samsung","label":"Samsung"},{"value":"xiaomi","label":"Xiaomi"},{"value":"huawei","label":"Huawei"},{"value":"oppo","label":"Oppo"},{"value":"poco","label":"Poco"},{"value":"vivo","label":"Vivo"},{"value":"lenovo","label":"Lenovo"},{"value":"general-mobile","label":"General Mobile"},{"value":"casper","label":"Casper"},{"value":"omix","label":"Omix"},{"value":"realme","label":"Realme"},{"value":"tecno","label":"Tecno"},{"value":"honor","label":"Honor"}],"example":"samsung","aliases":["brands","make"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Page size is the source's: 12 on category/model pages, 20 on keyword search (measured). A page past the last one returns 0 rows with `meta.last_page` (measured: the source does not repeat the last page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500,"aliases":["page_number","pageNumber"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller names and scores are returned as the page publishes them.","on_invalid":"reject","default":false}],"returns":"products[]{variant_id, row_type, title, model, variant_options[], storage, colour, colour_hex, attributes{}, condition, condition_code, condition_id, price_try, price_display, strikethrough_price_try, min_sell_price_try, sell_base_price_try, currency, stock, in_stock, has_fast_delivery, has_trusted_seller, has_successful_seller, vendor_id, sku, brand, category_path, category_titles, total_sold, favorite_count, view_count_24h, image, path, url, position} + meta{total_results, page, last_page, page_size, has_more}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 13","sort":"price_desc"}},{"name":"category","description":"Browse one getmobil category or model page with the storefront's own filters. A top or brand category returns one row per MODEL (from-price, buy-box variant, a preview of its variants); a MODEL path returns one row per VARIANT (storage x colour x cosmetic condition) with its price, stock and buy-box seller id. 12 rows per page. Every filter here was measured to change the source's own total against an unfiltered call in the same run; `meta.total_results` is that total.","required_params":["category"],"optional_params":["condition","brand","storage","colour_id","vendor_id","price_min","price_max","fast_delivery","trusted_seller","successful_seller","sort","page"],"params":[{"name":"category","type":"string","required":true,"description":"A getmobil category path: the part after /satin-al/ in a category URL. A top category ('cep-telefonu', 'bilgisayar-tablet', 'aksesuar') returns one row per MODEL; a MODEL path ('cep-telefonu/iphone-ios-telefonlar/apple/iphone-13') returns one row per VARIANT (storage x colour x condition). Every row's `category_path` and the `categories` action give valid values.","on_invalid":"reject","example":"cep-telefonu/iphone-ios-telefonlar/apple/iphone-13","aliases":["path","category_path","model_path"]},{"name":"condition","type":"enum","required":false,"description":"One of getmobil's own cosmetic-condition tiers. ONE value per call: the source silently ignores a combined value and returns everything. Measured on /cep-telefonu (278 models): premium_plus 38, premium 35, perfect 269, good 79. Category/model pages only — keyword search ignores it at the source.","on_invalid":"reject","allowed_values":[{"value":"premium_plus","label":"Premium+ (source id 6)"},{"value":"premium","label":"Premium (5)"},{"value":"perfect","label":"Mükemmel (1)"},{"value":"good","label":"İyi (3)"},{"value":"outlet","label":"Outlet (4)"}],"example":"premium_plus","aliases":["cosmetic_condition","grade"]},{"name":"brand","type":"enum","required":false,"description":"One brand, by getmobil's own brand slug. Measured on /cep-telefonu: 278 models -> samsung 93, apple 39. On keyword search 'iphone 13' + samsung: 6828 -> 6.","on_invalid":"reject","allowed_values":[{"value":"apple","label":"Apple"},{"value":"samsung","label":"Samsung"},{"value":"xiaomi","label":"Xiaomi"},{"value":"huawei","label":"Huawei"},{"value":"oppo","label":"Oppo"},{"value":"poco","label":"Poco"},{"value":"vivo","label":"Vivo"},{"value":"lenovo","label":"Lenovo"},{"value":"general-mobile","label":"General Mobile"},{"value":"casper","label":"Casper"},{"value":"omix","label":"Omix"},{"value":"realme","label":"Realme"},{"value":"tecno","label":"Tecno"},{"value":"honor","label":"Honor"}],"example":"samsung","aliases":["brands","make"]},{"name":"storage","type":"enum","required":false,"description":"Storage capacity, as getmobil labels it. Measured on /cep-telefonu: 278 -> 256 GB 113; on the iPhone 13 model page 41 -> 10.","on_invalid":"reject","allowed_values":[{"value":"16 GB","label":"16 GB"},{"value":"32 GB","label":"32 GB"},{"value":"64 GB","label":"64 GB"},{"value":"128 GB","label":"128 GB"},{"value":"256 GB","label":"256 GB"},{"value":"512 GB","label":"512 GB"},{"value":"1 TB","label":"1 TB"}],"example":"256 GB"},{"name":"colour_id","type":"integer","required":false,"description":"A colour by getmobil's own colour id (attribute 'Renk' in the `filters` action; e.g. 251 = Siyah). An id the category does not carry returns a real 0.","on_invalid":"reject","example":251,"minimum":1,"aliases":["color_id"]},{"name":"vendor_id","type":"integer","required":false,"description":"Only offers from this seller, by getmobil vendor id (1 = Getmobil itself; the `filters` action lists every seller of a category, product `other_offers[]` carry it). Measured: /cep-telefonu 278 -> vendor 1: 45.","on_invalid":"reject","example":1,"minimum":1,"aliases":["seller_id","merchant_id"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in TRY. Measured on /cep-telefonu: 278 models -> price 20,000-30,000: 52.","on_invalid":"reject","example":20000,"minimum":0,"aliases":["min_price","minPrice"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in TRY. Works with or without `price_min`.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["max_price","maxPrice"]},{"name":"fast_delivery","type":"boolean","required":false,"description":"Only 'Hızlı Kargo' (fast shipping) offers. Measured: 278 -> 193.","on_invalid":"reject","example":true},{"name":"trusted_seller","type":"boolean","required":false,"description":"Only 'Güvenilir Satıcı' (trusted seller) offers. Measured: 278 -> 106.","on_invalid":"reject","example":true},{"name":"successful_seller","type":"boolean","required":false,"description":"Only 'Başarılı Satıcı' (successful seller) offers. Measured: 278 -> 67.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. The source silently ignores an order it does not know, so only these four are accepted. Measured on /cep-telefonu: price_asc first row 3,900 TRY, price_desc first row 125,000 TRY.","on_invalid":"reject","allowed_values":[{"value":"default","label":"getmobil's own 'Önerilen' order"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"newest","label":"newest listings first"}],"default":"default","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Page size is the source's: 12 on category/model pages, 20 on keyword search (measured). A page past the last one returns 0 rows with `meta.last_page` (measured: the source does not repeat the last page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500,"aliases":["page_number","pageNumber"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller names and scores are returned as the page publishes them.","on_invalid":"reject","default":false}],"returns":"products[]{row_type='model', model_id, model, model_slug, variant_id, price_try, price_display, strikethrough_price_try, stock, condition, condition_code, variant_quantity, has_trusted_seller, category_path, favorite_count, view_count_24h, image, path, url, variants_preview[]{variant_id, row_type, title, model, variant_options[], storage, colour, colour_hex, attributes{}, condition, condition_code, condition_id, price_try, price_display, strikethrough_price_try, min_sell_price_try, sell_base_price_try, currency, stock, in_stock, has_fast_delivery, has_trusted_seller, has_successful_seller, vendor_id, sku, brand, category_path, category_titles, total_sold, favorite_count, view_count_24h, image, path, url, position} | variant_id, row_type, title, model, variant_options[], storage, colour, colour_hex, attributes{}, condition, condition_code, condition_id, price_try, price_display, strikethrough_price_try, min_sell_price_try, sell_base_price_try, currency, stock, in_stock, has_fast_delivery, has_trusted_seller, has_successful_seller, vendor_id, sku, brand, category_path, category_titles, total_sold, favorite_count, view_count_24h, image, path, url, position} + meta{total_results, grouped, page, last_page, page_size, has_more, category_title}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"cep-telefonu/iphone-ios-telefonlar/apple/iphone-13","sort":"price_asc"}},{"name":"product","description":"The full record of one device variant by `variant_id`: live TRY price as the page prints it, monthly instalment, stock, the buy-box seller with its score and badges, EVERY other seller's offer (price, stock, shipping days, score), the five cosmetic-condition tiers with each tier's price and stock flag, the storage and colour selectors with price steps, full technical specs, images, breadcrumbs and add-ons (e.g. battery replacement). With `all_variants` (default) it also returns the model's complete storage x colour x condition matrix, one row per variant with its own price, stock and seller id. An unknown id is NOT_FOUND.","required_params":["variant_id"],"optional_params":["path","all_variants"],"params":[{"name":"variant_id","type":"integer","required":true,"description":"getmobil variant id: the trailing number of a product URL (.../apple-iphone-13-128-gb-gece-yarisi-**795**/) and the `variant_id` of every search, category and option row. A variant that no longer exists returns NOT_FOUND.","on_invalid":"reject","example":795,"minimum":1,"aliases":["id","product_id"]},{"name":"path","type":"string","required":false,"description":"Optional: the row's `path` (or the full product URL). Saves the source's two redirect hops from a bare id; must end in the same `-<variant_id>`.","on_invalid":"reject","example":"cep-telefonu/iphone-ios-telefonlar/apple/iphone-13/apple-iphone-13-128-gb-gece-yarisi-795","aliases":["url"]},{"name":"all_variants","type":"boolean","required":false,"description":"Also read the model's full variant matrix (every storage x colour x condition currently listed, each with its own price, stock and buy-box seller id). Costs one extra request per 12 variants (measured: iPhone 13 = 41 variants = 4 pages). false returns only the product page itself.","on_invalid":"reject","default":true,"example":true},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller names and scores are returned as the page publishes them.","on_invalid":"reject","default":false}],"returns":"product{variant_id, sku, title, model, brand, storage, colour, condition, condition_code, price_try, price_display, strikethrough_price_try, currency, monthly_installment_display, installment_count, in_stock, low_stock, stock, seller{vendor_id, name, slug, store_url, score, is_getmobil, is_top_seller, is_trusted_seller, is_vendor_of_the_month}, shipping_days, is_fast_delivery, committed_ship_date, other_offers[]{vendor_id, name, store_url, score, inventory_id, price_try, stock, shipping_days, fast_delivery, is_buybox_winner}, other_offer_count, condition_options[]{label, condition_code, variant_id, price_try, in_stock, selected}, storage_options[], colour_options[], specs{}, images[], breadcrumbs[], category_path, model_id, add_ons[], url, all_variants[]{variant_id, row_type, title, model, variant_options[], storage, colour, colour_hex, attributes{}, condition, condition_code, condition_id, price_try, price_display, strikethrough_price_try, min_sell_price_try, sell_base_price_try, currency, stock, in_stock, has_fast_delivery, has_trusted_seller, has_successful_seller, vendor_id, sku, brand, category_path, category_titles, total_sold, favorite_count, view_count_24h, image, path, url, position}, all_variants_total} + meta{all_variants_pages, all_variants_pages_failed}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"variant_id":795}},{"name":"filters","description":"The live filter vocabulary of one category, as the storefront itself builds its filter panel: brands with ids, models with paths, every seller (vendor id + name), the attribute values with the source's ids (Depolama, Renk, Ekran Boyutu, İşlemci, Bellek …) and the badge toggles. Use it to find a `colour_id` or `vendor_id`. One request.","required_params":["category"],"optional_params":[],"params":[{"name":"category","type":"string","required":true,"description":"A getmobil category path: the part after /satin-al/ in a category URL. A top category ('cep-telefonu', 'bilgisayar-tablet', 'aksesuar') returns one row per MODEL; a MODEL path ('cep-telefonu/iphone-ios-telefonlar/apple/iphone-13') returns one row per VARIANT (storage x colour x condition). Every row's `category_path` and the `categories` action give valid values.","on_invalid":"reject","example":"cep-telefonu/iphone-ios-telefonlar/apple/iphone-13","aliases":["path","category_path","model_path"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller names and scores are returned as the page publishes them.","on_invalid":"reject","default":false}],"returns":"brands[]{id, slug, name, path}, models[]{id, brand_id, name, path}, vendors[]{id, name}, attributes[]{attribute_type_id, name, values[]{id, value}}, badges[] + meta{total_results}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"cep-telefonu"}},{"name":"categories","description":"getmobil's live category tree as its own site navigation publishes it (120 categories on 2026-10-07; the source's sitemap lists 405 category URLs including deeper model pages, which `category` also accepts): every category with id, title, path (feed it to `category`), depth, parent and the category's best-selling variant with its buy-box price. One request.","required_params":[],"optional_params":[],"params":[{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller names and scores are returned as the page publishes them.","on_invalid":"reject","default":false}],"returns":"categories[]{category_id, title, slug, path, depth, parent_id, url, top_selling_variant_id, top_selling_total_sold, top_selling_buy_box_price_try}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"github","category":{"id":"developer-tools","title":"Developer Tools"},"title":"GitHub Developer Data — official REST API profiles, repos, issues, pulls, commits, code search","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/github/v1","spec_available":true,"actions":[{"name":"user","description":"GitHub user profile","required_params":["username"],"optional_params":["anon_tier"],"params":[{"name":"username","type":"string","required":true,"description":"GitHub user login (the @handle, without the @).","on_invalid":"reject","example":"torvalds"},{"name":"anon_tier","type":"enum","required":false,"description":"Set to 1/true to deliberately use the anonymous GitHub API tier (no token, GitHub's own 60/hr anonymous ceiling) instead of a pooled PAT. Normally the engine auto-selects a PAT and only falls back to anonymous when no token has budget; this forces the anonymous path.","on_invalid":"ignore","allowed_values":[{"value":"1","label":"Force the anonymous (no-token) tier"},{"value":"true","label":"Force anonymous (alias)"}],"example":"1"}],"returns":"user{} — login, id, name, bio, company, blog, location, public_repos, followers, following, created_at","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"torvalds"}},{"name":"user_repos","description":"repositories owned by a user","required_params":["username"],"optional_params":["type","sort","direction","page","per_page","cursor"],"params":[{"name":"username","type":"string","required":true,"description":"GitHub user login (the @handle, without the @).","on_invalid":"reject","example":"torvalds"},{"name":"type","type":"enum","required":false,"description":"Filter the repository list by relationship/visibility (accepted values vary slightly between user and org endpoints).","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All (default)"},{"value":"owner","label":"Owned"},{"value":"member","label":"Member of"},{"value":"public","label":"Public"},{"value":"private","label":"Private"},{"value":"forks","label":"Forks"},{"value":"sources","label":"Sources"}],"example":"all"},{"name":"sort","type":"enum","required":false,"description":"Field to sort repositories by.","on_invalid":"ignore","allowed_values":[{"value":"created","label":"Date created"},{"value":"updated","label":"Last updated"},{"value":"pushed","label":"Last push"},{"value":"full_name","label":"Repository name (default)"}],"example":"updated"},{"name":"direction","type":"enum","required":false,"description":"Sort direction.","on_invalid":"ignore","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (repositories: name, full_name, description, stars, forks, language, topics, pushed_at); meta has has_more/next_page/next_cursor + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"torvalds"}},{"name":"user_followers","description":"followers for a user","required_params":["username"],"optional_params":["page","per_page","cursor"],"params":[{"name":"username","type":"string","required":true,"description":"GitHub user login (the @handle, without the @).","on_invalid":"reject","example":"torvalds"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (follower user summaries: login, id, avatar_url, html_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"torvalds"}},{"name":"user_following","description":"accounts followed by a user","required_params":["username"],"optional_params":["page","per_page","cursor"],"params":[{"name":"username","type":"string","required":true,"description":"GitHub user login (the @handle, without the @).","on_invalid":"reject","example":"tiangolo"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (followed user summaries: login, id, avatar_url, html_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"torvalds"}},{"name":"user_gists","description":"public gists for a user","required_params":["username"],"optional_params":["page","per_page","cursor"],"params":[{"name":"username","type":"string","required":true,"description":"GitHub user login (the @handle, without the @).","on_invalid":"reject","example":"torvalds"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (gists: id, description, files, public, created_at, html_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"torvalds"}},{"name":"repo","description":"repository metadata","required_params":["owner","repo"],"optional_params":[],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"}],"returns":"repo{} — full_name, description, stars, forks, watchers, open_issues, language, topics, license, default_branch, timestamps","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_issues","description":"repository issues","required_params":["owner","repo"],"optional_params":["state","since","sort","direction","page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"state","type":"enum","required":false,"description":"Filter issues/pull requests by state.","on_invalid":"ignore","allowed_values":[{"value":"open","label":"Open (default)"},{"value":"closed","label":"Closed"},{"value":"all","label":"All"}],"example":"open"},{"name":"since","type":"string","required":false,"description":"Only records updated at/after this ISO-8601 timestamp.","on_invalid":"ignore","example":"2024-01-01T00:00:00Z"},{"name":"sort","type":"enum","required":false,"description":"Field to sort issues by.","on_invalid":"ignore","allowed_values":[{"value":"created","label":"Created (default)"},{"value":"updated","label":"Updated"},{"value":"comments","label":"Comment count"}],"example":"created"},{"name":"direction","type":"enum","required":false,"description":"Sort direction.","on_invalid":"ignore","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (issues: number, title, state, user, labels, comments, created_at, body; pull_request key if the issue is a PR); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_pulls","description":"repository pull requests","required_params":["owner","repo"],"optional_params":["state","sort","direction","page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"state","type":"enum","required":false,"description":"Filter issues/pull requests by state.","on_invalid":"ignore","allowed_values":[{"value":"open","label":"Open (default)"},{"value":"closed","label":"Closed"},{"value":"all","label":"All"}],"example":"open"},{"name":"sort","type":"enum","required":false,"description":"Field to sort pull requests by.","on_invalid":"ignore","allowed_values":[{"value":"created","label":"Created (default)"},{"value":"updated","label":"Updated"},{"value":"popularity","label":"Reaction count"},{"value":"long-running","label":"Long-running"}],"example":"created"},{"name":"direction","type":"enum","required":false,"description":"Sort direction.","on_invalid":"ignore","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (pull requests: number, title, state, user, head/base, merged_at, created_at); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_commits","description":"repository commits","required_params":["owner","repo"],"optional_params":["sha","path","author","since","until","page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"sha","type":"string","required":false,"description":"Commit listing: branch name or commit SHA to start from (defaults to the repository's default branch).","on_invalid":"ignore","example":"main"},{"name":"path","type":"string","required":false,"description":"Only commits that touch this file path.","on_invalid":"ignore","example":"src/index.js"},{"name":"author","type":"string","required":false,"description":"Only commits by this GitHub login or email.","on_invalid":"ignore","example":"gaearon"},{"name":"since","type":"string","required":false,"description":"Only records updated at/after this ISO-8601 timestamp.","on_invalid":"ignore","example":"2024-01-01T00:00:00Z"},{"name":"until","type":"string","required":false,"description":"Only commits before this ISO-8601 timestamp.","on_invalid":"ignore","example":"2024-12-31T23:59:59Z"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (commits: sha, commit.message, author, committer, date, html_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_contributors","description":"repository contributors","required_params":["owner","repo"],"optional_params":["anon","page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"anon","type":"enum","required":false,"description":"Set to 1/true to also include anonymous contributors.","on_invalid":"ignore","allowed_values":[{"value":"1","label":"Include anonymous contributors"},{"value":"true","label":"Include anonymous (alias)"}],"example":"1"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (contributors: login, id, contributions, avatar_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_releases","description":"repository releases","required_params":["owner","repo"],"optional_params":["page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (releases: tag_name, name, body, draft, prerelease, published_at, assets); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_stargazers","description":"recent stargazers of a repository","required_params":["owner","repo"],"optional_params":["page","per_page"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (recent stargazers: login, id, avatar_url, html_url, url, type, starred_at); meta.stargazer_count is the authoritative total and meta.coverage='recent_only'. GitHub restricted the full stargazer list to repo admins/collaborators on 2026-06-30, so these rows are reconstructed from the repository's public event feed (WatchEvent), which GitHub caps at 300 events / ~90 days -- a very busy repository therefore yields only its last few stargazers.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_forks","description":"repository forks","required_params":["owner","repo"],"optional_params":["sort","page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"sort","type":"enum","required":false,"description":"Field to sort forks by.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Newest (default)"},{"value":"oldest","label":"Oldest"},{"value":"stargazers","label":"Most stars"},{"value":"watchers","label":"Most watchers"}],"example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (forked repositories: full_name, owner, stars, created_at); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_languages","description":"repository language byte counts","required_params":["owner","repo"],"optional_params":[],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"}],"returns":"object mapping language name -> bytes of code (e.g. {\"Python\": 12345})","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_contents","description":"repository content metadata for a path","required_params":["owner","repo"],"optional_params":["path","ref"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"path","type":"string","required":false,"description":"Path to a file or directory inside the repository (omit or '/' for the repository root).","on_invalid":"ignore","example":"README.md"},{"name":"ref","type":"string","required":false,"description":"Branch, tag, or commit SHA to read from (defaults to the default branch).","on_invalid":"ignore","example":"main"}],"returns":"file: content metadata (name, path, size, sha, download_url, base64 content); directory: items[] of entries (name, path, type, size)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"repo_readme","description":"repository README metadata/content URL","required_params":["owner","repo"],"optional_params":["ref"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"ref","type":"string","required":false,"description":"Branch, tag, or commit SHA to read from (defaults to the default branch).","on_invalid":"ignore","example":"main"}],"returns":"readme{} — name, path, size, sha, download_url, base64-encoded content","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"org","description":"organization profile","required_params":["org"],"optional_params":[],"params":[{"name":"org","type":"string","required":true,"description":"GitHub organization login.","on_invalid":"reject","example":"github"}],"returns":"org{} — login, name, description, blog, location, public_repos, followers, created_at","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"org":"facebook"}},{"name":"org_repos","description":"organization repositories","required_params":["org"],"optional_params":["type","sort","direction","page","per_page","cursor"],"params":[{"name":"org","type":"string","required":true,"description":"GitHub organization login.","on_invalid":"reject","example":"github"},{"name":"type","type":"enum","required":false,"description":"Filter the repository list by relationship/visibility (accepted values vary slightly between user and org endpoints).","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All (default)"},{"value":"owner","label":"Owned"},{"value":"member","label":"Member of"},{"value":"public","label":"Public"},{"value":"private","label":"Private"},{"value":"forks","label":"Forks"},{"value":"sources","label":"Sources"}],"example":"all"},{"name":"sort","type":"enum","required":false,"description":"Field to sort repositories by.","on_invalid":"ignore","allowed_values":[{"value":"created","label":"Date created"},{"value":"updated","label":"Last updated"},{"value":"pushed","label":"Last push"},{"value":"full_name","label":"Repository name (default)"}],"example":"updated"},{"name":"direction","type":"enum","required":false,"description":"Sort direction.","on_invalid":"ignore","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (org repositories: name, full_name, description, stars, language, pushed_at); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"org":"facebook","per_page":10}},{"name":"org_members","description":"public organization members","required_params":["org"],"optional_params":["filter","role","page","per_page","cursor"],"params":[{"name":"org","type":"string","required":true,"description":"GitHub organization login.","on_invalid":"reject","example":"github"},{"name":"filter","type":"enum","required":false,"description":"Filter organization members.","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All members (default)"},{"value":"2fa_disabled","label":"Without 2FA — org admins only"}],"example":"all"},{"name":"role","type":"enum","required":false,"description":"Filter organization members by role.","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All roles (default)"},{"value":"admin","label":"Owners"},{"value":"member","label":"Non-owner members"}],"example":"all"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (member user summaries: login, id, avatar_url, html_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"org":"facebook","per_page":10}},{"name":"search_repos","description":"search repositories","required_params":["q"],"optional_params":["sort","order","page","per_page"],"params":[{"name":"q","type":"string","required":true,"description":"GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').","on_invalid":"reject","example":"fastapi"},{"name":"sort","type":"enum","required":false,"description":"Field to sort search results by (omit for best-match relevance).","on_invalid":"ignore","allowed_values":[{"value":"stars","label":"Stars"},{"value":"forks","label":"Forks"},{"value":"help-wanted-issues","label":"Help-wanted issues"},{"value":"updated","label":"Last updated"}],"example":"stars"},{"name":"order","type":"enum","required":false,"description":"Sort direction for search results (only applies when sort is set).","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"{ total_count, incomplete_results, items[] } of repositories; meta has total, next_page, rate-limit (GitHub caps search at the first 1000 results)","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"fastapi","per_page":5}},{"name":"search_users","description":"search users","required_params":["q"],"optional_params":["sort","order","page","per_page"],"params":[{"name":"q","type":"string","required":true,"description":"GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').","on_invalid":"reject","example":"fastapi"},{"name":"sort","type":"enum","required":false,"description":"Field to sort search results by (omit for best-match relevance).","on_invalid":"ignore","allowed_values":[{"value":"followers","label":"Followers"},{"value":"repositories","label":"Repositories"},{"value":"joined","label":"Join date"}],"example":"followers"},{"name":"order","type":"enum","required":false,"description":"Sort direction for search results (only applies when sort is set).","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"{ total_count, incomplete_results, items[] } of users; meta has total, next_page, rate-limit (search capped at first 1000 results)","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"fastapi"}},{"name":"search_code","description":"search code (token required by GitHub)","required_params":["q"],"optional_params":["sort","order","page","per_page"],"params":[{"name":"q","type":"string","required":true,"description":"GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').","on_invalid":"reject","example":"fastapi"},{"name":"sort","type":"enum","required":false,"description":"Field to sort search results by (omit for best-match relevance).","on_invalid":"ignore","allowed_values":[{"value":"indexed","label":"Last indexed"}],"example":"indexed"},{"name":"order","type":"enum","required":false,"description":"Sort direction for search results (only applies when sort is set).","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"{ total_count, incomplete_results, items[] } of code matches (name, path, repository); meta has total + rate-limit. Requires a GitHub token.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":3},"example_params":{"q":"fastapi"}},{"name":"search_issues","description":"search issues and pull requests","required_params":["q"],"optional_params":["sort","order","page","per_page"],"params":[{"name":"q","type":"string","required":true,"description":"GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').","on_invalid":"reject","example":"fastapi"},{"name":"sort","type":"enum","required":false,"description":"Field to sort search results by (omit for best-match relevance).","on_invalid":"ignore","allowed_values":[{"value":"comments","label":"Comments"},{"value":"created","label":"Created"},{"value":"updated","label":"Updated"},{"value":"reactions","label":"Reactions"}],"example":"created"},{"name":"order","type":"enum","required":false,"description":"Sort direction for search results (only applies when sort is set).","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"{ total_count, incomplete_results, items[] } of issues/PRs; meta has total, next_page, rate-limit (search capped at first 1000 results)","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"fastapi"}},{"name":"search_topics","description":"search GitHub topics","required_params":["q"],"optional_params":["page","per_page"],"params":[{"name":"q","type":"string","required":true,"description":"GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').","on_invalid":"reject","example":"fastapi"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"{ total_count, incomplete_results, items[] } of topics (name, display_name, short_description, featured, curated, repository count signals); meta has total + rate-limit. Uses the mercy preview media type.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"fastapi"}},{"name":"search_commits","description":"search commits across GitHub","required_params":["q"],"optional_params":["sort","order","page","per_page"],"params":[{"name":"q","type":"string","required":true,"description":"GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').","on_invalid":"reject","example":"fastapi"},{"name":"sort","type":"enum","required":false,"description":"Field to sort search results by (omit for best-match relevance).","on_invalid":"ignore","allowed_values":[{"value":"author-date","label":"Author date"},{"value":"committer-date","label":"Committer date"}],"example":"author-date"},{"name":"order","type":"enum","required":false,"description":"Sort direction for search results (only applies when sort is set).","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"{ total_count, incomplete_results, items[] } of commits (sha, commit.message, author, repository); meta has total + rate-limit (capped at first 1000). Uses the cloak preview media type; query needs at least one qualifier, e.g. 'repo:owner/name fix'.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"fastapi"}},{"name":"repo_branches","description":"repository branches","required_params":["owner","repo"],"optional_params":["page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (branches: name, commit{sha,url}, protected); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","per_page":5}},{"name":"repo_tags","description":"repository tags","required_params":["owner","repo"],"optional_params":["page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (tags: name, commit{sha,url}, zipball_url, tarball_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","per_page":5}},{"name":"repo_topics","description":"repository topics (labels)","required_params":["owner","repo"],"optional_params":[],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"}],"returns":"{ names[] } — the topic strings attached to the repository. Uses the mercy preview media type.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react"}},{"name":"issue_detail","description":"single issue detail","required_params":["owner","repo","number"],"optional_params":[],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"number","type":"integer","required":true,"description":"Issue or pull request number (the #N shown in the GitHub UI).","on_invalid":"reject","example":42,"minimum":1}],"returns":"issue{} — number, title, state, body, user, labels, assignees, milestone, comments count, reactions, created_at/updated_at/closed_at (pull_request key if a PR)","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","number":1}},{"name":"issue_comments","description":"comments on an issue or PR","required_params":["owner","repo","number"],"optional_params":["since","page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"number","type":"integer","required":true,"description":"Issue or pull request number (the #N shown in the GitHub UI).","on_invalid":"reject","example":42,"minimum":1},{"name":"since","type":"string","required":false,"description":"Only records updated at/after this ISO-8601 timestamp.","on_invalid":"ignore","example":"2024-01-01T00:00:00Z"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (comments: id, user, body, created_at, updated_at, reactions, html_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","number":1,"per_page":10}},{"name":"pull_detail","description":"single pull request detail","required_params":["owner","repo","number"],"optional_params":[],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"number","type":"integer","required":true,"description":"Issue or pull request number (the #N shown in the GitHub UI).","on_invalid":"reject","example":42,"minimum":1}],"returns":"pull{} — number, title, state, body, user, head/base, merged, mergeable, merged_at, review_comments, commits, additions, deletions, changed_files, labels","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","number":18000}},{"name":"pull_reviews","description":"reviews on a pull request","required_params":["owner","repo","number"],"optional_params":["page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"number","type":"integer","required":true,"description":"Issue or pull request number (the #N shown in the GitHub UI).","on_invalid":"reject","example":28000,"minimum":1},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (reviews: id, user, state APPROVED/CHANGES_REQUESTED/COMMENTED, body, submitted_at, commit_id); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","number":18000,"per_page":10}},{"name":"pull_files","description":"files changed in a pull request","required_params":["owner","repo","number"],"optional_params":["page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"number","type":"integer","required":true,"description":"Issue or pull request number (the #N shown in the GitHub UI).","on_invalid":"reject","example":42,"minimum":1},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (changed files: filename, status, additions, deletions, changes, patch, blob_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","number":18000,"per_page":10}},{"name":"pull_commits","description":"commits in a pull request","required_params":["owner","repo","number"],"optional_params":["page","per_page","cursor"],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"number","type":"integer","required":true,"description":"Issue or pull request number (the #N shown in the GitHub UI).","on_invalid":"reject","example":42,"minimum":1},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (commits: sha, commit.message, author, committer, date, html_url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","number":18000,"per_page":10}},{"name":"commit_detail","description":"single commit detail with diff stats and changed files","required_params":["owner","repo","sha"],"optional_params":[],"params":[{"name":"owner","type":"string","required":true,"description":"Repository owner — the user or organization login (the part before the slash in owner/repo).","on_invalid":"reject","example":"facebook"},{"name":"repo","type":"string","required":true,"description":"Repository name (the part after the slash in owner/repo).","on_invalid":"reject","example":"react"},{"name":"sha","type":"string","required":true,"description":"Commit SHA (full or short) — or a branch/tag name that resolves to a commit — to fetch the single-commit detail for.","on_invalid":"reject","example":"main"}],"returns":"commit{} — sha, commit.message, author, committer, stats{additions,deletions,total}, files[] (filename, status, additions, deletions, patch), parents, html_url","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"owner":"facebook","repo":"react","sha":"8d259093bf383a1fbbe69eae0fd5c5f615af252b"}},{"name":"user_events","description":"public activity events for a user","required_params":["username"],"optional_params":["page","per_page","cursor"],"params":[{"name":"username","type":"string","required":true,"description":"GitHub user login (the @handle, without the @).","on_invalid":"reject","example":"torvalds"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (public events: id, type PushEvent/IssuesEvent/…, repo, payload, created_at); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"torvalds"}},{"name":"user_orgs","description":"organizations a user belongs to (public)","required_params":["username"],"optional_params":["page","per_page","cursor"],"params":[{"name":"username","type":"string","required":true,"description":"GitHub user login (the @handle, without the @).","on_invalid":"reject","example":"tiangolo"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (organization summaries: login, id, description, avatar_url, url); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"torvalds"}},{"name":"user_starred","description":"repositories a user has starred","required_params":["username"],"optional_params":["sort","direction","page","per_page","cursor"],"params":[{"name":"username","type":"string","required":true,"description":"GitHub user login (the @handle, without the @).","on_invalid":"reject","example":"torvalds"},{"name":"sort","type":"enum","required":false,"description":"Field to sort starred repositories by.","on_invalid":"ignore","allowed_values":[{"value":"created","label":"When the star was added (default)"},{"value":"updated","label":"Repository last updated"}],"example":"created"},{"name":"direction","type":"enum","required":false,"description":"Sort direction.","on_invalid":"ignore","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.","on_invalid":"ignore","example":"Y3Vyc29yOjEw"}],"returns":"items[] (starred repositories: full_name, owner, description, stars, language, topics, pushed_at); meta has pagination + rate-limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"torvalds"}},{"name":"rate_limit","description":"current token/IP rate-limit status","required_params":[],"optional_params":[],"params":[],"returns":"rate-limit buckets (core, search, graphql, …) — each shows limit, remaining requests, and reset timestamp for the configured GitHub token or anonymous IP","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"glassdoor","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Glassdoor API — company reviews, interview reports, salary data & job listings (glassdoor.com)","version":"1.2.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/glassdoor/v1","spec_available":true,"actions":[{"name":"employer/search","description":"Resolve a company name to its Glassdoor employer_id + basic profile. Start here — every other action needs the employer_id.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Company name to look up.","on_invalid":"reject","example":"Google"}],"returns":"results[]{employer_id, name, category, logo_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Google"}},{"name":"employer/detail","description":"Full employer profile: firmographics, description and mission, the headline rating plus every sub-rating, the star breakdown, and how the company scores against its industry.","required_params":["employer_id"],"optional_params":[],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079}],"returns":"employer{employer_id, name, website, headquarters, size, industry, sector, description, mission, revenue, company_type, stock_symbol, year_founded, review_count, salary_count, overall_rating, ratings{...}, ceo{name,title,photo_url}, rating_distribution{stars_1..stars_5, recommend_count, by_dimension}, industry_benchmark_ratings{...}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"employer_id":9079}},{"name":"employer/reviews","description":"The employer's public reviews (rating, pros/cons, role), plus the company-wide aggregate ratings and the full star distribution. Glassdoor shows signed-out visitors one page of reviews per sort order — for more of them call `employer/reviews-harvest`, which collects every sort order.","required_params":["employer_id"],"optional_params":[],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079}],"returns":"reviews[]{headline, pros, cons, advice, overall_rating, sub-ratings, job_title, location, employment_status, is_current_job, date} + aggregate_ratings + rating_distribution + meta.pagination{page, has_more, next_cursor, total}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"employer_id":9079}},{"name":"employer/reviews-harvest","description":"Every review Glassdoor shows without signing in: the most recent, most helpful, highest-rated and lowest-rated reviews, de-duplicated into one list with the aggregate ratings and star distribution.","required_params":["employer_id"],"optional_params":["max_pages"],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079},{"name":"max_pages","type":"integer","required":false,"description":"Stop after this many sort orders (1–4). Omit for all of them.","on_invalid":"ignore","minimum":1,"maximum":4}],"returns":"reviews[] + harvest{pages_fetched, sort_orders_fetched, unique_reviews, filtered_reviews_count, all_reviews_count, stopped_reason}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"employer_id":9079}},{"name":"employer/interviews","description":"One page of interview reports — difficulty, outcome, and the candidate's write-up of the process. `source` (how the candidate was sourced) and `questions` (structured questions the candidate attached) are filled in only when the reporter supplied them: measured across 60 reports from three employers, `source` arrived on 24 and `questions` on 5. The process itself is always described in `process_description`.","required_params":["employer_id"],"optional_params":["page","cursor"],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"}],"returns":"interviews[]{interview_id, date, job_title, location, difficulty, experience, outcome, process_description, source (often empty), questions[] (often empty)} + summary + meta.pagination{page, has_more, next_cursor, total}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"employer_id":9079}},{"name":"employer/interviews-harvest","description":"Fetch Glassdoor interview reports across multiple pages.","required_params":["employer_id"],"optional_params":["max_pages"],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079},{"name":"max_pages","type":"integer","required":false,"description":"Stop the harvest after this many pages (default: run until complete).","on_invalid":"ignore","minimum":1}],"returns":"interviews[] + harvest{pages_fetched, unique_interviews, filtered_interview_count, completeness_pct, stopped_reason}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"employer_id":9079}},{"name":"employer/jobs","description":"Employer job listings (one page; cursor pagination).","required_params":["employer_id"],"optional_params":["page","cursor","page_size","page_cursor"],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"page_size","type":"integer","required":false,"description":"Jobs per page (1–100).","on_invalid":"reject","default":30,"minimum":1,"maximum":100},{"name":"page_cursor","type":"string","required":false,"description":"Advanced: raw Glassdoor pagination cursor. Prefer `cursor`.","on_invalid":"ignore"}],"returns":"jobs[]{job_id, title, location, salary_min, salary_max, salary_currency, salary_period, easy_apply, job_url} + meta.pagination{page, has_more, next_cursor, total}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"employer_id":9079,"page_size":20}},{"name":"employer/jobs-harvest","description":"Fetch all available Glassdoor job listings across multiple pages.","required_params":["employer_id"],"optional_params":["page_size","max_pages"],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079},{"name":"page_size","type":"integer","required":false,"description":"Jobs per page (1–100).","on_invalid":"reject","default":30,"minimum":1,"maximum":100},{"name":"max_pages","type":"integer","required":false,"description":"Stop the harvest after this many pages (default: run until complete).","on_invalid":"ignore","minimum":1}],"returns":"jobs[] + harvest{pages_fetched, unique_jobs, stopped_reason}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"employer_id":9079}},{"name":"employer/salaries","description":"Glassdoor salary estimates for this employer, broken down by job title. Each title returns its pay distribution — base pay and total pay percentiles (P10/P25/P50/P75/P90) with the medians. Titles are ordered by number of reported salaries (most-reported first).","required_params":["employer_id"],"optional_params":["page","cursor","pay_period"],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"pay_period","type":"string","required":false,"description":"Pay period for the estimates: ANNUAL (yearly) or HOURLY.","on_invalid":"ignore","default":"ANNUAL"}],"returns":"salaries[]{job_title, job_title_id, salary_count, currency, most_recent, median_base_pay, median_total_pay, base_pay{p10..p90,median}, total_pay{p10..p90,median}} + summary{pay_period, location} + meta.pagination{page, has_more, next_cursor, total}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"employer_id":9079}},{"name":"employer/salaries-harvest","description":"Fetch salary estimates for many job titles at this employer across multiple pages — every title with its pay distribution.","required_params":["employer_id"],"optional_params":["pay_period","max_pages"],"params":[{"name":"employer_id","type":"integer","required":true,"description":"Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.","on_invalid":"reject","example":9079},{"name":"pay_period","type":"string","required":false,"description":"Pay period for the estimates: ANNUAL (yearly) or HOURLY.","on_invalid":"ignore","default":"ANNUAL"},{"name":"max_pages","type":"integer","required":false,"description":"Stop the harvest after this many pages (default: run until complete).","on_invalid":"ignore","minimum":1}],"returns":"salaries[] + harvest{pages_fetched, unique_titles, job_title_count, completeness_pct, stopped_reason}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"employer_id":9079}}]},{"name":"global-jobs","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Global Jobs API — Naukri (India), Gupy & Catho (Brazil), StepStone (Germany) job search","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/global-jobs/v1","spec_available":true,"actions":[{"name":"jobs/search","description":"Search live job listings on Naukri (India), Gupy and Catho (Brazil), or StepStone (Germany & Europe) by job title, keyword and city. Returns each job's title, company, location and link.","required_params":["platform"],"optional_params":["keyword","query","location","max_pages","max_results","page_size"],"params":[{"name":"platform","type":"enum","required":true,"description":"The job board to search. Choose Gupy or Catho (Brazil), StepStone (Germany & Europe), or Naukri (India) — each is a different country's job market. Note: Naukri currently blocks automated access and returns TARGET_BLOCKED.","on_invalid":"reject","allowed_values":[{"value":"naukri","label":"Naukri — India's largest job board (naukri.com)"},{"value":"gupy","label":"Gupy — Brazil jobs & company career pages (gupy.io)"},{"value":"catho","label":"Catho — Brazil job listings (catho.com.br)"},{"value":"stepstone","label":"StepStone — Germany & Europe job listings (stepstone.de)"}],"example":"catho"},{"name":"keyword","type":"string","required":false,"description":"Job title or keyword to search for. On the Brazilian boards (Gupy, Catho) the listings are in Portuguese, so a Portuguese term such as 'desenvolvedor' returns far more than an English one. Gupy matches the phrase LITERALLY against the job title, so a single word ('python') matches where a phrase ('python developer') returns nothing; when that happens we retry with the most distinctive single word and tell you in `meta.keyword_relaxed_to`.","on_invalid":"ignore","example":"software engineer","aliases":["query"]},{"name":"location","type":"string","required":false,"description":"City or region to filter jobs by — e.g. 'Bangalore', 'São Paulo', 'Berlin'. Naukri defaults to Bangalore; Catho searches nationwide.","on_invalid":"ignore","example":"bangalore"},{"name":"max_pages","type":"integer","required":false,"description":"How many result pages to fetch — each page returns more jobs. Default 10.","on_invalid":"ignore","default":10,"example":3,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"Optional cap on the total number of jobs returned across all pages.","on_invalid":"ignore","example":50,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Number of jobs per page (Naukri and Gupy). Default 20.","on_invalid":"ignore","default":20,"example":20,"minimum":1}],"returns":"jobs[] (title, company_name, location, url, …), count, and the platform searched. Personal data is redacted unless you request it.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"platform":"catho","keyword":"analista","max_pages":1}},{"name":"jobs/detail","description":"Get the full details of a single job posting from Naukri, Gupy, Catho or StepStone — job title, company, full description, salary, location and how to apply.","required_params":["platform"],"optional_params":["job_id","job_url","apply_url"],"params":[{"name":"platform","type":"enum","required":true,"description":"The job board to search. Choose Gupy or Catho (Brazil), StepStone (Germany & Europe), or Naukri (India) — each is a different country's job market. Note: Naukri currently blocks automated access and returns TARGET_BLOCKED.","on_invalid":"reject","allowed_values":[{"value":"naukri","label":"Naukri — India's largest job board (naukri.com)"},{"value":"gupy","label":"Gupy — Brazil jobs & company career pages (gupy.io)"},{"value":"catho","label":"Catho — Brazil job listings (catho.com.br)"},{"value":"stepstone","label":"StepStone — Germany & Europe job listings (stepstone.de)"}],"example":"catho"},{"name":"job_id","type":"string","required":false,"description":"The job's id on the board — used by Naukri (required) and Gupy. Provide either job_id or job_url, depending on the board.","on_invalid":"ignore","example":"12345"},{"name":"job_url","type":"string","required":false,"description":"The full job posting / apply URL — used by Catho and StepStone (required) and Gupy. Example: a catho.com.br/vagas/… link.","on_invalid":"ignore","example":"https://www.catho.com.br/vagas/12345/","aliases":["apply_url"]}],"returns":"job{} — the full posting: title, company, description, salary, location and more. Personal data is redacted unless you request it.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"platform":"catho"}}]},{"name":"glovo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Glovo API — supermarkets, Glovo Express dark stores, restaurants, pharmacies and shops that deliver to a location (delivery fee, time, distance, rating, open now); each store's catalogue or menu with price, promotion, original price, stock limit and barcode; in-store search and Glovo search. ~20 countries, no account, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/glovo/v1","spec_available":true,"actions":[{"name":"stores","description":"Stores Glovo lists for a delivery point in one category — supermarkets & groceries (Glovo Express / El Súper de Glovo dark stores included), restaurants, pharmacy & beauty, shops — with delivery fee, delivery time, distance, rating, open status and promotions. Location (lat+lon) is required and echoed. Narrow with the location's own filter (cuisine or shop type, e.g. Supermarket, Pizza, Sushi), sort the way glovoapp.com sorts, page with `cursor`.","required_params":["lat","lon"],"optional_params":["category","filter","sort","limit","cursor","language"],"params":[{"name":"lat","type":"number","required":false,"description":"Delivery point latitude (with `lon`). Which stores deliver, the delivery fee, time and distance all depend on this point; it is echoed in `location`.","on_invalid":"reject","example":40.4168,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Delivery point longitude (with `lat`).","on_invalid":"reject","example":-3.7038,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"category","type":"enum","required":false,"description":"Which store list. Also accepts a Glovo category id from the `categories` action (some cities have extra lists).","on_invalid":"reject","allowed_values":[{"value":"groceries","label":"Supermarkets, groceries, Glovo Express"},{"value":"restaurants","label":"Restaurants (Glovo 'Food')"},{"value":"pharmacy","label":"Pharmacy / parapharmacy & beauty"},{"value":"shops","label":"Shops (electronics, flowers, pets …)"}],"default":"groceries","example":"groceries","value_pattern":"\\d{1,7}"},{"name":"filter","type":"string","required":false,"description":"One value of the location's own filter list (`available_filters` in the response): a title such as Supermarket, Bakery, Pizza, Sushi, or its id. An unknown value is rejected with the list.","on_invalid":"reject","example":"Supermarket","aliases":["cuisine","type"]},{"name":"sort","type":"enum","required":false,"description":"Glovo's own store-list sort.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"Glovo's order"},{"value":"distance","label":"Nearest first"},{"value":"rating","label":"Best rated first"}],"default":"recommended","example":"distance"},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-50; Glovo's own maximum is 50).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"`meta.next_cursor` of the previous call, as is, with the same lat/lon/category/filter/sort.","on_invalid":"reject","example":""},{"name":"language","type":"string","required":false,"description":"Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"location{lat, lon, city_code, country, address, served}, category{category_id, title}, stores[]: store_id, store_address_id, city_code, slug, name, tag, category_id, is_glovo_dark_store, open_now, availability_status, rating_score (percent), rating_text, rating_count_text, delivery_fee_listed, delivery_fee_listed_text, delivery_fee_effective_text, delivery_fee_is_free, delivery_fee_is_discounted, delivery_fee_is_prime, surge_active, currency, delivery_estimate_min/max/text, distance_m, distance_text, promotions[], sponsored, is_new, is_top_rated, in_store_prices, image, logo. available_filters[]{id, title}; meta: total, has_more, next_cursor.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"lat":40.4168,"lon":-3.7038,"category":"groceries"}},{"name":"categories","description":"Glovo's categories at a delivery point — the store lists `stores` accepts (groceries, food, pharmacy & beauty, shops, city-specific lists) and single-store entries such as Glovo Express or El Súper de Glovo with their store id — plus the city, country and currency.","required_params":["lat","lon"],"optional_params":["language"],"params":[{"name":"lat","type":"number","required":false,"description":"Delivery point latitude (with `lon`). Which stores deliver, the delivery fee, time and distance all depend on this point; it is echoed in `location`.","on_invalid":"reject","example":40.4168,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Delivery point longitude (with `lat`).","on_invalid":"reject","example":-3.7038,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"language","type":"string","required":false,"description":"Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"location{lat, lon, city_code, country, address, served, city_name, currency}, categories[]: category_id, title, group, single_store, store_id, store_slug, open","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"lat":40.4168,"lon":-3.7038}},{"name":"store","description":"One store's record for a delivery point: name, address, phone, rating and rating count, delivery fee, service fee rule, distance, open status, promotions, store type, the address id that serves the point, the store's suggested search keywords.","required_params":["store_id","lat","lon"],"optional_params":["language"],"params":[{"name":"store_id","type":"string","required":true,"description":"Glovo store id — a `stores`/`search` row's `store_id`, as is — or the store slug from a glovoapp.com store URL (superglovo-mad).","on_invalid":"reject","example":"21033","aliases":["store","slug"]},{"name":"lat","type":"number","required":false,"description":"Delivery point latitude (with `lon`). Which stores deliver, the delivery fee, time and distance all depend on this point; it is echoed in `location`.","on_invalid":"reject","example":40.4168,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Delivery point longitude (with `lat`).","on_invalid":"reject","example":-3.7038,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"language","type":"string","required":false,"description":"Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"store{store_id, store_address_id, slug, name, category, category_id, city_code, address, phone, open_now, availability_status, rating_text, rating_score, rating_count, delivery_fee, service_fee{min_basket, max_basket, fee}, distance_text, distance_m, promotions[], tags[], business_unit, sub_business_unit, vertical, is_glovo_dark_store, cash_supported, prime_available, suggestion_keywords[], image}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"store_id":"21033","lat":40.4168,"lon":-3.7038}},{"name":"catalog","description":"A store's catalogue or menu. Restaurants: the whole menu with prices, promotions and option groups in one call. Supermarkets and Glovo Express: without `category` the category tree; with `category` that category's products (every section) — price, promotion price, original price, discount, Prime price, stock limit, barcode (GTIN) where Glovo publishes it, availability.","required_params":["store_id"],"optional_params":["store_address_id","city_code","lat","lon","category","language"],"params":[{"name":"store_id","type":"string","required":true,"description":"Glovo store id — a `stores`/`search` row's `store_id`, as is — or the store slug from a glovoapp.com store URL (superglovo-mad).","on_invalid":"reject","example":"21033","aliases":["store","slug"]},{"name":"store_address_id","type":"string","required":false,"description":"The store ADDRESS that serves you — a `stores`/`search` row's `store_address_id`, as is. A brand has several addresses and the catalogue belongs to the address. Without it pass `lat`+`lon` and the engine asks Glovo which address delivers there.","on_invalid":"reject","example":"178270","aliases":["address_id"]},{"name":"city_code","type":"string","required":false,"description":"Glovo city code of the store — a `stores`/`search` row's `city_code`, as is. Needed with `store_address_id` when `lat`/`lon` are not given.","on_invalid":"reject","example":"MAD","aliases":["city"]},{"name":"lat","type":"number","required":false,"description":"Delivery point latitude — needed when `store_address_id` is not given.","on_invalid":"reject","example":40.4168,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Delivery point longitude (with `lat`).","on_invalid":"reject","example":-3.7038,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"category","type":"string","required":false,"description":"A `category` value from this action's `categories` tree, as is: a collection (…-c.<id>) returns all its products section by section, a section (…-s.<id>) only that section, a super-category (…-sc.<id>) its collections.","on_invalid":"reject","example":"fruta-c.984570","aliases":["category_slug"]},{"name":"language","type":"string","required":false,"description":"Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"store{store_id, store_address_id, layout (menu|grid)}, categories[]{category, name, subcategories[]} (grid stores without `category`), items[]: item_id (string), external_id, store_product_id, name, description, price (what you pay), original_price, discount_pct, member_price{amount, currency, program}, currency, price_text, available, quantity_limit, quantity_limit_reason (STOCK_AMOUNT = units left), gtin, sold_by_weight, sale_type, dietary[], age_restricted, sponsored, promotions[]{type, title, percentage, price, prime_only}, labels[], section, image, options[]{name, min_choices, max_choices, values[]{name, price, selected_by_default}}; meta: sections_loaded, sections_not_loaded[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"21033","lat":40.4168,"lon":-3.7038}},{"name":"store_search","description":"Search inside one store (the search box on a Glovo store page): every matching product with price and Glovo's own total count.","required_params":["store_id","query"],"optional_params":["store_address_id","city_code","lat","lon","language"],"params":[{"name":"store_id","type":"string","required":true,"description":"Glovo store id — a `stores`/`search` row's `store_id`, as is — or the store slug from a glovoapp.com store URL (superglovo-mad).","on_invalid":"reject","example":"21033","aliases":["store","slug"]},{"name":"query","type":"string","required":true,"description":"Search words, as typed on glovoapp.com.","on_invalid":"reject","example":"leche","aliases":["q"]},{"name":"store_address_id","type":"string","required":false,"description":"The store ADDRESS that serves you — a `stores`/`search` row's `store_address_id`, as is. A brand has several addresses and the catalogue belongs to the address. Without it pass `lat`+`lon` and the engine asks Glovo which address delivers there.","on_invalid":"reject","example":"178270","aliases":["address_id"]},{"name":"city_code","type":"string","required":false,"description":"Glovo city code of the store — a `stores`/`search` row's `city_code`, as is. Needed with `store_address_id` when `lat`/`lon` are not given.","on_invalid":"reject","example":"MAD","aliases":["city"]},{"name":"lat","type":"number","required":false,"description":"Delivery point latitude — needed when `store_address_id` is not given.","on_invalid":"reject","example":40.4168,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Delivery point longitude (with `lat`).","on_invalid":"reject","example":-3.7038,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"language","type":"string","required":false,"description":"Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"store{store_id, store_address_id, city_code}, query, total (Glovo's count), items[]: item_id, external_id, store_product_id, name, description, price, currency, price_text, image","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"store_id":"21033","query":"leche","lat":40.4168,"lon":-3.7038}},{"name":"search","description":"Glovo's own search for a delivery point — the same results glovoapp.com shows: matching stores (restaurants, supermarkets, shops) with delivery time and rating, and the matching products/dishes shown under each store with price and original price (compare one product across stores).","required_params":["query","lat","lon"],"optional_params":["language"],"params":[{"name":"query","type":"string","required":true,"description":"Search words.","on_invalid":"reject","example":"leche","aliases":["q","keyword"]},{"name":"lat","type":"number","required":false,"description":"Delivery point latitude (with `lon`). Which stores deliver, the delivery fee, time and distance all depend on this point; it is echoed in `location`.","on_invalid":"reject","example":40.4168,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Delivery point longitude (with `lat`).","on_invalid":"reject","example":-3.7038,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"language","type":"string","required":false,"description":"Language of Glovo's interface texts (en, es, it, pt, pl, ro, uk, ka, ru …). In `catalog`, passing it also asks Glovo for its machine translation of product names (Plátano → Banana); without it names are the store's own.","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"location{…, currency}, query, stores[]: store_id, store_address_id, slug, name, is_glovo_dark_store, rating_score, rating_text, rating_count_text, delivery_estimate_min/max/text, tags[], promotions[], image; products[]: item_id, external_id, name, price, original_price, discount_pct, currency, price_text, original_price_text, promotions[], store_id, store_address_id, store_slug, store_name","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"leche","lat":40.4168,"lon":-3.7038}}]},{"name":"gmarket","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Gmarket API scraper — Korea's open marketplace (gmarket.co.kr): search listings, read the full listing (sale, list and coupon-applied price, options, seller, Smile/Star Delivery, shipping fee, rating, specs), page the reviews, and autocomplete. Prices in KRW. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/gmarket/v1","spec_available":true,"actions":[{"name":"search","description":"Search gmarket.co.kr by keyword with the site's sorts and a price range. Each row is a listing: goods code, title, URL, image, sale price, struck list price and discount %, brand, seller name with grade badges, official-store flag and store tag (공식, 해외직구, 백화점…), shipping fee / free shipping, Smile Delivery and Star Delivery badges, same-day dispatch note, search-index rating / review / purchase counts, and category codes. Ads are dropped by default and counted.","required_params":["query"],"optional_params":["page","sort","price_min","price_max","include_sponsored","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to search on gmarket.co.kr. Korean works best ('샴푸', '노트북', '캠핑의자'); brand and model words in English also work ('nike', 'iphone').","on_invalid":"reject","example":"샴푸","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based (the site stops at 50). Under sort=relevance/popular/newest Gmarket repeats many rows from earlier pages; price_asc pages do not overlap.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Order of the results, using the site's own orderings. The price orders search a much wider match set, so check keyword_matches_on_page.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Gmarket's default ranking (랭킹순)"},{"value":"popular","label":"Sales popularity (판매인기순)"},{"value":"newest","label":"Newest listings first (신규상품순)"},{"value":"price_asc","label":"Lowest price first (searches a wider match set)"},{"value":"price_desc","label":"Highest price first (searches a wider match set)"}],"default":"relevance"},{"name":"price_min","type":"number","required":false,"description":"Lowest sale price in KRW (inclusive). Sent to Gmarket's own price filter and re-checked on the returned rows. Not combinable with a price sort.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest sale price in KRW (inclusive).","on_invalid":"reject","example":20000,"minimum":0},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default): Gmarket's ad placements (파워클릭 / AI매출업) are dropped and counted in `sponsored_dropped`. true: they are returned in page order, flagged `is_sponsored`. `count` always counts organic rows only.","on_invalid":"ignore","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no listing on the page contains a query word, Gmarket fills the page with unrelated popular listings. false (default): results are empty and `fallback_results_dropped` counts them. true: they are returned apart, in `fallback_results`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-12, default 8).","on_invalid":"ignore","default":8,"minimum":1,"maximum":12}],"returns":"results[]{position, product_id, title, url, image, price, currency=KRW, price_label, list_price, discount_percent (list→sale, 1 decimal, same as detail), discount_badge_percent (the card's own integer badge), coupon_price, brand, seller{name, grades[], is_official_store, store_tag}, shipping_fee, free_shipping, smile_delivery, delivery_badge ('star_delivery'|'seller_star_delivery'), dispatch_note, search_index_rating, search_index_review_count, search_index_purchase_count, benefit_tags[], event_tags[], is_sold_out, category_codes{large, medium, small}, section, is_sponsored}, count (organic rows), sponsored_count, sponsored_dropped, total_results, total_capped (true = the site's own 10,000 ceiling, at least that many), total_pages, page, sort, query, applied_price_range, dropped_outside_price_range, duplicates_dropped, keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[] (only with include_fallback_results=true), page_overlap_expected, page_notice","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"샴푸"}},{"name":"product/detail","description":"The full Gmarket listing by goods code or URL: title, brand, official-store and certification flags, sale price, struck list price and discount, the coupon-applied price (쿠폰적용가) with its coupons and the page's own discount breakdown, the card-payment price, unit price, reward points, availability and purchase limit, rating, review / question / purchase counts, seller, Smile Delivery and Star Delivery, shipping fee with the free-shipping threshold and delivery estimate, the Gmarket-lowest-price flag and how many sellers list the same product, options with extra charges and stock, images, description, the legal product-information notice (specs) and category codes.","required_params":[],"optional_params":["product_id","url","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"Gmarket goods code (상품번호), 1-10 digits. Every search row returns it as `product_id`.","on_invalid":"reject","example":"3658351431","aliases":["goods_code","goodscode","item_no"]},{"name":"url","type":"string","required":false,"description":"Instead of product_id: a Gmarket product URL (m.gmarket.co.kr/vi/product/<code>, item.gmarket.co.kr/Item?goodscode=<code> or mitem.gmarket.co.kr/Item?goodsCode=<code>).","on_invalid":"reject","example":"https://m.gmarket.co.kr/vi/product/3658351431","aliases":["product_url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-12, default 8).","on_invalid":"ignore","default":8,"minimum":1,"maximum":12}],"returns":"product{product_id, url, title, brand, is_official_store, is_certified, price_type, price, currency=KRW, list_price, discount_percent, coupon_price, coupon_discount_percent, applied_coupons[{coupon_no, amount}], discount_breakdown[{label, amount}], card_payment_price, card_payment_price_label, unit_price_label, reward_points_max, member_extra_reward{label, points}, installment_note, in_stock, availability, purchase_limit, purchase_limit_note, rating, rating_scale, review_count, question_count, purchase_count, seller{id, name, shop_url}, smile_delivery, star_delivery ('fulfillment'|'seller'), item_types[], delivery{shipping_fee, free_shipping, free_shipping_threshold, delivery_estimate, overseas_shipping, notes[], extra_fees[]}, is_gmarket_lowest_price, same_product_offer_count, price_comparison_url, campaign, condition, origin, options[{type ('selection'|'combination'), names[], values[{option_no, value | values[], extra_price, stock, sold_out}]}], images[], description_text, description_images[], specs[{name, value}], category_codes{large, medium, small}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"3658351431"}},{"name":"product/reviews","description":"Customer reviews of a Gmarket listing by goods code or URL: the premium (photo) or general list, paged, with the premium and general counts and the average rating. Each review carries its rating, title, text, the masked author id, date, the purchased option and photos.","required_params":[],"optional_params":["product_id","url","type","sort","page","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"Gmarket goods code (상품번호), 1-10 digits. Every search row returns it as `product_id`.","on_invalid":"reject","example":"3658351431","aliases":["goods_code","goodscode","item_no"]},{"name":"url","type":"string","required":false,"description":"Instead of product_id: a Gmarket product URL (m.gmarket.co.kr/vi/product/<code>, item.gmarket.co.kr/Item?goodscode=<code> or mitem.gmarket.co.kr/Item?goodsCode=<code>).","on_invalid":"reject","example":"https://m.gmarket.co.kr/vi/product/3658351431","aliases":["product_url"]},{"name":"type","type":"enum","required":false,"description":"Which review list to page. Both counts are returned either way.","on_invalid":"reject","allowed_values":[{"value":"premium","label":"Premium reviews (프리미엄: longer, usually with photos)"},{"value":"general","label":"General reviews (일반: short ratings, newest first)"}],"default":"premium"},{"name":"sort","type":"enum","required":false,"description":"Order of premium reviews. General reviews are always newest first, so a sort with type=general is rejected.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Gmarket's popular order (인기순)"},{"value":"newest","label":"Newest first (최신순)"}],"default":"popular"},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based; 10 reviews per page. `total_pages` says how many exist.","on_invalid":"reject","default":1,"minimum":1,"maximum":5000},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-12, default 8).","on_invalid":"ignore","default":8,"minimum":1,"maximum":12}],"returns":"reviews[]{review_id, rating, title, content, author, date, option, images[]}, count, type, sort, page, total_pages, page_size, premium_count, general_count, average_rating, rating_scale, product_id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://m.gmarket.co.kr/vi/product/3658351431"}},{"name":"search/suggest","description":"Gmarket's autocomplete for a partial keyword: up to 10 keyword suggestions.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The partial keyword to complete.","on_invalid":"reject","example":"아이폰","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-12, default 8).","on_invalid":"ignore","default":8,"minimum":1,"maximum":12}],"returns":"suggestions[] (keywords), brands[{name, url}], count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"아이폰"}}]},{"name":"goat","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"GOAT API — live sneaker & streetwear resale data scraper: product search, full catalogue detail (name, brand, SKU, colorway, designer, release date, sizes, images), GOAT display price and the live per-size resale price grid (lowest ask, condition, instant-ship) from goat.com — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/goat/v1","spec_available":true,"actions":[{"name":"search","description":"Search GOAT for products by keyword. Returns matching products (name, slug, brand image, category) plus related curated collections. Resolves the `slug`/`product_id` you feed into product_detail and prices. `limit` caps results.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for — a sneaker/streetwear name, model, brand or SKU ('air jordan 4', 'nike dunk low', 'new balance 550', 'yeezy').","on_invalid":"reject","example":"air jordan 4","aliases":["q","keyword","term"]},{"name":"limit","type":"integer","required":false,"description":"Max products to return (1-50).","on_invalid":"ignore","default":25,"minimum":1,"maximum":50}],"returns":"results[]{product_id, slug, url, name, image, category} + collections[]{record_id, title, slug, subtype}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"air jordan 4"}},{"name":"suggest","description":"Autocomplete suggestions for a partial query — quick product + collection name matches as the customer types. Lighter than search.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Partial search text to complete.","on_invalid":"reject","example":"jordan","aliases":["q","term"]}],"returns":"products[]{product_id, slug, name, image} + collections[]{title, slug}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"jordan"}},{"name":"product_detail","description":"Full catalogue record for one product by `slug` / `url` / `product_id`: name, nickname, brand, SKU, colorway, designer, gender, silhouette, release date, season, materials, size range, taxonomy, images, the GOAT display price and the offer floor/ceiling. Pair with `prices` for the live per-size resale grid.","required_params":[],"optional_params":["slug","url","product_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Product slug from a GOAT URL (goat.com/sneakers/<slug>) — copy it from search results. Provide slug OR url.","on_invalid":"reject","example":"air-jordan-1-retro-high-og-chicago-555088-101","aliases":["url_key","product_slug","id_slug"]},{"name":"url","type":"string","required":false,"description":"Full GOAT product URL — alternative to slug.","on_invalid":"reject","example":"https://www.goat.com/sneakers/air-jordan-1-retro-high-og-chicago-555088-101","aliases":["product_url"]},{"name":"product_id","type":"integer","required":false,"description":"GOAT productTemplateId (the numeric id from a search/detail result). Provide product_id OR slug OR url.","on_invalid":"reject","example":14741,"aliases":["product_template_id","template_id"]}],"returns":"product{product_id, slug, url, name, nickname, brand, sku, color, designer, gender, silhouette, release_date, size_range, taxonomy, images, display_price_usd, min_offer_usd, max_offer_usd}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"air-jordan-1-retro-high-og-chicago-555088-101"}},{"name":"prices","description":"Live per-size resale price grid for a product (the market-data moat). For each size of the given `condition` it returns the lowest live ask + listing count, plus the cheapest listing overall. Accepts `slug`/`url`/`product_id`. `condition` (used/new_no_defects), `country` set the market. Optional `size` narrows to one size (returns every live listing for it). Honest-empty when nothing is listed.","required_params":[],"optional_params":["slug","url","product_id","condition","country","size"],"params":[{"name":"slug","type":"string","required":false,"description":"Product slug from a GOAT URL (goat.com/sneakers/<slug>) — copy it from search results. Provide slug OR url.","on_invalid":"reject","example":"air-jordan-1-retro-high-og-chicago-555088-101","aliases":["url_key","product_slug","id_slug"]},{"name":"url","type":"string","required":false,"description":"Full GOAT product URL — alternative to slug.","on_invalid":"reject","example":"https://www.goat.com/sneakers/air-jordan-1-retro-high-og-chicago-555088-101","aliases":["product_url"]},{"name":"product_id","type":"integer","required":false,"description":"GOAT productTemplateId (the numeric id from a search/detail result). Provide product_id OR slug OR url.","on_invalid":"reject","example":14741,"aliases":["product_template_id","template_id"]},{"name":"condition","type":"enum","required":false,"description":"Listing condition for the live price grid. 'used' is the deep public resale pool; 'new_no_defects' covers brand-new pairs.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used (pre-owned resale)"},{"value":"new_no_defects","label":"New, no defects"}],"default":"used","aliases":["shoe_condition"]},{"name":"country","type":"enum","required":false,"description":"Market/country the prices are quoted for (affects asks + FX).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"CA","label":"Canada"},{"value":"AU","label":"Australia"},{"value":"JP","label":"Japan"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"NL","label":"Netherlands"},{"value":"ES","label":"Spain"}],"default":"US","aliases":["country_code","cc"]},{"name":"size","type":"string","required":false,"description":"Optional single size (e.g. 10, 10.5) — returns every live listing for just that size instead of the whole grid.","on_invalid":"reject","example":"10","aliases":["variant_size"]}],"returns":"sizes[]{size, lowest_ask_usd, listing_count} + lowest{size, price_usd} + listings[]{listing_id, size, price_usd, shoe_condition, box_condition, instant_ship, sale_status} (when `size` given) + product reference","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"air-jordan-1-retro-high-og-chicago-555088-101","condition":"used"}},{"name":"related","description":"Products related to one product by `slug`/`url`: GOAT's recommended products plus the brand / category / silhouette grids GOAT surfaces on the page. Catalogue discovery from any starting product.","required_params":[],"optional_params":["slug","url"],"params":[{"name":"slug","type":"string","required":false,"description":"Product slug from a GOAT URL (goat.com/sneakers/<slug>) — copy it from search results. Provide slug OR url.","on_invalid":"reject","example":"air-jordan-1-retro-high-og-chicago-555088-101","aliases":["url_key","product_slug","id_slug"]},{"name":"url","type":"string","required":false,"description":"Full GOAT product URL — alternative to slug.","on_invalid":"reject","example":"https://www.goat.com/sneakers/air-jordan-1-retro-high-og-chicago-555088-101","aliases":["product_url"]}],"returns":"recommended[]{product_id, slug, url, name, image, brand} + brand_products[] + category_products[] + silhouette_products[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"air-jordan-1-retro-high-og-chicago-555088-101"}}]},{"name":"goldin","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Goldin API — trading card and collectibles auctions from goldin.co: search live lots (current bid, bid count, end time, lot number, auction, grade, images), the full past results archive with hammer prices and sale dates back to 2012, one lot in full with its description, cert number, every image and the public bid history, and the auction calendar. Pokémon, One Piece, Yu-Gi-Oh!, Magic, sports cards, sealed boxes, comics, memorabilia. USD. No login.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/goldin/v1","spec_available":true,"actions":[{"name":"search","description":"Search Goldin's live lots: running and upcoming auction lots and fixed-price listings. Each row has the current bid, bid count, minimum bid, end time, lot number, auction, buyer's premium, grade (from the title) and the main image. Filter by category, sub-category (Pokemon, One Piece, Basketball …), item type, grading company, auction, sale format, price and year; sort by price, bids, end date, lot number or views.","required_params":[],"optional_params":["query","category","sub_category","item_type","certification","auction_type","auction_id","min_price","max_price","year_min","year_max","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Words to find in the lot (title, description, cert number, Goldin serial number). Typo tolerant. Empty = every lot (browse with filters).","on_invalid":"reject","example":"charizard psa","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Goldin category, e.g. Sport, Non-Sport (TCG and pop culture live here). Several values = any of them (comma-separated). Not case-sensitive. meta.facets lists the values present in the answer.","on_invalid":"reject","example":"Non-Sport"},{"name":"sub_category","type":"string","required":false,"description":"Goldin sub-category: Pokemon, One Piece, Yu-Gi-Oh!, Magic The Gathering, Basketball, Baseball, Football, Soccer, Hockey, Marvel, Star Wars … Several values = any of them. Not case-sensitive.","on_invalid":"reject","example":"Pokemon","aliases":["game"]},{"name":"item_type","type":"string","required":false,"description":"Item type: Single Cards, Cases/Boxes/Packs, Sets and Collections, Comics, Video Games, Jerseys, Memorabilia … Several values = any of them.","on_invalid":"reject","example":"Single Cards"},{"name":"certification","type":"string","required":false,"description":"Grading company / certification: PSA, Beckett, CGC, SGC, TAG, Ungraded, Other … Several values = any of them (PSA,CGC).","on_invalid":"reject","example":"PSA","aliases":["grader","grading_company"]},{"name":"auction_type","type":"enum","required":false,"description":"Only one sale format. Ignored when auction_id is given.","on_invalid":"reject","allowed_values":[{"value":"Weekly","label":"Weekly auctions (including the TCG weekly auctions)"},{"value":"Elite","label":"Monthly Elite auctions"},{"value":"Thematic","label":"Themed auctions (photography, combat sports, game-used …)"},{"value":"Fixed_Price","label":"Fixed-price marketplace listings (Buy Now / Make Offer), not auctions"}],"example":"Weekly"},{"name":"auction_id","type":"string","required":false,"description":"Only lots of these auctions (an auctions row's auction_id; several = any).","on_invalid":"reject","example":"202609-1015-3559-5f668df8-4cdf-461d-be0e-aff832344e51"},{"name":"min_price","type":"number","required":false,"description":"Current bid / price (live) or hammer price (sold) at least this many USD.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Current bid / price (live) or hammer price (sold) at most this many USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Item year from (inclusive). Lots without a year are left out when set.","on_invalid":"reject","example":1999,"minimum":1800,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Item year to (inclusive).","on_invalid":"reject","example":2000,"minimum":1800,"maximum":2100},{"name":"sort","type":"enum","required":false,"description":"Result order. Default: relevance when there is a query, else lot_number.","on_invalid":"reject","allowed_values":[{"value":"lot_number","label":"Lot number, lowest first (the site's default; in sold results it orders within one auction — combine with auction_id)"},{"value":"lot_number_desc","label":"Lot number, highest first"},{"value":"price_desc","label":"Price / current bid, highest first"},{"value":"price_asc","label":"Price / current bid, lowest first (a lot without bids counts at its minimum bid)"},{"value":"bids_desc","label":"Most bids first"},{"value":"bids_asc","label":"Fewest bids first"},{"value":"ending_soonest","label":"End date, soonest first (for sold lots: oldest sale first)"},{"value":"newest","label":"Newest auction start first (for sold lots: the most recent auctions first)"},{"value":"recent_bids","label":"Most recently bid on first"},{"value":"most_viewed","label":"Most viewed first"},{"value":"relevance","label":"Best text match first"}],"example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":24,"example":50,"minimum":1,"maximum":100,"aliases":["per_page","size"]}],"returns":"rows[]: lot_id, slug, url, title, lot_number, status (Live / Completed_Sold …), listing_type (auction | fixed_price), auction_type, auction_id, auction_title, current_bid_usd (live auction), list_price_usd (live fixed price), sold_price_usd (HAMMER price, buyer's premium not included), buyer_premium_pct, price_with_premium_usd (our computation: hammer × (1 + premium %)), min_bid_usd, reserve_usd, bids, start_date, end_date, sold_date, dates_are_placeholders, sold_price_in_lot_only (true = search shows no price for this sale; lot returns it), allow_offers, title_grader / title_grade / title_grade_label (parsed from the title), image. meta: total (Goldin's count; approximate above 10,000), total_is_approximate, page, limit, has_more, filters_applied, facets{category, sub_category, item_type, certification, tags, auction_id} (value counts of this answer), warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","sub_category":"Pokemon"}},{"name":"sold","description":"Search Goldin's past results: sold auction lots and sold fixed-price listings with the hammer price, buyer's premium %, bid count and sale date — the price-research archive (Goldin's index holds about 839,000 sold lots back to its first auction, November 2012). Same filters and sorts as search.","required_params":[],"optional_params":["query","category","sub_category","item_type","certification","auction_type","auction_id","min_price","max_price","year_min","year_max","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Words to find in the lot (title, description, cert number, Goldin serial number). Typo tolerant. Empty = every lot (browse with filters).","on_invalid":"reject","example":"charizard psa","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Goldin category, e.g. Sport, Non-Sport (TCG and pop culture live here). Several values = any of them (comma-separated). Not case-sensitive. meta.facets lists the values present in the answer.","on_invalid":"reject","example":"Non-Sport"},{"name":"sub_category","type":"string","required":false,"description":"Goldin sub-category: Pokemon, One Piece, Yu-Gi-Oh!, Magic The Gathering, Basketball, Baseball, Football, Soccer, Hockey, Marvel, Star Wars … Several values = any of them. Not case-sensitive.","on_invalid":"reject","example":"Pokemon","aliases":["game"]},{"name":"item_type","type":"string","required":false,"description":"Item type: Single Cards, Cases/Boxes/Packs, Sets and Collections, Comics, Video Games, Jerseys, Memorabilia … Several values = any of them.","on_invalid":"reject","example":"Single Cards"},{"name":"certification","type":"string","required":false,"description":"Grading company / certification: PSA, Beckett, CGC, SGC, TAG, Ungraded, Other … Several values = any of them (PSA,CGC).","on_invalid":"reject","example":"PSA","aliases":["grader","grading_company"]},{"name":"auction_type","type":"enum","required":false,"description":"Only one sale format. Ignored when auction_id is given.","on_invalid":"reject","allowed_values":[{"value":"Weekly","label":"Weekly auctions (including the TCG weekly auctions)"},{"value":"Elite","label":"Monthly Elite auctions"},{"value":"Thematic","label":"Themed auctions (photography, combat sports, game-used …)"},{"value":"Fixed_Price","label":"Fixed-price marketplace listings (Buy Now / Make Offer), not auctions"}],"example":"Weekly"},{"name":"auction_id","type":"string","required":false,"description":"Only lots of these auctions (an auctions row's auction_id; several = any).","on_invalid":"reject","example":"202609-1015-3559-5f668df8-4cdf-461d-be0e-aff832344e51"},{"name":"min_price","type":"number","required":false,"description":"Current bid / price (live) or hammer price (sold) at least this many USD.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Current bid / price (live) or hammer price (sold) at most this many USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Item year from (inclusive). Lots without a year are left out when set.","on_invalid":"reject","example":1999,"minimum":1800,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Item year to (inclusive).","on_invalid":"reject","example":2000,"minimum":1800,"maximum":2100},{"name":"sort","type":"enum","required":false,"description":"Result order. Default: relevance when there is a query, else lot_number.","on_invalid":"reject","allowed_values":[{"value":"lot_number","label":"Lot number, lowest first (the site's default; in sold results it orders within one auction — combine with auction_id)"},{"value":"lot_number_desc","label":"Lot number, highest first"},{"value":"price_desc","label":"Price / current bid, highest first"},{"value":"price_asc","label":"Price / current bid, lowest first (a lot without bids counts at its minimum bid)"},{"value":"bids_desc","label":"Most bids first"},{"value":"bids_asc","label":"Fewest bids first"},{"value":"ending_soonest","label":"End date, soonest first (for sold lots: oldest sale first)"},{"value":"newest","label":"Newest auction start first (for sold lots: the most recent auctions first)"},{"value":"recent_bids","label":"Most recently bid on first"},{"value":"most_viewed","label":"Most viewed first"},{"value":"relevance","label":"Best text match first"}],"example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 1 = first.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":24,"example":50,"minimum":1,"maximum":100,"aliases":["per_page","size"]}],"returns":"rows[]: lot_id, slug, url, title, lot_number, status (Live / Completed_Sold …), listing_type (auction | fixed_price), auction_type, auction_id, auction_title, current_bid_usd (live auction), list_price_usd (live fixed price), sold_price_usd (HAMMER price, buyer's premium not included), buyer_premium_pct, price_with_premium_usd (our computation: hammer × (1 + premium %)), min_bid_usd, reserve_usd, bids, start_date, end_date, sold_date, dates_are_placeholders, sold_price_in_lot_only (true = search shows no price for this sale; lot returns it), allow_offers, title_grader / title_grade / title_grade_label (parsed from the title), image. meta: total (Goldin's count; approximate above 10,000), total_is_approximate, page, limit, has_more, filters_applied, facets{category, sub_category, item_type, certification, tags, auction_id} (value counts of this answer), warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard psa","sort":"price_desc"}},{"name":"lot","description":"One lot in full by lot_id, slug, goldin.co URL or Goldin serial number: title, description, status, current bid or hammer price, buyer's premium, minimum bid, reserve, bids, views, start / end / last bid time, auction, category, grading company, grade, cert number, year, set, subject, every image and video, previous / next lot, and the public bid history (amount and time of every bid; bidders are not published).","required_params":["lot_id"],"optional_params":["include_bids"],"params":[{"name":"lot_id","type":"string","required":true,"description":"A search / sold row's lot_id or slug, a goldin.co/item/<slug> URL, or a Goldin serial number (SF0000461552).","on_invalid":"reject","example":"2009-pokemon-platinum-supreme-victors-20-charizard-g-reverse-foil-psag1enl","aliases":["id","slug","url","serial_number"]},{"name":"include_bids","type":"boolean","required":false,"description":"Also return the lot's public bid history (one more request). false = the lot alone.","on_invalid":"reject","default":true,"example":true}],"returns":"lot{every search row field + description, category, sub_category, item_type, tags, grading_company, grade, cert_number, autograph_grade, autograph_type, year, year_end, set, set_number, subject, sport, team, season, manufacturer, parallel, variety, serial_number, views, views_last_day, extended_bidding_minutes, last_bid_date, listed_date, seller_id, winner_id, vaultable, images[], videos[], previous_lot, next_lot, extra{}}, bids[{amount_usd, date}] newest first, bid_summary{count, high_usd, first_date, last_date}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"lot_id":"1996-pokemon-japanese-basic-no-rarity-symbol-holographic-6-charizard-pcxsq9"}},{"name":"auctions","description":"Goldin's auction calendar: running and upcoming auctions, or every finished auction back to 2012, with dates, type, buyer's premium and the auction_id to pass to search / sold.","required_params":[],"optional_params":["status","auction_type","query","limit"],"params":[{"name":"status","type":"enum","required":false,"description":"Which auctions.","on_invalid":"reject","allowed_values":[{"value":"active","label":"Running and upcoming auctions"},{"value":"completed","label":"Finished auctions"},{"value":"all","label":"Every auction Goldin lists (back to 2012)"}],"default":"active","example":"completed"},{"name":"auction_type","type":"enum","required":false,"description":"Only one auction type.","on_invalid":"reject","allowed_values":[{"value":"Weekly","label":"Weekly auctions (including the TCG weekly auctions)"},{"value":"Elite","label":"Monthly Elite auctions"},{"value":"Thematic","label":"Themed auctions (photography, combat sports, game-used …)"}],"example":"Weekly"},{"name":"query","type":"string","required":false,"description":"Words that must all appear in the auction title.","on_invalid":"reject","example":"tcg","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"At most this many auctions (newest end date first).","on_invalid":"reject","default":50,"example":20,"minimum":1,"maximum":600}],"returns":"rows[]: auction_id, title, slug, url, status (Active / Completed), auction_type, start_date, end_date, buyer_premium_pct, extended_bidding_minutes, extended_bidding_status, description, image. meta: total.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"status":"all","limit":20}}]},{"name":"goo-net","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Goo-net Japanese vehicles","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/goo-net/v1","spec_available":true,"actions":[{"name":"search","description":"Search public Japanese used vehicle inventory. Cards contain asking and total prices, source specs and dealer. Use listing for full detail.","required_params":[],"optional_params":["brand","model","body_type","prefecture","page","max_results"],"params":[{"name":"brand","type":"enum","required":false,"description":"Source brand route code.","on_invalid":"reject","allowed_values":[{"value":"TOYOTA","label":"TOYOTA"},{"value":"HONDA","label":"HONDA"},{"value":"NISSAN","label":"NISSAN"},{"value":"SUZUKI","label":"SUZUKI"},{"value":"MAZDA","label":"MAZDA"},{"value":"SUBARU","label":"SUBARU"},{"value":"DAIHATSU","label":"DAIHATSU"},{"value":"MITSUBISHI","label":"MITSUBISHI"},{"value":"LEXUS","label":"LEXUS"},{"value":"BMW","label":"BMW"},{"value":"MERCEDES_BENZ","label":"MERCEDES_BENZ"},{"value":"AUDI","label":"AUDI"},{"value":"VOLKSWAGEN","label":"VOLKSWAGEN"},{"value":"PORSCHE","label":"PORSCHE"},{"value":"MINI","label":"MINI"},{"value":"VOLVO","label":"VOLVO"},{"value":"PEUGEOT","label":"PEUGEOT"},{"value":"LAND_ROVER","label":"LAND_ROVER"},{"value":"CHRYSLER_JEEP","label":"CHRYSLER_JEEP"},{"value":"ALFA_ROMEO","label":"ALFA_ROMEO"},{"value":"JAGUAR","label":"JAGUAR"},{"value":"MITSUOKA","label":"MITSUOKA"},{"value":"ISUZU","label":"ISUZU"},{"value":"MITSUBISHI_FUSO","label":"MITSUBISHI_FUSO"}],"example":"TOYOTA"},{"name":"model","type":"string","required":false,"description":"Source car route code, requires brand. Example PRIUS.","on_invalid":"reject","example":"PRIUS"},{"name":"body_type","type":"enum","required":false,"description":"Source body type route code.","on_invalid":"reject","allowed_values":[{"value":"KEI","label":"KEI"},{"value":"COMPACT","label":"COMPACT"},{"value":"MINIVAN","label":"MINIVAN"},{"value":"SEDAN","label":"SEDAN"},{"value":"COUPE","label":"COUPE"},{"value":"OPEN","label":"OPEN"},{"value":"SUV","label":"SUV"},{"value":"WAGON","label":"WAGON"},{"value":"SYOYO","label":"SYOYO"},{"value":"KEITRUCK","label":"KEITRUCK"},{"value":"BUS","label":"BUS"}],"example":"SEDAN"},{"name":"prefecture","type":"integer","required":false,"description":"Japanese source prefecture code, padded to two digits in the route.","on_invalid":"reject","example":23,"minimum":1,"maximum":47},{"name":"page","type":"integer","required":false,"description":"Source page number. Basic page advancement is tested; exhaustive national ceiling is not promised.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":20000},{"name":"max_results","type":"integer","required":false,"description":"Local result cap for one source page; does not fetch further pages.","on_invalid":"reject","default":50,"example":20,"minimum":1,"maximum":50}],"returns":"listings[], total, source_page, page_size, has_more, page_clamped; records preserve JPY and source man-yen values.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"TOYOTA","model":"PRIUS","max_results":12}},{"name":"listing","description":"Full public used listing detail: identity, base price, total and fees, specs, description, gallery, dealer, purchase plans and loan terms. Provide url, or listing_id and source_region together.","required_params":[],"optional_params":["url","listing_id","source_region"],"params":[{"name":"url","type":"string","required":false,"description":"Canonical public used listing URL returned by search.","on_invalid":"reject","example":"https://www.goo-net.com/usedcar/spread/goo/15/988026092600206860001.html"},{"name":"listing_id","type":"string","required":false,"description":"19–21 digit source listing ID; requires source_region.","on_invalid":"reject","example":"988026092600206860001"},{"name":"source_region","type":"string","required":false,"description":"Two digit source routing code returned by search, distinct from prefecture.","on_invalid":"reject","example":"15"}],"returns":"Full listing object with separate monetary bases, raw source displays, attributes, media, dealer, description and source status basis.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.goo-net.com/usedcar/spread/goo/15/988026092600206860001.html"}},{"name":"new_catalog","description":"New vehicle model catalog and variant prices, separately typed from used inventory. Price basis is the source new-car catalog price; fees, tax and on-road totals are not inferred.","required_params":["catalog_code"],"optional_params":[],"params":[{"name":"catalog_code","type":"string","required":true,"description":"Source model catalog code such as TOYOTA__YARIS or HONDA__NBOX.","on_invalid":"reject","example":"TOYOTA__YARIS"}],"returns":"new_vehicle_catalog record, source variant IDs and URLs, JPY/man-yen variant prices, source aggregate price range and specs; no used listing status or seller.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"catalog_code":"TOYOTA__YARIS"}}]},{"name":"goodgames","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Good Games API — goodgames.com.au, the Australian trading-card and board-game retailer: AUD prices per card and condition, live stock, card number, set, rarity and finish for Pokémon, Magic: The Gathering, Lorcana, One Piece, Flesh and Blood and Riftbound singles, plus sealed product across 113,000 products. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/goodgames/v1","spec_available":true,"actions":[{"name":"search","description":"Search Good Games by name or card number across the store, one game's singles or sealed product, or any collection; filter by set, rarity, finish, tag, condition, stock and AUD price, sort by price, newest or best selling. One row per product, with a variant per condition carrying its own AUD price and stock.","required_params":[],"optional_params":["game","scope","collection","keyword","exact_match","set","rarity","finish","product_type","tags","condition","in_stock","min_price","max_price","sort","page","limit"],"params":[{"name":"game","type":"enum","required":false,"description":"Limit to one game. Singles exist for pokemon, mtg, lorcana, one-piece, flesh-and-blood and riftbound; yu-gi-oh, digimon and star-wars-unlimited are sealed product only. Omit it to search the whole store.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon TCG"},{"value":"mtg","label":"Magic: The Gathering"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"one-piece","label":"One Piece Card Game"},{"value":"flesh-and-blood","label":"Flesh and Blood"},{"value":"riftbound","label":"Riftbound"},{"value":"yu-gi-oh","label":"Yu-Gi-Oh!"},{"value":"digimon","label":"Digimon"},{"value":"star-wars-unlimited","label":"Star Wars: Unlimited"}],"example":"pokemon"},{"name":"scope","type":"enum","required":false,"description":"With game: individual cards (default) or the game's sealed product.","on_invalid":"reject","allowed_values":[{"value":"singles","label":"individual cards"},{"value":"sealed","label":"boxes, packs and other sealed product"}],"default":"singles","example":"sealed"},{"name":"collection","type":"string","required":false,"description":"A collection handle or numeric id, instead of game (the `collections` action lists all 760+).","on_invalid":"reject","example":"pokemon-tcg-all-singles-in-stock","aliases":["collection_id"]},{"name":"keyword","type":"string","required":false,"description":"Card or product name, or a printed card number such as 018/159 or OP08-047.","on_invalid":"reject","example":"charizard","aliases":["q","query","card_number","name"]},{"name":"exact_match","type":"boolean","required":false,"description":"Keep only rows whose title contains keyword as written. The shop's search also matches card text, so a price sort on a card name can start with unrelated cards. Applied per page; meta.removed_not_exact says how many were dropped.","on_invalid":"reject","default":false,"example":true},{"name":"set","type":"string","required":false,"description":"Exact set name as rows' `set` shows it, singles only. The `sets` action lists them.","on_invalid":"reject","example":"SWSH: Crown Zenith","aliases":["set_name"]},{"name":"rarity","type":"string","required":false,"description":"Exact rarity name as rows' `rarity` shows it; the `filters` action lists this game's values.","on_invalid":"reject","example":"Ultra Rare"},{"name":"finish","type":"string","required":false,"description":"Exact finish as rows' `finish` shows it (Holofoil, Reverse Holofoil, Foil, Cold Foil, 1st Edition Normal ...).","on_invalid":"reject","example":"Holofoil","aliases":["variant"]},{"name":"product_type","type":"string","required":false,"description":"Exact product type as rows' `product_type` shows it.","on_invalid":"reject","example":"Board Games"},{"name":"tags","type":"string","required":false,"description":"Any exact tag, several separated by ';'. `filters` lists them per game, e.g. 'H P: 70', 'Retreat Cost: 2'.","on_invalid":"reject","example":"Stage: Basic;Weakness: Fx2"},{"name":"condition","type":"enum","required":false,"description":"Only this condition: each row then describes that condition alone, and rows without it are removed from the page (meta.removed_by_condition). Singles only.","on_invalid":"reject","allowed_values":[{"value":"NM","label":"near mint"},{"value":"LP","label":"lightly played"},{"value":"MP","label":"moderately played"},{"value":"HP","label":"heavily played"},{"value":"DMG","label":"damaged"}],"example":"NM"},{"name":"in_stock","type":"boolean","required":false,"description":"Only products with stock. With condition, only rows with stock in that condition.","on_invalid":"reject","default":false,"example":true},{"name":"min_price","type":"number","required":false,"description":"Lowest price in AUD.","on_invalid":"reject","example":5,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in AUD.","on_invalid":"reject","example":50,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Order of the rows.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"the shop's own collection order (default without a keyword)"},{"value":"relevance","label":"best match (default with a keyword)"},{"value":"best_selling","label":"best selling first"},{"value":"price_asc","label":"price, lowest first"},{"value":"price_desc","label":"price, highest first"},{"value":"title_asc","label":"title A-Z"},{"value":"title_desc","label":"title Z-A"},{"value":"newest","label":"newest products first"},{"value":"oldest","label":"oldest products first"}],"default":"featured","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":20000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-70.","on_invalid":"reject","default":24,"example":70,"minimum":1,"maximum":70,"aliases":["per_page"]}],"returns":"rows[]: id, handle, title, name (the card name without number, set and finish), game, card_number, set, rarity, finish (the shop's Variant: Holofoil, Reverse Holofoil, Cold Foil ...), condition (only with the condition filter), language, is_single, product_type, product_kind, brand, is_preorder, price_aud (lowest of the row's variants), price_max_aud, lowest_in_stock_price_aud, compare_at_price_aud (the reduced-from price, when one is above the price), on_sale, in_stock, stock (units across variants), stock_by_store (always null, see meta), currency, url, image, attributes{card_type, hp, stage, weakness, retreat_cost, artist, colour, mana_value ...}, created_at, updated_at, variants[]{variant_id, condition (NM/LP/MP/HP/DMG), variant_title, price_aud, compare_at_price_aud, on_sale, in_stock, stock, stock_by_location{location: units}, sku, barcode}. meta: total, page, per_page, last_page, deepest_page, has_more, sort, filters_applied, removed_by_condition, removed_not_exact, stock_by_store_note, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon","keyword":"charizard"}},{"name":"product","description":"One Good Games product in full, by id, handle or URL: every condition with its AUD price and stock, stock per fulfilment location, description, images, tags and the collections it sits in.","required_params":["product"],"optional_params":[],"params":[{"name":"product","type":"string","required":true,"description":"A row's id or handle, or a goodgames.com.au product URL.","on_invalid":"reject","example":"charizard-v-018-159-swsh-crown-zenith-holofoil","aliases":["id","handle","url","product_id"]}],"returns":"product{id, handle, title, name (the card name without number, set and finish), game, card_number, set, rarity, finish (the shop's Variant: Holofoil, Reverse Holofoil, Cold Foil ...), condition (only with the condition filter), language, is_single, product_type, product_kind, brand, is_preorder, price_aud (lowest of the row's variants), price_max_aud, lowest_in_stock_price_aud, compare_at_price_aud (the reduced-from price, when one is above the price), on_sale, in_stock, stock (units across variants), stock_by_store (always null, see meta), currency, url, image, attributes{card_type, hp, stage, weakness, retreat_cost, artist, colour, mana_value ...}, created_at, updated_at, variants[]{variant_id, condition (NM/LP/MP/HP/DMG), variant_title, price_aud, compare_at_price_aud, on_sale, in_stock, stock, stock_by_location{location: units}, sku, barcode}, description, images[], tags[], collections[]{id, handle, title}, options[]{name, values[]}}. meta.stock_source: 'catalogue' (stock counts) or 'product_page' (the product is outside the search index: availability only, stock null).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product":"charizard-v-018-159-swsh-crown-zenith-holofoil"}},{"name":"sets","description":"The card sets Good Games carries singles from for one game, newest stock first, with how many products of each were read. Set names are what `search` takes as `set`.","required_params":["game"],"optional_params":["max_pages"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon TCG"},{"value":"mtg","label":"Magic: The Gathering"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"one-piece","label":"One Piece Card Game"},{"value":"flesh-and-blood","label":"Flesh and Blood"},{"value":"riftbound","label":"Riftbound"},{"value":"yu-gi-oh","label":"Yu-Gi-Oh!"},{"value":"digimon","label":"Digimon"},{"value":"star-wars-unlimited","label":"Star Wars: Unlimited"}],"example":"pokemon"},{"name":"max_pages","type":"integer","required":false,"description":"How many pages of 70 products to read. A game whose list needs more returns `complete: false` with the sets found on the newest products.","on_invalid":"reject","default":60,"example":60,"minimum":1,"maximum":60}],"returns":"sets[]{set, products_seen, game}. meta: complete (false when the game has more pages than were read: only MTG at the default max_pages of 60), pages_read, pages_total, products_seen, total_products.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":5},"example_params":{"game":"pokemon"}},{"name":"filters","description":"The filter values Good Games offers for one game's singles or sealed product or for a collection, with product counts: rarity, finish, card type, stage, HP, weakness, ink, colour and more.","required_params":[],"optional_params":["game","scope","collection"],"params":[{"name":"game","type":"enum","required":false,"description":"Limit to one game. Singles exist for pokemon, mtg, lorcana, one-piece, flesh-and-blood and riftbound; yu-gi-oh, digimon and star-wars-unlimited are sealed product only. Omit it to search the whole store.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon TCG"},{"value":"mtg","label":"Magic: The Gathering"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"one-piece","label":"One Piece Card Game"},{"value":"flesh-and-blood","label":"Flesh and Blood"},{"value":"riftbound","label":"Riftbound"},{"value":"yu-gi-oh","label":"Yu-Gi-Oh!"},{"value":"digimon","label":"Digimon"},{"value":"star-wars-unlimited","label":"Star Wars: Unlimited"}],"example":"pokemon"},{"name":"scope","type":"enum","required":false,"description":"With game: individual cards (default) or the game's sealed product.","on_invalid":"reject","allowed_values":[{"value":"singles","label":"individual cards"},{"value":"sealed","label":"boxes, packs and other sealed product"}],"default":"singles","example":"sealed"},{"name":"collection","type":"string","required":false,"description":"A collection handle or numeric id, instead of game (the `collections` action lists all 760+).","on_invalid":"reject","example":"pokemon-tcg-all-singles-in-stock","aliases":["collection_id"]}],"returns":"filters[]{filter, filter_id, kind, values[]{value (give it to `tags`), label, products}}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon"}},{"name":"collections","description":"Good Games' collections with their product counts: games, singles, sets, brands, categories.","required_params":[],"optional_params":["keyword"],"params":[{"name":"keyword","type":"string","required":false,"description":"Only collections whose title or handle contains this.","on_invalid":"reject","example":"pokemon","aliases":["q","query"]}],"returns":"rows[]{id, handle (give it to `collection`), title, products_count, updated_at}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"keyword":"pokemon"}},{"name":"suggest","description":"As-you-type suggestions from the shop's search box: search terms, products and collections.","required_params":["keyword"],"optional_params":[],"params":[{"name":"keyword","type":"string","required":true,"description":"Part of a name.","on_invalid":"reject","example":"charizard","aliases":["q","query"]}],"returns":"query, suggestions[], did_you_mean[], total, products[]{id, handle, title, price_aud, price_max_aud, in_stock, image, url}, collections[]{id, handle, title}.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"keyword":"charizard"}}]},{"name":"goodreads","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Goodreads API scraper — book details, ratings, reviews, author profiles & bibliographies, series, Listopia lists, genre charts, and quotes from goodreads.com (no account required)","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/goodreads/v1","spec_available":true,"actions":[{"name":"book_detail","description":"Full book record from Goodreads by book ID or URL: title, author(s), average rating, total ratings & text-reviews counts, 1-5 star distribution, genres, series, ISBN/ISBN-13/ASIN, publisher, publication year, page count, edition count, featured characters & settings, literary awards, retailer buy links, and up to 30 embedded reader reviews.","required_params":[],"optional_params":["id","url","reviews_limit","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"Goodreads numeric book id (the digits in /book/show/<id>-slug). Supply `id` OR `url`.","on_invalid":"reject","example":"2767052","aliases":["book_id"]},{"name":"url","type":"string","required":false,"description":"Full Goodreads book URL — an alternative to `id`.","on_invalid":"reject","example":"https://www.goodreads.com/book/show/2767052"},{"name":"reviews_limit","type":"integer","required":false,"description":"Maximum number of reviews to return per book (up to ~30 are embedded on the Goodreads book page; default 30).","on_invalid":"ignore","default":30,"example":30,"minimum":1},{"name":"include_pii","type":"boolean","required":false,"description":"If true, do NOT redact reviewer display data (default redacts phone/email, keeps public name).","on_invalid":"ignore","default":false,"example":false}],"returns":"book{} — title, authors[], avg_rating, ratings_count, reviews_count, ratings_dist, genres, series, isbn/isbn13/asin, publisher, publish_year, num_pages, characters[], places[], awards[], buy_links[], editions, reviews_sample[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"2767052"}},{"name":"search","description":"Search for books or authors on Goodreads by title, author name, or keyword → returns matching results with title, author, ISBN, book ID, average rating, and cover URL.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Book/author search text (autocomplete typeahead → results[]).","on_invalid":"reject","example":"hunger games","aliases":["q"]}],"returns":"items[] (title, author, author_id, isbn, book_id, avg_rating, url, image_url), count, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"hunger games"}},{"name":"author","description":"Author profile from Goodreads by author ID or URL: name, average rating, total ratings, birth/death date & place, genres, biography, and a sample of their books.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Goodreads numeric author id (the digits in /author/show/<id>). Supply `id` OR `url`.","on_invalid":"reject","example":"153394","aliases":["author_id"]},{"name":"url","type":"string","required":false,"description":"Full Goodreads author URL — an alternative to `id`.","on_invalid":"reject","example":"https://www.goodreads.com/author/show/153394"}],"returns":"author{} — name, avg_rating, ratings_count, birth_date/place, genres, bio, books[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"153394"}},{"name":"author_books","description":"An author's complete bibliography on Goodreads (paginated) by author ID or URL → every book with its title, book ID, average rating, ratings count, cover, and publication year.","required_params":[],"optional_params":["id","url","page"],"params":[{"name":"id","type":"string","required":false,"description":"Goodreads numeric author id (the digits in /author/show/<id>). Supply `id` OR `url`.","on_invalid":"reject","example":"153394","aliases":["author_id"]},{"name":"url","type":"string","required":false,"description":"Full Goodreads author URL — an alternative to `id`.","on_invalid":"reject","example":"https://www.goodreads.com/author/show/153394"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more / data.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"books[] (book_id, title, url, avg_rating, ratings_count, cover, published_year), author_name, count, page, has_more","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"153394"}},{"name":"reviews","description":"Fetch reader reviews for a book on Goodreads (by ID or URL) → each review includes the user, star rating, full review text, date, likes count, and spoiler flag. Returns up to 30 reviews per request.","required_params":[],"optional_params":["id","url","book_id","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"Goodreads numeric book id (the digits in /book/show/<id>-slug). Supply `id` OR `url`.","on_invalid":"reject","example":"2767052","aliases":["book_id"]},{"name":"url","type":"string","required":false,"description":"Full Goodreads book URL — an alternative to `id`.","on_invalid":"reject","example":"https://www.goodreads.com/book/show/2767052"},{"name":"reviews_limit","type":"integer","required":false,"description":"Maximum number of reviews to return per book (up to ~30 are embedded on the Goodreads book page; default 30).","on_invalid":"ignore","default":30,"example":30,"minimum":1},{"name":"include_pii","type":"boolean","required":false,"description":"If true, do NOT redact reviewer display data (default redacts phone/email, keeps public name).","on_invalid":"ignore","default":false,"example":false}],"returns":"reviews[] (user, rating, text, date, likes, spoiler), count, book_id","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.goodreads.com/book/show/2767052"}},{"name":"series","description":"A Goodreads book series by series ID or URL → the ordered list of books in the series (title, book ID, URL) plus the primary/total work counts.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Goodreads numeric series id (the digits in /series/<id>-slug). Supply `id` OR `url`.","on_invalid":"reject","example":"73758","aliases":["series_id"]},{"name":"url","type":"string","required":false,"description":"Full Goodreads series URL — an alternative to `id`.","on_invalid":"reject","example":"https://www.goodreads.com/series/show/2767052"}],"returns":"title, primary_works_count, total_works_count, books[] (book_id, title, url), count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"73758"}},{"name":"list","description":"A Goodreads Listopia list by list ID or URL (paginated) → its ranked books with the community score, vote count, and rating for each, plus the list title and total voters.","required_params":[],"optional_params":["id","url","page"],"params":[{"name":"id","type":"string","required":false,"description":"Goodreads Listopia list id (the digits in /list/show/<id>). Supply `id` OR `url`.","on_invalid":"reject","example":"1","aliases":["list_id"]},{"name":"url","type":"string","required":false,"description":"Full Goodreads list URL — an alternative to `id`.","on_invalid":"reject","example":"https://www.goodreads.com/list/show/2767052"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more / data.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"title, total_books, voters, description, books[] (rank, book_id, title, author, score, votes, avg_rating, ratings_count, url), count, page, has_more","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1"}},{"name":"lists_by_tag","description":"Discover the most popular Goodreads Listopia lists for a topic tag (e.g. fantasy, romance, classics) — returns matching curated lists you can then pull with `list`.","required_params":["tag"],"optional_params":["page"],"params":[{"name":"tag","type":"string","required":true,"description":"A Listopia topic tag (e.g. fantasy, romance, classics, ya) → the most popular curated lists for that topic.","on_invalid":"reject","example":"fantasy"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more / data.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"lists[] (list_id, title, url), tag, count, page, has_more","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"tag":"fantasy"}},{"name":"genre","description":"The most-read books in a Goodreads genre / shelf this week (e.g. fantasy, mystery, romance, science-fiction, young-adult) → trending books with cover and link.","required_params":["genre"],"optional_params":[],"params":[{"name":"genre","type":"string","required":true,"description":"A Goodreads genre / shelf slug (e.g. fantasy, fiction, mystery, romance, science-fiction, young-adult, non-fiction) → the most-read books for that genre.","on_invalid":"reject","example":"fantasy","aliases":["name"]}],"returns":"books[] (book_id, title, url, cover), genre, related_genres[], count","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"genre":"fantasy"}},{"name":"quotes","description":"Quotes from Goodreads — either every quote BY an author (author_id) or every quote FROM a book (work_id, found in book_detail.book.work_id). Paginated; each quote has its text, source title, like count, and topic tags.","required_params":[],"optional_params":["author_id","work_id","book_id","id","url","page","include_pii"],"params":[{"name":"author_id","type":"string","required":false,"description":"Goodreads author id for quotes BY that author. Supply `author_id`, OR `work_id` (book), OR a full `url`.","on_invalid":"reject","example":"153394","aliases":["id"]},{"name":"work_id","type":"string","required":false,"description":"Goodreads WORK id (from book_detail.book.work_id) for quotes FROM that book. Supply `work_id`, OR `author_id`, OR a full `url`.","on_invalid":"reject","example":"2792775","aliases":["book_id"]},{"name":"url","type":"string","required":false,"description":"Full Goodreads quotes URL (/author/quotes/<id> or /work/quotes/<id>) — an alternative to author_id / work_id.","on_invalid":"reject","example":"https://www.goodreads.com/author/quotes/153394"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more / data.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"include_pii","type":"boolean","required":false,"description":"If true, do NOT redact reviewer display data (default redacts phone/email, keeps public name).","on_invalid":"ignore","default":false,"example":false}],"returns":"quotes[] (text, author, title, likes, tags), scope, count, page, has_more","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"author_id":"153394"}}]},{"name":"google-ads-transparency","category":{"id":"search-seo","title":"Search & SEO"},"title":"Google Ads Transparency Center API — every advertiser on Google and the ads they run: search advertisers by name or domain, verified legal name and country, all ads of an advertiser or a domain with format, first / last shown date and the creative image, filtered by country, format, platform (Search, YouTube, Shopping, Maps, Play) and date; one ad with every country it ran in, EU impression ranges by country and platform and EU audience selection; election ads with spend and impression ranges and age / gender / location targeting. No login, no key.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/google-ads-transparency/v1","spec_available":true,"actions":[{"name":"search","description":"Look up advertisers and domains by name, the way the Transparency Center search box does. Returns matching advertisers (id, name, country, approximate number of ads, verified) and matching domains. Use the advertiser_id with `ads` / `advertiser`, the domain with `ads`.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Advertiser name or domain to look up (free text, as typed into the site's search box).","on_invalid":"reject","example":"nike","aliases":["q","keyword"]},{"name":"limit","type":"integer","required":false,"description":"Advertisers and domains to return, each (1-50).","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"advertisers[]{advertiser_id, name, country, ads_count_min, ads_count_max (the source gives a range), verified, advertiser_url}, domains[]{domain}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"advertisers","description":"Every advertiser whose name matches the query, paged, with the total the source reports. Rows carry the verified legal name and country.","required_params":["query"],"optional_params":["limit","page_token"],"params":[{"name":"query","type":"string","required":true,"description":"Advertiser name or domain to look up (free text, as typed into the site's search box).","on_invalid":"reject","example":"nike","aliases":["q","keyword"]},{"name":"limit","type":"integer","required":false,"description":"Advertisers per page (1-100).","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":100},{"name":"page_token","type":"string","required":false,"description":"`next_page_token` from the previous page's meta.","on_invalid":"reject","example":"","aliases":["next_page_token","cursor"]}],"returns":"rows[]{advertiser_id, name, legal_name, country, verified, advertiser_url}. meta: total (broad queries start at 500 and grow page by page: total_is_exact false), next_page_token, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"advertiser","description":"One advertiser: name, verified legal name, country, verification status and, for election advertisers, the number of election ads, the registration id (e.g. US EIN / FEC id) and the regions they are verified for.","required_params":["advertiser_id"],"optional_params":[],"params":[{"name":"advertiser_id","type":"string","required":true,"description":"Advertiser id (AR + 20 digits) as returned by search, advertisers or ads.","on_invalid":"reject","example":"AR16735076323512287233","value_pattern":"(?i)AR\\d{10,24}"}],"returns":"advertiser{advertiser_id, name, legal_name, country, verified, verticals[] (commercial / political), political{political_ads_count, registration_ids[]{id, country}, country, regions[]} (election advertisers only), advertiser_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"advertiser_id":"AR16735076323512287233"}},{"name":"ads","description":"All ads of one advertiser (`advertiser_id`) or all ads pointing to one domain (`domain`, any advertiser), newest first, with format, first / last shown date, days shown and the creative image or preview. Filter by country, format, platform and date range; page with page_token. One of advertiser_id or domain is required.","required_params":[],"optional_params":["advertiser_id","domain","region","format","platform","date_from","date_to","limit","page_token"],"params":[{"name":"advertiser_id","type":"string","required":false,"description":"Advertiser id (AR + 20 digits). Give this OR `domain`.","on_invalid":"reject","example":"AR16735076323512287233","value_pattern":"(?i)AR\\d{10,24}"},{"name":"domain","type":"string","required":false,"description":"Every ad that points to this domain, from any advertiser (e.g. nike.com). Give this OR `advertiser_id`.","on_invalid":"reject","example":"nike.com","aliases":["website"]},{"name":"region","type":"string","required":false,"description":"Where the ad was shown: two-letter country code (244 covered; US, GB, DE, FR, IN, BR, JP …) or 'anywhere'.","on_invalid":"reject","default":"anywhere","example":"US","value_pattern":"(?i)[a-z]{2}|anywhere","aliases":["country"]},{"name":"format","type":"enum","required":false,"description":"Ad format: text, image or video.","on_invalid":"reject","allowed_values":[{"value":"text","label":"Text ads (search); delivered as a rendered image of the ad"},{"value":"image","label":"Image / display ads"},{"value":"video","label":"Video ads"}],"example":"video"},{"name":"platform","type":"enum","required":false,"description":"Where the ad ran: search, youtube, shopping, maps or play.","on_invalid":"reject","allowed_values":[{"value":"search","label":"Google Search"},{"value":"youtube","label":"YouTube"},{"value":"shopping","label":"Google Shopping"},{"value":"maps","label":"Google Maps"},{"value":"play","label":"Google Play"}],"example":"youtube"},{"name":"date_from","type":"string","required":false,"description":"Only ads shown on or after this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-01-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["start_date"]},{"name":"date_to","type":"string","required":false,"description":"Only ads shown on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-01-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["end_date"]},{"name":"limit","type":"integer","required":false,"description":"Ads per page (1-100; the source returns nothing above 100).","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":100},{"name":"page_token","type":"string","required":false,"description":"`next_page_token` from the previous page's meta.","on_invalid":"reject","example":"","aliases":["next_page_token","cursor"]}],"returns":"rows[]{creative_id, advertiser_id, advertiser_name, format (text/image/video), first_shown, last_shown (ISO-8601 UTC), days_shown (days the ad was shown; Google's day boundary is not UTC, so it can be one more than the UTC span), preview_type (image = a rendered picture of the ad; html = Google's ad preview script), image_url, width, height, preview_url, google_creative_id, google_customer_id, ad_group_id, ad_url, advertiser_url}. meta: total_min, total_max (the source reports a range), total_is_exact false, next_page_token, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"advertiser_id":"AR16735076323512287233","region":"US"}},{"name":"political_ads","description":"Election ads shown in one country, newest first, with the advertiser, the impressions range and the amount spent range in the advertiser's currency (for an ad that also ran elsewhere these are the figures the source lists for this country; `ad` gives the ad's totals). Optionally one advertiser, one format or a date range. The total is exact.","required_params":["region"],"optional_params":["advertiser_id","format","date_from","date_to","limit","page_token"],"params":[{"name":"region","type":"string","required":true,"description":"Two-letter country code. Election ads are listed per region.","on_invalid":"reject","example":"US","value_pattern":"(?i)[a-z]{2}","aliases":["country"]},{"name":"advertiser_id","type":"string","required":false,"description":"Advertiser id (AR + 20 digits). Give this OR `domain`.","on_invalid":"reject","example":"AR16735076323512287233","value_pattern":"(?i)AR\\d{10,24}"},{"name":"format","type":"enum","required":false,"description":"Ad format: text, image or video.","on_invalid":"reject","allowed_values":[{"value":"text","label":"Text ads (search); delivered as a rendered image of the ad"},{"value":"image","label":"Image / display ads"},{"value":"video","label":"Video ads"}],"example":"video"},{"name":"date_from","type":"string","required":false,"description":"Only ads shown on or after this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-01-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["start_date"]},{"name":"date_to","type":"string","required":false,"description":"Only ads shown on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-01-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["end_date"]},{"name":"limit","type":"integer","required":false,"description":"Ads per page (1-100; the source returns nothing above 100).","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":100},{"name":"page_token","type":"string","required":false,"description":"`next_page_token` from the previous page's meta.","on_invalid":"reject","example":"","aliases":["next_page_token","cursor"]}],"returns":"rows[]{creative_id, advertiser_id, advertiser_name, format (text/image/video), first_shown, last_shown (ISO-8601 UTC), days_shown (days the ad was shown; Google's day boundary is not UTC, so it can be one more than the UTC span), preview_type (image = a rendered picture of the ad; html = Google's ad preview script), image_url, width, height, preview_url, google_creative_id, google_customer_id, ad_group_id, ad_url, advertiser_url, impressions_min, impressions_max, spend{currency, min, max}, regions[]}. meta: total (exact), total_is_exact true, next_page_token, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"region":"US"}},{"name":"ad","description":"One ad in full: every variation (image or preview), the topic, every country it ran in with first / last shown date, and for EU countries the impressions range per country and per platform, the EU total and the audience selection (demographics, locations, contextual signals, topics of interest, customer lists: included / excluded). Election ads add spend, impressions and age / gender / location targeting.","required_params":["creative_id"],"optional_params":["advertiser_id"],"params":[{"name":"creative_id","type":"string","required":true,"description":"Ad id (CR + 20 digits) as returned by ads / political_ads.","on_invalid":"reject","example":"CR04967699671523786753","value_pattern":"(?i)CR\\d{10,24}"},{"name":"advertiser_id","type":"string","required":false,"description":"Advertiser id of the ad (optional; the ad id alone resolves it).","on_invalid":"reject","example":"AR16735076323512287233","value_pattern":"(?i)AR\\d{10,24}"}],"returns":"ad{creative_id, advertiser_id, advertiser_name, format, political, first_shown (election ads), last_shown, days_shown (election ads), topic{id, name}, variation_count, variations[]{preview_type, image_url, width, height, preview_url, google_creative_id, google_customer_id, ad_group_id}, region_count, regions[]{region, region_name, criterion_id, first_shown, last_shown, impressions_min, impressions_max, impressions_by_platform[]{platform, impressions_min, impressions_max}} (first_shown and impressions for EU countries and election ads; elsewhere last_shown only), eu{first_shown, last_shown, impressions_min, impressions_max, impressions_by_platform[]}, audience_selection{demographic_info, geographic_locations, contextual_signals, topics_of_interest, customer_lists: {included, excluded}}, ad_url}. Election ads add shown_in[], impressions_min, impressions_max, spend{currency, min, max}, targeting{age_included[], age_excluded[], gender_included[], gender_excluded[], locations_included[]{criterion_id, region, region_name}, locations_excluded[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"creative_id":"CR04967699671523786753","advertiser_id":"AR16735076323512287233"}}]},{"name":"google-maps","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Google Maps API — place search, business details, public reviews, nearby search, geocoding and change monitoring: name, address, phone, website, rating, review count, categories, photos and coordinates from Google Maps (geo-biased, logged-out, no API key or quota)","version":"1.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/google-maps/v1","spec_available":true,"actions":[{"name":"place/search","description":"Search places by text query with optional lat/lng geo-bias. Returns up to 200 places with name, address, rating, categories, phone, website, coordinates, photos.","required_params":["query"],"optional_params":["lat","lng","altitude","maxResults","lang","region","include_contacts"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for — business name, type or free text, ideally with a place hint ('pizza Brooklyn', 'Katz's Delicatessen Manhattan').","on_invalid":"reject","example":"specialty coffee Times Square"},{"name":"lat","type":"number","required":false,"description":"Latitude to bias the search around. Strongly recommended — without it Google assumes the central US.","on_invalid":"reject","example":40.7589,"minimum":-90,"maximum":90},{"name":"lng","type":"number","required":false,"description":"Longitude to bias the search around (pair with lat).","on_invalid":"reject","example":-73.9881,"minimum":-180,"maximum":180},{"name":"maxResults","type":"integer","required":false,"description":"How many places to return (1–200). The engine pages Google's 20-per-page results internally — no page/cursor needed.","on_invalid":"reject","default":20,"minimum":1,"maximum":200},{"name":"lang","type":"string","required":false,"description":"Result language (Google hl code: en, de, tr, es…). Affects category names and localized fields.","on_invalid":"ignore","default":"en","example":"en"},{"name":"region","type":"string","required":false,"description":"Region bias (Google gl country code: us, de, tr…).","on_invalid":"ignore","default":"us","example":"us"},{"name":"altitude","type":"integer","required":false,"description":"Advanced: viewport altitude in meters — smaller = tighter local results, larger = wider area.","on_invalid":"ignore","default":15000,"minimum":100,"maximum":10000000},{"name":"include_contacts","type":"boolean","required":false,"description":"Enrich each result that has a website with contact details scraped from that site: business email(s), extra phone numbers, and social profile links (LinkedIn, Instagram, Facebook, Twitter/X, YouTube, TikTok). Adds email, emails, contact_phones and socials to each place. Off by default; turning it on fetches every result's website (through the proxy) so the response is slower — best used for lead generation. Sites that fail/block are returned without contacts.","on_invalid":"ignore","default":false,"example":true}],"returns":"places[]{fid, place_id, cid, entity_id, name, rating, review_count, category_primary, categories, address, locality, latitude, longitude, website, domain, phone, phone_display, hours_today, photos, photo_count, thumbnail, maps_url} (+ email, emails, contact_phones, socials when include_contacts=true)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"specialty coffee Times Square","lat":40.7589,"lng":-73.9881,"maxResults":10}},{"name":"place/detail","description":"The single richest matching place: name, address, phone, website, rating, total review count, categories, coordinates, opening hours and photos.","required_params":["query"],"optional_params":["lat","lng","lang","region","include_contacts"],"params":[{"name":"query","type":"string","required":true,"description":"The business to look up — name plus a location hint gives the best match.","on_invalid":"reject","example":"Katz's Delicatessen Manhattan"},{"name":"lat","type":"number","required":false,"description":"Latitude to bias the search around. Strongly recommended — without it Google assumes the central US.","on_invalid":"reject","example":40.7589,"minimum":-90,"maximum":90},{"name":"lng","type":"number","required":false,"description":"Longitude to bias the search around (pair with lat).","on_invalid":"reject","example":-73.9881,"minimum":-180,"maximum":180},{"name":"lang","type":"string","required":false,"description":"Result language (Google hl code: en, de, tr, es…). Affects category names and localized fields.","on_invalid":"ignore","default":"en","example":"en"},{"name":"region","type":"string","required":false,"description":"Region bias (Google gl country code: us, de, tr…).","on_invalid":"ignore","default":"us","example":"us"},{"name":"include_contacts","type":"boolean","required":false,"description":"Enrich each result that has a website with contact details scraped from that site: business email(s), extra phone numbers, and social profile links (LinkedIn, Instagram, Facebook, Twitter/X, YouTube, TikTok). Adds email, emails, contact_phones and socials to each place. Off by default; turning it on fetches every result's website (through the proxy) so the response is slower — best used for lead generation. Sites that fail/block are returned without contacts.","on_invalid":"ignore","default":false,"example":true}],"returns":"place{fid, place_id, cid, entity_id, name, rating, review_count, category_primary, categories, address, locality, latitude, longitude, website, domain, phone, phone_display, hours_today, photos, photo_count, thumbnail, maps_url} (+ email, emails, contact_phones, socials when include_contacts=true)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Katz's Delicatessen Manhattan","lat":40.7223,"lng":-73.9874}},{"name":"place/by-id","description":"Fetch a place directly by its Google id — fid (0x…:0x…), place_id or numeric cid — no text query needed. Use the id returned by place/search.","required_params":[],"optional_params":["fid","place_id","cid","query","lat","lng","lang","region"],"params":[{"name":"fid","type":"string","required":false,"description":"Google feature id (ftid '0x…:0x…'). Pass this OR cid OR place_id.","on_invalid":"ignore","example":"0x89c2598f7ff4aa09:0x313547e757cb8cea"},{"name":"place_id","type":"string","required":false,"description":"Alias of fid (same 0x…:0x… value).","on_invalid":"ignore"},{"name":"cid","type":"string","required":false,"description":"Numeric Google customer id (cid). Pass this OR fid.","on_invalid":"ignore","example":"3545343783316455146"},{"name":"query","type":"string","required":false,"description":"Optional text fallback if no id is supplied.","on_invalid":"ignore"},{"name":"lat","type":"number","required":false,"description":"Latitude to bias the search around. Strongly recommended — without it Google assumes the central US.","on_invalid":"reject","example":40.7589,"minimum":-90,"maximum":90},{"name":"lng","type":"number","required":false,"description":"Longitude to bias the search around (pair with lat).","on_invalid":"reject","example":-73.9881,"minimum":-180,"maximum":180},{"name":"lang","type":"string","required":false,"description":"Result language (Google hl code: en, de, tr, es…). Affects category names and localized fields.","on_invalid":"ignore","default":"en","example":"en"},{"name":"region","type":"string","required":false,"description":"Region bias (Google gl country code: us, de, tr…).","on_invalid":"ignore","default":"us","example":"us"}],"returns":"place{fid, place_id, cid, entity_id, name, rating, review_count, category_primary, categories, address, locality, latitude, longitude, website, domain, phone, phone_display, hours_today, photos, photo_count, thumbnail, maps_url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"fid":"0x89c2598f7ff4aa09:0x313547e757cb8cea"}},{"name":"place/nearby","description":"Find places of a given type near coordinates (e.g. coffee shops, pharmacies, ATMs around a lat/lng). Returns up to 200 nearby places.","required_params":["lat","lng","type"],"optional_params":["radius","maxResults","lang","region"],"params":[{"name":"type","type":"string","required":true,"description":"The kind of place to find nearby — a category or keyword ('coffee shop', 'pharmacy', 'ATM', 'sushi restaurant').","on_invalid":"reject","example":"coffee shop"},{"name":"lat","type":"number","required":true,"description":"Latitude of the center point.","on_invalid":"reject","example":40.7589,"minimum":-90,"maximum":90},{"name":"lng","type":"number","required":true,"description":"Longitude of the center point.","on_invalid":"reject","example":-73.9851,"minimum":-180,"maximum":180},{"name":"radius","type":"integer","required":false,"description":"Approximate search radius in meters (wider = more area, less local precision). Default ~2 km.","on_invalid":"ignore","default":2000,"minimum":50,"maximum":50000},{"name":"maxResults","type":"integer","required":false,"description":"How many places to return (1–200).","on_invalid":"reject","default":20,"minimum":1,"maximum":200},{"name":"lang","type":"string","required":false,"description":"Result language (Google hl code: en, de, tr, es…). Affects category names and localized fields.","on_invalid":"ignore","default":"en","example":"en"},{"name":"region","type":"string","required":false,"description":"Region bias (Google gl country code: us, de, tr…).","on_invalid":"ignore","default":"us","example":"us"}],"returns":"places[]{fid, place_id, cid, entity_id, name, rating, review_count, category_primary, categories, address, locality, latitude, longitude, website, domain, phone, phone_display, hours_today, photos, photo_count, thumbnail, maps_url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"type":"coffee shop","lat":40.7589,"lng":-73.9851,"maxResults":10}},{"name":"geocode","description":"Turn an address or place name into coordinates: returns latitude, longitude and the formatted address of the best match.","required_params":["address"],"optional_params":["lang","region"],"params":[{"name":"address","type":"string","required":true,"description":"The address or place name to geocode.","on_invalid":"reject","example":"350 5th Ave, New York, NY 10118"},{"name":"lang","type":"string","required":false,"description":"Result language (Google hl code: en, de, tr, es…). Affects category names and localized fields.","on_invalid":"ignore","default":"en","example":"en"},{"name":"region","type":"string","required":false,"description":"Region bias (Google gl country code: us, de, tr…).","on_invalid":"ignore","default":"us","example":"us"}],"returns":"{query, latitude, longitude, formatted_address, locality, name, fid, place_id, maps_url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"address":"350 5th Ave, New York, NY 10118"}},{"name":"place/reviews","description":"Public Google reviews for a place — paginated to ALL reviews. Each review carries author name, rating, text, date, photos and the owner's response. Resolve a place by query, or pass its fid/cid/place_id from place/search.","required_params":[],"optional_params":["query","fid","cid","place_id","sort","max_reviews","cursor","lat","lng","lang","region"],"params":[{"name":"query","type":"string","required":false,"description":"The business whose reviews you want (name + location). Pass this OR an id (fid/cid/place_id).","on_invalid":"ignore","example":"Katz's Delicatessen Manhattan"},{"name":"fid","type":"string","required":false,"description":"Google feature id from place/search — skips re-resolving.","on_invalid":"ignore","example":"0x89c2598f7ff4aa09:0x313547e757cb8cea"},{"name":"cid","type":"string","required":false,"description":"Numeric Google cid (alternative to fid).","on_invalid":"ignore"},{"name":"place_id","type":"string","required":false,"description":"Alias of fid.","on_invalid":"ignore"},{"name":"sort","type":"enum","required":false,"description":"Review ordering. 'newest' for the latest reviews, 'highest_rating'/'lowest_rating' to surface best/worst.","on_invalid":"ignore","allowed_values":[{"value":"most_relevant","label":"Most relevant"},{"value":"newest","label":"Newest first"},{"value":"highest_rating","label":"Highest rating first"},{"value":"lowest_rating","label":"Lowest rating first"}],"default":"most_relevant"},{"name":"max_reviews","type":"integer","required":false,"description":"How many reviews to return. The engine paginates Google's 20-per-page reviews automatically up to this many.","on_invalid":"reject","default":20,"minimum":1,"maximum":2000},{"name":"cursor","type":"string","required":false,"description":"Continue from a previous response's pagination.cursor to fetch the next batch (omit for the first page).","on_invalid":"ignore"},{"name":"lat","type":"number","required":false,"description":"Latitude to bias the search around. Strongly recommended — without it Google assumes the central US.","on_invalid":"reject","example":40.7589,"minimum":-90,"maximum":90},{"name":"lng","type":"number","required":false,"description":"Longitude to bias the search around (pair with lat).","on_invalid":"reject","example":-73.9881,"minimum":-180,"maximum":180},{"name":"lang","type":"string","required":false,"description":"Result language (Google hl code: en, de, tr, es…). Affects category names and localized fields.","on_invalid":"ignore","default":"en","example":"en"},{"name":"region","type":"string","required":false,"description":"Region bias (Google gl country code: us, de, tr…).","on_invalid":"ignore","default":"us","example":"us"}],"returns":"{place{fid,place_id,cid,name,rating,review_count,address,maps_url}, reviews[]{review_id, author_name, author_photo, author_profile_url, rating, text, language, relative_date, date, photos, photo_count, owner_response{text,relative_date}}, count, pagination{cursor, has_more}, aggregate{rating, total}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":3},"example_params":{"query":"Katz's Delicatessen Manhattan","lat":40.7223,"lng":-73.9874,"max_reviews":20}},{"name":"place/photos","description":"Public photos for a place — the featured/hero gallery plus user-uploaded photos attached to reviews. Each is a stable image CDN URL (append '=s800' etc. for a sized variant). Resolve by query or pass an id.","required_params":[],"optional_params":["query","fid","cid","place_id","lat","lng","lang","region"],"params":[{"name":"query","type":"string","required":false,"description":"The business whose photos you want (or pass an id).","on_invalid":"ignore","example":"Katz's Delicatessen Manhattan"},{"name":"fid","type":"string","required":false,"description":"Google feature id from place/search.","on_invalid":"ignore"},{"name":"cid","type":"string","required":false,"description":"Numeric Google cid (alternative to fid).","on_invalid":"ignore"},{"name":"place_id","type":"string","required":false,"description":"Alias of fid.","on_invalid":"ignore"},{"name":"lat","type":"number","required":false,"description":"Latitude to bias the search around. Strongly recommended — without it Google assumes the central US.","on_invalid":"reject","example":40.7589,"minimum":-90,"maximum":90},{"name":"lng","type":"number","required":false,"description":"Longitude to bias the search around (pair with lat).","on_invalid":"reject","example":-73.9881,"minimum":-180,"maximum":180},{"name":"lang","type":"string","required":false,"description":"Result language (Google hl code: en, de, tr, es…). Affects category names and localized fields.","on_invalid":"ignore","default":"en","example":"en"},{"name":"region","type":"string","required":false,"description":"Region bias (Google gl country code: us, de, tr…).","on_invalid":"ignore","default":"us","example":"us"}],"returns":"{place{fid,place_id,cid,name,maps_url}, photos[] (image CDN URLs), count}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"Katz's Delicatessen Manhattan"}},{"name":"place/freshness","description":"Monitor a place for changes: returns the current place plus a typed diff vs the snapshot you pass from a previous call (rating/review_count/phone/website/address changes).","required_params":["query"],"optional_params":["lat","lng","previous","lang","region"],"params":[{"name":"query","type":"string","required":true,"description":"The business to monitor (same query each run).","on_invalid":"reject","example":"Katz's Delicatessen Manhattan"},{"name":"lat","type":"number","required":false,"description":"Latitude to bias the search around. Strongly recommended — without it Google assumes the central US.","on_invalid":"reject","example":40.7589,"minimum":-90,"maximum":90},{"name":"lng","type":"number","required":false,"description":"Longitude to bias the search around (pair with lat).","on_invalid":"reject","example":-73.9881,"minimum":-180,"maximum":180},{"name":"previous","type":"object","required":false,"description":"The `place` object from your previous freshness call. Omit on the first run (returns first_seen: true); pass it on later runs to get the change diff.","on_invalid":"ignore"},{"name":"lang","type":"string","required":false,"description":"Result language (Google hl code: en, de, tr, es…). Affects category names and localized fields.","on_invalid":"ignore","default":"en","example":"en"},{"name":"region","type":"string","required":false,"description":"Region bias (Google gl country code: us, de, tr…).","on_invalid":"ignore","default":"us","example":"us"}],"returns":"place{...} + freshness{first_seen, changed, snapshot_hash, prev_snapshot_hash, changes{field: {old, new}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"Katz's Delicatessen Manhattan","lat":40.7223,"lng":-73.9874}}]},{"name":"google-trends","category":{"id":"search-seo","title":"Search & SEO"},"title":"Google Trends API — trending-now searches, realtime story-clusters, keyword suggest and the full category taxonomy. Note: Google has closed the interest-over-time, interest-by-region, related-queries and related-topics widgets to API clients; those four actions stay addressable and answer with an explicit DISABLED verdict rather than an empty result.","version":"1.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/google-trends/v1","spec_available":true,"actions":[{"name":"trending_now","description":"Currently trending searches for a geo (title + approx traffic + news articles)","required_params":[],"optional_params":["geo"],"params":[{"name":"geo","type":"string","required":false,"description":"Country code for the trending feed (e.g. US, GB, JP). Required by the RSS feed; defaults to US.","on_invalid":"ignore","default":"US","example":"US"}],"returns":"geo, trends[] (title/traffic/approx_traffic/link/articles[] with title/url/source)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"geo":"US"}},{"name":"suggest","description":"Keyword autocomplete — candidate topics/entities (the Google Trends suggestion list) so you can pick the right entity (e.g. the 'Apple Inc. — Technology company' topic mid vs the fruit) before querying interest_over_time/related.","required_params":["keyword"],"optional_params":["hl"],"params":[{"name":"keyword","type":"string","required":true,"description":"The term to autocomplete into Trends topics/entities.","on_invalid":"reject","example":"apple","aliases":["query","q"]},{"name":"hl","type":"string","required":false,"description":"UI language for suggestion titles (e.g. en-US, tr, de).","on_invalid":"ignore","default":"en-US","example":"en-US"}],"returns":"keyword, suggestions[]{mid, title, type}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"keyword":"bitcoin"}},{"name":"categories","description":"List the Google Trends category taxonomy (id + name, hierarchical) so you can find the right `category` id to narrow interest_over_time / related_queries / interest_by_region (e.g. 7=Finance, 5=Computers & Electronics). Optionally filter by a name substring.","required_params":[],"optional_params":["query"],"params":[{"name":"query","type":"string","required":false,"description":"Optional case-insensitive substring to filter category names (e.g. 'finance', 'sports'). Omit to list the full taxonomy.","on_invalid":"ignore","example":"finance","aliases":["q"]}],"returns":"query, total (full taxonomy size), categories[]{id, name, parent_id, parent_name, depth} — pass an `id` as the `category` param of other actions","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"finance"}},{"name":"realtime_trending","description":"Realtime trending story-clusters for a country (richer than trending_now): each cluster has a title, approximate search-traffic volume, the FULL related-query set, category ids, and an article count. Best for 'what is breaking right now' research.","required_params":[],"optional_params":["geo","hours","limit"],"params":[{"name":"geo","type":"string","required":false,"description":"Country code for the realtime feed (e.g. US, GB, JP, TR). Country-level only (sub-region suffixes are dropped). Country/US-state names are auto-mapped. Defaults to US.","on_invalid":"ignore","default":"US","example":"US"},{"name":"hours","type":"enum","required":false,"description":"Trailing time window for the realtime feed. Defaults to 24h.","on_invalid":"ignore","allowed_values":[{"value":4,"label":"last 4 hours"},{"value":24,"label":"last 24 hours"},{"value":48,"label":"last 48 hours"},{"value":168,"label":"last 7 days"}],"default":24,"example":24},{"name":"limit","type":"integer","required":false,"description":"Max story-clusters to return (1-300; Google returns the most trending first). Defaults to 50.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":300}],"returns":"geo, hours_window, stories[]{title, traffic, started/started_date, ended, active, category_ids[], related_queries[], article_count}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"geo":"US"}}]},{"name":"govdeals","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"GovDeals — US government surplus auctions (vehicles, heavy equipment, land)","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/govdeals/v1","spec_available":true,"actions":[{"name":"search","description":"Search LIVE GovDeals lots — the auction marketplace US state and city agencies, school districts, police departments, transit authorities and utilities use to sell surplus trucks, heavy equipment, buses, patrol cars, generators, lab gear and land (~25 000 open lots across 59 states and provinces, measured 2026-10-06). Every row carries the auction facts a price alone cannot give you: current bid with its basis, bid increment, reserve state, the resolved end time in UTC, the selling agency and where the lot physically is. Give query, or category_id, or seller_id, or state, or zip (at least one).","required_params":[],"optional_params":["query","category_id","state","zip","radius_miles","seller_id","seller_type","condition","auction_type","currency","make","model","model_year","min_price","max_price","reserve_not_met","closing_within_days","listed_within_days","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword text, 1-200 characters, matched against the lot title. Use * for everything. At least one of query, category_id, seller_id, state or zip is required.","on_invalid":"reject","example":"dump truck","aliases":["q","keyword","search_text"]},{"name":"category_id","type":"string","required":false,"description":"GovDeals category code from the categories action, for example 64I (Trucks, Miscellaneous), 94C (Trucks), 57 (Laboratory Equipment). Codes mix digits and letters, so pass it as a string.","on_invalid":"reject","example":"64I","value_pattern":"[A-Za-z0-9]{1,8}","aliases":["category"]},{"name":"state","type":"string","required":false,"description":"Two-letter US state or Canadian province code of the lot's physical location, for example TX, OH, CA, ON. 59 values are live; the locations action lists them with counts.","on_invalid":"reject","example":"TX","value_pattern":"[A-Za-z]{2}","aliases":["province"]},{"name":"zip","type":"string","required":false,"description":"Five-digit US ZIP to search around. Combine with radius_miles; on its own the source applies its default radius.","on_invalid":"reject","example":"30301","value_pattern":"\\d{5}","aliases":["zipcode","postal_code"]},{"name":"radius_miles","type":"integer","required":false,"description":"Search radius in miles around zip. Measured to bite: a truck search around 30301 went from 6 954 lots to 918 at 50 miles.","on_invalid":"reject","example":50,"minimum":1,"maximum":3000,"aliases":["radius"]},{"name":"seller_id","type":"integer","required":false,"description":"Numeric selling-agency id (the source's accountId) as search rows and the sellers action return it.","on_invalid":"reject","example":23609,"minimum":1,"maximum":99999999,"aliases":["account_id","agency_id"]},{"name":"seller_type","type":"enum","required":false,"description":"Restrict to one class of seller. Omit for all three.","on_invalid":"reject","allowed_values":[{"value":"government","label":"Government agencies (14 225 live lots)"},{"value":"commercial","label":"Commercial sellers (10 196)"},{"value":"nonprofit","label":"Non-profit sellers (1 041)"}],"example":"government"},{"name":"condition","type":"enum","required":false,"description":"The source's own condition code. GovDeals publishes the code only, never a label, so the codes are passed through unchanged and the live counts above are the measurement.","on_invalid":"reject","allowed_values":[{"value":"SD","label":"Source condition code SD — 20 417 live lots, the bulk of the catalogue"},{"value":"N","label":"Source condition code N — 4 999 live lots"},{"value":"S","label":"Source condition code S — 46 live lots"}],"example":"N"},{"name":"auction_type","type":"enum","required":false,"description":"Sale format. Omit for every format.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Online auction with bidding (25 003 live lots)"},{"value":"make_offer","label":"Make-an-offer lots (345)"},{"value":"buy_now","label":"Fixed-price buy-now lots (114)"}],"example":"auction"},{"name":"currency","type":"enum","required":false,"description":"Restrict to lots priced in one currency.","on_invalid":"reject","allowed_values":[{"value":"usd","label":"US dollars (24 616 live lots)"},{"value":"cad","label":"Canadian dollars (846 live lots, cross-listed from GovDeals Canada)"}],"example":"usd"},{"name":"make","type":"string","required":false,"description":"Manufacturer or brand as the agency typed it, for example Ford, Caterpillar, John Deere. Measured to bite: truck + Ford went from 6 954 to 661 lots.","on_invalid":"reject","example":"Ford","aliases":["makebrand","brand","manufacturer"]},{"name":"model","type":"string","required":false,"description":"Model designation as the agency typed it, for example F-350, 320CL.","on_invalid":"reject","example":"F-350"},{"name":"model_year","type":"integer","required":false,"description":"Model year. Measured to bite: truck + 2015 went from 6 954 to 152 lots.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100,"aliases":["year"]},{"name":"min_price","type":"number","required":false,"description":"Lowest current bid, inclusive, in the lot's own currency. Verified against the rows, not only the count: min_price 10000 returned rows whose cheapest current bid was exactly 10000.00.","on_invalid":"reject","example":1000,"minimum":0,"maximum":99999999,"aliases":["low_price"]},{"name":"max_price","type":"number","required":false,"description":"Highest current bid, inclusive.","on_invalid":"reject","example":50000,"minimum":0,"maximum":99999999,"aliases":["high_price"]},{"name":"reserve_not_met","type":"boolean","required":false,"description":"Only lots that carry a reserve the bidding has NOT yet reached — where a bid can still win below the agency's floor. Verified on the rows: 48/48 returned lots had a reserve and it was unmet.","on_invalid":"reject","default":false,"example":true},{"name":"closing_within_days","type":"integer","required":false,"description":"Only lots whose auction closes within this many days. Measured to bite: 1 day 23 lots, 3 days 83, 7 days 259 for the same keyword. Cannot be combined with listed_within_days.","on_invalid":"reject","example":3,"minimum":1,"maximum":90,"aliases":["ending_within_days"]},{"name":"listed_within_days","type":"integer","required":false,"description":"Only lots first listed within this many days. Measured to bite: 3 days 152 lots, 7 days 167. Cannot be combined with closing_within_days.","on_invalid":"reject","example":7,"minimum":1,"maximum":90,"aliases":["new_within_days"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Each value was verified to actually reorder the result; the source's lotnumber sort reproduced price_high and is therefore not published.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Relevance, the source default"},{"value":"ending_soonest","label":"Auction closing first"},{"value":"ending_latest","label":"Auction closing last"},{"value":"price_low","label":"Current bid, low to high"},{"value":"price_high","label":"Current bid, high to low"},{"value":"newest","label":"Most recently listed first"}],"default":"best_match","example":"ending_soonest"},{"name":"page","type":"integer","required":false,"description":"One-based result page. last_page in the response is the final page that carries rows; past it the source answers with zero rows rather than repeating the last page (measured).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1 to 200. A real handle: every value from 1 to 200 was honoured exactly.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":200,"aliases":["display_rows","page_size"]}],"returns":"total (the source's own uncapped result count), page, limit, last_page, has_more, page_beyond_last, measured_at_utc, and listings[]: item_id (asset-account), asset_id, account_id, auction_id, title, url, lot_number, current_bid with price_basis (current_bid or final_price), currency, bid_increment, buy_now_price, has_reserve, reserve_met, next_bid_meets_reserve, reserve_reduced, ends_at (ISO-8601 UTC, from the source's own UTC field), ends_at_local (the raw US Eastern string), ends_at_zone_label, ends_at_offset_hours, starts_at_local, seconds_remaining, ended, is_sold, source_time_remaining, auction_type, sale_event_id, seller, seller_id, category_id, category_name, make, model, model_year, city, state, state_name, zip, country, is_new_listing and image_url. Measured on 384 rows over eight queries: every field above is populated except make (259/384), model (231/384), model_year (184/384), sale_event_id (50/384) and next_bid_meets_reserve (104/384, only lots with a reserve). The source does NOT carry a bid count in its search payload (null on 384/384 rows) — the detail action fetches it.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"dump truck","sort":"ending_soonest","limit":24}},{"name":"sold","description":"Closed GovDeals auctions — the same rows after the hammer, where current_bid is the FINAL price the lot sold for and price_basis says final_price. A sold-price comparable set for valuing used municipal fleet and equipment: 124 055 closed lots were reachable when measured. Sort ending_latest for the most recently closed first.","required_params":[],"optional_params":["query","category_id","state","zip","radius_miles","seller_id","seller_type","condition","auction_type","currency","make","model","model_year","min_price","max_price","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword text, 1-200 characters. Use * for everything. At least one of query, category_id, seller_id, state or zip is required.","on_invalid":"reject","example":"excavator","aliases":["q","keyword","search_text"]},{"name":"category_id","type":"string","required":false,"description":"GovDeals category code from the categories action.","on_invalid":"reject","example":"64I","value_pattern":"[A-Za-z0-9]{1,8}","aliases":["category"]},{"name":"state","type":"string","required":false,"description":"Two-letter state or province code of the lot's location.","on_invalid":"reject","example":"OH","value_pattern":"[A-Za-z]{2}","aliases":["province"]},{"name":"zip","type":"string","required":false,"description":"Five-digit US ZIP to search around.","on_invalid":"reject","example":"30301","value_pattern":"\\d{5}","aliases":["zipcode","postal_code"]},{"name":"radius_miles","type":"integer","required":false,"description":"Search radius in miles around zip.","on_invalid":"reject","example":100,"minimum":1,"maximum":3000,"aliases":["radius"]},{"name":"seller_id","type":"integer","required":false,"description":"Numeric selling-agency id (the source's accountId).","on_invalid":"reject","example":767,"minimum":1,"maximum":99999999,"aliases":["account_id","agency_id"]},{"name":"seller_type","type":"enum","required":false,"description":"Restrict to one class of seller.","on_invalid":"reject","allowed_values":[{"value":"government","label":"Government agencies"},{"value":"commercial","label":"Commercial sellers"},{"value":"nonprofit","label":"Non-profit sellers"}],"example":"government"},{"name":"condition","type":"enum","required":false,"description":"The source's own condition code, passed through unchanged.","on_invalid":"reject","allowed_values":[{"value":"SD","label":"Source condition code SD"},{"value":"N","label":"Source condition code N"},{"value":"S","label":"Source condition code S"}],"example":"SD"},{"name":"auction_type","type":"enum","required":false,"description":"Sale format.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Online auction"},{"value":"make_offer","label":"Make an offer"},{"value":"buy_now","label":"Buy now"}],"example":"auction"},{"name":"currency","type":"enum","required":false,"description":"Restrict to lots priced in one currency.","on_invalid":"reject","allowed_values":[{"value":"usd","label":"US dollars"},{"value":"cad","label":"Canadian dollars"}],"example":"usd"},{"name":"make","type":"string","required":false,"description":"Manufacturer or brand as the agency typed it.","on_invalid":"reject","example":"Caterpillar","aliases":["makebrand","brand","manufacturer"]},{"name":"model","type":"string","required":false,"description":"Model designation as the agency typed it.","on_invalid":"reject","example":"320CL"},{"name":"model_year","type":"integer","required":false,"description":"Model year.","on_invalid":"reject","example":2008,"minimum":1900,"maximum":2100,"aliases":["year"]},{"name":"min_price","type":"number","required":false,"description":"Lowest final price, inclusive.","on_invalid":"reject","example":500,"minimum":0,"maximum":99999999,"aliases":["low_price"]},{"name":"max_price","type":"number","required":false,"description":"Highest final price, inclusive.","on_invalid":"reject","example":100000,"minimum":0,"maximum":99999999,"aliases":["high_price"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering; ending_latest is the useful one for a comparable set.","on_invalid":"reject","allowed_values":[{"value":"ending_latest","label":"Most recently closed first"},{"value":"ending_soonest","label":"Oldest close first"},{"value":"price_high","label":"Final price, high to low"},{"value":"price_low","label":"Final price, low to high"},{"value":"best_match","label":"Relevance"},{"value":"newest","label":"Most recently listed first"}],"default":"ending_latest","example":"ending_latest"},{"name":"page","type":"integer","required":false,"description":"One-based result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1 to 200.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":200,"aliases":["display_rows","page_size"]}],"returns":"The same listing shape as search, with current_bid carrying the FINAL sale price, price_basis final_price, is_sold true, ended true and a negative seconds_remaining; plus total, page, limit, last_page, has_more and page_beyond_last. The source does NOT accept a 'closed within N days' window on this surface (1, 7 and 30 days all returned the identical 124 055), so no such parameter is published — use sort=ending_latest.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"truck","sort":"ending_latest","limit":24}},{"name":"detail","description":"Everything GovDeals publishes about one lot, including the live auction state its search payload leaves out. Two upstream calls: the lot record (full description, every photo, VIN or serial, odometer, the agency's payment / removal / inspection terms, the physical address with coordinates) and the bid box (bid COUNT, current bid, masked high bidder, buyer premium percentage, watcher and view counters, auto-extension, and the end time in UTC).","required_params":["asset_id","account_id"],"optional_params":[],"params":[{"name":"asset_id","type":"string","required":true,"description":"The lot's asset id. The combined item_id search returns ('276-23609') is also accepted here on its own and fills account_id.","on_invalid":"reject","example":"276-23609","aliases":["item_id","id","assetId"]},{"name":"account_id","type":"integer","required":false,"description":"The selling agency's numeric id. Required unless asset_id was given in the combined asset-account form; a GovDeals lot is identified by the pair, not by the asset id alone.","on_invalid":"reject","example":23609,"minimum":1,"maximum":99999999,"aliases":["seller_id","accountId","agency_id"]}],"returns":"item_id, asset_id, account_id, auction_id, title, url, description, lot_number, quantity, quantity_available, quantity_unit, condition_code, category_id / category_name / parent_category_id / parent_category_name / category_path[], make, model, model_year, vin_or_serial, meter_unit, meter_reading, weight, nsn, sku, inventory_id, title_restriction, restriction, will_ship, attributes[] (the agency's own label/value groups), images[], image_count, question_count, sale_event_id, sale_event_title, seller{seller_id, name, type_code, department, website, logo_url}, location{address, city, state, zip, country, latitude, longitude, warehouse}, payment_instructions, removal_instructions, inspection_instructions, special_instructions, is_cross_listed, status_code, measured_at_utc, and auction{current_bid, bid_count, high_bidder (source-masked), high_bidder_id, second_offer_buyer_id, opening_bid, bid_increment, buy_now_price, buyer_premium_percent, auto_extension, watchers, page_views, ends_at, ends_at_local, ends_at_zone_label, ends_at_offset_hours, starts_at, seconds_remaining, ended, status_code}.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"asset_id":"38552-767","account_id":767}},{"name":"bids","description":"The public bid log for one lot: every bid with the source-masked bidder handle, the amount and the timestamp, plus the source's own bid count. Works on live auctions as well as closed ones — on a closed lot the highest row IS the hammer price, cross-checked against the sold row and the bid box on three lots.","required_params":["asset_id","account_id"],"optional_params":["auction_id","all_auctions","page","limit"],"params":[{"name":"asset_id","type":"string","required":true,"description":"The lot's asset id, or the combined item_id search returns ('38552-767').","on_invalid":"reject","example":"38552-767","aliases":["item_id","id","assetId"]},{"name":"account_id","type":"integer","required":false,"description":"The selling agency's numeric id. Required unless asset_id was given in the combined form.","on_invalid":"reject","example":767,"minimum":1,"maximum":99999999,"aliases":["seller_id","accountId","agency_id"]},{"name":"auction_id","type":"integer","required":false,"description":"Which auction round of this lot to read. Omit and the engine reads it off the lot record first, so the count matches the auction currently shown on the site; relisted lots have more than one round.","on_invalid":"reject","example":1,"minimum":0,"maximum":255},{"name":"all_auctions","type":"boolean","required":false,"description":"Return every bid the lot ever received across all of its auction rounds instead of just the current one. Measured on one relisted lot: 1 bid in the current round, 7 across all rounds.","on_invalid":"reject","default":false,"example":false},{"name":"page","type":"integer","required":false,"description":"One-based page of the bid log.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"limit","type":"integer","required":false,"description":"Bid rows per page, 1 to 200.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":200,"aliases":["display_rows","page_size"]}],"returns":"item_id, asset_id, account_id, auction_id, url, total (the source's own bid count for this scope), page, limit, returned, highest_bid, all_auctions, and bids[]: bidder (source-masked, for example te*****), bidder_id, bid_id, bid_amount, placed_at_local (the source's raw US Eastern string), placed_at_zone_label and is_highest_bid. The source publishes bid timestamps only as naive local strings on this endpoint, with no UTC twin, so no UTC form is invented.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"asset_id":"38552-767","account_id":767}},{"name":"questions","description":"The public question-and-answer thread on one lot: what other bidders asked the selling agency and what the agency answered. This is where the facts that are missing from the listing live — capacity, hours, faults, whether it runs.","required_params":["asset_id","account_id"],"optional_params":[],"params":[{"name":"asset_id","type":"string","required":true,"description":"The lot's asset id, or the combined item_id search returns ('276-23609').","on_invalid":"reject","example":"276-23609","aliases":["item_id","id","assetId"]},{"name":"account_id","type":"integer","required":false,"description":"The selling agency's numeric id. Required unless asset_id was given in the combined form.","on_invalid":"reject","example":23609,"minimum":1,"maximum":99999999,"aliases":["seller_id","accountId","agency_id"]}],"returns":"item_id, asset_id, account_id, url, total and questions[]: question, answer, asked_by (the handle the source itself publishes), asked_by_id, asked_at_local, answered_at_local and is_answered. An empty questions[] with total 0 is an honest answer, not an error — most lots have none.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"asset_id":"276-23609","account_id":23609}},{"name":"categories","description":"The GovDeals category tree with the live lot count on every node: 14 top-level segments and 629 nodes in all when measured. The id on each node is exactly what the search action's category_id takes.","required_params":[],"optional_params":["top_level_only","flat"],"params":[{"name":"top_level_only","type":"boolean","required":false,"description":"Return only the 14 top-level segments without their children.","on_invalid":"reject","default":false,"example":false},{"name":"flat","type":"boolean","required":false,"description":"Return every node in one flat list (each with its parent_id and level) instead of nested.","on_invalid":"reject","default":false,"example":false}],"returns":"categories[]: id, name, slug, parent_id, level, live_lot_count and nested children[] of the same shape; plus top_level_count and total_count.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"top_level_only":false}},{"name":"locations","description":"Where the live lots physically are: the source's own region / country / state tree with a live lot count on every node (59 state and province nodes when measured). The state code on each leaf is what the search action's state parameter takes.","required_params":[],"optional_params":["flat"],"params":[{"name":"flat","type":"boolean","required":false,"description":"Return every node in one flat list instead of nested.","on_invalid":"reject","default":false,"example":false}],"returns":"locations[]: id (the state or province code on a leaf), name, slug, parent_id, level, live_lot_count and nested children[]; plus total_count. sale_types[] is served by the same action: id, name, slug and live_lot_count for each sale format (online auction, make offer, buy now).","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"flat":false}},{"name":"sellers","description":"Selling agencies near a US ZIP code, with how far away each one is and how many lots it currently has open — the way to find every surplus auction within driving distance, which matters because most GovDeals lots are pickup-only. Measured: 100 miles around 30301 returned 85 agencies.","required_params":["zip"],"optional_params":["radius_miles","min_lots"],"params":[{"name":"zip","type":"string","required":true,"description":"Five-digit US ZIP to search around.","on_invalid":"reject","example":"30301","value_pattern":"\\d{5}","aliases":["zipcode","postal_code"]},{"name":"radius_miles","type":"integer","required":false,"description":"Radius in miles. Measured to bite: 25 miles 23 agencies, 100 miles 85.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":3000,"aliases":["radius"]},{"name":"min_lots","type":"integer","required":false,"description":"Drop agencies with fewer than this many open lots.","on_invalid":"reject","example":1,"minimum":0,"maximum":1000000}],"returns":"zip, radius_miles, total, returned and sellers[]: seller_id (the id the search action's seller_id takes), name, location_id, open_lot_count, distance_miles, has_new_listing, address{address1, address2, city, state, zip}, latitude, longitude.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"zip":"30301","radius_miles":100}},{"name":"suggest","description":"What GovDeals buyers actually search for: the site's own autocomplete, returning trending search phrases and matching lot titles for a prefix. A keyword corpus straight from the source, useful for building the query a search call should run.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Partial keyword, 1-100 characters.","on_invalid":"reject","example":"trac","aliases":["q","keyword","prefix"]}],"returns":"query, total and suggestions[]: term, kind (trend for a search phrase the source is trending, product for a matching lot title), source_id and score as the source ranks them.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"trac"}}]},{"name":"grailed","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Grailed API scraper — curated menswear, streetwear & archive-fashion resale data from grailed.com: search listings with price/size/designer/category/condition filters, full listing detail (description, measurements, photos, seller), SOLD comps for price history, designer & seller storefront listings — no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/grailed/v1","spec_available":true,"actions":[{"name":"search","description":"Search Grailed listings by keyword + filters (designer, category, size, color, condition, department, strata, location, price band) with sorting and pagination. Returns live listings with price, size, condition, designer, photos and a seller summary. The catalog-discovery surface.","required_params":[],"optional_params":["query","designer","category","category_path","department","size","color","condition","strata","location","price_from","price_to","sort","page","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Keywords to search for (give query and/or at least one filter — empty query + a filter browses that facet).","on_invalid":"reject","example":"stone island jacket","aliases":["q","search_text"]},{"name":"designer","type":"string","required":false,"description":"Filter to one designer/brand by its EXACT Grailed name (e.g. 'Stone Island', 'Rick Owens', 'Supreme'). Resolve the exact name with the `designers` action.","on_invalid":"ignore","example":"Stone Island","aliases":["brand"]},{"name":"category","type":"enum","required":false,"description":"Top-level category facet.","on_invalid":"ignore","allowed_values":[{"value":"tops","label":"Tops"},{"value":"bottoms","label":"Bottoms"},{"value":"outerwear","label":"Outerwear"},{"value":"footwear","label":"Footwear"},{"value":"tailoring","label":"Tailoring"},{"value":"accessories","label":"Accessories"},{"value":"womens_tops","label":"Women's Tops"},{"value":"womens_bottoms","label":"Women's Bottoms"},{"value":"womens_outerwear","label":"Women's Outerwear"},{"value":"womens_dresses","label":"Women's Dresses"},{"value":"womens_footwear","label":"Women's Footwear"},{"value":"womens_accessories","label":"Women's Accessories"},{"value":"womens_bags_luggage","label":"Women's Bags & Luggage"},{"value":"womens_jewelry","label":"Women's Jewelry"}]},{"name":"category_path","type":"string","required":false,"description":"Advanced: exact sub-category path (e.g. 'outerwear.denim_jackets', 'footwear.hi_top_sneakers'). Copy from a listing's category_path.","on_invalid":"ignore","example":"outerwear.denim_jackets"},{"name":"department","type":"enum","required":false,"description":"Menswear or womenswear section.","on_invalid":"ignore","allowed_values":[{"value":"menswear","label":"Menswear"},{"value":"womenswear","label":"Womenswear"}]},{"name":"size","type":"string","required":false,"description":"Size facet (e.g. 'm', 's', 'us 10', '32'). Sizes are category specific — copy the exact value from a search result's `size`.","on_invalid":"ignore","example":"m","aliases":["sizes"]},{"name":"color","type":"enum","required":false,"description":"Primary color facet.","on_invalid":"ignore","allowed_values":[{"value":"black","label":"Black"},{"value":"white","label":"White"},{"value":"gray","label":"Gray"},{"value":"brown","label":"Brown"},{"value":"beige","label":"Beige"},{"value":"blue","label":"Blue"},{"value":"green","label":"Green"},{"value":"red","label":"Red"},{"value":"purple","label":"Purple"},{"value":"pink","label":"Pink"},{"value":"yellow","label":"Yellow"},{"value":"orange","label":"Orange"},{"value":"silver","label":"Silver"},{"value":"gold","label":"Gold"},{"value":"multi","label":"Multi"}]},{"name":"condition","type":"enum","required":false,"description":"Item condition.","on_invalid":"ignore","allowed_values":[{"value":"is_new","label":"New/Never Worn"},{"value":"is_gently_used","label":"Gently Used"},{"value":"is_used","label":"Used"},{"value":"is_worn","label":"Well Worn"},{"value":"is_not_specified","label":"Not Specified"}]},{"name":"strata","type":"enum","required":false,"description":"Grailed market tier (curation level).","on_invalid":"ignore","allowed_values":[{"value":"grailed","label":"Grails — high-end designers"},{"value":"hype","label":"Hype — streetwear/hyped brands"},{"value":"sartorial","label":"Sartorial — tailored/menswear classics"},{"value":"basic","label":"Basic — entry / everyday"}]},{"name":"location","type":"enum","required":false,"description":"Seller location region.","on_invalid":"ignore","allowed_values":[{"value":"United States","label":"United States"},{"value":"Canada","label":"Canada"},{"value":"United Kingdom","label":"United Kingdom"},{"value":"Europe","label":"Europe"},{"value":"Asia","label":"Asia"},{"value":"Australia/NZ","label":"Australia / NZ"},{"value":"Other","label":"Other"}],"aliases":["region"]},{"name":"price_from","type":"number","required":false,"description":"Only listings at or above this price (USD).","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_to","type":"number","required":false,"description":"Only listings at or below this price (USD).","on_invalid":"ignore","example":500,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"Newest first"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"most_popular","label":"Most popular (heat)"},{"value":"recently_bumped","label":"Recently bumped"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Page number (Algolia serves up to 200 pages per query).","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1–100).","on_invalid":"ignore","default":40,"minimum":1,"maximum":100}],"returns":"listings[]{id, title, url, price, currency, size, condition, condition_label, color, category, department, designers[], designer_names, strata, location, cover_photo, buy_now, make_offer, sold, seller{id, username, rating_average, rating_count}} + meta.pagination{page, has_more} + meta.total_results","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"stone island","per_page":10}},{"name":"listing_detail","description":"Full detail for one listing by `id` or `url`: title, description, price, size (pretty + exact), condition, color, category, all photos, measurements, traits, shipping table, designers, sold price, and a seller summary.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Grailed listing id — the digits in the listing URL (grailed.com/listings/<id>-slug). Take it from search results. Provide id OR url.","on_invalid":"reject","example":"99122353","aliases":["listing_id"]},{"name":"url","type":"string","required":false,"description":"Full Grailed listing URL — alternative to id.","on_invalid":"ignore","example":"https://www.grailed.com/listings/99122353","aliases":["listing_url"]}],"returns":"listing{id, title, url, description, price, currency, size, pretty_size, condition, condition_label, color, category, subcategory, designers[], styles, strata, buy_now, make_offer, photos[], measurements[]{name, value}, traits[], shipping, sold, sold_price, seller{id, username, rating_average, rating_count, total_bought_and_sold, trusted_seller}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"99122353"}},{"name":"sold_listings","description":"Search SOLD listings (resale comps) by keyword + the same filters as search. Each result carries its sold_price and sold_at — the price-history / market-value moat for valuing menswear, streetwear and archive pieces.","required_params":[],"optional_params":["query","designer","category","department","size","color","condition","strata","price_from","price_to","sort","page","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Keywords for the sold-comps search (give query and/or a filter).","on_invalid":"reject","example":"supreme box logo","aliases":["q","search_text"]},{"name":"designer","type":"string","required":false,"description":"Filter to one designer/brand by its EXACT Grailed name (e.g. 'Stone Island', 'Rick Owens', 'Supreme'). Resolve the exact name with the `designers` action.","on_invalid":"ignore","example":"Stone Island","aliases":["brand"]},{"name":"category","type":"enum","required":false,"description":"Top-level category facet.","on_invalid":"ignore","allowed_values":[{"value":"tops","label":"Tops"},{"value":"bottoms","label":"Bottoms"},{"value":"outerwear","label":"Outerwear"},{"value":"footwear","label":"Footwear"},{"value":"tailoring","label":"Tailoring"},{"value":"accessories","label":"Accessories"},{"value":"womens_tops","label":"Women's Tops"},{"value":"womens_bottoms","label":"Women's Bottoms"},{"value":"womens_outerwear","label":"Women's Outerwear"},{"value":"womens_dresses","label":"Women's Dresses"},{"value":"womens_footwear","label":"Women's Footwear"},{"value":"womens_accessories","label":"Women's Accessories"},{"value":"womens_bags_luggage","label":"Women's Bags & Luggage"},{"value":"womens_jewelry","label":"Women's Jewelry"}]},{"name":"department","type":"enum","required":false,"description":"Menswear or womenswear section.","on_invalid":"ignore","allowed_values":[{"value":"menswear","label":"Menswear"},{"value":"womenswear","label":"Womenswear"}]},{"name":"size","type":"string","required":false,"description":"Size facet (e.g. 'm', 's', 'us 10', '32'). Sizes are category specific — copy the exact value from a search result's `size`.","on_invalid":"ignore","example":"m","aliases":["sizes"]},{"name":"color","type":"enum","required":false,"description":"Primary color facet.","on_invalid":"ignore","allowed_values":[{"value":"black","label":"Black"},{"value":"white","label":"White"},{"value":"gray","label":"Gray"},{"value":"brown","label":"Brown"},{"value":"beige","label":"Beige"},{"value":"blue","label":"Blue"},{"value":"green","label":"Green"},{"value":"red","label":"Red"},{"value":"purple","label":"Purple"},{"value":"pink","label":"Pink"},{"value":"yellow","label":"Yellow"},{"value":"orange","label":"Orange"},{"value":"silver","label":"Silver"},{"value":"gold","label":"Gold"},{"value":"multi","label":"Multi"}]},{"name":"condition","type":"enum","required":false,"description":"Item condition.","on_invalid":"ignore","allowed_values":[{"value":"is_new","label":"New/Never Worn"},{"value":"is_gently_used","label":"Gently Used"},{"value":"is_used","label":"Used"},{"value":"is_worn","label":"Well Worn"},{"value":"is_not_specified","label":"Not Specified"}]},{"name":"strata","type":"enum","required":false,"description":"Grailed market tier (curation level).","on_invalid":"ignore","allowed_values":[{"value":"grailed","label":"Grails — high-end designers"},{"value":"hype","label":"Hype — streetwear/hyped brands"},{"value":"sartorial","label":"Sartorial — tailored/menswear classics"},{"value":"basic","label":"Basic — entry / everyday"}]},{"name":"price_from","type":"number","required":false,"description":"Only listings at or above this price (USD).","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_to","type":"number","required":false,"description":"Only listings at or below this price (USD).","on_invalid":"ignore","example":500,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Sold-comp ordering.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Most recently sold"},{"value":"relevance","label":"Relevance"},{"value":"price_high","label":"Sold price: high to low"},{"value":"price_low","label":"Sold price: low to high"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Page number (Algolia serves up to 200 pages per query).","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1–100).","on_invalid":"ignore","default":40,"minimum":1,"maximum":100}],"returns":"listings[]{id, title, url, price, sold_price, sold_at, size, condition, color, designers[], department, cover_photo, seller{username, rating_average}} + meta.pagination + meta.total_results","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"supreme","per_page":5}},{"name":"seller_listings","description":"All active listings from one seller's storefront by `seller_id`. Same listing shape as search; paginated. Resolve a seller_id from any search/detail result's seller.id.","required_params":["seller_id"],"optional_params":["query","category","designer","sort","page","per_page"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Grailed seller (user) id — take it from a listing's seller.id.","on_invalid":"reject","example":"1335538","aliases":["user_id"]},{"name":"query","type":"string","required":false,"description":"Optional keyword to search within this seller's items.","on_invalid":"ignore","aliases":["q"]},{"name":"category","type":"enum","required":false,"description":"Top-level category facet.","on_invalid":"ignore","allowed_values":[{"value":"tops","label":"Tops"},{"value":"bottoms","label":"Bottoms"},{"value":"outerwear","label":"Outerwear"},{"value":"footwear","label":"Footwear"},{"value":"tailoring","label":"Tailoring"},{"value":"accessories","label":"Accessories"},{"value":"womens_tops","label":"Women's Tops"},{"value":"womens_bottoms","label":"Women's Bottoms"},{"value":"womens_outerwear","label":"Women's Outerwear"},{"value":"womens_dresses","label":"Women's Dresses"},{"value":"womens_footwear","label":"Women's Footwear"},{"value":"womens_accessories","label":"Women's Accessories"},{"value":"womens_bags_luggage","label":"Women's Bags & Luggage"},{"value":"womens_jewelry","label":"Women's Jewelry"}]},{"name":"designer","type":"string","required":false,"description":"Filter to one designer/brand by its EXACT Grailed name (e.g. 'Stone Island', 'Rick Owens', 'Supreme'). Resolve the exact name with the `designers` action.","on_invalid":"ignore","example":"Stone Island","aliases":["brand"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"Newest first"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"most_popular","label":"Most popular (heat)"},{"value":"recently_bumped","label":"Recently bumped"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Page number (Algolia serves up to 200 pages per query).","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1–100).","on_invalid":"ignore","default":40,"minimum":1,"maximum":100}],"returns":"listings[] (search shape) + seller{id, username} + meta.pagination + meta.total_results","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"1335538"}},{"name":"designers","description":"Search Grailed's designer/brand directory by name → id, slug, listings_count, logo and departments. Use the returned exact `name` to filter search/sold_listings by designer, and the `slug` for the `designer_detail` action.","required_params":["query"],"optional_params":["page","per_page"],"params":[{"name":"query","type":"string","required":true,"description":"Designer/brand name (or part of it) to look up.","on_invalid":"reject","example":"stone","aliases":["q","name"]},{"name":"page","type":"integer","required":false,"description":"Page number (Algolia serves up to 200 pages per query).","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1–100).","on_invalid":"ignore","default":40,"minimum":1,"maximum":100}],"returns":"designers[]{id, name, slug, url, listings_count, logo_url, departments[]} + meta.pagination","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"stone"}},{"name":"designer_detail","description":"Designer/brand profile by `slug`: id, title, description, follower count and the exact name to use as a designer filter.","required_params":["slug"],"optional_params":[],"params":[{"name":"slug","type":"string","required":true,"description":"Designer slug from a designer URL (grailed.com/designers/<slug>) or the `designers` action.","on_invalid":"reject","example":"stone-island","aliases":["designer_slug"]}],"returns":"designer{id, slug, name, description, follower_count, favorites_count, hero_url, thumbnail_url, url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"stone-island"}}]},{"name":"guazi","category":{"id":"other","title":"Other"},"title":"Guazi API — scrape China's largest used-car marketplace guazi.com (瓜子二手车): search ~127k live listings by city, brand, series and price band, then pull full car detail — price in CNY, original guide price, registration date, odometer, trim, engine, gearbox, emission standard, colour, city the car is actually in, dealer-vs-private seller type, insurance-claim and ownership-transfer counts, guazi's own 200-point inspection grade, and every listing photo. Plus the full brand, city and price-band catalogues and a 127k-id bulk feed. No API key, no login, no captcha.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/guazi/v1","spec_available":true,"actions":[{"name":"search","description":"Search live guazi listings. `city` is the market (a guazi city slug like `bj`, `sh`, `sz` — or the Chinese city name), optionally narrowed by `brand` (e.g. `benz`, `bmw`, `byd`, `tesila`), `series` (e.g. `benz-e`, `bmw-5`, `model-3-60`) and `price_band` (`price0`…`price15`, the bands guazi itself publishes — see the `price_bands` action for their CNY ranges). 40 cars per page, pages 1–20 (guazi serves no page 21 for any facet, so one facet URL reaches at most 800 cars — narrow by brand/series/price_band to go deeper). ⚠️ `city` is a MARKET, not a location filter: guazi sells nationwide into each city, so rows legitimately carry other cities. Each row's own `city` is where that car physically is.","required_params":[],"optional_params":["city","brand","series","price_band","page"],"params":[{"name":"city","type":"string","required":false,"description":"Guazi city slug (`bj` 北京, `sh` 上海, `sz` 深圳, `gz` 广州, `cd` 成都, `cq` 重庆, `hz` 杭州, `nj` 南京, `wh` 武汉, `xa` 西安 … 320 in all) or the Chinese city name. Full list from the `cities` action.","on_invalid":"reject","default":"bj","example":"bj","value_pattern":"^[A-Za-z0-9_\\-]{1,40}$|^[一-鿿]{2,10}$","aliases":["city_slug","market","location"]},{"name":"brand","type":"string","required":false,"description":"Guazi brand slug — `benz` 奔驰, `bmw` 宝马, `audi` 奥迪, `dazhong` 大众, `toyota` 丰田, `honda` 本田, `byd` 比亚迪, `tesila` 特斯拉 … Full list from the `brands` action (use its `value` field).","on_invalid":"reject","example":"benz","value_pattern":"^[a-z0-9][a-z0-9_\\-]{0,40}$","aliases":["make","minor","brand_slug"]},{"name":"series","type":"string","required":false,"description":"Guazi series slug, e.g. `benz-e` 奔驰E级, `bmw-5` 宝马5系, `audi-a6l` 奥迪A6L, `model-3-60` Model 3. Requires `brand`. Full list from the `series` action.","on_invalid":"reject","example":"benz-e","value_pattern":"^[a-z0-9][a-z0-9_\\-]{0,40}$","aliases":["model","tag","series_slug"]},{"name":"price_band","type":"enum","required":false,"description":"One of guazi's own 16 price bands (万 = 10,000 CNY). These are the ONLY price filters guazi's crawlable surface honours; an arbitrary min/max is not supported and is not faked here.","on_invalid":"reject","allowed_values":[{"value":"price0","label":"≈1万 (0–1.5万 CNY)"},{"value":"price1","label":"under 2万 (0–1.9999万)"},{"value":"price2","label":"≈2万 (1.5–2.5万)"},{"value":"price3","label":"≈3万 (2.5–3.5万)"},{"value":"price4","label":"under 3万 (0–2.9999万)"},{"value":"price5","label":"≈4万 (3.5–4.5万)"},{"value":"price6","label":"≈5万 (4.5–5.5万)"},{"value":"price7","label":"under 5万 (0–4.9999万)"},{"value":"price8","label":"≈6万 (5.5–6.5万)"},{"value":"price9","label":"≈8万 (6.5–9万)"},{"value":"price10","label":"≈10万 (9–13万)"},{"value":"price11","label":"under 10万 (0–9.9999万)"},{"value":"price12","label":"≈15万 (13–18万)"},{"value":"price13","label":"≈20万 (18–25万)"},{"value":"price14","label":"≈30万 (25–40万)"},{"value":"price15","label":"≈50万 (40–100万)"}],"example":"price12","aliases":["price","band"]},{"name":"page","type":"integer","required":false,"description":"Page, 1–20. 40 cars per page. Guazi returns zero rows beyond page 20 for every facet.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"cars[]{id, clue_id, title, year, city, mileage_km, mileage_display, price_cny, price_display, discount_cny, new_car_price_cny, inspected, tags[], thumbnail, url} + meta{total_results, result_pool_total, page, total_pages, max_page}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"bj"}},{"name":"detail","description":"Everything guazi publishes about one car by `id` (a `c…` listing id from `search` or `listing_ids`): price in CNY and the original new-car guide price, registration month, odometer, brand/series/trim, manufacturer, engine, gearbox, emission standard, drive layout, colour, body class, the city the car is actually in, whether the seller is a dealer (商家) or a private owner (个人), the ownership-transfer count and insurance-claim count, guazi's own inspection grade + whether an official 200-point report exists, and every listing photo grouped by category. ⚠️ `vin` is always null: guazi publishes no VIN or chassis number for any car. When guazi publishes only its short record for a listing, the response carries the core fields (price, mileage, registration, condition, city) without photos, seller type or colour, and says so: `field_set` is `core` instead of `full` and `partial_fields` is set.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Guazi listing id — the `c…` token in a /car-detail/<id>.html URL, or a search row's `id`. The bare numeric form is also accepted.","on_invalid":"reject","example":"c173358342181138","value_pattern":"^c?\\d{9,20}$","aliases":["car_id","listing_id","clue_id"]}],"returns":"car{id, clue_id, car_id, title, brand, brand_slug, series, series_slug, model_trim, manufacturer, year, first_registration, car_age, mileage_km, price_cny, price_display, new_car_price_cny, city, city_slug, market_city, seller_type, seller_type_raw, transfer_count, insurance_claim_count, condition_grade, condition_desc, appearance_score, inspection{official_report, report_level}, engine, transmission, emission_standard, drive_mode, color, body_class, energy_type, horsepower, displacement_l, is_parallel_import, is_new_car, is_defect_car, official_certification, store_url, spec_rows[], photo_count, photos[], photo_groups[], video_count, vin (always null — guazi does not publish it), url, field_set}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"c173358342181138"}},{"name":"brands","description":"Every car brand guazi carries, with its guazi slug (`value`) for `search`'s `brand` filter, Chinese name and logo. Pass `letter` (A–Z, by the brand's pinyin initial) for one cheap page; omit it to sweep all 26 letters in one call. Read live, never from a hardcoded list.","required_params":[],"optional_params":["letter"],"params":[{"name":"letter","type":"string","required":false,"description":"Pinyin initial A–Z. Omit for all 26.","on_invalid":"reject","example":"B","value_pattern":"^[A-Za-z]$"}],"returns":"brands[]{id, name, slug, logo, letter} + meta{letters_fetched, letters_missing[]}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"letter":"B"}},{"name":"series","description":"Every series (车系) guazi lists for one brand, with the slug for `search`'s `series` filter — e.g. brand `benz` → 奔驰C级 `benz-c`, 奔驰E级 `benz-e`, …. Read live, so a newly listed series appears the day guazi lists it.","required_params":["brand"],"optional_params":["city"],"params":[{"name":"brand","type":"string","required":true,"description":"Guazi brand slug, from the `brands` action.","on_invalid":"reject","example":"benz","value_pattern":"^[a-z0-9][a-z0-9_\\-]{0,40}$","aliases":["make","brand_slug"]},{"name":"city","type":"string","required":false,"description":"City whose brand page to read (the series list is national; this only picks the page). Default `bj`.","on_invalid":"reject","default":"bj","example":"bj","value_pattern":"^[A-Za-z0-9_\\-]{1,40}$"}],"returns":"brand{slug, name} + series[]{id, name, slug}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"benz"}},{"name":"cities","description":"All 300+ cities guazi operates in, each with the slug `search`'s `city` takes, the Chinese name, the pinyin and guazi's own city id — plus which cities guazi itself marks as hot. Read live.","required_params":[],"optional_params":[],"params":[],"returns":"cities[]{slug, name, pinyin, city_id} + hot_cities[]{slug, name}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"price_bands","description":"Guazi's 16 price bands with their real CNY ranges and the slug `search`'s `price_band` takes. Read live, so the ranges are guazi's current ones rather than a copy.","required_params":[],"optional_params":["city"],"params":[{"name":"city","type":"string","required":false,"description":"City page to read the bands from. Default `bj`.","on_invalid":"reject","default":"bj","example":"bj","value_pattern":"^[A-Za-z0-9_\\-]{1,40}$"}],"returns":"price_bands[]{slug, label, min_cny, max_cny}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"bj"}},{"name":"listing_ids","description":"Bulk id feed: up to 10,000 live listing ids per page, each with the date guazi last updated it. 13 pages cover the whole live inventory (~127,000 cars). Built for backfills and change detection: pull ids here, then `detail` only the ones that changed.","required_params":[],"optional_params":["page"],"params":[{"name":"page","type":"integer","required":false,"description":"Page 1–13. ~10,000 ids each; the last page is shorter.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":13}],"returns":"ids[]{id, url, lastmod} + meta{page, total_pages, page_size}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":2000,"min":2},"example_params":{"page":1}},{"name":"export_search","description":"Search guazi's China used-car EXPORT & auction marketplace — a different inventory from `search`: ~180,000 cars listed for overseas buyers with English titles, FOB prices in US dollars, A–D condition grades, accident/water/fire damage flags, dealer-vs-private seller type and live auctions. ⚠️ On an auction row guazi publishes the CURRENT BID, not an asking price, so that number comes back as `current_bid_usd` with `price_usd` null and `price_kind` = `auction_bid` — a fixed-price row is the other way round. Narrow by `brand` (e.g. `audi`, `bmw`, `toyota`), `series` (e.g. `q8`, `x1`, `camry`) or `body_type` (sedan, suv, mini-van, hatchback, wagon, pick-up, van, truck). Returns the 20 cars guazi puts on that facet's first page plus the facet's own live total. ⚠️ Only 20 cars per facet are reachable: guazi serves no second page of this marketplace to anyone who is not running its JavaScript, so narrow by brand → series instead of paging. Use `export_brands` for the brand list and `export_detail` with a returned `id` for the full record.","required_params":[],"optional_params":["brand","series","body_type"],"params":[{"name":"brand","type":"string","required":false,"description":"Export-site brand slug — `audi`, `bmw`, `byd`, `toyota`, `honda`, `nissan`, `volkswagen`, `mercedes-benz`, `hyundai`, `geely-auto` … Full list from `export_brands`.","on_invalid":"reject","example":"audi","value_pattern":"^[a-z0-9][a-z0-9\\-]{0,40}$","aliases":["make"]},{"name":"series","type":"string","required":false,"description":"Export-site series slug under that brand, e.g. `q8`, `a4l`, `x1`, `3-series`, `camry`, `c-class`. Requires `brand`.","on_invalid":"reject","example":"q8","value_pattern":"^[a-z0-9][a-z0-9\\-]{0,40}$","aliases":["model"]},{"name":"body_type","type":"enum","required":false,"description":"Body style. Cannot be combined with brand/series — guazi publishes them as separate facets.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan"},{"value":"suv","label":"Suv"},{"value":"mini-van","label":"Mini Van"},{"value":"hatchback","label":"Hatchback"},{"value":"wagon","label":"Wagon"},{"value":"pick-up","label":"Pick Up"},{"value":"van","label":"Van"},{"value":"truck","label":"Truck"}],"example":"suv","aliases":["bodytype","body"]}],"returns":"cars[]{id, car_id, title, url, model_year, manufactured, first_registration, mileage_km, fuel_type, engine, transmission, is_electric, battery_capacity_kwh, ev_range_km, price_usd, current_bid_usd, price_kind, list_price_usd, discount_usd, exchange_rate_cny_per_usd, brand, brand_id, series_id, condition_grade, seller_type, inspected, open_to_offers, newly_listed, auction{type, name, preview_ends_at, countdown_ms}, labels[], thumbnail, has_video} + meta{total_results, rows_per_page}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"audi"}},{"name":"export_detail","description":"Everything guazi publishes about one car on its export marketplace: the masked VIN (first 3 + last 4 characters, which is what guazi itself shows), the A–D condition grade, explicit accident / water-damage / fire-damage flags, whether an official Guazi inspection report exists, the FOB price in USD with guazi's own CNY exchange rate, model year, manufacture and first-registration dates, odometer, engine, horsepower, gearbox, drive train, body style, seats, doors, colour, exterior dimensions, which side the steering wheel is on, the Chinese city the car is in, the full options/config sheet and every photo. Takes the `id` from `export_search` (a listing slug such as `audi-q8-2019-30l-blue-142800km-at-4wd-5-seats-lz3kf79f3f.html`); a full en.guazi.com product URL is accepted too.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"A listing slug from `export_search`'s `id`, or the full product URL. The short item number alone (e.g. `lz3kf79f3f`) is NOT enough — guazi 404s it, the full slug is required.","on_invalid":"reject","example":"audi-q8-2019-30l-blue-142800km-at-4wd-5-seats-lz3kf79f3f.html","value_pattern":"^[A-Za-z0-9][A-Za-z0-9._\\-/:]{6,200}$","aliases":["slug","seo_uri","url","product_id"]}],"returns":"car{id, car_id, slug, title, url, vin_masked, condition_grade, damage{accident, water, fire}, official_report, price_usd, current_bid_usd, price_kind, discount_usd, exchange_rate_cny_per_usd, brand, model_year, manufactured, first_registration, mileage_km, fuel_type, engine, horsepower_ps, transmission, drive_train, body_style, seats, doors, exterior_color, dimensions_mm, steering, location, spec_rows[], config_groups[], photo_count, photos[], thumbnail, business_type, auction{type}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"c173358342181138"}},{"name":"export_brands","description":"Every brand guazi carries on its export marketplace, with the slug `export_search`'s `brand` takes, the English name, guazi's brand id and the logo. Read live.","required_params":[],"optional_params":[],"params":[],"returns":"brands[]{id, name, slug, logo} + body_types[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"guloggratis","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Gul og Gratis Denmark classifieds","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/guloggratis/v1","spec_available":true,"actions":[{"name":"search","description":"Search native Danish classifieds by published text query; source pages 1-2.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Text query up to 64 characters; source normalizes to lowercase.","on_invalid":"reject","example":"iphone"},{"name":"page","type":"integer","required":false,"description":"One-based source page; only pages 1-2 are qualified.","on_invalid":"reject","default":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Local output cap; does not change the measured source stride of 60.","on_invalid":"reject","default":10,"minimum":1,"maximum":60}],"returns":"results[]{listing_id,url,title,price,price_display,currency,images,seller,city,postal_code},source_total,source_page_size,source_has_more,has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","page":1,"limit":5}},{"name":"listing_detail","description":"Get meaningful public listing content by native UUID returned from search.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Native UUID from search, or its full published Gul og Gratis listing URL.","on_invalid":"reject","example":"68694a09-057e-4b8a-ab0c-eb04b8ed911c"}],"returns":"listing_id,url,title,description,price,price_display,currency,images,status,attributes,categories,seller,address,gtin","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"68694a09-057e-4b8a-ab0c-eb04b8ed911c"}}]},{"name":"gumtree","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Gumtree UK and South Africa Classifieds API scraper — search listings & adverts. UK: browse the full category tree, read category/location filters, get rich advert detail, similar listings and keyword suggestions from gumtree.com (cars, property, jobs, for-sale, pets and more). No account needed.","version":"2.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/gumtree/v1","spec_available":true,"actions":[{"name":"search","description":"Search Gumtree UK adverts and return paginated listing cards — title, price, location, posted date, images, seller type and attributes. Filter by keyword, area/postcode, category slug, price range, search radius and seller type; sort by newest, price or distance. Fetches up to 50 pages (~1,500 adverts) per call with automatic de-duplication, or pass a full Gumtree search URL.","required_params":[],"optional_params":["market","query","location","category","url","sort","min_price","max_price","distance","seller_type","featured_only","with_photos","max_pages","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search for. Give at least one of query / location / category / url.","on_invalid":"reject","example":"iphone","aliases":["q"]},{"name":"location","type":"string","required":false,"description":"Town / area / postcode to search in (e.g. london, manchester, SW1A). Resolve area names with the filters action.","on_invalid":"reject","example":"london","aliases":["search_location"]},{"name":"category","type":"string","required":false,"description":"Category slug from the categories action (e.g. cars-vans-motorbikes, for-sale, flats-houses, jobs, pets, business-services, community, or a sub-slug like for-sale/baby-kids-stuff). Optional.","on_invalid":"ignore","example":"cars-vans-motorbikes","aliases":["search_category"]},{"name":"url","type":"string","required":false,"description":"A full Gumtree search URL to run as-is (advanced — overrides the other search params).","on_invalid":"ignore","example":"https://www.gumtree.com/search?search_category=for-sale&q=sofa"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"date","label":"Newest first"},{"value":"price_lowest_first","label":"Price: low to high"},{"value":"price_highest_first","label":"Price: high to low"},{"value":"distance","label":"Nearest first (needs location)"},{"value":"relevance","label":"Relevance"}],"default":"date"},{"name":"min_price","type":"number","required":false,"description":"Minimum price filter (in GBP).","on_invalid":"ignore","example":2000},{"name":"max_price","type":"number","required":false,"description":"Maximum price filter (in GBP).","on_invalid":"ignore","example":5000},{"name":"distance","type":"integer","required":false,"description":"Search radius in miles around `location` (1, 3, 5, 10, 15, 25, 50, 75…). Needs location.","on_invalid":"ignore","example":10},{"name":"seller_type","type":"enum","required":false,"description":"Restrict to trade or private sellers.","on_invalid":"ignore","allowed_values":[{"value":"trade","label":"Trade / dealer sellers only"},{"value":"private","label":"Private sellers only"}],"example":"trade"},{"name":"featured_only","type":"boolean","required":false,"description":"Only return featured (promoted) adverts.","on_invalid":"ignore","default":false},{"name":"with_photos","type":"boolean","required":false,"description":"Only return adverts that include at least one photo.","on_invalid":"ignore","default":false},{"name":"max_pages","type":"integer","required":false,"description":"How many result pages to fetch + de-dup in one call (1–50, ~30 ads/page; larger values are capped at 50).","on_invalid":"ignore","default":1,"minimum":1,"maximum":50},{"name":"market","type":"enum","required":false,"description":"Which Gumtree marketplace. UK (gumtree.com) is live. Australia (gumtree.com.au) is geo-fenced to Australian connections and not yet available. South Africa (za) supports search (query/url/max_pages) and listing_detail; other actions and named filters are UK-only.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"gumtree.com — United Kingdom"},{"value":"au","label":"gumtree.com.au — Australia (coming soon)"},{"value":"za","label":"gumtree.co.za — South Africa"}],"default":"uk"},{"name":"include_pii","type":"boolean","required":false,"description":"Keep phone/email contact details that sellers paste into free text. The gateway sets this to true on every call while fleet-wide PII masking is off (current setting), so descriptions arrive as written; the seller block is never masked.","on_invalid":"ignore","default":false}],"returns":"items[]{id, title, price, price_amount, price_currency, url, location, image, images[], posted_date, seller_type, seller_id, account_id, attributes[]} + count + result_count + total_pages + pages_fetched + stop_reason (~30 ads/page; Gumtree serves at most ~50 pages ≈ 1,500 ads per query — narrow with location/category/price to harvest deeper)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"uk","category":"cars-vans-motorbikes","location":"london","max_pages":1}},{"name":"listing_detail","description":"Full advert detail by listing `url` OR numeric `id`: title, full description, price, all photos, every attribute (mileage, year, bedrooms, condition…), map coordinates, location/postcode, category breadcrumbs and the public seller profile (display name, rating, total adverts, ads per category, member-since).","required_params":[],"optional_params":["market","url","id","include_pii"],"params":[{"name":"url","type":"string","required":false,"description":"Full advert URL from a search result. Provide url OR id.","on_invalid":"reject","example":"https://www.gumtree.com/p/bmw/bmw-3-series-convertible-2004-semi-auto/1801400644"},{"name":"id","type":"string","required":false,"description":"Advert ID — the digits at the end of an advert URL. Alternative to url.","on_invalid":"reject","example":"1801400644","aliases":["ad_id","listing_id"]},{"name":"market","type":"enum","required":false,"description":"Which Gumtree marketplace. UK (gumtree.com) is live. Australia (gumtree.com.au) is geo-fenced to Australian connections and not yet available. South Africa (za) supports search (query/url/max_pages) and listing_detail; other actions and named filters are UK-only.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"gumtree.com — United Kingdom"},{"value":"au","label":"gumtree.com.au — Australia (coming soon)"},{"value":"za","label":"gumtree.co.za — South Africa"}],"default":"uk"},{"name":"include_pii","type":"boolean","required":false,"description":"Keep phone/email contact details that sellers paste into free text. The gateway sets this to true on every call while fleet-wide PII masking is off (current setting), so descriptions arrive as written; the seller block is never masked.","on_invalid":"ignore","default":false}],"returns":"listing{id, title, price, price_amount, price_currency, url, description, location, area, postcode, latitude, longitude, attributes[], images[], category, breadcrumbs[], seller{name, public_id, user_id, phone (masked by Gumtree), website_url, rating, total_ads, …, contact_details{…as received}}, similar_count}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1801400644"}},{"name":"similar","description":"Related / similar adverts for a given listing (by `url` or `id`) — Gumtree's own 'you might also like' recommendations as clean listing cards.","required_params":[],"optional_params":["market","url","id","include_pii"],"params":[{"name":"url","type":"string","required":false,"description":"Full advert URL. Provide url OR id.","on_invalid":"reject","example":"https://www.gumtree.com/p/other-sofas/ikea-farlov-3-seater-sofa/1801880826"},{"name":"id","type":"string","required":false,"description":"Advert ID. Alternative to url.","on_invalid":"reject","example":"1801880826","aliases":["ad_id","listing_id"]},{"name":"market","type":"enum","required":false,"description":"Which Gumtree marketplace. UK (gumtree.com) is live. Australia (gumtree.com.au) is geo-fenced to Australian connections and not yet available. South Africa (za) supports search (query/url/max_pages) and listing_detail; other actions and named filters are UK-only.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"gumtree.com — United Kingdom"},{"value":"au","label":"gumtree.com.au — Australia (coming soon)"},{"value":"za","label":"gumtree.co.za — South Africa"}],"default":"uk"},{"name":"include_pii","type":"boolean","required":false,"description":"Keep phone/email contact details that sellers paste into free text. The gateway sets this to true on every call while fleet-wide PII masking is off (current setting), so descriptions arrive as written; the seller block is never masked.","on_invalid":"ignore","default":false}],"returns":"items[] (related listing cards), source_id, count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1801880826"}},{"name":"categories","description":"Gumtree's full browse tree — the top-level categories (Motors, For Sale, Property, Jobs, Pets, Services, Community) and their sub-categories with slugs and paths. Use the slugs as the `category` parameter of search / filters.","required_params":[],"optional_params":["market"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Gumtree marketplace. UK (gumtree.com) is live. Australia (gumtree.com.au) is geo-fenced to Australian connections and not yet available. South Africa (za) supports search (query/url/max_pages) and listing_detail; other actions and named filters are UK-only.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"gumtree.com — United Kingdom"},{"value":"au","label":"gumtree.com.au — Australia (coming soon)"},{"value":"za","label":"gumtree.co.za — South Africa"}],"default":"uk"}],"returns":"categories[]{name, slug, path, subcategories[]{name, slug, path}}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"uk"}},{"name":"filters","description":"Available filters & facets for a category and/or location: selectable sub-categories (with live advert counts), area / postcode facets (with counts), sort options, search-radius options and the price filter. Lets a caller discover valid category slugs, location values and result sizes before searching.","required_params":[],"optional_params":["market","category","location","query"],"params":[{"name":"category","type":"string","required":false,"description":"Category slug from the categories action (e.g. cars-vans-motorbikes, for-sale, flats-houses, jobs, pets, business-services, community, or a sub-slug like for-sale/baby-kids-stuff). Optional.","on_invalid":"ignore","example":"cars-vans-motorbikes","aliases":["search_category"]},{"name":"location","type":"string","required":false,"description":"Town / area / postcode to search in (e.g. london, manchester, SW1A). Resolve area names with the filters action.","on_invalid":"reject","example":"london","aliases":["search_location"]},{"name":"query","type":"string","required":false,"description":"Keyword to search for. Give at least one of query / location / category / url.","on_invalid":"reject","example":"iphone","aliases":["q"]},{"name":"market","type":"enum","required":false,"description":"Which Gumtree marketplace. UK (gumtree.com) is live. Australia (gumtree.com.au) is geo-fenced to Australian connections and not yet available. South Africa (za) supports search (query/url/max_pages) and listing_detail; other actions and named filters are UK-only.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"gumtree.com — United Kingdom"},{"value":"au","label":"gumtree.com.au — Australia (coming soon)"},{"value":"za","label":"gumtree.co.za — South Africa"}],"default":"uk"}],"returns":"subcategories[]{label, slug, count}, locations[]{label, value, count}, sort_options[], distance_options[], price_filter, result_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"uk","category":"cars-vans-motorbikes","location":"london"}},{"name":"suggestions","description":"Keyword suggestions & spelling corrections for a search term — Gumtree's 'did you mean' / related-keyword surface, useful for query expansion and autocomplete-style discovery.","required_params":["query"],"optional_params":["market","location","category"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search for. Give at least one of query / location / category / url.","on_invalid":"reject","example":"iphone","aliases":["q"]},{"name":"location","type":"string","required":false,"description":"Town / area / postcode to search in (e.g. london, manchester, SW1A). Resolve area names with the filters action.","on_invalid":"reject","example":"london","aliases":["search_location"]},{"name":"category","type":"string","required":false,"description":"Category slug from the categories action (e.g. cars-vans-motorbikes, for-sale, flats-houses, jobs, pets, business-services, community, or a sub-slug like for-sale/baby-kids-stuff). Optional.","on_invalid":"ignore","example":"cars-vans-motorbikes","aliases":["search_category"]},{"name":"market","type":"enum","required":false,"description":"Which Gumtree marketplace. UK (gumtree.com) is live. Australia (gumtree.com.au) is geo-fenced to Australian connections and not yet available. South Africa (za) supports search (query/url/max_pages) and listing_detail; other actions and named filters are UK-only.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"gumtree.com — United Kingdom"},{"value":"au","label":"gumtree.com.au — Australia (coming soon)"},{"value":"za","label":"gumtree.co.za — South Africa"}],"default":"uk"}],"returns":"suggestions[]{name, category_slug}, keyword_correction, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"uk","query":"sofa"}}]},{"name":"guru","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Guru.com API scraper — live freelance jobs, rich job detail, the category/skill taxonomy, and freelancer/provider profiles from Guru.com in clean JSON: budget, skills, quotes, posted date, the client, and provider ratings. No login required.","version":"1.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/guru/v1","spec_available":true,"actions":[{"name":"search","description":"Search live freelance JOBS across the whole Guru.com board. `query` is served SERVER-SIDE via Guru's own skill/keyword path — known skills are canonicalised from the shipped slug dictionary (`nodejs` → `node.js`), unknown terms use Guru's free-text match, and `data.match` reports which. Also browsable by `category`/`skills` and paginated by `offset`. Returns title, description, budget{type,min,max,currency}, skills[], quote count (bids_count), posted date, url, and the client as the card prints it (name as Guru shortens it, country, avatar, total spent, feedback %).","required_params":[],"optional_params":["query","category","skills","limit","offset"],"params":[{"name":"query","type":"string","required":false,"description":"What to search Guru's whole job board for, SERVER-SIDE — a skill (`wordpress`, `nodejs`, `data entry`) or any free-text term (`excel`, `translation`). Known skills are canonicalised first (`nodejs` → `node.js`); anything else is handed to Guru's own keyword match. `data.match` says which of the two happened. A term Guru finds nothing for returns NOT_FOUND, never an empty 200.","on_invalid":"ignore","example":"wordpress","aliases":["q","keyword","search"]},{"name":"category","type":"enum","required":false,"description":"Top-level category slug for server-side scoping (see the `categories` action). One of: programming-development, design-art, writing-translation, sales-marketing, business-finance, engineering-architecture, administrative-secretarial, legal, education-training, other.","on_invalid":"ignore","allowed_values":[{"value":"programming-development","label":"Programming & Development"},{"value":"design-art","label":"Design & Art"},{"value":"writing-translation","label":"Writing & Translation"},{"value":"sales-marketing","label":"Sales & Marketing"},{"value":"business-finance","label":"Business & Finance"},{"value":"engineering-architecture","label":"Engineering & Architecture"},{"value":"administrative-secretarial","label":"Administrative & Secretarial"},{"value":"legal","label":"Legal"},{"value":"education-training","label":"Education & Training"},{"value":"other","label":"Other"}],"example":"programming-development","aliases":["cat"]},{"name":"skills","type":"array","required":false,"description":"Skill slug to scope the search server-side, with or without a `category` (e.g. skills=['php'], or category=programming-development + skills=['php']). First value used. When BOTH `skills` and `query` are sent, `skills` picks the server-side path and `query` is applied on top as a client-side filter.","on_invalid":"ignore","example":["php"],"aliases":["skill"]},{"name":"limit","type":"integer","required":false,"description":"How many jobs to return (1–80). Use `offset` to page.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":80,"aliases":["max_results","count"]},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (0–5000); skip this many results. Works with `query`/`skills`/`category` (Guru pages the skill path too). Ignored only in the client-side fallback (`match`=`recent_feed_filter`), which always scans from the newest posting.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":5000,"aliases":["skip","page_offset"]}],"returns":"projects[]{id, title, description, type, budget{type,min,max,currency}, skills[], category, bids_count, posted_at, posted_relative, client_country, client{name, country, avatar, total_spent, feedback_percent}, url}, returned, offset, search_term, resolved_skill, match, server_side, note","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":8}},{"name":"project","description":"Full detail for one Guru.com job by URL, slug, or numeric id — title, description, budget{type,min,max,currency}, skills[], employment type, posted date, valid-through, the job's location requirement (country), and the client name the page publishes.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"The job to fetch: the full Guru job URL or the `<slug>/<id>` path (both are returned by `search` as `url` / `seo_url`). A BARE numeric id will not work — Guru serves the detail page only at /jobs/<slug>/<id> and answers a bare id with its login wall.","on_invalid":"ignore","example":"https://www.guru.com/jobs/example/2118837","aliases":["project_id","url","seo_url"]}],"returns":"project{id, title, description, type, budget{...}, skills[], posted_at, client_country, client{name}, detail{valid_through, employment_type}, url}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"https://www.guru.com/jobs/testing-our-cruise-control/2120425"}},{"name":"user","description":"Profile of a Guru.com freelancer/provider by profile URL or handle, as the page publishes it: display name, headline, country, skills, and rating summary. Guru puts no email/phone/address on the profile page.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"The freelancer/provider to fetch: a Guru profile URL or handle. Returns what the profile page publishes (Guru puts no email / phone / address on it).","on_invalid":"ignore","example":"https://www.guru.com/freelancers/example/","aliases":["user","user_id","id"]}],"returns":"user{username, display_name, tagline, profile_description, country, city, skills[], reputation{overall_rating, reviews}, avatar, profile_url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"https://www.guru.com/freelancers/example/"}},{"name":"categories","description":"List the top-level Guru.com freelance job categories (Programming, Design, Writing…) — the browse taxonomy for scoping a `search`.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{id, name, seo_url}, returned","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"hackernews","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Hacker News API — stories, comments, full comment trees, polls, front-page, user profiles and full-text search across Hacker News (news.ycombinator.com)","version":"1.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/hackernews/v1","spec_available":true,"actions":[{"name":"item","description":"single item by id (story/comment/job/poll/pollopt) — all official fields + time_iso/kids_count/hn_url; hydrate_kids=resolve top-level comments","required_params":["id"],"optional_params":["hydrate_kids","kids_limit"],"params":[{"name":"id","type":"integer","required":true,"description":"HackerNews item id (story/comment/job/poll/pollopt) — the digits in an item URL (news.ycombinator.com/item?id=...).","on_invalid":"reject","example":8863,"aliases":["item_id"]},{"name":"hydrate_kids","type":"boolean","required":false,"description":"If true, resolve the item's top-level comments into full objects instead of bare ids.","on_invalid":"ignore","default":false,"example":true},{"name":"kids_limit","type":"integer","required":false,"description":"When hydrate_kids=true, how many top-level comments to resolve (1-100).","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100}],"returns":"item{} — id, type, by, time/time_iso, title/text/url, score, kids/kids_count, hn_url (+ comments[] if hydrate_kids)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":8863}},{"name":"item_tree","description":"full nested comment TREE for a story in ONE call; recursive children + descendants count","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"integer","required":true,"description":"HackerNews item id (story/comment/job/poll/pollopt) — the digits in an item URL (news.ycombinator.com/item?id=...).","on_invalid":"reject","example":8863,"aliases":["item_id"]}],"returns":"item{} — story with recursive children[] (nested comments), descendants count, direct children_count, author","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":8863}},{"name":"user","description":"user profile by id: karma/created/about/submitted; hydrate_submitted=resolve recent submissions","required_params":["id"],"optional_params":["hydrate_submitted","submitted_limit"],"params":[{"name":"id","type":"string","required":true,"description":"HackerNews username (case-sensitive), e.g. 'pg'.","on_invalid":"reject","example":"pg","aliases":["user","username"]},{"name":"hydrate_submitted","type":"boolean","required":false,"description":"If true, resolve the user's recent submissions into full objects instead of bare ids.","on_invalid":"ignore","default":false,"example":true},{"name":"submitted_limit","type":"integer","required":false,"description":"When hydrate_submitted=true, how many recent submissions to resolve (1-100).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"user{} — id, karma, created/created_iso, about, submitted[] (+ recent_items[] if hydrate_submitted)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"pg"}},{"name":"stories","description":"story-list (list=top/new/best/ask/show/job) → ranked hydrated stories; offset/limit pagination, hydrate=false for ids only","required_params":[],"optional_params":["list","limit","offset","hydrate"],"params":[{"name":"list","type":"enum","required":false,"description":"Which HackerNews story list to return.","on_invalid":"reject","allowed_values":[{"value":"top","label":"Top stories (front page, up to 500)"},{"value":"new","label":"Newest stories (up to 500)"},{"value":"best","label":"Best stories (up to 500)"},{"value":"ask","label":"Ask HN (up to 200)"},{"value":"show","label":"Show HN (up to 200)"},{"value":"job","label":"Jobs (up to 200)"}],"default":"top","example":"top","aliases":["type"]},{"name":"limit","type":"integer","required":false,"description":"Stories to return (1-100, default 30). Out-of-range values are clamped.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100},{"name":"offset","type":"integer","required":false,"description":"Pagination offset into the story list (0-500). Skip N ranked stories.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":500},{"name":"hydrate","type":"boolean","required":false,"description":"If true, resolve each ranked story id into full objects instead of bare ids (default true).","on_invalid":"ignore","default":true,"example":true}],"returns":"list, stories[] (ranked, hydrated) or ids[] (hydrate=false), count, total, offset, max_available, stop_reason","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"list":"top","limit":15}},{"name":"search","description":"Full-text search: query + tags(story/comment/ask_hn/show_hn/poll/front_page/author_X/story_X) + min_points/max_points/min_comments/before/after + sort(relevance|date), paginated","required_params":[],"optional_params":["query","tags","sort","page","hits_per_page","min_points","max_points","min_comments","max_comments","before","after","numeric_filters","restrict"],"params":[{"name":"query","type":"string","required":false,"description":"Full-text search keywords. search needs query OR tags.","on_invalid":"reject","example":"python","aliases":["q"]},{"name":"tags","type":"string","required":false,"description":"Tag filter. Built-ins: story, comment, ask_hn, show_hn, poll, front_page. Dynamic: author_USERNAME, story_ID. Comma-joins = AND, (a,b) = OR. search needs query OR tags.","on_invalid":"reject","example":"story"},{"name":"sort","type":"enum","required":false,"description":"Result ordering: relevance (default) or date (newest first). Any non-date value is treated as relevance.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Most relevant (default)"},{"value":"date","label":"Newest first"}],"default":"relevance","example":"date"},{"name":"page","type":"integer","required":false,"description":"0-based search results page (0-50). Page forward via meta.nbPages.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":50},{"name":"hits_per_page","type":"integer","required":false,"description":"Search results per page (1-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["hitsPerPage","limit"]},{"name":"min_points","type":"integer","required":false,"description":"Minimum score (points) filter for search hits.","on_invalid":"ignore","example":100,"minimum":0},{"name":"max_points","type":"integer","required":false,"description":"Maximum score (points) filter for search hits.","on_invalid":"ignore","example":1000,"minimum":0},{"name":"min_comments","type":"integer","required":false,"description":"Minimum comment-count filter for search hits.","on_invalid":"ignore","example":10,"minimum":0},{"name":"max_comments","type":"integer","required":false,"description":"Maximum comment-count filter for search hits.","on_invalid":"ignore","example":500,"minimum":0},{"name":"before","type":"string","required":false,"description":"Only hits created on/before this date. Accepts a unix timestamp or an ISO date (YYYY-MM-DD).","on_invalid":"ignore","example":"2024-12-31"},{"name":"after","type":"string","required":false,"description":"Only hits created on/after this date. Accepts a unix timestamp or an ISO date (YYYY-MM-DD).","on_invalid":"ignore","example":"2024-01-01"},{"name":"numeric_filters","type":"string","required":false,"description":"Advanced: raw Algolia numericFilters string, appended to the built min/max/date filters (e.g. 'points>100,created_at_i>1700000000').","on_invalid":"ignore","example":"points>100,num_comments>10"},{"name":"restrict","type":"string","required":false,"description":"Advanced: restrictSearchableAttributes — limit matching to given Algolia fields (e.g. 'title' or 'title,story_text').","on_invalid":"ignore","example":"title"}],"returns":"hits[] (title/text, points, author, num_comments, created_at, hn_url), count, nbHits, nbPages, page, sort","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"python","tags":"story"}},{"name":"poll","description":"Poll detail by id: the question + every voting option resolved and ranked by votes, with total_votes and the comment count. (Find poll ids via search with tags=poll.)","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"integer","required":true,"description":"HackerNews poll id (the digits in a poll's item URL). Find polls with the search action using tags=poll.","on_invalid":"reject","example":126809,"aliases":["item_id"]}],"returns":"poll{} — id, title/text, by, time_iso, options[] (each id/text/score=votes, ranked), options_count, total_votes, descendants (comments), hn_url","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":126809}},{"name":"front_page","description":"Stories that recently made the Hacker News front page (newest-first), paginated. Optional after/before date window. NOTE: the front-page index only retains ~the last 7 days — it is 'what's on / recently hit the front page', not a historical archive.","required_params":[],"optional_params":["limit","page","after","before"],"params":[{"name":"limit","type":"integer","required":false,"description":"Front-page stories to return (1-100, default 30). Out-of-range values are clamped.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100},{"name":"page","type":"integer","required":false,"description":"0-based search results page (0-50). Page forward via meta.nbPages.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":50},{"name":"after","type":"string","required":false,"description":"Only front-page stories created on/after this date (unix ts or YYYY-MM-DD). Note: the front-page index only retains ~the last 7 days.","on_invalid":"ignore","example":"2026-06-18"},{"name":"before","type":"string","required":false,"description":"Only front-page stories created on/before this date (unix ts or YYYY-MM-DD).","on_invalid":"ignore","example":"2026-06-21"}],"returns":"stories[] (title, author, points, num_comments, created_at, hn_url), count, nbHits, nbPages, page","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":10}},{"name":"updates","description":"live changefeed: recently changed item ids + profiles + max_item; hydrate=resolve changed items","required_params":[],"optional_params":["hydrate","limit"],"params":[{"name":"hydrate","type":"boolean","required":false,"description":"If true, resolve the changed item ids into full objects instead of bare ids.","on_invalid":"ignore","default":false,"example":true},{"name":"limit","type":"integer","required":false,"description":"Changed items to hydrate (1-100, default 30). Out-of-range values are clamped.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100}],"returns":"items[] (changed ids), profiles[] (changed usernames), items_count, profiles_count, max_item (+ changed_items[] if hydrate)","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"hydrate":true}},{"name":"max_item","description":"the current largest item id on Hacker News — the newest id, useful for backfilling / id-range walks","required_params":[],"optional_params":[],"params":[],"returns":"max_item (int)","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"haraj","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Haraj API (حراج) — haraj.com.sa, Saudi Arabia's largest general classifieds site: search cars, real estate, phones, furniture, livestock and jobs by Arabic keyword, tag and city; read a full listing and its public comments; list one seller's ads; read the site's own trending keywords. Prices in Saudi riyal. No account, no browser. Ad text is returned as published, contacts included.","version":"0.2.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/haraj/v1","spec_available":true,"actions":[{"name":"search","description":"Search Haraj listings by Arabic keyword and/or tag, up to 60 per page: listing id, title, URL, price in riyal with the source's own formatted string beside it, the ad body, city / neighbourhood / geohash, tags, photos, comment counts, posting and update times, the public seller handle, and the category blocks Haraj publishes (car details, REGA real-estate licence numbers, job offer details, free-form attributes). Filter by city, tag, excluded tag, photos-only, video-only and private-sellers-only, and order strictly by newest listing id. Give at least `query` or `tag`. Listings are written in Arabic — an Arabic keyword matches far more than its Latin spelling.","required_params":[],"optional_params":["query","tag","tags","not_tag","city","cities","only_with_image","only_with_video","hide_showrooms","order_by_newest_id","page","per_page","lang"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search for, in the ad's own language. Haraj listings are written in Arabic, so an Arabic keyword (كامري, شقة للايجار, ايفون) matches far more than its Latin spelling. Either query or tag is required.","on_invalid":"reject","example":"كامري","aliases":["q","keyword","search"]},{"name":"tag","type":"string","required":false,"description":"Haraj section/tag to restrict to, spelled as the site spells it (it is the value returned in each listing's `tags`). Either query or tag is required; both together narrow the search.","on_invalid":"reject","example":"حراج السيارات","aliases":["category"]},{"name":"tags","type":"array","required":false,"description":"Several tags at once; a listing matching any of them is served.","on_invalid":"reject","example":["حراج السيارات"]},{"name":"not_tag","type":"string","required":false,"description":"Exclude every listing carrying this tag. Measured to really remove them (zero overlap with the unfiltered control).","on_invalid":"reject","example":"حراج السيارات","aliases":["exclude_tag"]},{"name":"city","type":"string","required":false,"description":"Restrict to one city, spelled as the site spells it in a listing's `city` field (الرياض, جده, الشرقيه, مكه, المدينة, القصيم…). An unknown city is an honest empty result, not a swallowed filter.","on_invalid":"reject","example":"الرياض"},{"name":"cities","type":"array","required":false,"description":"Several cities at once.","on_invalid":"reject","example":["الرياض","جده"]},{"name":"only_with_image","type":"boolean","required":false,"description":"Only listings that carry photos.","on_invalid":"reject","example":true},{"name":"only_with_video","type":"boolean","required":false,"description":"Only listings that carry a video.","on_invalid":"reject","example":true},{"name":"hide_showrooms","type":"boolean","required":false,"description":"Drop dealer/showroom listings and keep private sellers.","on_invalid":"reject","example":true},{"name":"order_by_newest_id","type":"boolean","required":false,"description":"Order strictly by listing id (newest posted first) instead of the site's own relevance order.","on_invalid":"reject","example":true},{"name":"page","type":"integer","required":false,"description":"1-based page number. Note that haraj.com.sa serves the same first page for page 0 and page 1, and that consecutive pages overlap by about one listing because the source over-fetches one row per page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Listings per page, 1-60. Above 60 the source silently falls back to its own small default, so this engine rejects it instead.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":60,"aliases":["limit"]},{"name":"lang","type":"enum","required":false,"description":"Language Haraj should answer in. Titles come back translated where the site has a translation; city names stay Arabic either way.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic (the site's own default)"},{"value":"en","label":"English"},{"value":"ur","label":"Urdu"},{"value":"id","label":"Indonesian"},{"value":"tl","label":"Filipino"},{"value":"bn","label":"Bengali"},{"value":"hi","label":"Hindi"},{"value":"fr","label":"French"}],"default":"ar","example":"ar"}],"returns":"results[]{listing_id, title, url, url_path, price (integer SAR, null when the listing publishes none or when the row's two price witnesses disagree), price_display (the source's own formatted string), currency, description, description_html, seller_username, seller_id, seller_url, city, geo_city, neighborhood, geohash, tags[], tag_filters[], post_type, is_promoted, is_active, has_image, has_video, image, images[], image_count, comment_count, comments_enabled, comment_status, up_rank, down_rank, posted_at, updated_at, posted_at_epoch, updated_at_epoch, car_info{model, mileage, fuel, gear, condition, is_4wd, sell_or_waiver, car_or_related, bank}, real_estate_info{rega_advertiser_registration_number, rega_authorization_number}, jobs_info{offer_type, experience_level, contract_type, qualification, commercial_register_number}, attributes[]{key, value}, badges[]{note, icon, icon_url, link}, store{name, label, link, offers_enabled, escrow_available}}, count, page, per_page, page_overlaps_previous, has_next_page, price_disagreements","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"كامري","per_page":20}},{"name":"detail","description":"One Haraj listing (or up to 20 at once) by listing number or listing URL, with every field the search rows carry: the full ad body, price, city and neighbourhood, all photos, tags, comment counts, posting and update times, the public seller handle, and the car / real-estate / jobs blocks where Haraj publishes them. A listing that was removed or never existed answers NOT_FOUND.","required_params":["listing_id"],"optional_params":["lang"],"params":[{"name":"listing_id","type":"string","required":true,"description":"A Haraj listing number, or a haraj.com.sa listing URL. Up to 20 comma-separated ids may be given in one call.","on_invalid":"reject","example":"189640871","value_pattern":"(\\d{5,12}|https?://(www\\.)?haraj\\.com\\.sa/.+)","aliases":["id","post_id","url"]},{"name":"lang","type":"enum","required":false,"description":"Language Haraj should answer in. Titles come back translated where the site has a translation; city names stay Arabic either way.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic (the site's own default)"},{"value":"en","label":"English"},{"value":"ur","label":"Urdu"},{"value":"id","label":"Indonesian"},{"value":"tl","label":"Filipino"},{"value":"bn","label":"Bengali"},{"value":"hi","label":"Hindi"},{"value":"fr","label":"French"}],"default":"ar","example":"ar"}],"returns":"listing{…same shape as a search row…}, listings[]{…}, count, requested_ids[], missing_ids[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"189640871"}},{"name":"user_listings","description":"Every currently live ad posted by one Haraj seller, newest first, by the seller's public handle: the same listing shape as search, with city, tag and photo filters and paging. Useful for watching a dealer's inventory or a shop's price moves. The seller is identified by the handle and numeric id Haraj publishes on each ad.","required_params":["username"],"optional_params":["city","cities","tag","not_tag","only_with_image","only_with_video","order_by_newest_id","page","per_page","lang"],"params":[{"name":"username","type":"string","required":true,"description":"The seller's public Haraj handle, exactly as it appears in a listing's `seller_username`.","on_invalid":"reject","example":"abdullah-aljalal","aliases":["seller","author","author_username"]},{"name":"city","type":"string","required":false,"description":"Restrict to one city, spelled as the site spells it in a listing's `city` field (الرياض, جده, الشرقيه, مكه, المدينة, القصيم…). An unknown city is an honest empty result, not a swallowed filter.","on_invalid":"reject","example":"الرياض"},{"name":"cities","type":"array","required":false,"description":"Several cities at once.","on_invalid":"reject","example":["الرياض","جده"]},{"name":"tag","type":"string","required":false,"description":"Haraj section/tag to restrict to, spelled as the site spells it (it is the value returned in each listing's `tags`). Either query or tag is required; both together narrow the search.","on_invalid":"reject","example":"حراج السيارات","aliases":["category"]},{"name":"not_tag","type":"string","required":false,"description":"Exclude every listing carrying this tag. Measured to really remove them (zero overlap with the unfiltered control).","on_invalid":"reject","example":"حراج السيارات","aliases":["exclude_tag"]},{"name":"only_with_image","type":"boolean","required":false,"description":"Only listings that carry photos.","on_invalid":"reject","example":true},{"name":"only_with_video","type":"boolean","required":false,"description":"Only listings that carry a video.","on_invalid":"reject","example":true},{"name":"order_by_newest_id","type":"boolean","required":false,"description":"Order strictly by listing id (newest posted first) instead of the site's own relevance order.","on_invalid":"reject","example":true},{"name":"page","type":"integer","required":false,"description":"1-based page number. Note that haraj.com.sa serves the same first page for page 0 and page 1, and that consecutive pages overlap by about one listing because the source over-fetches one row per page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Listings per page, 1-60. Above 60 the source silently falls back to its own small default, so this engine rejects it instead.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":60,"aliases":["limit"]},{"name":"lang","type":"enum","required":false,"description":"Language Haraj should answer in. Titles come back translated where the site has a translation; city names stay Arabic either way.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic (the site's own default)"},{"value":"en","label":"English"},{"value":"ur","label":"Urdu"},{"value":"id","label":"Indonesian"},{"value":"tl","label":"Filipino"},{"value":"bn","label":"Bengali"},{"value":"hi","label":"Hindi"},{"value":"fr","label":"French"}],"default":"ar","example":"ar"}],"returns":"results[]{listing_id, title, url, url_path, price (integer SAR, null when the listing publishes none or when the row's two price witnesses disagree), price_display (the source's own formatted string), currency, description, description_html, seller_username, seller_id, seller_url, city, geo_city, neighborhood, geohash, tags[], tag_filters[], post_type, is_promoted, is_active, has_image, has_video, image, images[], image_count, comment_count, comments_enabled, comment_status, up_rank, down_rank, posted_at, updated_at, posted_at_epoch, updated_at_epoch, car_info{model, mileage, fuel, gear, condition, is_4wd, sell_or_waiver, car_or_related, bank}, real_estate_info{rega_advertiser_registration_number, rega_authorization_number}, jobs_info{offer_type, experience_level, contract_type, qualification, commercial_register_number}, attributes[]{key, value}, badges[]{note, icon, icon_url, link}, store{name, label, link, offers_enabled, escrow_available}}, count, page, per_page, page_overlaps_previous, has_next_page, price_disagreements, username","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"abdullah-aljalal"}},{"name":"browse","description":"Browse the newest Haraj listings without a keyword — the whole site, one tag, one city, or a tag and city together — in the site's own newest-first order. Same listing shape as search. Use this to poll a section for new ads; use `search` when you have a keyword.","required_params":[],"optional_params":["tag","not_tag","city","cities","only_with_image","only_with_video","order_by_newest_id","page","per_page","lang"],"params":[{"name":"tag","type":"string","required":false,"description":"Haraj section/tag to restrict to, spelled as the site spells it (it is the value returned in each listing's `tags`). Either query or tag is required; both together narrow the search.","on_invalid":"reject","example":"حراج السيارات","aliases":["category"]},{"name":"not_tag","type":"string","required":false,"description":"Exclude every listing carrying this tag. Measured to really remove them (zero overlap with the unfiltered control).","on_invalid":"reject","example":"حراج السيارات","aliases":["exclude_tag"]},{"name":"city","type":"string","required":false,"description":"Restrict to one city, spelled as the site spells it in a listing's `city` field (الرياض, جده, الشرقيه, مكه, المدينة, القصيم…). An unknown city is an honest empty result, not a swallowed filter.","on_invalid":"reject","example":"الرياض"},{"name":"cities","type":"array","required":false,"description":"Several cities at once.","on_invalid":"reject","example":["الرياض","جده"]},{"name":"only_with_image","type":"boolean","required":false,"description":"Only listings that carry photos.","on_invalid":"reject","example":true},{"name":"only_with_video","type":"boolean","required":false,"description":"Only listings that carry a video.","on_invalid":"reject","example":true},{"name":"order_by_newest_id","type":"boolean","required":false,"description":"Order strictly by listing id (newest posted first) instead of the site's own relevance order.","on_invalid":"reject","example":true},{"name":"page","type":"integer","required":false,"description":"1-based page number. Note that haraj.com.sa serves the same first page for page 0 and page 1, and that consecutive pages overlap by about one listing because the source over-fetches one row per page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Listings per page, 1-60. Above 60 the source silently falls back to its own small default, so this engine rejects it instead.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":60,"aliases":["limit"]},{"name":"lang","type":"enum","required":false,"description":"Language Haraj should answer in. Titles come back translated where the site has a translation; city names stay Arabic either way.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic (the site's own default)"},{"value":"en","label":"English"},{"value":"ur","label":"Urdu"},{"value":"id","label":"Indonesian"},{"value":"tl","label":"Filipino"},{"value":"bn","label":"Bengali"},{"value":"hi","label":"Hindi"},{"value":"fr","label":"French"}],"default":"ar","example":"ar"}],"returns":"results[]{listing_id, title, url, url_path, price (integer SAR, null when the listing publishes none or when the row's two price witnesses disagree), price_display (the source's own formatted string), currency, description, description_html, seller_username, seller_id, seller_url, city, geo_city, neighborhood, geohash, tags[], tag_filters[], post_type, is_promoted, is_active, has_image, has_video, image, images[], image_count, comment_count, comments_enabled, comment_status, up_rank, down_rank, posted_at, updated_at, posted_at_epoch, updated_at_epoch, car_info{model, mileage, fuel, gear, condition, is_4wd, sell_or_waiver, car_or_related, bank}, real_estate_info{rega_advertiser_registration_number, rega_authorization_number}, jobs_info{offer_type, experience_level, contract_type, qualification, commercial_register_number}, attributes[]{key, value}, badges[]{note, icon, icon_url, link}, store{name, label, link, offers_enabled, escrow_available}}, count, page, per_page, page_overlaps_previous, has_next_page, price_disagreements","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"tag":"حراج السيارات","per_page":10}},{"name":"comments","description":"Every public comment on one Haraj listing, by listing number or URL, oldest first: comment id, the commenter's public Haraj handle, numeric id and profile link, the comment text exactly as posted (prices, offers and phone numbers included), the date, and the id of the comment it replies to. Also the de-duplicated list of people who commented, the listing's own comment count and its title. Comments Haraj hides from the public (private replies, deleted ones) are kept, flagged `is_hidden`, with Haraj's own placeholder text. A listing with no comments is an empty list; a removed listing answers NOT_FOUND.","required_params":["listing_id"],"optional_params":["sort"],"params":[{"name":"listing_id","type":"string","required":true,"description":"ONE Haraj listing number, or its haraj.com.sa listing URL (https://haraj.com.sa/11169318604/… is listing 169318604).","on_invalid":"reject","example":"169318604","value_pattern":"(\\d{5,12}|https?://(www\\.)?haraj\\.com\\.sa/.+)","aliases":["id","post_id","url"]},{"name":"sort","type":"enum","required":false,"description":"Order of the returned comments.","on_invalid":"reject","allowed_values":[{"value":"oldest","label":"Oldest comment first (the site's own order)"},{"value":"newest","label":"Newest comment first"}],"default":"oldest","example":"oldest"}],"returns":"comments[]{comment_id, author_username, author_id, author_url, author_level, author_is_new_user, text, status, is_hidden, delete_reason, seq_id, posted_at, posted_at_epoch, is_reply, reply_to_comment_id, mention{contains_mention, username, handle, user_id}}, count, visible_count, hidden_count, reply_count, commenters[]{username, user_id, url, comments, is_listing_author}, listing_comment_count (the listing's own published count, visible comments only), comments_enabled, listing_id, listing_url, listing_title, seller_username, sort, pages_read, truncated","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"169318604"}},{"name":"trending_keywords","description":"Haraj's own trending search keywords over the last N days, in Arabic, with the site's own score for each — what Saudi buyers are actually searching for right now.","required_params":[],"optional_params":["days","lang"],"params":[{"name":"days","type":"integer","required":false,"description":"How many days back to score the trending keywords over.","on_invalid":"reject","default":7,"example":7,"minimum":1,"maximum":90,"aliases":["range_in_days"]},{"name":"lang","type":"enum","required":false,"description":"Language Haraj should answer in. Titles come back translated where the site has a translation; city names stay Arabic either way.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic (the site's own default)"},{"value":"en","label":"English"},{"value":"ur","label":"Urdu"},{"value":"id","label":"Indonesian"},{"value":"tl","label":"Filipino"},{"value":"bn","label":"Bengali"},{"value":"hi","label":"Hindi"},{"value":"fr","label":"French"}],"default":"ar","example":"ar"}],"returns":"keywords[]{keyword, score}, count, days","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"days":7}}]},{"name":"hareruya","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Hareruya API — Magic: The Gathering prices from Hareruya (晴れる屋, hareruyamtg.com), Japan's largest MTG shop: sale price in JPY per language and condition (NM/SP/MP/HP) with live stock and weekly sales, the shop's buylist (買取) price, full card data and the set list. No login, no key.","version":"1.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/hareruya/v1","spec_available":true,"actions":[{"name":"search","description":"Search Hareruya's MTG shop. Each row is one printing in one language and condition, with the live price and stock, plus the other conditions of the same printing. Give `query`, `card_name` or `set_id` (any combination); the other filters narrow it.","required_params":[],"optional_params":["query","card_name","set_id","language","foil","rarity","format","category","min_price","max_price","in_stock_only","sort","per_page","page"],"params":[{"name":"query","type":"string","required":false,"description":"Card or product name, English or Japanese ('Lightning Bolt', '稲妻', 'Ragavan'). A Japanese word can match more products than the English name (稲妻 980 vs Lightning Bolt 141 measured) because it also matches card text and other names.","on_invalid":"reject","example":"Lightning Bolt","aliases":["q","keyword","kw"]},{"name":"card_name","type":"string","required":false,"description":"Exact English card name, every printing of that card ('Lightning Bolt' → 117 products). Case-sensitive and exact: 'lightning bolt' or '稲妻' answer 0. Rows carry `card_name`, so a search row's value always works.","on_invalid":"reject","example":"Lightning Bolt","aliases":["exact_name"]},{"name":"set_id","type":"string","required":false,"description":"Set id from the `sets` action (e.g. 10 = Fourth Edition). With no query this lists the whole set.","on_invalid":"reject","example":"10","aliases":["cardset","set"]},{"name":"language","type":"enum","required":false,"description":"Copies in this language: jp, en, or other (every other language).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japanese copies"},{"value":"en","label":"English copies"},{"value":"other","label":"Every other language (FR, DE, IT, KO, PT, RU, ES, Chinese…)"}],"example":"en","aliases":["lang"]},{"name":"foil","type":"enum","required":false,"description":"normal (non-foil) or foil.","on_invalid":"reject","allowed_values":[{"value":"normal","label":"Non-foil only"},{"value":"foil","label":"Foil only"}],"example":"foil"},{"name":"rarity","type":"enum","required":false,"description":"common, uncommon, rare, mythic, basic_land, special or token.","on_invalid":"reject","allowed_values":[{"value":"common","label":"common"},{"value":"uncommon","label":"uncommon"},{"value":"rare","label":"rare"},{"value":"mythic","label":"mythic"},{"value":"basic_land","label":"basic land"},{"value":"special","label":"special"},{"value":"token","label":"token"}],"example":"mythic"},{"name":"format","type":"enum","required":false,"description":"Only cards legal in this format: standard, pioneer, modern, legacy, vintage, commander, pauper.","on_invalid":"reject","allowed_values":[{"value":"standard","label":"cards legal in standard"},{"value":"pioneer","label":"cards legal in pioneer"},{"value":"modern","label":"cards legal in modern"},{"value":"legacy","label":"cards legal in legacy"},{"value":"vintage","label":"cards legal in vintage"},{"value":"commander","label":"cards legal in commander"},{"value":"pauper","label":"cards legal in pauper"}],"example":"modern"},{"name":"category","type":"enum","required":false,"description":"single (single cards) or supply (sleeves, boxes, sealed product).","on_invalid":"reject","allowed_values":[{"value":"single","label":"Single cards"},{"value":"supply","label":"Supplies and goods (sleeves, boxes, sealed product)"}],"example":"single"},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in JPY (inclusive).","on_invalid":"reject","example":1000,"minimum":1,"maximum":100000000,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in JPY (inclusive).","on_invalid":"reject","example":5000,"minimum":1,"maximum":100000000,"aliases":["price_max"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only rows with stock now. The shop's own in-stock filter runs on its search index, which lags; the engine also drops rows that the live list shows with no stock in any condition and counts them in meta.dropped_out_of_stock.","on_invalid":"reject","default":false,"example":true},{"name":"sort","type":"enum","required":false,"description":"relevance (default), price_desc, price_asc, release_date.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The shop's recommended order (default)"},{"value":"price_desc","label":"Price high to low"},{"value":"price_asc","label":"Price low to high"},{"value":"release_date","label":"Newest set first"}],"default":"relevance","example":"price_desc"},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, 1-100 (default 60, the shop's own).","on_invalid":"reject","default":60,"example":20,"minimum":1,"maximum":100,"aliases":["limit","rows"]},{"name":"page","type":"integer","required":false,"description":"Page number. The shop's search reaches the first 4,000 rows of any result; meta.last_page says where that stops.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":4000}],"returns":"rows[]: product_id (give it to `card`), product_class_id (this printing x language x condition), card_id (give it to `buylist`), name (the shop's Japanese title), name_en (the English card name only, e.g. 'Sol Ring'; double-faced and split cards as 'Front // Back'; supplies: the whole product title), title_en (the shop's English title as printed, e.g. '【Foil】(1604)■Borderless■《Sol Ring》[SLD]'), card_name (the shop's English card key, what `card_name` filters on), set_code (the pure set code: 'NEO' for the shop's 'NEO-BF', 'ELD' for 'P Stamped_ELD', 'PWCS' for '(PWCS)[流星マーク]'; null when the shop names no set, e.g. 'The List'), set_label (the rest of the shop's set bracket, from the English title, else the Japanese one: 'BF', 'PRE', 'ART', 'P Stamped', 'The List', 'Buy a Box Card', '流星マーク'; null for a plain set), collector_number (as the shop prints it: '305', 'MH2-197', '002/003'; null on supplies or when the title has none), language (JP, EN, FR, DE, IT, KO, PT, RU, ES, CS, CT), language_id, foil (null on supplies), condition (NM, SP, MP, HP; graded or single copies carry their own label such as BGS8.5), price_jpy, stock (live web-shop stock), in_stock, weekly_sales (the shop's own count this week; 0 when it sold none, null only when the shop shows no sales box), on_sale, single_copy (an individual high-value copy with its own photo), copy_code, other_conditions[] {condition, price_jpy, stock, in_stock, product_class_id}, image, url, currency (JPY), price_index_jpy (the search index's price), price_mismatch. meta: total (the shop's own count), total_capped (the shop pages through 4,000 at most), reachable, page, per_page, last_page, has_more, past_last_page, sort, filters_applied, dropped_out_of_stock, currency, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Lightning Bolt","per_page":20}},{"name":"card","description":"One printing in full: every language and condition the shop sells it in (price, live stock, individual graded copies), weekly sales per language, and the card's data (type, cost, text, rarity, set, illustrator, legal formats).","required_params":["product_id"],"optional_params":["locale"],"params":[{"name":"product_id","type":"string","required":true,"description":"A search row's `product_id` (one printing; every language and condition of it is on one page) or a hareruyamtg.com product URL.","on_invalid":"reject","example":"3833","aliases":["id","url"]},{"name":"locale","type":"enum","required":false,"description":"Page text language: ja (default) or en. Prices are JPY either way.","on_invalid":"reject","allowed_values":[{"value":"ja","label":"Japanese page text (default)"},{"value":"en","label":"English page text"}],"default":"ja","example":"en"}],"returns":"card{product_id, name, set_code (pure set code, as in search), set_label (the rest of the shop's set bracket, in the page language: 'BF', 'Pスタンプ' / 'P Stamped', '流星マーク'), collector_number, set_name, set_id, languages[], offers[]{language, condition, price_jpy, stock, in_stock, product_class_id, single_copy, copy_code}, weekly_sales{language: n} (0 = sold none this week; null only when the page shows no sales box for that language), card_name_local, color, mana_cost, card_type, subtype, rarity, text, flavor_text, power_toughness, loyalty, illustrator, illustrator_id, legal_formats[], sku, image, url, currency, price_mismatch (the page's table vs its own ld+json offer)}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"3833"}},{"name":"buylist","description":"Hareruya's buylist (買取): what the shop PAYS for a card in NM condition, in JPY. This is a buy price, never the sale price. Give `query`, `card_id` or `set_id`.","required_params":[],"optional_params":["query","card_id","set_id","language","foil","rarity","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Card or product name, English or Japanese ('Lightning Bolt', '稲妻', 'Ragavan'). A Japanese word can match more products than the English name (稲妻 980 vs Lightning Bolt 141 measured) because it also matches card text and other names.","on_invalid":"reject","example":"Lightning Bolt","aliases":["q","keyword","kw"]},{"name":"card_id","type":"string","required":false,"description":"Every printing of one card: a search or buylist row's `card_id`.","on_invalid":"reject","example":"6140"},{"name":"set_id","type":"string","required":false,"description":"Set id from the `sets` action (e.g. 10 = Fourth Edition). With no query this lists the whole set.","on_invalid":"reject","example":"10","aliases":["cardset","set"]},{"name":"language","type":"enum","required":false,"description":"Copies in this language: jp, en, or other (every other language).","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japanese copies"},{"value":"en","label":"English copies"},{"value":"other","label":"Every other language (FR, DE, IT, KO, PT, RU, ES, Chinese…)"}],"example":"en","aliases":["lang"]},{"name":"foil","type":"enum","required":false,"description":"normal (non-foil) or foil.","on_invalid":"reject","allowed_values":[{"value":"normal","label":"Non-foil only"},{"value":"foil","label":"Foil only"}],"example":"foil"},{"name":"rarity","type":"enum","required":false,"description":"common, uncommon, rare, mythic, basic_land, special or token.","on_invalid":"reject","allowed_values":[{"value":"common","label":"common"},{"value":"uncommon","label":"uncommon"},{"value":"rare","label":"rare"},{"value":"mythic","label":"mythic"},{"value":"basic_land","label":"basic land"},{"value":"special","label":"special"},{"value":"token","label":"token"}],"example":"mythic"},{"name":"sort","type":"enum","required":false,"description":"default (the shop's order), price_desc, price_asc.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The shop's own order (default)"},{"value":"price_desc","label":"Buy price high to low"},{"value":"price_asc","label":"Buy price low to high"}],"default":"default","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number (60 rows a page).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":2000}],"returns":"rows[]: product_id (also a `card` product_id), product_class_id, card_id, name, set_code (pure set code, as in search), set_label (the rest of the shop's set bracket, from the Japanese title: 'BF', 'Pスタンプ', 'PWシンボル付き再版', '流星マーク'), collector_number, language, foil, condition (NM: the list quotes NM), buy_price_jpy, accepting (the shop shows a sell-to-us quantity box), max_buy_qty, image, url, currency. product_class_id and max_buy_qty are null when accepting is false: the shop prints neither the quantity box nor the class for a card it is not buying (the list tile and the purchase page alike); the class is the `card` offer of the same language in NM. meta: total, page, per_page (60), last_page, has_more, past_last_page, filters_applied, warnings. Japanese page text only (the shop has no English buylist search).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Lightning Bolt"}},{"name":"sets","description":"Every MTG set the shop files cards under, newest first: set_id (for `search` / `buylist`) and name.","required_params":[],"optional_params":["locale"],"params":[{"name":"locale","type":"enum","required":false,"description":"Page text language: ja (default) or en. Prices are JPY either way.","on_invalid":"reject","allowed_values":[{"value":"ja","label":"Japanese page text (default)"},{"value":"en","label":"English page text"}],"default":"ja","example":"en"}],"returns":"rows[]: set_id, name. meta: total, locale.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"locale":"en"}}]},{"name":"hatla2ee","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Hatla2ee Egypt used cars","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/hatla2ee/v1","spec_available":true,"actions":[{"name":"search","description":"Search public used-car listings by supported source brand. Not free-text keyword search.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"enum","required":true,"description":"Source brand slug. All 35 brands the source publishes; each one verified live against the engine parser 2026-10-05. Model-level filtering is not offered here.","on_invalid":"reject","allowed_values":[{"value":"audi","label":"Audi"},{"value":"avatr","label":"Avatr"},{"value":"baic","label":"Baic"},{"value":"bmw","label":"BMW"},{"value":"byd","label":"Byd"},{"value":"chery","label":"Chery"},{"value":"chevrolet","label":"Chevrolet"},{"value":"citroen","label":"Citroën"},{"value":"daewoo","label":"Daewoo"},{"value":"fiat","label":"Fiat"},{"value":"ford","label":"Ford"},{"value":"geely","label":"Geely"},{"value":"haval","label":"Haval"},{"value":"honda","label":"Honda"},{"value":"hyundai","label":"Hyundai"},{"value":"jeep","label":"Jeep"},{"value":"jetour","label":"Jetour"},{"value":"kia","label":"Kia"},{"value":"land-rover","label":"Land Rover"},{"value":"mazda","label":"Mazda"},{"value":"mercedes","label":"Mercedes"},{"value":"mitsubishi","label":"Mitsubishi"},{"value":"moris-garage","label":"MG"},{"value":"nissan","label":"Nissan"},{"value":"opel","label":"Opel"},{"value":"peugeot","label":"Peugeot"},{"value":"porsche","label":"Porsche"},{"value":"proton","label":"Proton"},{"value":"renault","label":"Renault"},{"value":"seat","label":"Seat"},{"value":"skoda","label":"Skoda"},{"value":"speranza","label":"Speranza"},{"value":"suzuki","label":"Suzuki"},{"value":"toyota","label":"Toyota"},{"value":"volks-wagen","label":"Volkswagen"}],"example":"toyota"},{"name":"page","type":"integer","required":false,"description":"Native source page, only 1/2 qualified.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Rows returned from native source page, after excluding new-car routes. Advancing skips truncated rows.","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":40}],"returns":"results with canonical id and numeric source_id, EGP asking price, native attributes and public seller facts; source page counts.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"toyota","page":1,"limit":3}},{"name":"product/detail","description":"Read a public used-car listing by canonical search id or URL.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Copy results[].id: make/model/numeric-source-id, or its canonical same-host URL. Numeric source_id alone is insufficient.","on_invalid":"reject","example":"mercedes/cla-200/7295717"}],"returns":"Listing description, primary image, source specifications, visible fuel/transmission and public seller; primary EGP asking price.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"mercedes/cla-200/7295717"}}]},{"name":"hemnet","category":{"id":"real-estate","title":"Real Estate"},"title":"Hemnet.se API scraper — Sweden real estate data: for-sale (till salu) and recently-sold (slutpriser/sålda) property listings across every Swedish city, municipality and county with full filters (price SEK, rooms, living area m², plot, property type, price per m², construction year, keyword, sort), each listing with price, rooms, area, fee, square-metre price, energy class, coordinates, photos, broker agency and address, a full per-listing detail record (description, all photos, amenities, year built, sale history) and recently-sold final prices, plus a location resolver that maps a Swedish place name to Hemnet's location — no API key required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/hemnet/v1","spec_available":true,"actions":[{"name":"search","description":"Search Hemnet.se for-sale property listings by location, with structured filters: price (SEK), rooms, living area (m²), plot, property type, price-per-m², construction year, keyword and sort. Each result carries asking price, fee, square-metre price, rooms, living area, housing form, coordinates, broker agency, address and photos. Paginate with page.","required_params":["location"],"optional_params":["home_type","sort","page","price_min","price_max","rooms_min","rooms_max","living_area_min","living_area_max","land_area_min","land_area_max","price_per_m2_min","price_per_m2_max","year_min","year_max","keywords"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — a Swedish city, municipality, county, district or postal area ('Stockholm', 'Göteborg', 'Malmö', 'Uppsala kommun', 'Vasastan'). Free text is resolved to Hemnet's location id automatically; pass a numeric Hemnet location_id directly to skip resolution.","on_invalid":"reject","example":"Stockholm","aliases":["loc","area","city","where","query"]},{"name":"home_type","type":"string","required":false,"description":"Property type — one or several comma-separated: villa (house), radhus (townhouse), bostadsratt (apartment/condo), fritidshus (holiday home), tomt (plot/land), gard (farm). e.g. 'villa,radhus'.","on_invalid":"ignore","example":"bostadsratt","aliases":["item_types","property_type","type"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Most recently published (default)"},{"value":"oldest","label":"Oldest first"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"size_high","label":"Largest living area first"},{"value":"size_low","label":"Smallest living area first"},{"value":"ppm2_low","label":"Lowest price per m²"},{"value":"ppm2_high","label":"Highest price per m²"},{"value":"fee_low","label":"Lowest monthly fee"}],"default":"newest","example":"price_low"},{"name":"page","type":"integer","required":false,"description":"Result page (50 listings per page; paginate with page += 1). Hemnet caps the viewable window at 50 pages / 2500 results.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"price_min","type":"integer","required":false,"description":"Minimum asking price in SEK.","on_invalid":"ignore","example":2000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum asking price in SEK.","on_invalid":"ignore","example":5000000,"minimum":0},{"name":"rooms_min","type":"number","required":false,"description":"Minimum number of rooms.","on_invalid":"ignore","example":3,"minimum":1,"maximum":20,"aliases":["rooms"]},{"name":"rooms_max","type":"number","required":false,"description":"Maximum number of rooms.","on_invalid":"ignore","example":6,"minimum":1,"maximum":20},{"name":"living_area_min","type":"integer","required":false,"description":"Minimum living area in square metres (m²).","on_invalid":"ignore","example":60,"minimum":0,"aliases":["surface_min"]},{"name":"living_area_max","type":"integer","required":false,"description":"Maximum living area in square metres (m²).","on_invalid":"ignore","example":150,"minimum":0,"aliases":["surface_max"]},{"name":"land_area_min","type":"integer","required":false,"description":"Minimum plot / land area in square metres (m²).","on_invalid":"ignore","example":500,"minimum":0,"aliases":["plot_min"]},{"name":"land_area_max","type":"integer","required":false,"description":"Maximum plot / land area in square metres (m²).","on_invalid":"ignore","example":2000,"minimum":0,"aliases":["plot_max"]},{"name":"price_per_m2_min","type":"integer","required":false,"description":"Minimum price per square metre (SEK/m²).","on_invalid":"ignore","example":20000,"minimum":0},{"name":"price_per_m2_max","type":"integer","required":false,"description":"Maximum price per square metre (SEK/m²).","on_invalid":"ignore","example":80000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Earliest construction year.","on_invalid":"ignore","example":1950,"minimum":1700,"maximum":2035,"aliases":["construction_year_min"]},{"name":"year_max","type":"integer","required":false,"description":"Latest construction year.","on_invalid":"ignore","example":2024,"minimum":1700,"maximum":2035,"aliases":["construction_year_max"]},{"name":"keywords","type":"string","required":false,"description":"Free-text listing keyword filter ('pool', 'sjöutsikt', 'kakelugn', 'balkong').","on_invalid":"ignore","example":"balkong"}],"returns":"results[]{id, url, street_address, area, housing_form, asking_price{amount_sek}, fee, square_meter_price, rooms, living_area_m2, land_area_m2, latitude, longitude, broker_agency, labels, primary_photo_url} + total + count + page + max_pages + location + filters_applied","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"Stockholm"}},{"name":"sold","description":"Recently-SOLD property prices (slutpriser) by location, with the same filters as search — the comparable-sales / price-history surface. Each record carries asking price, FINAL sold price, sold date, price change (%) and square-metre price.","required_params":["location"],"optional_params":["home_type","sort","page","price_min","price_max","rooms_min","rooms_max","living_area_min","living_area_max","land_area_min","land_area_max","price_per_m2_min","price_per_m2_max","year_min","year_max","keywords"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — a Swedish city, municipality, county, district or postal area ('Stockholm', 'Göteborg', 'Malmö', 'Uppsala kommun', 'Vasastan'). Free text is resolved to Hemnet's location id automatically; pass a numeric Hemnet location_id directly to skip resolution.","on_invalid":"reject","example":"Stockholm","aliases":["loc","area","city","where","query"]},{"name":"home_type","type":"string","required":false,"description":"Property type — one or several comma-separated: villa (house), radhus (townhouse), bostadsratt (apartment/condo), fritidshus (holiday home), tomt (plot/land), gard (farm). e.g. 'villa,radhus'.","on_invalid":"ignore","example":"bostadsratt","aliases":["item_types","property_type","type"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Most recently published (default)"},{"value":"oldest","label":"Oldest first"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"size_high","label":"Largest living area first"},{"value":"size_low","label":"Smallest living area first"},{"value":"ppm2_low","label":"Lowest price per m²"},{"value":"ppm2_high","label":"Highest price per m²"},{"value":"fee_low","label":"Lowest monthly fee"}],"default":"newest","example":"price_low"},{"name":"page","type":"integer","required":false,"description":"Result page (50 listings per page; paginate with page += 1). Hemnet caps the viewable window at 50 pages / 2500 results.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"price_min","type":"integer","required":false,"description":"Minimum asking price in SEK.","on_invalid":"ignore","example":2000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum asking price in SEK.","on_invalid":"ignore","example":5000000,"minimum":0},{"name":"rooms_min","type":"number","required":false,"description":"Minimum number of rooms.","on_invalid":"ignore","example":3,"minimum":1,"maximum":20,"aliases":["rooms"]},{"name":"rooms_max","type":"number","required":false,"description":"Maximum number of rooms.","on_invalid":"ignore","example":6,"minimum":1,"maximum":20},{"name":"living_area_min","type":"integer","required":false,"description":"Minimum living area in square metres (m²).","on_invalid":"ignore","example":60,"minimum":0,"aliases":["surface_min"]},{"name":"living_area_max","type":"integer","required":false,"description":"Maximum living area in square metres (m²).","on_invalid":"ignore","example":150,"minimum":0,"aliases":["surface_max"]},{"name":"land_area_min","type":"integer","required":false,"description":"Minimum plot / land area in square metres (m²).","on_invalid":"ignore","example":500,"minimum":0,"aliases":["plot_min"]},{"name":"land_area_max","type":"integer","required":false,"description":"Maximum plot / land area in square metres (m²).","on_invalid":"ignore","example":2000,"minimum":0,"aliases":["plot_max"]},{"name":"price_per_m2_min","type":"integer","required":false,"description":"Minimum price per square metre (SEK/m²).","on_invalid":"ignore","example":20000,"minimum":0},{"name":"price_per_m2_max","type":"integer","required":false,"description":"Maximum price per square metre (SEK/m²).","on_invalid":"ignore","example":80000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Earliest construction year.","on_invalid":"ignore","example":1950,"minimum":1700,"maximum":2035,"aliases":["construction_year_min"]},{"name":"year_max","type":"integer","required":false,"description":"Latest construction year.","on_invalid":"ignore","example":2024,"minimum":1700,"maximum":2035,"aliases":["construction_year_max"]},{"name":"keywords","type":"string","required":false,"description":"Free-text listing keyword filter ('pool', 'sjöutsikt', 'kakelugn', 'balkong').","on_invalid":"ignore","example":"balkong"}],"returns":"results[]{id, url, street_address, housing_form, asking_price, final_price{amount_sek}, sold_at_label, price_change, square_meter_price, rooms, living_area_m2, broker_agency} + total + count + page + location + filters_applied","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"Malmö"}},{"name":"detail","description":"Full record for a single listing by its Hemnet listing URL, slug or id (hemnet.se/bostad/<slug>). Returns asking price, fee, rooms, living & plot area, construction year, energy class, tenure, the full description, every photo, amenities, days-on-market, view count and any sale history.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"A Hemnet listing URL, /bostad/<slug> path or slug — the `url` from a search result. A full https URL, the path or the bare slug all work.","on_invalid":"reject","example":"https://www.hemnet.se/bostad/lagenhet-2rum-s-t-knut-malmo-kommun-henrik-smithsgatan-10-21743412","aliases":["listing_url","path","detail_url","slug","id"]}],"returns":"listing{id, url, title, street_address, post_code, housing_form, tenure, asking_price, fee, square_meter_price, rooms, living_area_m2, land_area_m2, construction_year, energy_classification, description, days_on_hemnet, times_viewed, amenities[], sale_history[], photos[], agent{agency_name}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.hemnet.se/bostad/lagenhet-3rum-segevang-malmo-kommun-kronetorpsgatan-52a-21744904"}},{"name":"location","description":"Location resolver / autocomplete — map a free-text Swedish place name to Hemnet locations (city, municipality, county, district, postal area) with their ids. Use it to power a search box or to confirm the exact location a search will use.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text Swedish place to resolve — a city, municipality, county or district ('Göteborg', 'Vasastan', 'Lund').","on_invalid":"reject","example":"Göteborg","aliases":["q","input","location","city","area"]},{"name":"limit","type":"integer","required":false,"description":"Max suggestions to return (1-40).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":40}],"returns":"suggestions[]{id, name, parent_name, type} + resolved{id, name, type} + count + query","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Göteborg"}}]},{"name":"hepsiburada","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Hepsiburada API scraper — product detail, search, reviews, offers, categories & sellers on Turkey's leading marketplace (hepsiburada.com), prices in TRY","version":"0.2.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/hepsiburada/v1","spec_available":true,"actions":[{"name":"product/detail","description":"Full Hepsiburada product details by `url` or HB code (`sku`): title, brand, price, discount, images, rating, stock, seller (merchant), category, specifications, variants, top reviews, coupon/campaign badges, and all other_offers (every merchant selling the same product).","required_params":[],"optional_params":["url","sku","max_rotations"],"params":[{"name":"sku","type":"string","required":false,"description":"Hepsiburada product code (HB code) — the HBCV… token in the product URL (…-p-<code>). Take it from search results. Provide sku OR url.","on_invalid":"reject","example":"HBCV00004X9ZCK","aliases":["hb_code","id","product_id","code"]},{"name":"url","type":"string","required":false,"description":"Full Hepsiburada product URL — alternative to sku.","on_invalid":"reject","example":"https://www.hepsiburada.com/-p-HBCV00004X9ZCK","aliases":["product_url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–14, default 8 — leave unchanged for typical use).","on_invalid":"ignore","default":8,"minimum":1,"maximum":14}],"returns":"product{title, brand, price, currency=TRY, original_price, discount_rate, images[], rating, rating_count, in_stock, seller_name (merchant), merchant{}, category, specs[], variants[], top_reviews[], coupon (str|null — public coupon COUNT for this listing, e.g. '3 kupon fırsatı mevcut'; exact amounts are gated behind a logged-in wallet and not exposed), campaign (str|null — real Hepsiburada campaign badge text, e.g. 'Lufian satıcılı ürünlerde %20 indirim'), other_offers[]{merchant_name, price, merchant_rating, free_shipping, coupon_count, campaign}, offer_count}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.hepsiburada.com/-p-HBCV00004X9ZCK"}},{"name":"product/reviews","description":"Paginated customer reviews for a product by `sku` or `url`, in the order you ask for. `sort=newest` puts the most recently written reviews first and holds that order across pages, so you can poll a product for new reviews; without `sort` Hepsiburada returns its own default order, which is not chronological. Every page carries the honest totals — how many reviews exist, the full star histogram, the average computed from it, total_pages for your page_size, and how deep Hepsiburada actually lets you page. Note that Hepsiburada mixes written reviews with star-only ratings in the same list: rows carry `type` ('review' or 'rating') and `has_text` so you can keep only the ones with text. Up to 100 reviews per page. Reviewer names are published by Hepsiburada already masked (e.g. 'Ahmet K***') and returned as such; the row's own first name / surname / gender / birth date / avatar fields are returned as the source sends them (author_name, author_surname, author_gender, author_birth_date, author_profile_picture_url, author_is_influencer).","required_params":[],"optional_params":["sku","url","page","page_size","sort","max_rotations"],"params":[{"name":"sku","type":"string","required":false,"description":"Hepsiburada product code (HB code) — the HBCV… token in the product URL (…-p-<code>). Take it from search results. Provide sku OR url.","on_invalid":"reject","example":"HBCV00004X9ZCK","aliases":["hb_code","id","product_id","code"]},{"name":"url","type":"string","required":false,"description":"Full Hepsiburada product URL — alternative to sku.","on_invalid":"reject","example":"https://www.hepsiburada.com/-p-HBCV00004X9ZCK","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"Review page — 1-BASED (1, 2, 3…); summary.total_pages tells you how many exist.","on_invalid":"ignore","default":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1–100, default 10). summary.total_pages is computed for this page size.","on_invalid":"ignore","default":10,"minimum":1,"maximum":100,"aliases":["pageSize"]},{"name":"sort","type":"enum","required":false,"description":"Review ordering. Use `newest` to track the most recent reviews — the order holds across pages, so page 1 is always the freshest. `relevant` (the default) is Hepsiburada's own 'Varsayılan' order and is NOT chronological. Date ordering is day-resolution upstream: non-increasing by calendar day, unordered within a single day.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (most recent review at the top)"},{"value":"oldest","label":"Oldest first"},{"value":"helpful","label":"Most helpful first (Hepsiburada 'clap' count)"},{"value":"rating_desc","label":"Highest rating first"},{"value":"rating_asc","label":"Lowest rating first"},{"value":"relevant","label":"Hepsiburada's own default order"}],"default":"relevant"},{"name":"include_sibling_variants","type":"boolean","required":false,"description":"true (default) counts and returns reviews for the whole product group, exactly as the Hepsiburada page does; false restricts to this one variant (same colour/size). The two totals differ a lot — 25,480 vs 9,349 on the reference sku — so pick deliberately.","on_invalid":"ignore","default":true,"aliases":["include_siblings"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–14, default 8 — leave unchanged for typical use).","on_invalid":"ignore","default":8,"minimum":1,"maximum":14}],"returns":"ai_summary (Hepsiburada's own Turkish review digest, or null) + summary{average_rating, average_rating_source, total_rating_count (every approved review AND star-only rating — what this action pages through), total_comment_count (null — Hepsiburada does not publish how many carry written text), total_pages, page_size, rating_breakdown{5..1}, reachable_reviews, reachable_pages} + page, page_size, sort, include_sibling_variants + reviews[]{id, author (masked by the source), author_name, author_surname, author_gender, author_birth_date, author_profile_picture_url, author_is_influencer, rating, date, updated_at, body (null on a star-only rating), type ('review'|'rating'), has_text, verified_purchase, helpful_count, unhelpful_count, merchant, variant, keywords[], images[]} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"HBCV00004X9ZCK"}},{"name":"product/offers","description":"Every merchant listing (buybox + other sellers) for a product by `sku` or `url`: compare price, seller rating, shipping and stock across all sellers of the same item.","required_params":[],"optional_params":["sku","url","max_rotations"],"params":[{"name":"sku","type":"string","required":false,"description":"Hepsiburada product code (HB code) — the HBCV… token in the product URL (…-p-<code>). Take it from search results. Provide sku OR url.","on_invalid":"reject","example":"HBCV00004X9ZCK","aliases":["hb_code","id","product_id","code"]},{"name":"url","type":"string","required":false,"description":"Full Hepsiburada product URL — alternative to sku.","on_invalid":"reject","example":"https://www.hepsiburada.com/-p-HBCV00004X9ZCK","aliases":["product_url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–14, default 8 — leave unchanged for typical use).","on_invalid":"ignore","default":8,"minimum":1,"maximum":14}],"returns":"offers[]{merchant_name, merchant_url, price, original_price, discount_rate, currency=TRY, in_stock, quantity, free_shipping, fast_shipping, buybox_order, merchant_rating, merchant_rating_count, merchant_city, merchant_labels[]} (sorted by buybox order then price)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"HBCV00004X9ZCK"}},{"name":"search","description":"Search Hepsiburada products by keyword with optional sort and price/brand filters — returns results with SKU, title, brand, price, list price, rating, image and merchant. Results may be empty for very niche queries; try a broader keyword.","required_params":["query"],"optional_params":["page","sort","price_min","price_max","brand","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (Turkish keywords work best).","on_invalid":"reject","example":"laptop","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-BASED: 1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"sort","type":"string","required":false,"description":"Result ordering. One of: default, price_asc, price_desc, best_seller, most_reviewed, highest_rated, discount, newest.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Recommended (default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"best_seller","label":"Best sellers"},{"value":"most_reviewed","label":"Most reviewed"},{"value":"highest_rated","label":"Highest rated"},{"value":"discount","label":"Biggest discount"},{"value":"newest","label":"Newest first"}],"default":"default","aliases":["siralama"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price filter in TRY (optional).","on_invalid":"ignore","example":5000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price filter in TRY (optional).","on_invalid":"ignore","example":15000,"minimum":0,"aliases":["max_price"]},{"name":"brand","type":"string","required":false,"description":"Brand filter — the brand slug, lowercase (e.g. 'asus', 'apple'). Optional.","on_invalid":"ignore","example":"asus","aliases":["markalar"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–14, default 8 — leave unchanged for typical use).","on_invalid":"ignore","default":8,"minimum":1,"maximum":14}],"returns":"results[]{sku, title, brand, url, price, original_price, discount_rate, rating, rating_count, image, merchant, installment_count}; render flag ('ssr' = full results; 'skeleton' = try a broader keyword); meta.pagination for paging","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"laptop"}},{"name":"category","description":"Browse a Hepsiburada category page by its path (`category` = '<slug>-c-<id>', e.g. 'laptop-notebook-dizustu-bilgisayarlar-c-98') with optional sort/price filters and pagination. Use it to list everything in a category, not just a keyword match.","required_params":["category"],"optional_params":["page","sort","price_min","price_max","brand","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"Category path '<slug>-c-<id>' or a full category URL. Take the …-c-<id> path from a product's breadcrumb / category link.","on_invalid":"reject","example":"laptop-notebook-dizustu-bilgisayarlar-c-98","aliases":["category_url","cat"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-BASED).","on_invalid":"ignore","default":1,"minimum":1},{"name":"sort","type":"string","required":false,"description":"Result ordering. One of: default, price_asc, price_desc, best_seller, most_reviewed, highest_rated, discount, newest.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Recommended (default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"best_seller","label":"Best sellers"},{"value":"most_reviewed","label":"Most reviewed"},{"value":"highest_rated","label":"Highest rated"},{"value":"discount","label":"Biggest discount"},{"value":"newest","label":"Newest first"}],"default":"default","aliases":["siralama"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price filter in TRY (optional).","on_invalid":"ignore","example":5000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price filter in TRY (optional).","on_invalid":"ignore","example":15000,"minimum":0,"aliases":["max_price"]},{"name":"brand","type":"string","required":false,"description":"Brand filter — the brand slug, lowercase (e.g. 'asus', 'apple'). Optional.","on_invalid":"ignore","example":"asus","aliases":["markalar"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–14, default 8 — leave unchanged for typical use).","on_invalid":"ignore","default":8,"minimum":1,"maximum":14}],"returns":"results[]{sku, title, brand, url, price, original_price, discount_rate, rating, image, merchant} + category_id (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"laptop-notebook-dizustu-bilgisayarlar-c-98"}},{"name":"seller","description":"Hepsiburada merchant (mağaza) profile + its product catalogue by store slug (`seller`, e.g. 'jollyshop') or full /magaza/<slug> URL. Returns seller info (name, rating, total product count) and a paginated list of the seller's products.","required_params":["seller"],"optional_params":["page","sort","price_min","price_max","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Store slug (the part after /magaza/, e.g. 'jollyshop') or a full https://www.hepsiburada.com/magaza/<slug> URL.","on_invalid":"reject","example":"jollyshop","aliases":["merchant","slug","store"]},{"name":"page","type":"integer","required":false,"description":"Product page within the store (1-BASED).","on_invalid":"ignore","default":1,"minimum":1},{"name":"sort","type":"string","required":false,"description":"Result ordering. One of: default, price_asc, price_desc, best_seller, most_reviewed, highest_rated, discount, newest.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Recommended (default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"best_seller","label":"Best sellers"},{"value":"most_reviewed","label":"Most reviewed"},{"value":"highest_rated","label":"Highest rated"},{"value":"discount","label":"Biggest discount"},{"value":"newest","label":"Newest first"}],"default":"default","aliases":["siralama"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price filter in TRY (optional).","on_invalid":"ignore","example":5000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price filter in TRY (optional).","on_invalid":"ignore","example":15000,"minimum":0,"aliases":["max_price"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1–14, default 8 — leave unchanged for typical use).","on_invalid":"ignore","default":8,"minimum":1,"maximum":14}],"returns":"seller{merchant_id, name, url, rating, rating_count, total_product_count, official, city} + products[]{sku, title, price, image, ...} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":3},"example_params":{"seller":"jollyshop"}}]},{"name":"heureka","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Heureka API scraper — Czech & Slovak price comparison: search products, read the full product record with Heureka's parameter sheet, and get every shop's offer (price, shop score, stock, delivery) for one product on heureka.cz / heureka.sk. Prices in CZK or EUR. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/heureka/v1","spec_available":true,"actions":[{"name":"search","description":"Search Heureka by keyword and get the matching products: Heureka product id and address, title, image, the PRICE BAND across all shops (both ends when Heureka prints both — see `price_kind`), how many shops sell it, the customer score and review count, the category, and how many colour/size variants the card lists. Feed the returned `product` or `url` straight into `product/offers` or `product/detail` to get every shop's price for that product. Check `row_type` first: only rows with row_type 'product' carry an address, and the other three kinds return `product` as null rather than a handle that would not work.","required_params":["query"],"optional_params":["page","sort","market"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for on Heureka. Czech (or Slovak, with market=sk) keywords match best, but brands and model numbers work directly — 'iphone 15', 'bosch vrtacka', 'dyson v15'. Heureka matches loosely, so a two-word query also returns accessories for the product, not only the product.","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-BASED (1, 2, 3…). 24 products per page. Heureka publishes no result total, so `total_results` is null by design; `last_page` in the response is the highest page its own pager offers, and `meta.pagination.has_more` tells you whether to ask for the next one.","on_invalid":"ignore","default":1,"minimum":1,"maximum":1000},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Only orderings heureka.cz actually honours are accepted; anything else is rejected rather than silently ignored, so you never receive a relevance list believing it was sorted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Heureka's own recommended order (default)"},{"value":"price_asc","label":"Cheapest first, by each product's lowest offer"},{"value":"price_desc","label":"Most expensive first"},{"value":"most_reviewed","label":"Most customer reviews first"}],"default":"relevance"},{"name":"market","type":"enum","required":false,"description":"Which Heureka storefront to read. The two are separate catalogues with separate shops and currencies: a product URL from one market is not valid in the other.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"heureka.cz — Czechia, prices in CZK"},{"value":"sk","label":"heureka.sk — Slovakia, prices in EUR"}],"default":"cz","example":"cz"}],"returns":"results[]{row_type ('product' = a Heureka product page with a shop comparison behind it, the only kind with a usable `product` address | 'shop_offer' = a single merchant's listing with no product page, so `product` and `offer_count` are null | 'promoted' = a promoted product whose link is a signed click-through, so it has a price, a score and an offer_count but no address Heureka publishes, and `product` is null | 'article' = an editorial guide, not an offer), product_id, product_uuid, product (category/slug shorthand), title, url, image, price_min, price_max, price_min_display, price_max_display, price_display, price_kind ('band' = both ends real | 'from' = price_max is null because Heureka printed only a floor | 'exact' = one offer, min == max), price_is_single_offer, currency, offer_count (how many shops sell it), offer_count_display, rating_percent (Heureka's 0-100 score), rating (the same score as 0-5 stars), rating_scale, review_count, category, category_url, variant_count_listed, badges[]}, count, product_count, shop_offer_count, unreadable_tiles, query_heading, last_page, total_results (ALWAYS null — Heureka publishes no result count), market, currency (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone 15"}},{"name":"product/detail","description":"The full Heureka product record for one product address: title, brand, description, image gallery, the price BAND across all shops (price_min and price_max, both from Heureka's own AggregateOffer) with its offer count, the customer score and review count, the category breadcrumb with URLs, the complete Heureka parameter sheet, and the sibling variants of the product.","required_params":["product"],"optional_params":["market"],"params":[{"name":"product","type":"string","required":true,"description":"The product address, either as the full Heureka URL (https://mobilni-telefony.heureka.cz/apple-iphone-15-128gb-black/) or as the 'category/slug' shorthand (mobilni-telefony/apple-iphone-15-128gb-black). Every `search` row hands you both, as `url` and `product`. A bare slug is not accepted: www.heureka.cz/<slug>/ answers 404 — the category subdomain is part of the address, and guessing it would return a confident wrong product.","on_invalid":"reject","example":"mobilni-telefony/apple-iphone-15-128gb-black","aliases":["product_url","url","id","product_id"]},{"name":"market","type":"enum","required":false,"description":"Which Heureka storefront to read. The two are separate catalogues with separate shops and currencies: a product URL from one market is not valid in the other.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"heureka.cz — Czechia, prices in CZK"},{"value":"sk","label":"heureka.sk — Slovakia, prices in EUR"}],"default":"cz","example":"cz"}],"returns":"product{product (shorthand), title, url, brand, description, category, breadcrumb[]{name, url}, images[], price_min, price_max, price_min_display, price_max_display, price_kind, currency, offer_count, availability, rating_percent, rating (0-5), rating_scale, rating_count, review_count, specs[]{name, value}, variants[]{name, url}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product":"mobilni-telefony/apple-iphone-15-128gb-black"}},{"name":"product/offers","description":"Every shop offer Heureka lists for one product — the price comparison itself. One row per merchant: shop name, Heureka shop score and how many ratings it rests on, the price (numeric and formatted), the stock line, the delivery line and whether delivery is free, the merchant's own listing title, and a working click-through. Rows are de-duplicated (Heureka repeats promoted offers above the list) and ordered cheapest first, with the product's own price band alongside.","required_params":["product"],"optional_params":["market"],"params":[{"name":"product","type":"string","required":true,"description":"The product address, either as the full Heureka URL (https://mobilni-telefony.heureka.cz/apple-iphone-15-128gb-black/) or as the 'category/slug' shorthand (mobilni-telefony/apple-iphone-15-128gb-black). Every `search` row hands you both, as `url` and `product`. A bare slug is not accepted: www.heureka.cz/<slug>/ answers 404 — the category subdomain is part of the address, and guessing it would return a confident wrong product.","on_invalid":"reject","example":"mobilni-telefony/apple-iphone-15-128gb-black","aliases":["product_url","url","id","product_id"]},{"name":"market","type":"enum","required":false,"description":"Which Heureka storefront to read. The two are separate catalogues with separate shops and currencies: a product URL from one market is not valid in the other.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"heureka.cz — Czechia, prices in CZK"},{"value":"sk","label":"heureka.sk — Slovakia, prices in EUR"}],"default":"cz","example":"cz"}],"returns":"product{product, title, url, brand, price_min, price_max, currency, offer_count (Heureka's own published count), rating, review_count} + offers[]{position, offer_id, seller{name, domain, rating_percent, rating (0-5, null for a shop Heureka has not scored), rating_scale, rating_count, logo}, price, price_display, currency, availability, delivery, free_delivery, offer_title, offer_url} + count, cheapest, most_expensive, offer_count_published","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"product":"mobilni-telefony/apple-iphone-15-128gb-black"}}]},{"name":"hibid","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"HiBid — US & Canada auction aggregator (lots, bids, sales, houses)","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/hibid/v1","spec_available":true,"actions":[{"name":"search","description":"Search HiBid's whole catalogue of live and timed online auction lots across thousands of independent North-American auction houses, or its closed archive. Every row names the auction house it belongs to — name, town, state, country, phone, e-mail and its own website — plus the sale it sits in and the HiBid lot URL, so any lot can be traced back to the house that is selling it. Live bidding state comes with it: current bid, number of bids, next bid required, buy-now, reserve status and the lot's own closing instant in UTC. Every filter is optional, but pass at least one of `query`, `category_id`, `auction_id`, `lot_ids`, `state` or `zip` — with none of them you get the newest slice of the entire catalogue.","required_params":[],"optional_params":["query","status","archive","lot_type","sort","category_id","auction_id","lot_ids","state","country","zip","radius_miles","shipping_offered","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the lot title and description (e.g. 'rolex', 'john deere 4020', 'morgan silver dollar'). Optional: leave it out and narrow with category_id, auction_id or state instead.","on_invalid":"reject","example":"rolex","aliases":["q","searchText","keywords","search","term","text"]},{"name":"status","type":"enum","required":false,"description":"Which lots to return. 'open' = still taking bids, 'closed' = bidding over, 'all' = both. 'hot', 'top' and 'featured' are HiBid's own selections.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every lot the query matches, open or closed"},{"value":"open","label":"Lots still taking bids"},{"value":"closing","label":"Lots whose bidding closes soonest"},{"value":"closed","label":"Lots whose bidding has ended"},{"value":"hot","label":"HiBid's own 'hot' selection (its most-watched lots)"},{"value":"featured","label":"Lots the auction house paid to feature"},{"value":"top","label":"HiBid's own 'top lots' selection"}],"default":"open","example":"open","aliases":["state","lot_status","phase"]},{"name":"archive","type":"boolean","required":false,"description":"Search HiBid's closed archive instead of the current catalogue. The archive answers at most 1,000 lots per query (the live surface answers 10,000) and is measurably slower.","on_invalid":"reject","default":false,"example":false,"aliases":["isArchive","past","sold_archive"]},{"name":"lot_type","type":"enum","required":false,"description":"Sale format. 'online' = timed online-only, 'webcast' = live webcast/simulcast, 'listing' = catalogue listing with no HiBid bidding.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any sale format"},{"value":"biddable","label":"Lots you could bid on through HiBid"},{"value":"online","label":"Timed online-only lots"},{"value":"webcast","label":"Lots in a live webcast/simulcast sale"},{"value":"absentee","label":"Lots taking absentee bids only"},{"value":"listing","label":"Catalogue listings with no HiBid bidding"}],"default":"all","example":"online","aliases":["filter","format","sale_type"]},{"name":"sort","type":"enum","required":false,"description":"Row order. Keep the default when you page: HiBid returns a RANDOM SAMPLE when no order is given, so an unordered 'page 2' is not the second page of anything.","on_invalid":"reject","allowed_values":[{"value":"lot_number","label":"By the house's lot number — the stable order, and the default"},{"value":"newest","label":"Most recently added to HiBid first"},{"value":"ending_soonest","label":"Closing soonest first"},{"value":"sale_order","label":"By the order the lots run in the sale"},{"value":"bid_high_first","label":"Highest current bid first"},{"value":"bid_low_first","label":"Lowest current bid first"},{"value":"most_bids","label":"Most bids first"},{"value":"fewest_bids","label":"Fewest bids first"},{"value":"most_viewed","label":"Most-viewed first"},{"value":"most_watched","label":"Most-watched first"},{"value":"last_bid","label":"Most recently bid on first"},{"value":"hot_rank","label":"HiBid's own 'hot' ranking"}],"default":"lot_number","example":"ending_soonest","aliases":["sortOrder","order","order_by","sort_by"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one HiBid category id. Call the `categories` action for the tree (18 roots, 1,135 nodes measured). An id HiBid does not know is rejected here, because the site silently ignores it and answers with the whole catalogue.","on_invalid":"reject","example":40118,"minimum":1,"aliases":["category","cat","categoryId"]},{"name":"auction_id","type":"integer","required":false,"description":"Restrict to one sale (auction event) by its HiBid id — this is also how you read every lot of one auction house, since HiBid publishes no house filter on lots. Get the ids from the `auctions` action.","on_invalid":"reject","example":774332,"minimum":1,"aliases":["auctionId","event_id","sale_id","catalog_id"]},{"name":"lot_ids","type":"string","required":false,"description":"Up to 100 HiBid lot ids, comma-separated — returns exactly those lots in one call instead of one `detail` call each. Ids come from `search`; the auction house's own item number does not work here.","on_invalid":"reject","example":"320966322,314757448","aliases":["eventItemIds","ids","item_ids"]},{"name":"state","type":"string","required":false,"description":"US state / Canadian province, TWO-LETTER CODE ONLY (TX, OH, BC). HiBid answers zero rows for a spelled-out name, so a name is rejected here with the reason.","on_invalid":"reject","example":"TX","value_pattern":"[A-Za-z]{2}","aliases":["province","region","state_code"]},{"name":"country","type":"enum","required":false,"description":"Country of the auction house. Pass it as HiBid's rows spell it. 'USA', 'US' and 'America' are accepted and mapped onto 'United States', because sending 'USA' straight through loses about 90% of the rows without any error (measured: 'United States' 21 lots, 'USA' 2, on a 24-lot query).","on_invalid":"reject","allowed_values":[{"value":"United States","label":"The United States"},{"value":"Canada","label":"Canada"}],"example":"United States","aliases":["countryName","country_name","cc"]},{"name":"zip","type":"string","required":false,"description":"US/Canadian postcode to search around. Pair it with `radius_miles`.","on_invalid":"reject","example":"77573","aliases":["postal_code","zipcode","postcode"]},{"name":"radius_miles","type":"integer","required":false,"description":"Miles around `zip`. Ignored unless `zip` is set.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":500,"aliases":["miles","radius","distance"]},{"name":"shipping_offered","type":"boolean","required":false,"description":"Only lots whose auction house offers shipping.","on_invalid":"reject","default":false,"example":true,"aliases":["shippingOffered","ships","shipping"]},{"name":"page","type":"integer","required":false,"description":"1-based page. HiBid serves at most 10,000 lots per query (1,000 on the archive), so the last reachable page is that cap divided by max_results.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000,"aliases":["pageNumber","p"]},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-100. HiBid's own ceiling is 100: asking for 200 returns 100.","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["pageLength","limit","count","page_size","per_page","size"]}],"returns":"{query, status, archive, sort, filters, total_available, total_is_capped, page, page_count, duplicate_ids_in_page, currencies, results[]} — each result carries lot_id, url, title, description, lot_number, quantity, estimate, currency, current_bid, bid_count, next_bid_amount, price_realized, price_realized_note, reserve_met, state, is_closed, is_sold, closes_at, closes_at_source, time_left_seconds, images, picture_count, shipping_offered, auction{...} and auction_house{...}.","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex","max_results":10}},{"name":"detail","description":"One lot in full: every picture, the full category path, the lot's live bidding state, and the sale's complete terms — buyer's premium, bid increments, payment, shipping and pickup, preview and checkout dates, terms and conditions — together with the auction house's own contact details and website. Add `include_bids` for the public bid ladder in the same call. A lot whose bidding has closed is a normal answer, not an error; a lot the house has hidden or deleted comes back as NOT_FOUND and is not retried.","required_params":["lot"],"optional_params":["include_bids"],"params":[{"name":"lot","type":"string","required":true,"description":"The numeric HiBid lot id, or any hibid.com lot URL such as https://hibid.com/lot/320966322. The auction house's own item number is NOT accepted — HiBid answers 'hidden' for it.","on_invalid":"reject","example":"320966322","value_pattern":"\\d{3,}|https?://.*hibid\\.com/lot/\\d+.*","aliases":["lot_id","id","item","url","link","lotId"]},{"name":"include_bids","type":"boolean","required":false,"description":"Also fetch the lot's public bid ladder (one extra upstream call, skipped automatically when the call budget is nearly spent and then counted in meta).","on_invalid":"reject","default":true,"example":true,"aliases":["bids","with_bids","bid_history"]}],"returns":"One lot object — the search row plus pictures[], category_path[], auction.terms{...}, auction.bid_increments[] and (with include_bids) bids[] {amount, bidder, bids_at_this_amount, placed_at_source}.","cacheable":true,"cache_ttl_seconds":30,"pricing":{"mode":"flat","credits":1},"example_params":{"lot":"320966322"}},{"name":"bids","description":"The public bid ladder of one lot: each amount, how many bids were placed at it, the timestamp HiBid prints and the bidder name HiBid itself masks. `bid_count` on the lot counts BIDS, this list counts AMOUNTS, so the two differ on purpose (measured: bid_count 16 against 3 ladder rows).","required_params":["lot"],"optional_params":[],"params":[{"name":"lot","type":"string","required":true,"description":"The numeric HiBid lot id or a hibid.com lot URL.","on_invalid":"reject","example":"320966322","value_pattern":"\\d{3,}|https?://.*hibid\\.com/lot/\\d+.*","aliases":["lot_id","id","item","url","link","lotId"]}],"returns":"{lot_id, url, title, lot_number, currency, bid_count, highest_bid, disclaimer, bids[]} — bids newest-amount first.","cacheable":true,"cache_ttl_seconds":30,"pricing":{"mode":"flat","credits":1},"example_params":{"lot":"320966322"}},{"name":"auctions","description":"Search the SALES rather than the lots: which auctions are running or coming up, how many lots each holds, when bidding opens and closes, where the sale is, what the buyer's premium is, and which auction house is running it. This is also the way to work house-by-house, because the lot search publishes no house filter: take `auction_id` from here into `search`.","required_params":[],"optional_params":["query","status","lot_type","auction_sort","category_id","state","country","zip","radius_miles","shipping_offered","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the lot title and description (e.g. 'rolex', 'john deere 4020', 'morgan silver dollar'). Optional: leave it out and narrow with category_id, auction_id or state instead.","on_invalid":"reject","example":"rolex","aliases":["q","searchText","keywords","search","term","text"]},{"name":"status","type":"enum","required":false,"description":"Which lots to return. 'open' = still taking bids, 'closed' = bidding over, 'all' = both. 'hot', 'top' and 'featured' are HiBid's own selections.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every lot the query matches, open or closed"},{"value":"open","label":"Lots still taking bids"},{"value":"closing","label":"Lots whose bidding closes soonest"},{"value":"closed","label":"Lots whose bidding has ended"},{"value":"hot","label":"HiBid's own 'hot' selection (its most-watched lots)"},{"value":"featured","label":"Lots the auction house paid to feature"},{"value":"top","label":"HiBid's own 'top lots' selection"}],"default":"open","example":"open","aliases":["state","lot_status","phase"]},{"name":"lot_type","type":"enum","required":false,"description":"Sale format. 'online' = timed online-only, 'webcast' = live webcast/simulcast, 'listing' = catalogue listing with no HiBid bidding.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any sale format"},{"value":"biddable","label":"Lots you could bid on through HiBid"},{"value":"online","label":"Timed online-only lots"},{"value":"webcast","label":"Lots in a live webcast/simulcast sale"},{"value":"absentee","label":"Lots taking absentee bids only"},{"value":"listing","label":"Catalogue listings with no HiBid bidding"}],"default":"all","example":"online","aliases":["filter","format","sale_type"]},{"name":"auction_sort","type":"enum","required":false,"description":"Sale order. 'nearest' needs `zip`.","on_invalid":"reject","allowed_values":[{"value":"nearest","label":"Nearest to the postcode you pass first"},{"value":"default","label":"HiBid's own default sale order"}],"default":"default","example":"nearest","aliases":["sortOrder","order","sort"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one HiBid category id. Call the `categories` action for the tree (18 roots, 1,135 nodes measured). An id HiBid does not know is rejected here, because the site silently ignores it and answers with the whole catalogue.","on_invalid":"reject","example":40118,"minimum":1,"aliases":["category","cat","categoryId"]},{"name":"state","type":"string","required":false,"description":"US state / Canadian province, TWO-LETTER CODE ONLY (TX, OH, BC). HiBid answers zero rows for a spelled-out name, so a name is rejected here with the reason.","on_invalid":"reject","example":"TX","value_pattern":"[A-Za-z]{2}","aliases":["province","region","state_code"]},{"name":"country","type":"enum","required":false,"description":"Country of the auction house. Pass it as HiBid's rows spell it. 'USA', 'US' and 'America' are accepted and mapped onto 'United States', because sending 'USA' straight through loses about 90% of the rows without any error (measured: 'United States' 21 lots, 'USA' 2, on a 24-lot query).","on_invalid":"reject","allowed_values":[{"value":"United States","label":"The United States"},{"value":"Canada","label":"Canada"}],"example":"United States","aliases":["countryName","country_name","cc"]},{"name":"zip","type":"string","required":false,"description":"US/Canadian postcode to search around. Pair it with `radius_miles`.","on_invalid":"reject","example":"77573","aliases":["postal_code","zipcode","postcode"]},{"name":"radius_miles","type":"integer","required":false,"description":"Miles around `zip`. Ignored unless `zip` is set.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":500,"aliases":["miles","radius","distance"]},{"name":"shipping_offered","type":"boolean","required":false,"description":"Only lots whose auction house offers shipping.","on_invalid":"reject","default":false,"example":true,"aliases":["shippingOffered","ships","shipping"]},{"name":"page","type":"integer","required":false,"description":"1-based page. HiBid serves at most 10,000 lots per query (1,000 on the archive), so the last reachable page is that cap divided by max_results.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000,"aliases":["pageNumber","p"]},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-100. HiBid's own ceiling is 100: asking for 200 returns 100.","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["pageLength","limit","count","page_size","per_page","size"]}],"returns":"{query, status, total_available, total_is_capped, page, page_count, results[]} — each with auction_id, url, catalog_url, name, lot_count, matching_lot_count, currency, bid_open_at_local, bid_close_at_local, location{}, buyer_premium, terms{}, auction_house{}.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"estate","max_results":10}},{"name":"houses","description":"HiBid's auction-house directory: id, trading name, street, town, state/province, postcode and country. Search by name fragment or by state. The ids are the ones that appear as `auction_house.id` on every lot.","required_params":[],"optional_params":["name","state","house_sort","page","max_results"],"params":[{"name":"name","type":"string","required":false,"description":"Name fragment, e.g. 'estate'. Matched as a wildcard.","on_invalid":"reject","example":"estate","aliases":["query","q","house","auctioneer"]},{"name":"state","type":"string","required":false,"description":"US state / Canadian province, TWO-LETTER CODE ONLY (TX, OH, BC). HiBid answers zero rows for a spelled-out name, so a name is rejected here with the reason.","on_invalid":"reject","example":"TX","value_pattern":"[A-Za-z]{2}","aliases":["province","region","state_code"]},{"name":"house_sort","type":"enum","required":false,"description":"Directory order.","on_invalid":"reject","allowed_values":[{"value":"name","label":"Alphabetical by auction-house name"},{"value":"location","label":"Grouped by location"}],"default":"name","example":"name","aliases":["sortOrder","sort","order"]},{"name":"page","type":"integer","required":false,"description":"1-based page. HiBid serves at most 10,000 lots per query (1,000 on the archive), so the last reachable page is that cap divided by max_results.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000,"aliases":["pageNumber","p"]},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-100. HiBid's own ceiling is 100: asking for 200 returns 100.","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["pageLength","limit","count","page_size","per_page","size"]}],"returns":"{name, state, total_available, page, page_count, results[]} — each {house_id, name, street, city, state, postal_code, country}.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"estate","max_results":10}},{"name":"categories","description":"HiBid's full category tree — the ids the `category_id` filter takes, with their parents, children and URL paths. Measured: 18 roots, 1,135 nodes.","required_params":[],"optional_params":[],"params":[],"returns":"{root_count, node_count, categories[]} with {id, name, full_name, url_path, parent_id, children[]} per node.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"hm","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"H&M API scraper — hm.com in 41 markets: search products, read the full article with the regular, sale and H&M member prices kept apart, every colour with its own prices, sizes in stock and few-left flags, composition, materials, care and country of production, ratings; browse categories, suggestions and live size availability. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/hm/v1","spec_available":true,"actions":[{"name":"search","description":"Search H&M in any of its 41 markets by keyword. Each product comes with the price a shopper pays, the regular price when a sale price is running, the H&M member price kept separate, currency, every colour, sizes with in-stock flags, markers and availability. Sort by newest or price; filter by department, sale, colour or material. Misspellings H&M corrects are reported in matched_query.","required_params":["query"],"optional_params":["country","language","page","page_size","sort","department","sale_only","color","material","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Words a shopper would type on H&M, in the market's language.","on_invalid":"reject","example":"linen shirt","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"The H&M market. Prices, currency, language and assortment follow it. A product URL's own market is used when this is not given.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"fr","label":"France (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"gr","label":"Greece (EUR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ro","label":"Romania (RON)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"ua","label":"Ukraine (UAH)"},{"value":"tr","label":"Türkiye (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"hk","label":"Hong Kong (HKD)"},{"value":"asia1","label":"H&M asia1 site (HKD)"},{"value":"asia3","label":"H&M asia3 site (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"au","label":"Australia (AUD)"},{"value":"eur","label":"H&M Europe site (English, EUR)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Only for markets with several languages: ca (en, fr), ch (de, fr, it), be (nl, fr), fi (fi, sv), hk / asia1 / asia3 (en, zh). Defaults to the market's first language.","on_invalid":"reject","allowed_values":[{"value":"bg","label":"bg"},{"value":"cs","label":"cs"},{"value":"da","label":"da"},{"value":"de","label":"de"},{"value":"el","label":"el"},{"value":"en","label":"en"},{"value":"es","label":"es"},{"value":"fi","label":"fi"},{"value":"fr","label":"fr"},{"value":"he","label":"he"},{"value":"hu","label":"hu"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"nl","label":"nl"},{"value":"no","label":"no"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"},{"value":"ro","label":"ro"},{"value":"sk","label":"sk"},{"value":"sr","label":"sr"},{"value":"sv","label":"sv"},{"value":"tr","label":"tr"},{"value":"uk","label":"uk"},{"value":"vi","label":"vi"},{"value":"zh","label":"zh"}],"example":"fr"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page (H&M's own page shows 36; the service allows up to 72).","on_invalid":"reject","default":36,"minimum":1,"maximum":72},{"name":"sort","type":"enum","required":false,"description":"H&M's own sort orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"New"},{"value":"price_asc","label":"Lowest price"},{"value":"price_desc","label":"Highest price"}],"default":"relevance","example":"price_asc"},{"name":"department","type":"string","required":false,"description":"Only one department, by the id `filters_available.departments` lists (ladies_all, men_all, kids_all, sale, …).","on_invalid":"reject","example":"ladies_all"},{"name":"sale_only","type":"boolean","required":false,"description":"true: only products with a sale (red) price.","on_invalid":"ignore","default":false},{"name":"color","type":"string","required":false,"description":"Only one colour, by the id `filters_available.colors` lists (black_000000).","on_invalid":"reject","example":"black_000000"},{"name":"material","type":"string","required":false,"description":"Only one material, spelled as `filters_available.materials` lists it.","on_invalid":"reject","example":"Linen"},{"name":"max_rotations","type":"integer","required":false,"description":"Attempts per upstream request before giving up (each on a fresh exit).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{article_code, product_code, name, brand, url, image, model_image, images[], price, regular_price, on_sale, discount_percent, member_price, price_formatted, price_range{min, max}, currency, color_name, color_hex, color_shades[], colors[]{article_code, color_name, hex, url, image}, color_count, sizes[]{size_code, label, in_stock}, sizes_in_stock, availability, coming_soon, online, pre_shopping, new_arrival, multipack, external_brand, markers[]{text, type}, main_category, has_video}, count, page, page_size, total_results, total_pages, has_more, page_out_of_range, country, language, locale, currency, query, matched_query, did_you_mean[], related_searches[], query_blocked, sort_applied, filters_applied{}, filters_available{departments[], colors[], materials[], sale{}, price_range{}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dress"}},{"name":"product/detail","description":"The full H&M article by article code, product code or URL: name, brand, category and breadcrumb, description and details, the price with the regular price and discount on sale, the member price apart, H&M's legal price note, currency, colour, images, every size with in-stock and few-left flags, composition per garment part, preferred materials, recycled share, country of production, care instructions, model height and size worn, rating and review count with the page's review sample, and every other colour of the product with its own prices and sizes.","required_params":["article_code"],"optional_params":["country","language","max_rotations"],"params":[{"name":"article_code","type":"string","required":true,"description":"An H&M article code (10 digits = product + colour, as in a product URL), a 7-digit product code (resolved to its default colour) or an hm.com product URL.","on_invalid":"reject","example":"1323075003","aliases":["product_id","id","url","product_code"]},{"name":"country","type":"enum","required":false,"description":"The H&M market. Prices, currency, language and assortment follow it. A product URL's own market is used when this is not given.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"fr","label":"France (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"gr","label":"Greece (EUR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ro","label":"Romania (RON)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"ua","label":"Ukraine (UAH)"},{"value":"tr","label":"Türkiye (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"hk","label":"Hong Kong (HKD)"},{"value":"asia1","label":"H&M asia1 site (HKD)"},{"value":"asia3","label":"H&M asia3 site (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"au","label":"Australia (AUD)"},{"value":"eur","label":"H&M Europe site (English, EUR)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Only for markets with several languages: ca (en, fr), ch (de, fr, it), be (nl, fr), fi (fi, sv), hk / asia1 / asia3 (en, zh). Defaults to the market's first language.","on_invalid":"reject","allowed_values":[{"value":"bg","label":"bg"},{"value":"cs","label":"cs"},{"value":"da","label":"da"},{"value":"de","label":"de"},{"value":"el","label":"el"},{"value":"en","label":"en"},{"value":"es","label":"es"},{"value":"fi","label":"fi"},{"value":"fr","label":"fr"},{"value":"he","label":"he"},{"value":"hu","label":"hu"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"nl","label":"nl"},{"value":"no","label":"no"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"},{"value":"ro","label":"ro"},{"value":"sk","label":"sk"},{"value":"sr","label":"sr"},{"value":"sv","label":"sv"},{"value":"tr","label":"tr"},{"value":"uk","label":"uk"},{"value":"vi","label":"vi"},{"value":"zh","label":"zh"}],"example":"fr"},{"name":"max_rotations","type":"integer","required":false,"description":"Attempts per upstream request before giving up (each on a fresh exit).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{article_code, product_code, name, brand, url, category, product_type, main_category, breadcrumb[]{name, url}, audience, description, details[], attributes{}, concept[], price, regular_price, on_sale, discount_percent, member_price, price_type ('sale'|'member'|null), price_note, currency, color{name, hex, color_code}, images[]{url, type, alt}, sizes[]{size_code, size, label, in_stock, few_left}, sizes_in_stock, available, composition[]{part, materials[]{name, percent}}, composition_text[], preferred_materials[]{name, percent}, material_details[]{name, description}, recycled_materials_percent, country_of_production[], care_instructions[], model_height, model_size_worn, coming_soon, new_arrival, in_store_assortment, markers[], rating, review_count, rating_scale, reviews_sample[]{rating, text, date, dimensions[]}, variants[]{article_code, color_name, hex, color_code, url, image, price, regular_price, on_sale, discount_percent, member_price, price_type, price_note, sizes[], sizes_in_stock, available, coming_soon, new_arrival}, variant_count, delivery_note, availability_source}, country, language, locale","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"article_code":"1323075003","country":"fr"}},{"name":"category","description":"Every product on one H&M category page (a department, a product type, a sale page), paged and sorted, with the same rows as search. Pass the category URL or path, or the category_id + page_id a previous call returned.","required_params":[],"optional_params":["category","category_id","page_id","country","language","page","page_size","sort","max_rotations"],"params":[{"name":"category","type":"string","required":false,"description":"An H&M category page: its URL or its path (/ladies/shop-by-product/dresses.html). `breadcrumb` on any product lists them.","on_invalid":"reject","example":"https://www2.hm.com/en_gb/ladies/shop-by-product/dresses.html","aliases":["category_url","category_path"]},{"name":"category_id","type":"string","required":false,"description":"With page_id: the listing ids a previous category call returned (skips reading the category page).","on_invalid":"reject","example":"LADIES_SHOPBYPRODUCT : DRESSES_DRESSES : VIEWALL_VIEW_ALL"},{"name":"page_id","type":"string","required":false,"description":"With category_id: the listing ids a previous category call returned.","on_invalid":"reject","example":"/ladies/shop-by-product/dresses"},{"name":"country","type":"enum","required":false,"description":"The H&M market. Prices, currency, language and assortment follow it. A product URL's own market is used when this is not given.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"fr","label":"France (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"gr","label":"Greece (EUR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ro","label":"Romania (RON)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"ua","label":"Ukraine (UAH)"},{"value":"tr","label":"Türkiye (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"hk","label":"Hong Kong (HKD)"},{"value":"asia1","label":"H&M asia1 site (HKD)"},{"value":"asia3","label":"H&M asia3 site (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"au","label":"Australia (AUD)"},{"value":"eur","label":"H&M Europe site (English, EUR)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Only for markets with several languages: ca (en, fr), ch (de, fr, it), be (nl, fr), fi (fi, sv), hk / asia1 / asia3 (en, zh). Defaults to the market's first language.","on_invalid":"reject","allowed_values":[{"value":"bg","label":"bg"},{"value":"cs","label":"cs"},{"value":"da","label":"da"},{"value":"de","label":"de"},{"value":"el","label":"el"},{"value":"en","label":"en"},{"value":"es","label":"es"},{"value":"fi","label":"fi"},{"value":"fr","label":"fr"},{"value":"he","label":"he"},{"value":"hu","label":"hu"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"nl","label":"nl"},{"value":"no","label":"no"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"},{"value":"ro","label":"ro"},{"value":"sk","label":"sk"},{"value":"sr","label":"sr"},{"value":"sv","label":"sv"},{"value":"tr","label":"tr"},{"value":"uk","label":"uk"},{"value":"vi","label":"vi"},{"value":"zh","label":"zh"}],"example":"fr"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page (H&M's own page shows 36; the service allows up to 72).","on_invalid":"reject","default":36,"minimum":1,"maximum":72},{"name":"sort","type":"enum","required":false,"description":"H&M's own sort orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"New"},{"value":"price_asc","label":"Lowest price"},{"value":"price_desc","label":"Highest price"}],"default":"relevance","example":"price_asc"},{"name":"max_rotations","type":"integer","required":false,"description":"Attempts per upstream request before giving up (each on a fresh exit).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{article_code, product_code, name, brand, url, image, model_image, images[], price, regular_price, on_sale, discount_percent, member_price, price_formatted, price_range{min, max}, currency, color_name, color_hex, color_shades[], colors[]{article_code, color_name, hex, url, image}, color_count, sizes[]{size_code, label, in_stock}, sizes_in_stock, availability, coming_soon, online, pre_shopping, new_arrival, multipack, external_brand, markers[]{text, type}, main_category, has_video}, count, page, page_size, total_results, total_pages, has_more, page_out_of_range, country, language, locale, currency, category{url, title, category_id, page_id}, sort_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"https://www2.hm.com/en_gb/ladies/shop-by-product/dresses.html"}},{"name":"search/suggest","description":"H&M's search-box suggestions for what a shopper has typed: suggested searches and linked content pages, in the market's language.","required_params":["query"],"optional_params":["country","language","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper has typed so far.","on_invalid":"reject","example":"lin","aliases":["q","prefix"]},{"name":"country","type":"enum","required":false,"description":"The H&M market. Prices, currency, language and assortment follow it. A product URL's own market is used when this is not given.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"fr","label":"France (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"gr","label":"Greece (EUR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ro","label":"Romania (RON)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"ua","label":"Ukraine (UAH)"},{"value":"tr","label":"Türkiye (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"hk","label":"Hong Kong (HKD)"},{"value":"asia1","label":"H&M asia1 site (HKD)"},{"value":"asia3","label":"H&M asia3 site (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"au","label":"Australia (AUD)"},{"value":"eur","label":"H&M Europe site (English, EUR)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Only for markets with several languages: ca (en, fr), ch (de, fr, it), be (nl, fr), fi (fi, sv), hk / asia1 / asia3 (en, zh). Defaults to the market's first language.","on_invalid":"reject","allowed_values":[{"value":"bg","label":"bg"},{"value":"cs","label":"cs"},{"value":"da","label":"da"},{"value":"de","label":"de"},{"value":"el","label":"el"},{"value":"en","label":"en"},{"value":"es","label":"es"},{"value":"fi","label":"fi"},{"value":"fr","label":"fr"},{"value":"he","label":"he"},{"value":"hu","label":"hu"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"nl","label":"nl"},{"value":"no","label":"no"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"},{"value":"ro","label":"ro"},{"value":"sk","label":"sk"},{"value":"sr","label":"sr"},{"value":"sv","label":"sv"},{"value":"tr","label":"tr"},{"value":"uk","label":"uk"},{"value":"vi","label":"vi"},{"value":"zh","label":"zh"}],"example":"fr"},{"name":"max_rotations","type":"integer","required":false,"description":"Attempts per upstream request before giving up (each on a fresh exit).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"suggestions[]{text}, content[]{title, url}, count, query, country, language, locale","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dress"}},{"name":"product/availability","description":"Live size availability for every colour of one H&M product in one market: which sizes can be ordered and which H&M flags as few pieces left. One small call — for stock monitoring.","required_params":["article_code"],"optional_params":["country","language","max_rotations"],"params":[{"name":"article_code","type":"string","required":true,"description":"An H&M article code (10 digits = product + colour, as in a product URL), a 7-digit product code (resolved to its default colour) or an hm.com product URL.","on_invalid":"reject","example":"1323075003","aliases":["product_id","id","url","product_code"]},{"name":"country","type":"enum","required":false,"description":"The H&M market. Prices, currency, language and assortment follow it. A product URL's own market is used when this is not given.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"fr","label":"France (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"gr","label":"Greece (EUR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ro","label":"Romania (RON)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"ua","label":"Ukraine (UAH)"},{"value":"tr","label":"Türkiye (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"hk","label":"Hong Kong (HKD)"},{"value":"asia1","label":"H&M asia1 site (HKD)"},{"value":"asia3","label":"H&M asia3 site (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"au","label":"Australia (AUD)"},{"value":"eur","label":"H&M Europe site (English, EUR)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Only for markets with several languages: ca (en, fr), ch (de, fr, it), be (nl, fr), fi (fi, sv), hk / asia1 / asia3 (en, zh). Defaults to the market's first language.","on_invalid":"reject","allowed_values":[{"value":"bg","label":"bg"},{"value":"cs","label":"cs"},{"value":"da","label":"da"},{"value":"de","label":"de"},{"value":"el","label":"el"},{"value":"en","label":"en"},{"value":"es","label":"es"},{"value":"fi","label":"fi"},{"value":"fr","label":"fr"},{"value":"he","label":"he"},{"value":"hu","label":"hu"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"nl","label":"nl"},{"value":"no","label":"no"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"},{"value":"ro","label":"ro"},{"value":"sk","label":"sk"},{"value":"sr","label":"sr"},{"value":"sv","label":"sv"},{"value":"tr","label":"tr"},{"value":"uk","label":"uk"},{"value":"vi","label":"vi"},{"value":"zh","label":"zh"}],"example":"fr"},{"name":"max_rotations","type":"integer","required":false,"description":"Attempts per upstream request before giving up (each on a fresh exit).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product_code, articles[]{article_code, sizes_in_stock[]{size_code, size}, few_left[]{size_code, size}}, article_count, sizes_in_stock, sizes_few_left, country, locale","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"article_code":"1323075003"}}]},{"name":"hofer","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"HOFER Austria prices, weekly offers and product labels","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/hofer/v1","spec_available":true,"actions":[{"name":"search","description":"Search products, browse a category, read a dated offer (Angebote) or page the whole online assortment; optionally one store's range.","required_params":[],"optional_params":["query","categoryKey","promotionKey","url","brandName","categoryTree","theme","store_id","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword (German). Leave query, categoryKey and promotionKey all empty to page the whole online assortment.","on_invalid":"reject","example":"milch","aliases":["q"]},{"name":"categoryKey","type":"string","required":false,"description":"Category id from categories (or from a /produkte/.../k/<id> URL).","on_invalid":"reject","example":"158816141856710103"},{"name":"promotionKey","type":"string","required":false,"description":"Offer date YYYY-MM-DD from promotions (\"Angebote ab ...\").","on_invalid":"reject","example":"2026-10-19"},{"name":"url","type":"string","required":false,"description":"A https://www.hofer.at listing URL (/produkte/.../k/<id>, /angebote/<date>, /suchergebnisse?q=, /produkte); its filters are applied, explicit parameters win.","on_invalid":"reject","example":"https://www.hofer.at/produkte/milchprodukte/k/158816141856710103"},{"name":"brandName","type":"array","required":false,"description":"Exact brand values from facets; several values use OR.","on_invalid":"reject","example":["SCHÄRDINGER"]},{"name":"categoryTree","type":"array","required":false,"description":"Category facet keys from the current search response.","on_invalid":"reject"},{"name":"theme","type":"array","required":false,"description":"Exact theme keys from promotions or facets, sent unmodified.","on_invalid":"reject","example":["Halloween"]},{"name":"store_id","type":"string","required":false,"description":"Optional HOFER store id from the stores action. Narrows the listing to that store's range (prices are national and do not change). Unknown ids return INVALID_PARAM.","on_invalid":"reject","example":"A316","aliases":["servicePoint"]},{"name":"sort","type":"enum","required":false,"description":"Ordering. Use price_asc for complete sweeps; an unknown sort is rejected because the source would silently ignore it.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. A page past the end returns INVALID_PARAM.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"enum","required":false,"description":"Page size; the source accepts only these values.","on_invalid":"reject","allowed_values":[{"value":12,"label":"12"},{"value":16,"label":"16"},{"value":24,"label":"24"},{"value":30,"label":"30"},{"value":32,"label":"32"},{"value":48,"label":"48"},{"value":60,"label":"60"}],"default":30}],"returns":"Products with EUR shelf price, unit price (Grundpreis) and its basis, was-price and discount on offers, deposit, pack size, brand, badges, offer start date, pagination and live facets.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milch","limit":12}},{"name":"offers","description":"List a current offer range HOFER PREIS,-WOCHEN / HOFER Preis - Dauerhaft Günstiger.","required_params":[],"optional_params":["type","brandName","categoryTree","theme","store_id","sort","page","limit"],"params":[{"name":"type","type":"enum","required":false,"description":"Offer range, resolved by name from the live category tree.","on_invalid":"reject","allowed_values":[{"value":"weekly","label":"HOFER PREIS,-WOCHEN"},{"value":"permanent_low","label":"HOFER Preis - Dauerhaft Günstiger"}],"default":"weekly"},{"name":"brandName","type":"array","required":false,"description":"Exact brand values from facets; several values use OR.","on_invalid":"reject","example":["SCHÄRDINGER"]},{"name":"categoryTree","type":"array","required":false,"description":"Category facet keys from the current search response.","on_invalid":"reject"},{"name":"theme","type":"array","required":false,"description":"Exact theme keys from promotions or facets, sent unmodified.","on_invalid":"reject","example":["Halloween"]},{"name":"store_id","type":"string","required":false,"description":"Optional HOFER store id from the stores action. Narrows the listing to that store's range (prices are national and do not change). Unknown ids return INVALID_PARAM.","on_invalid":"reject","example":"A316","aliases":["servicePoint"]},{"name":"sort","type":"enum","required":false,"description":"Ordering. Use price_asc for complete sweeps; an unknown sort is rejected because the source would silently ignore it.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page. A page past the end returns INVALID_PARAM.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"enum","required":false,"description":"Page size; the source accepts only these values.","on_invalid":"reject","allowed_values":[{"value":12,"label":"12"},{"value":16,"label":"16"},{"value":24,"label":"24"},{"value":30,"label":"30"},{"value":32,"label":"32"},{"value":48,"label":"48"},{"value":60,"label":"60"}],"default":30}],"returns":"The range's products with prices, was-prices and pagination, plus the resolved category.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"type":"permanent_low","limit":12}},{"name":"promotions","description":"List current and upcoming offer dates (Angebote ab ...) and their themes.","required_params":[],"optional_params":[],"params":[],"returns":"Offer dates (use as promotionKey in search), titles, themes and storefront URLs.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"product/detail","description":"Read one product: prices, description and label.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"18-digit product id from search (keep the leading zeros) or a https://www.hofer.at/produkt/... URL. A retailer id, not an EAN.","on_invalid":"reject","example":"000000000000100778","aliases":["product_id","url"]}],"returns":"Identity, prices, unit price, description, ingredients, allergens, nutrition, storage, origin, images and badges.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"000000000000100778"}},{"name":"categories","description":"Get the live category tree with the offer ranges marked.","required_params":[],"optional_params":[],"params":[],"returns":"Category ids, names, storefront URLs, offer_type and nested children.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"stores","description":"Find HOFER stores by town, postcode or coordinates (store ids for search).","required_params":[],"optional_params":["query","latitude","longitude","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Town, postcode or street for the store finder. Use query OR latitude+longitude.","on_invalid":"reject","example":"Wien","aliases":["location"]},{"name":"latitude","type":"number","required":false,"description":"Latitude; requires longitude. Results then carry a distance.","on_invalid":"reject","example":48.2082,"minimum":-90,"maximum":90},{"name":"longitude","type":"number","required":false,"description":"Longitude; requires latitude.","on_invalid":"reject","example":16.3738,"minimum":-180,"maximum":180},{"name":"page","type":"integer","required":false,"description":"One-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50}],"returns":"Stores with id, address, coordinates, distance (coordinate mode) and pagination.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Wien"}}]},{"name":"holidays","category":{"id":"utilities","title":"Utilities & AI"},"title":"Public Holidays & Business Days API — public holidays by country and year, working-day checks, business-day counts, upcoming holidays and a long-weekend finder","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/holidays/v1","spec_available":true,"actions":[{"name":"holidays","description":"public holidays for a country + year (full Nager fields + derived year/weekday/nationwide)","required_params":["country","year"],"optional_params":[],"params":[{"name":"country","type":"string","required":true,"description":"2-letter ISO-3166 country code (e.g. US, GB, DE, TR, JP). 123 countries supported — call action='countries' for the full set. Case-insensitive.","on_invalid":"reject","example":"US","aliases":["countryCode","cc"]},{"name":"year","type":"integer","required":true,"description":"4-digit year (supported range 1900-2200).","on_invalid":"ignore","example":2026,"minimum":1900,"maximum":2200}],"returns":"country, year, count, holidays[] (date, name, localName, types[], global, counties[], weekday, nationwide)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","year":2026}},{"name":"is_workday","description":"is a given date a working day for a country? (weekend + public-holiday aware; reasons[] explain)","required_params":["country","date"],"optional_params":["weekend","types","subdivision"],"params":[{"name":"country","type":"string","required":true,"description":"2-letter ISO-3166 country code (e.g. US, GB, DE, TR, JP). 123 countries supported — call action='countries' for the full set. Case-insensitive.","on_invalid":"reject","example":"US","aliases":["countryCode","cc"]},{"name":"date","type":"string","required":true,"description":"The date to test, in ISO format YYYY-MM-DD.","on_invalid":"reject","example":"2026-01-01"},{"name":"weekend","type":"string","required":false,"description":"Override the weekend definition with day names (e.g. 'Sat,Sun' or 'Fri,Sat'). Defaults to Sat+Sun (Fri+Sat for EG/BD).","on_invalid":"ignore","example":"Sat,Sun"},{"name":"types","type":"string","required":false,"description":"Which holiday types count as a day off (comma-separated, case-insensitive). Defaults to Public only.","on_invalid":"ignore","allowed_values":[{"value":"Public","label":"Statutory public holiday (default)"},{"value":"Bank","label":"Bank holiday"},{"value":"School","label":"School holiday"},{"value":"Authorities","label":"Authorities"},{"value":"Optional","label":"Optional"},{"value":"Observance","label":"Observance"}],"example":"Public"},{"name":"subdivision","type":"string","required":false,"description":"Optional ISO-3166-2 subdivision code (e.g. US-CA, GB-SCT) for region-precise business days. Omit for nationwide. Case-insensitive.","on_invalid":"ignore","example":"US-CA","aliases":["county","region","location"]}],"returns":"date, country, weekday, is_workday, is_weekend, is_public_holiday, reasons[], holidays[], weekend_definition[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","date":"2026-01-01"}},{"name":"workday_count","description":"business-day count over a date range: workdays/weekend_days/holiday_days + the holidays in range","required_params":["country","start","end"],"optional_params":["weekend","types","subdivision"],"params":[{"name":"country","type":"string","required":true,"description":"2-letter ISO-3166 country code (e.g. US, GB, DE, TR, JP). 123 countries supported — call action='countries' for the full set. Case-insensitive.","on_invalid":"reject","example":"US","aliases":["countryCode","cc"]},{"name":"start","type":"string","required":true,"description":"Range start date (inclusive), ISO YYYY-MM-DD.","on_invalid":"reject","example":"2026-01-01","aliases":["start_date","from"]},{"name":"end","type":"string","required":true,"description":"Range end date (inclusive), ISO YYYY-MM-DD. Max range ~10 years.","on_invalid":"reject","example":"2026-01-31","aliases":["end_date","to"]},{"name":"weekend","type":"string","required":false,"description":"Override the weekend definition with day names (e.g. 'Sat,Sun' or 'Fri,Sat'). Defaults to Sat+Sun (Fri+Sat for EG/BD).","on_invalid":"ignore","example":"Sat,Sun"},{"name":"types","type":"string","required":false,"description":"Which holiday types count as a day off (comma-separated, case-insensitive). Defaults to Public only.","on_invalid":"ignore","allowed_values":[{"value":"Public","label":"Statutory public holiday (default)"},{"value":"Bank","label":"Bank holiday"},{"value":"School","label":"School holiday"},{"value":"Authorities","label":"Authorities"},{"value":"Optional","label":"Optional"},{"value":"Observance","label":"Observance"}],"example":"Public"},{"name":"subdivision","type":"string","required":false,"description":"Optional ISO-3166-2 subdivision code (e.g. US-CA, GB-SCT) for region-precise business days. Omit for nationwide. Case-insensitive.","on_invalid":"ignore","example":"US-CA","aliases":["county","region","location"]}],"returns":"country, start, end, total_days, workdays, weekend_days, holiday_days, holidays[] (in range), weekend_definition[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","start":"2026-01-01","end":"2026-01-31"}},{"name":"next_holidays","description":"upcoming public holidays (next ~365 days) with daysUntil","required_params":["country"],"optional_params":["today"],"params":[{"name":"country","type":"string","required":true,"description":"2-letter ISO-3166 country code (e.g. US, GB, DE, TR, JP). 123 countries supported — call action='countries' for the full set. Case-insensitive.","on_invalid":"reject","example":"US","aliases":["countryCode","cc"]},{"name":"today","type":"string","required":false,"description":"Optional 'as of' date (ISO YYYY-MM-DD) to compute daysUntil from; defaults to the current UTC date.","on_invalid":"ignore","example":"2026-06-10"}],"returns":"country, asOf, count, holidays[] (full fields + daysUntil)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US"}},{"name":"long_weekends","description":"long-weekend windows for a country + year (+ bridge-day suggestions)","required_params":["country","year"],"optional_params":[],"params":[{"name":"country","type":"string","required":true,"description":"2-letter ISO-3166 country code (e.g. US, GB, DE, TR, JP). 123 countries supported — call action='countries' for the full set. Case-insensitive.","on_invalid":"reject","example":"US","aliases":["countryCode","cc"]},{"name":"year","type":"integer","required":true,"description":"4-digit year (supported range 1900-2200).","on_invalid":"ignore","example":2026,"minimum":1900,"maximum":2200}],"returns":"country, year, count, longWeekends[] (startDate, endDate, dayCount, needBridgeDay, startWeekday)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","year":2026}},{"name":"countries","description":"the supported country set (code → name)","required_params":[],"optional_params":[],"params":[],"returns":"count, countries[] (countryCode, name)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"hood","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Hood.de API — search the German/Austrian marketplace (new and used, fixed price and auctions) and read full listings: price, UVP, stock, shipping table, seller reputation","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/hood/v1","spec_available":true,"actions":[{"name":"search","description":"Search hood.de listings by `query` and/or `seller`, with the source's own filters: listing format (auction / fixed price), seller type (business / private), condition, price range, category, distance from a German postcode, and 8 sort orders. Each row: listing id, title, URL, image, price (or bid + buy-now price for auctions), crossed-out reference price, discount badge, unit price, shipping cost, 'ships now' flag, stock as displayed, units sold, the listing's purchase rating, brand, GTIN, item specifics. Plus the source's total, page count and category facets with counts. Either `query` or `seller` is required.","required_params":[],"optional_params":["query","seller","category","listing_format","seller_type","condition","min_price","max_price","zip","radius_km","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Search words, matched against the listing title (German catalogue: 'fahrrad', 'lego', 'iphone 13'). At least 2 characters. Either `query` or `seller` is required; both together narrow to one seller's matching listings.","on_invalid":"reject","example":"fahrrad","aliases":["q","keyword","keywords"]},{"name":"seller","type":"string","required":false,"description":"A Hood seller account name (the name in a listing's seller box, e.g. `milordbikes`). Alone it lists that seller's whole catalogue; with `query` it narrows to their matching listings.","on_invalid":"reject","example":"milordbikes","aliases":["seller_name","account_name","shop"]},{"name":"category","type":"string","required":false,"description":"Hood category id to narrow the search, e.g. 17934 (Radsport). Ids come from `category_facets` in any search response. Hood's search answers a category alone (without query or seller) with an empty page.","on_invalid":"reject","example":"17934","aliases":["category_id","categoryID"]},{"name":"listing_format","type":"enum","required":false,"description":"Only auctions or only fixed-price listings. An auction that also has a buy-now price counts in both.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Auctions (Auktionen)"},{"value":"fixed_price","label":"Fixed price (Sofortkauf)"}],"aliases":["format","buying_format"]},{"name":"seller_type","type":"enum","required":false,"description":"Only business sellers or only private sellers. The two add up exactly to the unfiltered total.","on_invalid":"reject","allowed_values":[{"value":"business","label":"Business seller (Gewerblich)"},{"value":"private","label":"Private seller (Privat)"}]},{"name":"condition","type":"enum","required":false,"description":"Item condition. `new` and `used` are the two broad classes; the other values are the source's finer used grades and overlap each other, so their counts do not sum to `used`.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Neu"},{"value":"used","label":"Gebraucht (all grades)"},{"value":"like_new","label":"Wie neu"},{"value":"very_good","label":"Sehr gut"},{"value":"good","label":"Gut"},{"value":"acceptable","label":"Akzeptabel"},{"value":"refurbished","label":"Überholt"},{"value":"defective","label":"Defekt"}]},{"name":"min_price","type":"number","required":false,"description":"Minimum price in EUR.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum price in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max"]},{"name":"zip","type":"string","required":false,"description":"German 5-digit postcode; with radius_km, only listings located within that distance of it (the seller's item location, not yours).","on_invalid":"reject","example":"10115","aliases":["postcode","plz"]},{"name":"radius_km","type":"integer","required":false,"description":"Distance in km around `zip`. Needs `zip`.","on_invalid":"reject","example":50,"minimum":1,"maximum":500,"aliases":["distance"]},{"name":"sort","type":"enum","required":false,"description":"Result order (Hood's own options). Price sorts are by price INCLUDING shipping, as Hood labels them. `ending_soon` works on auctions only (on a mixed search Hood returns an empty page). Hood's title sort is its own and not strictly alphabetical.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Beste Ergebnisse"},{"value":"price_asc","label":"Price incl. shipping, low to high"},{"value":"price_desc","label":"Price incl. shipping, high to low"},{"value":"newest","label":"Newly listed"},{"value":"ending_soon","label":"Ending soonest (auctions only: needs listing_format=auction)"},{"value":"title_asc","label":"Title A-Z"},{"value":"title_desc","label":"Title Z-A"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (1, 2, 3 ...). The number of rows on a page varies (measured 14-48); page until `has_more` is false. Past the last page Hood returns no rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"results[]{item_id, title, url, image, listing_format (auction|fixed_price), price (fixed-price listings; null on auctions), price_is_from (true = 'ab' price of a multi-variant listing), bid_price, buy_now_price, time_left (auctions), currency, strike_price (the source's crossed-out price), discount_pct_badge, unit_price{value,unit}?, shipping_cost (0 = free, null = not printed), shipping_text, in_stock_now, stock_display (the card saturates at '10+'), sold_count, listing_rating, listing_rating_count, brand, gtin, specs{}, variants_text, badges[], shop_level, payment_methods[]} + total, pages, page, has_more, category_facets[]{category_id, name, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"fahrrad","listing_format":"fixed_price"}},{"name":"product","description":"Full hood.de listing by item_id or URL: title, price or auction state (bid, bid count, buy-now price, time left, end time), crossed-out UVP / reference price, discount badge, exact stock (the page shows '10+', the listing carries the real number), units sold, condition, brand, GTIN, MPN, item specifics, variants with per-variant price and stock, category path, all images, the listing's purchase rating, the per-country shipping table (cost, carrier, transit days), return policy, item location, payment methods, the seller (name, account id, business/private, positive %, sales, shop level, shop link, business phone) and the EU product-safety block (manufacturer / responsible person as published).","required_params":[],"optional_params":["item_id","url"],"params":[{"name":"item_id","type":"string","required":false,"description":"Hood listing id: the digits at the end of a listing URL (`/i/<title-slug>-89037935.htm`), as returned in every search row. Provide item_id OR url.","on_invalid":"reject","example":"89037935","aliases":["id","listing_id"]},{"name":"url","type":"string","required":false,"description":"A hood.de listing URL; alternative to item_id.","on_invalid":"reject","example":"https://www.hood.de/i/x-89037935.htm","aliases":["item_url"]}],"returns":"item{item_id, item_number, title, url, listing_format, price, price_is_from, currency, strike_price, strike_price_label (UVP|statt|...), discount_pct_badge, auction{bid_label, bid_price, bid_count, buy_now_price, time_left, ends_at_text, quantity_available}?, buyable_now, listing_status (active|not_started|ended|other), status_text, availability, stock_exact, stock_display, some_variants_out_of_stock, sold_count, condition, brand, gtin, mpn, specs{}, variants[]{option_id, values{}, price, price_display, quantity, deactivated, in_stock (false = back-order)}, category_path[], images[], listing_rating, listing_rating_count, product_review_count, other_offers{offer_count, from_price}, shipping_headline, shipping[]{destination, cost, cost_text, carrier, transit_days_min, transit_days_max, delivery_estimate_text, countries[]}, shipping_note, shipping_discount, location, delivery_note, returns{withdrawal_days, return_cost}, payment_methods[], seller{name, account_id, seller_type, positive_pct, sales_count, purchases_count, shop_level, shop_id, shop_url, all_items_url, phone}, product_safety{}, short_description}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"item_id":"89037935"}}]},{"name":"hotline-ua","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Hotline.ua API — Ukraine price comparison: search, categories, every shop's offer per city, specs, ratings and price history (UAH)","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/hotline-ua/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search across hotline.ua's whole catalogue. Each row is a product with its lowest and highest current price in UAH, the number of shop offers (or the one shop when only one sells it), brand, category, review count and short specs. Also returns the exact result total and category / brand facets. Optional brand filter (brand_id from `brand_facets`).","required_params":["query"],"optional_params":["brand_id","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Ukrainian, Russian or Latin (model names and brands work as typed).","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword","phrase"]},{"name":"brand_id","type":"integer","required":false,"description":"Only this brand: a `brand_id` from this action's `brand_facets` or from a row (242 = Apple). One value per call.","on_invalid":"reject","example":242,"minimum":1,"aliases":["vendor_id","brand"]},{"name":"page","type":"integer","required":false,"description":"Result page, 48 rows per page. `last_page` in the answer is the source's own count; a page past it returns no rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"{query, total, page, last_page, has_more, page_size, results[{product_id, row_type (product | single_offer), title, url, product_path, brand, brand_id, category_id, category_path, lowest_price, highest_price, currency, offer_count, shop_name, offer_id, outbound_url, review_count, question_count, image, short_specs, added_date}], category_facets[{category_id, name, path, count}], brand_facets[{brand_id, name, count}]}. Every row's product_id opens with product / offers / price_history.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 15"}},{"name":"category","description":"One category's product listing (e.g. mobilnye-telefony-i-smartfony = smartphones) with the category's own product total, sort, price range and paging. Prices are the products' current lowest / highest offer in UAH.","required_params":["category"],"optional_params":["sort","min_price","max_price","city","page"],"params":[{"name":"category","type":"string","required":true,"description":"Category: its slug (mobilnye-telefony-i-smartfony), its path or URL (/mobile/mobilnye-telefony-i-smartfony/), a row's `category_path`, or its numeric id (11, a row's `category_id`).","on_invalid":"reject","example":"mobilnye-telefony-i-smartfony","aliases":["category_id","category_path","section"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Most popular (site default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Newest first"},{"value":"name","label":"Name A-Z"},{"value":"offers","label":"Most offers first"}],"default":"popular","example":"price_asc"},{"name":"min_price","type":"integer","required":false,"description":"Lower end of the price window in UAH (whole hryvnias). The site keeps a product when its lowest-to-highest offer range touches the window, so a row's min_price can sit just below it.","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Upper end of the price window in UAH (whole hryvnias); same range-overlap rule as min_price.","on_invalid":"reject","example":20000,"minimum":0,"aliases":["price_max"]},{"name":"city","type":"enum","required":false,"description":"Buyer's city. Hotline shows a different offer list per city (which shops deliver there, same-city flag, delivery lines, order); prices of the same shop do not change. Default Kyiv, the site's own default. The city id (187 = Kyiv) is accepted too.","on_invalid":"reject","allowed_values":[{"value":"kyiv","label":"Kyiv (city id 187)"},{"value":"lviv","label":"Lviv (city id 223)"},{"value":"kharkiv","label":"Kharkiv (city id 313)"},{"value":"odesa","label":"Odesa (city id 458)"},{"value":"dnipro","label":"Dnipro (city id 370)"},{"value":"zaporizhzhia","label":"Zaporizhzhia (city id 414)"},{"value":"vinnytsia","label":"Vinnytsia (city id 49)"},{"value":"poltava","label":"Poltava (city id 134)"},{"value":"mykolaiv","label":"Mykolaiv (city id 429)"},{"value":"kherson","label":"Kherson (city id 442)"}],"default":"kyiv","example":"kyiv","value_pattern":"^(187|223|313|458|370|414|49|134|429|442)$","aliases":["city_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 48 rows per page. `last_page` in the answer is the source's own count; a page past it returns no rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"{category_id, category_path, total, sort, min_price, max_price, city, page, last_page, has_more, results[...search row shape + is_promoted]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"mobilnye-telefony-i-smartfony"}},{"name":"product","description":"One product card: title, brand, category, barcode, lowest / highest / average current price, the lowest price among NEW-condition offers, offer count, rating and review counts with per-aspect ratings, the full specification sheet, description, images, colour / size variants and the last price-history point.","required_params":[],"optional_params":["product_id","url","city"],"params":[{"name":"product_id","type":"string","required":false,"description":"Hotline product id: the `product_id` of a search / category row (also in the site's own product data). Provide product_id OR url.","on_invalid":"reject","example":"24927903","aliases":["id","pid"]},{"name":"url","type":"string","required":false,"description":"A hotline.ua product URL, or a row's `product_path`; alternative to product_id.","on_invalid":"reject","example":"https://hotline.ua/ua/mobile-mobilnye-telefony-i-smartfony/apple-iphone-15-128gb-black-mtp03/","aliases":["product_url","product_path"]},{"name":"city","type":"enum","required":false,"description":"Buyer's city. Hotline shows a different offer list per city (which shops deliver there, same-city flag, delivery lines, order); prices of the same shop do not change. Default Kyiv, the site's own default. The city id (187 = Kyiv) is accepted too.","on_invalid":"reject","allowed_values":[{"value":"kyiv","label":"Kyiv (city id 187)"},{"value":"lviv","label":"Lviv (city id 223)"},{"value":"kharkiv","label":"Kharkiv (city id 313)"},{"value":"odesa","label":"Odesa (city id 458)"},{"value":"dnipro","label":"Dnipro (city id 370)"},{"value":"zaporizhzhia","label":"Zaporizhzhia (city id 414)"},{"value":"vinnytsia","label":"Vinnytsia (city id 49)"},{"value":"poltava","label":"Poltava (city id 134)"},{"value":"mykolaiv","label":"Mykolaiv (city id 429)"},{"value":"kherson","label":"Kherson (city id 442)"}],"default":"kyiv","example":"kyiv","value_pattern":"^(187|223|313|458|370|414|49|134|429|442)$","aliases":["city_id"]}],"returns":"{product_id, title, url, product_path, brand, category_id, category_path, barcode, lowest_price, cheapest_new_offer, highest_price, avg_price, currency, offer_count, rating, review_count, specs[{group, specs[{name, value}]}], variants[], images[], last_history_price, city}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"24927903"}},{"name":"offers","description":"Every shop offer for one product in one city, in the site's own order (paid placements first) or by price / warranty: shop (name, id, website, rating, review counts, official / new), price, condition (new / discounted), dispatch time, where it ships from, same-city flag, each delivery method with its stated cost, free-delivery flag, warranty, payment methods, instalment plans, whether the row is a paid placement, and the click-through link.","required_params":[],"optional_params":["product_id","url","city","sort"],"params":[{"name":"product_id","type":"string","required":false,"description":"Hotline product id: the `product_id` of a search / category row (also in the site's own product data). Provide product_id OR url.","on_invalid":"reject","example":"24927903","aliases":["id","pid"]},{"name":"url","type":"string","required":false,"description":"A hotline.ua product URL, or a row's `product_path`; alternative to product_id.","on_invalid":"reject","example":"https://hotline.ua/ua/mobile-mobilnye-telefony-i-smartfony/apple-iphone-15-128gb-black-mtp03/","aliases":["product_url","product_path"]},{"name":"city","type":"enum","required":false,"description":"Buyer's city. Hotline shows a different offer list per city (which shops deliver there, same-city flag, delivery lines, order); prices of the same shop do not change. Default Kyiv, the site's own default. The city id (187 = Kyiv) is accepted too.","on_invalid":"reject","allowed_values":[{"value":"kyiv","label":"Kyiv (city id 187)"},{"value":"lviv","label":"Lviv (city id 223)"},{"value":"kharkiv","label":"Kharkiv (city id 313)"},{"value":"odesa","label":"Odesa (city id 458)"},{"value":"dnipro","label":"Dnipro (city id 370)"},{"value":"zaporizhzhia","label":"Zaporizhzhia (city id 414)"},{"value":"vinnytsia","label":"Vinnytsia (city id 49)"},{"value":"poltava","label":"Poltava (city id 134)"},{"value":"mykolaiv","label":"Mykolaiv (city id 429)"},{"value":"kherson","label":"Kherson (city id 442)"}],"default":"kyiv","example":"kyiv","value_pattern":"^(187|223|313|458|370|414|49|134|429|442)$","aliases":["city_id"]},{"name":"sort","type":"enum","required":false,"description":"Offer order, using the site's own rank for each order.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The site's default order (paid placements rank first)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"warranty","label":"Longest warranty first"}],"default":"default","example":"price_asc"}],"returns":"{product_id, title, url, city, currency, lowest_price, highest_price, cheapest_offer_price, cheapest_new_offer, offer_count, sponsored_count, offers[{position, offer_id, shop_id, shop_name, shop_rating_percent, price, condition (new | discounted | used), condition_text, is_new_condition, delivery_time, ships_from, same_city, free_shipping, lowest_stated_delivery_cost, delivery_methods[{code, name, cost, cost_text}], warranty_months, installments, has_bid, listing_type, click_url}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"24927903"}},{"name":"price_history","description":"The product's price chart as the site draws it: average, lowest and highest shop price over time in UAH and USD, and the number of offers, twice a month and then daily for recent weeks; plus the site's own % price change over 14 / 30 days, 3 / 6 months, a year and all time.","required_params":[],"optional_params":["product_id","url","city"],"params":[{"name":"product_id","type":"string","required":false,"description":"Hotline product id: the `product_id` of a search / category row (also in the site's own product data). Provide product_id OR url.","on_invalid":"reject","example":"24927903","aliases":["id","pid"]},{"name":"url","type":"string","required":false,"description":"A hotline.ua product URL, or a row's `product_path`; alternative to product_id.","on_invalid":"reject","example":"https://hotline.ua/ua/mobile-mobilnye-telefony-i-smartfony/apple-iphone-15-128gb-black-mtp03/","aliases":["product_url","product_path"]},{"name":"city","type":"enum","required":false,"description":"Buyer's city. Hotline shows a different offer list per city (which shops deliver there, same-city flag, delivery lines, order); prices of the same shop do not change. Default Kyiv, the site's own default. The city id (187 = Kyiv) is accepted too.","on_invalid":"reject","allowed_values":[{"value":"kyiv","label":"Kyiv (city id 187)"},{"value":"lviv","label":"Lviv (city id 223)"},{"value":"kharkiv","label":"Kharkiv (city id 313)"},{"value":"odesa","label":"Odesa (city id 458)"},{"value":"dnipro","label":"Dnipro (city id 370)"},{"value":"zaporizhzhia","label":"Zaporizhzhia (city id 414)"},{"value":"vinnytsia","label":"Vinnytsia (city id 49)"},{"value":"poltava","label":"Poltava (city id 134)"},{"value":"mykolaiv","label":"Mykolaiv (city id 429)"},{"value":"kherson","label":"Kherson (city id 442)"}],"default":"kyiv","example":"kyiv","value_pattern":"^(187|223|313|458|370|414|49|134|429|442)$","aliases":["city_id"]}],"returns":"{product_id, product_path, city, currency, points, first_date, last_date, series{avg_price_uah, min_price_uah, max_price_uah, avg_price_usd, min_price_usd, max_price_usd, offer_count: [{date, value}]}, current_min_price_uah, price_change_percent{days_14, days_30, months_3, months_6, year, all_time}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"24927903"}}]},{"name":"hotukdeals","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"hotukdeals API — deals from www.hotukdeals.com (United Kingdom) as JSON: search the community's deals by keyword with sort (relevance, newest, hottest, price, discussed), temperature, price, date and category filters; the trending, new, hottest and discussion feeds; every deal in full (price, comparison price, discount, merchant, voucher code, shipping, temperature, comments, expiry, description); the comments of a deal; and the category list. Prices in GBP. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/hotukdeals/v1","spec_available":true,"actions":[{"name":"search","description":"Search hotukdeals deals by keyword. Sort by relevance, newest, hottest, price or latest comment; filter by temperature, price, posting date, category, expired and local deals. 30 deals a page.","required_params":["query"],"optional_params":["sort","time_frame","min_temperature","max_temperature","min_price","max_price","group_id","hide_expired","hide_local","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search hotukdeals deal titles and voucher codes for.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default for a search)"},{"value":"new","label":"Newest first"},{"value":"hot","label":"Hottest first (highest temperature)"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"discussed","label":"Most recently commented"}],"default":"relevance","example":"hot","aliases":["sort_by","order"]},{"name":"time_frame","type":"enum","required":false,"description":"How far back to search by posting date. The site searches the last 365 days unless told otherwise.","on_invalid":"reject","allowed_values":[{"value":"last_year","label":"Posted in the last 365 days (the site's default)"},{"value":"last_30_days","label":"Last 30 days"},{"value":"last_7_days","label":"Last 7 days"},{"value":"all_time","label":"No date limit"}],"default":"last_year","example":"last_30_days","aliases":["period","posted_within"]},{"name":"min_temperature","type":"integer","required":false,"description":"Only deals at or above this temperature (degrees; the site's own steps are 20, 100 and 500, any whole number works).","on_invalid":"reject","example":100,"minimum":-100000,"maximum":100000,"aliases":["temperature_from","min_temp"]},{"name":"max_temperature","type":"integer","required":false,"description":"Only deals at or below this temperature.","on_invalid":"reject","example":600,"minimum":-100000,"maximum":100000,"aliases":["temperature_to","max_temp"]},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price, in GBP.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price, in GBP.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max","price_to"]},{"name":"group_id","type":"string","required":false,"description":"Only one category: a categories row's group_id (or a row's group.group_id).","on_invalid":"reject","example":"5811","value_pattern":"\\d{1,12}","aliases":["category_id"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked as expired.","on_invalid":"reject","default":false,"example":true},{"name":"hide_local","type":"boolean","required":false,"description":"Leave out in-store-only (local) deals.","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: total, page, last_page, has_more, filters_applied, suggestions_dropped (a search with no result: the site's filler deals are not returned).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","sort":"new"}},{"name":"deals","description":"The hotukdeals feeds: trending (heating up now), new (every new post), hottest (the hottest of the period) and community discussions. 30 a page.","required_params":[],"optional_params":["list","page"],"params":[{"name":"list","type":"enum","required":false,"description":"Which hotukdeals feed.","on_invalid":"reject","allowed_values":[{"value":"trending","label":"What is heating up now (the site's 'hot' tab)"},{"value":"new","label":"Newest posts first"},{"value":"hottest","label":"The hottest deals of the current period"},{"value":"discussions","label":"Community discussion threads"}],"default":"trending","example":"new","aliases":["feed","tab"]},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: list, total, total_capped (the feeds report 10000 = a cap), page, last_page, has_more, pinned_rows.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"list":"new"}},{"name":"category_deals","description":"The deals of one hotukdeals category, hottest or newest first. The category page's own view hides expired deals and starts at a temperature floor (100° or 180° depending on the site); hide_expired / min_temperature change that and meta.applied_view shows what the page applied.","required_params":["group_slug"],"optional_params":["sort","min_temperature","hide_expired","page"],"params":[{"name":"group_slug","type":"string","required":true,"description":"Category slug: a categories row's group_slug (or a row's group.group_slug), e.g. electronics, gaming, groceries, travel.","on_invalid":"reject","example":"electronics","value_pattern":"[a-z0-9][a-z0-9\\-]{0,100}","aliases":["category","group"]},{"name":"sort","type":"enum","required":false,"description":"Order of the category's deals.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hottest first (the category page's default)"},{"value":"new","label":"Newest first"},{"value":"discussed","label":"Most recently commented"}],"default":"hot","example":"new","aliases":["sort_by"]},{"name":"min_temperature","type":"integer","required":false,"description":"Temperature floor. The category page has its own default floor (100° on most sites); meta.applied_view shows what the page applied.","on_invalid":"reject","example":0,"minimum":-100000,"maximum":100000,"aliases":["temperature_from"]},{"name":"hide_expired","type":"boolean","required":false,"description":"The category page hides expired deals by default; false shows them.","on_invalid":"reject","example":false},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: group_slug, sort, applied_view{sort, min_temperature, hide_expired}, total, total_capped, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group_slug":"electronics"}},{"name":"deal","description":"One deal in full by its id: price (0 = free, null = no price), the price as the site prints it, comparison price and discount, merchant, voucher code, shipping, temperature, status and expiry, every category it is in, the poster, the outbound link, images and the full description.","required_params":["deal_id"],"optional_params":[],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (4900815); a www.hotukdeals.com deal URL also works.","on_invalid":"reject","example":"4900815","aliases":["id","thread_id","url"]}],"returns":"deal{deal_id, type, title, url, share_url, visit_url, status, is_expired, is_hot, is_new, is_local, is_exclusive, nsfw, temperature, temperature_level, price, is_free, price_display, next_best_price, discount_pct, source_discount_pct, price_discount, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant, link_host, group, groups[], comment_count, posted_by, published_at, created_at, updated_at, starts_at, expires_at, dispatched_from{name, country}, is_national, regions, locations, image_url, images[], description, description_html}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"4900815"}},{"name":"comments","description":"The comments of one deal, in the site's own order (most helpful first), with author, time, reactions and reply links.","required_params":["deal_id"],"optional_params":["limit","page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (4900815); a www.hotukdeals.com deal URL also works.","on_invalid":"reject","example":"4900815","aliases":["id","thread_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Comments per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Comment page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"rows[]: comment_id, deal_id, url, text, html, user{user_id, username}, created_at, reactions{like, funny, helpful…}, is_reply, main_comment_id, parent_comment_id, is_pinned, popular, was_edited, status. meta: total, page, last_page, has_more, order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"4900815"}},{"name":"categories","description":"The hotukdeals category list: every main category with its id, slug, deal count and its community-favourite subcategories. group_id goes to search, group_slug to category_deals.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: group_id, name, group_slug, url, deal_count, subcategories[{group_id, name, group_slug}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"huuto","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Huuto.net Finland auctions and fixed-price listings","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/huuto/v1","spec_available":true,"actions":[{"name":"search","description":"Search public Finnish marketplace inventory and retain source auction/fixed asking bases.","required_params":[],"optional_params":["words","page"],"params":[{"name":"words","type":"string","required":false,"description":"Source search words, up to 200 characters. Omit for source unfiltered inventory.","on_invalid":"reject","example":"iphone"},{"name":"page","type":"integer","required":false,"description":"One source page; this engine caps requests at 1000, not an upstream ceiling claim.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"Source listing IDs, canonical URLs, titles, EUR current display/price basis, bidder count, buy-now amount, seller handle, location, images and source total/pagination.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"words":"iphone","page":1}},{"name":"listing","description":"Full public listing detail by search listing_id, including source description, media and explicit listing status.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Numeric source item ID returned by search.","on_invalid":"reject","example":"653381234"}],"returns":"Full description and images, original EUR starting/current-bid/buy-now amounts, bidder count, condition/status, seller identity, source categories, shipping/payment terms and attributes. source_api_delivery_price is an API quote that can differ from current web shipping; checkout/service-fee totals unqualified. GTIN null when unpublished.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"653381234"}}]},{"name":"iaai","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"IAAI API — Insurance Auto Auctions salvage & total-loss car auction scraper: search live IAAI lots by make, model, year, damage, title type, odometer, branch and buyer licence, then pull the full lot record (VIN, damage, title, odometer, ACV, buy-now price, auction date, branch and geo) plus every auction photo. The direct counterpart to our Copart API, with matching field names. No login, no API key.","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/iaai/v1","spec_available":true,"actions":[{"name":"search","description":"Search live IAAI auction lots by free-text `query` and/or 25 structured filters (make, model, trim, year or year_min/year_max, damage, title_type, vehicle_type, loss_type, start_code, fuel_type, transmission, drive, cylinders, airbags, auction_type, who_can_buy, region, market, availability, branch, state, body_style, colour, country_of_origin, odometer_min/max). Sortable and paginated. Returns lot cards with damage, title, odometer, estimated value, auction date, branch and thumbnail, plus IAAI's own total for the query.","required_params":[],"optional_params":["query","make","model","trim","year","year_min","year_max","title_type","vehicle_type","damage","loss_type","start_code","fuel_type","transmission","drive","cylinders","airbags","auction_type","who_can_buy","region","market","availability","odometer_min","odometer_max","branch","state","body_style","color","country_of_origin","vehicle_subtype","engine_size","sort","page","size"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword across the listing (make, model, series, stock number). Leave empty to browse everything and use filters.","on_invalid":"ignore","example":"toyota prius","aliases":["q","keyword"]},{"name":"make","type":"string","required":false,"description":"Vehicle make, exactly as IAAI spells it (TOYOTA, FORD, BMW). Get the live list from the `filters` action.","on_invalid":"ignore","example":"TOYOTA"},{"name":"model","type":"string","required":false,"description":"Vehicle model (PRIUS C, F150, CIVIC). Pair with `make`.","on_invalid":"ignore","example":"PRIUS C"},{"name":"trim","type":"string","required":false,"description":"Series / trim level as IAAI spells it (e.g. TWO, LIMITED, XLE).","on_invalid":"ignore","example":"TWO","aliases":["series"]},{"name":"year","type":"integer","required":false,"description":"Exact model year. For a span use year_min / year_max.","on_invalid":"ignore","example":2018,"minimum":1900,"maximum":2030},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year (inclusive).","on_invalid":"ignore","minimum":1900,"maximum":2030},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"ignore","minimum":1900,"maximum":2030},{"name":"title_type","type":"enum","required":false,"description":"Filter by title / sale document.","on_invalid":"ignore","allowed_values":[{"value":"salvage","label":"Salvage"},{"value":"clean","label":"Clear"},{"value":"non_repairable","label":"Non-Repairable"},{"value":"repairable","label":"Repairable"},{"value":"parts_only","label":"PartsOnly"},{"value":"bill_of_sale","label":"Bill Of Sale"},{"value":"none","label":"None"}]},{"name":"vehicle_type","type":"enum","required":false,"description":"Filter by vehicle category.","on_invalid":"ignore","allowed_values":[{"value":"automobile","label":"Automobiles"},{"value":"boat","label":"Boats"},{"value":"bus","label":"Buses"},{"value":"classic","label":"Classics"},{"value":"equipment","label":"Equipment"},{"value":"fleet","label":"Fleet Vehicles"},{"value":"heavy_truck","label":"Heavy Duty Trucks"},{"value":"light_truck","label":"Light Trucks"},{"value":"medium_truck","label":"Medium Trucks"},{"value":"motorcycle","label":"Motorcycles"},{"value":"pickup","label":"Pick-up Trucks"},{"value":"recreational","label":"Recreational/ Miscellaneous"},{"value":"rental","label":"Rental Vehicles"},{"value":"suv","label":"SUVs"},{"value":"trailer","label":"Trailers"},{"value":"van","label":"Vans"}]},{"name":"damage","type":"enum","required":false,"description":"Filter by primary damage type.","on_invalid":"ignore","allowed_values":[{"value":"all_over","label":"All Over"},{"value":"front_end","label":"Front End"},{"value":"front","label":"Front"},{"value":"rear","label":"Rear"},{"value":"front_and_rear","label":"Front & Rear"},{"value":"left_front","label":"Left Front"},{"value":"left_rear","label":"Left Rear"},{"value":"left_side","label":"Left Side"},{"value":"right_front","label":"Right Front"},{"value":"right_rear","label":"Right Rear"},{"value":"right_side","label":"Right Side"},{"value":"left_and_right_side","label":"Left & Right Side"},{"value":"roof","label":"Roof"},{"value":"roof_damage","label":"Roof Damage"},{"value":"rollover","label":"Rollover"},{"value":"roll_over","label":"Roll Over"},{"value":"undercarriage","label":"Undercarriage"},{"value":"under_carriage","label":"Under Carriage"},{"value":"hail","label":"Hail"},{"value":"flood","label":"Flood"},{"value":"fresh_water","label":"Fresh Water"},{"value":"salt_water","label":"Salt Water"},{"value":"water","label":"Water"},{"value":"total_burn","label":"Total Burn"},{"value":"engine_burn","label":"Engine Burn"},{"value":"interior_burn","label":"Interior Burn"},{"value":"exterior_burn","label":"Exterior Burn"},{"value":"engine_fire","label":"Engine Fire"},{"value":"interior_fire","label":"Interior Fire"},{"value":"mechanical","label":"Mechanical"},{"value":"engine","label":"Engine"},{"value":"engine_damage","label":"Engine Damage"},{"value":"transmission_damage","label":"Transmission Damage"},{"value":"suspension","label":"Suspension"},{"value":"frame","label":"Frame"},{"value":"structural","label":"Structural"},{"value":"electrical","label":"Electrical"},{"value":"theft","label":"Theft"},{"value":"vandalized","label":"Vandalized"},{"value":"stripped","label":"Strip"},{"value":"storm_damage","label":"Storm Damage"},{"value":"normal_wear","label":"Normal Wear & Tear"},{"value":"interior_damage","label":"Interior Damage"},{"value":"front_window","label":"Front Window"},{"value":"rear_window","label":"Rear Window"},{"value":"biohazard","label":"Biohazard"},{"value":"repossession","label":"Repossession"},{"value":"charity","label":"Charity"},{"value":"none","label":"None"},{"value":"unknown","label":"Unknown"}]},{"name":"loss_type","type":"enum","required":false,"description":"Filter by loss type (how the vehicle was written off).","on_invalid":"ignore","allowed_values":[{"value":"collision","label":"Collision"},{"value":"fire","label":"Fire"},{"value":"theft","label":"Theft"},{"value":"water","label":"Water"},{"value":"other","label":"Other"}]},{"name":"start_code","type":"enum","required":false,"description":"Filter by IAAI's start/run condition code.","on_invalid":"ignore","allowed_values":[{"value":"run_and_drive","label":"Run & Drive"},{"value":"starts","label":"STARTS"},{"value":"stationary","label":"Stationary"},{"value":"cannot_test","label":"Can't Test"}]},{"name":"fuel_type","type":"enum","required":false,"description":"Filter by fuel type.","on_invalid":"ignore","allowed_values":[{"value":"gasoline","label":"Gasoline"},{"value":"diesel","label":"Diesel"},{"value":"electric","label":"Electric"},{"value":"hybrid","label":"Hybrid"},{"value":"flexible","label":"Flexible"},{"value":"flexible_fuel","label":"Flexible Fuel"},{"value":"other","label":"Other"}]},{"name":"transmission","type":"enum","required":false,"description":"Filter by transmission.","on_invalid":"ignore","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"},{"value":"cvt","label":"CVT"},{"value":"missing","label":"Missing"},{"value":"unknown","label":"Unknown"}]},{"name":"drive","type":"enum","required":false,"description":"Filter by drive line.","on_invalid":"ignore","allowed_values":[{"value":"fwd","label":"Front Wheel Drive"},{"value":"rwd","label":"Rear Wheel Drive"},{"value":"awd","label":"All-Wheel Drive"},{"value":"four_wheel_drive","label":"Four Wheel Drive"},{"value":"4x2","label":"4X2 Drive"}]},{"name":"cylinders","type":"enum","required":false,"description":"Filter by cylinder count.","on_invalid":"ignore","allowed_values":[{"value":"1","label":"1 Cyl"},{"value":"2","label":"2 Cyl"},{"value":"3","label":"3 Cyl"},{"value":"4","label":"4 Cyl"},{"value":"5","label":"5 Cyl"},{"value":"6","label":"6 Cyl"},{"value":"8","label":"8 Cyl"},{"value":"10","label":"10 Cyl"},{"value":"12","label":"12 Cyl"},{"value":"rotary","label":"Rotary Engine"},{"value":"other","label":"All Others"}]},{"name":"airbags","type":"enum","required":false,"description":"Filter by airbag state.","on_invalid":"ignore","allowed_values":[{"value":"intact","label":"Intact Airbags"},{"value":"deployed","label":"Deployed Airbags"}]},{"name":"auction_type","type":"enum","required":false,"description":"Filter by auction format.","on_invalid":"ignore","allowed_values":[{"value":"live","label":"Live Auctions"},{"value":"timed","label":"Timed Auctions"},{"value":"buy_now","label":"Buy Now"}]},{"name":"who_can_buy","type":"enum","required":false,"description":"Filter by buyer licence required. `exporter` and `public` are the ones that matter if you are buying from outside the US.","on_invalid":"ignore","allowed_values":[{"value":"public","label":"Available to the public"},{"value":"dealer","label":"Dealer"},{"value":"dismantler","label":"Dismantler"},{"value":"exporter","label":"Exporter"},{"value":"rebuilder","label":"Rebuilder"},{"value":"scrapper","label":"Scrapper"},{"value":"non_auto_licensed_business","label":"Non-Auto Licensed Business"},{"value":"other_licensed_business","label":"Other Licensed Business"}]},{"name":"region","type":"enum","required":false,"description":"Filter by IAAI sales region.","on_invalid":"ignore","allowed_values":[{"value":"east","label":"East"},{"value":"west","label":"West"},{"value":"north","label":"North"},{"value":"south","label":"South"},{"value":"midwest","label":"Midwest"},{"value":"northeast","label":"Northeast"},{"value":"northwest","label":"Northwest"},{"value":"southeast","label":"Southeast"},{"value":"southwest","label":"Southwest"},{"value":"alaska","label":"Alaska"},{"value":"hawaii","label":"Hawaii"}]},{"name":"market","type":"enum","required":false,"description":"Filter by market (US, Canada or Ritchie Bros.).","on_invalid":"ignore","allowed_values":[{"value":"us","label":"IAA United States"},{"value":"canada","label":"IAA Canada"},{"value":"ritchie_bros","label":"Ritchie Bros."}]},{"name":"availability","type":"enum","required":false,"description":"Only lots that do / do not have a scheduled sale date.","on_invalid":"ignore","allowed_values":[{"value":"with_sale_date","label":"Items With a Sale Date"},{"value":"without_sale_date","label":"Items Without a Sale Date"}]},{"name":"odometer_min","type":"integer","required":false,"description":"Minimum odometer reading (miles).","on_invalid":"ignore","minimum":0},{"name":"odometer_max","type":"integer","required":false,"description":"Maximum odometer reading (miles).","on_invalid":"ignore","minimum":0},{"name":"branch","type":"string","required":false,"description":"Restrict to one IAAI branch by its exact name. Get names and live lot counts from the `branches` action.","on_invalid":"ignore","example":"Altoona (PA)","aliases":["yard","yard_name","branch_name"]},{"name":"state","type":"string","required":false,"description":"Vehicle location state, IAAI's spelling (full name for US states, 2-letter for Canadian provinces).","on_invalid":"ignore","example":"Pennsylvania"},{"name":"body_style","type":"string","required":false,"description":"Body style as IAAI spells it (SEDAN 4D, HATCHBACK, PICKUP...).","on_invalid":"ignore","example":"HATCHBACK"},{"name":"color","type":"string","required":false,"description":"Exterior colour.","on_invalid":"ignore","example":"Blue"},{"name":"country_of_origin","type":"string","required":false,"description":"Country the vehicle was manufactured in.","on_invalid":"ignore","example":"Japan"},{"name":"vehicle_subtype","type":"string","required":false,"description":"Sub-category for non-car inventory (ATV, Boat, Motor Home...).","on_invalid":"ignore","example":"Motor Home"},{"name":"engine_size","type":"string","required":false,"description":"Engine displacement as IAAI spells it, e.g. '2.0 L'.","on_invalid":"ignore","example":"2.0 L"},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Omit for IAAI's own default relevance order.","on_invalid":"ignore","allowed_values":[{"value":"sale_date_asc","label":"Auction date: soonest first"},{"value":"sale_date_desc","label":"Auction date: farthest first"},{"value":"year_desc","label":"Year: new to old"},{"value":"year_asc","label":"Year: old to new"},{"value":"odometer_asc","label":"Odometer: low to high"},{"value":"odometer_desc","label":"Odometer: high to low"},{"value":"make_az","label":"Make: A-Z"},{"value":"make_za","label":"Make: Z-A"},{"value":"model_az","label":"Model: A-Z"},{"value":"branch_az","label":"Branch: A-Z"},{"value":"state_az","label":"Location state: A-Z"},{"value":"stock_asc","label":"Stock #: low to high"},{"value":"stock_desc","label":"Stock #: high to low"}]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). IAAI stops paging at 500.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"size","type":"integer","required":false,"description":"Results per page (25-100). IAAI clamps anything below 25 up to 25.","on_invalid":"ignore","default":25,"minimum":25,"maximum":100}],"returns":"lots[]{lot_number, lot_id, stock_number, vin(masked by IAAI), year, make, model, trim, title, body_style, color, interior_color, engine, cylinders, fuel_type, transmission, drive, country_of_origin, primary_damage, secondary_damage, title_type, title_state, loss_type, keys_available, airbags, start_code, run_and_drive, vehicle_grade, highlights[], odometer, odometer_unit, odometer_brand, estimated_retail_value, current_bid(null — not published logged-out), buy_it_now_price, minimum_bid, bid_increment, pre_bid_count, repair_cost, currency, sale_date, sale_status, timed_auction, lane, aisle, who_can_buy[], yard_name, yard_number, branch_name, branch_number, location_city, location_state, zip, latitude, longitude, market, thumbnail, url} + meta{total_results, pagination}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"TOYOTA","size":25}},{"name":"lot_detail","description":"The full record for one lot by `lot_number`, read from IAAI's own page view-model: VIN (masked by IAAI), year/make/model/trim, primary and secondary damage, title type/state/brand, odometer with its ACTUAL/NOT-ACTUAL brand, engine, fuel, drive, transmission, airbags, start code, vehicle grade, ACV, buy-now price, minimum bid, bid increment, pre-bid participant count, auction date, lane/aisle, buyer-licence requirements and full branch location with latitude/longitude.","required_params":["lot_number"],"optional_params":["include_images"],"params":[{"name":"lot_number","type":"string","required":true,"description":"IAAI item id — the id in an iaai.com /VehicleDetail/ URL, or a search result's `lot_number`. '46677675', '46677675~US', a Canadian 'Imp_2995978~CA' and a full URL are all accepted; pass `lot_id` back verbatim to keep the tenant. NOTE: this is not the same number as the displayed Stock #.","on_invalid":"reject","example":"46677675","aliases":["lot","lot_id","item_id","id"]},{"name":"include_images","type":"boolean","required":false,"description":"Also return every auction photo in this same call. The photos come from the page this action already fetches, so lot_detail+include_images costs one call instead of calling lot_images separately.","on_invalid":"ignore","default":false}],"returns":"lot{lot_number, lot_id, stock_number, vin(masked by IAAI), year, make, model, trim, title, body_style, color, interior_color, engine, cylinders, fuel_type, transmission, drive, country_of_origin, primary_damage, secondary_damage, title_type, title_state, loss_type, keys_available, airbags, start_code, run_and_drive, vehicle_grade, highlights[], odometer, odometer_unit, odometer_brand, estimated_retail_value, current_bid(null — not published logged-out), buy_it_now_price, minimum_bid, bid_increment, pre_bid_count, repair_cost, currency, sale_date, sale_status, timed_auction, lane, aisle, who_can_buy[], yard_name, yard_number, branch_name, branch_number, location_city, location_state, zip, latitude, longitude, market, thumbnail, url, vin_status, title_brand, title_code, title_pending, vehicle_class, engine_size, restraint_system, options, catalytic_converter, operable, auction_id, slot, stall, vehicle_location, image_360_url}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"lot_number":"46677675"}},{"name":"lot_images","description":"Every auction photo for one lot: ordered full-size and thumbnail URLs with the native pixel dimensions of each image, plus the 360-degree viewer URL when IAAI publishes one.","required_params":["lot_number"],"optional_params":[],"params":[{"name":"lot_number","type":"string","required":true,"description":"IAAI item id to fetch photos for.","on_invalid":"reject","example":"46677675","aliases":["lot","lot_id","item_id","id"]}],"returns":"images[]{sequence, key, width, height, full_url, thumbnail_url} + image_360_url","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"lot_number":"46677675"}},{"name":"branches","description":"Live list of IAAI branches (yards) you can scope `search` to, each with its current lot count. Pass a name straight back as search's `branch` filter.","required_params":[],"optional_params":["query"],"params":[{"name":"query","type":"string","required":false,"description":"Optional case-insensitive substring to find a branch, e.g. 'dallas', '(PA)', 'phoenix'.","on_invalid":"ignore","example":"dallas","aliases":["q"]}],"returns":"branches[]{name, location, lot_count}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dallas"}},{"name":"filters","description":"The live filter taxonomy straight from IAAI, with a current lot count for every value: the exact strings `search` accepts for the open-ended filters it cannot enumerate up front (1,785 makes, 6,311 models, 849 branches, 229 body styles). Pass any search filter alongside `group` to get the counts WITHIN that query — e.g. group=Model with make=TOYOTA lists only Toyota models and how many lots each has right now.","required_params":[],"optional_params":["group","query","make","model","trim","year","year_min","year_max","title_type","vehicle_type","damage","loss_type","start_code","fuel_type","transmission","drive","cylinders","airbags","auction_type","who_can_buy","region","market","availability","odometer_min","odometer_max","branch","state","body_style","color","country_of_origin","vehicle_subtype","engine_size","sort","page","size"],"params":[{"name":"group","type":"string","required":false,"description":"Which taxonomy to return — Make, Model, Series, BranchName, StateDesc, BodyStyleName, PrimaryDamageDesc, InventoryTypes, SaleDocument, ExteriorColor, CountryOfOrigin, DisplLiters, Year. Omit to get every group at once.","on_invalid":"ignore","example":"Make","aliases":["facet","name"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword across the listing (make, model, series, stock number). Leave empty to browse everything and use filters.","on_invalid":"ignore","example":"toyota prius","aliases":["q","keyword"]},{"name":"make","type":"string","required":false,"description":"Vehicle make, exactly as IAAI spells it (TOYOTA, FORD, BMW). Get the live list from the `filters` action.","on_invalid":"ignore","example":"TOYOTA"},{"name":"model","type":"string","required":false,"description":"Vehicle model (PRIUS C, F150, CIVIC). Pair with `make`.","on_invalid":"ignore","example":"PRIUS C"},{"name":"trim","type":"string","required":false,"description":"Series / trim level as IAAI spells it (e.g. TWO, LIMITED, XLE).","on_invalid":"ignore","example":"TWO","aliases":["series"]},{"name":"year","type":"integer","required":false,"description":"Exact model year. For a span use year_min / year_max.","on_invalid":"ignore","example":2018,"minimum":1900,"maximum":2030},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year (inclusive).","on_invalid":"ignore","minimum":1900,"maximum":2030},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"ignore","minimum":1900,"maximum":2030},{"name":"title_type","type":"enum","required":false,"description":"Filter by title / sale document.","on_invalid":"ignore","allowed_values":[{"value":"salvage","label":"Salvage"},{"value":"clean","label":"Clear"},{"value":"non_repairable","label":"Non-Repairable"},{"value":"repairable","label":"Repairable"},{"value":"parts_only","label":"PartsOnly"},{"value":"bill_of_sale","label":"Bill Of Sale"},{"value":"none","label":"None"}]},{"name":"vehicle_type","type":"enum","required":false,"description":"Filter by vehicle category.","on_invalid":"ignore","allowed_values":[{"value":"automobile","label":"Automobiles"},{"value":"boat","label":"Boats"},{"value":"bus","label":"Buses"},{"value":"classic","label":"Classics"},{"value":"equipment","label":"Equipment"},{"value":"fleet","label":"Fleet Vehicles"},{"value":"heavy_truck","label":"Heavy Duty Trucks"},{"value":"light_truck","label":"Light Trucks"},{"value":"medium_truck","label":"Medium Trucks"},{"value":"motorcycle","label":"Motorcycles"},{"value":"pickup","label":"Pick-up Trucks"},{"value":"recreational","label":"Recreational/ Miscellaneous"},{"value":"rental","label":"Rental Vehicles"},{"value":"suv","label":"SUVs"},{"value":"trailer","label":"Trailers"},{"value":"van","label":"Vans"}]},{"name":"damage","type":"enum","required":false,"description":"Filter by primary damage type.","on_invalid":"ignore","allowed_values":[{"value":"all_over","label":"All Over"},{"value":"front_end","label":"Front End"},{"value":"front","label":"Front"},{"value":"rear","label":"Rear"},{"value":"front_and_rear","label":"Front & Rear"},{"value":"left_front","label":"Left Front"},{"value":"left_rear","label":"Left Rear"},{"value":"left_side","label":"Left Side"},{"value":"right_front","label":"Right Front"},{"value":"right_rear","label":"Right Rear"},{"value":"right_side","label":"Right Side"},{"value":"left_and_right_side","label":"Left & Right Side"},{"value":"roof","label":"Roof"},{"value":"roof_damage","label":"Roof Damage"},{"value":"rollover","label":"Rollover"},{"value":"roll_over","label":"Roll Over"},{"value":"undercarriage","label":"Undercarriage"},{"value":"under_carriage","label":"Under Carriage"},{"value":"hail","label":"Hail"},{"value":"flood","label":"Flood"},{"value":"fresh_water","label":"Fresh Water"},{"value":"salt_water","label":"Salt Water"},{"value":"water","label":"Water"},{"value":"total_burn","label":"Total Burn"},{"value":"engine_burn","label":"Engine Burn"},{"value":"interior_burn","label":"Interior Burn"},{"value":"exterior_burn","label":"Exterior Burn"},{"value":"engine_fire","label":"Engine Fire"},{"value":"interior_fire","label":"Interior Fire"},{"value":"mechanical","label":"Mechanical"},{"value":"engine","label":"Engine"},{"value":"engine_damage","label":"Engine Damage"},{"value":"transmission_damage","label":"Transmission Damage"},{"value":"suspension","label":"Suspension"},{"value":"frame","label":"Frame"},{"value":"structural","label":"Structural"},{"value":"electrical","label":"Electrical"},{"value":"theft","label":"Theft"},{"value":"vandalized","label":"Vandalized"},{"value":"stripped","label":"Strip"},{"value":"storm_damage","label":"Storm Damage"},{"value":"normal_wear","label":"Normal Wear & Tear"},{"value":"interior_damage","label":"Interior Damage"},{"value":"front_window","label":"Front Window"},{"value":"rear_window","label":"Rear Window"},{"value":"biohazard","label":"Biohazard"},{"value":"repossession","label":"Repossession"},{"value":"charity","label":"Charity"},{"value":"none","label":"None"},{"value":"unknown","label":"Unknown"}]},{"name":"loss_type","type":"enum","required":false,"description":"Filter by loss type (how the vehicle was written off).","on_invalid":"ignore","allowed_values":[{"value":"collision","label":"Collision"},{"value":"fire","label":"Fire"},{"value":"theft","label":"Theft"},{"value":"water","label":"Water"},{"value":"other","label":"Other"}]},{"name":"start_code","type":"enum","required":false,"description":"Filter by IAAI's start/run condition code.","on_invalid":"ignore","allowed_values":[{"value":"run_and_drive","label":"Run & Drive"},{"value":"starts","label":"STARTS"},{"value":"stationary","label":"Stationary"},{"value":"cannot_test","label":"Can't Test"}]},{"name":"fuel_type","type":"enum","required":false,"description":"Filter by fuel type.","on_invalid":"ignore","allowed_values":[{"value":"gasoline","label":"Gasoline"},{"value":"diesel","label":"Diesel"},{"value":"electric","label":"Electric"},{"value":"hybrid","label":"Hybrid"},{"value":"flexible","label":"Flexible"},{"value":"flexible_fuel","label":"Flexible Fuel"},{"value":"other","label":"Other"}]},{"name":"transmission","type":"enum","required":false,"description":"Filter by transmission.","on_invalid":"ignore","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"},{"value":"cvt","label":"CVT"},{"value":"missing","label":"Missing"},{"value":"unknown","label":"Unknown"}]},{"name":"drive","type":"enum","required":false,"description":"Filter by drive line.","on_invalid":"ignore","allowed_values":[{"value":"fwd","label":"Front Wheel Drive"},{"value":"rwd","label":"Rear Wheel Drive"},{"value":"awd","label":"All-Wheel Drive"},{"value":"four_wheel_drive","label":"Four Wheel Drive"},{"value":"4x2","label":"4X2 Drive"}]},{"name":"cylinders","type":"enum","required":false,"description":"Filter by cylinder count.","on_invalid":"ignore","allowed_values":[{"value":"1","label":"1 Cyl"},{"value":"2","label":"2 Cyl"},{"value":"3","label":"3 Cyl"},{"value":"4","label":"4 Cyl"},{"value":"5","label":"5 Cyl"},{"value":"6","label":"6 Cyl"},{"value":"8","label":"8 Cyl"},{"value":"10","label":"10 Cyl"},{"value":"12","label":"12 Cyl"},{"value":"rotary","label":"Rotary Engine"},{"value":"other","label":"All Others"}]},{"name":"airbags","type":"enum","required":false,"description":"Filter by airbag state.","on_invalid":"ignore","allowed_values":[{"value":"intact","label":"Intact Airbags"},{"value":"deployed","label":"Deployed Airbags"}]},{"name":"auction_type","type":"enum","required":false,"description":"Filter by auction format.","on_invalid":"ignore","allowed_values":[{"value":"live","label":"Live Auctions"},{"value":"timed","label":"Timed Auctions"},{"value":"buy_now","label":"Buy Now"}]},{"name":"who_can_buy","type":"enum","required":false,"description":"Filter by buyer licence required. `exporter` and `public` are the ones that matter if you are buying from outside the US.","on_invalid":"ignore","allowed_values":[{"value":"public","label":"Available to the public"},{"value":"dealer","label":"Dealer"},{"value":"dismantler","label":"Dismantler"},{"value":"exporter","label":"Exporter"},{"value":"rebuilder","label":"Rebuilder"},{"value":"scrapper","label":"Scrapper"},{"value":"non_auto_licensed_business","label":"Non-Auto Licensed Business"},{"value":"other_licensed_business","label":"Other Licensed Business"}]},{"name":"region","type":"enum","required":false,"description":"Filter by IAAI sales region.","on_invalid":"ignore","allowed_values":[{"value":"east","label":"East"},{"value":"west","label":"West"},{"value":"north","label":"North"},{"value":"south","label":"South"},{"value":"midwest","label":"Midwest"},{"value":"northeast","label":"Northeast"},{"value":"northwest","label":"Northwest"},{"value":"southeast","label":"Southeast"},{"value":"southwest","label":"Southwest"},{"value":"alaska","label":"Alaska"},{"value":"hawaii","label":"Hawaii"}]},{"name":"market","type":"enum","required":false,"description":"Filter by market (US, Canada or Ritchie Bros.).","on_invalid":"ignore","allowed_values":[{"value":"us","label":"IAA United States"},{"value":"canada","label":"IAA Canada"},{"value":"ritchie_bros","label":"Ritchie Bros."}]},{"name":"availability","type":"enum","required":false,"description":"Only lots that do / do not have a scheduled sale date.","on_invalid":"ignore","allowed_values":[{"value":"with_sale_date","label":"Items With a Sale Date"},{"value":"without_sale_date","label":"Items Without a Sale Date"}]},{"name":"odometer_min","type":"integer","required":false,"description":"Minimum odometer reading (miles).","on_invalid":"ignore","minimum":0},{"name":"odometer_max","type":"integer","required":false,"description":"Maximum odometer reading (miles).","on_invalid":"ignore","minimum":0},{"name":"branch","type":"string","required":false,"description":"Restrict to one IAAI branch by its exact name. Get names and live lot counts from the `branches` action.","on_invalid":"ignore","example":"Altoona (PA)","aliases":["yard","yard_name","branch_name"]},{"name":"state","type":"string","required":false,"description":"Vehicle location state, IAAI's spelling (full name for US states, 2-letter for Canadian provinces).","on_invalid":"ignore","example":"Pennsylvania"},{"name":"body_style","type":"string","required":false,"description":"Body style as IAAI spells it (SEDAN 4D, HATCHBACK, PICKUP...).","on_invalid":"ignore","example":"HATCHBACK"},{"name":"color","type":"string","required":false,"description":"Exterior colour.","on_invalid":"ignore","example":"Blue"},{"name":"country_of_origin","type":"string","required":false,"description":"Country the vehicle was manufactured in.","on_invalid":"ignore","example":"Japan"},{"name":"vehicle_subtype","type":"string","required":false,"description":"Sub-category for non-car inventory (ATV, Boat, Motor Home...).","on_invalid":"ignore","example":"Motor Home"},{"name":"engine_size","type":"string","required":false,"description":"Engine displacement as IAAI spells it, e.g. '2.0 L'.","on_invalid":"ignore","example":"2.0 L"},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Omit for IAAI's own default relevance order.","on_invalid":"ignore","allowed_values":[{"value":"sale_date_asc","label":"Auction date: soonest first"},{"value":"sale_date_desc","label":"Auction date: farthest first"},{"value":"year_desc","label":"Year: new to old"},{"value":"year_asc","label":"Year: old to new"},{"value":"odometer_asc","label":"Odometer: low to high"},{"value":"odometer_desc","label":"Odometer: high to low"},{"value":"make_az","label":"Make: A-Z"},{"value":"make_za","label":"Make: Z-A"},{"value":"model_az","label":"Model: A-Z"},{"value":"branch_az","label":"Branch: A-Z"},{"value":"state_az","label":"Location state: A-Z"},{"value":"stock_asc","label":"Stock #: low to high"},{"value":"stock_desc","label":"Stock #: high to low"}]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). IAAI stops paging at 500.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"size","type":"integer","required":false,"description":"Results per page (25-100). IAAI clamps anything below 25 up to 25.","on_invalid":"ignore","default":25,"minimum":25,"maximum":100}],"returns":"groups{<Group>: [{value, count}]} (one group when `group` is given)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"group":"Make"}}]},{"name":"iceland","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Iceland UK groceries","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/iceland/v1","spec_available":true,"actions":[{"name":"search","description":"Search UK groceries. Supply query or category; anonymous online catalogue prices in GBP.","required_params":[],"optional_params":["query","category","brand","availability","promotion_id","refinements","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Product words searched by Iceland.","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"category","type":"string","required":false,"description":"Exact category id from facets.categoryPageId.","on_invalid":"reject","example":"FRZ"},{"name":"brand","type":"string","required":false,"description":"Exact brand from search facets.","on_invalid":"reject","example":"Iceland"},{"name":"availability","type":"enum","required":false,"description":"Global catalogue status, not store-specific stock.","on_invalid":"reject","allowed_values":[{"value":"in_stock","label":"in_stock"},{"value":"unavailable","label":"unavailable"},{"value":"all","label":"all"}],"default":"in_stock"},{"name":"promotion_id","type":"string","required":false,"description":"Public promotion identifier from a product promotions array.","on_invalid":"reject"},{"name":"refinements","type":"object","required":false,"description":"Exact source facet names mapped to values (OR within a facet, AND across facets). Use facets returned by search.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Iceland ordering; price sorts follow source index ordering.","on_invalid":"reject","allowed_values":[{"value":"default","label":"default"},{"value":"bestsellers","label":"bestsellers"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"alpha_asc","label":"alpha_asc"},{"value":"alpha_desc","label":"alpha_desc"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"One-based page; out-of-range pages return no rows.","on_invalid":"reject","default":1,"minimum":1,"maximum":100000},{"name":"page_size","type":"integer","required":false,"description":"Number of products requested per page.","on_invalid":"reject","default":24,"minimum":1,"maximum":50}],"returns":"products with shelf/unit prices, promotions and availability; source total, facets and paging metadata.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","brand":"Iceland","page_size":12}},{"name":"product/detail","description":"Full public product page and label sheet, resolved from the retailer product id.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"Iceland retailer identifier from search; not a barcode.","on_invalid":"reject","example":"19492","aliases":["id"]}],"returns":"product, complete label data, public product page content and independent displayed price witnesses.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"19492"}},{"name":"bonus/benefits","description":"Public Bonus Club benefits and terms. Reward credit is separate from product member pricing.","required_params":[],"optional_params":[],"params":[],"returns":"benefits, reward-credit amounts where published, terms and source links.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"idealista","category":{"id":"real-estate","title":"Real Estate"},"title":"Idealista API scraper — Spain, Italy & Portugal real estate data: for-sale and for-rent property listings from idealista.com / idealista.it / idealista.pt with full filters (price EUR, bedrooms, surface m², property type, sort), each listing with price, rooms, bathrooms, surface, floor, features and photo, plus a full per-listing detail record (address, year built, description, gallery) — no API key required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/idealista/v1","spec_available":true,"actions":[{"name":"search","description":"Search Idealista property listings by location (Spain, Italy or Portugal; for sale or rent) with structured filters: price (EUR), bedrooms, surface (m²), property type and sort. Each result carries id, title, price, rooms, bathrooms, surface, floor, features and thumbnail. Paginate with page.","required_params":["location"],"optional_params":["country","contract","sort","home_type","page","price_min","price_max","rooms_min","surface_min"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — a city in the selected country ('Madrid', 'Roma', 'Lisboa', 'Barcelona'). You may also pass an exact Idealista location slug (e.g. 'barcelona-barcelona').","on_invalid":"reject","example":"Madrid","aliases":["loc","city","where"]},{"name":"country","type":"enum","required":false,"description":"Which Idealista market to search.","on_invalid":"ignore","allowed_values":[{"value":"es","label":"Spain (idealista.com)"},{"value":"it","label":"Italy (idealista.it)"},{"value":"pt","label":"Portugal (idealista.pt)"}],"default":"es","example":"es"},{"name":"contract","type":"enum","required":false,"description":"Listing type.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"For rent"}],"default":"sale","example":"sale"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"newest","label":"Most recent"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"}],"default":"relevance","example":"newest"},{"name":"home_type","type":"enum","required":false,"description":"Restrict to a property type.","on_invalid":"ignore","allowed_values":[{"value":"apartment","label":"Flats / apartments only"}],"example":"apartment"},{"name":"page","type":"integer","required":false,"description":"Result page (≈30 listings per page; paginate with page += 1).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR (sale price, or monthly rent when contract=rent).","on_invalid":"ignore","example":200000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR.","on_invalid":"ignore","example":500000,"minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Minimum number of bedrooms. 3 = 3+.","on_invalid":"ignore","example":3,"minimum":1,"maximum":10,"aliases":["rooms"]},{"name":"surface_min","type":"integer","required":false,"description":"Minimum living surface in square metres (m²).","on_invalid":"ignore","example":80,"minimum":0}],"returns":"results[]{id, url, title, price, currency, rooms, bathrooms, surface_m2, floor, features[], thumbnail_url} + total + count + page + country + filters_applied","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Madrid","country":"es"}},{"name":"detail","description":"Full record for a single listing by its Idealista id (the number in an idealista.com/inmueble/<id>/ URL, or a search result's `id`). Returns title, price, address, bedrooms, bathrooms, surface, year built, the full feature list, description and all gallery image URLs.","required_params":["id"],"optional_params":["country"],"params":[{"name":"id","type":"string","required":true,"description":"Idealista listing id (the number in an idealista.<tld>/inmueble/<id>/ URL, or a search result's `id`).","on_invalid":"reject","example":"107795847","aliases":["listing_id","property_id"]},{"name":"country","type":"enum","required":false,"description":"Which Idealista market to search.","on_invalid":"ignore","allowed_values":[{"value":"es","label":"Spain (idealista.com)"},{"value":"it","label":"Italy (idealista.it)"},{"value":"pt","label":"Portugal (idealista.pt)"}],"default":"es","example":"es"}],"returns":"listing{id, url, title, address, price, currency, rooms, bathrooms, surface_m2, year_built, features[], description, images[], image_count}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"109592362"}},{"name":"geography","description":"Resolve a free-text place name to the Idealista location slug + a ready-to-use search preview (the count of active listings there). Use it to confirm a location before searching, or to discover the exact slug a city resolves to.","required_params":["query"],"optional_params":["country","contract"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text place in the selected country to resolve ('Madrid', 'Roma', 'Lisboa').","on_invalid":"reject","example":"Madrid","aliases":["q","location","city"]},{"name":"country","type":"enum","required":false,"description":"Which Idealista market to search.","on_invalid":"ignore","allowed_values":[{"value":"es","label":"Spain (idealista.com)"},{"value":"it","label":"Italy (idealista.it)"},{"value":"pt","label":"Portugal (idealista.pt)"}],"default":"es","example":"es"},{"name":"contract","type":"enum","required":false,"description":"Listing type.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"For rent"}],"default":"sale","example":"sale"}],"returns":"location{query, slug, country, total_listings, url} + ok","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Madrid","country":"es"}}]},{"name":"idealo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"idealo API scraper — Europe's big price-comparison site, six storefronts: idealo.de (default), .at, .fr, .it, .es and .co.uk. One call returns EVERY merchant offer for a product (merchant name, merchant id, price, total price including shipping, delivery window, payment methods and the merchant's idealo rating), plus keyword search, category browse and full product records with the complete spec sheet, variants with EANs, expert test grades and user opinions. Prices in EUR (GBP on idealo.co.uk). No account, no browser, no API key at idealo.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/idealo/v1","spec_available":true,"actions":[{"name":"search","description":"Search idealo by keyword (idealo.de by default; `country` picks .at/.fr/.it/.es/.co.uk) and get back comparison products: id, title, image, price floor, how many merchants sell it, the cheapest merchant's name and shipping cost, the German spec highlights and idealo's expert test grade. Feed the `product_id` of any row straight into `product/offers` to get the whole merchant table. idealo renders one page of results server-side (36 rows, or 60 when sorted by price); page 2 onward is drawn in the browser by an API that refuses anonymous callers, so `has_more` is always false and the honest totals (`total_results`, `total_products`) tell you how much exists beyond it. EAN/GTIN and exact-model queries are supported and answered specially: idealo skips the result page and lands straight on the one matching product, so you get `direct_hit: true`, a single row, AND the complete product record in `product` (the same object `product/detail` returns) without a second call.","required_params":["query"],"optional_params":["sort","country"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for. Keywords in the storefront's own language match best (German on idealo.de/.at, French on .fr, Italian on .it, Spanish on .es, English on .co.uk), but brand and model names work as they are everywhere — 'bose quietcomfort', 'lego technic', 'nike air max'. An EAN/GTIN works too.","on_invalid":"reject","example":"kopfhörer","aliases":["q","keyword","search"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Only these three exist on idealo's server-rendered pages: every other ordering the site offers (newest, biggest discount, best rated) is applied in the browser by a client API that refuses anonymous calls, and idealo answers an unknown ordering with HTTP 200 and the default list — so this engine rejects one instead of silently ignoring it. Note that price_asc/price_desc change WHAT is searched, not just the order: idealo drops the category it auto-detected for your keyword and sorts across all of them, so the rows widen to 60 and include single-merchant OFFER rows and accessories (searching 'kaffeevollautomat' sorted by price_asc leads with a 0,13 € descaler — measured, not a bug on our side). Each row says in `type` whether it is a comparison PRODUCT or a single OFFER, and `category_id` says where it came from. Sort inside a category with `category/products` instead when you want the cheapest of one kind of thing.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"idealo's own default ordering"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"relevance","aliases":["order","sortKey"]},{"name":"country","type":"enum","required":false,"description":"Which idealo storefront to read. Each country has its own merchants, prices, currency, shipping and language, so the same product id returns a different offer table on each (the Galaxy S26 Ultra had 400 offers on idealo.at and 219 on idealo.co.uk, the same hour). Prices are in EUR everywhere except uk, which is GBP; every response says which in `currency`. Default de, so calls written before this parameter existed are unchanged. If you pass a full idealo URL as the id and leave this out, the storefront is taken from the URL's host.","on_invalid":"reject","allowed_values":[{"value":"de","label":"idealo.de — Germany, EUR (default)"},{"value":"at","label":"idealo.at — Austria, EUR"},{"value":"fr","label":"idealo.fr — France, EUR"},{"value":"it","label":"idealo.it — Italy, EUR"},{"value":"es","label":"idealo.es — Spain, EUR"},{"value":"uk","label":"idealo.co.uk — United Kingdom, GBP"}],"default":"de","aliases":["site","market","marketplace"]}],"returns":"results[]{product_id (null on an OFFER row), row_id, type ('product'|'offer'), title, url, image, category_id, summary, characteristics[], price_from, price_from_display, currency (EUR, GBP on uk), offer_count, used_only, offer_key, offer_url, best_offer{seller{id, name, logo}, shipping_costs, shipping_free, delivery_information, free_return_days}, test_grade (the storefront's own expert score text — its scale is in `test_grade_scale`; on de/at a German school grade, 1.0 best … 6.0 worst — NOT a 5-star score), review_count, is_bestseller, voucher_code} + count + total_results + total_products + total_offers + category_id + category_name + related_queries[] + has_more + direct_hit (true when idealo matched the query to exactly one product and redirected onto it) + product (the full product record on a direct hit, null otherwise) + country + currency + price_basis + test_grade_scale (de/at german_school_grade_1_best_6_worst · fr score_out_of_20_higher_is_better · it/es score_out_of_10_higher_is_better · uk percent_higher_is_better)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"kopfhörer"}},{"name":"category/products","description":"Browse a whole idealo category by its id (or URL) — the same rich rows as `search`, but enumerated from idealo's own product tree instead of a keyword. Use it to sweep a market: every headphone, every washing machine, every LEGO set, with each row's price floor and merchant count. Same one-page limit as search, and `total_products` says how large the category really is.","required_params":["category"],"optional_params":["sort","country"],"params":[{"name":"category","type":"string","required":true,"description":"idealo category id, or a full category URL. The id is the number in /preisvergleich/ProductCategory/<id>.html (de/at) or /cat/<id>/<slug>.html (fr/it/es/uk) — category ids are the same on every idealo storefront. Live examples: 2520 headphones · 1941 washing machines · 4012 televisions · 19116 smartphones · 3487 bean-to-cup coffee machines · 22875 running shoes · 9552 LEGO · 3687 cordless drills · 6012 prams. You do not need a category table: every `search` row carries its own category_id, the search response names the category it landed in, and every `product/detail` returns the full category path — so keyword → whole category is two calls.","on_invalid":"reject","example":"2520","aliases":["category_id","cat","category_url"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Only these three exist on idealo's server-rendered pages: every other ordering the site offers (newest, biggest discount, best rated) is applied in the browser by a client API that refuses anonymous calls, and idealo answers an unknown ordering with HTTP 200 and the default list — so this engine rejects one instead of silently ignoring it. Note that price_asc/price_desc change WHAT is searched, not just the order: idealo drops the category it auto-detected for your keyword and sorts across all of them, so the rows widen to 60 and include single-merchant OFFER rows and accessories (searching 'kaffeevollautomat' sorted by price_asc leads with a 0,13 € descaler — measured, not a bug on our side). Each row says in `type` whether it is a comparison PRODUCT or a single OFFER, and `category_id` says where it came from. Sort inside a category with `category/products` instead when you want the cheapest of one kind of thing.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"idealo's own default ordering"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"relevance","aliases":["order","sortKey"]},{"name":"country","type":"enum","required":false,"description":"Which idealo storefront to read. Each country has its own merchants, prices, currency, shipping and language, so the same product id returns a different offer table on each (the Galaxy S26 Ultra had 400 offers on idealo.at and 219 on idealo.co.uk, the same hour). Prices are in EUR everywhere except uk, which is GBP; every response says which in `currency`. Default de, so calls written before this parameter existed are unchanged. If you pass a full idealo URL as the id and leave this out, the storefront is taken from the URL's host.","on_invalid":"reject","allowed_values":[{"value":"de","label":"idealo.de — Germany, EUR (default)"},{"value":"at","label":"idealo.at — Austria, EUR"},{"value":"fr","label":"idealo.fr — France, EUR"},{"value":"it","label":"idealo.it — Italy, EUR"},{"value":"es","label":"idealo.es — Spain, EUR"},{"value":"uk","label":"idealo.co.uk — United Kingdom, GBP"}],"default":"de","aliases":["site","market","marketplace"]}],"returns":"results[]{…same row shape as search} + count + total_results + total_products + total_offers + category_id + category_name + has_more + direct_hit + product (null unless idealo redirected onto a single product) + country + currency + price_basis + test_grade_scale","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"2520"}},{"name":"product/detail","description":"The full idealo record for one product: title, brand, the complete category path, every image, the price range across all merchants (price_min / price_max) and how many offers make it up, the new and used price floors, the entire spec sheet (in the storefront's language) as grouped label/value rows, colour and capacity variants each with their own id, EAN and price range, idealo's expert test summary (how many magazines tested it and the average score, on the storefront's own scale — see test_reports.grade_scale), the editorial pros and cons, the product FAQ, and the user opinions idealo publishes. Same id on every storefront; `country` picks which one's prices and offers you get.","required_params":["product_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"string","required":true,"description":"idealo product id — the number in /preisvergleich/OffersOfProduct/<id>_-<slug>.html (de/at), /prix/<id>/… (fr), /confronta-prezzi/<id>/… (it), /precios/<id>/… (es) or /compare/<id>/… (uk). A full product URL works too; the slug is cosmetic and the bare id resolves on its own. Product ids are the same on every idealo storefront. `search` returns this id on every PRODUCT row.","on_invalid":"reject","example":"203505482","aliases":["id","product","url","product_url"]},{"name":"country","type":"enum","required":false,"description":"Which idealo storefront to read. Each country has its own merchants, prices, currency, shipping and language, so the same product id returns a different offer table on each (the Galaxy S26 Ultra had 400 offers on idealo.at and 219 on idealo.co.uk, the same hour). Prices are in EUR everywhere except uk, which is GBP; every response says which in `currency`. Default de, so calls written before this parameter existed are unchanged. If you pass a full idealo URL as the id and leave this out, the storefront is taken from the URL's host.","on_invalid":"reject","allowed_values":[{"value":"de","label":"idealo.de — Germany, EUR (default)"},{"value":"at","label":"idealo.at — Austria, EUR"},{"value":"fr","label":"idealo.fr — France, EUR"},{"value":"it","label":"idealo.it — Italy, EUR"},{"value":"es","label":"idealo.es — Spain, EUR"},{"value":"uk","label":"idealo.co.uk — United Kingdom, GBP"}],"default":"de","aliases":["site","market","marketplace"]}],"returns":"product{product_id, title, brand, url, category_id, category_name, category_path[]{category_id, name, url}, image, images[], price_min, price_max, currency (EUR, GBP on uk), offer_count, price_new_from, price_used_from, availability, item_condition, rating (number), review_count, rating_scale, rating_worst, rating_source, test_reports{count, average_grade, grade_scale, testers[]}, highlights[], pros[], cons[], specs[]{group, label, value}, specs_count, variants[]{product_id, title, url, ean, price_min, price_max, offer_count}, variant_count, faq[]{question, answer}, user_reviews[]{author, date, rating, body, pros, cons}} + country + price_basis","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"203505482"}},{"name":"product/offers","description":"THE POINT OF THIS ENGINE: every merchant selling one product, in one call. Each offer carries the merchant's name, idealo shop id and shop page, the city the shop ships from, its idealo star rating and how many ratings it has, the item price, the total price including shipping and the shipping cost derived from the two, the delivery window, which carriers deliver it, the free-return terms, the payment methods the shop accepts, and the merchant's own title for the item (which often names the exact colour variant). On marketplace offers (eBay, Kaufland, Fnac, MediaMarkt and the like) `seller` is the marketplace and `marketplace_seller.name` is the third-party merchant idealo prints under 'Verkauf durch'; idealo publishes no id for that merchant. `variant_ean` is the EAN of the variant idealo matched the offer to, not one the merchant declared. Sort by item price or by total price including shipping. idealo lists 20 offers per request and this action pages through them up to `max_offers`. Only NEW offers are reachable — idealo puts its used listings behind an encrypted filter token — so `price_used_from` in `product/detail` is where the used floor comes from. `country` picks the storefront: idealo.fr, .it, .es, .co.uk and .at each have their own merchants and prices for the same product id.","required_params":["product_id"],"optional_params":["max_offers","sort","country"],"params":[{"name":"product_id","type":"string","required":true,"description":"idealo product id — the number in /preisvergleich/OffersOfProduct/<id>_-<slug>.html (de/at), /prix/<id>/… (fr), /confronta-prezzi/<id>/… (it), /precios/<id>/… (es) or /compare/<id>/… (uk). A full product URL works too; the slug is cosmetic and the bare id resolves on its own. Product ids are the same on every idealo storefront. `search` returns this id on every PRODUCT row.","on_invalid":"reject","example":"203505482","aliases":["id","product","url","product_url"]},{"name":"max_offers","type":"integer","required":false,"description":"How many merchant offers to return (1-500, default 100). idealo serves 20 offers per request, so this decides how many requests the call makes: 20 = one, 100 = up to five. Most products have fewer than 40 offers, in which case the call stops as soon as idealo runs out.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":500,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Offer ordering. `price` sorts on the item price alone; `total_price` is idealo's 'günstigster Gesamtpreis' — item plus shipping — which reorders the table whenever a cheap listing carries expensive delivery. These are the only two orderings idealo honours on this route; anything else is accepted upstream and silently ignored, so it is rejected here.","on_invalid":"reject","allowed_values":[{"value":"price","label":"Item price, cheapest first (idealo's default)"},{"value":"total_price","label":"Total price including shipping, cheapest first"}],"default":"price"},{"name":"country","type":"enum","required":false,"description":"Which idealo storefront to read. Each country has its own merchants, prices, currency, shipping and language, so the same product id returns a different offer table on each (the Galaxy S26 Ultra had 400 offers on idealo.at and 219 on idealo.co.uk, the same hour). Prices are in EUR everywhere except uk, which is GBP; every response says which in `currency`. Default de, so calls written before this parameter existed are unchanged. If you pass a full idealo URL as the id and leave this out, the storefront is taken from the URL's host.","on_invalid":"reject","allowed_values":[{"value":"de","label":"idealo.de — Germany, EUR (default)"},{"value":"at","label":"idealo.at — Austria, EUR"},{"value":"fr","label":"idealo.fr — France, EUR"},{"value":"it","label":"idealo.it — Italy, EUR"},{"value":"es","label":"idealo.es — Spain, EUR"},{"value":"uk","label":"idealo.co.uk — United Kingdom, GBP"}],"default":"de","aliases":["site","market","marketplace"]}],"returns":"product{product_id, title, url, price_min, price_max, currency, offer_count, price_new_from, price_used_from} + offers[]{position, offer_key, seller{id, name, url, location, type, rating, rating_count}, marketplace_seller{name} (null on a shop's own offer), price (number), price_display, currency (EUR, GBP on uk), total_price (number), total_price_display, shipping_cost, offer_title, offer_url, in_stock, delivery_time, delivery_by, delivery_providers[], free_return, payment_methods[], variant_product_id, variant_title, variant_ean, condition='new'} + count + total_offers + seller_count + has_more + country + price_basis","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":2},"example_params":{"product_id":"203505482","max_offers":40}}]},{"name":"ifood","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"iFood API — live iFood Brazil data: restaurants, iFood Mercado supermarkets, pharmacies, drink shops and pet shops delivering to an address with delivery fee, delivery time, rating and distance; a store's full menu or grocery catalogue with prices, struck-through prices, promotions, EAN and availability; and product search across every store nearby or inside one store. BRL. No login.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ifood/v1","spec_available":true,"actions":[{"name":"stores","description":"Stores that deliver to a location in Brazil, in iFood's own feed order for one tab (restaurants, groceries, pharmacy, drinks, pets, shopping): delivery fee, delivery time range, rating, distance, open now, category, super-restaurant / new / exclusive flags, link. 36 per page, next page through the feed's own cursor.","required_params":["latitude","longitude"],"optional_params":["type","cursor"],"params":[{"name":"latitude","type":"number","required":true,"description":"Delivery location latitude in Brazil (e.g. -23.5613 = Av. Paulista, São Paulo). Required: fees, delivery times and the stores shown depend on it; there is no default location.","on_invalid":"reject","example":-23.5613,"minimum":-34,"maximum":6,"aliases":["lat"]},{"name":"longitude","type":"number","required":true,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":-46.6565,"minimum":-74,"maximum":-34,"aliases":["lon","lng"]},{"name":"type","type":"enum","required":false,"description":"iFood tab: restaurants (default), groceries (Mercados), pharmacy (Farmácias), drinks (Bebidas), pets, shopping.","on_invalid":"reject","allowed_values":[{"value":"restaurants","label":"Restaurants (iFood home feed)"},{"value":"groceries","label":"Mercados — supermarkets and iFood Mercado"},{"value":"pharmacy","label":"Farmácias"},{"value":"drinks","label":"Bebidas — drink and liquor shops"},{"value":"pets","label":"Pet shops"},{"value":"shopping","label":"Shopping — other retail"}],"default":"restaurants","example":"groceries","aliases":["vertical","category"]},{"name":"cursor","type":"string","required":false,"description":"pagination.next_cursor of the previous page (same location and type).","on_invalid":"reject","example":"","aliases":["next_cursor"]}],"returns":"data.stores[]: store_id, name, slug, url, main_category, super_category, open_now, delivery_type, delivery_fee_listed (BRL), delivery_estimate_min, delivery_estimate_max (minutes), rating_score (0-5), distance_km, currency, is_new, super_restaurant, ifood_delivery, exclusive, sponsored, image, summary_text; data.type; data.location {latitude, longitude}; data.pagination {page_size, has_more, next_cursor}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"latitude":-23.5613,"longitude":-46.6565,"type":"groceries"}},{"name":"store","description":"One iFood store: details (legal name, CNPJ, address, opening hours, rating and count, price band, minimum order, open now, payment methods) and its menu / catalogue by section with price, struck-through price, discount %, 'from' price, promotional price, EAN, availability and photo. With category_id: that one aisle in full, page by page.","required_params":["store_id"],"optional_params":["latitude","longitude","category_id","page","limit"],"params":[{"name":"store_id","type":"string","required":true,"description":"Store id (`store_id` of a stores or search row, a UUID) or the store's iFood URL (https://www.ifood.com.br/delivery/<city>/<store>/<id>).","on_invalid":"reject","example":"53854c59-edb9-4275-b9fe-3abac5f51e21","aliases":["merchant_id","id","url"]},{"name":"latitude","type":"number","required":false,"description":"Optional delivery latitude (with longitude).","on_invalid":"reject","example":-23.5613,"minimum":-34,"maximum":6,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Optional delivery longitude.","on_invalid":"reject","example":-46.6565,"minimum":-74,"maximum":-34,"aliases":["lon","lng"]},{"name":"category_id","type":"string","required":false,"description":"Return ONE aisle/menu section in full, page by page (`category_id` from this store's `categories`). Grocery overviews show at most 16 items per aisle; use this for the rest (Imigrantes Bebidas beer aisle: 2,283 items, 23 pages of 100).","on_invalid":"reject","example":"d305cce3-8de5-4c33-9ada-12ab10e3993f","aliases":["aisle_id"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Items per aisle page (1-100).","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":100,"aliases":["page_size"]}],"returns":"data.store {store_id, short_id, name, legal_name, cnpj, slug, url, store_type, main_category, rating_score, rating_count, price_range, minimum_order, open_now, takeout_time_minutes, preparation_time_minutes, features[], payment_codes[], address {street, number, district, city, state, postal_code, country, latitude, longitude}, opening_hours[] {day, start, duration_minutes}, logo, currency}; data.categories[] {category_id, name, item_count_shown, items_truncated}; data.items[] {item_id, name, details, price, original_price, discount_pct, price_from, promotional_price, promotional_price_from, currency, available, availability, needs_choices, ean, plu_code, sold_by_weight, tags[], image, category_id, category_name}; with category_id: data.pagination {page, limit, total_items, total_pages, has_more}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"53854c59-edb9-4275-b9fe-3abac5f51e21"}},{"name":"search","description":"Search products and dishes by name across the stores delivering to a location, or inside one store: each row with price, struck-through price, discount, EAN, category and the store selling it (fee, delivery time, rating, rating count, distance, open now).","required_params":["query","latitude","longitude"],"optional_params":["store_id","page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Product or dish to search, as typed in iFood's search box ('leite', 'dipirona', 'pizza', 'cerveja heineken').","on_invalid":"reject","example":"leite","aliases":["q","term","keyword"]},{"name":"latitude","type":"number","required":true,"description":"Delivery location latitude in Brazil (e.g. -23.5613 = Av. Paulista, São Paulo). Required: fees, delivery times and the stores shown depend on it; there is no default location.","on_invalid":"reject","example":-23.5613,"minimum":-34,"maximum":6,"aliases":["lat"]},{"name":"longitude","type":"number","required":true,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":-46.6565,"minimum":-74,"maximum":-34,"aliases":["lon","lng"]},{"name":"store_id","type":"string","required":false,"description":"Search only inside this store (its `store_id`).","on_invalid":"reject","example":"7e61205a-bdec-4b89-9cd1-b6b075592e52","aliases":["merchant_id"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":36,"example":36,"minimum":1,"maximum":100,"aliases":["page_size","size"]}],"returns":"data.items[]: item_id, name, details, price, original_price, discount_pct, price_from, currency, available, ean, category_name, taxonomy[], image, store {store_id, name, slug, url, main_category, open_now, delivery_fee_listed, delivery_fee_type, delivery_estimate_min, delivery_estimate_max, rating_score, rating_count, distance_km}, name_matches_query; data.matched_rows; data.pagination {page, limit, has_more}; data.query; data.location.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"leite","latitude":-23.5613,"longitude":-46.6565}}]},{"name":"iga","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"IGA Australia supermarket: per-store prices, specials, nutrition and store finder","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/iga/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search at one store, with brand and category filters.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Keyword (the source rejects an empty search; browse with category/products).","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"brand","type":"string","required":false,"description":"Exact brand facet value.","on_invalid":"reject","example":"A2 Milk"},{"name":"category_name","type":"string","required":false,"description":"Exact category facet value (as returned in facets).","on_invalid":"reject","example":"Full Cream"},{"name":"sort","type":"enum","required":false,"description":"The site's own sort list.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"brand_asc","label":"brand_asc"},{"value":"brand_desc","label":"brand_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Products per page.","on_invalid":"reject","default":24,"minimum":1,"maximum":100},{"name":"store_id","type":"string","required":false,"description":"IGA store number from stores. Prices differ by store.","on_invalid":"reject","example":"32600"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; picks the IGA online store in that postcode.","on_invalid":"reject","example":"2759"},{"name":"latitude","type":"number","required":false,"description":"With longitude: the nearest IGA online store.","on_invalid":"reject","example":-33.87,"minimum":-45,"maximum":-9},{"name":"longitude","type":"number","required":false,"description":"With latitude.","on_invalid":"reject","example":151.21,"minimum":112,"maximum":155}],"returns":"Products with that store's AUD price, was price, special (label, price, dates), unit price, pack size, availability; pagination, facets and the chosen store.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk","limit":12}},{"name":"category/products","description":"Every product in one category at one store (the way to sweep a whole store).","required_params":["category"],"optional_params":[],"params":[{"name":"category","type":"string","required":true,"description":"Category id from categories (e.g. Dairy_Eggs_and_Fridge, Milk_and_Cream).","on_invalid":"reject","example":"Milk_and_Cream"},{"name":"brand","type":"string","required":false,"description":"Exact brand facet value.","on_invalid":"reject","example":"A2 Milk"},{"name":"category_name","type":"string","required":false,"description":"Exact category facet value (as returned in facets).","on_invalid":"reject","example":"Full Cream"},{"name":"sort","type":"enum","required":false,"description":"The site's own sort list.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"brand_asc","label":"brand_asc"},{"value":"brand_desc","label":"brand_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Products per page.","on_invalid":"reject","default":24,"minimum":1,"maximum":100},{"name":"store_id","type":"string","required":false,"description":"IGA store number from stores. Prices differ by store.","on_invalid":"reject","example":"32600"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; picks the IGA online store in that postcode.","on_invalid":"reject","example":"2759"},{"name":"latitude","type":"number","required":false,"description":"With longitude: the nearest IGA online store.","on_invalid":"reject","example":-33.87,"minimum":-45,"maximum":-9},{"name":"longitude","type":"number","required":false,"description":"With latitude.","on_invalid":"reject","example":151.21,"minimum":112,"maximum":155}],"returns":"Products with prices and specials, pagination, facets and the chosen store.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"Milk_and_Cream"}},{"name":"specials","description":"All products on special at one store, with was price, markdown, label and validity dates.","required_params":[],"optional_params":["brand","category_name","sort","page","limit","store_id","postcode","latitude","longitude"],"params":[{"name":"brand","type":"string","required":false,"description":"Exact brand facet value.","on_invalid":"reject","example":"A2 Milk"},{"name":"category_name","type":"string","required":false,"description":"Exact category facet value (as returned in facets).","on_invalid":"reject","example":"Full Cream"},{"name":"sort","type":"enum","required":false,"description":"The site's own sort list.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"brand_asc","label":"brand_asc"},{"value":"brand_desc","label":"brand_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"One-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Products per page.","on_invalid":"reject","default":24,"minimum":1,"maximum":100},{"name":"store_id","type":"string","required":false,"description":"IGA store number from stores. Prices differ by store.","on_invalid":"reject","example":"32600"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; picks the IGA online store in that postcode.","on_invalid":"reject","example":"2759"},{"name":"latitude","type":"number","required":false,"description":"With longitude: the nearest IGA online store.","on_invalid":"reject","example":-33.87,"minimum":-45,"maximum":-9},{"name":"longitude","type":"number","required":false,"description":"With latitude.","on_invalid":"reject","example":151.21,"minimum":112,"maximum":155}],"returns":"Specials with price, was price, discount %, special label and effective dates; pagination, facets and the chosen store.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"limit":24}},{"name":"product/detail","description":"One product at one store: label, nutrition, specials and IGA Cash promotions.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"IGA product sku (from search) or a igashop.com.au/product/<sku> URL.","on_invalid":"reject","example":"726347","aliases":["sku","url"]},{"name":"store_id","type":"string","required":false,"description":"IGA store number from stores. Prices differ by store.","on_invalid":"reject","example":"32600"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; picks the IGA online store in that postcode.","on_invalid":"reject","example":"2759"},{"name":"latitude","type":"number","required":false,"description":"With longitude: the nearest IGA online store.","on_invalid":"reject","example":-33.87,"minimum":-45,"maximum":-9},{"name":"longitude","type":"number","required":false,"description":"With latitude.","on_invalid":"reject","example":151.21,"minimum":112,"maximum":155}],"returns":"Identity, store price, was price, special, unit price, description, ingredients, nutrition profiles, servings, images, IGA Cash points promotions, aisle location, restrictions.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"726347"}},{"name":"categories","description":"The store's category tree.","required_params":[],"optional_params":["store_id","postcode","latitude","longitude"],"params":[{"name":"store_id","type":"string","required":false,"description":"IGA store number from stores. Prices differ by store.","on_invalid":"reject","example":"32600"},{"name":"postcode","type":"string","required":false,"description":"4-digit postcode; picks the IGA online store in that postcode.","on_invalid":"reject","example":"2759"},{"name":"latitude","type":"number","required":false,"description":"With longitude: the nearest IGA online store.","on_invalid":"reject","example":-33.87,"minimum":-45,"maximum":-9},{"name":"longitude","type":"number","required":false,"description":"With latitude.","on_invalid":"reject","example":151.21,"minimum":112,"maximum":155}],"returns":"Category ids and names, nested; use the id with category/products.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"store_id":"32600"}},{"name":"stores","description":"IGA stores that trade online, with address, coordinates and online modes; optional state/postcode filter.","required_params":[],"optional_params":["state","postcode","latitude","longitude","limit"],"params":[{"name":"state","type":"enum","required":false,"description":"Filter by state.","on_invalid":"reject","allowed_values":[{"value":"NSW","label":"NSW"},{"value":"VIC","label":"VIC"},{"value":"QLD","label":"QLD"},{"value":"WA","label":"WA"},{"value":"SA","label":"SA"},{"value":"TAS","label":"TAS"},{"value":"ACT","label":"ACT"},{"value":"NT","label":"NT"}]},{"name":"postcode","type":"string","required":false,"description":"Filter by exact postcode.","on_invalid":"reject","example":"2000"},{"name":"latitude","type":"number","required":false,"description":"With longitude: sort by distance and add distance_km.","on_invalid":"reject","minimum":-45,"maximum":-9},{"name":"longitude","type":"number","required":false,"description":"With latitude.","on_invalid":"reject","minimum":112,"maximum":155},{"name":"limit","type":"integer","required":false,"description":"Stores to return.","on_invalid":"reject","default":50,"minimum":1,"maximum":1000}],"returns":"Stores with store_id, name, address, suburb, state, postcode, coordinates, online modes and opening hours.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"postcode":"2000"}}]},{"name":"iga-qc","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"IGA Québec API — store-level grocery prices for IGA and IGA extra stores in Quebec: regular price, current sale with end date, per-kg pricing, Scene+ points, stock flag, UPCs, stores","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/iga-qc/v1","spec_available":true,"actions":[{"name":"stores","description":"IGA stores in Quebec with their store number (for every other action): name, address, postal code, phone, opening hours, coordinates. Nearest first with `lat`+`lon` or `postal_code`; or look one up by `store_id`; or match a name / city with `query`.","required_params":[],"optional_params":["store_id","query","lat","lon","limit"],"params":[{"name":"store_id","type":"string","required":false,"description":"One store by its number.","on_invalid":"reject","example":"0444","aliases":["store","store_number"]},{"name":"query","type":"string","required":false,"description":"Free text matched against store name, city and address.","on_invalid":"reject","example":"Levis","aliases":["q","city","name"]},{"name":"lat","type":"number","required":false,"description":"Latitude (with `lon`): stores nearest first, with distance_km.","on_invalid":"reject","example":"46.7328"},{"name":"lon","type":"number","required":false,"description":"Longitude, with `lat`.","on_invalid":"reject","example":"-71.2679","aliases":["lng"]},{"name":"limit","type":"integer","required":false,"description":"At most this many stores.","on_invalid":"reject","default":10,"minimum":1,"maximum":100}],"returns":"total, returned, stores[]{store_id, name, banner, address, city, province, postal_code, phone, lat, lon, shop_type, store_hours{monday…sunday}, url, distance_km}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"lat":"46.7328","lon":"-71.2679","limit":"5"}},{"name":"search","description":"Search one IGA store's shelf: regular price, the current sale price and its end date, per-kg or per-item basis, Scene+ points, multi-buy, in-stock flag, UPCs and pack size per row.","required_params":["query","store_id"],"optional_params":["page","page_size","sort","category","on_sale","language"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (product words, a brand or a UPC). May be empty when `category` is given (browse the aisle).","on_invalid":"reject","example":"milk","aliases":["q","keyword","term"]},{"name":"store_id","type":"string","required":true,"description":"The IGA store number (4 digits, e.g. 0444 = IGA extra St-Romuald, Lévis). Prices, sales and stock are that store's. Get numbers from the `stores` action.","on_invalid":"reject","example":"0444","aliases":["store","storeId","store_number"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["limit","size"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"}],"default":"relevance"},{"name":"category","type":"string","required":false,"description":"Only this category, as the `categories` action or a row's category / subcategory prints it (English names).","on_invalid":"reject","example":"Fresh Fruits & Vegetables > Fruits","aliases":["category_path"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only products with a promotion running now at this store.","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"Language of product texts.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang"]}],"returns":"query, store_id, store_name, store_address, page, page_size, total (source count), returned, has_next, results[]{product_id, article_number, store_id, title, brand, upcs[], uom, package_size, package_count, shipping_weight, max_weight_kg, price (what you pay now), currency, regular_price, sale_price, on_sale, sale_valid_from, sale_valid_to, sale_promotion_number, sale_requires_loyalty_card, price_basis ('per_item' | 'per_kg'), price_unit, price_per_kg, regular_price_per_kg, estimated_item_price (always null: not published), member_price (Scene+ member flyer price when the store publishes one), multi_buy[], scene_plus_points, percent_off[], active_promotions[], upcoming_promotions[], in_stock, stock_status, category, subcategory, category_path, image, source_updated_at, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk","store_id":"0444"}},{"name":"product","description":"One product at one IGA store, by product_id (as a row returns it), article number, UPC / GTIN or produce PLU: every price field with dates, all running and coming promotions, stock flag, UPCs, pack size, category, description, image and the product page.","required_params":["store_id"],"optional_params":["product_id","upc","plu","language"],"params":[{"name":"store_id","type":"string","required":true,"description":"The IGA store number (4 digits, e.g. 0444 = IGA extra St-Romuald, Lévis). Prices, sales and stock are that store's. Get numbers from the `stores` action.","on_invalid":"reject","example":"0444","aliases":["store","storeId","store_number"]},{"name":"product_id","type":"string","required":false,"description":"The `product_id` of a row (38512_EA_0444), or its article number (38512 / 38512_EA).","on_invalid":"reject","example":"38512_EA","aliases":["id","article_number","objectID"]},{"name":"upc","type":"string","required":false,"description":"A UPC / GTIN printed on the pack (8-14 digits). Exact match only.","on_invalid":"reject","example":"061328801366","aliases":["gtin","barcode","ean"]},{"name":"plu","type":"string","required":false,"description":"A 4-5 digit produce PLU (4023 = red seedless grapes); matched through the PLU-embedded UPC the store indexes.","on_invalid":"reject","example":"4023"},{"name":"language","type":"enum","required":false,"description":"Language of product texts.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang"]}],"returns":"store_id, store_name, store_address, matched_by, fetched_at, product{product_id, article_number, store_id, title, brand, upcs[], uom, package_size, package_count, shipping_weight, max_weight_kg, price (what you pay now), currency, regular_price, sale_price, on_sale, sale_valid_from, sale_valid_to, sale_promotion_number, sale_requires_loyalty_card, price_basis ('per_item' | 'per_kg'), price_unit, price_per_kg, regular_price_per_kg, estimated_item_price (always null: not published), member_price (Scene+ member flyer price when the store publishes one), multi_buy[], scene_plus_points, percent_off[], active_promotions[], upcoming_promotions[], in_stock, stock_status, category, subcategory, category_path, image, source_updated_at, url} + description, country_of_origin, product_of_canada, gtin","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"store_id":"0444","upc":"061328801366"}},{"name":"deals","description":"Everything with a promotion running now at one IGA store (this week's flyer prices, Scene+ points offers), optionally inside one category or matching a word.","required_params":["store_id"],"optional_params":["query","category","page","page_size","sort","language"],"params":[{"name":"store_id","type":"string","required":true,"description":"The IGA store number (4 digits, e.g. 0444 = IGA extra St-Romuald, Lévis). Prices, sales and stock are that store's. Get numbers from the `stores` action.","on_invalid":"reject","example":"0444","aliases":["store","storeId","store_number"]},{"name":"query","type":"string","required":false,"description":"Optional words to narrow the deals.","on_invalid":"reject","aliases":["q"]},{"name":"category","type":"string","required":false,"description":"Only this category, as the `categories` action or a row's category / subcategory prints it (English names).","on_invalid":"reject","example":"Fresh Fruits & Vegetables > Fruits","aliases":["category_path"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["limit","size"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"}],"default":"relevance"},{"name":"language","type":"enum","required":false,"description":"Language of product texts.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang"]}],"returns":"store_id, page, total, returned, has_next, results[]{product_id, article_number, store_id, title, brand, upcs[], uom, package_size, package_count, shipping_weight, max_weight_kg, price (what you pay now), currency, regular_price, sale_price, on_sale, sale_valid_from, sale_valid_to, sale_promotion_number, sale_requires_loyalty_card, price_basis ('per_item' | 'per_kg'), price_unit, price_per_kg, regular_price_per_kg, estimated_item_price (always null: not published), member_price (Scene+ member flyer price when the store publishes one), multi_buy[], scene_plus_points, percent_off[], active_promotions[], upcoming_promotions[], in_stock, stock_status, category, subcategory, category_path, image, source_updated_at, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"0444"}},{"name":"categories","description":"The category tree of one IGA store with product counts (department and aisle level), to use as `category` in search and deals.","required_params":["store_id"],"optional_params":["language"],"params":[{"name":"store_id","type":"string","required":true,"description":"The IGA store number (4 digits, e.g. 0444 = IGA extra St-Romuald, Lévis). Prices, sales and stock are that store's. Get numbers from the `stores` action.","on_invalid":"reject","example":"0444","aliases":["store","storeId","store_number"]},{"name":"language","type":"enum","required":false,"description":"Language of product texts.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang"]}],"returns":"store_id, total_products, departments[]{name, count}, aisles[]{path, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"store_id":"0444"}}]},{"name":"iherb","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"iHerb — supplements & natural health, priced per country","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/iherb/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on one country's storefront. Returns the storefront's own result total plus the filtered total so a filter's effect is visible.","required_params":["keyword"],"optional_params":["country","page","page_size","sort","rating_band","brand_codes","category_ids","price_ranges","health_topics","attribute_ids","in_stock_only","programs"],"params":[{"name":"keyword","type":"string","required":true,"description":"What to search for.","on_invalid":"reject","example":"vitamin c","aliases":["q","kw","query"]},{"name":"country","type":"enum","required":false,"description":"Which national storefront to price against. Prices, availability and even the number of matching products differ per storefront.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE — AED"},{"value":"AU","label":"AU — AUD"},{"value":"BR","label":"BR — BRL"},{"value":"CA","label":"CA — CAD"},{"value":"DE","label":"DE — EUR"},{"value":"ES","label":"ES — EUR"},{"value":"FR","label":"FR — EUR"},{"value":"GB","label":"GB — GBP"},{"value":"HK","label":"HK — HKD"},{"value":"IL","label":"IL — ILS"},{"value":"IN","label":"IN — INR"},{"value":"IT","label":"IT — EUR"},{"value":"JP","label":"JP — JPY"},{"value":"KR","label":"KR — KRW"},{"value":"MX","label":"MX — MXN"},{"value":"MY","label":"MY — MYR"},{"value":"NL","label":"NL — EUR"},{"value":"NZ","label":"NZ — NZD"},{"value":"PH","label":"PH — PHP"},{"value":"PL","label":"PL — PLN"},{"value":"SA","label":"SA — SAR"},{"value":"SE","label":"SE — SEK"},{"value":"SG","label":"SG — SGD"},{"value":"TH","label":"TH — THB"},{"value":"TR","label":"TR — TRY"},{"value":"TW","label":"TW — TWD"},{"value":"UA","label":"UA — USD"},{"value":"US","label":"US — USD"},{"value":"VN","label":"VN — VND"},{"value":"ZA","label":"ZA — ZAR"}],"default":"US","example":"JP","aliases":["cc","market","storefront"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page. iHerb serves at most 48.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"sort","type":"enum","required":false,"description":"Result order. NOTE: iHerb's sorted result set is SMALLER than its unsorted one (measured 14807 -> 10559 for the same keyword), so sorting changes which products you see, not just their order.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"featured"},{"value":"relevance","label":"relevance"},{"value":"best_sellers","label":"best sellers"},{"value":"top_rated","label":"top rated"},{"value":"most_rated","label":"most rated"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"newest","label":"newest"},{"value":"heaviest","label":"heaviest"},{"value":"lightest","label":"lightest"},{"value":"highest_discount","label":"highest discount"}],"example":"price_asc"},{"name":"rating_band","type":"integer","required":false,"description":"iHerb's star BAND, 1-5. This is a band, NOT a minimum: measured on one storefront, band 5 returns products rated about 4.8 and up, band 4 about 3.8-4.7, band 3 about 2.8-3.7. Asking for 3 therefore EXCLUDES 4- and 5-star products. The `filters` action prints how many products sit in each band.","on_invalid":"reject","example":5,"minimum":1,"maximum":5,"aliases":["min_rating","rating"]},{"name":"brand_codes","type":"array","required":false,"description":"iHerb brand codes, e.g. NOW. Discover them with the `filters` action.","on_invalid":"reject","example":["NOW"],"aliases":["brand_code","brand"]},{"name":"category_ids","type":"array","required":false,"description":"iHerb category ids; see the `filters` action.","on_invalid":"reject","example":["105815"]},{"name":"price_ranges","type":"array","required":false,"description":"iHerb price-band ids (they are bands, not amounts; the band's boundaries are in that storefront's own currency).","on_invalid":"reject","example":["3"]},{"name":"health_topics","type":"array","required":false,"description":"Health-topic ids, e.g. Immune Support; see the `filters` action.","on_invalid":"reject"},{"name":"attribute_ids","type":"array","required":false,"description":"Attribute value ids — diet/certification/form/age; see `filters`.","on_invalid":"reject"},{"name":"programs","type":"array","required":false,"description":"Programme ids, e.g. iTested.","on_invalid":"reject"},{"name":"in_stock_only","type":"boolean","required":false,"description":"Drop out-of-stock products.","on_invalid":"reject","default":false,"example":true}],"returns":"{ total, returned, products[], country, currency, sort_changes_population } — each product carries price_amount + currency + the storefront it came from.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"keyword":"vitamin c","country":"US"}},{"name":"category","description":"Browse one catalogue category on one country's storefront.","required_params":["slug"],"optional_params":["country","page","page_size","sort","rating_band","brand_codes","category_ids","price_ranges","health_topics","attribute_ids","in_stock_only","programs"],"params":[{"name":"slug","type":"string","required":true,"description":"Category slug from the URL, e.g. vitamin-c. List them with `categories`.","on_invalid":"reject","example":"vitamin-c","aliases":["category","category_slug"]},{"name":"country","type":"enum","required":false,"description":"Which national storefront to price against.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE — AED"},{"value":"AU","label":"AU — AUD"},{"value":"BR","label":"BR — BRL"},{"value":"CA","label":"CA — CAD"},{"value":"DE","label":"DE — EUR"},{"value":"ES","label":"ES — EUR"},{"value":"FR","label":"FR — EUR"},{"value":"GB","label":"GB — GBP"},{"value":"HK","label":"HK — HKD"},{"value":"IL","label":"IL — ILS"},{"value":"IN","label":"IN — INR"},{"value":"IT","label":"IT — EUR"},{"value":"JP","label":"JP — JPY"},{"value":"KR","label":"KR — KRW"},{"value":"MX","label":"MX — MXN"},{"value":"MY","label":"MY — MYR"},{"value":"NL","label":"NL — EUR"},{"value":"NZ","label":"NZ — NZD"},{"value":"PH","label":"PH — PHP"},{"value":"PL","label":"PL — PLN"},{"value":"SA","label":"SA — SAR"},{"value":"SE","label":"SE — SEK"},{"value":"SG","label":"SG — SGD"},{"value":"TH","label":"TH — THB"},{"value":"TR","label":"TR — TRY"},{"value":"TW","label":"TW — TWD"},{"value":"UA","label":"UA — USD"},{"value":"US","label":"US — USD"},{"value":"VN","label":"VN — VND"},{"value":"ZA","label":"ZA — ZAR"}],"default":"US","example":"DE","aliases":["cc","market"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Max 48.","on_invalid":"reject","default":24,"minimum":1,"maximum":48},{"name":"sort","type":"enum","required":false,"description":"Result order; see the note on `search.sort` — sorting shrinks the set.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"featured"},{"value":"relevance","label":"relevance"},{"value":"best_sellers","label":"best sellers"},{"value":"top_rated","label":"top rated"},{"value":"most_rated","label":"most rated"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"newest","label":"newest"},{"value":"heaviest","label":"heaviest"},{"value":"lightest","label":"lightest"},{"value":"highest_discount","label":"highest discount"}]},{"name":"rating_band","type":"integer","required":false,"description":"iHerb's star BAND, 1-5. This is a band, NOT a minimum: measured on one storefront, band 5 returns products rated about 4.8 and up, band 4 about 3.8-4.7, band 3 about 2.8-3.7. Asking for 3 therefore EXCLUDES 4- and 5-star products. The `filters` action prints how many products sit in each band.","on_invalid":"reject","example":5,"minimum":1,"maximum":5,"aliases":["min_rating","rating"]},{"name":"brand_codes","type":"array","required":false,"description":"iHerb brand codes.","on_invalid":"reject"},{"name":"category_ids","type":"array","required":false,"description":"Narrow to sub-category ids.","on_invalid":"reject"},{"name":"price_ranges","type":"array","required":false,"description":"Price-band ids.","on_invalid":"reject"},{"name":"health_topics","type":"array","required":false,"description":"Health-topic ids.","on_invalid":"reject"},{"name":"attribute_ids","type":"array","required":false,"description":"Attribute value ids.","on_invalid":"reject"},{"name":"programs","type":"array","required":false,"description":"Programme ids.","on_invalid":"reject"},{"name":"in_stock_only","type":"boolean","required":false,"description":"Drop out-of-stock products.","on_invalid":"reject","default":false}],"returns":"{ total, returned, products[], category, breadcrumbs, country, currency }","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"slug":"vitamin-c"}},{"name":"detail","description":"One product in full on one country's storefront: price, stock count, supplement facts, ingredients, pack size, rating, shipping weight.","required_params":["product_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"integer","required":true,"description":"iHerb numeric product id — the last path segment of a product URL.","on_invalid":"reject","example":1135,"aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which national storefront to price against.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE — AED"},{"value":"AU","label":"AU — AUD"},{"value":"BR","label":"BR — BRL"},{"value":"CA","label":"CA — CAD"},{"value":"DE","label":"DE — EUR"},{"value":"ES","label":"ES — EUR"},{"value":"FR","label":"FR — EUR"},{"value":"GB","label":"GB — GBP"},{"value":"HK","label":"HK — HKD"},{"value":"IL","label":"IL — ILS"},{"value":"IN","label":"IN — INR"},{"value":"IT","label":"IT — EUR"},{"value":"JP","label":"JP — JPY"},{"value":"KR","label":"KR — KRW"},{"value":"MX","label":"MX — MXN"},{"value":"MY","label":"MY — MYR"},{"value":"NL","label":"NL — EUR"},{"value":"NZ","label":"NZ — NZD"},{"value":"PH","label":"PH — PHP"},{"value":"PL","label":"PL — PLN"},{"value":"SA","label":"SA — SAR"},{"value":"SE","label":"SE — SEK"},{"value":"SG","label":"SG — SGD"},{"value":"TH","label":"TH — THB"},{"value":"TR","label":"TR — TRY"},{"value":"TW","label":"TW — TWD"},{"value":"UA","label":"UA — USD"},{"value":"US","label":"US — USD"},{"value":"VN","label":"VN — VND"},{"value":"ZA","label":"ZA — ZAR"}],"default":"US","example":"US","aliases":["cc","market"]}],"returns":"A product record. `supplement_facts` is a row list parsed out of iHerb's own table; `ingredients`/`warnings`/`suggested_use` are plain text.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":1135,"country":"US"}},{"name":"batch_detail","description":"Up to 20 products in one call, on one storefront. iHerb has no batch route of its own, so this fans out — but it is priced below the equivalent single calls.","required_params":["product_ids"],"optional_params":["country"],"params":[{"name":"product_ids","type":"array","required":true,"description":"Up to 20 iHerb product ids.","on_invalid":"reject","example":[1135,468,475],"aliases":["ids","pids"]},{"name":"country","type":"enum","required":false,"description":"Which national storefront to price against.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE — AED"},{"value":"AU","label":"AU — AUD"},{"value":"BR","label":"BR — BRL"},{"value":"CA","label":"CA — CAD"},{"value":"DE","label":"DE — EUR"},{"value":"ES","label":"ES — EUR"},{"value":"FR","label":"FR — EUR"},{"value":"GB","label":"GB — GBP"},{"value":"HK","label":"HK — HKD"},{"value":"IL","label":"IL — ILS"},{"value":"IN","label":"IN — INR"},{"value":"IT","label":"IT — EUR"},{"value":"JP","label":"JP — JPY"},{"value":"KR","label":"KR — KRW"},{"value":"MX","label":"MX — MXN"},{"value":"MY","label":"MY — MYR"},{"value":"NL","label":"NL — EUR"},{"value":"NZ","label":"NZ — NZD"},{"value":"PH","label":"PH — PHP"},{"value":"PL","label":"PL — PLN"},{"value":"SA","label":"SA — SAR"},{"value":"SE","label":"SE — SEK"},{"value":"SG","label":"SG — SGD"},{"value":"TH","label":"TH — THB"},{"value":"TR","label":"TR — TRY"},{"value":"TW","label":"TW — TWD"},{"value":"UA","label":"UA — USD"},{"value":"US","label":"US — USD"},{"value":"VN","label":"VN — VND"},{"value":"ZA","label":"ZA — ZAR"}],"default":"US","aliases":["cc","market"]}],"returns":"{ requested, returned, products[], not_found[] }","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_ids":[1135,468,475]}},{"name":"price_by_country","description":"The same product priced across several national storefronts in one call — price, currency, availability and shipping restrictions side by side. This is what iHerb being a cross-border retailer actually means in data.","required_params":["product_id"],"optional_params":["countries"],"params":[{"name":"product_id","type":"integer","required":true,"description":"iHerb numeric product id.","on_invalid":"reject","example":1135,"aliases":["id","pid"]},{"name":"countries","type":"array","required":false,"description":"Storefronts to compare, max 12. Defaults to US, GB, DE, JP, KR.","on_invalid":"reject","example":["US","GB","DE","JP"],"aliases":["country","markets","cc"]}],"returns":"{ product_id, name, brand, markets[] } — one row per storefront with price_amount, currency, in_stock and the local display price.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":1135,"countries":["US","JP"]}},{"name":"reviews","description":"Customer reviews for a product, with the per-star breakdown and iHerb's own summary of them. Public — no account is involved.","required_params":["product_id"],"optional_params":["country","page"],"params":[{"name":"product_id","type":"integer","required":true,"description":"iHerb numeric product id.","on_invalid":"reject","example":468,"aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Storefront to read reviews from — it decides the language they are shown in and which reviews are surfaced.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE — AED"},{"value":"AU","label":"AU — AUD"},{"value":"BR","label":"BR — BRL"},{"value":"CA","label":"CA — CAD"},{"value":"DE","label":"DE — EUR"},{"value":"ES","label":"ES — EUR"},{"value":"FR","label":"FR — EUR"},{"value":"GB","label":"GB — GBP"},{"value":"HK","label":"HK — HKD"},{"value":"IL","label":"IL — ILS"},{"value":"IN","label":"IN — INR"},{"value":"IT","label":"IT — EUR"},{"value":"JP","label":"JP — JPY"},{"value":"KR","label":"KR — KRW"},{"value":"MX","label":"MX — MXN"},{"value":"MY","label":"MY — MYR"},{"value":"NL","label":"NL — EUR"},{"value":"NZ","label":"NZ — NZD"},{"value":"PH","label":"PH — PHP"},{"value":"PL","label":"PL — PLN"},{"value":"SA","label":"SA — SAR"},{"value":"SE","label":"SE — SEK"},{"value":"SG","label":"SG — SGD"},{"value":"TH","label":"TH — THB"},{"value":"TR","label":"TR — TRY"},{"value":"TW","label":"TW — TWD"},{"value":"UA","label":"UA — USD"},{"value":"US","label":"US — USD"},{"value":"VN","label":"VN — VND"},{"value":"ZA","label":"ZA — ZAR"}],"default":"US","aliases":["cc","market"]},{"name":"page","type":"integer","required":false,"description":"1-based page, 10 reviews per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":100}],"returns":"{ rating, rating_count, star_counts, summary, reviews[] } — 10 reviews per page with text, title, star rating, date and verified-purchase flag.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":1135}},{"name":"categories","description":"Every browsable catalogue category iHerb publishes (~1 480).","required_params":[],"optional_params":["search"],"params":[{"name":"search","type":"string","required":false,"description":"Keep only categories whose slug contains this text.","on_invalid":"reject","example":"vitamin","aliases":["q","filter"]}],"returns":"{ total, categories[] } with slug + url, ready for the `category` action.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"search":"vitamin"}},{"name":"filters","description":"The filter vocabulary for a keyword or category on one storefront — brand codes, category ids, attribute ids and how many products sit behind each, so the opaque ids the other actions take are discoverable.","required_params":[],"optional_params":["keyword","slug","country"],"params":[{"name":"keyword","type":"string","required":false,"description":"Filters for this search.","on_invalid":"reject","example":"vitamin c","aliases":["q","kw"]},{"name":"slug","type":"string","required":false,"description":"Filters for this category instead.","on_invalid":"reject","example":"vitamin-c","aliases":["category"]},{"name":"country","type":"enum","required":false,"description":"Which storefront's vocabulary.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE — AED"},{"value":"AU","label":"AU — AUD"},{"value":"BR","label":"BR — BRL"},{"value":"CA","label":"CA — CAD"},{"value":"DE","label":"DE — EUR"},{"value":"ES","label":"ES — EUR"},{"value":"FR","label":"FR — EUR"},{"value":"GB","label":"GB — GBP"},{"value":"HK","label":"HK — HKD"},{"value":"IL","label":"IL — ILS"},{"value":"IN","label":"IN — INR"},{"value":"IT","label":"IT — EUR"},{"value":"JP","label":"JP — JPY"},{"value":"KR","label":"KR — KRW"},{"value":"MX","label":"MX — MXN"},{"value":"MY","label":"MY — MYR"},{"value":"NL","label":"NL — EUR"},{"value":"NZ","label":"NZ — NZD"},{"value":"PH","label":"PH — PHP"},{"value":"PL","label":"PL — PLN"},{"value":"SA","label":"SA — SAR"},{"value":"SE","label":"SE — SEK"},{"value":"SG","label":"SG — SGD"},{"value":"TH","label":"TH — THB"},{"value":"TR","label":"TR — TRY"},{"value":"TW","label":"TW — TWD"},{"value":"UA","label":"UA — USD"},{"value":"US","label":"US — USD"},{"value":"VN","label":"VN — VND"},{"value":"ZA","label":"ZA — ZAR"}],"default":"US","aliases":["cc","market"]}],"returns":"{ total, filters[] } — each with key, label and options[{label,value,count}].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"keyword":"vitamin c"}}]},{"name":"ikea","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"IKEA API scraper — every ikea.com country store (50 countries) plus IKEA Türkiye (ikea.com.tr): search and browse products with the regular price, the IKEA Family price and new-lower-price or clearance was-prices kept apart, read the full product record (measurements, packages, materials, assembly documents), store stock with quantities and restock dates, reviews, the category tree, stores and autocomplete. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ikea/v1","spec_available":true,"actions":[{"name":"search","description":"Search an IKEA country store by keyword. Each product comes with its item number, price and currency, the IKEA Family price separately, the previous price of a new-lower-price, limited-time or clearance offer with its validity, in-store-only offers, rating, colours, category path and whether it can be bought online. Sort by price, rating, newest or size; filter with IKEA's own filters (colour, price band, size, material, series, subcategory) or new, last-chance and best-seller flags.","required_params":["query"],"optional_params":["country","language","page","page_size","sort","filters","new_only","last_chance_only","top_seller_only","business_only","include_variants","store_id","min_price","max_price","discount_only","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper types it in the store's language ('sofa', 'Kleiderschrank', 'ソファ'). Product names (BILLY) and item numbers work too.","on_invalid":"reject","example":"sofa","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which IKEA country store. Prices come back in its currency and texts in its language. Item numbers are mostly global but not every product is sold everywhere, and some products carry a different item number per market. `tr` = IKEA Türkiye (ikea.com.tr, prices in TRY, stock per Turkish store; no reviews published there).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"at","label":"Austria (EUR)"},{"value":"au","label":"Australia (AUD)"},{"value":"be","label":"Belgium (EUR)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"cl","label":"Chile (CLP)"},{"value":"co","label":"Colombia (COP)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"de","label":"Germany (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"ee","label":"Estonia (EUR)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"es","label":"Spain (EUR)"},{"value":"fi","label":"Finland (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"it","label":"Italy (EUR)"},{"value":"jo","label":"Jordan (JOD)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"lt","label":"Lithuania (EUR)"},{"value":"lv","label":"Latvia (EUR)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"no","label":"Norway (NOK)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"om","label":"Oman (OMR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ro","label":"Romania (RON)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"th","label":"Thailand (THB)"},{"value":"us","label":"United States (USD)"},{"value":"tr","label":"Türkiye (TRY) — ikea.com.tr"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions and filter labels, for countries IKEA publishes in several languages (ca: en/fr, ch: de/fr/it/en, be: nl/fr/en, es: es/ca/eu/gl/en, tr: tr/en …). Default: the country's first language (de for Germany, ja for Japan, ar for the Gulf stores). A language the country does not publish is rejected.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic"},{"value":"ca","label":"Catalan"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"de","label":"German"},{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"et","label":"Estonian"},{"value":"eu","label":"Basque"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"gl","label":"Galician"},{"value":"he","label":"Hebrew"},{"value":"hr","label":"Croatian"},{"value":"hu","label":"Hungarian"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"lt","label":"Lithuanian"},{"value":"lv","label":"Latvian"},{"value":"ms","label":"Malay"},{"value":"nl","label":"Dutch"},{"value":"no","label":"Norwegian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"sr","label":"Serbian"},{"value":"sv","label":"Swedish"},{"value":"th","label":"Thai"},{"value":"tr","label":"Turkish"}],"example":"en"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-48, default 24).","on_invalid":"reject","default":24,"minimum":1,"maximum":48},{"name":"sort","type":"enum","required":false,"description":"Result order. A listing's `sort_options` says which orders that listing supports (the all-products category has no `newest`).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"IKEA's own order (best sellers first)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"New products first"},{"value":"rating","label":"Customer rating"},{"value":"most_popular","label":"Most popular"},{"value":"name","label":"Name A-Z"},{"value":"width","label":"Width"},{"value":"height","label":"Height"},{"value":"depth","label":"Depth"}],"default":"relevance"},{"name":"filters","type":"object","required":false,"description":"IKEA's own filters, keyed by `filters_available[].parameter` with value ids from `filters_available[].values[].id`: colour (f-colors), price band (f-price-buckets), size band (f-measurement-buckets), material, series, subcategory (f-subcategories), rating (f-ratings) … Several values of one filter are OR-ed, different filters AND-ed. A filter the listing does not have is reported in `filters_not_applied`.","on_invalid":"reject","example":{"f-colors":["10003"]}},{"name":"new_only","type":"boolean","required":false,"description":"true: only products IKEA marks as new.","on_invalid":"ignore","default":false},{"name":"last_chance_only","type":"boolean","required":false,"description":"true: only 'last chance' products (being phased out).","on_invalid":"ignore","default":false},{"name":"top_seller_only","type":"boolean","required":false,"description":"true: only IKEA best sellers.","on_invalid":"ignore","default":false},{"name":"business_only","type":"boolean","required":false,"description":"true: only products IKEA marks as suitable for business use.","on_invalid":"ignore","default":false},{"name":"include_variants","type":"boolean","required":false,"description":"true: each row also lists up to 12 colour/size variants with their own id, price and image (the page gets about three times larger). `variant_count` is always returned.","on_invalid":"ignore","default":false},{"name":"store_id","type":"string","required":false,"description":"IKEA Türkiye only (country=tr): the store whose price and stock the rows show (id from `stores`, e.g. '127' Ankara, '194' Bayrampaşa). Default: the online store ('331'), and the answer says `store_defaulted: true`. The ikea.com countries publish one online price per country and ignore this parameter.","on_invalid":"reject","example":"127"},{"name":"min_price","type":"number","required":false,"description":"IKEA Türkiye only (country=tr): lowest price in TRY. The ikea.com countries filter price through `filters` (f-price-buckets) and ignore this parameter.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"IKEA Türkiye only (country=tr): highest price in TRY. The ikea.com countries filter price through `filters` (f-price-buckets) and ignore this parameter.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_max"]},{"name":"discount_only","type":"boolean","required":false,"description":"IKEA Türkiye only (country=tr): true = only products on a reduced price. Ignored by the ikea.com countries.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id ('s39399112' for combinations), item_no (8 digits), item_no_global, item_type ('ART' article | 'SPR' combination), title, name, type_name, design, measure, url, image, contextual_image, price (what a shopper without IKEA Family pays online; null on an IKEA Family price with no published regular price), currency, price_type ('regular' | 'new_lower_price' | 'time_restricted_offer' | 'discontinued' | 'family_price' | 'lower_price_in_store'), original_price (the previous price of a new-lower-price, limited-time or clearance price), discount_percent, member_price (IKEA Family price), member_program, member_discount_percent, lowest_previous_price (EU: lowest price in the 30 days before the reduction), price_valid_from, price_valid_to, price_disclaimer, price_basis ('per_item' | 'per_pack' — the price is for pack_quantity pieces, e.g. 4 chairs | 'per_quantity' — the price is for a pack holding `quantity` `unit`, e.g. 0.5 kg of jam), pack_quantity, quantity, unit, price_unit (IKEA's own text, e.g. '4 szt.', '0,5 kg'), in_store_offer{text, members_only, valid_from, valid_to} (a price valid only in the store, never the online price), low_price_item, online_sellable, last_chance, is_new, top_seller, rating, rating_count (all markets), rating_scale, colours[]{id, name, hex}, category_path[]{key, name}, product_area, home_furnishing_business, variant_count, min_order_quantity, energy_class, variants[] (include_variants=true)}, count, total_results, page, page_size, page_count, filters_available[]{parameter, name, kind, selected, values[]{id, name, group, count, selected}}, sort_options[], sort_applied, filters_applied{}, filters_not_applied[], country, language, currency, query","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"sofa"}},{"name":"category","description":"Every product in one IKEA category (e.g. Sofas, Table lamps), paged, with the same rows, sorting and filters as search.","required_params":["category_id"],"optional_params":["country","language","page","page_size","sort","filters","new_only","last_chance_only","top_seller_only","business_only","include_variants","store_id","min_price","max_price","discount_only","max_rotations"],"params":[{"name":"category_id","type":"string","required":true,"description":"IKEA category key ('fu003' = Sofas, '10732' = Table lamps) from `categories`, a row's `category_path`, `suggest`, or the end of a category URL (/cat/sofas-fu003/). IKEA Türkiye (country=tr) uses its own keys: 'koltuklar', 'kumas-koltuklar' or an ikea.com.tr/kategori/ URL.","on_invalid":"reject","example":"fu003","aliases":["category","key"]},{"name":"country","type":"enum","required":false,"description":"Which IKEA country store. Prices come back in its currency and texts in its language. Item numbers are mostly global but not every product is sold everywhere, and some products carry a different item number per market. `tr` = IKEA Türkiye (ikea.com.tr, prices in TRY, stock per Turkish store; no reviews published there).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"at","label":"Austria (EUR)"},{"value":"au","label":"Australia (AUD)"},{"value":"be","label":"Belgium (EUR)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"cl","label":"Chile (CLP)"},{"value":"co","label":"Colombia (COP)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"de","label":"Germany (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"ee","label":"Estonia (EUR)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"es","label":"Spain (EUR)"},{"value":"fi","label":"Finland (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"it","label":"Italy (EUR)"},{"value":"jo","label":"Jordan (JOD)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"lt","label":"Lithuania (EUR)"},{"value":"lv","label":"Latvia (EUR)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"no","label":"Norway (NOK)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"om","label":"Oman (OMR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ro","label":"Romania (RON)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"th","label":"Thailand (THB)"},{"value":"us","label":"United States (USD)"},{"value":"tr","label":"Türkiye (TRY) — ikea.com.tr"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions and filter labels, for countries IKEA publishes in several languages (ca: en/fr, ch: de/fr/it/en, be: nl/fr/en, es: es/ca/eu/gl/en, tr: tr/en …). Default: the country's first language (de for Germany, ja for Japan, ar for the Gulf stores). A language the country does not publish is rejected.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic"},{"value":"ca","label":"Catalan"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"de","label":"German"},{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"et","label":"Estonian"},{"value":"eu","label":"Basque"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"gl","label":"Galician"},{"value":"he","label":"Hebrew"},{"value":"hr","label":"Croatian"},{"value":"hu","label":"Hungarian"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"lt","label":"Lithuanian"},{"value":"lv","label":"Latvian"},{"value":"ms","label":"Malay"},{"value":"nl","label":"Dutch"},{"value":"no","label":"Norwegian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"sr","label":"Serbian"},{"value":"sv","label":"Swedish"},{"value":"th","label":"Thai"},{"value":"tr","label":"Turkish"}],"example":"en"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-48, default 24).","on_invalid":"reject","default":24,"minimum":1,"maximum":48},{"name":"sort","type":"enum","required":false,"description":"Result order. A listing's `sort_options` says which orders that listing supports (the all-products category has no `newest`).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"IKEA's own order (best sellers first)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"New products first"},{"value":"rating","label":"Customer rating"},{"value":"most_popular","label":"Most popular"},{"value":"name","label":"Name A-Z"},{"value":"width","label":"Width"},{"value":"height","label":"Height"},{"value":"depth","label":"Depth"}],"default":"relevance"},{"name":"filters","type":"object","required":false,"description":"IKEA's own filters, keyed by `filters_available[].parameter` with value ids from `filters_available[].values[].id`: colour (f-colors), price band (f-price-buckets), size band (f-measurement-buckets), material, series, subcategory (f-subcategories), rating (f-ratings) … Several values of one filter are OR-ed, different filters AND-ed. A filter the listing does not have is reported in `filters_not_applied`.","on_invalid":"reject","example":{"f-colors":["10003"]}},{"name":"new_only","type":"boolean","required":false,"description":"true: only products IKEA marks as new.","on_invalid":"ignore","default":false},{"name":"last_chance_only","type":"boolean","required":false,"description":"true: only 'last chance' products (being phased out).","on_invalid":"ignore","default":false},{"name":"top_seller_only","type":"boolean","required":false,"description":"true: only IKEA best sellers.","on_invalid":"ignore","default":false},{"name":"business_only","type":"boolean","required":false,"description":"true: only products IKEA marks as suitable for business use.","on_invalid":"ignore","default":false},{"name":"include_variants","type":"boolean","required":false,"description":"true: each row also lists up to 12 colour/size variants with their own id, price and image (the page gets about three times larger). `variant_count` is always returned.","on_invalid":"ignore","default":false},{"name":"store_id","type":"string","required":false,"description":"IKEA Türkiye only (country=tr): the store whose price and stock the rows show (id from `stores`, e.g. '127' Ankara, '194' Bayrampaşa). Default: the online store ('331'), and the answer says `store_defaulted: true`. The ikea.com countries publish one online price per country and ignore this parameter.","on_invalid":"reject","example":"127"},{"name":"min_price","type":"number","required":false,"description":"IKEA Türkiye only (country=tr): lowest price in TRY. The ikea.com countries filter price through `filters` (f-price-buckets) and ignore this parameter.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"IKEA Türkiye only (country=tr): highest price in TRY. The ikea.com countries filter price through `filters` (f-price-buckets) and ignore this parameter.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_max"]},{"name":"discount_only","type":"boolean","required":false,"description":"IKEA Türkiye only (country=tr): true = only products on a reduced price. Ignored by the ikea.com countries.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id ('s39399112' for combinations), item_no (8 digits), item_no_global, item_type ('ART' article | 'SPR' combination), title, name, type_name, design, measure, url, image, contextual_image, price (what a shopper without IKEA Family pays online; null on an IKEA Family price with no published regular price), currency, price_type ('regular' | 'new_lower_price' | 'time_restricted_offer' | 'discontinued' | 'family_price' | 'lower_price_in_store'), original_price (the previous price of a new-lower-price, limited-time or clearance price), discount_percent, member_price (IKEA Family price), member_program, member_discount_percent, lowest_previous_price (EU: lowest price in the 30 days before the reduction), price_valid_from, price_valid_to, price_disclaimer, price_basis ('per_item' | 'per_pack' — the price is for pack_quantity pieces, e.g. 4 chairs | 'per_quantity' — the price is for a pack holding `quantity` `unit`, e.g. 0.5 kg of jam), pack_quantity, quantity, unit, price_unit (IKEA's own text, e.g. '4 szt.', '0,5 kg'), in_store_offer{text, members_only, valid_from, valid_to} (a price valid only in the store, never the online price), low_price_item, online_sellable, last_chance, is_new, top_seller, rating, rating_count (all markets), rating_scale, colours[]{id, name, hex}, category_path[]{key, name}, product_area, home_furnishing_business, variant_count, min_order_quantity, energy_class, variants[] (include_variants=true)}, count, total_results, page, page_size, page_count, filters_available[]{parameter, name, kind, selected, values[]{id, name, group, count, selected}}, sort_options[], sort_applied, filters_applied{}, filters_not_applied[], country, language, currency, category_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"fu003"}},{"name":"categories","description":"IKEA's category tree, one level at a time: a category with its product count and its child categories (key, name, product count). Start at the root for the top-level departments.","required_params":[],"optional_params":["category_id","country","language","max_rotations"],"params":[{"name":"category_id","type":"string","required":false,"description":"Category key to open. Default: the root ('products'), whose children are the top-level departments. IKEA Türkiye (country=tr): keys such as 'koltuklar'.","on_invalid":"reject","example":"700640","aliases":["category","key"]},{"name":"country","type":"enum","required":false,"description":"Which IKEA country store. Prices come back in its currency and texts in its language. Item numbers are mostly global but not every product is sold everywhere, and some products carry a different item number per market. `tr` = IKEA Türkiye (ikea.com.tr, prices in TRY, stock per Turkish store; no reviews published there).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"at","label":"Austria (EUR)"},{"value":"au","label":"Australia (AUD)"},{"value":"be","label":"Belgium (EUR)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"cl","label":"Chile (CLP)"},{"value":"co","label":"Colombia (COP)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"de","label":"Germany (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"ee","label":"Estonia (EUR)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"es","label":"Spain (EUR)"},{"value":"fi","label":"Finland (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"it","label":"Italy (EUR)"},{"value":"jo","label":"Jordan (JOD)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"lt","label":"Lithuania (EUR)"},{"value":"lv","label":"Latvia (EUR)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"no","label":"Norway (NOK)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"om","label":"Oman (OMR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ro","label":"Romania (RON)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"th","label":"Thailand (THB)"},{"value":"us","label":"United States (USD)"},{"value":"tr","label":"Türkiye (TRY) — ikea.com.tr"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions and filter labels, for countries IKEA publishes in several languages (ca: en/fr, ch: de/fr/it/en, be: nl/fr/en, es: es/ca/eu/gl/en, tr: tr/en …). Default: the country's first language (de for Germany, ja for Japan, ar for the Gulf stores). A language the country does not publish is rejected.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic"},{"value":"ca","label":"Catalan"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"de","label":"German"},{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"et","label":"Estonian"},{"value":"eu","label":"Basque"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"gl","label":"Galician"},{"value":"he","label":"Hebrew"},{"value":"hr","label":"Croatian"},{"value":"hu","label":"Hungarian"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"lt","label":"Lithuanian"},{"value":"lv","label":"Latvian"},{"value":"ms","label":"Malay"},{"value":"nl","label":"Dutch"},{"value":"no","label":"Norwegian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"sr","label":"Serbian"},{"value":"sv","label":"Swedish"},{"value":"th","label":"Thai"},{"value":"tr","label":"Turkish"}],"example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"category{key, name, url, image, product_count}, children[]{key, name, product_count}, count, country, language","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"700640"}},{"name":"product/detail","description":"The full IKEA product record by item number or URL: every price kept apart (regular, IKEA Family, previous, lowest 30-day, in-store-only), description, designer, key facts, measurements, every package with its dimensions and weight, the articles a combination consists of, materials and care instructions, safety notes, assembly instructions and manuals, energy labels, guarantee, return period, series, breadcrumb, colour/size options, images and rating.","required_params":["product_id"],"optional_params":["country","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"IKEA item number (8 digits, with or without dots: 205.220.46; combinations may carry an 's' prefix: s39399112) or an ikea.com product URL, which also sets country and language.","on_invalid":"reject","example":"20522046","aliases":["id","item_no","url"]},{"name":"country","type":"enum","required":false,"description":"Which IKEA country store. Prices come back in its currency and texts in its language. Item numbers are mostly global but not every product is sold everywhere, and some products carry a different item number per market. `tr` = IKEA Türkiye (ikea.com.tr, prices in TRY, stock per Turkish store; no reviews published there).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"at","label":"Austria (EUR)"},{"value":"au","label":"Australia (AUD)"},{"value":"be","label":"Belgium (EUR)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"cl","label":"Chile (CLP)"},{"value":"co","label":"Colombia (COP)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"de","label":"Germany (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"ee","label":"Estonia (EUR)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"es","label":"Spain (EUR)"},{"value":"fi","label":"Finland (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"it","label":"Italy (EUR)"},{"value":"jo","label":"Jordan (JOD)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"lt","label":"Lithuania (EUR)"},{"value":"lv","label":"Latvia (EUR)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"no","label":"Norway (NOK)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"om","label":"Oman (OMR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ro","label":"Romania (RON)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"th","label":"Thailand (THB)"},{"value":"us","label":"United States (USD)"},{"value":"tr","label":"Türkiye (TRY) — ikea.com.tr"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions and filter labels, for countries IKEA publishes in several languages (ca: en/fr, ch: de/fr/it/en, be: nl/fr/en, es: es/ca/eu/gl/en, tr: tr/en …). Default: the country's first language (de for Germany, ja for Japan, ar for the Gulf stores). A language the country does not publish is rejected.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic"},{"value":"ca","label":"Catalan"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"de","label":"German"},{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"et","label":"Estonian"},{"value":"eu","label":"Basque"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"gl","label":"Galician"},{"value":"he","label":"Hebrew"},{"value":"hr","label":"Croatian"},{"value":"hu","label":"Hungarian"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"lt","label":"Lithuanian"},{"value":"lv","label":"Latvian"},{"value":"ms","label":"Malay"},{"value":"nl","label":"Dutch"},{"value":"no","label":"Norwegian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"sr","label":"Serbian"},{"value":"sv","label":"Swedish"},{"value":"th","label":"Thai"},{"value":"tr","label":"Turkish"}],"example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, item_no, visible_item_no, item_no_global, item_type, title, name, type_name, design, measure, url, brand, price (what a shopper without IKEA Family pays online; null on an IKEA Family price with no published regular price), currency, price_type ('regular' | 'new_lower_price' | 'time_restricted_offer' | 'discontinued' | 'family_price' | 'lower_price_in_store'), original_price (the previous price of a new-lower-price, limited-time or clearance price), discount_percent, member_price (IKEA Family price), member_program, member_discount_percent, lowest_previous_price (EU: lowest price in the 30 days before the reduction), price_valid_from, price_valid_to, price_disclaimer, price_basis ('per_item' | 'per_pack' — the price is for pack_quantity pieces, e.g. 4 chairs | 'per_quantity' — the price is for a pack holding `quantity` `unit`, e.g. 0.5 kg of jam), pack_quantity, quantity, unit, price_unit (IKEA's own text, e.g. '4 szt.', '0,5 kg'), in_store_offer{text, members_only, valid_from, valid_to} (a price valid only in the store, never the online price), low_price_item, online_sellable, last_chance, is_new, top_seller, coming_soon, is_food, is_mattress, min_order_quantity, rating, rating_count, rating_scale, secondary_ratings{}, short_description, description[], designer, key_facts[]{type, label, value}, measurements[]{name, value, type}, number_of_packages, packaging[]{item_no, article_number, name, type_name, quantity, packages[]{width|height|length|weight|volume: {text, value, unit}}}, sub_products[]{item_no, item_type, name, type_name, quantity, url}, materials[]{product_type, parts[]{part, material}}, care_instructions[], good_to_know[]{name, text}, safety_and_compliance[]{name, text}, documents[]{kind, label, item, url}, energy_labels[], guarantee_years, guarantee, return_days, series{name, url}, breadcrumb[]{name, url}, category_path[], colours[], variant_count, style_options[]{code, title, selected, options[]{title, product_id, url, selected}}, images[]{url, type, alt}, videos[], product_area}, country, language","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"20522046"}},{"name":"product/availability","description":"Stock of up to 10 IKEA products in every store of a country (or one store): quantity in the store where IKEA publishes it, stock status, expected restock dates and quantities, the aisle and bin to pick it from, click & collect, and whether home delivery is available.","required_params":[],"optional_params":["product_id","product_ids","store_id","country","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"IKEA item number (8 digits, with or without dots: 205.220.46; combinations may carry an 's' prefix: s39399112) or an ikea.com product URL, which also sets country and language.","on_invalid":"reject","example":"20522046","aliases":["id","item_no","url"]},{"name":"product_ids","type":"array","required":false,"description":"Up to 10 item numbers in one call (alternative to `product_id`).","on_invalid":"reject","example":["20522046","70096377"],"aliases":["item_nos"]},{"name":"store_id","type":"string","required":false,"description":"Only this store (the id from `stores`, e.g. '211'). Default: every store in the country.","on_invalid":"reject","example":"211"},{"name":"country","type":"enum","required":false,"description":"Which IKEA country store. Prices come back in its currency and texts in its language. Item numbers are mostly global but not every product is sold everywhere, and some products carry a different item number per market. `tr` = IKEA Türkiye (ikea.com.tr, prices in TRY, stock per Turkish store; no reviews published there).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"at","label":"Austria (EUR)"},{"value":"au","label":"Australia (AUD)"},{"value":"be","label":"Belgium (EUR)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"cl","label":"Chile (CLP)"},{"value":"co","label":"Colombia (COP)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"de","label":"Germany (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"ee","label":"Estonia (EUR)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"es","label":"Spain (EUR)"},{"value":"fi","label":"Finland (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"it","label":"Italy (EUR)"},{"value":"jo","label":"Jordan (JOD)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"lt","label":"Lithuania (EUR)"},{"value":"lv","label":"Latvia (EUR)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"no","label":"Norway (NOK)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"om","label":"Oman (OMR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ro","label":"Romania (RON)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"th","label":"Thailand (THB)"},{"value":"us","label":"United States (USD)"},{"value":"tr","label":"Türkiye (TRY) — ikea.com.tr"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions and filter labels, for countries IKEA publishes in several languages (ca: en/fr, ch: de/fr/it/en, be: nl/fr/en, es: es/ca/eu/gl/en, tr: tr/en …). Default: the country's first language (de for Germany, ja for Japan, ar for the Gulf stores). A language the country does not publish is rejected.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic"},{"value":"ca","label":"Catalan"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"de","label":"German"},{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"et","label":"Estonian"},{"value":"eu","label":"Basque"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"gl","label":"Galician"},{"value":"he","label":"Hebrew"},{"value":"hr","label":"Croatian"},{"value":"hu","label":"Hungarian"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"lt","label":"Lithuanian"},{"value":"lv","label":"Latvian"},{"value":"ms","label":"Malay"},{"value":"nl","label":"Dutch"},{"value":"no","label":"Norwegian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"sr","label":"Serbian"},{"value":"sv","label":"Swedish"},{"value":"th","label":"Thai"},{"value":"tr","label":"Turkish"}],"example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"items[]{item_no, item_type, online{home_delivery_available, click_collect_available, home_delivery_status, parcel, max_order_quantity, updated_at}, stores[]{store_id, store_name, in_range, cash_carry_available, click_collect_available, quantity, status ('high_in_stock' | 'low_in_stock' | 'out_of_stock' | null), restocks[]{earliest_date, latest_date, quantity, reliability}, pickup[], sales_locations[]{type, division, aisle, bin}, updated_at}, store_count, in_stock_store_count}, not_found[], count, country","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"20522046"}},{"name":"product/reviews","description":"Customer reviews of one IKEA product, paged: title, text, star rating, sub-ratings (quality, value for money, assembly …), recommendation, verified purchase, helpful votes, IKEA's public reply and photos, plus the rating summary and distribution. Filter by star rating, verified purchases or reviews from other countries.","required_params":["product_id"],"optional_params":["country","language","page","page_size","sort","ratings","scope","verified_only","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"IKEA item number (8 digits, with or without dots: 205.220.46; combinations may carry an 's' prefix: s39399112) or an ikea.com product URL, which also sets country and language.","on_invalid":"reject","example":"20522046","aliases":["id","item_no","url"]},{"name":"country","type":"enum","required":false,"description":"Which IKEA country store. Prices come back in its currency and texts in its language. Item numbers are mostly global but not every product is sold everywhere, and some products carry a different item number per market. `tr` = IKEA Türkiye (ikea.com.tr, prices in TRY, stock per Turkish store; no reviews published there).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"at","label":"Austria (EUR)"},{"value":"au","label":"Australia (AUD)"},{"value":"be","label":"Belgium (EUR)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"cl","label":"Chile (CLP)"},{"value":"co","label":"Colombia (COP)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"de","label":"Germany (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"ee","label":"Estonia (EUR)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"es","label":"Spain (EUR)"},{"value":"fi","label":"Finland (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"it","label":"Italy (EUR)"},{"value":"jo","label":"Jordan (JOD)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"lt","label":"Lithuania (EUR)"},{"value":"lv","label":"Latvia (EUR)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"no","label":"Norway (NOK)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"om","label":"Oman (OMR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ro","label":"Romania (RON)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"th","label":"Thailand (THB)"},{"value":"us","label":"United States (USD)"},{"value":"tr","label":"Türkiye (TRY) — ikea.com.tr"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions and filter labels, for countries IKEA publishes in several languages (ca: en/fr, ch: de/fr/it/en, be: nl/fr/en, es: es/ca/eu/gl/en, tr: tr/en …). Default: the country's first language (de for Germany, ja for Japan, ar for the Gulf stores). A language the country does not publish is rejected.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic"},{"value":"ca","label":"Catalan"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"de","label":"German"},{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"et","label":"Estonian"},{"value":"eu","label":"Basque"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"gl","label":"Galician"},{"value":"he","label":"Hebrew"},{"value":"hr","label":"Croatian"},{"value":"hu","label":"Hungarian"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"lt","label":"Lithuanian"},{"value":"lv","label":"Latvian"},{"value":"ms","label":"Malay"},{"value":"nl","label":"Dutch"},{"value":"no","label":"Norwegian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"sr","label":"Serbian"},{"value":"sv","label":"Swedish"},{"value":"th","label":"Thai"},{"value":"tr","label":"Turkish"}],"example":"en"},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-50, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"highest_rating","label":"Highest rating first"},{"value":"lowest_rating","label":"Lowest rating first"},{"value":"most_helpful","label":"Most helpful first"}],"default":"newest"},{"name":"ratings","type":"array","required":false,"description":"Only reviews with these star ratings (1-5).","on_invalid":"reject","example":[1,2]},{"name":"scope","type":"enum","required":false,"description":"IKEA shares reviews between countries. `local` = written in this country (default); `other_markets` = everywhere else.","on_invalid":"reject","allowed_values":[{"value":"local","label":"Reviews written in this country"},{"value":"other_markets","label":"Reviews of the same product from every other IKEA country"}],"default":"local"},{"name":"verified_only","type":"boolean","required":false,"description":"true: only reviews from verified purchases.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"item_no, summary{rating, rating_scale, total_reviews_all_markets, total_ratings_all_markets, recommended_count, not_recommended_count, rating_distribution{1..5}, secondary_ratings{}, first_review_at, last_review_at}, reviews[]{review_id, title, text, rating, rating_scale, secondary_ratings{}, recommended, verified_purchase, author, submitted_at, updated_at, source_country, source_language, reviewed_item_no, helpful_count, unhelpful_count, ikea_response{text, by, at}, media[]}, count, page, page_size, has_more, sort_applied, scope, country, language","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"20522046"}},{"name":"stores","description":"Every IKEA store in a country with its store id (used by product/availability), name, coordinates, type and opening date.","required_params":[],"optional_params":["country","language","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Which IKEA country store. Prices come back in its currency and texts in its language. Item numbers are mostly global but not every product is sold everywhere, and some products carry a different item number per market. `tr` = IKEA Türkiye (ikea.com.tr, prices in TRY, stock per Turkish store; no reviews published there).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"at","label":"Austria (EUR)"},{"value":"au","label":"Australia (AUD)"},{"value":"be","label":"Belgium (EUR)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"cl","label":"Chile (CLP)"},{"value":"co","label":"Colombia (COP)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"de","label":"Germany (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"ee","label":"Estonia (EUR)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"es","label":"Spain (EUR)"},{"value":"fi","label":"Finland (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"it","label":"Italy (EUR)"},{"value":"jo","label":"Jordan (JOD)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"lt","label":"Lithuania (EUR)"},{"value":"lv","label":"Latvia (EUR)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"no","label":"Norway (NOK)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"om","label":"Oman (OMR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ro","label":"Romania (RON)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"th","label":"Thailand (THB)"},{"value":"us","label":"United States (USD)"},{"value":"tr","label":"Türkiye (TRY) — ikea.com.tr"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions and filter labels, for countries IKEA publishes in several languages (ca: en/fr, ch: de/fr/it/en, be: nl/fr/en, es: es/ca/eu/gl/en, tr: tr/en …). Default: the country's first language (de for Germany, ja for Japan, ar for the Gulf stores). A language the country does not publish is rejected.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic"},{"value":"ca","label":"Catalan"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"de","label":"German"},{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"et","label":"Estonian"},{"value":"eu","label":"Basque"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"gl","label":"Galician"},{"value":"he","label":"Hebrew"},{"value":"hr","label":"Croatian"},{"value":"hu","label":"Hungarian"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"lt","label":"Lithuanian"},{"value":"lv","label":"Latvian"},{"value":"ms","label":"Malay"},{"value":"nl","label":"Dutch"},{"value":"no","label":"Norwegian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"sr","label":"Serbian"},{"value":"sv","label":"Swedish"},{"value":"th","label":"Thai"},{"value":"tr","label":"Turkish"}],"example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"stores[]{store_id, name, display_name, lat, lng, type, opening_date}, count, country","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"us"}},{"name":"suggest","description":"IKEA's search autocomplete for what a shopper has typed: suggested searches, matching categories and products.","required_params":["query"],"optional_params":["country","language","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far.","on_invalid":"reject","example":"sof","aliases":["q","prefix"]},{"name":"country","type":"enum","required":false,"description":"Which IKEA country store. Prices come back in its currency and texts in its language. Item numbers are mostly global but not every product is sold everywhere, and some products carry a different item number per market. `tr` = IKEA Türkiye (ikea.com.tr, prices in TRY, stock per Turkish store; no reviews published there).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"at","label":"Austria (EUR)"},{"value":"au","label":"Australia (AUD)"},{"value":"be","label":"Belgium (EUR)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"cl","label":"Chile (CLP)"},{"value":"co","label":"Colombia (COP)"},{"value":"cz","label":"Czechia (CZK)"},{"value":"de","label":"Germany (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"ee","label":"Estonia (EUR)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"es","label":"Spain (EUR)"},{"value":"fi","label":"Finland (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"hu","label":"Hungary (HUF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"il","label":"Israel (ILS)"},{"value":"in","label":"India (INR)"},{"value":"it","label":"Italy (EUR)"},{"value":"jo","label":"Jordan (JOD)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"lt","label":"Lithuania (EUR)"},{"value":"lv","label":"Latvia (EUR)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"no","label":"Norway (NOK)"},{"value":"nz","label":"New Zealand (NZD)"},{"value":"om","label":"Oman (OMR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ro","label":"Romania (RON)"},{"value":"rs","label":"Serbia (RSD)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"th","label":"Thailand (THB)"},{"value":"us","label":"United States (USD)"},{"value":"tr","label":"Türkiye (TRY) — ikea.com.tr"}],"default":"us","example":"us"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions and filter labels, for countries IKEA publishes in several languages (ca: en/fr, ch: de/fr/it/en, be: nl/fr/en, es: es/ca/eu/gl/en, tr: tr/en …). Default: the country's first language (de for Germany, ja for Japan, ar for the Gulf stores). A language the country does not publish is rejected.","on_invalid":"reject","allowed_values":[{"value":"ar","label":"Arabic"},{"value":"ca","label":"Catalan"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"de","label":"German"},{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"et","label":"Estonian"},{"value":"eu","label":"Basque"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"gl","label":"Galician"},{"value":"he","label":"Hebrew"},{"value":"hr","label":"Croatian"},{"value":"hu","label":"Hungarian"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"ko","label":"Korean"},{"value":"lt","label":"Lithuanian"},{"value":"lv","label":"Latvian"},{"value":"ms","label":"Malay"},{"value":"nl","label":"Dutch"},{"value":"no","label":"Norwegian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"sr","label":"Serbian"},{"value":"sv","label":"Swedish"},{"value":"th","label":"Thai"},{"value":"tr","label":"Turkish"}],"example":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"completions[], categories[]{key, name, url}, products[]{product_id, title, url, image, online_sellable, rating, rating_count}, query, country, language","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"sofa"}}]},{"name":"ikman","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"ikman.lk API scraper — search Sri Lanka's largest classifieds marketplace (353 000+ live ads measured 2026-10-02) across all 299 categories: cars, vans, motorbikes and three-wheelers, land and houses for sale and to rent, mobile phones, electronics, jobs, services, animals, fashion and farm equipment. Filter by keyword, category, any of the 27 districts or 304 cities, and offer direction (for sale / wanted / for rent / wanted to rent), with the source's own two sorts and its own facet counts per category, city and type returned alongside the rows. Full ad detail returns the complete description, every photo, the category's own attribute list, the view count, the job salary band and application deadline where the ad is a vacancy, and the advertiser's public contact card and dealer page. Prices come back parsed with the currency read off the source's own printed string (LKR), and an ad with no price — a wanted ad — returns null instead of a fake zero. No account, logged-out public data only.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ikman/v1","spec_available":true,"actions":[{"name":"search","description":"Search ikman.lk classifieds. Needs at least one of `query` (keywords), `category` (a numeric id from the `categories` action) or `location` (a numeric id from the `locations` action); any combination also works, and `listing_type`, `sort`, `order` and `page` narrow or reorder it. Every response also carries `catalogue_counts` — the source's live totals per category, city and offer type. 🔴 They follow the id filters (`category`, `location`, `listing_type`) and IGNORE `query`: measured, `query=toyota` (10 465 matches) still reported 89 274 for category 391, while `category=392` reported 6 732 for Colombo, which is the real Cars-in-Colombo figure. So they size a category or district, they do not split your keyword result. 🔴 Page size is fixed by the source at 25 and no override is accepted; a full page measured 25 or 26 rows because the source adds a paid insert at the top. The source reports more pages than it serves, so `reachable_results` caps at 10 000 per query however large `total_results` is.","required_params":[],"optional_params":["query","category","location","listing_type","sort","order","page","exclude_promoted"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keywords, exactly as typed into the site's own search box. Measured bite: 353 089 live ads nationwide → 10 465 for `toyota`. Give this, `category` or `location` — any one is enough, and they combine.","on_invalid":"reject","example":"toyota aqua","aliases":["q","keywords"]},{"name":"category","type":"integer","required":false,"description":"Numeric category id. Top level: 391 Vehicles, 409 Property, 428 Electronics, 2000 Mobiles, 700 Jobs, 537 Services, 444 Home & Garden, 489 Animals, 470 Fashion & Beauty, 503 Hobby/Sport/Kids, 535 Business & Industry, 587 Agriculture, 568 Education, 1100 Work Overseas. Leaf examples: 392 Cars, 402 Motorbikes, 415 Houses For Sale, 2003 Mobile Phones. The `categories` action lists all 299 with their parents. Measured bite: 353 089 → 89 276 for 391 (the source's own facet said 89 277 in the same second).","on_invalid":"reject","example":392,"minimum":1,"aliases":["category_id","categoryId"]},{"name":"location","type":"integer","required":false,"description":"Numeric location id — a district or any city inside it. Districts: 1506 Colombo, 1577 Gampaha, 1636 Kandy, 1620 Kalutara, 1559 Galle, 1605 Jaffna, 1674 Kurunegala. The `locations` action lists all 331 (27 districts + their cities). Measured bite: 353 089 → 207 303 for Colombo district.","on_invalid":"reject","example":1506,"minimum":1,"aliases":["location_id","locationId","city","district"]},{"name":"listing_type","type":"enum","required":false,"description":"Offer direction, using the source's own keys. Omit for all four. Measured against a 353 089-row control, and every number below matched the source's own facet count to the row.","on_invalid":"reject","allowed_values":[{"value":"for_sale","label":"Offered for sale (measured 340 036 of 353 089 live ads)"},{"value":"to_buy","label":"Wanted — the poster is buying (measured 546)"},{"value":"for_rent","label":"Offered for rent (measured 12 224)"},{"value":"to_rent","label":"Wanted to rent (measured 284)"}],"example":"for_sale","aliases":["type","ad_type"]},{"name":"sort","type":"enum","required":false,"description":"Field to sort on — the source publishes exactly these two. Omit for the source's own mixed relevance order. 🔴 The source inserts one PAID ad at the top of each page and that insert ignores the sort (measured: `sort=price&order=asc` on Cars put a Rs 19 500 000 ad above the cheapest rows). Rows carry `promoted: true` so you can see it, and `exclude_promoted` drops them. A seller's own `bump_up` is NOT counted as promotion — it only re-dates the ad and is reported separately as `bumped_at`.","on_invalid":"reject","allowed_values":[{"value":"date","label":"Posting date"},{"value":"price","label":"Price (ads with no price sort first)"}],"example":"price"},{"name":"order","type":"enum","required":false,"description":"Sort direction. Only meaningful with `sort`; passing it alone is rejected rather than silently ignored. With `sort=price` the ads that carry NO price sort first on `asc`.","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Descending"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"asc","aliases":["sort_order"]},{"name":"page","type":"integer","required":false,"description":"1-based page number, 1-400. 🔴 The source REPORTS more pages than it serves: a query reporting 14 124 pages answers HTTP 500 from page 401 on (measured on three different result sets). So at most 10 000 ads are reachable per query however large `total_results` is — narrow with category, location or keywords instead of paging deeper. A page above the ceiling is rejected here instead of becoming a 500.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":400},{"name":"exclude_promoted","type":"boolean","required":false,"description":"Drop the rows the source has sold placement for (`top_ad`, `featured_ad`, `spotlight`, `urgent_ad`). A full page measured 25 or 26 rows because the source adds one paid insert at the top, outside the sort you asked for. With this on you get the organic rows only, and `promoted_rows` still tells you how many were removed.","on_invalid":"reject","default":false,"example":true,"aliases":["hide_promoted"]}],"returns":"total_results (the source's figure), reachable_results (what you can actually page to), reported_page_count, reachable_page_count, page_ceiling, total_truncated_by_ceiling, page, page_size, returned, promoted_rows, leading_promoted_insert, dropped_non_matching_promoted (paid rows the source attached to a zero-match answer), dropped_non_listing_tiles, has_more, sort_option, sort_order, query, filters (the query string actually sent), catalogue_counts {categories[], cities[], listing_types[] — the source's live total for each, following the id filters and ignoring `query`} and listings[] with listing_id, slug, url, title, listing_type (for_sale | to_buy | for_rent | to_rent), status, condition (the source's own token, e.g. used | new | reconditioned | import — only categories that define it), posted_at, expires_at, bumped_at, category_id, category_name, district_id, district, city_id, city, highlights[] (the source's own SERP summary chips), properties[] (label/value/key/value_key — the category's own attributes; measured filled on 11 of 12 ads in `listing` but only 18 of 312 search rows, because the source attaches most of them to the ad page), promoted, promotions{} (the source's own five flags, raw), bumped_at, buy_now, price, price_min, price_max, price_currency (read off the source's own token), price_currency_raw, price_display (the source's own string), price_label, price_kind (fixed | range | not_priced_wanted | not_priced | unparsed), price_display_source_echo and price_display_matches_info (the source's second printing of the same amount and whether it agrees), image_count, image_ids[], images[] (780x585), image_thumbnails[] (158x88), image, image_thumbnail, image_base_uri, image_url_template, seller{account_id, name, account_type, phone_numbers[], email, email_verified, chat_enabled, contact_opt_out, delivery_methods[], membership_level, paying_member, authorized_dealer, featured_member} and shop{} (null unless the ad belongs to a dealer page).","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"car","max_results":20}},{"name":"listing","description":"Full detail of one ad by id, slug or URL: the complete description as the advertiser wrote it, every photo at full size and as a thumbnail, the price with the source's own printed string, the category's own attribute list (year, mileage, bedrooms, employer, job type…), the ad's view count, posting and expiry time, the advertiser's public contact card, the dealer page when the ad belongs to one, the job salary band and application deadline when the ad is a vacancy, and the ids of the ads the source itself calls similar. A removed or non-existent ad returns NOT_FOUND.","required_params":[],"optional_params":["listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"The ad's 24-character id OR its slug — `search` returns both and the source resolves either to the same record (verified byte-for-byte on the same ad). Give this or `url`.","on_invalid":"reject","example":"6ab650a2a3f965be3ca67be1","value_pattern":"[0-9a-fA-F]{24}|[a-zA-Z0-9][a-zA-Z0-9\\-_]{2,180}","aliases":["ad_id","id","slug"]},{"name":"url","type":"string","required":false,"description":"Full ad URL exactly as `search` returns it; the slug is taken from its `/ad/<slug>` tail.","on_invalid":"reject","example":"https://ikman.lk/en/ad/toyota-allion-2010-for-sale-gampaha-281","aliases":["listing_url","ad_url"]}],"returns":"the same row shape as `search` plus description (full text), view_count, job{application_deadline, apply_phone_numbers[], apply_via_dashboard, apply_email} (null when the ad is not a vacancy), similar_listing_ids[] and safety_notice. Row shape: listing_id, slug, url, title, listing_type (for_sale | to_buy | for_rent | to_rent), status, condition (the source's own token, e.g. used | new | reconditioned | import — only categories that define it), posted_at, expires_at, bumped_at, category_id, category_name, district_id, district, city_id, city, highlights[] (the source's own SERP summary chips), properties[] (label/value/key/value_key — the category's own attributes; measured filled on 11 of 12 ads in `listing` but only 18 of 312 search rows, because the source attaches most of them to the ad page), promoted, promotions{} (the source's own five flags, raw), bumped_at, buy_now, price, price_min, price_max, price_currency (read off the source's own token), price_currency_raw, price_display (the source's own string), price_label, price_kind (fixed | range | not_priced_wanted | not_priced | unparsed), price_display_source_echo and price_display_matches_info (the source's second printing of the same amount and whether it agrees), image_count, image_ids[], images[] (780x585), image_thumbnails[] (158x88), image, image_thumbnail, image_base_uri, image_url_template, seller{account_id, name, account_type, phone_numbers[], email, email_verified, chat_enabled, contact_opt_out, delivery_methods[], membership_level, paying_member, authorized_dealer, featured_member} and shop{} (null unless the ad belongs to a dealer page).","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://ikman.lk/en/ad/toyota-allion-2010-for-sale-gampaha-281"}},{"name":"categories","description":"The site's live category table — the resolver `search` needs, because `category` takes a numeric id. 299 categories in a two-level tree under 17 top-level sections, each with its parent, its children, the offer directions it accepts and its public URL.","required_params":[],"optional_params":["parent","top_level_only"],"params":[{"name":"parent","type":"integer","required":false,"description":"Return only the direct children of this category id. Omit for the whole table.","on_invalid":"reject","example":391,"minimum":1,"aliases":["parent_id","parent_category_id"]},{"name":"top_level_only","type":"boolean","required":false,"description":"Return only the 17 top-level categories instead of all 299.","on_invalid":"reject","default":false,"example":true,"aliases":["roots_only"]}],"returns":"category_count and categories[] with category_id, name, slug, parent_category_id, is_top_level, child_category_ids[], listing_types[] (the directions this category accepts), serp_type, type and url.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"parent":391}},{"name":"locations","description":"The site's live location table — the resolver `search` needs, because `location` takes a numeric id. 331 rows: Sri Lanka's 27 districts and the 304 cities inside them, each with its parent and, on request, the boundary polygon the source publishes.","required_params":[],"optional_params":["parent","districts_only","include_geography"],"params":[{"name":"parent","type":"integer","required":false,"description":"Return only the cities inside this district id. Omit for the whole table.","on_invalid":"reject","example":1506,"minimum":1,"aliases":["parent_id","district","district_id"]},{"name":"districts_only","type":"boolean","required":false,"description":"Return only the 27 districts instead of all 331 rows.","on_invalid":"reject","default":false,"example":true,"aliases":["top_level_only"]},{"name":"include_geography","type":"boolean","required":false,"description":"Include each location's boundary polygon as the source publishes it. Off by default because it is the bulk of the payload (measured 288 KB with, 44 KB without).","on_invalid":"reject","default":false,"example":true,"aliases":["with_polygons"]}],"returns":"location_count and locations[] with location_id, name, slug, geo_region, parent_location_id, is_district, child_location_ids[] and (only with include_geography) geography.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"parent":1506}}]},{"name":"imdb","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"IMDb API scraper — movie & TV ratings, vote counts, Top 250 charts, cast, crew and people data: search IMDb for any film, series or person and pull the IMDb user rating, number of votes, release year, runtime, genres, certificate, plot, full cast & characters, directors, writers, episode lists with per-episode ratings, actor/director filmographies, the IMDb Top 250 / Most Popular charts, paginated user reviews, trailers & video clips, photo galleries, awards & nominations, trivia, keywords, parental guide, full cast & crew by department, and 'what's new' lists (coming-soon, weekend box-office, trending) — by IMDb id (tt… / nm…), no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/imdb/v1","spec_available":true,"actions":[{"name":"search","description":"Search IMDb for movies, TV shows and people by name. Uses IMDb's own type-ahead, so one query returns titles AND people mixed, each with its IMDb id (tt…/nm…), a subtitle, poster image, popularity rank and (for titles) type and year. Use the returned id with the `title`, `person` or `episodes` actions.","required_params":["query"],"optional_params":["kind"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for — a movie/show title or a person's name ('the matrix', 'tom hanks', 'breaking bad', 'nolan').","on_invalid":"reject","example":"the matrix","aliases":["q","text","name","title"]},{"name":"kind","type":"enum","required":false,"description":"Filter the results to titles only, people only, or both (default both).","on_invalid":"ignore","allowed_values":[{"value":"all","label":"Titles and people"},{"value":"title","label":"Movies & TV only"},{"value":"name","label":"People only"}],"default":"all"}],"returns":"results[]{id, kind(title|name), label, subtitle, image, rank, title_type, year}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"the matrix"}},{"name":"title","description":"Full IMDb title card for one movie or TV show by its tt… id: IMDb user rating and vote count, year(s), runtime, genres, certificate, plot, countries, languages, directors, writers, top cast with character names, poster and popularity rank. For series it also returns the total episode count.","required_params":["imdb_id"],"optional_params":[],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb title id — the 'tt…' in an IMDb URL (tt0133093 = The Matrix). Get one from the `search` action.","on_invalid":"reject","example":"tt0133093","aliases":["id","title_id","tconst"]}],"returns":"title{id, title, original_title, type, is_series, year, end_year, release_date, runtime_minutes, rating, vote_count, certificate, genres[], plot, image, popularity_rank, countries[], languages[], directors[], writers[], cast[]{id,name,characters[]}, cast_total, episode_count}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0133093"}},{"name":"person","description":"Full IMDb name card for one person by their nm… id: biography, birth/death dates, birthplace, professions, IMDb popularity rank, their best-known titles and a paginated filmography (each credit with the title, year, IMDb rating, the job and — for acting credits — the character played).","required_params":["imdb_id"],"optional_params":["role","limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb name id — the 'nm…' in an IMDb person URL (nm0000158 = Tom Hanks). Get one from the `search` action.","on_invalid":"reject","example":"nm0000158","aliases":["id","name_id","nconst"]},{"name":"role","type":"enum","required":false,"description":"Filter the filmography to one job category (default all).","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All credits"},{"value":"actor","label":"Acting (actor)"},{"value":"actress","label":"Acting (actress)"},{"value":"director","label":"Director"},{"value":"writer","label":"Writer"},{"value":"producer","label":"Producer"},{"value":"self","label":"Self / appearances"}],"default":"all"},{"name":"limit","type":"integer","required":false,"description":"How many filmography credits to return (1-250, newest first). filmography_total reports the full count.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":250}],"returns":"person{id, name, image, bio, birth_date, death_date, birth_location, professions[], popularity_rank, known_for[], filmography[]{id,title,year,rating,type,job,characters[]}, filmography_total}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"nm0000158"}},{"name":"episodes","description":"Episode list for a TV series by its tt… id, with each episode's IMDb rating, vote count, air date, season/episode number and plot. Page one season at a time with `season`; meta lists every available season number and the total episode count.","required_params":["imdb_id"],"optional_params":["season","limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb title id — the 'tt…' in an IMDb URL (tt0133093 = The Matrix). Get one from the `search` action.","on_invalid":"reject","example":"tt0133093","aliases":["id","title_id","tconst"]},{"name":"season","type":"integer","required":false,"description":"Season number to list (e.g. 1). Omit to get the first season; meta.seasons lists all available seasons.","on_invalid":"ignore","example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Max episodes to return for the season (1-250).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250}],"returns":"episodes[]{id, title, season, episode, rating, vote_count, air_date, plot} + meta{seasons[], total_episodes, season}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0903747","season":1}},{"name":"charts","description":"An IMDb chart: the Top 250 movies, Top 250 TV, Bottom 100, or a Most-Popular / Top-Rated meter board. Returns ranked titles with their IMDb chart rating, vote count, year, type and poster.","required_params":[],"optional_params":["chart","limit"],"params":[{"name":"chart","type":"enum","required":false,"description":"Which IMDb chart to return (default top_250).","on_invalid":"ignore","allowed_values":[{"value":"top_250","label":"Top 250 movies"},{"value":"top_250_tv","label":"Top 250 TV shows"},{"value":"top_250_english","label":"Top 250 English-language movies"},{"value":"top_250_india","label":"Top 250 Indian movies"},{"value":"bottom_100","label":"Bottom 100 (lowest rated) movies"},{"value":"most_popular_movies","label":"Most popular movies (MOVIEmeter)"},{"value":"most_popular_tv","label":"Most popular TV shows"},{"value":"top_rated_movies","label":"Top rated movies"},{"value":"top_rated_tv","label":"Top rated TV shows"},{"value":"lowest_rated_movies","label":"Lowest rated movies"},{"value":"top_rated_english","label":"Top rated English movies"},{"value":"top_rated_indian","label":"Top rated Indian movies"}],"default":"top_250"},{"name":"limit","type":"integer","required":false,"description":"How many ranked entries to return (1-250).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250}],"returns":"results[]{rank, id, title, year, type, rating, vote_count, image}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"chart":"top_250","limit":10}},{"name":"reviews","description":"User reviews for a movie or TV show by its tt… id — the full IMDb review text plus the reviewer's star rating, headline, date, spoiler flag and helpful up/down votes. Cursor-paginated: pass the returned `next_cursor` back as `cursor` to walk through every review (titles can have thousands). meta.total reports the full review count.","required_params":["imdb_id"],"optional_params":["sort","cursor","limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb title id — the 'tt…' in an IMDb URL (tt0133093 = The Matrix). Get one from the `search` action.","on_invalid":"reject","example":"tt0133093","aliases":["id","title_id","tconst"]},{"name":"sort","type":"enum","required":false,"description":"Order reviews by helpfulness, date, rating or total votes (default helpful).","on_invalid":"ignore","allowed_values":[{"value":"helpful","label":"Most helpful first"},{"value":"recent","label":"Newest first"},{"value":"rating","label":"Highest user rating first"},{"value":"votes","label":"Most total votes first"}],"default":"helpful"},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous call's meta.next_cursor. Omit for the first page.","on_invalid":"ignore","aliases":["after"]},{"name":"limit","type":"integer","required":false,"description":"Reviews per page (1-100). Page with `cursor`.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"reviews[]{id, author, rating, title, text, date, helpful_up, helpful_down, spoiler} + meta{total, next_cursor, has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0133093","limit":5}},{"name":"videos","description":"Trailers and video clips for a movie or TV show by its tt… id, each with a playable MP4 URL (multiple qualities), title, type (Trailer/Clip/Featurette), runtime, description and thumbnail. Note: playback URLs are IMDb-signed and time-limited.","required_params":["imdb_id"],"optional_params":["limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb title id — the 'tt…' in an IMDb URL (tt0133093 = The Matrix). Get one from the `search` action.","on_invalid":"reject","example":"tt0133093","aliases":["id","title_id","tconst"]},{"name":"limit","type":"integer","required":false,"description":"Max videos to return (1-100).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"videos[]{id, name, type, runtime_seconds, description, thumbnail, playback_urls[]{quality,url,mime_type,definition}} + meta{total}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0133093","limit":5}},{"name":"photos","description":"Image gallery for a movie or TV show by its tt… id — posters, stills and event photos with full-resolution URLs, dimensions and captions. Cursor-paginated: pass the returned `next_cursor` back as `cursor`. meta.total reports the gallery size.","required_params":["imdb_id"],"optional_params":["cursor","limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb title id — the 'tt…' in an IMDb URL (tt0133093 = The Matrix). Get one from the `search` action.","on_invalid":"reject","example":"tt0133093","aliases":["id","title_id","tconst"]},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous call's meta.next_cursor. Omit for the first page.","on_invalid":"ignore","aliases":["after"]},{"name":"limit","type":"integer","required":false,"description":"Photos per page (1-100). Page with `cursor`.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100}],"returns":"photos[]{id, url, width, height, caption} + meta{total, next_cursor, has_more}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0133093","limit":5}},{"name":"awards","description":"Awards and nominations for a movie or TV show by its tt… id — Oscars, Golden Globes, BAFTAs, Emmys and more, each with the event, year, category, win/nomination flag and the people nominated. Cursor-paginated; meta.total reports the full count.","required_params":["imdb_id"],"optional_params":["cursor","limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb title id — the 'tt…' in an IMDb URL (tt0133093 = The Matrix). Get one from the `search` action.","on_invalid":"reject","example":"tt0133093","aliases":["id","title_id","tconst"]},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous call's meta.next_cursor. Omit for the first page.","on_invalid":"ignore","aliases":["after"]},{"name":"limit","type":"integer","required":false,"description":"Awards per page (1-100). Page with `cursor`.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100}],"returns":"awards[]{id, is_winner, award, category, event, year, notes} + meta{total, next_cursor, has_more}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0133093","limit":5}},{"name":"extras","description":"Extra IMDb detail for a movie or TV show by its tt… id in one call: trivia, plot keywords, goofs, memorable quotes, alternate titles (AKAs), country release dates, taglines and the parental guide (Sex/Nudity, Violence, Profanity, etc. with severity and example items). Each section is capped by `limit`; section totals are reported.","required_params":["imdb_id"],"optional_params":["limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb title id — the 'tt…' in an IMDb URL (tt0133093 = The Matrix). Get one from the `search` action.","on_invalid":"reject","example":"tt0133093","aliases":["id","title_id","tconst"]},{"name":"limit","type":"integer","required":false,"description":"Max items per section (trivia/keywords/goofs/quotes/akas/release_dates/taglines), 1-100.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"extras{trivia[], keywords[], goofs[], quotes[], akas[], release_dates[], taglines[], parental_guide[]} + per-section totals in meta.section_totals","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0133093","limit":5}},{"name":"credits","description":"Full cast & crew for a movie or TV show by its tt… id, grouped by department (director, writer, cast, producer, cinematographer, editor, composer, …) — beyond the top-20 cast in `title`. Omit `category` for every department (first N each); pass one `category` to page that department fully with `cursor`.","required_params":["imdb_id"],"optional_params":["category","cursor","limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb title id — the 'tt…' in an IMDb URL (tt0133093 = The Matrix). Get one from the `search` action.","on_invalid":"reject","example":"tt0133093","aliases":["id","title_id","tconst"]},{"name":"category","type":"string","required":false,"description":"One department id to page fully (e.g. cast, director, writer, producer, cinematographer, editor, composer, casting_director). Omit to get every department grouped.","on_invalid":"ignore","example":"cast"},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor (single-category mode) from a previous call's meta.next_cursor.","on_invalid":"ignore","aliases":["after"]},{"name":"limit","type":"integer","required":false,"description":"Members per department (grouped) or per page (single category), 1-250.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250}],"returns":"departments[]{category, total, members[]{id,name,job,characters[],attributes[]}} (grouped) OR credits[]{...} + meta{category,total,next_cursor,has_more} (single category)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0133093"}},{"name":"person_extras","description":"Extra IMDb detail for a person by their nm… id: their photo gallery (full-res URLs + captions), awards and nominations (with the titles they were for), height and alternate names. Complements `person` (bio + filmography).","required_params":["imdb_id"],"optional_params":["cursor","limit"],"params":[{"name":"imdb_id","type":"string","required":true,"description":"IMDb name id — the 'nm…' in an IMDb person URL (nm0000158 = Tom Hanks). Get one from the `search` action.","on_invalid":"reject","example":"nm0000158","aliases":["id","name_id","nconst"]},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor for awards, from a previous call's meta.next_cursor.","on_invalid":"ignore","aliases":["after"]},{"name":"limit","type":"integer","required":false,"description":"Max photos and awards to return (1-100). Awards page with `cursor`.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"person_extras{id, name, height_cm, akas[], photos[]{id,url,caption}, awards[]{id,is_winner,award,category,event,year,for_titles[]}} + meta{photos_total, awards_total, next_cursor, has_more}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"nm0634240","limit":5}},{"name":"whats_new","description":"IMDb's 'what's new' lists: upcoming movies (coming_soon_movies) or TV (coming_soon_tv) with release dates, the weekend box-office top 10 (box_office) with gross earnings, or the currently trending titles (trending). One friendly `list` value picks the board; coming-soon lists are cursor-paginated and region-aware.","required_params":[],"optional_params":["list","region","cursor","limit"],"params":[{"name":"list","type":"enum","required":false,"description":"Which 'what's new' list to return (default coming_soon_movies).","on_invalid":"ignore","allowed_values":[{"value":"coming_soon_movies","label":"Upcoming / not-yet-released movies"},{"value":"coming_soon_tv","label":"Upcoming TV shows"},{"value":"box_office","label":"Weekend box-office top 10 (with gross)"},{"value":"trending","label":"Currently trending titles"}],"default":"coming_soon_movies"},{"name":"region","type":"string","required":false,"description":"2-letter region for coming-soon release dates (e.g. US, GB, DE, IN, TR). Ignored for box_office/trending.","on_invalid":"ignore","default":"US","example":"US"},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor (coming-soon lists) from a previous call's meta.next_cursor.","on_invalid":"ignore","aliases":["after"]},{"name":"limit","type":"integer","required":false,"description":"How many entries to return (1-100).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"results[]{id, title, type, year, release_date, rating, vote_count, weekend_gross, image, genres[]} + meta{list, region, next_cursor, has_more, weekend_start, weekend_end}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"list":"box_office"}}]},{"name":"immobiliare","category":{"id":"real-estate","title":"Real Estate"},"title":"Immobiliare.it API scraper — Italy real estate data: for-sale and for-rent property listings across every Italian city, province and region with full filters (price, rooms, surface m², bathrooms, property type, sort), each listing with price, rooms, bathrooms, surface, floor, typology, features, photos, agency and map coordinates, plus location autocomplete that resolves a city name to the search geo-ids — no API key required","version":"1.0.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/immobiliare/v1","spec_available":true,"actions":[{"name":"search","description":"Search Immobiliare.it property listings by location (for sale or for rent), with structured filters: price (EUR), rooms, surface (m²), bathrooms, property type and sort. Each result carries price, rooms, bathrooms, surface, floor, typology, features, agency, map coordinates and the primary photo. Paginate with page.","required_params":["location"],"optional_params":["contract","category","sort","home_type","page","price_min","price_max","rooms_min","rooms_max","surface_min","surface_max","baths_min"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — an Italian city, province or region ('Roma', 'Milano', 'Napoli', 'Toscana'). Resolved to Immobiliare's geo-ids automatically (deepest match: city > province > region).","on_invalid":"reject","example":"Roma","aliases":["loc","city","where"]},{"name":"contract","type":"enum","required":false,"description":"Listing type.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"For sale (vendita)"},{"value":"rent","label":"For rent (affitto)"}],"default":"sale","example":"sale"},{"name":"category","type":"enum","required":false,"description":"Property category.","on_invalid":"ignore","allowed_values":[{"value":"residential","label":"Residential homes"},{"value":"rooms","label":"Rooms / garages / boxes"}],"default":"residential","example":"residential"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"newest","label":"Most recently updated"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"surface_high","label":"Largest surface first"}],"default":"relevance","example":"newest"},{"name":"home_type","type":"string","required":false,"description":"Property typology — one or several comma-separated: apartment, penthouse, villa, villa_terraced, townhouse, farmhouse, building, garage. e.g. 'apartment,penthouse'.","on_invalid":"ignore","example":"apartment"},{"name":"page","type":"integer","required":false,"description":"Result page (25 listings per page; paginate with page += 1).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR (sale price, or monthly rent when contract=rent).","on_invalid":"ignore","example":200000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR.","on_invalid":"ignore","example":400000,"minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Minimum number of rooms (locali). 3 = 3+.","on_invalid":"ignore","example":3,"minimum":1,"maximum":20,"aliases":["rooms"]},{"name":"rooms_max","type":"integer","required":false,"description":"Maximum number of rooms (locali).","on_invalid":"ignore","example":5,"minimum":1,"maximum":20},{"name":"surface_min","type":"integer","required":false,"description":"Minimum living surface in square metres (m²).","on_invalid":"ignore","example":80,"minimum":0},{"name":"surface_max","type":"integer","required":false,"description":"Maximum living surface in square metres (m²).","on_invalid":"ignore","example":150,"minimum":0},{"name":"baths_min","type":"integer","required":false,"description":"Minimum number of bathrooms. 2 = 2+.","on_invalid":"ignore","example":2,"minimum":1,"maximum":10,"aliases":["baths"]}],"returns":"results[]{id, url, price_eur, contract, typology, rooms, bedrooms, bathrooms, surface_m2, floor, elevator, heating, condition, features[], location{city, province, latitude, longitude}, agency{name, url}, primary_photo_url} + total + count + page + max_pages + filters_applied + geo","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"Roma"}},{"name":"detail","description":"Full record for a single listing by its Immobiliare id (from a search result's `id`, or the number in an immobiliare.it/annunci/<id>/ URL). Returns every structured field plus all photos at full resolution. Note: the long description text is the portal preview (~600 chars); the complete prose is only on the listing page itself.","required_params":["id"],"optional_params":["location"],"params":[{"name":"id","type":"string","required":true,"description":"Immobiliare listing id (the number in an immobiliare.it/annunci/<id>/ URL, or a search result's `id`).","on_invalid":"reject","example":"129504906","aliases":["listing_id","property_id"]},{"name":"location","type":"string","required":false,"description":"The listing's city. Strongly recommended: Immobiliare has no direct listing endpoint, so the listing is found by searching the city it is in. With a city the call takes about two seconds; without one the engine has to guess, and the lookup may run out of time and tell you so (measured 2026-10-01 on one listing: 2.4 s with, 124 s without).","on_invalid":"ignore","example":"Roma","aliases":["loc","city"]}],"returns":"listing{id, url, price_eur, typology, rooms, bathrooms, surface_m2, floor, elevator, heating, condition, features[], photos[], location{}, agency{}, description_preview, description_truncated}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"130988676","location":"Roma"}},{"name":"geography","description":"Location autocomplete — resolve a free-text Italian place name to Immobiliare's geo-ids (comune / province / region) with centre coordinates. Use it to power a search box or to get the exact ids the search needs. Returns ready-to-use search_params for each match.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text Italian place to autocomplete — a partial city, province or region ('Rom', 'Mil', 'Tosc').","on_invalid":"reject","example":"Mil","aliases":["q","input","location","city"]},{"name":"limit","type":"integer","required":false,"description":"Max suggestions to return (1-20).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":20}],"returns":"suggestions[]{geo_id, type_name, label, province_id, region_id, latitude, longitude, search_params{}} + count + query","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Roma"}}]},{"name":"immoweb","category":{"id":"real-estate","title":"Real Estate"},"title":"Immoweb API scraper — Belgian property data: for-sale and rental listings across Belgium with the portal's own filters (price, bedrooms, habitable and land surface, property type and subtype, EPC/PEB rating, building condition, construction year, facades, garden and terrace, amenities, sort), full listing detail (price and price per m², bedrooms, bathrooms, surfaces, EPC with primary energy consumption and carbon emission, construction year, cadastral income, charges, heating, flood zone and planning, address and coordinates, every photo, description and the advertising agency), a market-size counter for any filter combination, the estate-agency directory, and a place resolver — from immoweb.be, Belgium's main property portal. No API key, no login.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/immoweb/v1","spec_available":true,"actions":[{"name":"location_search","description":"Resolve a Belgian place name, postal code, district, province or estate-agency name to the exact values `search` takes. Returns ranked matches, each carrying the parameter name and the value to pass, so a caller never has to guess an immoweb token.","required_params":["query"],"optional_params":["kind","language"],"params":[{"name":"query","type":"string","required":true,"description":"A Belgian place or estate agency to resolve: a town, a district, a province, a postal code, or an agency name. Works in Dutch, French and English ('Gent'/'Gand', 'Antwerp'/'Antwerpen', 'Liège'/'Luik').","on_invalid":"reject","example":"Gent","aliases":["q","location","place"]},{"name":"kind","type":"enum","required":false,"description":"Which groups to return.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Places and agencies"},{"value":"places","label":"Places only"},{"value":"agencies","label":"Estate agencies only"}],"default":"all","example":"all"},{"name":"language","type":"enum","required":false,"description":"Belgium is trilingual and the language is NOT only a label. Ids, prices, surfaces and coordinates are identical in all three, but an advertiser writes the ad in one or more languages: ask for a language they did not use and immoweb returns a null title and description. This engine falls back to whatever the advertiser did publish and tells you which language it used in `description_language`. What the language really controls is the LABELS: province and region names, the EPC wording and the formatted price string.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch / Nederlands"},{"value":"fr","label":"French / Français"}],"default":"en","example":"en","aliases":["lang","locale"]}],"returns":"matches[]{label, type (DISTRICT/PROVINCE/LOCALITY_NAME/POSTAL_CODE/AGENT_NAME/AGENCY_GROUP_NAME/AGENCY_NETWORK), group, search_param (which search parameter to use), value (what to pass), searchable, not_searchable_reason, slug, agency_id, postal_code_count}, count, searchable_count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Gent"}},{"name":"search","description":"Search Belgian property listings — for sale or to rent — anywhere in Belgium or narrowed to postal codes, districts, provinces or one estate agency, with immoweb's own filters: price, bedrooms, rooms, habitable and land surface, garden, terrace and kitchen surface, property type and subtype, EPC/PEB rating, building condition, construction year, facades, parking, amenities and sort. 30 listings per page.","required_params":[],"optional_params":["transaction","property_type","property_subtypes","country","postal_codes","districts","provinces","agency_id","property_ids","epc","building_condition","garden_orientation","modified_since","price_min","price_max","bedrooms_min","bedrooms_max","rooms_min","rooms_max","surface_min","surface_max","land_surface_min","land_surface_max","garden_surface_min","garden_surface_max","terrace_surface_min","terrace_surface_max","kitchen_surface_min","kitchen_surface_max","construction_year_min","construction_year_max","facades_min","facades_max","parking_min","parking_max","buildable_surface_min","buildable_surface_max","showroom_surface_min","showroom_surface_max","access_doors_min","access_doors_max","loading_bays_min","loading_bays_max","business_price_min","business_price_max","days_since_modified_max","has_garden","has_terrace","has_terrace_or_garden","has_swimming_pool","has_lift","has_fireplace","has_fitted_kitchen","has_disabled_access","has_virtual_tour","has_reception_desk","has_goodwill","is_new_build","is_furnished","is_public_sale","is_future_public_sale","is_life_annuity","is_investment_property","is_workspace","is_under_option","is_newly_published","immediately_available","construction_permit_obtained","small_pets_allowed","big_pets_allowed","sort","page","max_pages","include_promoted","strict_filters","language"],"params":[{"name":"transaction","type":"enum","required":false,"description":"Sale or rental market. Immoweb requires one, and an unknown value is silently ignored upstream, so anything else is rejected here rather than quietly returning the sale market.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"To rent"},{"value":"both","label":"Both markets at once"},{"value":"buy","label":"= sale"},{"value":"for-sale","label":"= sale"},{"value":"to-rent","label":"= rent"}],"default":"sale","example":"sale","aliases":["channel","transaction_type"]},{"name":"property_type","type":"string","required":false,"description":"Which immoweb catalogue to search. Several may be combined with a comma ('house,apartment'). Belgium-wide for-sale stock on 2026-09-24: house 50 974, apartment 34 466, land 11 214, apartment-block 6 969, commercial 6 638, garage 3 846, industry 3 461, apartment-group 2 530, office 2 443, house-group 1 650, other 369.","on_invalid":"reject","allowed_values":[{"value":"house","label":"Houses"},{"value":"apartment","label":"Apartments / flats"},{"value":"residential","label":"Houses and apartments together (default)"},{"value":"land","label":"Land and plots"},{"value":"garage","label":"Garages and parking"},{"value":"office","label":"Offices"},{"value":"commercial","label":"Commercial premises and retail"},{"value":"industry","label":"Industrial premises and warehouses"},{"value":"apartment-block","label":"Whole apartment blocks / tenement buildings"},{"value":"house-group","label":"Groups of houses"},{"value":"apartment-group","label":"Groups of apartments"},{"value":"other","label":"Everything else"}],"default":"residential","example":"house","aliases":["type"]},{"name":"property_subtypes","type":"array","required":false,"description":"Narrow to specific kinds. They belong to a property_type: VILLA/TOWN_HOUSE/CASTLE and friends to houses, PENTHOUSE/DUPLEX/LOFT/FLAT_STUDIO/KOT to apartments, BUILDING_LAND/FOREST/MEADOW to land. A subtype from the wrong catalogue returns an honest 0 rather than an error.","on_invalid":"reject","allowed_values":[{"value":"AGRICULTURAL_AREA","label":"Agricultural Area"},{"value":"APARTMENT_BLOCK","label":"Apartment Block"},{"value":"BARGE","label":"Barge"},{"value":"BED_N_BREAKFAST","label":"Bed N Breakfast"},{"value":"BUILDING","label":"Building"},{"value":"BUILDING_LAND","label":"Building Land"},{"value":"BUNGALOW","label":"Bungalow"},{"value":"CAMPSITE","label":"Campsite"},{"value":"CASTLE","label":"Castle"},{"value":"CHALET","label":"Chalet"},{"value":"COMMERCIAL_PREMISES","label":"Commercial Premises"},{"value":"COMMERCIAL_VILLA","label":"Commercial Villa"},{"value":"COUNTRY_COTTAGE","label":"Country Cottage"},{"value":"COVERED_PARKING_SPACE","label":"Covered Parking Space"},{"value":"DUPLEX","label":"Duplex"},{"value":"EXCEPTIONAL_PROPERTY","label":"Exceptional Property"},{"value":"FARMHOUSE","label":"Farmhouse"},{"value":"FIELDS","label":"Fields"},{"value":"FLAT_STUDIO","label":"Flat Studio"},{"value":"FOREST","label":"Forest"},{"value":"GITES","label":"Gites"},{"value":"GROUND_FLOOR","label":"Ground Floor"},{"value":"HOLIDAY_PARK","label":"Holiday Park"},{"value":"HOTEL","label":"Hotel"},{"value":"HOTEL_RESTAURANT_CAFE","label":"Hotel Restaurant Cafe"},{"value":"INDUSTRIAL_PREMISES","label":"Industrial Premises"},{"value":"KOT","label":"Kot"},{"value":"LARGE_TOWN_HOUSE","label":"Large Town House"},{"value":"LOCK_UP_GARAGE","label":"Lock Up Garage"},{"value":"LOCK_UP_PARKING","label":"Lock Up Parking"},{"value":"LOFT","label":"Loft"},{"value":"MANOR_HOUSE","label":"Manor House"},{"value":"MANSION","label":"Mansion"},{"value":"MEADOW","label":"Meadow"},{"value":"MILL","label":"Mill"},{"value":"MIXED_USE_BUILDING","label":"Mixed Use Building"},{"value":"MIXED_USE_BUILDING_COMMERCIAL","label":"Mixed Use Building Commercial"},{"value":"MIXED_USE_BUILDING_INDUSTRIES","label":"Mixed Use Building Industries"},{"value":"MIXED_USE_BUILDING_OFFICES","label":"Mixed Use Building Offices"},{"value":"MOBILE_HOME","label":"Mobile Home"},{"value":"OFFICES","label":"Offices"},{"value":"OFFICE_BLOCK","label":"Office Block"},{"value":"ORCHARD","label":"Orchard"},{"value":"OTHER","label":"Other"},{"value":"OTHER_HOUSE","label":"Other House"},{"value":"OTHER_PROPERTY","label":"Other Property"},{"value":"OUTDOOR_PARKING_SPACE","label":"Outdoor Parking Space"},{"value":"PAVILION","label":"Pavilion"},{"value":"PENTHOUSE","label":"Penthouse"},{"value":"PROVINCIAL_FARMHOUSE","label":"Provincial Farmhouse"},{"value":"RECREATIONAL_AREA","label":"Recreational Area"},{"value":"SERVICE_FLAT","label":"Service Flat"},{"value":"STATIC_CARAVAN","label":"Static Caravan"},{"value":"TOWN_HOUSE","label":"Town House"},{"value":"TRIPLEX","label":"Triplex"},{"value":"UNBUILDABLE_LAND","label":"Unbuildable Land"},{"value":"VILLA","label":"Villa"},{"value":"WAREHOUSE","label":"Warehouse"}],"example":["VILLA"],"aliases":["subtypes"]},{"name":"country","type":"array","required":false,"description":"Immoweb is Belgian but also carries foreign stock advertised to Belgians. Houses for sale on 2026-09-24: BE 50 977, FR 1 034, ES 174, NL 48, IT 48, LU 30, DE 4.","on_invalid":"reject","allowed_values":[{"value":"BE","label":"BE"},{"value":"FR","label":"FR"},{"value":"NL","label":"NL"},{"value":"LU","label":"LU"},{"value":"DE","label":"DE"},{"value":"ES","label":"ES"},{"value":"IT","label":"IT"}],"default":"BE","example":"BE","aliases":["countries"]},{"name":"postal_codes","type":"array","required":false,"description":"Belgian postal codes, either bare ('9000') or prefixed ('BE-9000'). Several may be combined — location_search returns a ready-made list for 'Gent (all localities)' style matches. A code immoweb does not know is silently ignored upstream, so an unrecognisable shape is refused here.","on_invalid":"reject","example":["9000"],"aliases":["postal_code","zip_code"]},{"name":"districts","type":"array","required":false,"description":"Immoweb district tokens (GENT, BRUSSELS, ANTWERP…). Get them from location_search: it returns the exact token in `value` for every District match.","on_invalid":"reject","example":["GENT"],"aliases":["district"]},{"name":"provinces","type":"array","required":false,"description":"One or more of the eleven Belgian provinces. Dutch and French spellings (Oost-Vlaanderen, Brabant-Wallon, Luik…) are accepted.","on_invalid":"reject","allowed_values":[{"value":"ANTWERP","label":"Antwerp"},{"value":"BRUSSELS","label":"Brussels"},{"value":"EAST_FLANDERS","label":"East Flanders"},{"value":"FLEMISH_BRABANT","label":"Flemish Brabant"},{"value":"HAINAUT","label":"Hainaut"},{"value":"LIEGE","label":"Liege"},{"value":"LIMBURG","label":"Limburg"},{"value":"LUXEMBOURG","label":"Luxembourg"},{"value":"NAMUR","label":"Namur"},{"value":"WALLOON_BRABANT","label":"Walloon Brabant"},{"value":"WEST_FLANDERS","label":"West Flanders"}],"example":["ANTWERP"],"aliases":["province"]},{"name":"agency_id","type":"array","required":false,"description":"Show only the stock of one or more estate agencies. location_search returns the id for every Agency/Agent match, and agency_search returns it as agency_id.","on_invalid":"reject","example":"2078276","aliases":["agency_ids","customer_id"]},{"name":"property_ids","type":"array","required":false,"description":"Fetch specific listings by id in one call — a cheap way to re-check a saved set. Ids that do not match the other criteria (a rental id under transaction=sale, a sold listing) are simply absent from the result, so compare what comes back against what you asked for.","on_invalid":"reject","example":["21866842"],"aliases":["classified_ids"]},{"name":"epc","type":"array","required":false,"description":"Energy-performance rating (EPC in Flanders, PEB in Wallonia and Brussels). Several may be combined. Belgian houses for sale on 2026-09-24: A++ 175, A+ 1 385, A 5 098, B 6 343, C 8 208, G 3 079, X (none published) 55.","on_invalid":"reject","allowed_values":[{"value":"A++","label":"A++"},{"value":"A+","label":"A+"},{"value":"A","label":"A"},{"value":"B","label":"B"},{"value":"C","label":"C"},{"value":"D","label":"D"},{"value":"E","label":"E"},{"value":"F","label":"F"},{"value":"G","label":"G"},{"value":"X","label":"X"}],"example":["A"],"aliases":["epc_scores","peb"]},{"name":"building_condition","type":"array","required":false,"description":"State of repair as the advertiser declared it. Several may be combined (AS_NEW 11 071 + GOOD 13 731 = 24 800 Belgian houses for sale).","on_invalid":"reject","allowed_values":[{"value":"AS_NEW","label":"As New"},{"value":"JUST_RENOVATED","label":"Just Renovated"},{"value":"GOOD","label":"Good"},{"value":"TO_BE_DONE_UP","label":"To Be Done Up"},{"value":"TO_RENOVATE","label":"To Renovate"},{"value":"TO_RESTORE","label":"To Restore"},{"value":"FIRST_TIME_USED","label":"First Time Used"},{"value":"CASCO","label":"Casco"}],"example":["AS_NEW"],"aliases":["condition"]},{"name":"garden_orientation","type":"array","required":false,"description":"Which way the garden or terrace faces. Eight compass points; SOUTH is the commonest (1 369 of 50 977 Belgian houses for sale).","on_invalid":"reject","allowed_values":[{"value":"NORTH","label":"North"},{"value":"NORTH_EAST","label":"North East"},{"value":"EAST","label":"East"},{"value":"SOUTH_EAST","label":"South East"},{"value":"SOUTH","label":"South"},{"value":"SOUTH_WEST","label":"South West"},{"value":"WEST","label":"West"},{"value":"NORTH_WEST","label":"North West"}],"example":["SOUTH"]},{"name":"modified_since","type":"string","required":false,"description":"Only listings touched on or after this date (YYYY-MM-DD). Together with days_since_modified_max this is how you poll immoweb for what is new without re-reading the whole market.","on_invalid":"reject","example":"2026-09-20"},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR — the monthly rent when transaction=rent. 🔴 Life-annuity listings have no price at all and therefore pass every minimum; they come back with price null and price_type 'life_annuity'.","on_invalid":"reject","example":200000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR (monthly rent when transaction=rent).","on_invalid":"reject","example":400000,"minimum":0},{"name":"bedrooms_min","type":"integer","required":false,"description":"Minimum number of bedrooms.","on_invalid":"reject","example":3,"minimum":0},{"name":"bedrooms_max","type":"integer","required":false,"description":"Maximum number of bedrooms.","on_invalid":"reject","example":4,"minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Minimum total room count.","on_invalid":"reject","example":5,"minimum":0},{"name":"rooms_max","type":"integer","required":false,"description":"Maximum total room count.","on_invalid":"reject","example":10,"minimum":0},{"name":"surface_min","type":"integer","required":false,"description":"Minimum net habitable surface in m².","on_invalid":"reject","example":120,"minimum":0},{"name":"surface_max","type":"integer","required":false,"description":"Maximum net habitable surface in m².","on_invalid":"reject","example":300,"minimum":0},{"name":"land_surface_min","type":"integer","required":false,"description":"Minimum plot size in m².","on_invalid":"reject","example":500,"minimum":0},{"name":"land_surface_max","type":"integer","required":false,"description":"Maximum plot size in m².","on_invalid":"reject","example":2000,"minimum":0},{"name":"garden_surface_min","type":"integer","required":false,"description":"Minimum garden surface in m².","on_invalid":"reject","example":100,"minimum":0},{"name":"garden_surface_max","type":"integer","required":false,"description":"Maximum garden surface in m².","on_invalid":"reject","example":1000,"minimum":0},{"name":"terrace_surface_min","type":"integer","required":false,"description":"Minimum terrace surface in m².","on_invalid":"reject","example":10,"minimum":0},{"name":"terrace_surface_max","type":"integer","required":false,"description":"Maximum terrace surface in m².","on_invalid":"reject","example":60,"minimum":0},{"name":"kitchen_surface_min","type":"integer","required":false,"description":"Minimum kitchen surface in m².","on_invalid":"reject","example":12,"minimum":0},{"name":"kitchen_surface_max","type":"integer","required":false,"description":"Maximum kitchen surface in m².","on_invalid":"reject","example":40,"minimum":0},{"name":"construction_year_min","type":"integer","required":false,"description":"Built in or after this year.","on_invalid":"reject","example":2000,"minimum":0},{"name":"construction_year_max","type":"integer","required":false,"description":"Built in or before this year.","on_invalid":"reject","example":1960,"minimum":0},{"name":"facades_min","type":"integer","required":false,"description":"Minimum number of free facades (4 = detached).","on_invalid":"reject","example":4,"minimum":0},{"name":"facades_max","type":"integer","required":false,"description":"Maximum number of free facades (2 = terraced).","on_invalid":"reject","example":2,"minimum":0},{"name":"parking_min","type":"integer","required":false,"description":"Minimum number of parking places.","on_invalid":"reject","example":1,"minimum":0},{"name":"parking_max","type":"integer","required":false,"description":"Maximum number of parking places (0 = none).","on_invalid":"reject","example":0,"minimum":0},{"name":"buildable_surface_min","type":"integer","required":false,"description":"Minimum total buildable ground-floor surface in m² (land and development).","on_invalid":"reject","example":100,"minimum":0},{"name":"buildable_surface_max","type":"integer","required":false,"description":"Maximum total buildable ground-floor surface in m².","on_invalid":"reject","example":800,"minimum":0},{"name":"showroom_surface_min","type":"integer","required":false,"description":"Minimum showroom surface in m² (commercial).","on_invalid":"reject","example":100,"minimum":0},{"name":"showroom_surface_max","type":"integer","required":false,"description":"Maximum showroom surface in m² (commercial).","on_invalid":"reject","example":1000,"minimum":0},{"name":"access_doors_min","type":"integer","required":false,"description":"Minimum number of access doors (industrial).","on_invalid":"reject","example":1,"minimum":0},{"name":"access_doors_max","type":"integer","required":false,"description":"Maximum number of access doors (industrial).","on_invalid":"reject","example":5,"minimum":0},{"name":"loading_bays_min","type":"integer","required":false,"description":"Minimum number of loading bays (industrial).","on_invalid":"reject","example":1,"minimum":0},{"name":"loading_bays_max","type":"integer","required":false,"description":"Maximum number of loading bays (industrial).","on_invalid":"reject","example":5,"minimum":0},{"name":"business_price_min","type":"integer","required":false,"description":"Minimum price of the business / goodwill in EUR.","on_invalid":"reject","example":50000,"minimum":0},{"name":"business_price_max","type":"integer","required":false,"description":"Maximum price of the business / goodwill in EUR.","on_invalid":"reject","example":500000,"minimum":0},{"name":"days_since_modified_max","type":"integer","required":false,"description":"Only listings touched in the last N days (1 → 1 771 Belgian houses for sale, 7 → 6 042 of 50 977).","on_invalid":"reject","example":7,"minimum":0},{"name":"has_garden","type":"boolean","required":false,"description":"Has a garden (16 411 of 50 977 Belgian houses for sale).","on_invalid":"reject","example":true},{"name":"has_terrace","type":"boolean","required":false,"description":"Has a terrace (29 667).","on_invalid":"reject","example":true},{"name":"has_terrace_or_garden","type":"boolean","required":false,"description":"Has a terrace OR a garden (33 739).","on_invalid":"reject","example":true},{"name":"has_swimming_pool","type":"boolean","required":false,"description":"Has a swimming pool (1 941).","on_invalid":"reject","example":true},{"name":"has_lift","type":"boolean","required":false,"description":"Has a lift (832 houses; far commoner on apartments — 5 606 of 11 971 rentals).","on_invalid":"reject","example":true},{"name":"has_fireplace","type":"boolean","required":false,"description":"Has an open fire or stove (2 640).","on_invalid":"reject","example":true},{"name":"has_fitted_kitchen","type":"boolean","required":false,"description":"The kitchen is installed rather than bare (25 790).","on_invalid":"reject","example":true},{"name":"has_disabled_access","type":"boolean","required":false,"description":"Declared accessible (2 330).","on_invalid":"reject","example":true},{"name":"has_virtual_tour","type":"boolean","required":false,"description":"Has a virtual tour or 360° media (7 407).","on_invalid":"reject","example":true},{"name":"has_reception_desk","type":"boolean","required":false,"description":"Has a reception desk (offices and commercial).","on_invalid":"reject","example":true},{"name":"has_goodwill","type":"boolean","required":false,"description":"The business goodwill is included (commercial).","on_invalid":"reject","example":true},{"name":"is_new_build","type":"boolean","required":false,"description":"New-build only when true (5 922); resale only when false (45 052).","on_invalid":"reject","example":true},{"name":"is_furnished","type":"boolean","required":false,"description":"Furnished (885 houses for sale; 2 125 of 11 971 apartment rentals).","on_invalid":"reject","example":true},{"name":"is_public_sale","type":"boolean","required":false,"description":"Sold at public auction (500).","on_invalid":"reject","example":true},{"name":"is_future_public_sale","type":"boolean","required":false,"description":"A public sale announced but not yet open (5).","on_invalid":"reject","example":true},{"name":"is_life_annuity","type":"boolean","required":false,"description":"Sold as a life annuity — 'viager' / 'lijfrente' (169). These listings have no single price; see price_type.","on_invalid":"reject","example":true},{"name":"is_investment_property","type":"boolean","required":false,"description":"Advertised as an investment with rental income (5 009).","on_invalid":"reject","example":true},{"name":"is_workspace","type":"boolean","required":false,"description":"Has a workspace or office element (11 775).","on_invalid":"reject","example":true},{"name":"is_under_option","type":"boolean","required":false,"description":"Under option / sale agreed (10 381).","on_invalid":"reject","example":true},{"name":"is_newly_published","type":"boolean","required":false,"description":"Newly published (10 821).","on_invalid":"reject","example":true},{"name":"immediately_available","type":"boolean","required":false,"description":"Available immediately (8 845).","on_invalid":"reject","example":true},{"name":"construction_permit_obtained","type":"boolean","required":false,"description":"The construction permit has been obtained (20 607).","on_invalid":"reject","example":true},{"name":"small_pets_allowed","type":"boolean","required":false,"description":"Small pets allowed — rentals (743 of 11 971 apartment rentals).","on_invalid":"reject","example":true},{"name":"big_pets_allowed","type":"boolean","required":false,"description":"Large pets allowed — rentals (270).","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. These five are the orders immoweb actually applies — it also accepts 'postal_code' and 'proximity', echoes them back, and returns the relevance order unchanged, so they are not offered.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Immoweb's own ranking (default)"},{"value":"cheapest","label":"Cheapest first"},{"value":"most_expensive","label":"Most expensive first"},{"value":"newest","label":"Most recently published first"},{"value":"oldest","label":"Oldest first"}],"default":"relevance","example":"newest","aliases":["order_by","orderBy"]},{"name":"page","type":"integer","required":false,"description":"First page to fetch, 30 listings per page. Immoweb stops at page 333 (≈9 990 listings) and answers HTTP 500 beyond it, whatever the market total — use filters, postal codes or provinces to slice a big market instead.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":333},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch in one call (1-15). Each page is one upstream request of about 1 MB.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":15},{"name":"include_promoted","type":"boolean","required":false,"description":"Immoweb injects one paid-placement listing at the top of page 1 — it ignores the sort order and also appears in its organic position further down. It is a real property, so it is returned by default flagged `promoted: true` and counted in meta.promoted_count. Set false to receive only the organic rows.","on_invalid":"reject","default":true,"example":true},{"name":"strict_filters","type":"boolean","required":false,"description":"Immoweb answers HTTP 200 and returns the UNFILTERED market when it does not recognise a filter value. Its response echoes back the filters it really applied, so this engine compares the two on every call and, by default, fails the request naming any filter that was dropped. Set false to receive the results anyway with the dropped filters listed in meta.filters_ignored.","on_invalid":"reject","default":true,"example":true},{"name":"language","type":"enum","required":false,"description":"Belgium is trilingual and the language is NOT only a label. Ids, prices, surfaces and coordinates are identical in all three, but an advertiser writes the ad in one or more languages: ask for a language they did not use and immoweb returns a null title and description. This engine falls back to whatever the advertiser did publish and tells you which language it used in `description_language`. What the language really controls is the LABELS: province and region names, the EPC wording and the formatted price string.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch / Nederlands"},{"value":"fr","label":"French / Français"}],"default":"en","example":"en","aliases":["lang","locale"]}],"returns":"items[]{property_id, url, promoted, transaction, property_type, property_subtype, title, price, price_display, price_type, price_period, price_details{…life_annuity…}, price_per_sqm, bedrooms, rooms, surface_m2, land_surface_m2, epc_score, address{country, region, province, district, locality, postal_code, street, number}, latitude, longitude, images[], has_video, has_virtual_tour, last_modified_at, project{is_development, project_name, price_from, price_to, bedroom_range, surface_range, sold_percentage} (non-null only for new-build developments, which have no single price), agency{name, logo_url}}, count, total_results (immoweb's own market total), reachable_results (what pagination can reach), promoted_count, page, pages_fetched, page_size, filters_applied, filters_ignored, sort, stop_reason","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"property_type":"house","transaction":"sale"}},{"name":"property_detail","description":"The full immoweb listing: price and price per m², bedrooms, bathrooms, shower rooms and toilets, habitable / land / garden / terrace surfaces, EPC or PEB score with primary energy consumption and carbon emission, construction year, building condition and facade count, heating and energy equipment, cadastral income, monthly charges, flood zone and urban-planning status, land characteristics, parking, thirty amenity flags, address and coordinates, every photo, the full description in the language the advertiser wrote it, and the advertising agency.","required_params":["property_id"],"optional_params":["language"],"params":[{"name":"property_id","type":"string","required":true,"description":"Immoweb listing id — the digits at the end of any immoweb listing URL ('21866842'), or paste the whole URL and the id is taken out of it. A Belgian listing disappears the day it sells, so there is no id that stays valid forever; for a guaranteed-live example pass `newest:<property_type>` (newest:house, newest:apartment, newest:land …) and the newest listing of that kind is resolved and returned. That form costs one extra upstream lookup.","on_invalid":"reject","example":"newest:house","aliases":["id","classified_id","url"]},{"name":"language","type":"enum","required":false,"description":"Belgium is trilingual and the language is NOT only a label. Ids, prices, surfaces and coordinates are identical in all three, but an advertiser writes the ad in one or more languages: ask for a language they did not use and immoweb returns a null title and description. This engine falls back to whatever the advertiser did publish and tells you which language it used in `description_language`. What the language really controls is the LABELS: province and region names, the EPC wording and the formatted price string.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch / Nederlands"},{"value":"fr","label":"French / Français"}],"default":"en","example":"en","aliases":["lang","locale"]}],"returns":"listing{property_id, url, title, transaction, property_type, property_subtype, price, price_type, price_details, price_per_sqm, cadastral_income, monthly_costs, bedrooms, bathrooms, shower_rooms, toilets, rooms, surface_m2, land_surface_m2, garden_surface_m2, terrace_surface_m2, kitchen{}, building{condition, construction_year, facade_count, floor_count, is_heritage_protected}, energy{}, epc{epc_score, primary_energy_consumption_kwh_per_sqm, carbon_emission, epc_reference}, certificates{}, planning{flood_zone_type, permit_obtained, urban_development_zoning}, land{}, parking{}, amenities{}, availability{}, address{}, latitude, longitude, description, description_language, project{} (new-build developments only), images[], virtual_tour_url, reference, published_at, last_modified_at, statistics{view_count}, advertisers[]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"property_id":"newest:house"}},{"name":"market_count","description":"How many listings match a filter combination — immoweb's own total, in a 26-byte answer. Use it to size a market, to check a filter before paging through it, or to track supply over time without downloading any listings.","required_params":[],"optional_params":["transaction","property_type","property_subtypes","country","postal_codes","districts","provinces","agency_id","property_ids","epc","building_condition","garden_orientation","modified_since","price_min","price_max","bedrooms_min","bedrooms_max","rooms_min","rooms_max","surface_min","surface_max","land_surface_min","land_surface_max","garden_surface_min","garden_surface_max","terrace_surface_min","terrace_surface_max","kitchen_surface_min","kitchen_surface_max","construction_year_min","construction_year_max","facades_min","facades_max","parking_min","parking_max","buildable_surface_min","buildable_surface_max","showroom_surface_min","showroom_surface_max","access_doors_min","access_doors_max","loading_bays_min","loading_bays_max","business_price_min","business_price_max","days_since_modified_max","has_garden","has_terrace","has_terrace_or_garden","has_swimming_pool","has_lift","has_fireplace","has_fitted_kitchen","has_disabled_access","has_virtual_tour","has_reception_desk","has_goodwill","is_new_build","is_furnished","is_public_sale","is_future_public_sale","is_life_annuity","is_investment_property","is_workspace","is_under_option","is_newly_published","immediately_available","construction_permit_obtained","small_pets_allowed","big_pets_allowed","language"],"params":[{"name":"transaction","type":"enum","required":false,"description":"Sale or rental market. Immoweb requires one, and an unknown value is silently ignored upstream, so anything else is rejected here rather than quietly returning the sale market.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"To rent"},{"value":"both","label":"Both markets at once"},{"value":"buy","label":"= sale"},{"value":"for-sale","label":"= sale"},{"value":"to-rent","label":"= rent"}],"default":"sale","example":"sale","aliases":["channel","transaction_type"]},{"name":"property_type","type":"string","required":false,"description":"Which immoweb catalogue to search. Several may be combined with a comma ('house,apartment'). Belgium-wide for-sale stock on 2026-09-24: house 50 974, apartment 34 466, land 11 214, apartment-block 6 969, commercial 6 638, garage 3 846, industry 3 461, apartment-group 2 530, office 2 443, house-group 1 650, other 369.","on_invalid":"reject","allowed_values":[{"value":"house","label":"Houses"},{"value":"apartment","label":"Apartments / flats"},{"value":"residential","label":"Houses and apartments together (default)"},{"value":"land","label":"Land and plots"},{"value":"garage","label":"Garages and parking"},{"value":"office","label":"Offices"},{"value":"commercial","label":"Commercial premises and retail"},{"value":"industry","label":"Industrial premises and warehouses"},{"value":"apartment-block","label":"Whole apartment blocks / tenement buildings"},{"value":"house-group","label":"Groups of houses"},{"value":"apartment-group","label":"Groups of apartments"},{"value":"other","label":"Everything else"}],"default":"residential","example":"house","aliases":["type"]},{"name":"property_subtypes","type":"array","required":false,"description":"Narrow to specific kinds. They belong to a property_type: VILLA/TOWN_HOUSE/CASTLE and friends to houses, PENTHOUSE/DUPLEX/LOFT/FLAT_STUDIO/KOT to apartments, BUILDING_LAND/FOREST/MEADOW to land. A subtype from the wrong catalogue returns an honest 0 rather than an error.","on_invalid":"reject","allowed_values":[{"value":"AGRICULTURAL_AREA","label":"Agricultural Area"},{"value":"APARTMENT_BLOCK","label":"Apartment Block"},{"value":"BARGE","label":"Barge"},{"value":"BED_N_BREAKFAST","label":"Bed N Breakfast"},{"value":"BUILDING","label":"Building"},{"value":"BUILDING_LAND","label":"Building Land"},{"value":"BUNGALOW","label":"Bungalow"},{"value":"CAMPSITE","label":"Campsite"},{"value":"CASTLE","label":"Castle"},{"value":"CHALET","label":"Chalet"},{"value":"COMMERCIAL_PREMISES","label":"Commercial Premises"},{"value":"COMMERCIAL_VILLA","label":"Commercial Villa"},{"value":"COUNTRY_COTTAGE","label":"Country Cottage"},{"value":"COVERED_PARKING_SPACE","label":"Covered Parking Space"},{"value":"DUPLEX","label":"Duplex"},{"value":"EXCEPTIONAL_PROPERTY","label":"Exceptional Property"},{"value":"FARMHOUSE","label":"Farmhouse"},{"value":"FIELDS","label":"Fields"},{"value":"FLAT_STUDIO","label":"Flat Studio"},{"value":"FOREST","label":"Forest"},{"value":"GITES","label":"Gites"},{"value":"GROUND_FLOOR","label":"Ground Floor"},{"value":"HOLIDAY_PARK","label":"Holiday Park"},{"value":"HOTEL","label":"Hotel"},{"value":"HOTEL_RESTAURANT_CAFE","label":"Hotel Restaurant Cafe"},{"value":"INDUSTRIAL_PREMISES","label":"Industrial Premises"},{"value":"KOT","label":"Kot"},{"value":"LARGE_TOWN_HOUSE","label":"Large Town House"},{"value":"LOCK_UP_GARAGE","label":"Lock Up Garage"},{"value":"LOCK_UP_PARKING","label":"Lock Up Parking"},{"value":"LOFT","label":"Loft"},{"value":"MANOR_HOUSE","label":"Manor House"},{"value":"MANSION","label":"Mansion"},{"value":"MEADOW","label":"Meadow"},{"value":"MILL","label":"Mill"},{"value":"MIXED_USE_BUILDING","label":"Mixed Use Building"},{"value":"MIXED_USE_BUILDING_COMMERCIAL","label":"Mixed Use Building Commercial"},{"value":"MIXED_USE_BUILDING_INDUSTRIES","label":"Mixed Use Building Industries"},{"value":"MIXED_USE_BUILDING_OFFICES","label":"Mixed Use Building Offices"},{"value":"MOBILE_HOME","label":"Mobile Home"},{"value":"OFFICES","label":"Offices"},{"value":"OFFICE_BLOCK","label":"Office Block"},{"value":"ORCHARD","label":"Orchard"},{"value":"OTHER","label":"Other"},{"value":"OTHER_HOUSE","label":"Other House"},{"value":"OTHER_PROPERTY","label":"Other Property"},{"value":"OUTDOOR_PARKING_SPACE","label":"Outdoor Parking Space"},{"value":"PAVILION","label":"Pavilion"},{"value":"PENTHOUSE","label":"Penthouse"},{"value":"PROVINCIAL_FARMHOUSE","label":"Provincial Farmhouse"},{"value":"RECREATIONAL_AREA","label":"Recreational Area"},{"value":"SERVICE_FLAT","label":"Service Flat"},{"value":"STATIC_CARAVAN","label":"Static Caravan"},{"value":"TOWN_HOUSE","label":"Town House"},{"value":"TRIPLEX","label":"Triplex"},{"value":"UNBUILDABLE_LAND","label":"Unbuildable Land"},{"value":"VILLA","label":"Villa"},{"value":"WAREHOUSE","label":"Warehouse"}],"example":["VILLA"],"aliases":["subtypes"]},{"name":"country","type":"array","required":false,"description":"Immoweb is Belgian but also carries foreign stock advertised to Belgians. Houses for sale on 2026-09-24: BE 50 977, FR 1 034, ES 174, NL 48, IT 48, LU 30, DE 4.","on_invalid":"reject","allowed_values":[{"value":"BE","label":"BE"},{"value":"FR","label":"FR"},{"value":"NL","label":"NL"},{"value":"LU","label":"LU"},{"value":"DE","label":"DE"},{"value":"ES","label":"ES"},{"value":"IT","label":"IT"}],"default":"BE","example":"BE","aliases":["countries"]},{"name":"postal_codes","type":"array","required":false,"description":"Belgian postal codes, either bare ('9000') or prefixed ('BE-9000'). Several may be combined — location_search returns a ready-made list for 'Gent (all localities)' style matches. A code immoweb does not know is silently ignored upstream, so an unrecognisable shape is refused here.","on_invalid":"reject","example":["9000"],"aliases":["postal_code","zip_code"]},{"name":"districts","type":"array","required":false,"description":"Immoweb district tokens (GENT, BRUSSELS, ANTWERP…). Get them from location_search: it returns the exact token in `value` for every District match.","on_invalid":"reject","example":["GENT"],"aliases":["district"]},{"name":"provinces","type":"array","required":false,"description":"One or more of the eleven Belgian provinces. Dutch and French spellings (Oost-Vlaanderen, Brabant-Wallon, Luik…) are accepted.","on_invalid":"reject","allowed_values":[{"value":"ANTWERP","label":"Antwerp"},{"value":"BRUSSELS","label":"Brussels"},{"value":"EAST_FLANDERS","label":"East Flanders"},{"value":"FLEMISH_BRABANT","label":"Flemish Brabant"},{"value":"HAINAUT","label":"Hainaut"},{"value":"LIEGE","label":"Liege"},{"value":"LIMBURG","label":"Limburg"},{"value":"LUXEMBOURG","label":"Luxembourg"},{"value":"NAMUR","label":"Namur"},{"value":"WALLOON_BRABANT","label":"Walloon Brabant"},{"value":"WEST_FLANDERS","label":"West Flanders"}],"example":["ANTWERP"],"aliases":["province"]},{"name":"agency_id","type":"array","required":false,"description":"Show only the stock of one or more estate agencies. location_search returns the id for every Agency/Agent match, and agency_search returns it as agency_id.","on_invalid":"reject","example":"2078276","aliases":["agency_ids","customer_id"]},{"name":"property_ids","type":"array","required":false,"description":"Fetch specific listings by id in one call — a cheap way to re-check a saved set. Ids that do not match the other criteria (a rental id under transaction=sale, a sold listing) are simply absent from the result, so compare what comes back against what you asked for.","on_invalid":"reject","example":["21866842"],"aliases":["classified_ids"]},{"name":"epc","type":"array","required":false,"description":"Energy-performance rating (EPC in Flanders, PEB in Wallonia and Brussels). Several may be combined. Belgian houses for sale on 2026-09-24: A++ 175, A+ 1 385, A 5 098, B 6 343, C 8 208, G 3 079, X (none published) 55.","on_invalid":"reject","allowed_values":[{"value":"A++","label":"A++"},{"value":"A+","label":"A+"},{"value":"A","label":"A"},{"value":"B","label":"B"},{"value":"C","label":"C"},{"value":"D","label":"D"},{"value":"E","label":"E"},{"value":"F","label":"F"},{"value":"G","label":"G"},{"value":"X","label":"X"}],"example":["A"],"aliases":["epc_scores","peb"]},{"name":"building_condition","type":"array","required":false,"description":"State of repair as the advertiser declared it. Several may be combined (AS_NEW 11 071 + GOOD 13 731 = 24 800 Belgian houses for sale).","on_invalid":"reject","allowed_values":[{"value":"AS_NEW","label":"As New"},{"value":"JUST_RENOVATED","label":"Just Renovated"},{"value":"GOOD","label":"Good"},{"value":"TO_BE_DONE_UP","label":"To Be Done Up"},{"value":"TO_RENOVATE","label":"To Renovate"},{"value":"TO_RESTORE","label":"To Restore"},{"value":"FIRST_TIME_USED","label":"First Time Used"},{"value":"CASCO","label":"Casco"}],"example":["AS_NEW"],"aliases":["condition"]},{"name":"garden_orientation","type":"array","required":false,"description":"Which way the garden or terrace faces. Eight compass points; SOUTH is the commonest (1 369 of 50 977 Belgian houses for sale).","on_invalid":"reject","allowed_values":[{"value":"NORTH","label":"North"},{"value":"NORTH_EAST","label":"North East"},{"value":"EAST","label":"East"},{"value":"SOUTH_EAST","label":"South East"},{"value":"SOUTH","label":"South"},{"value":"SOUTH_WEST","label":"South West"},{"value":"WEST","label":"West"},{"value":"NORTH_WEST","label":"North West"}],"example":["SOUTH"]},{"name":"modified_since","type":"string","required":false,"description":"Only listings touched on or after this date (YYYY-MM-DD). Together with days_since_modified_max this is how you poll immoweb for what is new without re-reading the whole market.","on_invalid":"reject","example":"2026-09-20"},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR — the monthly rent when transaction=rent. 🔴 Life-annuity listings have no price at all and therefore pass every minimum; they come back with price null and price_type 'life_annuity'.","on_invalid":"reject","example":200000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR (monthly rent when transaction=rent).","on_invalid":"reject","example":400000,"minimum":0},{"name":"bedrooms_min","type":"integer","required":false,"description":"Minimum number of bedrooms.","on_invalid":"reject","example":3,"minimum":0},{"name":"bedrooms_max","type":"integer","required":false,"description":"Maximum number of bedrooms.","on_invalid":"reject","example":4,"minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Minimum total room count.","on_invalid":"reject","example":5,"minimum":0},{"name":"rooms_max","type":"integer","required":false,"description":"Maximum total room count.","on_invalid":"reject","example":10,"minimum":0},{"name":"surface_min","type":"integer","required":false,"description":"Minimum net habitable surface in m².","on_invalid":"reject","example":120,"minimum":0},{"name":"surface_max","type":"integer","required":false,"description":"Maximum net habitable surface in m².","on_invalid":"reject","example":300,"minimum":0},{"name":"land_surface_min","type":"integer","required":false,"description":"Minimum plot size in m².","on_invalid":"reject","example":500,"minimum":0},{"name":"land_surface_max","type":"integer","required":false,"description":"Maximum plot size in m².","on_invalid":"reject","example":2000,"minimum":0},{"name":"garden_surface_min","type":"integer","required":false,"description":"Minimum garden surface in m².","on_invalid":"reject","example":100,"minimum":0},{"name":"garden_surface_max","type":"integer","required":false,"description":"Maximum garden surface in m².","on_invalid":"reject","example":1000,"minimum":0},{"name":"terrace_surface_min","type":"integer","required":false,"description":"Minimum terrace surface in m².","on_invalid":"reject","example":10,"minimum":0},{"name":"terrace_surface_max","type":"integer","required":false,"description":"Maximum terrace surface in m².","on_invalid":"reject","example":60,"minimum":0},{"name":"kitchen_surface_min","type":"integer","required":false,"description":"Minimum kitchen surface in m².","on_invalid":"reject","example":12,"minimum":0},{"name":"kitchen_surface_max","type":"integer","required":false,"description":"Maximum kitchen surface in m².","on_invalid":"reject","example":40,"minimum":0},{"name":"construction_year_min","type":"integer","required":false,"description":"Built in or after this year.","on_invalid":"reject","example":2000,"minimum":0},{"name":"construction_year_max","type":"integer","required":false,"description":"Built in or before this year.","on_invalid":"reject","example":1960,"minimum":0},{"name":"facades_min","type":"integer","required":false,"description":"Minimum number of free facades (4 = detached).","on_invalid":"reject","example":4,"minimum":0},{"name":"facades_max","type":"integer","required":false,"description":"Maximum number of free facades (2 = terraced).","on_invalid":"reject","example":2,"minimum":0},{"name":"parking_min","type":"integer","required":false,"description":"Minimum number of parking places.","on_invalid":"reject","example":1,"minimum":0},{"name":"parking_max","type":"integer","required":false,"description":"Maximum number of parking places (0 = none).","on_invalid":"reject","example":0,"minimum":0},{"name":"buildable_surface_min","type":"integer","required":false,"description":"Minimum total buildable ground-floor surface in m² (land and development).","on_invalid":"reject","example":100,"minimum":0},{"name":"buildable_surface_max","type":"integer","required":false,"description":"Maximum total buildable ground-floor surface in m².","on_invalid":"reject","example":800,"minimum":0},{"name":"showroom_surface_min","type":"integer","required":false,"description":"Minimum showroom surface in m² (commercial).","on_invalid":"reject","example":100,"minimum":0},{"name":"showroom_surface_max","type":"integer","required":false,"description":"Maximum showroom surface in m² (commercial).","on_invalid":"reject","example":1000,"minimum":0},{"name":"access_doors_min","type":"integer","required":false,"description":"Minimum number of access doors (industrial).","on_invalid":"reject","example":1,"minimum":0},{"name":"access_doors_max","type":"integer","required":false,"description":"Maximum number of access doors (industrial).","on_invalid":"reject","example":5,"minimum":0},{"name":"loading_bays_min","type":"integer","required":false,"description":"Minimum number of loading bays (industrial).","on_invalid":"reject","example":1,"minimum":0},{"name":"loading_bays_max","type":"integer","required":false,"description":"Maximum number of loading bays (industrial).","on_invalid":"reject","example":5,"minimum":0},{"name":"business_price_min","type":"integer","required":false,"description":"Minimum price of the business / goodwill in EUR.","on_invalid":"reject","example":50000,"minimum":0},{"name":"business_price_max","type":"integer","required":false,"description":"Maximum price of the business / goodwill in EUR.","on_invalid":"reject","example":500000,"minimum":0},{"name":"days_since_modified_max","type":"integer","required":false,"description":"Only listings touched in the last N days (1 → 1 771 Belgian houses for sale, 7 → 6 042 of 50 977).","on_invalid":"reject","example":7,"minimum":0},{"name":"has_garden","type":"boolean","required":false,"description":"Has a garden (16 411 of 50 977 Belgian houses for sale).","on_invalid":"reject","example":true},{"name":"has_terrace","type":"boolean","required":false,"description":"Has a terrace (29 667).","on_invalid":"reject","example":true},{"name":"has_terrace_or_garden","type":"boolean","required":false,"description":"Has a terrace OR a garden (33 739).","on_invalid":"reject","example":true},{"name":"has_swimming_pool","type":"boolean","required":false,"description":"Has a swimming pool (1 941).","on_invalid":"reject","example":true},{"name":"has_lift","type":"boolean","required":false,"description":"Has a lift (832 houses; far commoner on apartments — 5 606 of 11 971 rentals).","on_invalid":"reject","example":true},{"name":"has_fireplace","type":"boolean","required":false,"description":"Has an open fire or stove (2 640).","on_invalid":"reject","example":true},{"name":"has_fitted_kitchen","type":"boolean","required":false,"description":"The kitchen is installed rather than bare (25 790).","on_invalid":"reject","example":true},{"name":"has_disabled_access","type":"boolean","required":false,"description":"Declared accessible (2 330).","on_invalid":"reject","example":true},{"name":"has_virtual_tour","type":"boolean","required":false,"description":"Has a virtual tour or 360° media (7 407).","on_invalid":"reject","example":true},{"name":"has_reception_desk","type":"boolean","required":false,"description":"Has a reception desk (offices and commercial).","on_invalid":"reject","example":true},{"name":"has_goodwill","type":"boolean","required":false,"description":"The business goodwill is included (commercial).","on_invalid":"reject","example":true},{"name":"is_new_build","type":"boolean","required":false,"description":"New-build only when true (5 922); resale only when false (45 052).","on_invalid":"reject","example":true},{"name":"is_furnished","type":"boolean","required":false,"description":"Furnished (885 houses for sale; 2 125 of 11 971 apartment rentals).","on_invalid":"reject","example":true},{"name":"is_public_sale","type":"boolean","required":false,"description":"Sold at public auction (500).","on_invalid":"reject","example":true},{"name":"is_future_public_sale","type":"boolean","required":false,"description":"A public sale announced but not yet open (5).","on_invalid":"reject","example":true},{"name":"is_life_annuity","type":"boolean","required":false,"description":"Sold as a life annuity — 'viager' / 'lijfrente' (169). These listings have no single price; see price_type.","on_invalid":"reject","example":true},{"name":"is_investment_property","type":"boolean","required":false,"description":"Advertised as an investment with rental income (5 009).","on_invalid":"reject","example":true},{"name":"is_workspace","type":"boolean","required":false,"description":"Has a workspace or office element (11 775).","on_invalid":"reject","example":true},{"name":"is_under_option","type":"boolean","required":false,"description":"Under option / sale agreed (10 381).","on_invalid":"reject","example":true},{"name":"is_newly_published","type":"boolean","required":false,"description":"Newly published (10 821).","on_invalid":"reject","example":true},{"name":"immediately_available","type":"boolean","required":false,"description":"Available immediately (8 845).","on_invalid":"reject","example":true},{"name":"construction_permit_obtained","type":"boolean","required":false,"description":"The construction permit has been obtained (20 607).","on_invalid":"reject","example":true},{"name":"small_pets_allowed","type":"boolean","required":false,"description":"Small pets allowed — rentals (743 of 11 971 apartment rentals).","on_invalid":"reject","example":true},{"name":"big_pets_allowed","type":"boolean","required":false,"description":"Large pets allowed — rentals (270).","on_invalid":"reject","example":true},{"name":"language","type":"enum","required":false,"description":"Belgium is trilingual and the language is NOT only a label. Ids, prices, surfaces and coordinates are identical in all three, but an advertiser writes the ad in one or more languages: ask for a language they did not use and immoweb returns a null title and description. This engine falls back to whatever the advertiser did publish and tells you which language it used in `description_language`. What the language really controls is the LABELS: province and region names, the EPC wording and the formatted price string.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch / Nederlands"},{"value":"fr","label":"French / Français"}],"default":"en","example":"en","aliases":["lang","locale"]}],"returns":"count (the number of matching listings), filters_applied, reachable_results (the 9 990 immoweb will actually page through)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"property_type":"house","transaction":"sale"}},{"name":"agency_search","description":"The immoweb estate-agency directory, ranked by how much stock each agency is advertising: name, group, description, website, VAT and IPI registration number, address and coordinates, opening hours, and live for-sale / to-rent counts. Pass the agency_id to `search` to list everything that agency has on the market.","required_params":[],"optional_params":["postal_codes","page","language"],"params":[{"name":"postal_codes","type":"array","required":false,"description":"Postal codes to list agencies for (bare '9000' or 'BE-9000'). Omit to get the national ranking, which starts with the big agency groups.","on_invalid":"reject","example":["9000"],"aliases":["postal_code","zip_code"]},{"name":"page","type":"integer","required":false,"description":"Agency page — 10 agencies per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"language","type":"enum","required":false,"description":"Belgium is trilingual and the language is NOT only a label. Ids, prices, surfaces and coordinates are identical in all three, but an advertiser writes the ad in one or more languages: ask for a language they did not use and immoweb returns a null title and description. This engine falls back to whatever the advertiser did publish and tells you which language it used in `description_language`. What the language really controls is the LABELS: province and region names, the EPC wording and the formatted price string.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch / Nederlands"},{"value":"fr","label":"French / Français"}],"default":"en","example":"en","aliases":["lang","locale"]}],"returns":"agencies[]{agency_id, type, name, group_name, description, website, logo_url, vat_number, ipi_number, listing_count, for_sale_count, for_rent_count, address{}, latitude, longitude, opening_hours}, count, total_results, page, page_size","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_codes":["9000"]}}]},{"name":"immowelt","category":{"id":"other","title":"Other"},"title":"Immowelt.de API scraper - German real estate data: apartments and houses for sale (kaufen) and to rent (mieten) plus foreclosure auctions, across every German city, district and federal state, with structured filters (price EUR, rooms, living space m2, plot m2, property type and subtype, new-build, garden/cellar/lift, sort) and 30-row pagination; each listing with price, rooms, living space, address, energy class, photos and the listing agency; a full per-listing detail record (description, all photos, complete feature and energy table, year built, running costs, price-per-m2 market comparison); and a free-text location resolver that maps a German place name to Immowelt's geo-id - no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/immowelt/v1","spec_available":true,"actions":[{"name":"search","description":"Search Immowelt.de property listings in any German city, district, postcode area or federal state - for sale, to rent or foreclosure auction - with structured filters: price (EUR), number of rooms, living space (m2), plot size (m2), property type and subtype (penthouse, loft, detached house, villa...), new-build only, and features such as garden, cellar or lift. Results are 30 per page and can be sorted by price, date or size. Each row carries the numeric price, rooms, living space, plot, address (city/district/postcode), energy class, publication date, photos and the listing agency. `location` takes plain German free text ('Berlin', 'Muenchen', 'Koeln') and is resolved to Immowelt's own geo-id, or you can pass a geo-id ('AD08DE8634') straight through.","required_params":["location"],"optional_params":["contract","property_type","property_subtype","page","sort","price_min","price_max","rooms_min","rooms_max","living_space_min","living_space_max","plot_min","plot_max","features","new_build"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search - a German city, town, district or federal state as plain text ('Berlin', 'Muenchen', 'Koeln', 'Frankfurt am Main', 'Hamburg'), or an Immowelt geo-id ('AD08DE8634') taken from a previous response's location.geo_id / results[].geo_ids. Free text is slugified and resolved against Immowelt's own place index; umlauts may be written either way (Muenchen or München).","on_invalid":"reject","example":"Berlin","aliases":["city","area","place","where","geo_id","q"]},{"name":"contract","type":"enum","required":false,"description":"Which market to search. Rent prices are monthly cold rent in EUR; sale prices are the asking price.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"For sale (kaufen)"},{"value":"rent","label":"To rent (mieten)"},{"value":"auction","label":"Compulsory foreclosure auction (Zwangsversteigerung)"},{"value":"buy_auction","label":"Bidding sale offered by the seller"}],"default":"sale","example":"sale","aliases":["deal","distribution_type","listing_type"]},{"name":"property_type","type":"enum","required":false,"description":"Kind of property.","on_invalid":"ignore","allowed_values":[{"value":"apartment","label":"Apartments / flats (Wohnungen)"},{"value":"house","label":"Houses (Haeuser)"},{"value":"land","label":"Building plots (Grundstuecke)"},{"value":"any","label":"Apartments and houses together"}],"default":"apartment","example":"apartment","aliases":["estate_type","type","category"]},{"name":"property_subtype","type":"string","required":false,"description":"Narrow to one or several comma-separated subtypes: penthouse, loft, maisonette, terrace_flat, ground_floor, attic, souterrain (flats); detached, semi_detached, terraced, villa, bungalow, farmhouse (houses). e.g. 'penthouse,loft'.","on_invalid":"ignore","example":"penthouse","aliases":["estate_subtype","subtype"]},{"name":"page","type":"integer","required":false,"description":"Result page. 30 listings per page; paginate with page += 1 until page > max_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Immowelt's default ordering"},{"value":"newest","label":"Most recently published first"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"largest","label":"Largest living space first"}],"default":"relevance","example":"newest","aliases":["order","order_by"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR - asking price when contract=sale, monthly cold rent when contract=rent.","on_invalid":"ignore","example":200000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR.","on_invalid":"ignore","example":500000,"minimum":0,"aliases":["max_price"]},{"name":"rooms_min","type":"integer","required":false,"description":"Minimum number of rooms (Zimmer).","on_invalid":"ignore","example":3,"minimum":1,"maximum":20,"aliases":["rooms"]},{"name":"rooms_max","type":"integer","required":false,"description":"Maximum number of rooms.","on_invalid":"ignore","example":5,"minimum":1,"maximum":20},{"name":"living_space_min","type":"integer","required":false,"description":"Minimum living space in square metres (Wohnflaeche).","on_invalid":"ignore","example":80,"minimum":0,"aliases":["space_min","surface_min","area_min"]},{"name":"living_space_max","type":"integer","required":false,"description":"Maximum living space in square metres.","on_invalid":"ignore","example":200,"minimum":0,"aliases":["space_max","surface_max","area_max"]},{"name":"plot_min","type":"integer","required":false,"description":"Minimum plot size in square metres (Grundstuecksflaeche) - relevant for houses and land.","on_invalid":"ignore","example":300,"minimum":0,"aliases":["plot_area_min"]},{"name":"plot_max","type":"integer","required":false,"description":"Maximum plot size in square metres.","on_invalid":"ignore","example":2000,"minimum":0,"aliases":["plot_area_max"]},{"name":"features","type":"string","required":false,"description":"Only return listings that have these features. One or several comma-separated: garden, cellar, lift. e.g. 'garden,lift'.","on_invalid":"ignore","allowed_values":[{"value":"garden","label":"Has a garden (Garten)"},{"value":"cellar","label":"Has a cellar / basement (Keller)"},{"value":"lift","label":"Building has a lift (Aufzug)"}],"example":"garden","aliases":["amenities"]},{"name":"new_build","type":"boolean","required":false,"description":"true = only new-build properties (Neubau).","on_invalid":"ignore","default":false,"example":false,"aliases":["newbuild","new_construction"]}],"returns":"results[]{id, legacy_id, url, title, contract, property_type, price{amount_eur, kind, label, formatted, per_sqm, total_eur}, rooms, living_space_m2, plot_area_m2, energy_class, address{city, district, zip_code, country, is_address_published}, geo_ids[], key_facts[], description_preview, published_at, updated_at, status, reference, tags{is_new, has_floor_plan, has_virtual_tour, has_video, has_brokerage_fee}, primary_photo_url, photo_count, agent{agency_name, publisher_type, is_private_owner, profile_url, imprint_url, website, business_address, badge, logo_url, contact_person, phone_numbers}, facts[]{type, label, value}} + total + count + page + page_size + max_pages + location{query, geo_id, city, region, url} + filters_applied. For a rental, `price.amount_eur` is the headline cold rent (Kaltmiete, the number Immowelt shows) and `price.total_eur` is the total monthly figure including running costs when the source publishes a different one; for a sale the two are the same and total_eur is null. `contact_person` and `phone_numbers` are null unless the request opts into personal data (include_pii); the agency itself is always returned. A field Immowelt does not publish for a listing comes back null.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"Berlin"}},{"name":"detail","description":"Full record for one Immowelt listing, by its expose URL or its listing id. Returns the asking price or monthly rent with running costs and commission, rooms, living space, plot, year built, condition, heating and energy source, the complete feature and energy-certificate table, the full German description and neighbourhood text, every photo at full resolution, the market price-per-m2 comparison Immowelt itself publishes for the area, and the listing agency. Both Immowelt id spaces are accepted - the short online id from a search row ('256Q14GY2JL7') and the legacy UUID in an older expose link - and both are returned so a row can be joined either way.","required_params":["listing"],"optional_params":[],"params":[{"name":"listing","type":"string","required":true,"description":"An Immowelt expose URL (https://www.immowelt.de/expose/<id>) or just the id. Both the short online id ('256Q14GY2JL7', what a search row's `id` gives you) and the legacy UUID ('1215b46c-9e03-4081-bc72-67209544ff9f') work.","on_invalid":"reject","example":"https://www.immowelt.de/expose/256Q14GY2JL7","aliases":["url","id","listing_id","listing_url","expose","expose_id"]}],"returns":"listing{id, legacy_id, url, online_id, reference, title, contract, property_type, property_subtype, price{amount_eur, kind, label, formatted, per_sqm, commission, additional_costs[]{group,label,value}}, rooms, living_space_m2, plot_area_m2, year_built, condition, heating, energy_source, address{city, district, zip_code, region, country, is_address_published}, geo_ids[], description, area_description, extra_information, features[]{group,label,value}, photos[], photo_count, price_comparison{market_price_per_sqm_eur, listing_price_per_sqm}, published_at, updated_at, tags{...}, agent{agency_name, agency_id, is_private_owner, logo_url, contact_person, phone_numbers}}. The broker's personal name and phone numbers are null unless the request opts into personal data (include_pii).","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing":"https://www.immowelt.de/expose/256Q14GY2JL7"}},{"name":"location","description":"Resolve a free-text German place - city, town, district or federal state - to Immowelt's own geo-id and canonical search URL, and report how many listings are live there right now. Use it to power a search box, to confirm which area a search will actually cover, or to obtain a geo-id you can then reuse in `search` without paying for resolution again.","required_params":["query"],"optional_params":["contract","property_type"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text German place to resolve: 'Berlin', 'Muenchen', 'Koeln', 'Frankfurt am Main', 'Nuernberg'. Umlauts may be written either way.","on_invalid":"reject","example":"München","aliases":["q","place","city","location","input"]},{"name":"contract","type":"enum","required":false,"description":"Which market the reported total counts.","on_invalid":"ignore","allowed_values":[{"value":"sale","label":"For sale (kaufen)"},{"value":"rent","label":"To rent (mieten)"}],"default":"sale","example":"sale"},{"name":"property_type","type":"enum","required":false,"description":"Which property kind the reported total counts.","on_invalid":"ignore","allowed_values":[{"value":"apartment","label":"Apartments"},{"value":"house","label":"Houses"},{"value":"land","label":"Building plots"},{"value":"any","label":"Apartments and houses"}],"default":"apartment","example":"apartment"}],"returns":"resolved{query, geo_id, city, region, city_slug, url, contract, property_type, total} + matched (bool)","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"München"}}]},{"name":"importyeti","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ImportYeti API — US import & customs bill-of-lading records: find which overseas factory manufactures for a US brand, and which US brands a factory ships to. Company and supplier lookup, supplier/customer rankings by shipment count, the underlying bills of lading with HS codes, product text, weight, containers and trade lanes, plus top importers and suppliers per HS code. Public logged-out data, no account.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/importyeti/v1","spec_available":true,"actions":[{"name":"search","description":"Search US importers and overseas suppliers by name. Returns the slug you feed to every other action, plus lifetime shipment count and the date of the most recent shipment for each hit.","required_params":["query"],"optional_params":["page","type"],"params":[{"name":"query","type":"string","required":true,"description":"Company or supplier name to search for. Matches US importers and overseas suppliers by name; partial names work.","on_invalid":"reject","example":"nike","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 10 results per page. The logged-out surface serves at most 14 pages (140 results) however large the reported total is — page 15 and beyond return nothing upstream, so they are rejected rather than answered empty.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":14},{"name":"type","type":"enum","required":false,"description":"Restrict results to one side of the trade. Omit for both.","on_invalid":"reject","allowed_values":[{"value":"company","label":"US importer (the buyer)"},{"value":"supplier","label":"Overseas shipper (the seller)"}],"example":"company"}],"returns":"results[] (name, kind, slug, url, address, country_code, total_shipments, last_shipment_date, other_addresses_count, other_names_count), page, page_size, total_hits, total_hits_is_floor, total_pages_claimed, max_page, results_cap, reachable_results, has_more, next_page. The source's total_pages_claimed over-states what it will serve — results_cap (140) is the measured truth.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"company","description":"Full report for a US importer: profile and totals, its overseas suppliers ranked by shipments, its most recent bills of lading, HS-code breakdown, trade lanes, carriers and container mix. One call; you do not also need `suppliers` and `shipments` for the same company.","required_params":["company"],"optional_params":[],"params":[{"name":"company","type":"string","required":true,"description":"The US importer: its ImportYeti slug (`nike-usa`), the path or URL of its page (`/company/nike-usa`), or a plain company name to resolve through search (costs one extra upstream request; the row picked is reported as `resolved_from`).","on_invalid":"reject","example":"nike-usa","aliases":["slug","name","buyer"]}],"returns":"subject{}, suppliers[] (ranked), shipments[], shipments_with_declared_value[], hs_codes[], trade_lanes[], carriers[], containers[], database_updated, truncated flags.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"company":"nike-usa"}},{"name":"supplier","description":"Full report for an overseas supplier: profile and totals, its US customers ranked by shipments, its most recent bills of lading, HS-code breakdown, trade lanes, carriers and container mix.","required_params":["supplier"],"optional_params":[],"params":[{"name":"supplier","type":"string","required":true,"description":"The overseas supplier: its ImportYeti slug (`apl-logistics-vietnam`), the path or URL of its page, or a plain name to resolve through search (costs one extra upstream request).","on_invalid":"reject","example":"apl-logistics-vietnam","aliases":["slug","name","vendor"]}],"returns":"subject{}, customers[] (ranked), shipments[], shipments_with_declared_value[], hs_codes[], trade_lanes[], carriers[], containers[], database_updated, truncated flags.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"supplier":"apl-logistics-vietnam"}},{"name":"suppliers","description":"Who manufactures for this US brand. The overseas suppliers of one US importer, ranked by the number of shipments between the two, with country, HS chapters and the product text from those shipments.","required_params":["company"],"optional_params":["limit","country_code"],"params":[{"name":"company","type":"string","required":true,"description":"The US importer: its ImportYeti slug (`nike-usa`), the path or URL of its page (`/company/nike-usa`), or a plain company name to resolve through search (costs one extra upstream request; the row picked is reported as `resolved_from`).","on_invalid":"reject","example":"nike-usa","aliases":["slug","name","buyer"]},{"name":"limit","type":"integer","required":false,"description":"Trim the returned list. The logged-out surface publishes at most 50 rows whatever you pass, so this only makes the response smaller — it never reaches further back.","on_invalid":"ignore","example":25,"minimum":1,"maximum":50},{"name":"country_code","type":"string","required":false,"description":"Keep only counterparties in this ISO-2 country (applied by this API to the top-50 the source publishes, not by the source — so it filters that list, it does not search deeper than it).","on_invalid":"ignore","example":"VN"}],"returns":"subject{}, suppliers[] (rank, name, slug, country, shipments, shipments_last_12m, weight_kg, teu, hs_chapters[], product_descriptions), count, truncated, source_cap.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"company":"nike-usa"}},{"name":"customers","description":"Who this factory ships to. The US importers buying from one overseas supplier, ranked by the number of shipments between the two.","required_params":["supplier"],"optional_params":["limit","country_code"],"params":[{"name":"supplier","type":"string","required":true,"description":"The overseas supplier: its ImportYeti slug (`apl-logistics-vietnam`), the path or URL of its page, or a plain name to resolve through search (costs one extra upstream request).","on_invalid":"reject","example":"apl-logistics-vietnam","aliases":["slug","name","vendor"]},{"name":"limit","type":"integer","required":false,"description":"Trim the returned list. The logged-out surface publishes at most 50 rows whatever you pass, so this only makes the response smaller — it never reaches further back.","on_invalid":"ignore","example":25,"minimum":1,"maximum":50},{"name":"country_code","type":"string","required":false,"description":"Keep only counterparties in this ISO-2 country (applied by this API to the top-50 the source publishes, not by the source — so it filters that list, it does not search deeper than it).","on_invalid":"ignore","example":"VN"}],"returns":"subject{}, customers[] (rank, name, slug, country, shipments, shipments_last_12m, weight_kg, teu, hs_chapters[], product_descriptions), count, truncated, source_cap.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"supplier":"apl-logistics-vietnam"}},{"name":"shipments","description":"The bills of lading behind a company or a supplier: date, counterparty, product description, weight, container and package counts, trade lane, and the declared CIF value where the manifest carries one. Pass either `company` or `supplier`.","required_params":[],"optional_params":["company","supplier","limit"],"params":[{"name":"company","type":"string","required":false,"description":"The US importer whose bills of lading to return. Pass this OR `supplier`, not both.","on_invalid":"reject","example":"nike-usa","aliases":["slug","name"]},{"name":"supplier","type":"string","required":false,"description":"The overseas supplier whose bills of lading to return. Pass this OR `company`, not both.","on_invalid":"reject","example":"apl-logistics-vietnam"},{"name":"limit","type":"integer","required":false,"description":"Trim the returned list. The logged-out surface publishes at most 50 rows whatever you pass, so this only makes the response smaller — it never reaches further back.","on_invalid":"ignore","example":25,"minimum":1,"maximum":50}],"returns":"subject{}, shipments[] (date, bill_of_lading, master/house bol, counterparty{}, product_description, weight_kg, containers, quantity, quantity_unit, shipping_route, estimated_shipping_cost_usd), shipments_with_declared_value[] (adds cif_value_usd), count, truncated, source_cap, date_range.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"company":"nike-usa"}},{"name":"hs_code","description":"Trade in one HS code: the top US importers and the top overseas suppliers moving goods under it, ranked by shipments, plus recent bills of lading.","required_params":["hs_code"],"optional_params":["limit"],"params":[{"name":"hs_code","type":"string","required":true,"description":"An HS chapter (2-digit, e.g. `61`), a 6-digit subheading (e.g. `610910`), or the full ImportYeti slug (`61-articles-of-apparel-and-clothing`). 2- and 6-digit codes are resolved against the site's own HS index; 4-digit headings are NOT listed in that index, so for those pass the slug, which every company/supplier response hands you in `hs_codes[].url`.","on_invalid":"reject","example":"61","aliases":["code","hs"]},{"name":"limit","type":"integer","required":false,"description":"Trim the returned list. The logged-out surface publishes at most 50 rows whatever you pass, so this only makes the response smaller — it never reaches further back.","on_invalid":"ignore","example":25,"minimum":1,"maximum":50}],"returns":"hs_code, slug, url, description, top_importers[], top_suppliers[], shipments[], first_shipment_date, last_shipment_date, truncated, source_cap.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"hs_code":"61"}}]},{"name":"indeed","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Indeed API — live job search, salary data & company profiles from indeed.com (60+ country sites)","version":"1.3.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/indeed/v1","spec_available":true,"actions":[{"name":"jobs/search","description":"Search live job postings on Indeed by keyword and location. Each result includes the full job description, salary range, employer details, posting date, apply link, employment type and remote flag. Filter by job type, remote/hybrid, seniority, posting date and radius. Covers 60+ Indeed country sites.","required_params":["query"],"optional_params":["country","location","max_results","sort_by","include_detail","job_type","remote","hybrid","level","from_days","radius"],"params":[{"name":"query","type":"string","required":true,"description":"What job to search for — job title, skill or company keyword.","on_invalid":"reject","example":"python developer","aliases":["keyword"]},{"name":"country","type":"enum","required":false,"description":"Indeed country site to search. Each country is a separate Indeed site with its own jobs.","on_invalid":"ignore","allowed_values":[{"value":"US","label":"United States"},{"value":"CA","label":"Canada"},{"value":"MX","label":"Mexico"},{"value":"UK","label":"United Kingdom"},{"value":"IE","label":"Ireland"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"ES","label":"Spain"},{"value":"IT","label":"Italy"},{"value":"NL","label":"Netherlands"},{"value":"CH","label":"Switzerland"},{"value":"AT","label":"Austria"},{"value":"BE","label":"Belgium"},{"value":"LU","label":"Luxembourg"},{"value":"PT","label":"Portugal"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"FI","label":"Finland"},{"value":"PL","label":"Poland"},{"value":"CZ","label":"Czechia"},{"value":"HU","label":"Hungary"},{"value":"RO","label":"Romania"},{"value":"GR","label":"Greece"},{"value":"UA","label":"Ukraine"},{"value":"TR","label":"Türkiye"},{"value":"AE","label":"United Arab Emirates"},{"value":"SA","label":"Saudi Arabia"},{"value":"QA","label":"Qatar"},{"value":"KW","label":"Kuwait"},{"value":"BH","label":"Bahrain"},{"value":"OM","label":"Oman"},{"value":"IL","label":"Israel"},{"value":"ZA","label":"South Africa"},{"value":"EG","label":"Egypt"},{"value":"MA","label":"Morocco"},{"value":"NG","label":"Nigeria"},{"value":"IN","label":"India"},{"value":"PK","label":"Pakistan"},{"value":"SG","label":"Singapore"},{"value":"HK","label":"Hong Kong"},{"value":"PH","label":"Philippines"},{"value":"MY","label":"Malaysia"},{"value":"ID","label":"Indonesia"},{"value":"JP","label":"Japan"},{"value":"KR","label":"South Korea"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"},{"value":"VN","label":"Vietnam"},{"value":"AU","label":"Australia"},{"value":"NZ","label":"New Zealand"},{"value":"BR","label":"Brazil"},{"value":"AR","label":"Argentina"},{"value":"CL","label":"Chile"},{"value":"CO","label":"Colombia"},{"value":"PE","label":"Peru"},{"value":"EC","label":"Ecuador"},{"value":"CR","label":"Costa Rica"},{"value":"PA","label":"Panama"},{"value":"UY","label":"Uruguay"},{"value":"VE","label":"Venezuela"}],"default":"US","example":"US"},{"name":"location","type":"string","required":false,"description":"City, region or postal code to search around. Leave empty to search the whole country.","on_invalid":"reject","example":"New York"},{"name":"max_results","type":"integer","required":false,"description":"How many jobs to return (1–1000). The engine pages internally — no page/cursor needed.","on_invalid":"reject","default":60,"minimum":1,"maximum":1000},{"name":"sort_by","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant first"},{"value":"date","label":"Newest first"}],"default":"relevance"},{"name":"job_type","type":"enum","required":false,"description":"Only return jobs of this employment type.","on_invalid":"reject","allowed_values":[{"value":"fulltime","label":"Full-time"},{"value":"parttime","label":"Part-time"},{"value":"contract","label":"Contract"},{"value":"internship","label":"Internship"},{"value":"temporary","label":"Temporary"},{"value":"permanent","label":"Permanent"},{"value":"seasonal","label":"Seasonal"}]},{"name":"remote","type":"boolean","required":false,"description":"Only remote jobs.","on_invalid":"reject","default":false},{"name":"hybrid","type":"boolean","required":false,"description":"Only hybrid (part-remote) jobs.","on_invalid":"reject","default":false},{"name":"level","type":"enum","required":false,"description":"Only jobs at this seniority level.","on_invalid":"reject","allowed_values":[{"value":"entry_level","label":"Entry level"},{"value":"mid_level","label":"Mid level"},{"value":"senior_level","label":"Senior level"}]},{"name":"from_days","type":"enum","required":false,"description":"Only jobs posted within the last N days. Dropdown values work everywhere; other day-counts work on the primary API path.","on_invalid":"ignore","allowed_values":[{"value":"1","label":"Last 24 hours"},{"value":"3","label":"Last 3 days"},{"value":"7","label":"Last 7 days"},{"value":"14","label":"Last 14 days"}]},{"name":"radius","type":"enum","required":false,"description":"Search radius in miles around `location` (only used when a location is given). Dropdown values work everywhere; other mile-counts work on the primary API path.","on_invalid":"ignore","allowed_values":[{"value":"0","label":"Exact location only"},{"value":"5","label":"5 miles"},{"value":"10","label":"10 miles"},{"value":"15","label":"15 miles"},{"value":"25","label":"25 miles"},{"value":"35","label":"35 miles"},{"value":"50","label":"50 miles"},{"value":"100","label":"100 miles"}]},{"name":"include_detail","type":"boolean","required":false,"description":"Force-fetch the full job description per job on the slow fallback path. Normally unnecessary — descriptions come inline.","on_invalid":"ignore","default":false}],"returns":"jobs[]{jobkey, title, company, formatted_location, city, state, country, remote, employment_types, job_level, salary_min, salary_max, salary_period, posted_iso, description, indeed_url, company_url}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"query":"python developer","location":"New York","country":"US","max_results":60}},{"name":"job","description":"Get the full detail of one or more specific jobs by their Indeed job key (or job URL). Returns the complete job description, salary, employer details, location, posting date, skills, benefits and apply link for each. Pass several keys at once to fetch them in a single call.","required_params":["jobkey"],"optional_params":["country"],"params":[{"name":"jobkey","type":"array","required":true,"description":"One or more Indeed job keys (the 16-character id from a job URL, e.g. ?jk=c64905855731be67) or full Indeed job URLs. Accepts a single value or a list.","on_invalid":"reject","example":"c64905855731be67","aliases":["jobkeys","job_url","url"]},{"name":"country","type":"enum","required":false,"description":"Indeed country site to search. Each country is a separate Indeed site with its own jobs.","on_invalid":"ignore","allowed_values":[{"value":"US","label":"United States"},{"value":"CA","label":"Canada"},{"value":"MX","label":"Mexico"},{"value":"UK","label":"United Kingdom"},{"value":"IE","label":"Ireland"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"ES","label":"Spain"},{"value":"IT","label":"Italy"},{"value":"NL","label":"Netherlands"},{"value":"CH","label":"Switzerland"},{"value":"AT","label":"Austria"},{"value":"BE","label":"Belgium"},{"value":"LU","label":"Luxembourg"},{"value":"PT","label":"Portugal"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"FI","label":"Finland"},{"value":"PL","label":"Poland"},{"value":"CZ","label":"Czechia"},{"value":"HU","label":"Hungary"},{"value":"RO","label":"Romania"},{"value":"GR","label":"Greece"},{"value":"UA","label":"Ukraine"},{"value":"TR","label":"Türkiye"},{"value":"AE","label":"United Arab Emirates"},{"value":"SA","label":"Saudi Arabia"},{"value":"QA","label":"Qatar"},{"value":"KW","label":"Kuwait"},{"value":"BH","label":"Bahrain"},{"value":"OM","label":"Oman"},{"value":"IL","label":"Israel"},{"value":"ZA","label":"South Africa"},{"value":"EG","label":"Egypt"},{"value":"MA","label":"Morocco"},{"value":"NG","label":"Nigeria"},{"value":"IN","label":"India"},{"value":"PK","label":"Pakistan"},{"value":"SG","label":"Singapore"},{"value":"HK","label":"Hong Kong"},{"value":"PH","label":"Philippines"},{"value":"MY","label":"Malaysia"},{"value":"ID","label":"Indonesia"},{"value":"JP","label":"Japan"},{"value":"KR","label":"South Korea"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"},{"value":"VN","label":"Vietnam"},{"value":"AU","label":"Australia"},{"value":"NZ","label":"New Zealand"},{"value":"BR","label":"Brazil"},{"value":"AR","label":"Argentina"},{"value":"CL","label":"Chile"},{"value":"CO","label":"Colombia"},{"value":"PE","label":"Peru"},{"value":"EC","label":"Ecuador"},{"value":"CR","label":"Costa Rica"},{"value":"PA","label":"Panama"},{"value":"UY","label":"Uruguay"},{"value":"VE","label":"Venezuela"}],"default":"US","example":"US"}],"returns":"jobs[]{jobkey, title, company, formatted_location, salary_min, salary_max, salary_period, posted_iso, description, indeed_skills, benefits, employment_types, job_level, apply_url, company_industry, company_url}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"jobkey":"c64905855731be67"}},{"name":"company","description":"Look up a company on Indeed: profile (industry, size, revenue, HQ, founded year, description, website), reputation (overall rating, review count, CEO approval) and optionally the company's open jobs.","required_params":["company"],"optional_params":["country","include_jobs","max_jobs"],"params":[{"name":"company","type":"string","required":true,"description":"Company name or Indeed company slug (the part after indeed.com/cmp/).","on_invalid":"reject","example":"Microsoft"},{"name":"country","type":"enum","required":false,"description":"Indeed country site to search. Each country is a separate Indeed site with its own jobs.","on_invalid":"ignore","allowed_values":[{"value":"US","label":"United States"},{"value":"CA","label":"Canada"},{"value":"MX","label":"Mexico"},{"value":"UK","label":"United Kingdom"},{"value":"IE","label":"Ireland"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"ES","label":"Spain"},{"value":"IT","label":"Italy"},{"value":"NL","label":"Netherlands"},{"value":"CH","label":"Switzerland"},{"value":"AT","label":"Austria"},{"value":"BE","label":"Belgium"},{"value":"LU","label":"Luxembourg"},{"value":"PT","label":"Portugal"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"FI","label":"Finland"},{"value":"PL","label":"Poland"},{"value":"CZ","label":"Czechia"},{"value":"HU","label":"Hungary"},{"value":"RO","label":"Romania"},{"value":"GR","label":"Greece"},{"value":"UA","label":"Ukraine"},{"value":"TR","label":"Türkiye"},{"value":"AE","label":"United Arab Emirates"},{"value":"SA","label":"Saudi Arabia"},{"value":"QA","label":"Qatar"},{"value":"KW","label":"Kuwait"},{"value":"BH","label":"Bahrain"},{"value":"OM","label":"Oman"},{"value":"IL","label":"Israel"},{"value":"ZA","label":"South Africa"},{"value":"EG","label":"Egypt"},{"value":"MA","label":"Morocco"},{"value":"NG","label":"Nigeria"},{"value":"IN","label":"India"},{"value":"PK","label":"Pakistan"},{"value":"SG","label":"Singapore"},{"value":"HK","label":"Hong Kong"},{"value":"PH","label":"Philippines"},{"value":"MY","label":"Malaysia"},{"value":"ID","label":"Indonesia"},{"value":"JP","label":"Japan"},{"value":"KR","label":"South Korea"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"},{"value":"VN","label":"Vietnam"},{"value":"AU","label":"Australia"},{"value":"NZ","label":"New Zealand"},{"value":"BR","label":"Brazil"},{"value":"AR","label":"Argentina"},{"value":"CL","label":"Chile"},{"value":"CO","label":"Colombia"},{"value":"PE","label":"Peru"},{"value":"EC","label":"Ecuador"},{"value":"CR","label":"Costa Rica"},{"value":"PA","label":"Panama"},{"value":"UY","label":"Uruguay"},{"value":"VE","label":"Venezuela"}],"default":"US","example":"US"},{"name":"include_jobs","type":"boolean","required":false,"description":"Also list the company's open jobs.","on_invalid":"reject","default":true},{"name":"max_jobs","type":"integer","required":false,"description":"How many of the company's jobs to return (1–500).","on_invalid":"reject","default":50,"minimum":1,"maximum":500}],"returns":"company{name, industry, sectors, description, founded_year, headquarters, employee_range, revenue_range, website, rating, review_count, ceo_approval_pct, company_url} + jobs[]{title, formatted_location, salary_text, posted_relative, indeed_url, …}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"company":"Microsoft"}},{"name":"company/search","description":"Find companies on Indeed by name or keyword (optionally near a location). Returns a ranked list of companies with each one's overall rating, review count, industry sectors, logo and links to its Indeed profile, jobs, reviews and salaries pages.","required_params":["query"],"optional_params":["country","location","max_results"],"params":[{"name":"query","type":"string","required":true,"description":"Company name or keyword to search for (e.g. a name, industry or product).","on_invalid":"reject","example":"software","aliases":["keyword","q","name"]},{"name":"country","type":"enum","required":false,"description":"Indeed country site to search. Each country is a separate Indeed site with its own jobs.","on_invalid":"ignore","allowed_values":[{"value":"US","label":"United States"},{"value":"CA","label":"Canada"},{"value":"MX","label":"Mexico"},{"value":"UK","label":"United Kingdom"},{"value":"IE","label":"Ireland"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"ES","label":"Spain"},{"value":"IT","label":"Italy"},{"value":"NL","label":"Netherlands"},{"value":"CH","label":"Switzerland"},{"value":"AT","label":"Austria"},{"value":"BE","label":"Belgium"},{"value":"LU","label":"Luxembourg"},{"value":"PT","label":"Portugal"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"FI","label":"Finland"},{"value":"PL","label":"Poland"},{"value":"CZ","label":"Czechia"},{"value":"HU","label":"Hungary"},{"value":"RO","label":"Romania"},{"value":"GR","label":"Greece"},{"value":"UA","label":"Ukraine"},{"value":"TR","label":"Türkiye"},{"value":"AE","label":"United Arab Emirates"},{"value":"SA","label":"Saudi Arabia"},{"value":"QA","label":"Qatar"},{"value":"KW","label":"Kuwait"},{"value":"BH","label":"Bahrain"},{"value":"OM","label":"Oman"},{"value":"IL","label":"Israel"},{"value":"ZA","label":"South Africa"},{"value":"EG","label":"Egypt"},{"value":"MA","label":"Morocco"},{"value":"NG","label":"Nigeria"},{"value":"IN","label":"India"},{"value":"PK","label":"Pakistan"},{"value":"SG","label":"Singapore"},{"value":"HK","label":"Hong Kong"},{"value":"PH","label":"Philippines"},{"value":"MY","label":"Malaysia"},{"value":"ID","label":"Indonesia"},{"value":"JP","label":"Japan"},{"value":"KR","label":"South Korea"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"},{"value":"VN","label":"Vietnam"},{"value":"AU","label":"Australia"},{"value":"NZ","label":"New Zealand"},{"value":"BR","label":"Brazil"},{"value":"AR","label":"Argentina"},{"value":"CL","label":"Chile"},{"value":"CO","label":"Colombia"},{"value":"PE","label":"Peru"},{"value":"EC","label":"Ecuador"},{"value":"CR","label":"Costa Rica"},{"value":"PA","label":"Panama"},{"value":"UY","label":"Uruguay"},{"value":"VE","label":"Venezuela"}],"default":"US","example":"US"},{"name":"location","type":"string","required":false,"description":"Optional city or region to bias the company search.","on_invalid":"reject","example":"Seattle"},{"name":"max_results","type":"integer","required":false,"description":"How many companies to return (1–50, one page).","on_invalid":"reject","default":50,"minimum":1,"maximum":50}],"returns":"companies[]{name, company_slug, company_url, rating, review_count, sectors, logo_url, description, jobs_url, reviews_url, salaries_url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"software","country":"US","max_results":20}},{"name":"company/reviews","description":"Get a company's employee reviews from Indeed (review text, overall rating, the 5 sub-ratings — work/life balance, compensation, management, culture, job security — job title, location and date). Pass the company name or Indeed /cmp slug; paginate with `start`.","required_params":["company"],"optional_params":["max_reviews","start","sort"],"params":[{"name":"company","type":"string","required":true,"description":"Company name or Indeed /cmp slug.","on_invalid":"reject","example":"Microsoft"},{"name":"max_reviews","type":"integer","required":false,"description":"How many reviews to return from this page (1–20).","on_invalid":"ignore","default":20,"minimum":1,"maximum":20},{"name":"start","type":"integer","required":false,"description":"Pagination offset (0, 20, 40 …).","on_invalid":"ignore","default":0,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"How to order the reviews.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Most relevant (Indeed default)"},{"value":"helpfulness","label":"Most helpful first"},{"value":"rating_desc","label":"Highest rating first"},{"value":"rating_asc","label":"Lowest rating first"},{"value":"date_desc","label":"Newest first"}],"default":"relevance"}],"returns":"company, encoded_fcc_id, review_count_total, reviews[]{title, text, overall_rating, ratings{work_life_balance,compensation_benefits,management,culture_values,job_security_advancement}, job_title, location, submitted, current_employee, helpful, review_url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"Microsoft"}},{"name":"company/salaries","description":"Get a company's salary breakdown by job title from Indeed (average pay, pay period and the number of salaries reported per role). Pass the company name or Indeed /cmp slug.","required_params":["company"],"optional_params":[],"params":[{"name":"company","type":"string","required":true,"description":"Company name or Indeed /cmp slug.","on_invalid":"reject","example":"Microsoft"}],"returns":"company, salaries[]{job_title, average_pay, period, currency, salaries_reported, url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"Microsoft"}},{"name":"estimated_salary","description":"Estimate the market salary for a job title (optionally in a specific US location) from Indeed's salary data — median/mean/min/max/std + sample size + average cash bonus, plus the top-paying companies, top-paid cities, related job titles and a per-US-state average map. Both the location-specific estimate and the national estimate are returned.","required_params":["job_title"],"optional_params":["location"],"params":[{"name":"job_title","type":"string","required":true,"description":"The job title to estimate pay for (e.g. 'software engineer', 'registered nurse', 'truck driver').","on_invalid":"reject","example":"software engineer","aliases":["title","query"]},{"name":"location","type":"string","required":false,"description":"Optional US city or state to localise the estimate (e.g. 'Austin, TX', 'California'). Omit for the national figure.","on_invalid":"reject","example":"New York, NY"}],"returns":"job_title, location, currency, local_estimate{median,min,max,mean,std,sample_size,period,cash_bonus_mean}, national_estimate{…}, top_paying_companies[]{name,salary_mean,salary_period,review_count}, top_paid_cities[]{city,mean}, related_titles[], avg_salary_by_us_state{ST:amount}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"job_title":"software engineer"}}]},{"name":"indiamart","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"IndiaMART API scraper — B2B supplier and product search for indiamart.com, India's largest business-to-business marketplace. Keyword search with IndiaMART's own city, brand, business-type and turnover facets; category listings with the supplier's GST number, city and rating; and full product detail with price, minimum order quantity, the spec table and the complete supplier profile (year established, employees, annual turnover, legal status, GST verification, export countries). Prices in INR. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/indiamart/v1","spec_available":true,"actions":[{"name":"search","description":"Search indiamart.com by keyword and get supplier product offers. Every row carries the title, price in INR with its unit, the minimum order quantity, the supplier's company name, city, state, rating and member-since date, the product spec table (ISQ) and images. The response also returns the category IndiaMART resolved the keyword to as matched_category, related_categories carrying the exact slugs category/listing takes (feed one in for a deeper, city-filterable supplier list), and IndiaMART's own facet catalogue: cities, brands, categories, annual-turnover bands, GST-registration-year bands, IndiaMART's own price buckets for the matched category and the spec keys that category uses. Measured ceiling: indiamart.com serves 10 rows per request on this surface and pages the rest by client-side infinite scroll, so there is no page parameter — total_results is its own count of the whole set.","required_params":["query"],"optional_params":["city"],"params":[{"name":"query","type":"string","required":true,"description":"What to search indiamart.com for, in plain words — a product ('led bulb'), a material ('stainless steel pipe') or a service ('cnc machining'). IndiaMART also resolves the keyword to one of its own categories and returns it as matched_category.","on_invalid":"reject","example":"led bulb","aliases":["q","keyword","ss","text"]},{"name":"city","type":"string","required":false,"description":"Restrict the search to suppliers in one Indian city, spelled as IndiaMART spells it ('Mumbai', 'New Delhi', 'Bengaluru', 'Ahmedabad'). The unfiltered response returns the city facet with IndiaMART's own spellings and counts.","on_invalid":"reject","example":"Mumbai","aliases":["cq","location"]}],"returns":"products[]{supplier_id, product_id, title, url, is_indiamart_url, price, currency, price_unit, min_order_quantity, min_order_unit, supplier_name, supplier_rating, supplier_member_since, supplier_tier, email_verified, city, state, country_iso, category, category_id, supplier_page_slug, description, specs{}, image, image_zoom, datasheet_url, has_photo}, count, total_results, query, city, spell_corrected_to, matched_category{id, name, group_id, parent_category_id, parent_category_name}, related_categories[]{name, slug, category_id}, facets{cities[]{name,count}, brands[]{name,slug}, categories[]{name,slug,category_id}, annual_turnover[]{label,value}, gst_registration_years[]{label,min,max}, price_bands[]{label,min_price,max_price,unit,currency}, spec_filters[]{name,options[]}}, page_size_note","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"led bulb"}},{"name":"category/listing","description":"List the suppliers and offers in one IndiaMART category ('mcat'), optionally in one Indian city. This is the richest supplier surface: each card carries the company name, its city and address, its GST number and whether IndiaMART verified it, its rating and rating count, its trust tier and years on the platform, the price with its unit, the full spec table and up to a dozen more products from the same supplier. The response also returns the ~50 city slugs the category is covered in, the business-type facet, and related categories and brands. Measured ceiling: indiamart.com serves 28 cards per request on this surface (infinite scroll beyond that), so there is no page parameter; total_results is its own count of the whole category. An unknown slug returns NOT_FOUND.","required_params":["category"],"optional_params":["city"],"params":[{"name":"category","type":"string","required":true,"description":"IndiaMART's own category ('mcat') slug, e.g. 'led-bulb', 'ballbearing', 'packingboxes'. Take it from related_categories[].slug, which both search and listing return — that is the reliable handle. A category NAME is accepted too and slugified, but IndiaMART's slugs are not always the slugified name ('Ball Bearings' is 'ballbearing', 'Corrugated Packaging Boxes' is 'packingboxes'), so the name resolved on 4 of 6 measured categories and the slug on 6 of 6.","on_invalid":"reject","example":"led-bulb","aliases":["slug","mcat","category_slug"]},{"name":"city","type":"string","required":false,"description":"Restrict the listing to one Indian city, as a slug ('mumbai', 'new-delhi', 'bengaluru'). The all-India response returns `cities[]` with the exact slug for each of IndiaMART's ~50 covered cities.","on_invalid":"reject","example":"mumbai","aliases":["location"]}],"returns":"products[]{product_id, title, url, price, currency, price_label, price_unit, image, specs{}, supplier_name, supplier_id, supplier_slug, supplier_url, supplier_tier, supplier_rating, supplier_rating_count, city, address, country, gst_number, gst_verified, member_since_years, datasheet_url, other_products[]}, count, total_results, category{id, name, slug, singular_name, parent_category_id, parent_category_slug, group_slug, image, description, url}, city, city_id, products_available, cities[], business_types[], related_categories[], related_brands[], page_size_note","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"led-bulb"}},{"name":"product/detail","description":"One IndiaMART product in full, by its numeric display id or its URL. Returns the title and description, the price in INR with IndiaMART's own price label, the minimum order quantity and unit, delivery time, packaging details, production capacity, port of dispatch and payment terms where the seller published them, the complete spec table (ISQ), every image at original resolution and any product datasheets — plus the whole supplier record: company name, full address with city, state and coordinates, year established, employee band, annual turnover, legal status, GST and e-mail/mobile verification flags, trust seal, seller rating with its histogram, top export countries and IndiaMART's Basic Information / Statutory Profile / Infrastructure tables. indiamart.com publishes no supplier phone or e-mail on this surface, so those fields are null and say so. A dead id returns NOT_FOUND.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"IndiaMART's numeric product display id (6-16 digits), e.g. '2859169955191'. Every category/listing row returns it as product_id. A full product URL (https://www.indiamart.com/proddetail/<slug>-<id>.html) is accepted instead.","on_invalid":"reject","example":"2859169955191","aliases":["id","url","display_id"]}],"returns":"product{product_id, internal_item_id, title, url, description, price, currency, price_label, min_order_quantity, min_order_unit, delivery_time, packaging_details, production_capacity, port_of_dispatch, payment_terms, specs{}, images[], documents[], category{id, name, slug, parent_category_id, parent_category_name, parent_category_slug}, supplier{supplier_id, name, slug, url, tier, contact_person, city, state, locality, address, country, country_iso, postal_code, latitude, longitude, member_since, member_since_label, year_established, employee_count, annual_turnover, legal_status, business_type, description, logo, gst_verified, email_verified, mobile_verified, trust_seal, rating, rating_count, rating_breakdown, top_export_countries[], profile{}, phone, email, contact_note}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"2859169955191"}}]},{"name":"instacart","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Instacart API scraper — instacart.com (United States) and instacart.ca (Canada): one grocery product's price at every retailer serving a postal code, the retailers that deliver there, and keyword search across Costco, Kroger, Safeway, Walmart, ALDI and hundreds more with was-price, loyalty-card price, promotions, unit price and stock level. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/instacart/v1","spec_available":true,"actions":[{"name":"search","description":"Search Instacart by keyword at a postal code. Products come back grouped by retailer, each priced at that retailer's store serving the postal code: regular price, was-price and discount, loyalty-card price, promotions such as Buy 1 get 1, unit price, weight-estimated package price, stock level including 'Likely out of stock', dietary badges and Instacart's best-seller badge. Optionally one retailer only.","required_params":["query","postal_code"],"optional_params":["country","retailer","max_retailers","per_retailer","page","include_unmatched","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it on Instacart ('milk', 'ben jerrys').","on_invalid":"reject","example":"milk","aliases":["q","keyword","search"]},{"name":"postal_code","type":"string","required":true,"description":"The delivery postal code prices and stores are for: a 5-digit ZIP for us (90210), a Canadian postal code for ca (M5V 3L9).","on_invalid":"reject","example":"90210","aliases":["zip","zip_code","postcode"]},{"name":"country","type":"enum","required":false,"description":"Which Instacart: us (instacart.com, USD, 5-digit ZIP) or ca (instacart.ca, CAD, postal code like M5V 3L9).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — instacart.com, prices in USD"},{"value":"ca","label":"Canada — instacart.ca, prices in CAD"}],"default":"us","example":"us"},{"name":"retailer","type":"string","required":false,"description":"Optional: one retailer, by the `slug` or `retailer_id` that `retailers` returns for the same postal code (costco, ralphs, walmart, aldi …).","on_invalid":"reject","example":"costco","aliases":["store","retailer_slug","retailer_id"]},{"name":"max_retailers","type":"integer","required":false,"description":"How many retailers' products to return per page (1-20, default 5), in a fixed order by Instacart retailer id so pages never overlap. Each retailer is priced at its own store.","on_invalid":"ignore","default":5,"minimum":1,"maximum":20},{"name":"per_retailer","type":"integer","required":false,"description":"Products per retailer (1-40, default 10). Instacart returns at most 40 matches per retailer for one query.","on_invalid":"ignore","default":10,"minimum":1,"maximum":40},{"name":"page","type":"integer","required":false,"description":"Page of retailers (1-based): page 2 returns the next `max_retailers` retailers. Read `retailers_total` and `has_more`.","on_invalid":"ignore","default":1,"minimum":1,"maximum":50},{"name":"include_unmatched","type":"boolean","required":false,"description":"Instacart fills no-match queries with unrelated products and does not flag them. false (default) drops rows that share no word with the query and counts them in `unmatched_dropped`; true keeps every row.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"groups[]{retailer{retailer_id,slug,name,shop_id,service_type,retailer_location_id}, items_total (matches at this retailer, ≤40), items[]{product_id, item_id, name, brand (lower-cased as Instacart publishes it on item rows), size, url, image, currency, price (the retailer's regular Instacart price; for weight-estimated packages the estimated package price), price_display, original_price (was-price, only when on sale), discount_percent, savings, loyalty_price (the with-loyalty-card price, when lower), loyalty_label, loyalty_card_offer, unit_price_text ('$0.09/fl oz', '$8.97 / lb'), size_text, price_is_estimate, estimated_weight_text, promotions[]{label ('Buy 1, get 1 free', 'Spend $20, save $4', 'Rollback'),type,coupon}, deal_terms ('Add 2 to qualify for deal', 'Sale ends in 2 days'), great_price, available, stock_level ('many_in_stock'|'in_stock'|'likely_out_of_stock'|'out_of_stock'), stock_label, likely_out_of_stock, sold_by ('each'|'weight'), weight_option, par_weight{quantity,unit}, max_order_quantity, on_sale, buy_one_get_one, coupon_available, store_brand, dietary[], nutrition_highlights[]{name,value,unit}, variant_values[], retailer_reference_code, retailer_lookup_code, badge ('Best seller'), retailer{retailer_id,slug,name,shop_id,service_type,retailer_location_id}}}, count, retailers_total, page, has_more, unmatched_dropped, query, location{country,postal_code,place,zone_id,latitude,longitude}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk","postal_code":"90210"}},{"name":"product/detail","description":"One Instacart product: name, brand, size, category and breadcrumb, description, ingredients, directions, warnings, every image, rating and rating count — and, with a postal code, its current price at every retailer selling it there (lowest first, with was-prices). Add a retailer for that store's full item record: stock level, unit price, loyalty price and promotions.","required_params":["product_id"],"optional_params":["postal_code","country","retailer","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Instacart product id (every row's `product_id`) or an instacart.com / instacart.ca /products/ URL.","on_invalid":"reject","example":"81103","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"Optional. With a postal code the product comes back with its price at every retailer that sells it there (`offers`). Without one, only the product record and Instacart's national 'starting at' price.","on_invalid":"reject","example":"90210","aliases":["zip","zip_code","postcode"]},{"name":"country","type":"enum","required":false,"description":"Which Instacart: us (instacart.com, USD, 5-digit ZIP) or ca (instacart.ca, CAD, postal code like M5V 3L9).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — instacart.com, prices in USD"},{"value":"ca","label":"Canada — instacart.ca, prices in CAD"}],"default":"us","example":"us"},{"name":"retailer","type":"string","required":false,"description":"Optional: one retailer, by the `slug` or `retailer_id` that `retailers` returns for the same postal code (costco, ralphs, walmart, aldi …).","on_invalid":"reject","example":"costco","aliases":["store","retailer_slug","retailer_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, name, brand, size, category{id,name}, url, description, details, ingredients, directions, nutrition_text, warnings, other_sections[]{title,text}, images[], breadcrumb[]{name,url}, rating (0-5), rating_count, rating_scale, rating_distribution{5..1}, starting_price (Instacart's national 'starting at' price, no postal code), starting_price_note, currency}, offers[]{retailer_id,slug,name,shop_id,service_types[],price,original_price,discount_percent,discount_text,loyalty_price,price_unit,source ('multi_shop' | 'store_item' — the store's own price for a retailer Instacart's comparison list left out, identical to that store's search row),comparable (false = the store sells a different pack, e.g. a 12-jar case),item_name,item_size,pack_count,price_each (set when a price far above the rest was checked against the store's item)} (lowest price first; only with postal_code), offer_price_unit ('lb' for a product Instacart sells by weight: every offer price is then per lb, not per package; null = per item), offer_count, lowest_price, highest_price (both over comparable offers only), offers_not_comparable, retailers_carrying, retailer_item{product_id, item_id, name, brand (lower-cased as Instacart publishes it on item rows), size, url, image, currency, price (the retailer's regular Instacart price; for weight-estimated packages the estimated package price), price_display, original_price (was-price, only when on sale), discount_percent, savings, loyalty_price (the with-loyalty-card price, when lower), loyalty_label, loyalty_card_offer, unit_price_text ('$0.09/fl oz', '$8.97 / lb'), size_text, price_is_estimate, estimated_weight_text, promotions[]{label ('Buy 1, get 1 free', 'Spend $20, save $4', 'Rollback'),type,coupon}, deal_terms ('Add 2 to qualify for deal', 'Sale ends in 2 days'), great_price, available, stock_level ('many_in_stock'|'in_stock'|'likely_out_of_stock'|'out_of_stock'), stock_label, likely_out_of_stock, sold_by ('each'|'weight'), weight_option, par_weight{quantity,unit}, max_order_quantity, on_sale, buy_one_get_one, coupon_available, store_brand, dietary[], nutrition_highlights[]{name,value,unit}, variant_values[], retailer_reference_code, retailer_lookup_code, badge ('Best seller'), retailer{retailer_id,slug,name,shop_id,service_type,retailer_location_id}} (only with retailer), location{country,postal_code,place,zone_id,latitude,longitude}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"81103","postal_code":"90210"}},{"name":"retailers","description":"The retailers Instacart serves at a postal code — supermarkets, warehouse clubs, pharmacies, liquor, pet and specialty stores — with their slug and id for search and product/detail, retailer type, categories, logo, and whether they deliver, offer pickup, or both.","required_params":["postal_code"],"optional_params":["country","service_type","category","max_rotations"],"params":[{"name":"postal_code","type":"string","required":true,"description":"The delivery postal code prices and stores are for: a 5-digit ZIP for us (90210), a Canadian postal code for ca (M5V 3L9).","on_invalid":"reject","example":"90210","aliases":["zip","zip_code","postcode"]},{"name":"country","type":"enum","required":false,"description":"Which Instacart: us (instacart.com, USD, 5-digit ZIP) or ca (instacart.ca, CAD, postal code like M5V 3L9).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — instacart.com, prices in USD"},{"value":"ca","label":"Canada — instacart.ca, prices in CAD"}],"default":"us","example":"us"},{"name":"service_type","type":"enum","required":false,"description":"Which kind of store service to list.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Delivery and pickup"},{"value":"delivery","label":"Delivery only"},{"value":"pickup","label":"Pickup only"}],"default":"all"},{"name":"category","type":"string","required":false,"description":"Optional: only retailers in this Instacart category (grocery, alcohol, pets, pharmacy, office …) as shown in each retailer's `categories`.","on_invalid":"reject","example":"grocery"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"retailers[]{retailer_id, slug, name, retailer_type, categories[], logo, storefront_url, services[]{service_type,shop_id,retailer_location_id}}, count, location{country,postal_code,place,zone_id,latitude,longitude}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"90210"}},{"name":"suggest","description":"Instacart search-box suggestions for a partial query at a postal code.","required_params":["query","postal_code"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it on Instacart ('milk', 'ben jerrys').","on_invalid":"reject","example":"milk","aliases":["q","keyword","search"]},{"name":"postal_code","type":"string","required":true,"description":"The delivery postal code prices and stores are for: a 5-digit ZIP for us (90210), a Canadian postal code for ca (M5V 3L9).","on_invalid":"reject","example":"90210","aliases":["zip","zip_code","postcode"]},{"name":"country","type":"enum","required":false,"description":"Which Instacart: us (instacart.com, USD, 5-digit ZIP) or ca (instacart.ca, CAD, postal code like M5V 3L9).","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — instacart.com, prices in USD"},{"value":"ca","label":"Canada — instacart.ca, prices in CAD"}],"default":"us","example":"us"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"suggestions[]{term,image}, query, location{country,postal_code,place,zone_id,latitude,longitude}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"milk","postal_code":"90210"}}]},{"name":"instagram","category":{"id":"social","title":"Social Media"},"title":"Instagram Public Data API — profiles, posts, reels, hashtags, comments and search (no login required, public content only)","version":"0.2.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/instagram/v1","spec_available":true,"actions":[{"name":"profile","description":"public profile facts and first-page recent posts","required_params":[],"optional_params":["username","user_id"],"params":[{"name":"username","type":"string","required":false,"description":"Instagram handle without the @ (the name in instagram.com/<username>).","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric Instagram user id (a profile's user_id). Alternative to username, so an account stays trackable after a handle change. When both are sent, user_id wins and the response carries the account's CURRENT username.","on_invalid":"ignore","example":"528817151","aliases":["pk","id"]}],"returns":"profile{} — username, full_name, biography, follower_count, following_count, is_verified/private, account_type (personal|business|creator), is_business, is_professional, category (when the account shows one), profile_pic, external_url, user_id, recent_posts[]. Send username OR user_id; by user_id the response carries the account's current username. Logged-out Instagram does not publish an exact post count, so post_count is present only when Instagram sends one.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nike"}},{"name":"posts","description":"public profile grid posts, newest first, with max_id pagination","required_params":[],"optional_params":["username","user_id","limit","max_id","cursor","details","rich","include_sponsor"],"params":[{"name":"username","type":"string","required":false,"description":"Instagram handle without the @ (the name in instagram.com/<username>).","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric Instagram user id (a profile's user_id). Alternative to username, so an account stays trackable after a handle change. When both are sent, user_id wins and the response carries the account's CURRENT username.","on_invalid":"ignore","example":"528817151","aliases":["pk","id"]},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":12,"example":12,"minimum":1,"maximum":50},{"name":"max_id","type":"string","required":false,"description":"Pagination cursor from a previous response's page_info.next_max_id (also accepted as 'cursor'). Omit for the first page.","on_invalid":"ignore","example":"","aliases":["cursor"]},{"name":"details","type":"boolean","required":false,"description":"Also read every returned post's own page and merge taken_at_timestamp, comment_count, caption, tagged_users, coauthor_producers and location into each row, in the same call. Each row says details_status ok/unavailable; a row whose page could not be read keeps its list fields and is not charged. Billed 1 credit per row enriched, on top of the list price.","on_invalid":"ignore","default":false,"example":true,"aliases":["with_details"]},{"name":"include_sponsor","type":"boolean","required":false,"description":"Also read Instagram's own paid-partnership flag for every returned item (is_paid_partnership true/false). One extra upstream request per 25 items (about 1-2 s). Without it the three paid-partnership fields are present but null (unknown). Instagram does not publish the sponsor list or the label text to logged-out clients, so sponsor_tags stays null on items that are a paid partnership, and is [] on items that are not.","on_invalid":"ignore","default":false,"example":true,"aliases":["with_sponsor"]},{"name":"rich","type":"boolean","required":false,"description":"Read the richer surface: adds tagged_users, coauthor_producers, like_count, comment_count, timestamp, location and carousel media to every post. Costs noticeably more bandwidth per page and is slightly less reliable.","on_invalid":"ignore","default":false,"example":true,"aliases":["full","with_tags"]}],"returns":"posts[] (media_id, shortcode, media_type image/video/carousel, product_type, caption, accessibility_caption, display_url, is_video, carousel_media_count, like_count, play_count (videos), is_pinned (first page only), user{user_id, username}) + page_info{next_max_id, has_next_page}. Newest first; pinned posts lead and carry is_pinned=true. When the account hides its counts, like_and_view_counts_hidden=true and like_count is left out (Instagram sends a placeholder); play_count is still the real play count. The grid itself publishes no timestamp or comment count: send `details: true` to get taken_at_timestamp, comment_count, tagged_users[], coauthor_producers[] and location{} on every row in the same call (details_status per row). Every row carries is_paid_partnership, sponsor_tags[] and branded_content_label: null (unknown) by default, because the grid does not publish them; send `include_sponsor: true` for Instagram's own is_paid_partnership true/false (sponsor_tags [] when false, null when true: the sponsor list is not published logged-out; branded_content_label null). A PRIVATE account returns ok with an empty posts[]; an unknown handle or id is NOT_FOUND. Send username OR user_id. `rich: true` is the older signed-in-only surface and is unreliable logged-out; prefer `details`.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"username":"nasa"}},{"name":"reels","description":"public profile reels tab, newest first, with max_id pagination","required_params":[],"optional_params":["username","user_id","limit","max_id","cursor","details","include_sponsor"],"params":[{"name":"username","type":"string","required":false,"description":"Instagram handle without the @ (the name in instagram.com/<username>).","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric Instagram user id (a profile's user_id). Alternative to username, so an account stays trackable after a handle change. When both are sent, user_id wins and the response carries the account's CURRENT username.","on_invalid":"ignore","example":"528817151","aliases":["pk","id"]},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":12,"example":12,"minimum":1,"maximum":50},{"name":"max_id","type":"string","required":false,"description":"Pagination cursor from a previous response's page_info.next_max_id (also accepted as 'cursor'). Omit for the first page.","on_invalid":"ignore","example":"","aliases":["cursor"]},{"name":"details","type":"boolean","required":false,"description":"Also read every returned post's own page and merge taken_at_timestamp, comment_count, caption, tagged_users, coauthor_producers and location into each row, in the same call. Each row says details_status ok/unavailable; a row whose page could not be read keeps its list fields and is not charged. Billed 1 credit per row enriched, on top of the list price.","on_invalid":"ignore","default":false,"example":true,"aliases":["with_details"]},{"name":"include_sponsor","type":"boolean","required":false,"description":"Also read Instagram's own paid-partnership flag for every returned item (is_paid_partnership true/false). One extra upstream request per 25 items (about 1-2 s). Without it the three paid-partnership fields are present but null (unknown). Instagram does not publish the sponsor list or the label text to logged-out clients, so sponsor_tags stays null on items that are a paid partnership, and is [] on items that are not.","on_invalid":"ignore","default":false,"example":true,"aliases":["with_sponsor"]}],"returns":"reels[] (media_id, shortcode, media_type, product_type, display_url, like_count, comment_count, play_count, view_count (the reels tab publishes ONE play metric, so view_count MIRRORS play_count and view_count_is_play_count=true says so -- they are not two separate measurements), is_pinned (pinned to the reels tab), user{user_id}) + page_info{max_id, next_max_id, has_next_page}. Engagement counts are published here. When the account has switched counts off, like_and_view_counts_hidden=true and like_count is left out (Instagram sends a placeholder), while play_count and view_count are still the real play count. The reels tab carries no caption or timestamp: send `details: true` to merge caption, taken_at_timestamp, tagged_users[], coauthor_producers[] and location{} into every row in the same call, keeping play_count (details_status per row). Every row carries is_paid_partnership, sponsor_tags[] and branded_content_label: null (unknown) by default, because the reels tab does not publish them; send `include_sponsor: true` for Instagram's own is_paid_partnership true/false (sponsor_tags [] when false, null when true; branded_content_label null). Send username OR user_id. A private account or one with no reels returns ok with an empty reels[]; an unknown handle or id is NOT_FOUND.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"username":"nasa"}},{"name":"similar_accounts","description":"public related profiles from web_profile_info","required_params":["username"],"optional_params":["limit"],"params":[{"name":"username","type":"string","required":true,"description":"Instagram handle without the @ (the name in instagram.com/<username>).","on_invalid":"reject","example":"nasa"},{"name":"limit","type":"integer","required":false,"description":"Max related accounts to return (Instagram returns up to ~80).","on_invalid":"ignore","example":20,"minimum":1}],"returns":"accounts[] — related profiles (user_id, username, full_name, is_verified, profile_pic)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nike"}},{"name":"search","description":"public hashtags for a keyword plus the account whose handle matches it exactly","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search term. Hashtags match by keyword (search, hashtag_search); an account matches when the term is its exact handle (search, users_search).","on_invalid":"reject","example":"nasa"}],"returns":"users[] (the account whose handle equals the query, 0 or 1 rows), hashtags[] (public hashtags matching the keyword), places[] (always empty: place search is login-gated by Instagram). NOT_FOUND when neither matches.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nasa"}},{"name":"users_search","description":"public user lookup by handle (exact handle, case-insensitive)","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search term. Hashtags match by keyword (search, hashtag_search); an account matches when the term is its exact handle (search, users_search).","on_invalid":"reject","example":"nasa"}],"returns":"users[] — matching public accounts (user_id, username, full_name, is_verified, follower_count, post_count; post_count is null because logged-out Instagram does not publish it). NOTE: logged-out access resolves the account whose handle matches the query (exact, case-insensitive; a leading @ is ignored). Full fuzzy 'find similar names' search is login-gated by Instagram and is not available without an account.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nasa"}},{"name":"hashtag_search","description":"topsearch public hashtags only","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search term. Hashtags match by keyword (search, hashtag_search); an account matches when the term is its exact handle (search, users_search).","on_invalid":"reject","example":"nasa"}],"returns":"hashtags[] — matching tags (name, id, media_count, formatted_media_count)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nasa"}},{"name":"post_info","description":"maximally-complete public post/reel detail by shortcode (URL) or media_id","required_params":[],"optional_params":["shortcode","media_id","play_count_scan","include_sponsor"],"params":[{"name":"shortcode","type":"string","required":false,"description":"Post shortcode — the code in instagram.com/p/<shortcode>/ or /reel/<shortcode>/ (a full post/reel URL is also accepted). Provide shortcode OR media_id.","on_invalid":"ignore","example":"DZz4bjIjhdm"},{"name":"media_id","type":"string","required":false,"description":"Numeric media id (from a post's media_id field). Provide media_id OR shortcode.","on_invalid":"ignore","example":"3325034892012345678"},{"name":"play_count_scan","type":"integer","required":false,"description":"Videos/reels only. The post page carries no play_count, so it can be read from the owner's newest reels (or grid items): send how many to look through (1-120; 36 = three pages of 12, the lookup stops at the page that holds the item). Without it, only items whose owner hides counts are looked up (newest 36); 0 turns the lookup off entirely. Each page adds one upstream request and a few seconds.","on_invalid":"ignore","example":36,"minimum":0,"maximum":120},{"name":"include_sponsor","type":"boolean","required":false,"description":"Also read Instagram's own paid-partnership flag for every returned item (is_paid_partnership true/false). One extra upstream request per 25 items (about 1-2 s). Without it the three paid-partnership fields are present but null (unknown). Instagram does not publish the sponsor list or the label text to logged-out clients, so sponsor_tags stays null on items that are a paid partnership, and is [] on items that are not.","on_invalid":"ignore","default":false,"example":true,"aliases":["with_sponsor"]}],"returns":"post{} — media_id, shortcode, media_type, caption, like_count, comment_count, view_count, display_url/video_url, dimensions, video_duration, accessibility_caption, owner, tagged_users[], location{}, music{audio_id,song,artist}, coauthor_producers[], and carousel_media[] (every image/video of an album). Richest detail comes from a shortcode; media_id resolves the same media. For a video/reel the post page carries no play count; send play_count_scan (e.g. 36) to read play_count (= view_count) from the owner's reels tab or grid, and play_count_source says where (reels_tab, profile_grid, not_in_recent_items, unavailable). When the owner hides like/view counts the lookup runs anyway (newest 36): like_and_view_counts_hidden=true, like_count is left out (Instagram sends a placeholder) and play_count is the real one. post also carries is_paid_partnership, sponsor_tags[] and branded_content_label: null (unknown) by default, because the post page does not publish them; `include_sponsor: true` reads Instagram's own is_paid_partnership true/false (one extra request; sponsor_tags [] when false, null when true; label null). A deleted/archived post or a wrong shortcode, and an age-restricted post (Instagram shows it only to logged-in viewers), answer NOT_FOUND, not retryable. A private account's post opened by its share link (the long /p/<code>/ form) is returned.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"shortcode":"DZz4bjIjhdm"}},{"name":"post_comments","description":"public comments for a post/reel by shortcode (URL) or media_id, with CURSOR pagination","required_params":[],"optional_params":["shortcode","media_id","limit","cursor"],"params":[{"name":"shortcode","type":"string","required":false,"description":"Post shortcode — the code in instagram.com/p/<shortcode>/ or /reel/<shortcode>/ (a full post/reel URL is also accepted). Provide shortcode OR media_id.","on_invalid":"ignore","example":"DZz4bjIjhdm"},{"name":"media_id","type":"string","required":false,"description":"Numeric media id (from a post's media_id field). Provide media_id OR shortcode.","on_invalid":"ignore","example":"3325034892012345678"},{"name":"limit","type":"integer","required":false,"description":"Comments per call (default 50; one call returns up to ~1200 within the time budget). For MORE, chunk with `cursor`.","on_invalid":"ignore","example":20,"minimum":1},{"name":"cursor","type":"string","required":false,"description":"Resume token from a previous call's `next_cursor` — page UNLIMITED depth across short calls (no timeout). Omit for page 1.","on_invalid":"ignore"}],"returns":"comments[] (comment_id, text, created_at, username, user{user_id,username,is_verified,profile_pic}) + comment_count (total on post) + returned_count + next_cursor (pass back as `cursor` for the next batch; null = exhausted) + has_more. Works on posts AND reels. Logged-out.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"shortcode":"DZz4bjIjhdm"}},{"name":"audio_media","description":"public reels feed that use a given audio/music track, with pagination","required_params":["audio_id"],"optional_params":["limit","max_id","cursor"],"params":[{"name":"audio_id","type":"string","required":true,"description":"Numeric audio/music id. Get it from a reel/post via post_info (post.music.audio_id) — every reel that uses a sound exposes one. Returns the public reels feed built on that sound.","on_invalid":"reject","example":"28125316597069162","aliases":["audio_cluster_id","music_id"]},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":12,"example":12,"minimum":1,"maximum":50},{"name":"max_id","type":"string","required":false,"description":"Pagination cursor from a previous response's page_info.next_max_id (also accepted as 'cursor'). Omit for the first page.","on_invalid":"ignore","example":"","aliases":["cursor"]}],"returns":"audio{audio_id, media_count, formatted_media_count, song_name, artist_name}, media[] (media_id, shortcode, caption, like/comment/play count, video/display url, user), page_info{max_id, has_next_page}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"audio_id":"28125316597069162"}}]},{"name":"interencheres","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Interencheres France auction lots","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/interencheres/v1","spec_available":true,"actions":[{"name":"search","description":"Search publicly published French auction lots dated today or later, including same-day results; amounts retain auction bases. Optionally restrict to one or more auction houses (house or house_id) and/or to one sale (sale_id, lots in lot-number order).","required_params":[],"optional_params":["query","page","page_size","house","house_id","sale_id"],"params":[{"name":"query","type":"string","required":false,"description":"Source full-text lot query; omit for unfiltered dated catalogue. Words are matched independently anywhere in a lot, so a house name here is NOT a house filter; use house or house_id.","on_invalid":"reject","example":"rolex"},{"name":"page","type":"integer","required":false,"description":"Source page, limited to 100 here; deep pagination is unqualified.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Requested source lot count per page, maximum 20.","on_invalid":"reject","default":12,"example":3,"minimum":1,"maximum":20},{"name":"house","type":"string","required":false,"description":"Auction house (étude / maison de ventes) name, e.g. \"Armentières Enchères\". Resolved to exactly one house; an ambiguous or unknown name is an error listing candidate houses, never a silent guess. Use houses to look names up.","on_invalid":"reject","example":"Armentières Enchères"},{"name":"house_id","type":"string","required":false,"description":"Auction house organization_id from houses (or house.organization_id of a lot); up to 10 comma-separated IDs match any of them. Unknown IDs are NOT_FOUND. Not combinable with house.","on_invalid":"reject","example":"84"},{"name":"sale_id","type":"string","required":false,"description":"Sale ID from sales (or sale.sale_id of a lot): only that sale's lots, ordered by lot number. Unknown or no longer published sales are NOT_FOUND.","on_invalid":"reject","example":"691314"}],"returns":"Lot IDs, French titles/descriptions, EUR or native currency estimate ranges, starting bids/reported hammer amounts, house, sale date, media, source total and range. With a house filter also house_filter (resolved houses); with sale_id also sale_id.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"rolex","page":1,"page_size":3}},{"name":"listing","description":"Fresh full public lot detail by exact search listing_id; no bidding or customer account data.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Numeric source lot ID, at most 2147483647, returned by search.","on_invalid":"reject","example":"89154792"}],"returns":"Full native description, media, canonical supported source URL, estimate/starting/reported hammer bases, result confirmation, sale date, public auction house, location and source attributes. Fees and all-in totals unqualified; consignor and unpublished GTIN null.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"89154792"}},{"name":"houses","description":"Find Interencheres auction houses (commissaires-priseurs / études) by name, city or other published text, look one up by organization_id, or page through the whole directory. Each row says whether its published name matches the query exactly, partially, or only through another field such as the city.","required_params":[],"optional_params":["query","house_id","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"House name or other text (city, description). Whole words, accents optional; \"VP AUTO\" is also tried as \"VPAUTO\" when the spaced form finds nothing. Omit with house_id for the full directory.","on_invalid":"reject","example":"Armentières Enchères"},{"name":"house_id","type":"string","required":false,"description":"Exact single house organization_id; NOT_FOUND when unknown.","on_invalid":"reject","example":"84"},{"name":"page","type":"integer","required":false,"description":"Source page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Houses per page, maximum 50.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50}],"returns":"organization_id (the house_id for search/sales), voluntary/judicial/display names, house page URL, description, address with coordinates, telephone, email, website (null when the house publishes none), approval number, court of appeal, upcoming sale and appraisal-day counts, published lot count, logo, name_match.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Armentières Enchères"}},{"name":"sales","description":"Upcoming public sales dated today or later, optionally for one or more auction houses (house or house_id), in date order. Pass a sale_id to search for its lots.","required_params":[],"optional_params":["house","house_id","page","page_size"],"params":[{"name":"house","type":"string","required":false,"description":"Auction house (étude / maison de ventes) name, e.g. \"Armentières Enchères\". Resolved to exactly one house; an ambiguous or unknown name is an error listing candidate houses, never a silent guess. Use houses to look names up.","on_invalid":"reject","example":"Armentières Enchères"},{"name":"house_id","type":"string","required":false,"description":"Auction house organization_id from houses (or house.organization_id of a lot); up to 10 comma-separated IDs match any of them. Unknown IDs are NOT_FOUND. Not combinable with house.","on_invalid":"reject","example":"84"},{"name":"page","type":"integer","required":false,"description":"Source page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Sales per page, maximum 50.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"sale_id, French name, date/time and timezone, canonical sale URL, live/online/classic auction type, voluntary/judicial/mixed sale type, category, published lot count, status, description, house, location, cover image; house_filter when filtered.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"house":"Armentières Enchères"}}]},{"name":"intermarche","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Intermarché API — live intermarche.com grocery data for a chosen Intermarché store: product search (filterable by category, brand and offer) with the store's price, unit price, struck price, previous and lowest recent price, loyalty-card offers with end dates, and stock; one product in full by EAN with nutrition table, ingredients, allergens, origin and storage; Intermarché stores near a French postcode, town or point. No login, no loyalty card.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/intermarche/v1","spec_available":true,"actions":[{"name":"search","description":"Search intermarche.com by keyword for one store, with the site's filters (promotion, loyalty-card offer, brand, category). 40 per page on the site, 35-40 products per page here.","required_params":["query"],"optional_params":["store_id","page","on_promotion","loyalty_offer","brand_id","category_id"],"params":[{"name":"query","type":"string","required":true,"description":"Search text as typed into intermarche.com's search box (French works best: 'lait', 'café moulu', 'pâtes'). An EAN typed here finds nothing on the site; use the product action for EAN lookups.","on_invalid":"reject","example":"lait","aliases":["q","keyword","search","text"]},{"name":"store_id","type":"string","required":false,"description":"Intermarché store code from the `stores` action (5 digits, e.g. 06829 = Intermarché Super Elne). Price, assortment, promotions and stock are that store's. Without it the engine uses its default store 06829 (Intermarché Super Elne, 66200) and returns store_defaulted: true.","on_invalid":"reject","example":"06829","aliases":["store","pdv","pdv_ref","store_code"]},{"name":"page","type":"integer","required":false,"description":"Result page. The site lists 40 per page; partner tiles are removed, so a page has 35-40 products ('lait' at 06829: 492 products, 13 pages, page 13 has 12). A page past the last returns no products and has_more false.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":60},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products the site files under 'Promotions' at this store ('lait' at 06829: 492 -> 12).","on_invalid":"reject","default":false,"example":true,"aliases":["promo","promotions_only"]},{"name":"loyalty_offer","type":"boolean","required":false,"description":"Only products with a loyalty-card offer ('Avantages fidélité': money credited to the card, the till price does not change; 'lait' at 06829: 492 -> 103).","on_invalid":"reject","default":false,"example":true,"aliases":["fidelite","loyalty"]},{"name":"brand_id","type":"string","required":false,"description":"Only this brand: a brand id from data.facets.brands of a previous search (2954 = Lactel; 'lait' at 06829: 492 -> 36). An unknown id returns no products.","on_invalid":"reject","example":"2954","aliases":["marque"]},{"name":"category_id","type":"string","required":false,"description":"Only this category: an id from data.facets.categories of a previous search (5961 = Laits demi-écrémés; 'lait' at 06829: 492 -> 38).","on_invalid":"reject","example":"5961","aliases":["category","rayon"]}],"returns":"data.products[]: position, product_id (= ean), ean, item_id, name, brand, pack_size, net_volume, url, image, images[], price (EUR charged now for one unit at this store), currency, was_price (struck-through price), discount_percent, unit_price, unit (kg | l | piece), previous_price (the site's 'oldPrice'), lowest_recent_price (the site's 'latestBestPrice'), price_decreasing, promotions[] {type, code, loyalty, percent, value, value_unit, loyalty_amount, amount, min_quantity, max_uses, end_date, flash_sale, card_reward_type}, loyalty_offer, banner, stock_quantity, available, max_quantity, flags[], category_id, department_id, seller, sponsored, online_exclusive, is_lot. data.total (the site's count for this store and filters), data.pagination {page, per_page, last_page, has_more}, data.facets {selection, categories, promotion_types, brands, preferences: [{id, label, count}]}, data.store {store_id, name, banner, format (EXPRESS, CONTACT, SUPER, HYPER…), address, postal_code, city, latitude, longitude, distance_km, online_services[], url}, data.store_defaulted, data.query, data.filters.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"lait","store_id":"06829"}},{"name":"product","description":"One Intermarché product in full by EAN for one store: price, struck price, previous and lowest recent price, unit price, VAT rate, loyalty-card offers with start and end dates, stock, Nutri-Score, Yuka score, nutrition per 100 g/ml, ingredients, allergens, manufacturer, origin, storage, labels, images.","required_params":["ean"],"optional_params":["store_id"],"params":[{"name":"ean","type":"string","required":true,"description":"The product's EAN-13 barcode (8-14 digits) — the product_id of a search row.","on_invalid":"reject","example":"3428273990083","aliases":["product_id","gtin","barcode","id"]},{"name":"store_id","type":"string","required":false,"description":"Intermarché store code from the `stores` action (5 digits, e.g. 06829 = Intermarché Super Elne). Price, assortment, promotions and stock are that store's. Without it the engine uses its default store 06829 (Intermarché Super Elne, 66200) and returns store_defaulted: true.","on_invalid":"reject","example":"06829","aliases":["store","pdv","pdv_ref","store_code"]}],"returns":"data.product: product_id, ean, gtin, item_id, name, brand, description, pack_size, net_quantity, sale_type, price, currency, was_price, discount_percent, unit_price, unit, previous_price, lowest_recent_price, omnibus_price, vat_percent, promotions[] {type, code, loyalty, percent, value, loyalty_amount, amount, start_date, end_date, max_uses, card_reward_type}, loyalty_offer, loyalty_card_percent, promotion_period {start, end}, stock_quantity, available, max_quantity, nutriscore, yuka_score, nutrition_per_100 {…}, vitamins_minerals {…}, ingredients, allergens, manufacturer, origin, storage, legal_notices, labels[], attributes[] {code, value}, category_id, department_id, images[], image, has_alcohol, online_exclusive. data.store, data.store_defaulted.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"ean":"3428273990083","store_id":"06829"}},{"name":"stores","description":"Intermarché stores near a French postcode, a town or a point, with the store_id the other actions take, format, address and (for a point) distance.","required_params":[],"optional_params":["postal_code","city","latitude","longitude"],"params":[{"name":"postal_code","type":"string","required":false,"description":"French 5-digit postcode: the stores of the towns that carry it. Give postal_code, city, or latitude and longitude.","on_invalid":"reject","example":"66200","aliases":["zip","zip_code","postcode","code_postal"]},{"name":"city","type":"string","required":false,"description":"Town name ('Marseille' -> 27 stores, 'Elne' -> 1).","on_invalid":"reject","example":"Marseille","aliases":["town","ville"]},{"name":"latitude","type":"number","required":false,"description":"Latitude of the point to search around (with longitude); stores within 10 km, nearest first, with distance.","on_invalid":"reject","example":43.2965,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Longitude of the point to search around (with latitude).","on_invalid":"reject","example":5.3698,"aliases":["lon","lng"]}],"returns":"data.stores[]: store_id, name, banner, format (EXPRESS, CONTACT, SUPER, HYPER…), address, postal_code, city, latitude, longitude, distance_km, online_services[], url. data.towns[] (the towns a postcode carries), data.search {postal_code | city | latitude, longitude}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"city":"Marseille"}}]},{"name":"internet-archive","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Internet Archive API — search and scrape archive.org's open catalogue of free books, texts, audio, music, concerts, movies, TV, software, games and images: full-text search with mediatype/collection/creator/year filters, complete item metadata with every downloadable file and direct download URLs, collection browsing, user reviews and ratings, and in-book full-text 'search inside' — no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/internet-archive/v1","spec_available":true,"actions":[{"name":"search","description":"Search archive.org's catalogue. Filter by mediatype (texts/audio/movies/software/image/etree…), collection, creator, subject, language and year range; sort and paginate. Returns items with identifier, title, mediatype, creator, year, downloads, rating, collections and thumbnail/details URLs.","required_params":[],"optional_params":["query","mediatype","collection","creator","subject","language","year_from","year_to","sort","rows","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search across titles, descriptions, creators and subjects. Accepts Lucene syntax (e.g. 'title:moon AND year:[1960 TO 1970]'). Optional if you pass a mediatype/collection/creator filter instead.","on_invalid":"reject","example":"apollo 11","aliases":["q"]},{"name":"mediatype","type":"enum","required":false,"description":"Filter to one archive.org media bucket: texts, audio, movies, software, image, etree (concerts), data, web, collection.","on_invalid":"ignore","allowed_values":[{"value":"texts","label":"Texts / books / documents"},{"value":"audio","label":"Audio / music / podcasts / radio"},{"value":"movies","label":"Video / movies / TV / film"},{"value":"software","label":"Software / games / apps"},{"value":"image","label":"Images / photos"},{"value":"etree","label":"Live music concerts (etree)"},{"value":"data","label":"Datasets"},{"value":"web","label":"Web / archived sites"},{"value":"collection","label":"Collections"},{"value":"account","label":"User accounts"}],"example":"audio"},{"name":"collection","type":"string","required":false,"description":"Restrict to items in a named collection (its identifier, e.g. 'nasa', 'librivoxaudio', 'prelinger', 'GratefulDead').","on_invalid":"ignore","example":"nasa"},{"name":"creator","type":"string","required":false,"description":"Restrict to items by a creator/author/artist name.","on_invalid":"ignore","example":"Mark Twain"},{"name":"subject","type":"string","required":false,"description":"Restrict to items tagged with a subject/topic keyword.","on_invalid":"ignore","example":"space exploration"},{"name":"language","type":"string","required":false,"description":"Restrict to a language (e.g. 'English', 'French', 'Spanish').","on_invalid":"ignore","example":"English"},{"name":"year_from","type":"integer","required":false,"description":"Only items from this year onward.","on_invalid":"ignore","example":1960},{"name":"year_to","type":"integer","required":false,"description":"Only items up to and including this year.","on_invalid":"ignore","example":1970},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Defaults to most-downloaded.","on_invalid":"ignore","allowed_values":[{"value":"downloads desc","label":"Most downloaded first (default)"},{"value":"downloads asc","label":"Least downloaded first"},{"value":"week desc","label":"Trending this week"},{"value":"publicdate desc","label":"Newest added first"},{"value":"publicdate asc","label":"Oldest added first"},{"value":"date desc","label":"Newest by item date"},{"value":"date asc","label":"Oldest by item date"},{"value":"avg_rating desc","label":"Highest rated first"},{"value":"titleSorter asc","label":"Title A→Z"},{"value":"titleSorter desc","label":"Title Z→A"}],"example":"downloads desc"},{"name":"rows","type":"integer","required":false,"description":"Results per page (1-100, default 25); clamped.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"results[]{identifier, title, mediatype, creator[], year, date, description, downloads, item_size, collections[], subjects[], languages[], num_reviews, avg_rating, details_url, thumbnail_url} + meta{num_found, page, has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"apollo 11"}},{"name":"item","description":"Full metadata for one archive.org item by identifier: title, creator, description, date, publisher, language, subjects, collections, license, rating — plus the COMPLETE file list (name, format, size, duration, source) with direct download URLs, and the item's reviews. Set include_files=false / include_reviews=false to slim the payload.","required_params":["identifier"],"optional_params":["include_files","include_reviews","files_limit"],"params":[{"name":"identifier","type":"string","required":true,"description":"The archive.org item identifier (the slug in archive.org/details/<identifier>). From a search result's 'identifier'.","on_invalid":"reject","example":"OTRR_Dragnet_Singles","aliases":["id","item"]},{"name":"include_files","type":"boolean","required":false,"description":"Include the full file list with download URLs (default true).","on_invalid":"ignore","default":true,"example":true},{"name":"include_reviews","type":"boolean","required":false,"description":"Include the item's reviews (default true).","on_invalid":"ignore","default":true,"example":true},{"name":"files_limit","type":"integer","required":false,"description":"Cap on files returned (1-2000, default 200); clamped.","on_invalid":"ignore","default":200,"example":200,"minimum":1,"maximum":2000}],"returns":"item{identifier, title, mediatype, creator[], description, date, publisher, language[], subjects[], collections[], licenseurl, uploader, num_reviews, avg_rating, item_size, files_count, files[]{name,format,size,length,source,download_url}, reviews[]{reviewer,stars,title,body,date}, details_url, thumbnail_url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"identifier":"OTRR_Dragnet_Singles"}},{"name":"collection","description":"Browse the items inside an archive.org collection by its identifier (e.g. 'nasa', 'librivoxaudio', 'prelinger', 'GratefulDead'). Same rich item rows as search, paginated and sortable; optionally narrow by mediatype within the collection.","required_params":["collection"],"optional_params":["mediatype","query","sort","rows","page"],"params":[{"name":"collection","type":"string","required":true,"description":"The collection identifier to browse (from a search result's 'collections', or a known name).","on_invalid":"reject","example":"librivoxaudio","aliases":["id"]},{"name":"mediatype","type":"enum","required":false,"description":"Filter to one archive.org media bucket: texts, audio, movies, software, image, etree (concerts), data, web, collection.","on_invalid":"ignore","allowed_values":[{"value":"texts","label":"Texts / books / documents"},{"value":"audio","label":"Audio / music / podcasts / radio"},{"value":"movies","label":"Video / movies / TV / film"},{"value":"software","label":"Software / games / apps"},{"value":"image","label":"Images / photos"},{"value":"etree","label":"Live music concerts (etree)"},{"value":"data","label":"Datasets"},{"value":"web","label":"Web / archived sites"},{"value":"collection","label":"Collections"},{"value":"account","label":"User accounts"}],"example":"audio"},{"name":"query","type":"string","required":false,"description":"Free-text search across titles, descriptions, creators and subjects. Accepts Lucene syntax (e.g. 'title:moon AND year:[1960 TO 1970]'). Optional if you pass a mediatype/collection/creator filter instead.","on_invalid":"reject","example":"apollo 11","aliases":["q"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Defaults to most-downloaded.","on_invalid":"ignore","allowed_values":[{"value":"downloads desc","label":"Most downloaded first (default)"},{"value":"downloads asc","label":"Least downloaded first"},{"value":"week desc","label":"Trending this week"},{"value":"publicdate desc","label":"Newest added first"},{"value":"publicdate asc","label":"Oldest added first"},{"value":"date desc","label":"Newest by item date"},{"value":"date asc","label":"Oldest by item date"},{"value":"avg_rating desc","label":"Highest rated first"},{"value":"titleSorter asc","label":"Title A→Z"},{"value":"titleSorter desc","label":"Title Z→A"}],"example":"downloads desc"},{"name":"rows","type":"integer","required":false,"description":"Results per page (1-100, default 25); clamped.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"results[] (same shape as search) + meta{num_found, page, has_more, collection}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"collection":"librivoxaudio"}},{"name":"reviews","description":"All public reviews and star ratings for one archive.org item: reviewer handle, star rating (0-5), review title, body and date. Reviews are embedded in the item record, so this returns every review in one call (no pagination needed).","required_params":["identifier"],"optional_params":[],"params":[{"name":"identifier","type":"string","required":true,"description":"The archive.org item identifier (the slug in archive.org/details/<identifier>). From a search result's 'identifier'.","on_invalid":"reject","example":"OTRR_Dragnet_Singles","aliases":["id","item"]}],"returns":"reviews[]{reviewer, title, body, stars, date} + meta{record_count, avg_rating, num_reviews}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"identifier":"OTRR_Dragnet_Singles"}},{"name":"files","description":"Just the downloadable files for one archive.org item (no heavy metadata/reviews): name, format, size, duration, source and a direct download URL for each. Useful for fetching the actual book PDF / MP3 / video / ZIP.","required_params":["identifier"],"optional_params":["format","files_limit"],"params":[{"name":"identifier","type":"string","required":true,"description":"The archive.org item identifier (the slug in archive.org/details/<identifier>). From a search result's 'identifier'.","on_invalid":"reject","example":"OTRR_Dragnet_Singles","aliases":["id","item"]},{"name":"format","type":"string","required":false,"description":"Optional case-insensitive substring filter on the file format (e.g. 'PDF', 'MP3', 'MPEG4', 'EPUB').","on_invalid":"ignore","example":"MP3"},{"name":"files_limit","type":"integer","required":false,"description":"Cap on files returned (1-5000, default 500); clamped.","on_invalid":"ignore","default":500,"example":500,"minimum":1,"maximum":5000}],"returns":"files[]{name, format, size, length, source, md5, download_url} + meta{record_count, files_count, server, dir}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"identifier":"OTRR_Dragnet_Singles"}},{"name":"search_inside","description":"Full-text 'search inside' one digitized book on archive.org: find a phrase within the book's OCR text and get the matching snippets with page numbers. The item must be a texts/book item with OCR (most scanned books are).","required_params":["identifier","query"],"optional_params":[],"params":[{"name":"identifier","type":"string","required":true,"description":"The archive.org item identifier (the slug in archive.org/details/<identifier>). From a search result's 'identifier'.","on_invalid":"reject","example":"OTRR_Dragnet_Singles","aliases":["id","item"]},{"name":"query","type":"string","required":true,"description":"The phrase to find inside the book's text.","on_invalid":"reject","example":"whale","aliases":["q"]}],"returns":"matches[]{text, page, par[]} + meta{record_count, query}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"identifier":"adventuresoftoms00twaiiala","query":"whitewash"}}]},{"name":"invaluable","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Invaluable — live auction lots and realised auction prices","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/invaluable/v1","spec_available":true,"actions":[{"name":"search","description":"Search the lots that are open for bidding right now across ~6 900 auction houses worldwide — roughly 289 000 of them. Every filter is optional. Each row keeps its own currency and separates the four prices an auction lot has: `estimate_low`/`estimate_high` (the house's estimate), `starting_bid` (the opening ask, which is what the headline figure is while nobody has bid), `current_bid` (only once `bid_count` >= 1) and `hammer_price` (set only when the lot has actually sold). `price_is` names which of them the live figure is.","required_params":[],"optional_params":["query","category","subcategory","house_id","artist_id","country","state","currency","sale_type","online_only","with_images_only","min_bid","max_bid","min_estimate","max_estimate","min_bids","starts_after","starts_before","sort","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the lot title, the house's description and the artist name (e.g. 'rolex daytona', 'picasso lithograph', 'meissen figurine'). Leave it out to browse everything.","on_invalid":"reject","example":"rolex daytona","aliases":["q","keyword","keywords","search","term","text"]},{"name":"category","type":"enum","required":false,"description":"Restrict to one of Invaluable's 15 top-level categories. Takes the category name or its 10-character id from the `categories` action.","on_invalid":"reject","allowed_values":[{"value":"SG2BIX3JPJ","label":"Fine Art"},{"value":"BQWOG3FLWY","label":"Collectibles"},{"value":"66MNH3RVXU","label":"Furniture"},{"value":"HV9SJ0PETO","label":"Decorative Art"},{"value":"YKGNZXS2MH","label":"Jewelry"},{"value":"URF9IESAHL","label":"Asian Art & Antiques"},{"value":"TJYLLGLDKA","label":"Guns & Firearms"},{"value":"0HV8BV6K8Y","label":"Dolls, Bears & Toys"},{"value":"WIARM9WZTW","label":"Automobiles, Boats & Airplanes"},{"value":"5P1KWJO0ML","label":"Wines & Spirits"},{"value":"8NR4UKTNYX","label":"Heavy Equipment"},{"value":"CNWPZEY4P5","label":"Commercial & Industrial"},{"value":"Q2ENTPZUZ4","label":"Farm & Agriculture"},{"value":"MU8Q47SBT3","label":"Real Estate"},{"value":"WXJEP9TUWL","label":"Estate & Storage"}],"example":"Jewelry","value_pattern":"[A-Za-z0-9 ,&'\\-]{3,40}","aliases":["supercategory","category_id","supercategory_ref"]},{"name":"subcategory","type":"string","required":false,"description":"Restrict further to one category inside `category` (e.g. \"Watches, Men's\", 'Painting', 'Rings'). 🔴 Take the value from the `categories` action, NOT from the site's own menu: the menu and the lot index spell several of these differently (the menu's \"Men's Watches\" is \"Watches, Men's\" in the index) and a spelling the index does not use returns no rows.","on_invalid":"reject","example":"Watches, Men's","value_pattern":".{2,60}","aliases":["category_name","subcategory_name"]},{"name":"house_id","type":"string","required":false,"description":"Restrict to one auction house, by its 10-character Invaluable id. The `auction_house` action returns ids together with names, countries and upcoming-sale counts.","on_invalid":"reject","example":"DWXC0ROZMK","value_pattern":"[A-Za-z0-9]{8,12}","aliases":["houseRef","house_ref","house","seller_id"]},{"name":"artist_id","type":"string","required":false,"description":"Restrict to one artist/maker, by its 10-character Invaluable id. The `artists` action returns ids with the artist's lifetime, upcoming and past lot counts.","on_invalid":"reject","example":"NVDDDUIINB","value_pattern":"[A-Za-z0-9]{8,12}","aliases":["artistRef","artist_ref","artist"]},{"name":"country","type":"string","required":false,"description":"Restrict to the auction houses of one country. Takes a two-letter code for the 37 mapped markets (US, GB, DE, FR, HK, KR, AU…) or the country's full name exactly as Invaluable writes it.","on_invalid":"reject","example":"US","value_pattern":"[A-Za-z .'\\-]{2,60}","aliases":["country_name","countryName","market","cc"]},{"name":"state","type":"string","required":false,"description":"Restrict to one US state or other first-level region, as Invaluable writes it (e.g. 'New York', 'Florida', 'New South Wales'). Live lots only — the archive does not index it.","on_invalid":"reject","example":"New York","value_pattern":".{2,60}","aliases":["stateName","region","province"]},{"name":"currency","type":"string","required":false,"description":"Restrict to lots priced in one currency. 🔴 Nothing in this API is converted: every amount is in the lot's own currency and one unfiltered page routinely mixes USD, EUR, GBP, AUD, HKD and KRW.","on_invalid":"reject","example":"USD","value_pattern":"[A-Za-z]{3}","aliases":["currency_code","currencyCode"]},{"name":"sale_type","type":"enum","required":false,"description":"Restrict by how the sale is run.","on_invalid":"reject","allowed_values":[{"value":"live","label":"A live auction run by the house, bid in real time"},{"value":"timed","label":"An online timed auction with a fixed closing time"},{"value":"view_only","label":"Catalogue published on Invaluable, bidding happens elsewhere"}],"example":"timed","aliases":["saleType","auction_type","format"]},{"name":"online_only","type":"boolean","required":false,"description":"true = only lots in sales that exist only online.","on_invalid":"reject","example":false,"aliases":["onlineOnly"]},{"name":"with_images_only","type":"boolean","required":false,"description":"true = only lots that carry a photo.","on_invalid":"reject","example":true,"aliases":["has_image","hasImage","with_images"]},{"name":"min_bid","type":"number","required":false,"description":"Lowest acceptable live figure (the opening ask on a lot with no bids, the current bid once there is one), in the lot's OWN currency — combine with `currency` to compare like with like.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["min_price","price_min","bid_min"]},{"name":"max_bid","type":"number","required":false,"description":"Highest acceptable live figure, in the lot's own currency.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["max_price","price_max","bid_max"]},{"name":"min_estimate","type":"number","required":false,"description":"Lowest acceptable `estimate_low`, in the lot's own currency.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["estimate_min"]},{"name":"max_estimate","type":"number","required":false,"description":"Highest acceptable `estimate_low`, in the lot's own currency.","on_invalid":"reject","example":100000,"minimum":0,"aliases":["estimate_max"]},{"name":"min_bids","type":"integer","required":false,"description":"Only lots that already have at least this many bids. `min_bids=1` is how you ask for lots where the headline figure is a real bid rather than the opening ask.","on_invalid":"reject","example":1,"minimum":0,"aliases":["bid_count_min","min_bid_count"]},{"name":"starts_after","type":"string","required":false,"description":"Only sales starting on or after this UTC date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-01-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_from","from_date","min_date"]},{"name":"starts_before","type":"string","required":false,"description":"Only sales starting on or before this UTC date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_to","to_date","max_date"]},{"name":"sort","type":"enum","required":false,"description":"Row order. The bid orders are ranked by Invaluable across currencies, so the sequence is not monotonic in any single currency.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"Sale starting soonest first (default)"},{"value":"newly_listed","label":"Most recently listed first"},{"value":"relevance","label":"Invaluable's own relevance ranking"},{"value":"bid_low_first","label":"Lowest bid/opening figure first"},{"value":"bid_high_first","label":"Highest bid/opening figure first"},{"value":"fewest_bids","label":"Fewest bids first"},{"value":"most_bids","label":"Most bids first"}],"default":"ending_soonest","example":"most_bids","aliases":["order","order_by","sort_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Invaluable serves at most 25,000 lots per query, so the last reachable page is 25,000/max_results — narrow the query (category, house, country, price band) to reach deeper lots.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":25000},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-200.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":200,"aliases":["limit","count","per_page","hitsPerPage","page_size","size"]}],"returns":"{query, filters, total_available_approx, totals_are_estimates, page, page_count, last_reachable_page, currencies, price_fields, results[]} — each result carries lot_id, url, title, description, house, house_id, sale_id, artist, category, subcategory, location, country, currency, estimate_low, estimate_high, starting_bid, current_bid, price_is, bid_count, hammer_price, sold, ended, reserve_price, sale_starts_at, ends_at, sale_type, images, thumbnail, watch_count, and the index's member-id fields as received: winner, winner_ref, watched, watched_refs, channel_ids.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex","max_results":10}},{"name":"past_results","description":"Search Invaluable's realised-price archive — what lots ACTUALLY SOLD FOR, around 10 million of them, going back two decades. `hammer_price` is the realised price BEFORE the buyer's premium (`amounts_include_buyers_premium` is false on every row; `detail` returns the premium itself). Only lots whose sale has actually CLOSED are returned — and by default only those that realised money, because a closed lot nobody bid on did not sell. Pass `sold_only=false` to get the passed lots too and read `sold` per row, which is how you measure a house's or a category's sell-through.","required_params":[],"optional_params":["query","category","subcategory","house_id","artist_id","country","currency","sold_only","min_price","max_price","sold_after","sold_before","with_images_only","sort","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over the lot title, the house's description and the artist name (e.g. 'rolex daytona', 'picasso lithograph', 'meissen figurine'). Leave it out to browse everything.","on_invalid":"reject","example":"rolex daytona","aliases":["q","keyword","keywords","search","term","text"]},{"name":"category","type":"enum","required":false,"description":"Restrict to one of Invaluable's 15 top-level categories. Takes the category name or its 10-character id from the `categories` action.","on_invalid":"reject","allowed_values":[{"value":"SG2BIX3JPJ","label":"Fine Art"},{"value":"BQWOG3FLWY","label":"Collectibles"},{"value":"66MNH3RVXU","label":"Furniture"},{"value":"HV9SJ0PETO","label":"Decorative Art"},{"value":"YKGNZXS2MH","label":"Jewelry"},{"value":"URF9IESAHL","label":"Asian Art & Antiques"},{"value":"TJYLLGLDKA","label":"Guns & Firearms"},{"value":"0HV8BV6K8Y","label":"Dolls, Bears & Toys"},{"value":"WIARM9WZTW","label":"Automobiles, Boats & Airplanes"},{"value":"5P1KWJO0ML","label":"Wines & Spirits"},{"value":"8NR4UKTNYX","label":"Heavy Equipment"},{"value":"CNWPZEY4P5","label":"Commercial & Industrial"},{"value":"Q2ENTPZUZ4","label":"Farm & Agriculture"},{"value":"MU8Q47SBT3","label":"Real Estate"},{"value":"WXJEP9TUWL","label":"Estate & Storage"}],"example":"Jewelry","value_pattern":"[A-Za-z0-9 ,&'\\-]{3,40}","aliases":["supercategory","category_id","supercategory_ref"]},{"name":"subcategory","type":"string","required":false,"description":"Restrict further to one category inside `category` (e.g. \"Watches, Men's\", 'Painting', 'Rings'). 🔴 Take the value from the `categories` action, NOT from the site's own menu: the menu and the lot index spell several of these differently (the menu's \"Men's Watches\" is \"Watches, Men's\" in the index) and a spelling the index does not use returns no rows.","on_invalid":"reject","example":"Watches, Men's","value_pattern":".{2,60}","aliases":["category_name","subcategory_name"]},{"name":"house_id","type":"string","required":false,"description":"Restrict to one auction house, by its 10-character Invaluable id. The `auction_house` action returns ids together with names, countries and upcoming-sale counts.","on_invalid":"reject","example":"DWXC0ROZMK","value_pattern":"[A-Za-z0-9]{8,12}","aliases":["houseRef","house_ref","house","seller_id"]},{"name":"artist_id","type":"string","required":false,"description":"Restrict to one artist/maker, by its 10-character Invaluable id. The `artists` action returns ids with the artist's lifetime, upcoming and past lot counts.","on_invalid":"reject","example":"NVDDDUIINB","value_pattern":"[A-Za-z0-9]{8,12}","aliases":["artistRef","artist_ref","artist"]},{"name":"country","type":"string","required":false,"description":"Restrict to the auction houses of one country. Takes a two-letter code for the 37 mapped markets (US, GB, DE, FR, HK, KR, AU…) or the country's full name exactly as Invaluable writes it.","on_invalid":"reject","example":"US","value_pattern":"[A-Za-z .'\\-]{2,60}","aliases":["country_name","countryName","market","cc"]},{"name":"currency","type":"string","required":false,"description":"Restrict to lots priced in one currency. 🔴 Nothing in this API is converted: every amount is in the lot's own currency and one unfiltered page routinely mixes USD, EUR, GBP, AUD, HKD and KRW.","on_invalid":"reject","example":"USD","value_pattern":"[A-Za-z]{3}","aliases":["currency_code","currencyCode"]},{"name":"sold_only","type":"boolean","required":false,"description":"true (default) = only lots that realised a price. false = also the lots that closed unsold, so you can measure the sell-through of a house or a category.","on_invalid":"reject","default":true,"example":true,"aliases":["only_sold","sold"]},{"name":"min_price","type":"number","required":false,"description":"Lowest acceptable `hammer_price`, in the lot's OWN currency — combine with `currency` to compare like with like.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["min_result","price_min","min_hammer"]},{"name":"max_price","type":"number","required":false,"description":"Highest acceptable `hammer_price`, in the lot's own currency.","on_invalid":"reject","example":250000,"minimum":0,"aliases":["max_result","price_max","max_hammer"]},{"name":"sold_after","type":"string","required":false,"description":"Only sales held on or after this UTC date (YYYY-MM-DD).","on_invalid":"reject","example":"2024-01-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_from","from_date","min_date"]},{"name":"sold_before","type":"string","required":false,"description":"Only sales held on or before this UTC date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-12-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["date_to","to_date","max_date"]},{"name":"with_images_only","type":"boolean","required":false,"description":"true = only lots that carry a photo.","on_invalid":"reject","example":true,"aliases":["has_image","hasImage","with_images"]},{"name":"sort","type":"enum","required":false,"description":"Row order. The price orders are ranked by Invaluable across currencies, so the sequence is not monotonic in any single currency.","on_invalid":"reject","allowed_values":[{"value":"sale_date_desc","label":"Most recent sale date first (default)"},{"value":"sale_date_asc","label":"Oldest sale date first"},{"value":"price_high_first","label":"Highest realised price first — Invaluable ranks ACROSS currencies, so the sequence is not monotonic in any single currency"},{"value":"price_low_first","label":"Lowest realised price first (also ranked across currencies)"}],"default":"sale_date_desc","example":"price_high_first","aliases":["order","order_by","sort_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Invaluable serves at most 25,000 lots per query, so the last reachable page is 25,000/max_results — narrow the query (category, house, country, price band) to reach deeper lots.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":25000},{"name":"max_results","type":"integer","required":false,"description":"Rows per page, 1-200.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":200,"aliases":["limit","count","per_page","hitsPerPage","page_size","size"]}],"returns":"Same row shape as `search`, plus a `summary` block {sold_rows, unsold_rows, currencies, hammer_price_by_currency:{min, max, median}} computed over the returned page only — never over the whole archive, and never across currencies.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex","sort":"price_high_first","max_results":10}},{"name":"detail","description":"One lot in full: the catalogue text the house wrote (description, condition, provenance, literature, exhibition history, dimensions, medium, signature, circa), every photo, and the complete money picture — the estimate, the opening ask, the current bid, the realised price, the buyer's premium amount, the derived premium rate, the total with premium, and the SALE's own `results_include_premium` declaration plus its full tiered premium schedule. Takes the lot id or any Invaluable lot URL.","required_params":["lot"],"optional_params":["include_sale_terms"],"params":[{"name":"lot","type":"string","required":true,"description":"The lot's 10-character Invaluable id, or a full lot URL such as https://www.invaluable.com/auction-lot/…-c-4035350c64","on_invalid":"reject","example":"4035350C64","value_pattern":"[A-Za-z0-9]{8,12}|https?://\\S+","aliases":["lot_id","lotRef","lot_ref","id","ref","url","link"]},{"name":"include_sale_terms","type":"boolean","required":false,"description":"true (default) also reads the lot's sale for the buyer's-premium schedule, the bid increments, the conditions of sale and the shipping/payment notes. false skips that second call.","on_invalid":"reject","default":true,"example":true,"aliases":["with_terms","sale_terms"]}],"returns":"{lot{…}, prices{…}, sale{…}, house{…}, photos[]} — `prices` carries the four axes plus buyers_premium_amount, buyers_premium_pct, total_with_premium, current_bid_with_premium and results_include_premium.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"lot":"4035350C64"}},{"name":"auction","description":"One sale (an auction catalogue) with its terms, or the list of sales coming up across the whole site. With `sale_id` you get the sale's own record: when it starts in UTC, where, which house, the full buyer's-premium schedule, the bid increments, the conditions of sale, and whether the published results include the premium. Without it you get the upcoming-sale calendar.","required_params":[],"optional_params":["sale_id","page","max_results"],"params":[{"name":"sale_id","type":"string","required":false,"description":"The sale's 10-character Invaluable catalogue id, or any /catalog/<id> URL. Leave it out for the upcoming-sale calendar.","on_invalid":"reject","example":"A36LD50EJ5","value_pattern":"[A-Za-z0-9]{8,12}|https?://\\S+","aliases":["catalog_id","catalogRef","catalog","auction_id","sale","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page of the upcoming-sale calendar.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"max_results","type":"integer","required":false,"description":"Sales per page of the calendar, 1-100.","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit","size","per_page","count"]}],"returns":"With `sale_id`: {sale{…}, house{…}, buyers_premium_schedule[], bid_increments[], terms{…}}. Without: {total_available, page, page_count, results[]} of upcoming sales.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"max_results":10}},{"name":"auction_house","description":"Find auction houses or read one. With `query`/`country` you search the 6 949-house directory and get each house's id — which is what the `house_id` filter on `search` and `past_results` takes — together with its live and archived lot counts. With `house_id` you get that house's own record: its business address, its country, the year it joined, plus its upcoming and most recent past sales.","required_params":[],"optional_params":["query","house_id","country","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Name search over the house directory (e.g. 'christie', 'bonhams', 'dorotheum').","on_invalid":"reject","example":"christie","aliases":["q","name","house_name","search"]},{"name":"house_id","type":"string","required":false,"description":"Restrict to one auction house, by its 10-character Invaluable id. The `auction_house` action returns ids together with names, countries and upcoming-sale counts.","on_invalid":"reject","example":"DWXC0ROZMK","value_pattern":"[A-Za-z0-9]{8,12}","aliases":["houseRef","house_ref","house","seller_id"]},{"name":"country","type":"string","required":false,"description":"Restrict to the auction houses of one country. Takes a two-letter code for the 37 mapped markets (US, GB, DE, FR, HK, KR, AU…) or the country's full name exactly as Invaluable writes it.","on_invalid":"reject","example":"US","value_pattern":"[A-Za-z .'\\-]{2,60}","aliases":["country_name","countryName","market","cc"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The directory serves at most 1,000 houses per query — narrow it with `query` or `country` to reach the rest.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"max_results","type":"integer","required":false,"description":"Houses per page, 1-100.","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit","size","per_page","count"]}],"returns":"With `house_id`: {house{…}, upcoming_sales[], past_sales[], lot_counts}. Without: {query, total_available_approx, page, page_count, results[]} with {house_id, name, country, url, logo, live_lots, archived_lots}.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"christie","max_results":10}},{"name":"artists","description":"Find an artist or maker in Invaluable's 260 000-name authority file and get the id the `artist_id` filter takes, with the number of lots on the live surface and in the realised-price archive. With `artist_id` you also get the artist's record: lifetime dates, professions, known aliases and genres — which is how you tell two painters with the same surname apart before pulling their price history.","required_params":[],"optional_params":["query","artist_id","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Name search over the artist authority file (e.g. 'picasso', 'tiffany studios').","on_invalid":"reject","example":"picasso","aliases":["q","name","artist_name","search"]},{"name":"artist_id","type":"string","required":false,"description":"Restrict to one artist/maker, by its 10-character Invaluable id. The `artists` action returns ids with the artist's lifetime, upcoming and past lot counts.","on_invalid":"reject","example":"NVDDDUIINB","value_pattern":"[A-Za-z0-9]{8,12}","aliases":["artistRef","artist_ref","artist"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The authority file serves at most 25,000 names per query.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":250},{"name":"max_results","type":"integer","required":false,"description":"Artists per page, 1-100.","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit","size","per_page","count"]}],"returns":"{query, total_available_approx, page, page_count, results[]} with {artist_id, name, first_name, last_name, aliases, upcoming_lots, past_lots, total_lots, follower_count, image}; with `artist_id` also {artist{dates, professions, genres, biography}}.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"picasso","max_results":5}},{"name":"categories","description":"Invaluable's taxonomy with LIVE counts: the 15 top-level categories, each with the categories beneath it and how many lots are open for bidding in each. 🔴 The site's own taxonomy endpoint and its lot index disagree on two names (it calls one 'Guns & Firearms', the index calls it 'Firearms', and 'Estate & Storage' has no lots at all), which is why every row here carries the stable id as well — the id is what the `category` filter should take.","required_params":[],"optional_params":["category","surface"],"params":[{"name":"category","type":"enum","required":false,"description":"Return only this top-level category's children.","on_invalid":"reject","allowed_values":[{"value":"SG2BIX3JPJ","label":"Fine Art"},{"value":"BQWOG3FLWY","label":"Collectibles"},{"value":"66MNH3RVXU","label":"Furniture"},{"value":"HV9SJ0PETO","label":"Decorative Art"},{"value":"YKGNZXS2MH","label":"Jewelry"},{"value":"URF9IESAHL","label":"Asian Art & Antiques"},{"value":"TJYLLGLDKA","label":"Guns & Firearms"},{"value":"0HV8BV6K8Y","label":"Dolls, Bears & Toys"},{"value":"WIARM9WZTW","label":"Automobiles, Boats & Airplanes"},{"value":"5P1KWJO0ML","label":"Wines & Spirits"},{"value":"8NR4UKTNYX","label":"Heavy Equipment"},{"value":"CNWPZEY4P5","label":"Commercial & Industrial"},{"value":"Q2ENTPZUZ4","label":"Farm & Agriculture"},{"value":"MU8Q47SBT3","label":"Real Estate"},{"value":"WXJEP9TUWL","label":"Estate & Storage"}],"example":"Jewelry","value_pattern":"[A-Za-z0-9 ,&'\\-]{3,40}","aliases":["supercategory","category_id","parent"]},{"name":"surface","type":"enum","required":false,"description":"Which side of the site to count: 'live' = lots open for bidding, 'archive' = the realised-price archive.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Lots open for bidding"},{"value":"archive","label":"The realised-price archive"}],"default":"live","example":"live","aliases":["side","index"]}],"returns":"{surface, count, total_lots_approx, categories[]} with {category_id, name, index_name, lot_count, subcategories[{name, lot_count}]}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"Jewelry"}},{"name":"suggest","description":"Invaluable's own search suggestions for a partial phrase, each with how many lots it matches on the live surface AND in the realised-price archive. Useful for turning a vague term into a query that actually has data behind it — 'rolex' returns 496 live and 217 762 archived lots, 'rolex daytona' 13 and 13 473.","required_params":["query"],"optional_params":["max_results"],"params":[{"name":"query","type":"string","required":true,"description":"The partial phrase to complete (e.g. 'rol', 'chinese vas').","on_invalid":"reject","example":"rolex","aliases":["q","prefix","term","keyword","text"]},{"name":"max_results","type":"integer","required":false,"description":"Suggestions to return, 1-50.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50,"aliases":["limit","count","size","per_page"]}],"returns":"{query, count, results[]} with {suggestion, word_count, popularity, live_lots, archived_lots}.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex"}}]},{"name":"ip-geolocation","category":{"id":"utilities","title":"Utilities & AI"},"title":"IP Geolocation API — locate any IPv4/IPv6 address: country, region, city, coordinates, timezone, ASN, ISP and hosting/datacenter flag","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ip-geolocation/v1","spec_available":true,"actions":[{"name":"lookup","description":"geolocate ONE IPv4/IPv6 → country/region/city/lat-lon/timezone/ASN/ISP/org + hosting flag","required_params":["ip"],"optional_params":["lang"],"params":[{"name":"ip","type":"string","required":true,"description":"A single IPv4 or IPv6 address to geolocate (e.g. 8.8.8.8 or 2001:4860:4860::8888).","on_invalid":"reject","example":"8.8.8.8","aliases":["address","query","ip_address"]},{"name":"lang","type":"string","required":false,"description":"Preferred language for place names (country/region/city), e.g. en, de, fr, es, ru, ja. Falls back to English when a locale name is unavailable.","on_invalid":"ignore","default":"en","example":"en"}],"returns":"flat record: status, country_code/name, region(+code), city, latitude, longitude, timezone, utc_offset, asn, as_org, isp, network, security{is_hosting,is_proxy,is_vpn,is_tor}, country{} metadata bundle","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"ip":"8.8.8.8"}},{"name":"batch","description":"geolocate up to 100 IPs in one call","required_params":["ips"],"optional_params":["lang"],"params":[{"name":"ips","type":"array","required":true,"description":"Up to 100 IPv4/IPv6 addresses. A JSON array, OR a comma/space/newline-separated string. Bad/private IPs are kept (per-item status) so one bad entry never fails the call.","on_invalid":"reject","example":["8.8.8.8","1.1.1.1","208.67.222.222"],"aliases":["addresses"]},{"name":"lang","type":"string","required":false,"description":"Preferred language for place names (country/region/city), e.g. en, de, fr, es, ru, ja. Falls back to English when a locale name is unavailable.","on_invalid":"ignore","default":"en","example":"en"}],"returns":"count, found_count, results[] (each the same flat record as lookup)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"ips":["8.8.8.8","1.1.1.1","192.168.0.1","nonsense"]}}]},{"name":"japan-re","category":{"id":"real-estate","title":"Real Estate"},"title":"Japan Real Estate API (SUUMO scraper) — rent & buy property listings across all 47 prefectures (Tokyo, Osaka, Kyoto, Fukuoka, Hokkaido…) with filters for price, area, station walk-time and building age, plus full listing detail (rent/deposit/key-money, madori layout, m², floor, orientation, structure, station access and photos) and a prefecture/area code lookup — no API key required","version":"2.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/japan-re/v1","spec_available":true,"actions":[{"name":"search","description":"Search SUUMO property listings in any of Japan's 47 prefectures — rentals or homes for sale (used house / used condo / land / new house) — filtered by max price (万円), min area (m²), max station walk-time, building age and a free-text station/area keyword. Paginate with page + max_pages.","required_params":["prefecture"],"optional_params":["listing_type","page","max_pages","max_price_man","min_area_m2","max_walk_minutes","building_age","keyword"],"params":[{"name":"prefecture","type":"enum","required":true,"description":"Prefecture to search — any of Japan's 47 prefectures by romaji slug (tokyo, osaka, kyoto, hokkaido, fukuoka…) or its kanji name (東京都, 大阪府).","on_invalid":"reject","allowed_values":[{"value":"hokkaido","label":"北海道 (Hokkaido)"},{"value":"aomori","label":"青森県 (Aomori)"},{"value":"iwate","label":"岩手県 (Iwate)"},{"value":"miyagi","label":"宮城県 (Miyagi)"},{"value":"akita","label":"秋田県 (Akita)"},{"value":"yamagata","label":"山形県 (Yamagata)"},{"value":"fukushima","label":"福島県 (Fukushima)"},{"value":"ibaraki","label":"茨城県 (Ibaraki)"},{"value":"tochigi","label":"栃木県 (Tochigi)"},{"value":"gunma","label":"群馬県 (Gunma)"},{"value":"saitama","label":"埼玉県 (Saitama)"},{"value":"chiba","label":"千葉県 (Chiba)"},{"value":"tokyo","label":"東京都 (Tokyo)"},{"value":"kanagawa","label":"神奈川県 (Kanagawa)"},{"value":"niigata","label":"新潟県 (Niigata)"},{"value":"toyama","label":"富山県 (Toyama)"},{"value":"ishikawa","label":"石川県 (Ishikawa)"},{"value":"fukui","label":"福井県 (Fukui)"},{"value":"yamanashi","label":"山梨県 (Yamanashi)"},{"value":"nagano","label":"長野県 (Nagano)"},{"value":"gifu","label":"岐阜県 (Gifu)"},{"value":"shizuoka","label":"静岡県 (Shizuoka)"},{"value":"aichi","label":"愛知県 (Aichi)"},{"value":"mie","label":"三重県 (Mie)"},{"value":"shiga","label":"滋賀県 (Shiga)"},{"value":"kyoto","label":"京都府 (Kyoto)"},{"value":"osaka","label":"大阪府 (Osaka)"},{"value":"hyogo","label":"兵庫県 (Hyogo)"},{"value":"nara","label":"奈良県 (Nara)"},{"value":"wakayama","label":"和歌山県 (Wakayama)"},{"value":"tottori","label":"鳥取県 (Tottori)"},{"value":"shimane","label":"島根県 (Shimane)"},{"value":"okayama","label":"岡山県 (Okayama)"},{"value":"hiroshima","label":"広島県 (Hiroshima)"},{"value":"yamaguchi","label":"山口県 (Yamaguchi)"},{"value":"tokushima","label":"徳島県 (Tokushima)"},{"value":"kagawa","label":"香川県 (Kagawa)"},{"value":"ehime","label":"愛媛県 (Ehime)"},{"value":"kochi","label":"高知県 (Kochi)"},{"value":"fukuoka","label":"福岡県 (Fukuoka)"},{"value":"saga","label":"佐賀県 (Saga)"},{"value":"nagasaki","label":"長崎県 (Nagasaki)"},{"value":"kumamoto","label":"熊本県 (Kumamoto)"},{"value":"oita","label":"大分県 (Oita)"},{"value":"miyazaki","label":"宮崎県 (Miyazaki)"},{"value":"kagoshima","label":"鹿児島県 (Kagoshima)"},{"value":"okinawa","label":"沖縄県 (Okinawa)"}],"example":"tokyo"},{"name":"listing_type","type":"enum","required":false,"description":"Transaction & property type. Legacy values sale_used_house / sale_used_condo still work.","on_invalid":"reject","allowed_values":[{"value":"rent","label":"Rentals (賃貸 chintai)"},{"value":"buy_house","label":"Used houses for sale (中古一戸建て)"},{"value":"buy_apartment","label":"Used condos/apartments for sale (中古マンション)"},{"value":"buy_land","label":"Land for sale (土地)"},{"value":"buy_new_house","label":"New houses for sale (新築一戸建て)"}],"default":"rent","example":"rent"},{"name":"page","type":"integer","required":false,"description":"1-based results page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"Fetch and merge this many pages from `page` onward (stops on an empty page). Each page ~30 listings.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20},{"name":"max_price_man","type":"number","required":false,"description":"Maximum price in 万円 (man-yen, ×10,000 JPY). For rent this is the monthly rent ceiling (e.g. 10 = ¥100,000/mo); for sale the total price ceiling (e.g. 5000 = ¥50,000,000).","on_invalid":"ignore","example":10,"minimum":0,"aliases":["max_price"]},{"name":"min_area_m2","type":"number","required":false,"description":"Minimum floor/building area in square metres.","on_invalid":"ignore","example":25,"minimum":0,"aliases":["min_area"]},{"name":"max_walk_minutes","type":"integer","required":false,"description":"Maximum walking minutes from the nearest train station.","on_invalid":"ignore","example":10,"minimum":1,"maximum":60,"aliases":["max_walk"]},{"name":"building_age","type":"integer","required":false,"description":"Maximum building age in years (e.g. 10 = built within the last 10 years).","on_invalid":"ignore","example":10,"minimum":0,"maximum":100},{"name":"keyword","type":"string","required":false,"description":"Free-text filter — a station, line, ward/area or building name (Japanese works best, e.g. 新宿, 山手線, 渋谷区).","on_invalid":"ignore","example":"新宿","aliases":["q"]}],"returns":"items[]{listing_id, url, title_ja, address_ja, price_jpy, price_ja, madori, area_m2 (+land_area_m2/building_area_m2 for sale), station_access[], building_age_years, photos[]} + count + page + pages_fetched + has_next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"prefecture":"tokyo","listing_type":"rent","max_pages":1}},{"name":"detail","description":"Full detail for one SUUMO listing — rent/deposit/key-money or sale price, madori layout, floor area, floor, orientation, building structure & age, station access and the photo gallery. For RENT pass listing_id; for SALE pass the listing's `url` from a search result (SUUMO sale pages have no id-only URL). listing_type picks the right parser.","required_params":[],"optional_params":["listing_id","url","listing_type"],"params":[{"name":"listing_id","type":"string","required":false,"description":"SUUMO RENT listing id — the digits in a jnc_<id> URL, or a rent search result's listing_id. (For SALE listings pass `url` from the search result instead, since SUUMO sale pages have no id-only URL.)","on_invalid":"reject","example":"000107669299","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Full SUUMO listing URL (copy the `url` from a search result). REQUIRED for sale listings; optional for rent (listing_id works too).","on_invalid":"ignore","example":"https://suumo.jp/chukoikkodate/tokyo/sc_hachioji/nc_20015074/"},{"name":"listing_type","type":"enum","required":false,"description":"Transaction & property type. Legacy values sale_used_house / sale_used_condo still work.","on_invalid":"reject","allowed_values":[{"value":"rent","label":"Rentals (賃貸 chintai)"},{"value":"buy_house","label":"Used houses for sale (中古一戸建て)"},{"value":"buy_apartment","label":"Used condos/apartments for sale (中古マンション)"},{"value":"buy_land","label":"Land for sale (土地)"},{"value":"buy_new_house","label":"New houses for sale (新築一戸建て)"}],"default":"rent","example":"rent"}],"returns":"listing{} — full record (fields vary by rent vs sale; price_jpy, deposit_jpy, key_money_jpy, madori, area_m2, floor_ja, orientation_ja, structure_ja, building_age_years, station_access[], photos[])","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"000109252250"}},{"name":"areas","description":"List Japan's 47 prefectures with their romaji slug, kanji name and SUUMO region/JIS codes — use it to discover or validate the `prefecture` value before searching. Pass an optional query to filter by name.","required_params":[],"optional_params":["query"],"params":[{"name":"query","type":"string","required":false,"description":"Optional filter — match a prefecture by romaji or kanji name substring (e.g. 'osa' → osaka, '東京' → tokyo).","on_invalid":"ignore","example":"osa","aliases":["q"]}],"returns":"prefectures[]{slug, name_ja, ar, ta} + count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"osa"}},{"name":"listings/search","description":"Legacy name for `search`, kept so older integrations keep working. It runs the exact same code and returns the exact same body (verified byte-for-byte, 2026-08-28). New code should call `search`.","required_params":["prefecture"],"optional_params":["listing_type","page","max_pages","max_price_man","min_area_m2","max_walk_minutes","building_age","keyword"],"params":[{"name":"prefecture","type":"enum","required":true,"description":"Prefecture to search — any of Japan's 47 prefectures by romaji slug (tokyo, osaka, kyoto, hokkaido, fukuoka…) or its kanji name (東京都, 大阪府).","on_invalid":"reject","allowed_values":[{"value":"hokkaido","label":"北海道 (Hokkaido)"},{"value":"aomori","label":"青森県 (Aomori)"},{"value":"iwate","label":"岩手県 (Iwate)"},{"value":"miyagi","label":"宮城県 (Miyagi)"},{"value":"akita","label":"秋田県 (Akita)"},{"value":"yamagata","label":"山形県 (Yamagata)"},{"value":"fukushima","label":"福島県 (Fukushima)"},{"value":"ibaraki","label":"茨城県 (Ibaraki)"},{"value":"tochigi","label":"栃木県 (Tochigi)"},{"value":"gunma","label":"群馬県 (Gunma)"},{"value":"saitama","label":"埼玉県 (Saitama)"},{"value":"chiba","label":"千葉県 (Chiba)"},{"value":"tokyo","label":"東京都 (Tokyo)"},{"value":"kanagawa","label":"神奈川県 (Kanagawa)"},{"value":"niigata","label":"新潟県 (Niigata)"},{"value":"toyama","label":"富山県 (Toyama)"},{"value":"ishikawa","label":"石川県 (Ishikawa)"},{"value":"fukui","label":"福井県 (Fukui)"},{"value":"yamanashi","label":"山梨県 (Yamanashi)"},{"value":"nagano","label":"長野県 (Nagano)"},{"value":"gifu","label":"岐阜県 (Gifu)"},{"value":"shizuoka","label":"静岡県 (Shizuoka)"},{"value":"aichi","label":"愛知県 (Aichi)"},{"value":"mie","label":"三重県 (Mie)"},{"value":"shiga","label":"滋賀県 (Shiga)"},{"value":"kyoto","label":"京都府 (Kyoto)"},{"value":"osaka","label":"大阪府 (Osaka)"},{"value":"hyogo","label":"兵庫県 (Hyogo)"},{"value":"nara","label":"奈良県 (Nara)"},{"value":"wakayama","label":"和歌山県 (Wakayama)"},{"value":"tottori","label":"鳥取県 (Tottori)"},{"value":"shimane","label":"島根県 (Shimane)"},{"value":"okayama","label":"岡山県 (Okayama)"},{"value":"hiroshima","label":"広島県 (Hiroshima)"},{"value":"yamaguchi","label":"山口県 (Yamaguchi)"},{"value":"tokushima","label":"徳島県 (Tokushima)"},{"value":"kagawa","label":"香川県 (Kagawa)"},{"value":"ehime","label":"愛媛県 (Ehime)"},{"value":"kochi","label":"高知県 (Kochi)"},{"value":"fukuoka","label":"福岡県 (Fukuoka)"},{"value":"saga","label":"佐賀県 (Saga)"},{"value":"nagasaki","label":"長崎県 (Nagasaki)"},{"value":"kumamoto","label":"熊本県 (Kumamoto)"},{"value":"oita","label":"大分県 (Oita)"},{"value":"miyazaki","label":"宮崎県 (Miyazaki)"},{"value":"kagoshima","label":"鹿児島県 (Kagoshima)"},{"value":"okinawa","label":"沖縄県 (Okinawa)"}],"example":"tokyo"},{"name":"listing_type","type":"enum","required":false,"description":"Transaction & property type. Legacy values sale_used_house / sale_used_condo still work.","on_invalid":"reject","allowed_values":[{"value":"rent","label":"Rentals (賃貸 chintai)"},{"value":"buy_house","label":"Used houses for sale (中古一戸建て)"},{"value":"buy_apartment","label":"Used condos/apartments for sale (中古マンション)"},{"value":"buy_land","label":"Land for sale (土地)"},{"value":"buy_new_house","label":"New houses for sale (新築一戸建て)"}],"default":"rent","example":"rent"},{"name":"page","type":"integer","required":false,"description":"1-based results page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"Fetch and merge this many pages from `page` onward (stops on an empty page). Each page ~30 listings.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20},{"name":"max_price_man","type":"number","required":false,"description":"Maximum price in 万円 (man-yen, ×10,000 JPY). For rent this is the monthly rent ceiling (e.g. 10 = ¥100,000/mo); for sale the total price ceiling (e.g. 5000 = ¥50,000,000).","on_invalid":"ignore","example":10,"minimum":0,"aliases":["max_price"]},{"name":"min_area_m2","type":"number","required":false,"description":"Minimum floor/building area in square metres.","on_invalid":"ignore","example":25,"minimum":0,"aliases":["min_area"]},{"name":"max_walk_minutes","type":"integer","required":false,"description":"Maximum walking minutes from the nearest train station.","on_invalid":"ignore","example":10,"minimum":1,"maximum":60,"aliases":["max_walk"]},{"name":"building_age","type":"integer","required":false,"description":"Maximum building age in years (e.g. 10 = built within the last 10 years).","on_invalid":"ignore","example":10,"minimum":0,"maximum":100},{"name":"keyword","type":"string","required":false,"description":"Free-text filter — a station, line, ward/area or building name (Japanese works best, e.g. 新宿, 山手線, 渋谷区).","on_invalid":"ignore","example":"新宿","aliases":["q"]}],"returns":"See `search`.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"prefecture":"tokyo"}},{"name":"listings/detail","description":"Legacy name for `detail`, kept so older integrations keep working. It runs the exact same code and returns the exact same body. New code should call `detail`.","required_params":[],"optional_params":["listing_id","url","listing_type"],"params":[{"name":"listing_id","type":"string","required":false,"description":"SUUMO RENT listing id — the digits in a jnc_<id> URL, or a rent search result's listing_id. (For SALE listings pass `url` from the search result instead, since SUUMO sale pages have no id-only URL.)","on_invalid":"reject","example":"000107669299","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Full SUUMO listing URL (copy the `url` from a search result). REQUIRED for sale listings; optional for rent (listing_id works too).","on_invalid":"ignore","example":"https://suumo.jp/chukoikkodate/tokyo/sc_hachioji/nc_20015074/"},{"name":"listing_type","type":"enum","required":false,"description":"Transaction & property type. Legacy values sale_used_house / sale_used_condo still work.","on_invalid":"reject","allowed_values":[{"value":"rent","label":"Rentals (賃貸 chintai)"},{"value":"buy_house","label":"Used houses for sale (中古一戸建て)"},{"value":"buy_apartment","label":"Used condos/apartments for sale (中古マンション)"},{"value":"buy_land","label":"Land for sale (土地)"},{"value":"buy_new_house","label":"New houses for sale (新築一戸建て)"}],"default":"rent","example":"rent"}],"returns":"See `detail`.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://suumo.jp/chukoikkodate/tokyo/sc_hachioji/nc_20015074/"}}]},{"name":"jarir","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Jarir API — search Jarir Bookstore (Saudi Arabia, Kuwait, Qatar, UAE, Bahrain) and read products with price, regular price, discount, online stock, showroom stock, seller, installments, specs and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/jarir/v1","spec_available":true,"actions":[{"name":"search","description":"Search Jarir's catalogue with Jarir's own search engine: keyword, brand, product type, price range in the storefront's currency and price sort. Give a `query`, or browse a whole `product_type` or `brand` without one. Each row: SKU, name, URL, brand, model, MPN, barcode, price the shopper pays, regular price, discount, currency, in-stock flag, who sells it (Jarir or a named marketplace seller), Tabby/Tamara eligibility, image. Plus Jarir's own total and the brand / product type / price facets of the result set.","required_params":[],"optional_params":["query","brand","product_type","min_price","max_price","sort","page","page_size","country","lang"],"params":[{"name":"query","type":"string","required":false,"description":"Search words as typed into Jarir's search box (English or Arabic). Optional when `product_type` or `brand` is given — then the whole product type / brand is listed. One of query, product_type or brand is required.","on_invalid":"reject","example":"iphone 17","aliases":["q","keyword","keywords","text","search"]},{"name":"brand","type":"string","required":false,"description":"Brand exactly as Jarir names it (e.g. Apple, Samsung, Lenovo, HP). Several brands: comma-separated (\"Lenovo,HP\"). The result's `facets.brands` lists the names. An unknown brand returns 0 rows.","on_invalid":"reject","example":"Apple","aliases":["brands","manufacturer"]},{"name":"product_type","type":"string","required":false,"description":"Jarir's product type, e.g. Smartphones, Laptops, Tablets, Books, Smartwatches (see `facets.product_types` of any search). Several: comma-separated.","on_invalid":"reject","example":"Smartphones","aliases":["category","type","productcode_description"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in the storefront's currency (SAR for sa).","on_invalid":"reject","example":1000,"minimum":0,"maximum":10000000,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price, in the storefront's currency.","on_invalid":"reject","example":5000,"minimum":0,"maximum":10000000,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Jarir's own orderings: relevance (default), price low→high, price high→low.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"}],"default":"relevance","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Result page, from 1.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-48 (default 24).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48,"aliases":["limit","per_page"]},{"name":"country","type":"enum","required":false,"description":"Which Jarir storefront: Saudi Arabia (sa, default, prices in SAR), Kuwait (kw, KWD), Qatar (qa, QAR), UAE (ae, AED) or Bahrain (bh, BHD). Each is its own catalogue with its own prices and stock.","on_invalid":"reject","allowed_values":[{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"bh","label":"Bahrain (BHD)"}],"default":"sa","example":"sa","aliases":["store","market"]},{"name":"lang","type":"enum","required":false,"description":"Language of names, specs and showroom names: English (en, default) or Arabic (ar). Jarir runs a separate catalogue per language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"results[]{sku, name, url, brand, model, mpn, barcode, item_number, product_type, price, regular_price, discount_amount, discount_pct, source_discount_pct, special_price_from, special_price_to, price_ex_vat, currency, in_stock, sold_by (jarir|marketplace), seller_name, seller_id, installments{tabby,tamara}, promo_tagline, image, matched_by (keyword|semantic), catalogue_read} + total, page, pages, has_more, match_counts{keyword, semantic}, facets{brands[], product_types[], price_range}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 17","country":"sa"}},{"name":"product","description":"Full Jarir product by SKU: price the shopper pays, regular price, discount and its dates, price ex-VAT, currency, online stock quantity and status, showroom pickup, home delivery, cash on delivery, order cut-off, Tabby/Tamara eligibility, payment methods, seller (Jarir or the named marketplace seller), brand, model, MPN, barcode, the spec table with Jarir's labels, every variant (colour/capacity) with its own price and stock, categories, description, images, star rating and distribution.","required_params":["sku"],"optional_params":["country","lang"],"params":[{"name":"sku","type":"string","required":true,"description":"Jarir SKU exactly as a search row returns it: digits for Jarir's own items (666789), JPP-<digits> for marketplace offers, JPM<digits> for a product family. A jarir.com product URL is accepted too.","on_invalid":"reject","example":"666789","aliases":["id","product_id","url","item_id"]},{"name":"country","type":"enum","required":false,"description":"Which Jarir storefront: Saudi Arabia (sa, default, prices in SAR), Kuwait (kw, KWD), Qatar (qa, QAR), UAE (ae, AED) or Bahrain (bh, BHD). Each is its own catalogue with its own prices and stock.","on_invalid":"reject","allowed_values":[{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"bh","label":"Bahrain (BHD)"}],"default":"sa","example":"sa","aliases":["store","market"]},{"name":"lang","type":"enum","required":false,"description":"Language of names, specs and showroom names: English (en, default) or Arabic (ar). Jarir runs a separate catalogue per language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"sku, type, parent_sku, name, url, brand, model, series, mpn, barcode, item_number, product_type, price, regular_price, discount_amount, discount_pct, source_discount_pct, special_price_from/to, price_ex_vat, currency, in_stock, stock{status, in_stock, available_qty, stock_qty_is_capped, preorder_qty, backorder_qty, showroom_pickup, ships_from}, max_order_qty, sold_by, seller_name, seller_id, home_delivery, showroom_pickup, cash_on_delivery, order_cut_off, returnable, installments, payment_methods[], promo_tagline, warranty_code, rating{average, count, distribution}, specs[]{code,label,value}, variants[]{sku,name,options,price,regular_price,in_stock,url}, categories[], short_description, description, weight, box_cm, origin_country, images[], video_url, updated_at","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"sku":"666789","country":"sa"}},{"name":"reviews","description":"Customer reviews Jarir publishes for a SKU (rating, title, text, reviewer's display name, date) plus the star distribution. Reviews are per SKU: each colour/capacity variant has its own.","required_params":["sku"],"optional_params":["rating","country","lang"],"params":[{"name":"sku","type":"string","required":true,"description":"Jarir SKU exactly as a search row returns it: digits for Jarir's own items (666789), JPP-<digits> for marketplace offers, JPM<digits> for a product family. A jarir.com product URL is accepted too.","on_invalid":"reject","example":"666789","aliases":["id","product_id","url","item_id"]},{"name":"rating","type":"integer","required":false,"description":"Only reviews with this many stars (1-5).","on_invalid":"reject","example":5,"minimum":1,"maximum":5,"aliases":["stars"]},{"name":"country","type":"enum","required":false,"description":"Which Jarir storefront: Saudi Arabia (sa, default, prices in SAR), Kuwait (kw, KWD), Qatar (qa, QAR), UAE (ae, AED) or Bahrain (bh, BHD). Each is its own catalogue with its own prices and stock.","on_invalid":"reject","allowed_values":[{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"bh","label":"Bahrain (BHD)"}],"default":"sa","example":"sa","aliases":["store","market"]},{"name":"lang","type":"enum","required":false,"description":"Language of names, specs and showroom names: English (en, default) or Arabic (ar). Jarir runs a separate catalogue per language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"results[]{review_id, rating, title, text, author, created_at, review_type, sku} + rating{average, count, distribution}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"666789","country":"sa"}},{"name":"store_stock","description":"Showroom-by-showroom availability of a SKU in one country: every Jarir showroom with its availability (AVAILABLE / LIMITED / OUTOFSTOCK), city, address, opening hours, phone and coordinates.","required_params":["sku"],"optional_params":["availability","country","lang"],"params":[{"name":"sku","type":"string","required":true,"description":"Jarir SKU exactly as a search row returns it: digits for Jarir's own items (666789), JPP-<digits> for marketplace offers, JPM<digits> for a product family. A jarir.com product URL is accepted too.","on_invalid":"reject","example":"666789","aliases":["id","product_id","url","item_id"]},{"name":"availability","type":"enum","required":false,"description":"Only showrooms in this state.","on_invalid":"reject","allowed_values":[{"value":"available","label":"Available"},{"value":"limited","label":"Limited stock"},{"value":"outofstock","label":"Out of stock"}],"aliases":["status"]},{"name":"country","type":"enum","required":false,"description":"Which Jarir storefront: Saudi Arabia (sa, default, prices in SAR), Kuwait (kw, KWD), Qatar (qa, QAR), UAE (ae, AED) or Bahrain (bh, BHD). Each is its own catalogue with its own prices and stock.","on_invalid":"reject","allowed_values":[{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"bh","label":"Bahrain (BHD)"}],"default":"sa","example":"sa","aliases":["store","market"]},{"name":"lang","type":"enum","required":false,"description":"Language of names, specs and showroom names: English (en, default) or Arabic (ar). Jarir runs a separate catalogue per language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"results[]{showroom_code, name, availability, city_code, address, opening_hours, phone, latitude, longitude} + counts{AVAILABLE, LIMITED, OUTOFSTOCK}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"666789","country":"sa"}}]},{"name":"jiji","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Jiji API — Africa's largest classifieds network (Nigeria, Ghana, Kenya, Tanzania, Uganda) and Bangladesh's bikroy.com, which runs on the same platform. Search every vertical with the site's own filters, read an ad in full with the seller's published contact, follow a seller's whole stock and their buyer feedback, and get the category, region and filter lists free.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/jiji/v1","spec_available":true,"actions":[{"name":"search","description":"Search a Jiji storefront across every vertical — vehicles, property, electronics, phones, jobs, services, fashion, home and garden, babies, agriculture, animals — by keyword and/or category, with the filters that category actually publishes. Each row carries the ad id and URL, title, price in local currency, the category's own attributes (a car's condition and transmission, a flat's bedrooms, a phone's storage), the state and town, the cover photo, the seller's account and rating, and Jiji's own trust labels. 🔴 Jiji ACCEPTS a filter name it does not know and returns the unfiltered list — `make=Toyota` and `region=137` both did — so every filter you send is checked against Jiji's published schema first and a wrong one comes back as an error naming the ones that exist. Jiji's paid TOP ads come back in a separate `promoted` list, never mixed into `results` or `count`: they sit in a fixed slot on every page and would repeat from page to page.","required_params":[],"optional_params":["country","query","category","region","price_min","price_max","filters","sort","posted_within","page","limit"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]},{"name":"query","type":"string","required":false,"description":"Free-text search, e.g. 'toyota camry', 'iphone 15', '3 bedroom flat'. Combine with `category` to search inside one vertical.","on_invalid":"reject","example":"toyota camry","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"A category by slug, numeric id or name — `cars`, `mobile-phones`, `houses-apartments-for-rent`, `jobs`, 29, 'Cars'. Validated against Jiji's own tree (the free `categories` action), because Jiji answers an unknown category slug with the WHOLE site instead of an error.","on_invalid":"reject","example":"cars","aliases":["slug","category_slug"]},{"name":"region","type":"string","required":false,"description":"A state / city / district by slug, id or name — `lagos`, `nairobi`, `greater-accra`, `dhaka`, 119. The free `regions` action lists every one.","on_invalid":"reject","example":"lagos","aliases":["region_slug","location"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's own currency.","on_invalid":"reject","example":1000000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's own currency.","on_invalid":"reject","example":5000000,"minimum":0},{"name":"filters","type":"string","required":false,"description":"Category filters, as `name=value` pairs separated by ';' (or a JSON object). Names and values are the ones Jiji itself publishes for that category — ask the free `filters` action. Ranges take `from-to`, `from-` or `-to`. Several values for one filter are comma-separated. Examples: `make=Toyota;model=Camry`, `condition=Foreign Used;year_of_manufacture=2018-2021`, `colour=Black,Blue;mileage=-80000`. A name Jiji does not publish is REJECTED rather than silently ignored — see the action description.","on_invalid":"reject","example":"make=Toyota;condition=Foreign Used"},{"name":"sort","type":"enum","required":false,"description":"Result order. `relevance` is Jiji's own Recommended order, which the site re-ranks on every request (paid ranking), so paging through it can return a few adverts twice and skip others. To walk every page of a search, use `newest`: its order is stable from page to page.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Recommended (Jiji's default)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance","example":"newest"},{"name":"posted_within","type":"enum","required":false,"description":"Only ads posted in the last hour or the last day.","on_invalid":"reject","allowed_values":[{"value":"hour","label":"Last hour"},{"value":"day","label":"Last 24 hours"}],"example":"day","aliases":["period"]},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-based). Jiji's own window ends at `total_pages`; asking past it is an error, never an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"How many ads to return in `results`, 1-96. Jiji's page is fixed at 24 slots and cannot be widened, so anything above 24 is fetched as consecutive pages. Jiji's paid TOP ads take 1-5 of those slots and are returned in `promoted` instead, so one page usually yields 19-23 results.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":96}],"returns":"results[]{listing_id (the guid every other action takes), advert_id (the numeric id `similar` and `price_history` take), title, url, price, price_label, price_not_published, currency, condition (null where the category publishes none), description, category{id, name, slug}, location{region_id, region, area, slug, label}, attributes[]{name, value, unit}, labels[]{type, value}, image, image_count, is_promoted (always false in results), boost_package (the seller's paid Jiji package — enterprise, diamond, premium, vip_gold, vip, basic — or null), paid_placement ('cpc' when Jiji ranked the row through its pay-per-click auction, else null), is_inspected, is_job, status, seller{user_id, name, rating, avatar_url}, can_view_contacts}, promoted[] (Jiji's paid TOP placements, same row shape with is_promoted true; kept OUT of results and of count because Jiji puts them in a fixed slot on every page, so they repeat from page to page), count (rows in results only), total_results, page, pages_fetched, total_pages, page_size, has_more, next_page, country, currency, category, region, filters_applied[], posted_in_last_day, posted_in_last_hour, empty_confirmed (only on an empty answer: true = Jiji answered empty twice from two different exits, so it is a real no-match rather than a throttle)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"ng","category":"cars","limit":24}},{"name":"listing","description":"One ad in full: title, the complete description, price with Jiji's own market-price band, every photo at full resolution, every attribute the category defines, when it was posted, how many people have viewed and saved it, the trust labels, the breadcrumb path, and the seller — account id, display name, rating, how long they have been on Jiji, when they were last seen, their shop pages, and the phone number(s) the ad publishes.","required_params":["listing_id"],"optional_params":["country","include_phone"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The ad's id — the `listing_id` a search row returns, or a full jiji ad URL, or the ...-<id>.html tail of one.","on_invalid":"reject","example":"kH57fgr3nm0bJReMrNO3Nu7x","aliases":["guid","id","url"]},{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]},{"name":"include_phone","type":"boolean","required":false,"description":"Fetch the seller's published phone number(s) as well (one extra upstream call). On by default.","on_invalid":"reject","default":true,"example":true}],"returns":"listing{listing_id, advert_id, title, url, price, price_label, price_not_published, currency, condition, market_price, has_price_history, description, category{}, location{}, attributes[]{name, value, unit}, highlights[], labels[], images[]{url, width, height, is_main}, image_count, posted_at, posted_at_label, view_count, favourite_count, status, is_active, is_closed, is_job, is_cv, breadcrumbs[], similar_slug, seller{user_id, seller_id, name, phone, phones[], profile_url, avatar_url, adverts_count, feedback_count, member_since_label, last_seen_label, response_time, is_premium, chat_enabled, labels[], is_shop, shop_slug, business_evidence[], stores[]}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"ng","listing_id":"cZb9ZNOeiNZvGeLI8WxYwNQE"}},{"name":"seller_listings","description":"Every live ad of one seller — a dealer, an agency, a shop or a private account — in the same row shape as `search`, so a whole inventory comes back page by page. The seller's own paid TOP ads come back in a separate `promoted` list, not in `results`.","required_params":["user_id"],"optional_params":["country","query","category","region","sort","page","limit"],"params":[{"name":"user_id","type":"integer","required":true,"description":"The seller's numeric account id — `seller.user_id` on any of their ads.","on_invalid":"reject","example":13890626,"aliases":["seller_user_id"]},{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]},{"name":"query","type":"string","required":false,"description":"Free-text search, e.g. 'toyota camry', 'iphone 15', '3 bedroom flat'. Combine with `category` to search inside one vertical.","on_invalid":"reject","example":"toyota camry","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"A category by slug, numeric id or name — `cars`, `mobile-phones`, `houses-apartments-for-rent`, `jobs`, 29, 'Cars'. Validated against Jiji's own tree (the free `categories` action), because Jiji answers an unknown category slug with the WHOLE site instead of an error.","on_invalid":"reject","example":"cars","aliases":["slug","category_slug"]},{"name":"region","type":"string","required":false,"description":"A state / city / district by slug, id or name — `lagos`, `nairobi`, `greater-accra`, `dhaka`, 119. The free `regions` action lists every one.","on_invalid":"reject","example":"lagos","aliases":["region_slug","location"]},{"name":"sort","type":"enum","required":false,"description":"Result order. `relevance` is Jiji's own Recommended order, which the site re-ranks on every request (paid ranking), so paging through it can return a few adverts twice and skip others. To walk every page of a search, use `newest`: its order is stable from page to page.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Recommended (Jiji's default)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-based). Jiji's own window ends at `total_pages`; asking past it is an error, never an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"How many ads to return in `results`, 1-96. Jiji's page is fixed at 24 slots and cannot be widened, so anything above 24 is fetched as consecutive pages. Jiji's paid TOP ads take 1-5 of those slots and are returned in `promoted` instead, so one page usually yields 19-23 results.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":96}],"returns":"results[]{listing_id (the guid every other action takes), advert_id (the numeric id `similar` and `price_history` take), title, url, price, price_label, price_not_published, currency, condition (null where the category publishes none), description, category{id, name, slug}, location{region_id, region, area, slug, label}, attributes[]{name, value, unit}, labels[]{type, value}, image, image_count, is_promoted (always false in results), boost_package (the seller's paid Jiji package — enterprise, diamond, premium, vip_gold, vip, basic — or null), paid_placement ('cpc' when Jiji ranked the row through its pay-per-click auction, else null), is_inspected, is_job, status, seller{user_id, name, rating, avatar_url}, can_view_contacts}, promoted[] (Jiji's paid TOP placements, same row shape with is_promoted true; kept OUT of results and of count because Jiji puts them in a fixed slot on every page, so they repeat from page to page), count (rows in results only), total_results, page, pages_fetched, total_pages, page_size, has_more, next_page, country, currency, category, region, filters_applied[], posted_in_last_day, posted_in_last_hour, empty_confirmed (only on an empty answer: true = Jiji answered empty twice from two different exits, so it is a real no-match rather than a throttle), user_id","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"ng","user_id":11803654,"limit":24}},{"name":"seller_reviews","description":"What buyers wrote about a seller: the good / neutral / bad counts, and each review with its rating, text, date, the reviewer, the ad it was left on and the seller's reply.","required_params":["seller_id"],"optional_params":["country","page","rating"],"params":[{"name":"seller_id","type":"string","required":true,"description":"The seller's id string — `seller.seller_id` from a `listing` answer.","on_invalid":"reject","example":"fS7mceBmjlrFSZkrK6fS3TuR","aliases":["guid","user_guid"]},{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-based). Jiji's own window ends at `total_pages`; asking past it is an error, never an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"rating","type":"enum","required":false,"description":"Only reviews of one kind.","on_invalid":"reject","allowed_values":[{"value":"good","label":"Positive"},{"value":"neutral","label":"Neutral"},{"value":"bad","label":"Negative"}],"example":"good"}],"returns":"seller{user_id, seller_id, name, avatar_url, is_premium}, stats{good, neutral, bad}, reviews[]{id, rating (good|neutral|bad), stars (1-5), text, created_at, created_at_unix, likes, edited, author{user_id, seller_id, name, avatar_url}, advert{advert_id, title, url}, reply_count, replies[]{text, created_at, author, likes}}, count, page, has_more","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ng","seller_id":"wdnFCNPH7TUWayfgjcuvuaR7"}},{"name":"similar","description":"Jiji's own comparable live ads for one listing — what the same market is asking right now, in the search row shape. Any paid TOP ad comes back in a separate `promoted` list, not in `results`.","required_params":["advert_id"],"optional_params":["country","page"],"params":[{"name":"advert_id","type":"string","required":true,"description":"The ad's NUMERIC id (`advert_id` in a search row). A `listing_id` guid is also accepted and costs one extra lookup.","on_invalid":"reject","example":"54342973","aliases":["listing_id","id"]},{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-based). Jiji's own window ends at `total_pages`; asking past it is an error, never an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1}],"returns":"results[]{listing_id (the guid every other action takes), advert_id (the numeric id `similar` and `price_history` take), title, url, price, price_label, price_not_published, currency, condition (null where the category publishes none), description, category{id, name, slug}, location{region_id, region, area, slug, label}, attributes[]{name, value, unit}, labels[]{type, value}, image, image_count, is_promoted (always false in results), boost_package (the seller's paid Jiji package — enterprise, diamond, premium, vip_gold, vip, basic — or null), paid_placement ('cpc' when Jiji ranked the row through its pay-per-click auction, else null), is_inspected, is_job, status, seller{user_id, name, rating, avatar_url}, can_view_contacts}, promoted[] (Jiji's paid TOP placements, same row shape with is_promoted true; kept OUT of results and of count because Jiji puts them in a fixed slot on every page, so they repeat from page to page), count (rows in results only), total_results, page, pages_fetched, total_pages, page_size, has_more, next_page, country, currency, category, region, filters_applied[], posted_in_last_day, posted_in_last_hour, empty_confirmed (only on an empty answer: true = Jiji answered empty twice from two different exits, so it is a real no-match rather than a throttle), advert_id","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"ng","advert_id":"8167428"}},{"name":"price_history","description":"Every price the seller has asked for this ad since it was posted, with the date of each change — Jiji's own record, not a reconstruction.","required_params":["advert_id"],"optional_params":["country"],"params":[{"name":"advert_id","type":"string","required":true,"description":"The ad's NUMERIC id (`advert_id` in a search row). A `listing_id` guid is also accepted and costs one extra lookup.","on_invalid":"reject","example":"54342973","aliases":["listing_id","id"]},{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]}],"returns":"history[]{date, price, label}, count, advert_id, currency, first_price, latest_price, change, change_pct","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ng","advert_id":"48153873"}},{"name":"suggest","description":"Jiji's keyword autocomplete — what real buyers type, each suggestion carrying the category it belongs to and a ready-made search URL, so a half-typed word becomes a valid query without guessing a category.","required_params":["query"],"optional_params":["country","category"],"params":[{"name":"query","type":"string","required":true,"description":"The partial phrase to complete.","on_invalid":"reject","example":"toyota","aliases":["term","q"]},{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]},{"name":"category","type":"string","required":false,"description":"A category by slug, numeric id or name — `cars`, `mobile-phones`, `houses-apartments-for-rent`, `jobs`, 29, 'Cars'. Validated against Jiji's own tree (the free `categories` action), because Jiji answers an unknown category slug with the WHOLE site instead of an error.","on_invalid":"reject","example":"cars","aliases":["slug","category_slug"]}],"returns":"suggestions[]{query, category, category_slug, url}, count, term","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ng","query":"toyota"}},{"name":"categories","description":"Jiji's whole category tree for a country — every group and sub-category with its id, slug, name and live advert count. Free: these are the values `search` and `filters` take, so nobody has to guess one.","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]}],"returns":"categories[]{id, name, slug, advert_count, image_url, children[]}, count, flat[]{id, name, slug, parent_id, parent_name}, country","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ng"}},{"name":"regions","description":"Every state, city and district Jiji lists for a country, with ids and slugs and which ones it treats as popular. Free: these are the values `region` takes.","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]}],"returns":"regions[]{id, name, slug, is_popular, areas[]{id, name, slug, is_popular}}, count, area_count, country","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ng"}},{"name":"filters","description":"Every filter one category publishes, with the allowed values, the range bounds and the unit — car makes and their models, property types and bedroom counts, phone brands and storage sizes, job types, conditions, colours. Free, and the authoritative input for `search`'s `filters` parameter. Pass `filters` here too to see the child filters a choice unlocks (choose a make, get its models).","required_params":[],"optional_params":["country","category","region","filters"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. `bd` reads bikroy.com, Bangladesh's Jiji storefront; its site prints prices in lakh grouping (`BDT 17,00,000`), and `price` is the plain number (1700000).","on_invalid":"reject","allowed_values":[{"value":"ng","label":"Nigeria (jiji.ng, ₦ NGN)"},{"value":"gh","label":"Ghana (jiji.com.gh, GH₵ GHS)"},{"value":"ke","label":"Kenya (jiji.co.ke, KSh KES)"},{"value":"tz","label":"Tanzania (jiji.co.tz, TSh TZS)"},{"value":"ug","label":"Uganda (jiji.ug, USh UGX)"},{"value":"bd","label":"Bangladesh (bikroy.com, BDT)"}],"default":"ng","example":"ng","aliases":["cc","market"]},{"name":"category","type":"string","required":false,"description":"A category by slug, numeric id or name — `cars`, `mobile-phones`, `houses-apartments-for-rent`, `jobs`, 29, 'Cars'. Validated against Jiji's own tree (the free `categories` action), because Jiji answers an unknown category slug with the WHOLE site instead of an error.","on_invalid":"reject","example":"cars","aliases":["slug","category_slug"]},{"name":"region","type":"string","required":false,"description":"A state / city / district by slug, id or name — `lagos`, `nairobi`, `greater-accra`, `dhaka`, 119. The free `regions` action lists every one.","on_invalid":"reject","example":"lagos","aliases":["region_slug","location"]},{"name":"filters","type":"string","required":false,"description":"Category filters, as `name=value` pairs separated by ';' (or a JSON object). Names and values are the ones Jiji itself publishes for that category — ask the free `filters` action. Ranges take `from-to`, `from-` or `-to`. Several values for one filter are comma-separated. Examples: `make=Toyota;model=Camry`, `condition=Foreign Used;year_of_manufacture=2018-2021`, `colour=Black,Blue;mileage=-80000`. A name Jiji does not publish is REJECTED rather than silently ignored — see the action description.","on_invalid":"reject","example":"make=Toyota;condition=Foreign Used"}],"returns":"category{id, name, slug}, filters[]{name, key, label, kind (single|multi|range), unit, parent, values[], value_count, min, max}, count, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ng","category":"cars"}}]},{"name":"jiomart","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"JioMart API — India's Reliance grocery + marketplace: prices (MRP, selling price, discount, unit price), stock and seller per PIN code, product data, delivery stores","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/jiomart/v1","spec_available":true,"actions":[{"name":"search","description":"Search JioMart's catalogue AS SEEN FROM ONE PIN CODE: 12 products per page with selling price, MRP, discount %, unit price (per ml / g / L / kg), pack size, brand, category path (department > L1 > L2 > L3), seller type (Reliance = 1p or marketplace = 3p), the serving store ids, in-stock flag and pack-size variants. Filters: brand, category, department (with a query), seller type, price range, discount range; six sort orders; delivery=quick limits to what the pin's local stores deliver in minutes. `pincode` and at least one of `query` / `category` / `brand` are required.","required_params":["pincode"],"optional_params":["query","category","brand","department","seller_type","min_price","max_price","min_discount","max_discount","sort","page","delivery"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: JioMart's catalogue, prices, stock and delivery all depend on it (Mumbai 400020, Bengaluru 560001, Delhi 110001 ... give different totals and prices). Echoed in every answer.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"query","type":"string","required":false,"description":"What to search for, as typed in the JioMart search box (atta, amul milk, iphone 15, saree ...).","on_invalid":"reject","example":"atta","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"A category slug at any level, as rows return it in category_l1/l2/l3.slug or `facets` lists it (milk, milk-milk-products, fresh-l1, atta-flours-sooji ...).","on_invalid":"reject","example":"milk","aliases":["category_slug"]},{"name":"brand","type":"string","required":false,"description":"Brand exactly as a row's `brand` spells it — CASE-SENSITIVE at the source ('amul' matches 57 milk products, 'Amul' none). Several brands: comma-separated (amul,Nestle).","on_invalid":"reject","example":"aashirvaad","aliases":["brand_name"]},{"name":"department","type":"enum","required":false,"description":"Only this top-level department. Needs `query`: the source ignores a department filter on its own.","on_invalid":"reject","allowed_values":[{"value":"groceries","label":"Groceries"},{"value":"fashion","label":"Fashion"},{"value":"electronics","label":"Electronics"},{"value":"home-lifestyle","label":"Home & Lifestyle"},{"value":"industrial-professional-supplies","label":"Industrial & Professional Supplies"},{"value":"furniture","label":"Furniture"},{"value":"wellness","label":"Wellness"},{"value":"jewellery","label":"Jewellery"},{"value":"sports-toys-luggage","label":"Sports, Toys & Luggage"},{"value":"crafts-of-india","label":"Crafts of India"},{"value":"local-shops","label":"Local Shops"},{"value":"books-music-stationery","label":"Books, Music & Stationery"}]},{"name":"seller_type","type":"enum","required":false,"description":"Only products sold by Reliance Retail (1p) or by marketplace sellers (3p).","on_invalid":"reject","allowed_values":[{"value":"1p","label":"Sold by Reliance Retail (first party)"},{"value":"3p","label":"Sold by a marketplace seller (third party)"}],"aliases":["seller"]},{"name":"min_price","type":"number","required":false,"description":"Lowest selling price in rupees. The source's price filter can let a few marketplace rows through; they are counted in rows_outside_price_filter.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest selling price in rupees.","on_invalid":"reject","example":500,"minimum":0},{"name":"min_discount","type":"integer","required":false,"description":"Lowest discount off MRP, in percent.","on_invalid":"reject","minimum":0,"maximum":100},{"name":"max_discount","type":"integer","required":false,"description":"Highest discount off MRP, in percent.","on_invalid":"reject","minimum":0,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order, as JioMart sorts (not strictly monotonic: price_asc showed one small inversion per 12 rows; discount_desc follows the source's own discount figure).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (default)"},{"value":"popular","label":"Popularity"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"discount_desc","label":"Biggest discount first"},{"value":"latest","label":"Newest first"}],"default":"relevance","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Page number; 12 products per page. Pages past last_page return no rows.","on_invalid":"reject","default":1,"minimum":1},{"name":"delivery","type":"enum","required":false,"description":"standard = the pin's normal catalogue; quick = only what the pin's local JioMart stores deliver in minutes (their store ids are returned).","on_invalid":"reject","allowed_values":[{"value":"standard","label":"Standard delivery catalogue for the pin code (default)"},{"value":"quick","label":"Quick-commerce only: what the pin's local JioMart stores deliver in minutes"}],"default":"standard","aliases":["journey"]}],"returns":"pincode, delivery, quick_store_ids (delivery=quick), total (the source's own count), page, page_size (12, fixed by the source), last_page, has_next, returned, rows_outside_price_filter (with a price filter), results[]{product_id, slug (-> product.slug), item_code, name, brand, url, image, image_count, price, mrp, discount_percent, currency, unit_price{amount, per}, unit_price_text, net_quantity, net_quantity_unit, pack_size, sizes[], seller_type, seller_id, store_ids[], sellable, variants[]{product_id, slug, value, is_available}, department{name, slug}, category_l1, category_l2, category_l3, vertical, country_of_origin, food_type, is_vegetarian, max_qty_per_order, tags[], journey, rank}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"aashirvaad atta","pincode":"400020"}},{"name":"product","description":"One JioMart product at one PIN code, by the `slug` a search row returns (or its jiomart.com/product/ URL): full record (EAN, brand, description, key features, images, category path, pack size, net quantity, dimensions, veg/non-veg mark, max quantity per order, rating count, every catalogue attribute) + pack-size variants + for EACH size the offer the site would fill at that pin: selling price, MRP, discount, price per unit, quantity available, seller (Reliance Retail or the marketplace seller's name), serving store, ship-from pin and distance, return policy, manufacturer / importer / marketer — or the source's own reason when the size cannot be delivered there (e.g. Out of Stock).","required_params":["pincode"],"optional_params":["slug","size"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: JioMart's catalogue, prices, stock and delivery all depend on it (Mumbai 400020, Bengaluru 560001, Delhi 110001 ... give different totals and prices). Echoed in every answer.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"slug","type":"string","required":false,"description":"The product's `slug` exactly as a search row returns it, or its https://www.jiomart.com/product/<slug> URL. Required.","on_invalid":"reject","example":"aashirvaad-superior-whole-wheat-mp-atta-5-kg-mr0mye-132487553","aliases":["product_slug","url","product_url","id"]},{"name":"size","type":"string","required":false,"description":"Only this size (as in the row's `sizes`, e.g. OS, 500 ML, FREE SIZE, M). Default: every size.","on_invalid":"reject","example":"OS","aliases":["variant_size"]}],"returns":"pincode, product{product_id, slug, item_code, ean, name, brand, brand_id, url, description, short_description, key_features[], highlights[], images[], department, category_path[], categories[], country_of_origin, pack_size, size_label, net_quantity, net_quantity_unit, dimensions{}, seller_type, food_type, is_vegetarian, max_qty_per_order, rating_count, has_variants, tags[], attributes{}}, availability{sellable, store_count, discount_text, price_range{}, sizes[]{size, display, is_available, quantity_all_stores, seller_identifiers[], shipping_weight_g, price_type}}, offers[]{size, available, unavailable_reason, price, mrp, selling_price, discount_percent, discount_text, currency, price_per_unit{price, unit}, mrp_text, mrp_text_matches, quantity_available, seller{id, name, is_reliance_retail}, store{id, name}, article_id, ships_from_pincode, distance_m, handover_time_s, returnable, return_window, trader{}}, variants[]{product_id, slug, value, is_available}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"aashirvaad-superior-whole-wheat-mp-atta-5-kg-mr0mye-132487553","pincode":"400020"}},{"name":"sellers","description":"Every seller offering one size of a product at one PIN code: seller name and whether it is Reliance Retail, serving store, price, MRP, discount, quantity, cash on delivery, the delivery window promised to that pin, ship-from pin.","required_params":["pincode","size"],"optional_params":["slug","page"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: JioMart's catalogue, prices, stock and delivery all depend on it (Mumbai 400020, Bengaluru 560001, Delhi 110001 ... give different totals and prices). Echoed in every answer.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"slug","type":"string","required":false,"description":"The product's `slug` from a search row (or its URL). Required.","on_invalid":"reject","example":"aashirvaad-superior-whole-wheat-mp-atta-5-kg-mr0mye-132487553","aliases":["product_slug","url","product_url","id"]},{"name":"size","type":"string","required":true,"description":"The size, as in the row's `sizes` (OS, 500 ML, FREE SIZE, M ...).","on_invalid":"reject","example":"OS","aliases":["variant_size"]},{"name":"page","type":"integer","required":false,"description":"Page of sellers (10 per page).","on_invalid":"reject","default":1,"minimum":1}],"returns":"pincode, slug, size, total, page, has_next, sellers[]{seller{id, name, is_reliance_retail}, store{id, name}, price, mrp, discount_percent, discount_text, quantity_available, cash_on_delivery, is_gift, delivery_from, delivery_by, ships_from_pincode, seller_tags[], mrp_text, article_id}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"aashirvaad-superior-whole-wheat-mp-atta-5-kg-mr0mye-132487553","size":"OS","pincode":"400020"}},{"name":"pincode","description":"Which JioMart stores deliver to a PIN code and how fast: per store and department (Groceries, Electronics ...) the delivery journey (quick commerce / standard), the promised window and message ('Delivery in 31 mins'), ETA minutes, distance, store pin/city/coordinates, opening hours, whether it is accepting orders, minimum basket value. An empty list = no store serves the pin.","required_params":["pincode"],"optional_params":[],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: JioMart's catalogue, prices, stock and delivery all depend on it (Mumbai 400020, Bengaluru 560001, Delhi 110001 ... give different totals and prices). Echoed in every answer.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]}],"returns":"pincode, serviceable, quick_commerce, store_count, stores[]{store_id, store_code, name, department, journey, delivery_message, eta_minutes, delivery_from, delivery_by, distance_m, pincode, city, state, lat, lng, is_open, opens, closes, accepting_orders, min_basket_value, zone}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"pincode":"560001"}},{"name":"facets","description":"The category tree and brand list WITH PRODUCT COUNTS at a PIN code, for a query or a category (or the whole catalogue): departments, L1/L2/L3 categories (slugs for search.category), up to 500 brands, discount bands, price bands, the price span, country of origin, and category-specific facets (capacity, colour ...).","required_params":["pincode"],"optional_params":["query","category","delivery"],"params":[{"name":"pincode","type":"string","required":true,"description":"6-digit Indian PIN code to shop from. REQUIRED: JioMart's catalogue, prices, stock and delivery all depend on it (Mumbai 400020, Bengaluru 560001, Delhi 110001 ... give different totals and prices). Echoed in every answer.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"query","type":"string","required":false,"description":"Facets of this search. Empty = the whole catalogue.","on_invalid":"reject","example":"milk","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"Facets inside this category slug.","on_invalid":"reject","example":"fresh-l1","aliases":["category_slug"]},{"name":"delivery","type":"enum","required":false,"description":"standard or quick (local stores only).","on_invalid":"reject","allowed_values":[{"value":"standard","label":"Standard delivery catalogue for the pin code (default)"},{"value":"quick","label":"Quick-commerce only: what the pin's local JioMart stores deliver in minutes"}],"default":"standard","aliases":["journey"]}],"returns":"pincode, total, facets{department[]{value, label, count}, l1_category[], l2_category[], l3_category[], brand[], discount_range[], price_range[], min_price_effective[]{label, min, max, count}, discount[], country_of_origin[], ...}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","pincode":"400020"}}]},{"name":"jmty","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Jmty (ジモティー) API scraper — search Japan's largest general classifieds board across all eleven of its ad spaces: second-hand goods for sale AND for free, used cars, rental and for-sale property, full-time and part-time jobs, classes, pet rehoming, local services, community help, events and member recruitment. Filter by keyword, the three-level category tree, the three-level location tree (prefecture → city/ward → train station), a yen price band, giveaway-only and online-payment-only. Full ad detail returns the whole description, every photo, the per-category attribute block the source publishes for that kind of ad, coordinates, and the poster's public profile with their good/normal/bad review counts, verification badges and other live ads. A price of 0 yen is a real giveaway, not a missing value, and the groups that print no money at all return null instead of a fake price. No account, logged-out public pages only.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/jmty/v1","spec_available":true,"actions":[{"name":"search","description":"Search one of jmty's eleven ad spaces. `group` is required — it picks the marketplace, and every other filter narrows inside it: keyword, prefecture, category slug, numeric genre id, city/ward id, train-station id, a yen price band, giveaways only, online-payment only. Returns the source's own total (`total_results`) and its own printed window, 50 ads per page, up to its own page-1000 ceiling. Promoted ads the source injects above the window come back in a separate `promoted[]` array, and the staffing-agency tiles it injects from a partner site every eighth row are dropped and counted in `dropped_partner_tiles` — they are not jmty ads and their 'price' is an hourly wage.","required_params":["group"],"optional_params":["keyword","prefecture","category","genre_id","city_id","city_slug","station_id","price_min","price_max","free_only","online_payment","page"],"params":[{"name":"group","type":"enum","required":true,"description":"Which of jmty's eleven ad spaces to search. They are separate marketplaces with their own categories and their own meaning for the headline line: `sale` prints an item price where 0 yen means the item is being given away, `est` prints MONTHLY RENT, `job`/`rec` print a salary or wage, and `eve`, `les`, `pet`, `ser`, `com` print no money at all.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Second-hand goods for sale or free (中古あげます・譲ります)"},{"value":"car","label":"Used cars (中古車)"},{"value":"est","label":"Real estate (rent and sale) (不動産売買・賃貸物件・住宅情報)"},{"value":"eve","label":"Events (イベント情報)"},{"value":"job","label":"Full-time jobs (正社員の求人情報)"},{"value":"les","label":"Classes and schools (教室・スクール情報)"},{"value":"pet","label":"Pet rehoming (里親募集)"},{"value":"rec","label":"Part-time jobs (アルバイト・バイト・パートの求人募集情報)"},{"value":"ser","label":"Local services and free ads (広告の無料掲載)"},{"value":"coop","label":"Community help and favours (助け合い)"},{"value":"com","label":"Member and community recruitment (メンバー募集)"}],"example":"sale","aliases":["category_group"]},{"name":"keyword","type":"string","required":false,"description":"Free-text keyword, matched against the ad title and body. Japanese or Latin script both work. Measured: /all/sale 32 059 946 → keyword=iPhone 156 223.","on_invalid":"reject","example":"iPhone","aliases":["query","q"]},{"name":"prefecture","type":"string","required":false,"description":"Romanised prefecture slug (`tokyo`, `osaka`, `hokkaido`, …) or `all` for the whole country. The 47 slugs are returned by the `locations` action. Measured: /all/sale 32 059 946 ads → /tokyo/sale 5 837 989.","on_invalid":"reject","default":"all","example":"tokyo","value_pattern":"all|hokkaido|aomori|iwate|miyagi|akita|yamagata|fukushima|ibaraki|tochigi|gunma|saitama|chiba|tokyo|kanagawa|niigata|toyama|ishikawa|fukui|yamanashi|nagano|gifu|shizuoka|aichi|mie|shiga|kyoto|osaka|hyogo|nara|wakayama|tottori|shimane|okayama|hiroshima|yamaguchi|tokushima|kagawa|ehime|kochi|fukuoka|saga|nagasaki|kumamoto|oita|miyazaki|kagoshima|okinawa"},{"name":"category","type":"string","required":false,"description":"Category slug inside the group, e.g. `fur` (furniture) or `mob` (phones) in `sale`. Slugs and their Japanese names come from the `categories` action. Required if you send `city_id` or `station_id` — the source answers 404 for a city filter on a bare group path.","on_invalid":"reject","example":"fur","value_pattern":"[a-z]{2,8}"},{"name":"genre_id","type":"integer","required":false,"description":"Numeric genre id — the third taxonomy level, from the `categories` action (e.g. 1245 = chairs inside `sale`/`fur`). Measured: sale/fur 1 702 508 ads → genre 1245 491 337.","on_invalid":"reject","example":1245,"minimum":1},{"name":"city_id","type":"integer","required":false,"description":"Numeric city/ward id from the `locations` action (e.g. 276 = Adachi-ku). Needs `category` too. Measured: /tokyo/sale-fur 1 702 508 → city 276 52 986. Cannot be combined with `station_id` — the source's URL carries only one.","on_invalid":"reject","example":276,"minimum":1,"aliases":["area_id"]},{"name":"city_slug","type":"string","required":false,"description":"Optional romanised city name that goes into the source's own URL next to `city_id`. The source ignores its content (a-276-adachi and a-276-zzz both return 52 986 rows) but the segment must exist, so the engine supplies a placeholder when you leave this out.","on_invalid":"reject","example":"adachi"},{"name":"station_id","type":"integer","required":false,"description":"Numeric train-station id, the finest location level. Needs `category` too and cannot be combined with `city_id`. Measured: /tokyo/sale-fur 1 702 508 → station 2200115 2 418.","on_invalid":"reject","example":2200115,"minimum":1},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in whole yen. Only the six groups that publish money react to it. Measured: /all/sale 32 059 946 → min=1000&max=2000 5 561 372; keyword=iPhone 156 223 → +min=50000 13 966.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["min"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in whole yen. Only the six groups that publish money react to it. Measured: /all/sale 32 059 946 → min=1000&max=2000 5 561 372; keyword=iPhone 156 223 → +min=50000 13 966.","on_invalid":"reject","example":20000,"minimum":0,"aliases":["max"]},{"name":"free_only","type":"boolean","required":false,"description":"`true` returns only giveaways — the source's own max=0 band, 6 909 490 of the 32 059 946 ads in `sale` as measured on 2026-10-02. `false` returns only priced ads (25 150 456). The two add up to the unfiltered total exactly, which is why a 0 price here is a real free ad and never a missing price.","on_invalid":"reject","example":true},{"name":"online_payment","type":"boolean","required":false,"description":"Restrict to ads that accept the site's online payment / shipping flow. Measured: /tokyo/sale 5 837 989 → true 386 312.","on_invalid":"reject","example":true,"aliases":["online_purchasable"]},{"name":"page","type":"integer","required":false,"description":"1-based page, 50 ads per page. The source's own last page is 1000 and page 1001 is a real 404, so at most 50,000 ads are reachable per filter set however large the total is — narrow with prefecture, category or keyword to reach the rest.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"total_results (the source's own figure), source_window (its printed '1-50 of N' line), page, page_size (50), page_count, page_ceiling (1000), reachable_rows (50 000), returned, promoted_count, dropped_partner_tiles, has_more, category_group(+_name), prefecture, category, genre_id, keyword, filters, source_url, and listings[] / promoted[] with listing_id, url, title, headline (the source's own printed line, whatever it means in that group), price_jpy, price_display, price_kind (free | fixed | not_priced), price_basis (item | monthly_rent | hourly_wage | daily_wage | monthly_wage | annual_wage | reward), prefecture(+_name), city_name, station_name, category, genre_id, genre_name, description_excerpt, created_label, updated_label, favorite_count, image_thumbnail, keyword_tags[], promoted and highlighted.","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":3},"example_params":{"group":"sale","max_results":20}},{"name":"listing","description":"Full detail of one ad. Send `url` (what `search` returns) or `listing_id` together with `group` and `category` — an ad key alone cannot be resolved because the source's ad path carries the group. Returns the complete description, every photo, the attribute block the source publishes for that kind of ad (mileage/model year/frame number for a car, rent/layout/floor/age for a flat, pay/company/working hours for a job, sex/age/vaccination for a pet), coordinates, view and inquiry counts, and the poster's public profile. An ad that has been closed or deleted is an ANSWER, not an error: it comes back with `status` set to closed or deleted. An unknown key returns NOT_FOUND.","required_params":[],"optional_params":["url","listing_id","group","category"],"params":[{"name":"url","type":"string","required":false,"description":"A full jmty ad address, exactly as `search` returns it in `url` (`https://jmty.jp/chiba/sale-toy/article-19xjcc`). The simplest way to reach one ad, and the one that always resolves.","on_invalid":"reject","example":"https://jmty.jp/chiba/sale-toy/article-19xjcc","aliases":["listing_url"]},{"name":"listing_id","type":"string","required":false,"description":"The ad key from a jmty URL (`19xjcc`, or `job_wg_9367564` for a partner-fed job ad). On its own it cannot be resolved: the source's ad path also needs the category group and a category, so send `group` + `category` with it, or send `url` instead.","on_invalid":"reject","example":"19xjcc","aliases":["id","key"]},{"name":"group","type":"enum","required":false,"description":"Which of jmty's eleven ad spaces to search. They are separate marketplaces with their own categories and their own meaning for the headline line: `sale` prints an item price where 0 yen means the item is being given away, `est` prints MONTHLY RENT, `job`/`rec` print a salary or wage, and `eve`, `les`, `pet`, `ser`, `com` print no money at all.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Second-hand goods for sale or free (中古あげます・譲ります)"},{"value":"car","label":"Used cars (中古車)"},{"value":"est","label":"Real estate (rent and sale) (不動産売買・賃貸物件・住宅情報)"},{"value":"eve","label":"Events (イベント情報)"},{"value":"job","label":"Full-time jobs (正社員の求人情報)"},{"value":"les","label":"Classes and schools (教室・スクール情報)"},{"value":"pet","label":"Pet rehoming (里親募集)"},{"value":"rec","label":"Part-time jobs (アルバイト・バイト・パートの求人募集情報)"},{"value":"ser","label":"Local services and free ads (広告の無料掲載)"},{"value":"coop","label":"Community help and favours (助け合い)"},{"value":"com","label":"Member and community recruitment (メンバー募集)"}],"example":"sale","aliases":["category_group"]},{"name":"category","type":"string","required":false,"description":"Category slug inside the group, e.g. `fur` (furniture) or `mob` (phones) in `sale`. Slugs and their Japanese names come from the `categories` action. Required if you send `city_id` or `station_id` — the source answers 404 for a city filter on a bare group path.","on_invalid":"reject","example":"fur","value_pattern":"[a-z]{2,8}"}],"returns":"listing_id, internal_id, url, title, description, category_group(+_name), category(+_name), genre_id, genre_name, genre_parent_name, prefecture(+_name), city_id, city_name, station_name, area_name, latitude, longitude, created_at, updated_at, favorite_count, inquiry_count, comment_count, phone (as the source publishes it, usually null), is_business_poster, promoted, highlighted, partner_listing, status (open | closed | deleted), status_message, headline, price_jpy, price_display, price_kind, price_basis, attributes[] (the source's own per-category fields), images[], image_thumbnails[], image_count, breadcrumbs[], source_surface, seller{} (seller_id, name, profile_url, sex, listings_count, profile_text, profile_image, reviews_good/normal/bad, rating, sms_verified, id_verified, documents_verified, is_business, antique_dealer_licensed, real_estate_licensed, recent_reviews[]) and seller_other_listings[] with its count.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://jmty.jp/chiba/sale-toy/article-19xjcc"}},{"name":"seller","description":"One poster's public profile page: nickname, which verification badges they hold, their good/normal/bad review counts, when they registered, the area they live in, their stated occupation, and the ads of theirs the page lists. Takes the `seller.seller_id` that `listing` returns. The site publishes no separate seller-listing feed, so `listings[]` here is what that one page shows, not the poster's whole history — `listings_sampled` says how many that was.","required_params":["seller_id"],"optional_params":[],"params":[{"name":"seller_id","type":"string","required":true,"description":"The poster's profile id, as `listing` returns it in `seller.seller_id` (a 24-character hex id).","on_invalid":"reject","example":"5d54cbe3cf263722da5706a9","aliases":["user_id","profile_id"]}],"returns":"seller_id, name, profile_url, sex, registered_at, residence, occupation, certifications, id_verified, has_antique_dealer_badge, reviews_good/normal/bad, listings_sampled and listings[] with listing_id, url and title.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"5d54cbe3cf263722da5706a9"}},{"name":"categories","description":"The live category tree for one ad space, read from the source's own search form: category slugs with their Japanese names, and under each one the numeric genre ids `search` accepts. Also returns the table of all eleven ad spaces with a flag saying whether that space publishes money at all — which is the one thing you need before reading a `headline`.","required_params":["group"],"optional_params":[],"params":[{"name":"group","type":"enum","required":true,"description":"Which of jmty's eleven ad spaces to search. They are separate marketplaces with their own categories and their own meaning for the headline line: `sale` prints an item price where 0 yen means the item is being given away, `est` prints MONTHLY RENT, `job`/`rec` print a salary or wage, and `eve`, `les`, `pet`, `ser`, `com` print no money at all.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Second-hand goods for sale or free (中古あげます・譲ります)"},{"value":"car","label":"Used cars (中古車)"},{"value":"est","label":"Real estate (rent and sale) (不動産売買・賃貸物件・住宅情報)"},{"value":"eve","label":"Events (イベント情報)"},{"value":"job","label":"Full-time jobs (正社員の求人情報)"},{"value":"les","label":"Classes and schools (教室・スクール情報)"},{"value":"pet","label":"Pet rehoming (里親募集)"},{"value":"rec","label":"Part-time jobs (アルバイト・バイト・パートの求人募集情報)"},{"value":"ser","label":"Local services and free ads (広告の無料掲載)"},{"value":"coop","label":"Community help and favours (助け合い)"},{"value":"com","label":"Member and community recruitment (メンバー募集)"}],"example":"sale","aliases":["category_group"]}],"returns":"category_group, category_group_name, category_group_label, category_count, genre_count, categories[] (category, name, genres[] with genre_id and name) and groups[] (category_group, name, label, publishes_price).","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"group":"sale"}},{"name":"locations","description":"The live location tree: all 47 prefectures with their romanised slug and the numeric city/ward ids underneath them, as the source's own search form publishes them. These are the values `search` takes for `prefecture` and `city_id`.","required_params":[],"optional_params":[],"params":[],"returns":"prefecture_count, city_count and prefectures[] with prefecture (slug), name, city_count and cities[] (city_id, name).","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"jofogas","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Jofogas Hungary public classifieds","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/jofogas/v1","spec_available":true,"actions":[{"name":"search","description":"Search Jofogas Hungarian general classifieds using source q and source paging, preserving asking amounts and seller classifications.","required_params":[],"optional_params":["q","page"],"params":[{"name":"q","type":"string","required":false,"description":"Source full-text query, up to 200 characters; omit for unfiltered marketplace inventory.","on_invalid":"reject","example":"jbl bluetooth"},{"name":"page","type":"integer","required":false,"description":"One-based requested source page (native o), capped here at 100; source clamping is reported.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"Source listing IDs and URLs, title/description, native price labels and HUF asking amounts, images, attributes, seller type, source total/pager and fuzzy-search flag. Page length follows the source; no complete deep-coverage claim.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"q":"jbl bluetooth","page":1}},{"name":"listing","description":"Full freshly published listing by numeric search listing_id; optional returned url supplies its exact canonical path.","required_params":["listing_id"],"optional_params":["url"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Positive numeric Jofogas list_id returned by search.","on_invalid":"reject","example":"162250593"},{"name":"url","type":"string","required":false,"description":"Optional exact source www.jofogas.hu canonical URL returned by search; must match listing_id.","on_invalid":"reject","example":"https://www.jofogas.hu/baranya/JBL_Bluetooth_Fulhallgato_162250593.htm"}],"returns":"Full description, source attributes, images, canonical URL, native price label/amount, public seller name/type, location and original listing status. Published buyer-protection fee remains separate from item amount; shipping/checkout totals unqualified. GTIN null when unpublished.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"162250593"}}]},{"name":"joongna","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Joongna KR public resale listings","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/joongna/v1","spec_available":true,"actions":[{"name":"search","description":"Search native Korean listings; source pages 1–2.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Search text.","on_invalid":"reject","example":"iphone"},{"name":"page","type":"integer","required":false,"description":"Source page, one based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Local result cap; source stride stays 50.","on_invalid":"reject","default":10,"minimum":1,"maximum":50}],"returns":"results[]{listing_id,title,url,price,currency,image,seller,status_code},source_total,page,has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","page":1,"limit":10}},{"name":"listing_detail","description":"Full public listing by a native search listing_id.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Native listing ID from search.","on_invalid":"reject","example":"232705941"}],"returns":"listing_id,title,url,price,currency,description,images[],seller,status_code,condition_code,delivery_options,gtin","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"232705941"}}]},{"name":"jumia","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Jumia API scraper — Africa's largest marketplace in Egypt, Nigeria, Kenya, Morocco, Côte d'Ivoire, Ghana, Uganda and Senegal: search, categories, flash sales, full product records with seller score and other sellers' offers, reviews and suggestions, in local currency. No account, no browser.","version":"0.3.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/jumia/v1","spec_available":true,"actions":[{"name":"search","description":"Search one Jumia storefront by keyword: Jumia SKU, title, brand, image, price in local currency with the struck price and discount, variant price range, rating and review count, Jumia Express flag, seller id, category path, campaign badge, stock label, other sellers' offer count and lowest price, and size variants. Sort by popularity, newest, price or rating; filter by price, minimum rating, minimum discount, Jumia Express and official stores. 40 products per page.","required_params":["query"],"optional_params":["country","language","page","sort","price_min","price_max","min_rating","min_discount","express_only","official_store_only","include_sponsored","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for. Jumia sometimes answers a keyword with a category page; that is followed and reported as `redirected_to`.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Jumia storefront: eg Egypt (EGP), ng Nigeria (NGN), ke Kenya (KES), ma Morocco (MAD), ci Côte d'Ivoire (XOF), gh Ghana (GHS), ug Uganda (UGX), sn Senegal (XOF). Prices come back in that country's currency. Jumia Tunisia and Algeria are closed.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt (EGP)"},{"value":"ng","label":"Nigeria (NGN)"},{"value":"ke","label":"Kenya (KES)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"ci","label":"Côte d'Ivoire (XOF)"},{"value":"gh","label":"Ghana (GHS)"},{"value":"ug","label":"Uganda (UGX)"},{"value":"sn","label":"Senegal (XOF)"}],"default":"eg","example":"ng"},{"name":"language","type":"enum","required":false,"description":"Page language. Defaults to the storefront's own language (English, or French for Morocco, Côte d'Ivoire and Senegal). Arabic exists for Egypt and Morocco only.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English (eg, ng, ke, gh, ug)"},{"value":"fr","label":"French (ma, ci, sn)"},{"value":"ar","label":"Arabic (eg, ma)"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50, 40 products per page (Jumia shows at most 50 pages). A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Order of results — only orderings Jumia offers.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Jumia's default ranking"},{"value":"newest","label":"Newest arrivals"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Best rated first"}],"default":"popular"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in the country's currency.","on_invalid":"reject","minimum":0},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-4).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"min_discount","type":"enum","required":false,"description":"Only products discounted by at least this percentage.","on_invalid":"reject","allowed_values":[{"value":"10","label":"10% off or more"},{"value":"20","label":"20% off or more"},{"value":"30","label":"30% off or more"},{"value":"40","label":"40% off or more"},{"value":"50","label":"50% off or more"}]},{"name":"express_only","type":"boolean","required":false,"description":"Only products shipped by Jumia Express.","on_invalid":"reject","default":false},{"name":"official_store_only","type":"boolean","required":false,"description":"Only products from official brand stores.","on_invalid":"reject","default":false},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep rows Jumia marks as sponsored (flagged `sponsored: true`). Off by default; `sponsored_dropped` counts what was removed.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id (Jumia SKU), jumia_id, product_group_id, title, name, brand, brand_key, url, image, price (number, local currency; the lowest variant price when sizes differ), price_max (highest variant price, else null), price_before_discount (struck price), price_before_discount_max, discount_percent, currency, search_index_rating, search_index_review_count (Jumia's search-index figures; product/detail carries the product page's own rating), rating_scale (5), jumia_express, buyable, seller_id, categories[], category_key, campaign (e.g. 'Jumia Festival Deal'), promotion (a conditional offer, never subtracted), stock_text, stock_quantity (only when a number is printed), other_offers{count, lowest_price}, variant_count, variants[]{variant_sku, name, buyable}, second_chance, sponsored}, count, total_results, total_pages, sponsored_dropped, breadcrumbs, currency, language, country, query, redirected_to","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone","country":"eg"}},{"name":"category/products","description":"Browse one Jumia category (or brand page) by its path, with the same product rows, sorts, filters and paging as `search`, plus the category breadcrumb.","required_params":["category"],"optional_params":["country","language","page","sort","price_min","price_max","min_rating","min_discount","express_only","official_store_only","include_sponsored","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"Jumia category path — the part of a category URL after the domain (https://www.jumia.com.ng/phones-tablets/ → phones-tablets). A full category URL is accepted. Paths differ per country (French storefronts use French paths); `breadcrumbs[].url` on a product returns them.","on_invalid":"reject","example":"phones-tablets","aliases":["category_path","url"]},{"name":"country","type":"enum","required":false,"description":"Jumia storefront: eg Egypt (EGP), ng Nigeria (NGN), ke Kenya (KES), ma Morocco (MAD), ci Côte d'Ivoire (XOF), gh Ghana (GHS), ug Uganda (UGX), sn Senegal (XOF). Prices come back in that country's currency. Jumia Tunisia and Algeria are closed.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt (EGP)"},{"value":"ng","label":"Nigeria (NGN)"},{"value":"ke","label":"Kenya (KES)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"ci","label":"Côte d'Ivoire (XOF)"},{"value":"gh","label":"Ghana (GHS)"},{"value":"ug","label":"Uganda (UGX)"},{"value":"sn","label":"Senegal (XOF)"}],"default":"eg","example":"ng"},{"name":"language","type":"enum","required":false,"description":"Page language. Defaults to the storefront's own language (English, or French for Morocco, Côte d'Ivoire and Senegal). Arabic exists for Egypt and Morocco only.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English (eg, ng, ke, gh, ug)"},{"value":"fr","label":"French (ma, ci, sn)"},{"value":"ar","label":"Arabic (eg, ma)"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50, 40 products per page (Jumia shows at most 50 pages). A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Order of results — only orderings Jumia offers.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Jumia's default ranking"},{"value":"newest","label":"Newest arrivals"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Best rated first"}],"default":"popular"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in the country's currency.","on_invalid":"reject","minimum":0},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-4).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"min_discount","type":"enum","required":false,"description":"Only products discounted by at least this percentage.","on_invalid":"reject","allowed_values":[{"value":"10","label":"10% off or more"},{"value":"20","label":"20% off or more"},{"value":"30","label":"30% off or more"},{"value":"40","label":"40% off or more"},{"value":"50","label":"50% off or more"}]},{"name":"express_only","type":"boolean","required":false,"description":"Only products shipped by Jumia Express.","on_invalid":"reject","default":false},{"name":"official_store_only","type":"boolean","required":false,"description":"Only products from official brand stores.","on_invalid":"reject","default":false},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep rows Jumia marks as sponsored (flagged `sponsored: true`). Off by default; `sponsored_dropped` counts what was removed.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id (Jumia SKU), jumia_id, product_group_id, title, name, brand, brand_key, url, image, price (number, local currency; the lowest variant price when sizes differ), price_max (highest variant price, else null), price_before_discount (struck price), price_before_discount_max, discount_percent, currency, search_index_rating, search_index_review_count (Jumia's search-index figures; product/detail carries the product page's own rating), rating_scale (5), jumia_express, buyable, seller_id, categories[], category_key, campaign (e.g. 'Jumia Festival Deal'), promotion (a conditional offer, never subtracted), stock_text, stock_quantity (only when a number is printed), other_offers{count, lowest_price}, variant_count, variants[]{variant_sku, name, buyable}, second_chance, sponsored}, count, total_results, total_pages, sponsored_dropped, breadcrumbs, currency, language, country, category","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"phones-tablets"}},{"name":"deals/flash-sales","description":"Jumia's current Flash Sales page for one storefront: the same product rows as `search`, including the stock label Jumia prints on flash-sale items, with sorts, filters and paging.","required_params":[],"optional_params":["country","language","page","sort","price_min","price_max","min_rating","min_discount","express_only","official_store_only","include_sponsored","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Jumia storefront: eg Egypt (EGP), ng Nigeria (NGN), ke Kenya (KES), ma Morocco (MAD), ci Côte d'Ivoire (XOF), gh Ghana (GHS), ug Uganda (UGX), sn Senegal (XOF). Prices come back in that country's currency. Jumia Tunisia and Algeria are closed.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt (EGP)"},{"value":"ng","label":"Nigeria (NGN)"},{"value":"ke","label":"Kenya (KES)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"ci","label":"Côte d'Ivoire (XOF)"},{"value":"gh","label":"Ghana (GHS)"},{"value":"ug","label":"Uganda (UGX)"},{"value":"sn","label":"Senegal (XOF)"}],"default":"eg","example":"ng"},{"name":"language","type":"enum","required":false,"description":"Page language. Defaults to the storefront's own language (English, or French for Morocco, Côte d'Ivoire and Senegal). Arabic exists for Egypt and Morocco only.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English (eg, ng, ke, gh, ug)"},{"value":"fr","label":"French (ma, ci, sn)"},{"value":"ar","label":"Arabic (eg, ma)"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50, 40 products per page (Jumia shows at most 50 pages). A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Order of results — only orderings Jumia offers.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Jumia's default ranking"},{"value":"newest","label":"Newest arrivals"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Best rated first"}],"default":"popular"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in the country's currency.","on_invalid":"reject","minimum":0},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-4).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"min_discount","type":"enum","required":false,"description":"Only products discounted by at least this percentage.","on_invalid":"reject","allowed_values":[{"value":"10","label":"10% off or more"},{"value":"20","label":"20% off or more"},{"value":"30","label":"30% off or more"},{"value":"40","label":"40% off or more"},{"value":"50","label":"50% off or more"}]},{"name":"express_only","type":"boolean","required":false,"description":"Only products shipped by Jumia Express.","on_invalid":"reject","default":false},{"name":"official_store_only","type":"boolean","required":false,"description":"Only products from official brand stores.","on_invalid":"reject","default":false},{"name":"include_sponsored","type":"boolean","required":false,"description":"Keep rows Jumia marks as sponsored (flagged `sponsored: true`). Off by default; `sponsored_dropped` counts what was removed.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id (Jumia SKU), jumia_id, product_group_id, title, name, brand, brand_key, url, image, price (number, local currency; the lowest variant price when sizes differ), price_max (highest variant price, else null), price_before_discount (struck price), price_before_discount_max, discount_percent, currency, search_index_rating, search_index_review_count (Jumia's search-index figures; product/detail carries the product page's own rating), rating_scale (5), jumia_express, buyable, seller_id, categories[], category_key, campaign (e.g. 'Jumia Festival Deal'), promotion (a conditional offer, never subtracted), stock_text, stock_quantity (only when a number is printed), other_offers{count, lowest_price}, variant_count, variants[]{variant_sku, name, buyable}, second_chance, sponsored}, count, total_results, total_pages, sponsored_dropped, breadcrumbs, currency, language, country","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ng"}},{"name":"product/detail","description":"The full Jumia product record by SKU, numeric id or URL: title, brand, description, key features, what's in the box, gallery, specification table (model, weight, colour, material, barcode when published), price with struck price, discount and variant price range, availability and stock label, flash-sale status and end time, official-store and Jumia Express flags, promotions, return and warranty policy, rating and review count, the seller with its score, followers and performance grades, other sellers' offers, breadcrumb and every size variant with its own price and stock label.","required_params":["product_id"],"optional_params":["country","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Jumia product: the SKU every search row returns as `product_id` (e.g. AP848MP26KIKRNAFAMZ), the numeric id at the end of a product URL (…-134276913.html → 134276913), or a full Jumia product URL (its country is used when `country` is not given). A SKU costs one extra lookup; a URL or numeric id is read directly.","on_invalid":"reject","example":"AP848MP26KIKRNAFAMZ","aliases":["sku","id","url"]},{"name":"country","type":"enum","required":false,"description":"Jumia storefront: eg Egypt (EGP), ng Nigeria (NGN), ke Kenya (KES), ma Morocco (MAD), ci Côte d'Ivoire (XOF), gh Ghana (GHS), ug Uganda (UGX), sn Senegal (XOF). Prices come back in that country's currency. Jumia Tunisia and Algeria are closed.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt (EGP)"},{"value":"ng","label":"Nigeria (NGN)"},{"value":"ke","label":"Kenya (KES)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"ci","label":"Côte d'Ivoire (XOF)"},{"value":"gh","label":"Ghana (GHS)"},{"value":"ug","label":"Uganda (UGX)"},{"value":"sn","label":"Senegal (XOF)"}],"default":"eg","example":"ng"},{"name":"language","type":"enum","required":false,"description":"Page language. Defaults to the storefront's own language (English, or French for Morocco, Côte d'Ivoire and Senegal). Arabic exists for Egypt and Morocco only.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English (eg, ng, ke, gh, ug)"},{"value":"fr","label":"French (ma, ci, sn)"},{"value":"ar","label":"Arabic (eg, ma)"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id (SKU), jumia_id, product_group_id, title, name, brand, url, description, key_features[], whats_in_the_box, images[], gtin (null unless Jumia publishes a barcode), model, weight_kg, color, main_material, production_country, shop_type, product_line, price (number, lowest variant price), price_max, price_before_discount, price_before_discount_max, discount_percent, currency, availability (in_stock|out_of_stock), stock_text, stock_quantity, flash_sale{status (active|upcoming), ends_at, starts_text}, official_store, official_store_label, campaign, jumia_express, promotions[] (conditional offers, never subtracted), delivery_note (for Jumia's default delivery location), policies[]{title, text}, rating, review_count, rating_scale, rating_count_page, seller{id, name, url, score_percent, followers, performance[]{metric, grade}}, featured_offer{price, price_before_discount, currency, seller}, offer_count, offers_lowest_price, other_offers[]{price, price_before_discount, currency, seller{name, url, score_percent}, warranty}, categories[], breadcrumbs[]{name, url}, variants[]{variant_sku, name, available, price, price_before_discount, discount_percent, stock_text, stock_quantity, stock_status}, country, language}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"https://www.jumia.com.eg/apple-iphone-17-pro-max-6.9-256gb-rom-ios-26-5g-cosmic-orange-134276913.html"}},{"name":"product/offers","description":"Every seller offering one Jumia product: the featured (buy-box) seller with its score, followers and performance grades, and each other seller's price, seller score and warranty, cheapest first, with the offer count Jumia shows.","required_params":["product_id"],"optional_params":["country","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Jumia product: the SKU every search row returns as `product_id` (e.g. AP848MP26KIKRNAFAMZ), the numeric id at the end of a product URL (…-134276913.html → 134276913), or a full Jumia product URL (its country is used when `country` is not given). A SKU costs one extra lookup; a URL or numeric id is read directly.","on_invalid":"reject","example":"AP848MP26KIKRNAFAMZ","aliases":["sku","id","url"]},{"name":"country","type":"enum","required":false,"description":"Jumia storefront: eg Egypt (EGP), ng Nigeria (NGN), ke Kenya (KES), ma Morocco (MAD), ci Côte d'Ivoire (XOF), gh Ghana (GHS), ug Uganda (UGX), sn Senegal (XOF). Prices come back in that country's currency. Jumia Tunisia and Algeria are closed.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt (EGP)"},{"value":"ng","label":"Nigeria (NGN)"},{"value":"ke","label":"Kenya (KES)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"ci","label":"Côte d'Ivoire (XOF)"},{"value":"gh","label":"Ghana (GHS)"},{"value":"ug","label":"Uganda (UGX)"},{"value":"sn","label":"Senegal (XOF)"}],"default":"eg","example":"ng"},{"name":"language","type":"enum","required":false,"description":"Page language. Defaults to the storefront's own language (English, or French for Morocco, Côte d'Ivoire and Senegal). Arabic exists for Egypt and Morocco only.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English (eg, ng, ke, gh, ug)"},{"value":"fr","label":"French (ma, ci, sn)"},{"value":"ar","label":"Arabic (eg, ma)"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, jumia_id, title, brand, url, currency, price, availability, offer_count, offers_lowest_price} + offers[]{position, featured, price, price_before_discount, currency, seller{id, name, url, score_percent, followers, performance[]}, warranty} + count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"https://www.jumia.com.eg/apple-iphone-17-pro-max-6.9-256gb-rom-ios-26-5g-cosmic-orange-134276913.html"}},{"name":"product/reviews","description":"Verified customer reviews of one Jumia product, 10 per page: average rating, number of ratings, star histogram, number of written reviews, and each review's stars, title, text, date, reviewer name as Jumia shows it and verified-purchase flag.","required_params":["product_id"],"optional_params":["country","language","page","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Jumia product: the SKU every search row returns as `product_id` (e.g. AP848MP26KIKRNAFAMZ), the numeric id at the end of a product URL (…-134276913.html → 134276913), or a full Jumia product URL (its country is used when `country` is not given). A SKU costs one extra lookup; a URL or numeric id is read directly.","on_invalid":"reject","example":"AP848MP26KIKRNAFAMZ","aliases":["sku","id","url"]},{"name":"country","type":"enum","required":false,"description":"Jumia storefront: eg Egypt (EGP), ng Nigeria (NGN), ke Kenya (KES), ma Morocco (MAD), ci Côte d'Ivoire (XOF), gh Ghana (GHS), ug Uganda (UGX), sn Senegal (XOF). Prices come back in that country's currency. Jumia Tunisia and Algeria are closed.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt (EGP)"},{"value":"ng","label":"Nigeria (NGN)"},{"value":"ke","label":"Kenya (KES)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"ci","label":"Côte d'Ivoire (XOF)"},{"value":"gh","label":"Ghana (GHS)"},{"value":"ug","label":"Uganda (UGX)"},{"value":"sn","label":"Senegal (XOF)"}],"default":"eg","example":"ng"},{"name":"language","type":"enum","required":false,"description":"Page language. Defaults to the storefront's own language (English, or French for Morocco, Côte d'Ivoire and Senegal). Arabic exists for Egypt and Morocco only.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English (eg, ng, ke, gh, ug)"},{"value":"fr","label":"French (ma, ci, sn)"},{"value":"ar","label":"Arabic (eg, ma)"}]},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based, 10 reviews per page. Past the end → empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product_id, rating, rating_scale, rating_count, rating_histogram{1..5}, review_count, reviews[]{rating, title, body, date, author, verified_purchase}, count, page, total_pages, country, language","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"https://www.jumia.com.eg/apple-iphone-17-pro-max-6.9-256gb-rom-ios-26-5g-cosmic-orange-134276913.html"}},{"name":"search/suggest","description":"Jumia's search-box suggestions for a partial query in one storefront: completed search phrases and suggested official stores or brand pages.","required_params":["query"],"optional_params":["country","language","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The beginning of a search, as typed.","on_invalid":"reject","example":"ipho","aliases":["q","prefix"]},{"name":"country","type":"enum","required":false,"description":"Jumia storefront: eg Egypt (EGP), ng Nigeria (NGN), ke Kenya (KES), ma Morocco (MAD), ci Côte d'Ivoire (XOF), gh Ghana (GHS), ug Uganda (UGX), sn Senegal (XOF). Prices come back in that country's currency. Jumia Tunisia and Algeria are closed.","on_invalid":"reject","allowed_values":[{"value":"eg","label":"Egypt (EGP)"},{"value":"ng","label":"Nigeria (NGN)"},{"value":"ke","label":"Kenya (KES)"},{"value":"ma","label":"Morocco (MAD)"},{"value":"ci","label":"Côte d'Ivoire (XOF)"},{"value":"gh","label":"Ghana (GHS)"},{"value":"ug","label":"Uganda (UGX)"},{"value":"sn","label":"Senegal (XOF)"}],"default":"eg","example":"ng"},{"name":"language","type":"enum","required":false,"description":"Page language. Defaults to the storefront's own language (English, or French for Morocco, Côte d'Ivoire and Senegal). Arabic exists for Egypt and Morocco only.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English (eg, ng, ke, gh, ug)"},{"value":"fr","label":"French (ma, ci, sn)"},{"value":"ar","label":"Arabic (eg, ma)"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, suggestions[], stores[]{name, url, image}, other[], count, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}}]},{"name":"kabum","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"KaBuM! API — Brazil's biggest PC hardware and electronics retailer as JSON: product search with filters that bite, category browsing, full product detail with the PIX/cash price and every instalment plan, stock, ratings, marketplace seller and specs, plus a 20-product batch price lookup from kabum.com.br — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kabum/v1","spec_available":true,"actions":[{"name":"search","description":"Search KaBuM! by keyword. Every row carries BOTH Brazilian prices — `price_brl` (the instalment/card reference) and `cash_price_brl` (the à-vista PIX/boleto price) — plus stock, the instalment plan, whether KaBuM or a marketplace seller ships it, and the `product_id` every other action takes. `facets` in the response lists the brands and category facets this query accepts, so the next call can filter without guessing.","required_params":["query"],"optional_params":["brands","price_min","price_max","only_offers","only_kabum","only_prime","only_free_shipping","only_open_box","attributes","sort","page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"What a Brazilian shopper would type: a product name, a model ('rtx 5070', 'ryzen 7 9800x3d'), or a category phrase in Portuguese ('ssd nvme', 'teclado mecanico').","on_invalid":"reject","example":"placa de video rtx 5070","aliases":["q","keyword","term"]},{"name":"brands","type":"array","required":false,"description":"Manufacturer names, exactly as `facets.brands` in a previous response spells them ('Kingston', 'ASUS', 'Gigabyte'). Several are OR-ed. A name KaBuM does not know returns zero results, not an error.","on_invalid":"ignore","example":["Kingston","Samsung"],"aliases":["brand","manufacturer"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price in BRL (reais, not cents).","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in BRL (reais, not cents).","on_invalid":"ignore","example":300,"minimum":0},{"name":"only_offers","type":"boolean","required":false,"description":"Only products KaBuM currently flags as on offer (ssd: 864 → 39 on 2026-09-23).","on_invalid":"ignore","default":false},{"name":"only_kabum","type":"boolean","required":false,"description":"Only KaBuM's own 1P stock, excluding marketplace sellers (ssd: 864 → 103).","on_invalid":"ignore","default":false},{"name":"only_prime","type":"boolean","required":false,"description":"Only products with a KaBuM Prime exclusive price.","on_invalid":"ignore","default":false},{"name":"only_free_shipping","type":"boolean","required":false,"description":"Only products KaBuM highlights as free shipping (ssd: 864 → 88).","on_invalid":"ignore","default":false},{"name":"only_open_box","type":"boolean","required":false,"description":"Only open-box (returned/repackaged) units.","on_invalid":"ignore","default":false},{"name":"attributes","type":"object","required":false,"description":"Category-specific facets, as `{facet name: [values]}` taken verbatim from `facets.attributes` of a previous response — e.g. {\"Memória\": [\"8 GB\"]} on graphics cards (447 → 79).","on_invalid":"ignore","example":{"Memória":["8 GB"]}},{"name":"sort","type":"enum","required":false,"description":"Result order. KaBuM silently ignores an order it does not know (an unknown value returns its default order with no error), so only the seven it actually applies are accepted here.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"KaBuM's own default order"},{"value":"most_searched","label":"Most searched first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"offers","label":"Products on offer first"},{"value":"newest","label":"Most recently added first"},{"value":"most_rated","label":"Most-rated first"},{"value":"brand","label":"By manufacturer name"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. `total_results` and `total_pages` in the response tell you how far you can go.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-120). The source serves at most 120 however many you ask for.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":120,"aliases":["page_size","per_page"]}],"returns":"products[]{product_id, title, url, brand, category_path, price_brl (card/instalment reference), cash_price_brl (the a-vista PIX/boleto price the site headlines), list_price_brl (pre-campaign reference, only while a campaign runs), old_price_brl, discount_percent, campaign{id, name, starts_at, ends_at, units_available}, installments{count, amount_brl, text}, in_stock, stock, rating_rounded, rating_count, sold_by_kabum, seller{seller_id, name, company, cnpj, state}, free_shipping, is_prime_exclusive, is_open_box, is_pre_order, on_offer, image}, total_results, total_pages, page, limit, sort, facets{brands[], categories[], attributes[], flags[], price_range}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"ssd nvme"}},{"name":"category","description":"Walk one KaBuM! category without a keyword — the way to build a price database for a whole department. Takes the category's URL path (`hardware/placa-de-video-vga`), supports the same filters and sorts as `search`, and returns the source's own breadcrumb so you know exactly which shelf you are reading.","required_params":["category"],"optional_params":["brands","price_min","price_max","only_offers","only_kabum","only_prime","only_free_shipping","only_open_box","attributes","sort","page","limit"],"params":[{"name":"category","type":"string","required":true,"description":"Category path as it appears in a kabum.com.br URL: 'hardware', 'hardware/placa-de-video-vga' or 'hardware/placa-de-video-vga/placa-de-video-amd'. A full kabum.com.br category URL is accepted too. Read a product's `category_slugs` to discover valid paths.","on_invalid":"reject","example":"hardware/placa-de-video-vga","aliases":["category_path","path","url"]},{"name":"brands","type":"array","required":false,"description":"Manufacturer names, exactly as `facets.brands` in a previous response spells them ('Kingston', 'ASUS', 'Gigabyte'). Several are OR-ed. A name KaBuM does not know returns zero results, not an error.","on_invalid":"ignore","example":["Kingston","Samsung"],"aliases":["brand","manufacturer"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price in BRL (reais, not cents).","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in BRL (reais, not cents).","on_invalid":"ignore","example":300,"minimum":0},{"name":"only_offers","type":"boolean","required":false,"description":"Only products KaBuM currently flags as on offer (ssd: 864 → 39 on 2026-09-23).","on_invalid":"ignore","default":false},{"name":"only_kabum","type":"boolean","required":false,"description":"Only KaBuM's own 1P stock, excluding marketplace sellers (ssd: 864 → 103).","on_invalid":"ignore","default":false},{"name":"only_prime","type":"boolean","required":false,"description":"Only products with a KaBuM Prime exclusive price.","on_invalid":"ignore","default":false},{"name":"only_free_shipping","type":"boolean","required":false,"description":"Only products KaBuM highlights as free shipping (ssd: 864 → 88).","on_invalid":"ignore","default":false},{"name":"only_open_box","type":"boolean","required":false,"description":"Only open-box (returned/repackaged) units.","on_invalid":"ignore","default":false},{"name":"attributes","type":"object","required":false,"description":"Category-specific facets, as `{facet name: [values]}` taken verbatim from `facets.attributes` of a previous response — e.g. {\"Memória\": [\"8 GB\"]} on graphics cards (447 → 79).","on_invalid":"ignore","example":{"Memória":["8 GB"]}},{"name":"sort","type":"enum","required":false,"description":"Result order. KaBuM silently ignores an order it does not know (an unknown value returns its default order with no error), so only the seven it actually applies are accepted here.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"KaBuM's own default order"},{"value":"most_searched","label":"Most searched first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"offers","label":"Products on offer first"},{"value":"newest","label":"Most recently added first"},{"value":"most_rated","label":"Most-rated first"},{"value":"brand","label":"By manufacturer name"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. `total_results` and `total_pages` in the response tell you how far you can go.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-120). The source serves at most 120 however many you ask for.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":120,"aliases":["page_size","per_page"]}],"returns":"products[] (same shape as search), breadcrumb[]{id, name, path}, total_results, total_pages, page, limit, sort, category, facets{…}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"hardware/placa-de-video-vga"}},{"name":"product","description":"One product in full: both prices, the exact PIX price and EVERY instalment plan KaBuM offers (boleto, PIX, credit card 1-12x, NuPay) with the real amount per plan, live stock, the unrounded rating, the marketplace seller with its company name and CNPJ when it is not KaBuM's own stock, the spec sheet parsed into sections, warranty, weight and the Anatel/Inmetro codes. Two upstream calls are merged into this one answer.","required_params":["product_id"],"optional_params":["include_specs"],"params":[{"name":"product_id","type":"string","required":true,"description":"The numeric KaBuM product code (459144) or a kabum.com.br/produto/... URL. Every search row returns it.","on_invalid":"reject","example":"459144","aliases":["id","code","url"]},{"name":"include_specs","type":"boolean","required":false,"description":"Fetch the spec sheet, the unrounded rating and the regulatory codes (one extra upstream call, ~12 KB). Turn it off for a price-only read.","on_invalid":"ignore","default":true}],"returns":"product{…every search field…, rating, rating_rounded, pix_price_brl, payment_options[]{method, label, plans[]{installments, amount_brl, total_brl, interest_free, discount_percent, terms}}, specifications[]{name, values[]}, description, summary_ai, warranty, weight_grams, anatel_code, inmetro_code, limit_per_order, category_ids, category_slugs, images[], cross_sell_ids[], bought_together_ids[]}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"459144"}},{"name":"products","description":"Up to 20 products in ONE upstream call: both prices, the instalment plan, stock, rating and seller for each. This is how a catalogue of thousands is re-priced every morning without spending a call per product. Ids KaBuM no longer serves are simply absent and listed in `missing`.","required_params":["product_ids"],"optional_params":[],"params":[{"name":"product_ids","type":"array","required":true,"description":"Up to 20 KaBuM product codes or product URLs. Accepts a JSON array or a comma-separated string. The source returns at most 20 rows per call and silently drops the rest, so more than that is rejected here instead.","on_invalid":"reject","example":[459144,1027061],"maximum":20,"aliases":["ids","codes","product_id"]}],"returns":"products[] (same shape as search, without description/specs), requested, returned, missing[]","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_ids":[459144,1027061]}},{"name":"suggest","description":"What KaBuM's own search box suggests for a prefix — the phrases Brazilian shoppers actually type, straight from the site's autocomplete. ~200 bytes a call, so it is the cheap way to expand a keyword list before searching.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"A partial search phrase, at least 2 characters. KaBuM rejects a single character.","on_invalid":"reject","example":"ssd","aliases":["q","keyword","term","prefix"]}],"returns":"suggestions[] (plain strings), query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ssd"}},{"name":"deals","description":"The products inside one of KaBuM's running campaigns (its 'promoção' pages). Same rows as `search`, with the campaign's own title. KaBuM publishes no campaign index, so the slugs that answered when this engine was built are listed on the parameter.","required_params":[],"optional_params":["campaign","page","limit","brands","price_min","price_max","only_kabum","sort"],"params":[{"name":"campaign","type":"enum","required":false,"description":"Which campaign to read. An unknown slug returns NOT_FOUND — KaBuM publishes no campaign index, so these are the ones verified live.","on_invalid":"reject","allowed_values":[{"value":"HARDWAREKABUM","label":"Hardware campaign"},{"value":"COMPUTADORKABUM","label":"Computers campaign"},{"value":"perifericoskabum","label":"Peripherals campaign"},{"value":"MUNDOGAMER","label":"Gaming campaign (widest)"},{"value":"ESPACOGAMER","label":"Gaming furniture campaign"}],"default":"HARDWAREKABUM","example":"HARDWAREKABUM","aliases":["promotion","slug"]},{"name":"brands","type":"array","required":false,"description":"Manufacturer names, exactly as `facets.brands` in a previous response spells them ('Kingston', 'ASUS', 'Gigabyte'). Several are OR-ed. A name KaBuM does not know returns zero results, not an error.","on_invalid":"ignore","example":["Kingston","Samsung"],"aliases":["brand","manufacturer"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price in BRL (reais, not cents).","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in BRL (reais, not cents).","on_invalid":"ignore","example":300,"minimum":0},{"name":"only_kabum","type":"boolean","required":false,"description":"Only KaBuM's own 1P stock, excluding marketplace sellers (ssd: 864 → 103).","on_invalid":"ignore","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order. KaBuM silently ignores an order it does not know (an unknown value returns its default order with no error), so only the seven it actually applies are accepted here.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"KaBuM's own default order"},{"value":"most_searched","label":"Most searched first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"offers","label":"Products on offer first"},{"value":"newest","label":"Most recently added first"},{"value":"most_rated","label":"Most-rated first"},{"value":"brand","label":"By manufacturer name"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. `total_results` and `total_pages` in the response tell you how far you can go.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-120). The source serves at most 120 however many you ask for.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":120,"aliases":["page_size","per_page"]}],"returns":"products[] (same shape as search), campaign, campaign_title, total_results, total_pages, page, limit, facets{…}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"campaign":"HARDWAREKABUM"}},{"name":"featured","description":"KaBuM's own curated front-page lists: `highlights` (what it is pushing right now) and `releases` (what has just arrived). Same rows as `search`. Useful for catching new SKUs and price moves without knowing a keyword.","required_params":[],"optional_params":["list","page","limit","brands","price_min","price_max","only_kabum","sort"],"params":[{"name":"list","type":"enum","required":false,"description":"Which curated list to read.","on_invalid":"reject","allowed_values":[{"value":"highlights","label":"KaBuM's highlighted products"},{"value":"releases","label":"Newly released products"}],"default":"highlights","example":"releases","aliases":["type","kind"]},{"name":"brands","type":"array","required":false,"description":"Manufacturer names, exactly as `facets.brands` in a previous response spells them ('Kingston', 'ASUS', 'Gigabyte'). Several are OR-ed. A name KaBuM does not know returns zero results, not an error.","on_invalid":"ignore","example":["Kingston","Samsung"],"aliases":["brand","manufacturer"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price in BRL (reais, not cents).","on_invalid":"ignore","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in BRL (reais, not cents).","on_invalid":"ignore","example":300,"minimum":0},{"name":"only_kabum","type":"boolean","required":false,"description":"Only KaBuM's own 1P stock, excluding marketplace sellers (ssd: 864 → 103).","on_invalid":"ignore","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order. KaBuM silently ignores an order it does not know (an unknown value returns its default order with no error), so only the seven it actually applies are accepted here.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"KaBuM's own default order"},{"value":"most_searched","label":"Most searched first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"offers","label":"Products on offer first"},{"value":"newest","label":"Most recently added first"},{"value":"most_rated","label":"Most-rated first"},{"value":"brand","label":"By manufacturer name"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. `total_results` and `total_pages` in the response tell you how far you can go.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-120). The source serves at most 120 however many you ask for.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":120,"aliases":["page_size","per_page"]}],"returns":"products[] (same shape as search), list, total_results, total_pages, page, limit, facets{…}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"list":"highlights"}}]},{"name":"kakaku","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Kakaku.com API — Japan's price comparison: search products, every shop's price for a product, price history, specs and category sales rankings","version":"0.1.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/kakaku/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on kakaku.com (価格.com). Rows are kakaku catalogue products (`row_type: product`, with product_id for `product` / `offers` / `price_history`), smartphone model pages (`phone_model`, handset price), and Rakuten / Amazon.co.jp / Yahoo! Shopping listings that kakaku indexes (`mall_item`, with the shop and mall). Sponsored rows are returned apart in `sponsored[]`, never mixed into results. Filters: kakaku search category, mall, price range, price sort. Price sort, price range and the mall filter return mall listings (that is how kakaku answers them). `category_facets` is kakaku's category menu: without a category, every top-level category with its count; with one, its ancestors (kakaku prints no count for them), the selected category (count = the result total) and its sub-categories with counts (a leaf category such as 0001_0027 CPU has none).","required_params":["query"],"optional_params":["category","mall","min_price","max_price","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, in Japanese or English (e.g. `iphone`, `SSD 2TB`, `プレイステーション5`). Full-width letters are normalised (ｉｐｈｏｎｅ = iphone).","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Kakaku search category key, as returned in `category_facets` (e.g. `0001` パソコン, `0005_0011` スマートフォン). Digits in groups of four joined by `_`.","on_invalid":"reject","example":"0001_0145","aliases":["category_id"]},{"name":"mall","type":"enum","required":false,"description":"Only listings from one shopping mall.","on_invalid":"reject","allowed_values":[{"value":"rakuten","label":"楽天市場 Rakuten Ichiba"},{"value":"amazon","label":"Amazon.co.jp"},{"value":"yahoo","label":"Yahoo!ショッピング"}]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in JPY (tax included).","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in JPY (tax included).","on_invalid":"reject","example":20000,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. `relevance` is kakaku's own popularity order; the price sorts return mall listings.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"kakaku's default (popular)"},{"value":"price_asc","label":"価格の安い順 price low to high"},{"value":"price_desc","label":"価格の高い順 price high to low"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (40 result rows per page, plus up to 10 sponsored rows).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"results[]{row_type (product|phone_model|mall_item), product_id (K…, product rows), model_id (M…, phone_model rows), mall_item_id, title, maker, url, image, category, price_from (the card's '～' from-price, products), price (mall rows), price_text, price_label, price_is_from, currency=JPY, rating, review_count, bbs_count, release_date (at the source's precision), release_date_text, release_date_precision (day|month|year), registration_date (登録日, the day kakaku listed it, when it prints no release date), spec_highlights[], summary, mall, shop_name} + sponsored[]{title, price_from, shop_name, url} + total, page, has_more, category_facets[]{category, name, count, relation (ancestor|selected|subcategory|popular)}, mall_facets[]{mall, name, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"SSD 2TB"}},{"name":"product","description":"One kakaku product page: title, maker, images, category path, the live lowest price (checked against the page's structured data and the first shop row), the average price across shops, the highest shop price, the maker's list price, release date, sales rank in its category (position of N, with the ranking key you can pass to `ranking`), review score and count, Q&A (クチコミ) count, favourites, how many shops and offers, and the spec highlights. Use `offers` for the per-shop table, `specs` for the whole spec sheet.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Kakaku product id: `K` + 10 digits, the `product_id` of a search or ranking row (also the id in a product URL kakaku.com/item/K…/). Provide product_id OR url.","on_invalid":"reject","example":"K0001719316","aliases":["id","item_id"]},{"name":"url","type":"string","required":false,"description":"A kakaku.com product URL; alternative to product_id.","on_invalid":"reject","example":"https://kakaku.com/item/K0001719316/","aliases":["item_url"]}],"returns":"product{product_id, title, maker, maker_id, url, image, images[], category_id, category_name, category_path[]{name, url}, lowest_price, lowest_price_label (最安価格, or 限定価格 on kakaku-exclusive models), average_price, highest_price, currency=JPY, price_mismatch, list_price, release_date, release_date_text, release_date_precision (day|month|year), shop_count, offer_count, sales_rank{position, of, category, url}, rating, review_count, bbs_count, favorite_count, spec_highlights[]{label, value}, notice, offer_table, maker_direct_only (sold only on the maker's own site), status, price_history_url, spec_url, review_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"K0001719316"}},{"name":"offers","description":"Every shop selling one kakaku product, cheapest first, as kakaku lists them: position, price, gap to the cheapest, shipping (free / from / amount, as printed — kakaku varies it by prefecture), point reward, the effective price (price + shipping − points, only when shipping is one exact amount), stock and dispatch text, store pickup, the shop (id, name, page, the share of buyers who rated it positively and how many ratings in the last 6 months), the shop's own comment, its payment methods (credit card, bank transfer, cash on delivery, convenience store…) and, apart, its services (installation 設置:全国対応 / 設置:一部地域, extended warranty 延長保証, 価格.comID購入). The whole table comes in one call.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Kakaku product id: `K` + 10 digits, the `product_id` of a search or ranking row (also the id in a product URL kakaku.com/item/K…/). Provide product_id OR url.","on_invalid":"reject","example":"K0001719316","aliases":["id","item_id"]},{"name":"url","type":"string","required":false,"description":"A kakaku.com product URL; alternative to product_id.","on_invalid":"reject","example":"https://kakaku.com/item/K0001719316/","aliases":["item_url"]}],"returns":"product{product_id, title, maker, url, lowest_price, average_price, currency=JPY, shop_count, offer_count} + offers[]{position, price, currency, price_diff_from_lowest, shipping_text, shipping_cost, shipping_cost_from, shipping_varies, points, effective_price, stock_text, in_stock, store_pickup, shop{id, name, url, rating_pct, rating_count}, shop_comment, payment_methods[], services[], is_extra_listing} + count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"K0001719316"}},{"name":"specs","description":"The full spec sheet of one kakaku product (スペック・仕様), as group / label / value rows in the source's own Japanese wording.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Kakaku product id: `K` + 10 digits, the `product_id` of a search or ranking row (also the id in a product URL kakaku.com/item/K…/). Provide product_id OR url.","on_invalid":"reject","example":"K0001719316","aliases":["id","item_id"]},{"name":"url","type":"string","required":false,"description":"A kakaku.com product URL; alternative to product_id.","on_invalid":"reject","example":"https://kakaku.com/item/K0001719316/","aliases":["item_url"]}],"returns":"product{product_id, title, url} + specs[]{group, label, value} + count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"K0001719316"}},{"name":"price_history","description":"Daily price history of one kakaku product (価格推移グラフ): the lowest price and the average shop price for each day kakaku recorded, up to the last two years.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Kakaku product id: `K` + 10 digits, the `product_id` of a search or ranking row (also the id in a product URL kakaku.com/item/K…/). Provide product_id OR url.","on_invalid":"reject","example":"K0001719316","aliases":["id","item_id"]},{"name":"url","type":"string","required":false,"description":"A kakaku.com product URL; alternative to product_id.","on_invalid":"reject","example":"https://kakaku.com/item/K0001719316/","aliases":["item_url"]}],"returns":"product{product_id, title, url} + points[]{date, lowest_price, average_price} + count + first_date + last_date + all_time_lowest {price, date} + currency=JPY","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"K0001719316"}},{"name":"ranking","description":"Kakaku's sales ranking (人気売れ筋ランキング) for one product category: rank, product_id, title, maker, lowest price, review score and count, release date, rank movement, spec highlights and favourites, 40 per page. The category key is the `sales_rank.category` of any `product` (e.g. `pc/ssd/ranking_0537`) or a kakaku ranking URL.","required_params":["category"],"optional_params":["page"],"params":[{"name":"category","type":"string","required":true,"description":"Ranking key `<category path>/ranking_<4-digit code>` (e.g. `pc/ssd/ranking_0537`, `game/game-console/ranking_2050`) or the full kakaku ranking URL. `product` returns it as `sales_rank.category`.","on_invalid":"reject","example":"pc/ssd/ranking_0537","aliases":["ranking","category_url"]},{"name":"page","type":"integer","required":false,"description":"Ranking page (40 per page). A page past the last ranked product answers NOT_FOUND.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"results[]{rank, product_id, title, maker, url, image, lowest_price, currency=JPY, rating, rating_count, release_date (at the source's precision), release_date_text, release_date_precision (day|month|year), registration_date (登録日, when kakaku prints no release date), previous_rank_text, rank_change, spec_highlights[]{label, value (null where kakaku prints a greyed '-' = not classified; NOT the same as なし)}, favorite_count} + title, category, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"pc/ssd/ranking_0537"}}]},{"name":"kanabell","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Ka-nabell API — Japanese trading-card shop カーナベル (ka-nabell.com): single-card selling prices per condition grade (Pokémon S/A/B/C, Yu-Gi-Oh! and Duel Masters A/B/C/D + unassessed) with stock, PSA slabs, sales velocity, and the shop's buy-back prices (買取価格) with how many it still wants. JPY, Japanese card names kept. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kanabell/v1","spec_available":true,"actions":[{"name":"search","description":"Search Ka-nabell's single cards for one game by name, card number, set, series, rarity, condition in stock, price and price trend; sort by price, best sellers, newest or the site's set order. Each row carries the sale price and stock per condition AND the buy-back price — the shop's own sell / buy spread on one line.","required_params":["game"],"optional_params":["keyword","set_id","series_id","rarity_id","card_number","in_stock","condition","min_price","max_price","price_trend","graded","card_kind","regulation","legacy_card_id","sort","page","per_page"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: pokemon, yugioh or duel_masters — the three Ka-nabell sells and buys (also accepted: ポケカ, 遊戯王, デュエマ, ygo, dm).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon TCG"},{"value":"yugioh","label":"遊戯王OCG — Yu-Gi-Oh! OCG (Japanese)"},{"value":"duel_masters","label":"デュエル・マスターズ — Duel Masters"}],"example":"pokemon"},{"name":"keyword","type":"string","required":false,"description":"Card name or keyword as the shop writes it — Japanese name or kana (ピカチュウ, ぴかちゅう), several words narrow it (リザードン SAR); a card number (QCCU-JP170, 180/171) also matches. The same matching the site's own search box uses.","on_invalid":"reject","example":"ピカチュウ","aliases":["query","q","name"]},{"name":"set_id","type":"integer","required":false,"description":"One set / expansion (the shop's pack id; the `sets` action lists them with names and codes, e.g. yugioh 876 = イモータル・フェニックス, pokemon 900 = 30th セレブレーション).","on_invalid":"reject","example":876,"minimum":1,"maximum":99999999,"aliases":["pack_id","set"]},{"name":"series_id","type":"integer","required":false,"description":"One series / block (the `sets` action lists series; yugioh 1 = 第13期).","on_invalid":"reject","example":1,"minimum":1,"maximum":99999999},{"name":"rarity_id","type":"string","required":false,"description":"One rarity: for pokemon the code (C, U, R, RR, RRR, SR, SAR, AR, UR, HR …); for yugioh and duel_masters the numeric id. The `rarities` action lists every value with its name.","on_invalid":"reject","example":"SAR","aliases":["rarity"]},{"name":"card_number","type":"string","required":false,"description":"Exact card number as printed: yugioh 'QCCU-JP170', pokemon '180/171' or '001/SV-P', duel_masters 'P36/Y21' (case-insensitive).","on_invalid":"reject","example":"QCCU-JP170","aliases":["number","serial_number"]},{"name":"in_stock","type":"boolean","required":false,"description":"Only cards the shop has in stock now (any condition). Off by default, as on the site, which also lists sold-out cards.","on_invalid":"reject","default":false,"example":true,"aliases":["in_stock_only"]},{"name":"condition","type":"enum","required":false,"description":"Only cards with stock in this condition grade. Pokémon grades S/A/B/C; Yu-Gi-Oh! and Duel Masters A/B/C/D plus unassessed (未査定特価).","on_invalid":"reject","allowed_values":[{"value":"S","label":"状態S (Pokémon only)"},{"value":"A","label":"状態A"},{"value":"B","label":"状態B"},{"value":"C","label":"状態C"},{"value":"D","label":"状態D (Yu-Gi-Oh! / Duel Masters)"},{"value":"unassessed","label":"未査定特価 — not graded yet, bargain (Yu-Gi-Oh! / Duel Masters)"}],"example":"A"},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in JPY, applied to the card's cheapest in-stock condition (as the site's price filter); implies in stock.","on_invalid":"reject","example":1000,"minimum":0,"maximum":99999999},{"name":"max_price","type":"integer","required":false,"description":"Highest price in JPY, applied to the card's cheapest in-stock condition; implies in stock.","on_invalid":"reject","example":5000,"minimum":0,"maximum":99999999},{"name":"price_trend","type":"enum","required":false,"description":"Only cards whose last sale-price change in the last 30 days went down (the site's 最新値下げ list) or up.","on_invalid":"reject","allowed_values":[{"value":"down","label":"The last change lowered the price (in the last 30 days, as the site's 値下げ / 価格ダウン lists)"},{"value":"up","label":"The last change raised the price (in the last 30 days, as the site's 価格アップ list)"}],"example":"down"},{"name":"graded","type":"boolean","required":false,"description":"Only graded slabs (PSA / BGS / CGC products such as '(PSA10)N'). Each row's graded, grader and grade say which.","on_invalid":"reject","default":false,"example":true,"aliases":["psa"]},{"name":"card_kind","type":"enum","required":false,"description":"Pokémon only: card kind, as the site's 種類 filter; comma-separate several (item,supporter).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon cards"},{"value":"item","label":"Trainer: item (グッズ)"},{"value":"supporter","label":"Trainer: supporter (サポート)"},{"value":"stadium","label":"Trainer: stadium (スタジアム)"},{"value":"pokemon_tool","label":"Trainer: Pokémon tool (ポケモンのどうぐ)"},{"value":"basic_energy","label":"Basic energy"},{"value":"special_energy","label":"Special energy"}],"example":"supporter"},{"name":"regulation","type":"string","required":false,"description":"Pokémon only: format the card is legal in, as the site writes it (スタンダード, エクストラ, 殿堂).","on_invalid":"reject","example":"スタンダード"},{"name":"legacy_card_id","type":"integer","required":false,"description":"The card id from the OLD ka-nabell.com site (before the 2026-10 relaunch); finds the products that card became.","on_invalid":"reject","example":176982,"minimum":1,"maximum":999999999},{"name":"sort","type":"enum","required":false,"description":"Order of the rows.","on_invalid":"reject","allowed_values":[{"value":"set_order","label":"The site's own order: series, then set, then rarity (default)"},{"value":"relevance","label":"Best keyword match first (needs keyword)"},{"value":"price_asc","label":"Cheapest in-stock price first (out of stock last)"},{"value":"price_desc","label":"Dearest in-stock price first (out of stock last)"},{"value":"best_selling_7d","label":"Most copies sold in the last 7 days"},{"value":"best_selling_30d","label":"Most copies sold in the last 30 days"},{"value":"recently_sold","label":"Most recently sold first"},{"value":"newest","label":"Newest listing first"},{"value":"price_updated","label":"Sale price changed most recently first"},{"value":"buyback_desc","label":"Highest buy-back price first (cards the shop is buying now)"}],"default":"set_order","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number; meta.last_page says how many there are (the shop serves the first 10,000 results of a search).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"per_page","type":"integer","required":false,"description":"Rows per page (1-100, default 30).","on_invalid":"reject","default":30,"example":50,"minimum":1,"maximum":100}],"returns":"rows[]: id (Ka-nabell product id — give it to `card`), game, name (product name as the shop writes it, Japanese kept; slabs read '(PSA10)N'), name_kana, card_name, card_name_kana, card_number, set{id, name, code, released_at}, series{id, name, code}, rarity{id, name, code}, card_id, graded + grader + grade (slabs), price_jpy (the cheapest condition IN STOCK — the site's 円〜 price; null when sold out), in_stock, stock (units, all conditions), conditions[]{condition (S/A/B/C/D/unassessed), condition_label (状態A, 未査定特価), price_jpy, stock, in_stock, arriving (units bought in, not shelved yet), last_price_change}, max_per_order, sale_listed, last_price_change{condition, price_jpy, previous_price_jpy (null = first price), direction, changed_at}, price_updated_at, sold_count_7d, sold_count_30d, last_sold_at, buyback_price_jpy (what Ka-nabell PAYS for a top-condition copy — S for Pokémon, A for Yu-Gi-Oh!/Duel Masters; published exactly when the shop's buy page prints it, i.e. while it still wants copies), buyback_status (buying / bulk_only — the shop takes it only inside a bulk まとめ買取 parcel and prints no price / closed), buyback_open, buyback_top_condition, buyback_rate_table{name (通常 / 良品 / 美品 / 完美品 …), percent_by_condition}, buyback_by_condition_jpy (top price × the site's published % per condition, rounded down — computed: the site prints the %, not the yen), buyback_wanted_qty (買取可能枚数), buyback_last_change, buyback_price_updated_at, buyback_price_guaranteed, legacy_card_id (old site's card id), image, images[], url (sale page), buyback_url, listed_at, currency (JPY), price_includes_tax (true). meta: total (the shop's own count), page, per_page, last_page, has_more, filters_applied, sort, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon","keyword":"ピカチュウ","in_stock":true}},{"name":"card","description":"One Ka-nabell card product in full: price and stock per condition grade, last price changes, sales in the last 7 / 30 days, the buy-back price with the shop's per-condition rate table and how many it still wants, the card's text and stats, images — plus the same card in the shop's other sets, rarities and PSA slabs with their prices.","required_params":["product_id"],"optional_params":["game","include_other_printings"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Ka-nabell product id (a row's `id`, a UUID) or a ka-nabell.com card URL (/ec/sell/<game>/single/<id> or /ec/buy/<game>/single/<id>).","on_invalid":"reject","example":"26427365-b237-4f8b-b575-c5e48c587d73","aliases":["id","url"]},{"name":"game","type":"enum","required":false,"description":"Optional: the game, when you know it (the id alone is enough).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon TCG"},{"value":"yugioh","label":"遊戯王OCG — Yu-Gi-Oh! OCG (Japanese)"},{"value":"duel_masters","label":"デュエル・マスターズ — Duel Masters"}],"example":"yugioh"},{"name":"include_other_printings","type":"boolean","required":false,"description":"Also list the same card in the shop's other sets / rarities / slabs (the site's 同名カードをさがす), with their prices — one more backend query.","on_invalid":"reject","default":true,"example":false,"aliases":["include_variants"]}],"returns":"card{id (Ka-nabell product id — give it to `card`), game, name (product name as the shop writes it, Japanese kept; slabs read '(PSA10)N'), name_kana, card_name, card_name_kana, card_number, set{id, name, code, released_at}, series{id, name, code}, rarity{id, name, code}, card_id, graded + grader + grade (slabs), price_jpy (the cheapest condition IN STOCK — the site's 円〜 price; null when sold out), in_stock, stock (units, all conditions), conditions[]{condition (S/A/B/C/D/unassessed), condition_label (状態A, 未査定特価), price_jpy, stock, in_stock, arriving (units bought in, not shelved yet), last_price_change}, max_per_order, sale_listed, last_price_change{condition, price_jpy, previous_price_jpy (null = first price), direction, changed_at}, price_updated_at, sold_count_7d, sold_count_30d, last_sold_at, buyback_price_jpy (what Ka-nabell PAYS for a top-condition copy — S for Pokémon, A for Yu-Gi-Oh!/Duel Masters; published exactly when the shop's buy page prints it, i.e. while it still wants copies), buyback_status (buying / bulk_only — the shop takes it only inside a bulk まとめ買取 parcel and prints no price / closed), buyback_open, buyback_top_condition, buyback_rate_table{name (通常 / 良品 / 美品 / 完美品 …), percent_by_condition}, buyback_by_condition_jpy (top price × the site's published % per condition, rounded down — computed: the site prints the %, not the yen), buyback_wanted_qty (買取可能枚数), buyback_last_change, buyback_price_updated_at, buyback_price_guaranteed, legacy_card_id (old site's card id), image, images[], url (sale page), buyback_url, listed_at, currency (JPY), price_includes_tax (true), attributes (the game's card data: Pokémon types, HP, moves, abilities, regulations, illustrators; Yu-Gi-Oh! level / ATK / DEF / attribute / race / monster types / text; Duel Masters civilizations, cost, power, races, text), sale_note, buyback_note}, other_printings[] (same row shape, without attributes). meta: other_printings_total.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"26427365-b237-4f8b-b575-c5e48c587d73"}},{"name":"buyback_search","description":"Ka-nabell's buy-back list (買取) for one game: what the shop PAYS for each card (top condition, with the % it pays for lower ones) and how many it still wants; filter by name, card number, set, rarity, buy-price range, the 買取強化 list and recent buy-price rises.","required_params":["game"],"optional_params":["keyword","set_id","series_id","rarity_id","card_number","buying_only","emphasized","min_buyback","max_buyback","price_trend","graded","card_kind","regulation","sort","page","per_page"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: pokemon, yugioh or duel_masters — the three Ka-nabell sells and buys (also accepted: ポケカ, 遊戯王, デュエマ, ygo, dm).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon TCG"},{"value":"yugioh","label":"遊戯王OCG — Yu-Gi-Oh! OCG (Japanese)"},{"value":"duel_masters","label":"デュエル・マスターズ — Duel Masters"}],"example":"pokemon"},{"name":"keyword","type":"string","required":false,"description":"Card name or keyword as the shop writes it — Japanese name or kana (ピカチュウ, ぴかちゅう), several words narrow it (リザードン SAR); a card number (QCCU-JP170, 180/171) also matches. The same matching the site's own search box uses.","on_invalid":"reject","example":"ピカチュウ","aliases":["query","q","name"]},{"name":"set_id","type":"integer","required":false,"description":"One set / expansion (the shop's pack id; the `sets` action lists them with names and codes, e.g. yugioh 876 = イモータル・フェニックス, pokemon 900 = 30th セレブレーション).","on_invalid":"reject","example":876,"minimum":1,"maximum":99999999,"aliases":["pack_id","set"]},{"name":"series_id","type":"integer","required":false,"description":"One series / block (the `sets` action lists series; yugioh 1 = 第13期).","on_invalid":"reject","example":1,"minimum":1,"maximum":99999999},{"name":"rarity_id","type":"string","required":false,"description":"One rarity: for pokemon the code (C, U, R, RR, RRR, SR, SAR, AR, UR, HR …); for yugioh and duel_masters the numeric id. The `rarities` action lists every value with its name.","on_invalid":"reject","example":"SAR","aliases":["rarity"]},{"name":"card_number","type":"string","required":false,"description":"Exact card number as printed: yugioh 'QCCU-JP170', pokemon '180/171' or '001/SV-P', duel_masters 'P36/Y21' (case-insensitive).","on_invalid":"reject","example":"QCCU-JP170","aliases":["number","serial_number"]},{"name":"buying_only","type":"boolean","required":false,"description":"Only cards the shop still wants (買取可能枚数 above 0).","on_invalid":"reject","default":false,"example":true},{"name":"emphasized","type":"boolean","required":false,"description":"Only the shop's 買取強化 list (cards it is pushing to buy).","on_invalid":"reject","default":false,"example":true,"aliases":["kaitori_kyouka"]},{"name":"min_buyback","type":"integer","required":false,"description":"Lowest buy-back price in JPY (top condition), as the buy site's 買取価格 filter; implies buying_only (a price is published only while the shop buys the card).","on_invalid":"reject","example":1000,"minimum":0,"maximum":99999999,"aliases":["min_price"]},{"name":"max_buyback","type":"integer","required":false,"description":"Highest buy-back price in JPY (top condition).","on_invalid":"reject","example":100000,"minimum":0,"maximum":99999999,"aliases":["max_price"]},{"name":"price_trend","type":"enum","required":false,"description":"Only cards whose last buy-price change in the last 30 days went up (the buy site's 買取価格アップ list) or down.","on_invalid":"reject","allowed_values":[{"value":"down","label":"The last change lowered the price (in the last 30 days, as the site's 値下げ / 価格ダウン lists)"},{"value":"up","label":"The last change raised the price (in the last 30 days, as the site's 価格アップ list)"}],"example":"up"},{"name":"graded","type":"boolean","required":false,"description":"Only graded slabs (PSA / BGS / CGC products such as '(PSA10)N'). Each row's graded, grader and grade say which.","on_invalid":"reject","default":false,"example":true,"aliases":["psa"]},{"name":"card_kind","type":"enum","required":false,"description":"Pokémon only: card kind, as the site's 種類 filter; comma-separate several (item,supporter).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"Pokémon cards"},{"value":"item","label":"Trainer: item (グッズ)"},{"value":"supporter","label":"Trainer: supporter (サポート)"},{"value":"stadium","label":"Trainer: stadium (スタジアム)"},{"value":"pokemon_tool","label":"Trainer: Pokémon tool (ポケモンのどうぐ)"},{"value":"basic_energy","label":"Basic energy"},{"value":"special_energy","label":"Special energy"}],"example":"supporter"},{"name":"regulation","type":"string","required":false,"description":"Pokémon only: format the card is legal in, as the site writes it (スタンダード, エクストラ, 殿堂).","on_invalid":"reject","example":"スタンダード"},{"name":"sort","type":"enum","required":false,"description":"Order of the rows.","on_invalid":"reject","allowed_values":[{"value":"set_order","label":"The site's own order: series, then set, then rarity (default)"},{"value":"relevance","label":"Best keyword match first (needs keyword)"},{"value":"buyback_desc","label":"Highest buy-back price first (cards the shop is buying now)"},{"value":"buyback_asc","label":"Lowest buy-back price first (cards the shop is buying now)"},{"value":"buyback_updated","label":"Buy price changed most recently first"},{"value":"newest","label":"Newest listing first"}],"default":"set_order","example":"buyback_desc"},{"name":"page","type":"integer","required":false,"description":"Page number; meta.last_page says how many there are (the shop serves the first 10,000 results of a search).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000},{"name":"per_page","type":"integer","required":false,"description":"Rows per page (1-100, default 30).","on_invalid":"reject","default":30,"example":50,"minimum":1,"maximum":100}],"returns":"rows[]: same row as search (buy-back fields first in importance: buyback_price_jpy, buyback_by_condition_jpy, buyback_rate_table, buyback_wanted_qty, buyback_last_change; the sale price and stock are on the same row). meta: total, page, per_page, last_page, has_more, filters_applied, sort.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"yugioh","sort":"buyback_desc"}},{"name":"sets","description":"Every set / expansion (収録) Ka-nabell lists for one game, with its code, series, release date and how many products it has and has in stock — the ids `search` takes as set_id.","required_params":["game"],"optional_params":["series_id"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: pokemon, yugioh or duel_masters — the three Ka-nabell sells and buys (also accepted: ポケカ, 遊戯王, デュエマ, ygo, dm).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon TCG"},{"value":"yugioh","label":"遊戯王OCG — Yu-Gi-Oh! OCG (Japanese)"},{"value":"duel_masters","label":"デュエル・マスターズ — Duel Masters"}],"example":"pokemon"},{"name":"series_id","type":"integer","required":false,"description":"Only the sets of one series.","on_invalid":"reject","example":1,"minimum":1,"maximum":99999999}],"returns":"sets[]{id, name, code, released_at, series{id, name, code}, products, products_in_stock, url}, series[]{id, name, code, sets, products} in the site's order.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"duel_masters"}},{"name":"rarities","description":"Every rarity Ka-nabell uses for one game with its id, name and abbreviation (the values `search` takes as rarity_id) and how many products have it.","required_params":["game"],"optional_params":[],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: pokemon, yugioh or duel_masters — the three Ka-nabell sells and buys (also accepted: ポケカ, 遊戯王, デュエマ, ygo, dm).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム — Pokémon TCG"},{"value":"yugioh","label":"遊戯王OCG — Yu-Gi-Oh! OCG (Japanese)"},{"value":"duel_masters","label":"デュエル・マスターズ — Duel Masters"}],"example":"pokemon"}],"returns":"rows[]: id, name, code, products, products_in_stock — in the site's rarity order.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon"}},{"name":"games","description":"The games Ka-nabell sells and buys (Pokémon, Yu-Gi-Oh!, Duel Masters) with live product, in-stock and open-for-buy-back counts and each game's condition scale.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: game, name, name_en, products, products_in_stock, products_open_for_buyback, conditions[], buyback_top_condition, sale_url, buyback_url.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"karrot","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Karrot / 당근 API (daangn.com) — Korea's neighbourhood second-hand marketplace, the country's biggest local classifieds: search a neighbourhood's listings by keyword, category and price, read a full listing with seller manners score and photos, and resolve Korean neighbourhood ids. Prices in Korean won. No account, no browser.","version":"0.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/karrot/v1","spec_available":true,"actions":[{"name":"search","description":"Search the second-hand listings of one Korean neighbourhood: listing id, title, full body text, price in won, whether it is still on sale, reserved or sold, the listing's own neighbourhood, the meeting point the seller pinned, posting and bump times, and the photo. Filter by keyword, category, price range and on-sale-only; category, price and on-sale are applied by daangn itself. `region_id` is required — daangn is a neighbourhood market and the site itself has no nationwide search, so there is no way to ask the whole country at once. There is also no sort and no pagination: one call returns the one page daangn serves for that neighbourhood (266-290 rows measured, variable by region). Every answer names its own `match_scope`, so you always know whether the keyword was matched by daangn's search index or against the live neighbourhood feed, and `related_keywords` gives daangn's own Korean suggestions for the term you asked for.","required_params":["region_id"],"optional_params":["query","category_id","price_min","price_max","on_sale_only"],"params":[{"name":"region_id","type":"string","required":true,"description":"Karrot neighbourhood id — daangn is a neighbourhood market and the site itself requires one, so there is no nationwide search. 6035 = 서울 강남구 역삼동. Find ids with the `regions` action, or read the number at the end of an `in=` url on daangn.com.","on_invalid":"reject","example":"6035","value_pattern":"\\d{1,7}","aliases":["region","in"]},{"name":"query","type":"string","required":false,"description":"Keyword. Karrot listings are written in Korean, so a Korean keyword matches far more than a latin one (아이폰 = iPhone, 자전거 = bicycle). Every answer names where the keyword was matched in `match_scope`: `site_index` is Karrot's own search, with its own ranking; `region_feed` means Karrot's keyword index was not answering at that moment, so the live neighbourhood feed was read and the keyword matched against each listing's title and body — real listings, from a narrower pool. A multi-word query needs every word to appear on the `region_feed` path.","on_invalid":"reject","example":"아이폰","aliases":["q","search","keyword"]},{"name":"category_id","type":"integer","required":false,"description":"Karrot category id from the `categories` action (1 = 디지털기기 / electronics, 5 = 여성의류 / women's clothing …).","on_invalid":"reject","example":1,"aliases":["category"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in Korean won (plain won, not 만: 100000 = ₩100,000). daangn only applies a price filter when a range is given, so passing one end fills the other in for you (0 … 100000000).","on_invalid":"reject","example":0,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in Korean won (plain won, not 만).","on_invalid":"reject","example":50000,"minimum":0},{"name":"on_sale_only","type":"boolean","required":false,"description":"Keep only listings that are still on sale (the site's 거래 가능만 보기 toggle) — drops reserved and sold ones.","on_invalid":"reject","default":false,"aliases":["only_on_sale"]}],"returns":"results[]{listing_id, title, url, description (the seller's own body text), price (won exactly as daangn published it; null when the source does not print a plain number), currency (KRW), status (on_sale|reserved|sold|null), status_code (the source's own word), instant_buy, region_name (the LISTING's own neighbourhood — daangn ranks by distance and does not fence the searched region), category (null: the search surface publishes no category id — use `detail`), meeting_point{lat, lng} (the pin the seller set, null when there is none), created_at, bumped_at, image}, count, total_results, match_scope (site_index = daangn's own keyword search answered, its ranking | region_feed = the keyword index was not serving, so the live neighbourhood feed was read and the keyword matched against each title and body | site_filters = no keyword was asked for), site_index_served, control_total_results (how many rows that region served unfiltered-by-keyword in the SAME call — present on the region_feed path, where it is the live control that makes an empty answer trustworthy), region{region_id, name, full_name}, filters_applied, related_keywords[] (daangn's own related-search suggestions for the keyword, in Korean), filtered_empty_confirmed (true only when a live feed was read in this call and genuinely carries no match), unparsable_rows_dropped, sponsored_rail_count (paid third-party ads daangn shows beside the list; they are NOT mixed into results), currency, has_more (always false — daangn serves one page, no sort and no pagination exist at the source), next_page, keyword_index_attempts","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"region_id":"6035"}},{"name":"detail","description":"One Karrot listing by id or URL: full description, price in won, sale status, category, the neighbourhood down to province / city / dong, view, favourite, chat and comment counts and the comments themselves, posting and bump times, every photo, the public seller (nickname, profile url, photo, 매너온도 manners score, review count and neighbourhood), and the listings daangn recommends beside it.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Listing id — the code at the end of a daangn listing url (www.daangn.com/kr/buy-sell/역삼동-월주차-20만원-k3kcgd4v7ump/) — or the full URL.","on_invalid":"reject","example":"k3kcgd4v7ump","aliases":["id","node_id","url","article_id"]}],"returns":"listing{listing_id, internal_id, title, url, description, price, currency, status, status_code, is_adult, category{id, name}, region{id, name, province, city, neighbourhood, country_code}, view_count, favorite_count, chat_count, comment_count, comments[] (daangn's comment objects as sent; empty on most listings), properties[]{name, value} (the seller's own declared spec rows, e.g. 사이즈 → \"L,66\"; an empty list when the seller declared none), created_at, bumped_at, images[], image, seller{id, nickname, url, image, manner_score, review_count, region{id, name, province, city, neighbourhood}}, related_listings[]{listing_id, title, url, price, image}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"k3kcgd4v7ump"}},{"name":"regions","description":"Resolve Korean neighbourhood ids for `search`. Give a known id to get its full name plus every neighbourhood daangn lists as adjacent to it; give nothing to get daangn's own popular-region list to start from. A name filter narrows either list.","required_params":[],"optional_params":["region_id","query"],"params":[{"name":"region_id","type":"string","required":false,"description":"A known Karrot neighbourhood id to look up. Its own name and the neighbourhoods daangn lists as adjacent to it come back. Leave it out to get daangn's own popular-region list to start from.","on_invalid":"reject","example":"6035","value_pattern":"\\d{1,7}","aliases":["region","in"]},{"name":"query","type":"string","required":false,"description":"Keep only regions whose Korean name (or its province/city part) contains this text.","on_invalid":"reject","example":"역삼","aliases":["q","name"]}],"returns":"regions[]{region_id, name, province, city, neighbourhood, depth}, count, seed_region{region_id, name, full_name}, query","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"region_id":"6035"}},{"name":"categories","description":"Karrot's own second-hand category list — every id `search`'s `category_id` accepts, with the Korean name daangn shows for it.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{category_id, name}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"kaspi","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Kaspi.kz API scraper — Kazakhstan's #1 marketplace: search by keyword or category with Kaspi's sort orders and filters, and read every product with specifications, variants, rating breakdown, every merchant's price and delivery promise per city, reviews and seller profiles. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/kaspi/v1","spec_available":true,"actions":[{"name":"search","description":"Search Kaspi Магазин by keyword or browse a category, with Kaspi's five sort orders and its own filters (brand, price band, category-specific attributes). 12 products a page: product id, title, brand, URL, images, price in KZT, Kaspi bonus amount, instalment plan, rating and review count, category path, delivery speed. Page 1 also returns the total, the filter list with counts and the category tree.","required_params":[],"optional_params":["query","category","filters","sort","page","city","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword, as typed on kaspi.kz (Russian, Kazakh or Latin). Optional when `category` is given.","on_invalid":"reject","example":"iphone","aliases":["q","text","keyword"]},{"name":"category","type":"string","required":false,"description":"A Kaspi category id (Smartphones, Refrigerators, Headphones — the `category` values search returns in `categories`) or a category URL (https://kaspi.kz/shop/c/smartphones/).","on_invalid":"reject","example":"Smartphones","aliases":["category_url"]},{"name":"filters","type":"array","required":false,"description":"Filter value ids exactly as returned in available_filters[].values[].id, e.g. ':manufacturerName:Samsung', ':price:100 000 - 149 999 т'. Ids the site does not apply come back in `ignored_filters`.","on_invalid":"reject","example":[":manufacturerName:Samsung"]},{"name":"sort","type":"enum","required":false,"description":"Kaspi's own five search orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Popular (site default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating","label":"Highest rated"},{"value":"newest","label":"Newest"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based, 12 products per page (Kaspi's page size).","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"city","type":"string","required":false,"description":"Buyer city: a Kaspi city code (almaty, nur-sultan = Astana, shymkent, karaganda, aktobe, taraz, pavlodar, ust-kamenogorsk, semey, atyrau, kostanai, kyzylorda, uralsk, petropavlovsk, aktau, turkestan, taldykorgan …, 320 in total) or its numeric id (750000000). Delivery promises, the set of merchants that deliver and search availability follow the city. Unknown → INVALID_PARAM.","on_invalid":"ignore","default":"almaty","example":"almaty"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many exits to try for a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[{position, product_id, group_id (variant group id ending in 'b', else null), title, brand, url, image, images[], price (the listing's lowest-offer price; product/detail price_min is live), currency, bonus_amount (Kaspi bonus cashback, not a discount), price_after_bonus, installment{months, monthly_payment}, credit_available, rating, rating_scale, review_count, category_id, category_path[], delivery_duration, has_variants, brand_official_partner, top_merchant_id, stickers[], sold_by_unit, unit_label, listed_at}], count, page, page_size, total_results (page 1), total_pages (page 1), available_filters (page 1)[{key, title, type, values[{id, label, count, active}]}], applied_filters[], ignored_filters[], categories (page 1)[{category, title, count, active, depth}], category, category_title, completions[], sponsored_dropped, page_notice, city{id, code, name, name_ru}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone"}},{"name":"product/detail","description":"One Kaspi product by id or URL: title, brand, images, category path, full specifications, description, variants (colour / size with their product ids), exact rating with 1-5 breakdown and counts, the cheapest price across merchants and the first page of merchant offers with price, pre-discount price, seller rating and delivery dates for the chosen city.","required_params":[],"optional_params":["product_id","url","city","offers_limit","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"Kaspi product id (the number at the end of a product URL; search rows return it as product_id).","on_invalid":"reject","example":"113137790","aliases":["id","sku"]},{"name":"url","type":"string","required":false,"description":"Alternative to product_id: a kaspi.kz product URL.","on_invalid":"reject","example":"https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/","aliases":["product_url"]},{"name":"city","type":"string","required":false,"description":"Buyer city: a Kaspi city code (almaty, nur-sultan = Astana, shymkent, karaganda, aktobe, taraz, pavlodar, ust-kamenogorsk, semey, atyrau, kostanai, kyzylorda, uralsk, petropavlovsk, aktau, turkestan, taldykorgan …, 320 in total) or its numeric id (750000000). Delivery promises, the set of merchants that deliver and search availability follow the city. Unknown → INVALID_PARAM.","on_invalid":"ignore","default":"almaty","example":"almaty"},{"name":"offers_limit","type":"integer","required":false,"description":"How many merchant offers (cheapest first) to include, 1-50.","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many exits to try for a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, title, name, brand, url, images[], category_path[], category_ids[], master_category, description, description_ai_generated, specifications[{group, name, code, value, unit}], refund_period_days, max_quantity_per_order, age_restricted, listed_at, size_table_code, group_id, variants[{product_id, attributes[{name, value, size_system}], selected, image}], rating, rating_scale, rating_count, review_count, review_photo_count, rating_breakdown{'5'..'1'}, price_min (cheapest live offer), price_max (only when every offer was read), currency, offers_total, offers_returned, offers[{position, seller{id, name, rating, rating_scale, review_count}, price, was_price (only when the merchant shows a higher pre-discount price), discount_percent, currency, seller_sku, title, delivery_duration (EXPRESS|TODAY|TOMORROW|TILL_2_DAYS|TILL_5_DAYS|TILL_7_DAYS|OTHER), delivery_type, earliest_delivery_at, pickup_at, postomat_at, kaspi_delivery, preorder_days, delivery_options[{type, delivery_at, days, cost, free_from_order_total, kaspi_delivery, intercity}]}], delivery_duration_counts{}, available (any offer in this city)}, city{id, code, name, name_ru}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"113137790"}},{"name":"product/offers","description":"Every merchant offer for one Kaspi product in a city, paged: seller with rating and review count, price, pre-discount price, delivery speed and dates for courier, pickup and postomat, delivery cost and free-delivery threshold, preorder days.","required_params":[],"optional_params":["product_id","url","city","sort","page","limit","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"Kaspi product id (the number at the end of a product URL; search rows return it as product_id).","on_invalid":"reject","example":"113137790","aliases":["id","sku"]},{"name":"url","type":"string","required":false,"description":"Alternative to product_id: a kaspi.kz product URL.","on_invalid":"reject","example":"https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/","aliases":["product_url"]},{"name":"city","type":"string","required":false,"description":"Buyer city: a Kaspi city code (almaty, nur-sultan = Astana, shymkent, karaganda, aktobe, taraz, pavlodar, ust-kamenogorsk, semey, atyrau, kostanai, kyzylorda, uralsk, petropavlovsk, aktau, turkestan, taldykorgan …, 320 in total) or its numeric id (750000000). Delivery promises, the set of merchants that deliver and search availability follow the city. Unknown → INVALID_PARAM.","on_invalid":"ignore","default":"almaty","example":"almaty"},{"name":"sort","type":"enum","required":false,"description":"Kaspi's own three offer orders.","on_invalid":"reject","allowed_values":[{"value":"price","label":"Cheapest first"},{"value":"rating","label":"Best-rated merchant first"},{"value":"popular","label":"Most popular merchant first"}],"default":"price"},{"name":"page","type":"integer","required":false,"description":"Offer page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Offers per page, 1-50.","on_invalid":"reject","default":20,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many exits to try for a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product_id, offers[{position, seller{id, name, rating, rating_scale, review_count}, price, was_price (only when the merchant shows a higher pre-discount price), discount_percent, currency, seller_sku, title, delivery_duration (EXPRESS|TODAY|TOMORROW|TILL_2_DAYS|TILL_5_DAYS|TILL_7_DAYS|OTHER), delivery_type, earliest_delivery_at, pickup_at, postomat_at, kaspi_delivery, preorder_days, delivery_options[{type, delivery_at, days, cost, free_from_order_total, kaspi_delivery, intercity}]}], offers_returned, offers_total, total_pages, page, limit, sort, delivery_duration_counts{}, city{id, code, name, name_ru}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/"}},{"name":"product/reviews","description":"Reviews of one Kaspi product, paged: stars, date, text, pros and cons, helpful count, photos and the merchant it was bought from, plus the exact average, the 1-5 breakdown and the size of each review group, and the reviewer's display name and order number as Kaspi publishes them.","required_params":[],"optional_params":["product_id","url","sort","filter","page","limit","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"Kaspi product id (the number at the end of a product URL; search rows return it as product_id).","on_invalid":"reject","example":"113137790","aliases":["id","sku"]},{"name":"url","type":"string","required":false,"description":"Alternative to product_id: a kaspi.kz product URL.","on_invalid":"reject","example":"https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/","aliases":["product_url"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Most helpful first (site default)"},{"value":"newest","label":"Newest first"}],"default":"popular"},{"name":"filter","type":"enum","required":false,"description":"Which reviews to list; `counts` returns the size of every group.","on_invalid":"reject","allowed_values":[{"value":"with_text","label":"Reviews with text (site default)"},{"value":"all","label":"All ratings"},{"value":"with_photos","label":"With photos"},{"value":"positive","label":"Positive"},{"value":"negative","label":"Negative"}],"default":"with_text"},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":5000},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-100.","on_invalid":"reject","default":20,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many exits to try for a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product_id, reviews[{review_id, author, order_number, rating, date, text, pros, cons, helpful_count, images[], seller{code, name}, edited}], reviews_returned, reviews_total (for the chosen filter), total_pages, page, limit, sort, filter, rating, rating_scale, rating_breakdown{'5'..'1'}, counts{all, with_text, with_photos, positive, negative}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/"}},{"name":"seller/detail","description":"A Kaspi merchant's public profile: name, logo, rating and review count, Kaspi status, the share of cancelled, returned and late orders, order-volume bracket and legal address.","required_params":["seller_id"],"optional_params":["city","max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Kaspi merchant id, as returned in offers[].seller.id.","on_invalid":"reject","example":"30027560","aliases":["merchant_id"]},{"name":"city","type":"string","required":false,"description":"Buyer city: a Kaspi city code (almaty, nur-sultan = Astana, shymkent, karaganda, aktobe, taraz, pavlodar, ust-kamenogorsk, semey, atyrau, kostanai, kyzylorda, uralsk, petropavlovsk, aktau, turkestan, taldykorgan …, 320 in total) or its numeric id (750000000). Delivery promises, the set of merchants that deliver and search availability follow the city. Unknown → INVALID_PARAM.","on_invalid":"ignore","default":"almaty","example":"almaty"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many exits to try for a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"seller{seller_id, name, logo, active, rating, rating_scale, review_count, status, new_seller, cancelled_orders_percent, returned_orders_percent, late_delivery_percent, orders_total_bracket, legal_address}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"30027560"}}]},{"name":"kaufland","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Kaufland marketplace API scraper — search kaufland.de, .cz, .sk, .pl and .at and read full product records: buy-box price with UVP and struck price kept apart, every seller's new and used offer with shipping, EAN, specifications, variants, ratings and reviews. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/kaufland/v1","spec_available":true,"actions":[{"name":"search","description":"Search a Kaufland storefront by keyword or browse a category, 40 rows per page: product id, title, brand, EAN, image, price with the site's struck price and the manufacturer's UVP as separate fields, unit price, coupon, condition (new / refurbished / used), seller and whether Kaufland itself sells it, shipping cost, delivery window, rating and review count, lowest used and refurbished offer price, and whether the row is a sponsored ad. Filter by price range, manufacturer, minimum rating, deals only or any storefront facet; sort the way the site does.","required_params":[],"optional_params":["query","category","country","page","sort","min_price","max_price","brand_id","min_rating","deals_only","filters","include_filters","include_sponsored","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"What to search for on the storefront, in its language ('staubsauger', 'kava', 'kawa'). Optional when `category` is given.","on_invalid":"reject","example":"kaffeevollautomat","aliases":["q","keyword","search_value"]},{"name":"category","type":"string","required":false,"description":"Browse (or narrow a search to) a category: its numeric id (5921) or a Kaufland category URL (…/c/kaffeepulver/~5921/). Ids come from `filters.categories`, `category` on rows and `breadcrumb` on product/detail.","on_invalid":"reject","example":"5921","aliases":["category_id","category_url"]},{"name":"country","type":"enum","required":false,"description":"Which Kaufland country to read. Marketplace: de/cz/sk/pl/at. Retail promotions: ro/bg/hr/md (search and product/detail only), with RON/EUR/EUR/MDL respectively. A marketplace URL in product_id/category sets it automatically. Unknown values are rejected.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — kaufland.de (EUR)"},{"value":"cz","label":"Czechia — kaufland.cz (CZK)"},{"value":"sk","label":"Slovakia — kaufland.sk (EUR)"},{"value":"pl","label":"Poland — kaufland.pl (PLN)"},{"value":"at","label":"Austria — kaufland.at (EUR)"},{"value":"ro","label":"Romania"},{"value":"bg","label":"Bulgaria"},{"value":"hr","label":"Croatia"},{"value":"md","label":"Moldova"}],"default":"de","example":"de","aliases":["market"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. 40 rows per page; the site stops at 10 000 results (page 250).","on_invalid":"reject","default":1,"minimum":1,"maximum":250},{"name":"sort","type":"enum","required":false,"description":"Result order — the orderings the storefront itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Kaufland's default order (includes sponsored rows)"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"rating","label":"Best customer rating first"},{"value":"newest","label":"Newest listings first"},{"value":"bestsellers","label":"Best sellers first"}],"default":"relevance"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in the storefront currency (inclusive).","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in the storefront currency (inclusive).","on_invalid":"reject","minimum":0},{"name":"brand_id","type":"string","required":false,"description":"Only this manufacturer: the numeric `id` from `filters.brands` (51451 = Jacobs on kaufland.de), or `brand_id` from product/detail.","on_invalid":"reject","example":"51451","aliases":["manufacturer_id"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-4).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"deals_only","type":"boolean","required":false,"description":"Only products currently on a deal (the storefront's 'Angebote' filter).","on_invalid":"reject","default":false},{"name":"filters","type":"object","required":false,"description":"Advanced: extra storefront facets as {key: value}, using `filters.attributes[].key` and a `values[].value` from a previous search with include_filters=true (e.g. {\"3284\": \"1394137\"}).","on_invalid":"reject"},{"name":"include_filters","type":"boolean","required":false,"description":"Also return the facet panel (categories, manufacturers, price bands, attribute filters) for this search. One extra upstream call.","on_invalid":"reject","default":false},{"name":"include_sponsored","type":"boolean","required":false,"description":"Kaufland mixes paid (sponsored) products into the default order. Default false: they are left out and counted in sponsored_dropped. true: they are returned in place with sponsored: true.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no product on page 1 contains a query word, Kaufland's rows are loose matches. Default false: results is empty and fallback_results_dropped counts them. true: they are returned apart, in fallback_results.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id, offer_id, title, brand, ean (GTIN-validated), url, image, images[], sponsored, price, currency, was_price (the storefront's struck price, null when none), discount_percent, rrp (UVP manufacturer's recommended price — NOT a was-price), rrp_discount_percent, unit_price{price, unit}, voucher{code_title, discount, discount_type, discount_amount, vouchers_total, vouchers_redeemed} (a coupon to redeem — NOT applied to price), price_with_voucher (the coupon price the product page headlines; null without a coupon), top_price, condition{key, code, is_new}, seller{id, name, company_name, is_kaufland}, shipping_cost, delivery{min_workdays, max_workdays, earliest_date, latest_date}, available, sold_out, rating (1-5, null when unrated), review_count, rating_scale, refurbished_offers_from_price (cheapest used/refurbished offer), category{id, name}, badges[]}, count (organic rows), sponsored_dropped, sponsored_included, unavailable_dropped, page, page_size (40), total_results (the site's count), total_results_capped (true when the site's 10 000 cap is hit), total_pages, has_more, page_notice, query, category_id, sort, country, currency, applied_filters, keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[] (opt-in), filters{categories[]{id, name}, brands[]{id, name}, price_bands[]{min, max}, min_rating[], attributes[]{key, name, type, unit, values[]{value, label}}} (with include_filters=true)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"ro","query":"lapte"}},{"name":"product/detail","description":"The full Kaufland product record by id or URL: title, brand, EAN, MPN, category and breadcrumb, buy-box price with shipping cost and total, UVP and the site's struck price kept apart, unit price, coupon, condition of the buy-box offer, seller with return period and whether it is Kaufland itself, delivery window and ships-from country, every other seller's new and used/refurbished offer with shipping and total price, the cheapest offer vs the buy box, rating with per-star breakdown, all images, description, the full specifications table and colour/size variants.","required_params":["product_id"],"optional_params":["country","max_rotations","offer_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Kaufland product id as returned in `product_id` by `search` (434682098), or a full kaufland.* product URL (…/product/434682098/). Ids are shared across storefronts, prices are not.","on_invalid":"reject","example":"434682098","aliases":["id","url","item_id"]},{"name":"country","type":"enum","required":false,"description":"Which Kaufland country to read. Marketplace: de/cz/sk/pl/at. Retail promotions: ro/bg/hr/md (search and product/detail only), with RON/EUR/EUR/MDL respectively. A marketplace URL in product_id/category sets it automatically. Unknown values are rejected.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — kaufland.de (EUR)"},{"value":"cz","label":"Czechia — kaufland.cz (CZK)"},{"value":"sk","label":"Slovakia — kaufland.sk (EUR)"},{"value":"pl","label":"Poland — kaufland.pl (PLN)"},{"value":"at","label":"Austria — kaufland.at (EUR)"},{"value":"ro","label":"Romania"},{"value":"bg","label":"Bulgaria"},{"value":"hr","label":"Croatia"},{"value":"md","label":"Moldova"}],"default":"de","example":"de","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8},{"name":"offer_id","type":"string","required":false,"description":"Retail countries only: optional campaign identity returned by search. Product IDs retain leading zeros.","on_invalid":"reject"}],"returns":"product{product_id, url, title, brand, brand_id, brand_url, ean, eans[] (every GTIN the product carries), mpn, category{id, name}, breadcrumb[]{id, name, url}, price, currency, was_price, discount_percent, rrp, rrp_discount_percent, unit_price, voucher, price_with_voucher, top_price, in_stock, buy_box{offer_id, price, currency, shipping_cost, total_price, condition{key, code, is_new, seller_note}, seller{id, name, is_kaufland, return_period_days, shop_url}, delivery{text, max_workdays, earliest_date, latest_date, ships_from_country, fulfillment_type, next_day_available}, stock_quantity, other_new_offers, other_used_offers}, sold_by_kaufland, offers_summary{offers_count, new_offers_count, used_or_refurbished_offers_count, cheapest_offer, cheapest_new_offer, buy_box_is_cheapest_new}, offers[]{offer_id, is_buy_box, price, shipping_cost, total_price, currency, condition, seller, delivery, fulfillment_type}, refurbished_alternatives[], rating, review_count, rating_scale, rating_breakdown{'1'..'5'}, images[], description, specifications[]{id, name, value}, variants[]{dimension, dimension_name, options[]{title, product_id, selected, url}}, is_bestseller, adult_only, listed_in_countries[], country}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"434682098"}},{"name":"product/offers","description":"Every offer on one Kaufland product: each seller's new and used/refurbished offer with price, shipping cost, total price, condition and seller note, delivery window and return period, which offer holds the buy box, the cheapest offer and cheapest new offer by total price, and refurbished alternatives. Cheaper than product/detail when only prices and sellers are needed.","required_params":["product_id"],"optional_params":["country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Kaufland product id as returned in `product_id` by `search` (434682098), or a full kaufland.* product URL (…/product/434682098/). Ids are shared across storefronts, prices are not.","on_invalid":"reject","example":"434682098","aliases":["id","url","item_id"]},{"name":"country","type":"enum","required":false,"description":"Which Kaufland country to read. Marketplace: de/cz/sk/pl/at. Retail promotions: ro/bg/hr/md (search and product/detail only), with RON/EUR/EUR/MDL respectively. A marketplace URL in product_id/category sets it automatically. Unknown values are rejected.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — kaufland.de (EUR)"},{"value":"cz","label":"Czechia — kaufland.cz (CZK)"},{"value":"sk","label":"Slovakia — kaufland.sk (EUR)"},{"value":"pl","label":"Poland — kaufland.pl (PLN)"},{"value":"at","label":"Austria — kaufland.at (EUR)"},{"value":"ro","label":"Romania"},{"value":"bg","label":"Bulgaria"},{"value":"hr","label":"Croatia"},{"value":"md","label":"Moldova"}],"default":"de","example":"de","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product_id, url, country, currency, buy_box{…as in product/detail}, offers[]{offer_id, is_buy_box, price, shipping_cost, total_price, currency, condition{key, code, is_new, seller_note}, seller{id, name, is_kaufland, return_period_days, shop_url}, delivery{text, earliest_date, latest_date}, fulfillment_type}, offers_count, new_offers_count, used_or_refurbished_offers_count, cheapest_offer, cheapest_new_offer, buy_box_is_cheapest_new, refurbished_alternatives[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"434682098"}},{"name":"product/reviews","description":"Customer reviews of one Kaufland product: star rating, title, text, date, the reviewer id Kaufland publishes (author), verified purchase, product-test flag, which storefront it was written on with any translation, plus the product's average rating, total review count, per-star breakdown and Kaufland's AI summary of the reviews. Sort newest, oldest or by stars; page through all of them.","required_params":["product_id"],"optional_params":["country","page","page_size","sort","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Kaufland product id as returned in `product_id` by `search` (434682098), or a full kaufland.* product URL (…/product/434682098/). Ids are shared across storefronts, prices are not.","on_invalid":"reject","example":"434682098","aliases":["id","url","item_id"]},{"name":"country","type":"enum","required":false,"description":"Which Kaufland country to read. Marketplace: de/cz/sk/pl/at. Retail promotions: ro/bg/hr/md (search and product/detail only), with RON/EUR/EUR/MDL respectively. A marketplace URL in product_id/category sets it automatically. Unknown values are rejected.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — kaufland.de (EUR)"},{"value":"cz","label":"Czechia — kaufland.cz (CZK)"},{"value":"sk","label":"Slovakia — kaufland.sk (EUR)"},{"value":"pl","label":"Poland — kaufland.pl (PLN)"},{"value":"at","label":"Austria — kaufland.at (EUR)"},{"value":"ro","label":"Romania"},{"value":"bg","label":"Bulgaria"},{"value":"hr","label":"Croatia"},{"value":"md","label":"Moldova"}],"default":"de","example":"de","aliases":["market"]},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"rating_desc","label":"Highest star rating first"},{"value":"rating_asc","label":"Lowest star rating first"},{"value":"site_default","label":"Kaufland's default order (helpfulness score)"}],"default":"newest"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[]{review_id, author, rating, title, text, date (YYYY-MM-DD), verified_purchase, product_test, external_source, storefront, language, translated_title, translated_text, media_count, variant}, count, page, page_size, total_reviews, total_pages, has_more, sort, average_rating, rating_scale, rating_breakdown{'1'..'5'}, ai_summary, product_id, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"434682098"}},{"name":"search/suggest","description":"Kaufland's own search-box suggestions for a partial keyword on the chosen storefront.","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far (at least 2 characters).","on_invalid":"reject","example":"kaffee","aliases":["q","term","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Kaufland country to read. Marketplace: de/cz/sk/pl/at. Retail promotions: ro/bg/hr/md (search and product/detail only), with RON/EUR/EUR/MDL respectively. A marketplace URL in product_id/category sets it automatically. Unknown values are rejected.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — kaufland.de (EUR)"},{"value":"cz","label":"Czechia — kaufland.cz (CZK)"},{"value":"sk","label":"Slovakia — kaufland.sk (EUR)"},{"value":"pl","label":"Poland — kaufland.pl (PLN)"},{"value":"at","label":"Austria — kaufland.at (EUR)"},{"value":"ro","label":"Romania"},{"value":"bg","label":"Bulgaria"},{"value":"hr","label":"Croatia"},{"value":"md","label":"Moldova"}],"default":"de","example":"de","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"suggestions[], count, query, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kaffee"}}]},{"name":"kavak","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Kavak — used cars in Mexico, Argentina and Chile with cash and credit price","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kavak/v1","spec_available":true,"actions":[{"name":"search","description":"Search the used cars Kavak sells from its own stock in ONE country (mx, ar or cl) by make, model, free text, region, branch, fuel, gearbox, body type, colour, driven wheels, availability, seats, price, model year and mileage, in Kavak's seven sort orders. Returns the source's own total, 30 cars per page with the price the card prints and what KIND of price it is (Kavak-credit 'from' price or cash), the monthly payment (Mexico), mileage, region, reservation status and photo. `country` is required; every other parameter is optional.","required_params":["country"],"optional_params":["make","model","query","city","branch","fuel","transmission","body_type","color","drive","status","passengers","price_min","price_max","year_min","year_max","mileage_min","mileage_max","sort","page"],"params":[{"name":"country","type":"enum","required":false,"description":"ONE Kavak country: mx (Mexico, MXN), ar (Argentina, ARS), cl (Chile, CLP). One call per country. Measured 2026-10-14 stock: mx 8,437 · ar 1,375 · cl 1,215 cars.","on_invalid":"reject","allowed_values":[{"value":"mx","label":"Mexico — MXN"},{"value":"ar","label":"Argentina — ARS"},{"value":"cl","label":"Chile — CLP"}],"example":"mx"},{"name":"make","type":"string","required":false,"description":"Make slug as Kavak writes it (lower case): nissan, toyota, volkswagen, mercedes_benz, alfa_romeo… Comma-separate several. Action `makes` lists the makes in stock per country with their model slugs. Measured: mx nissan = 800 cars. An unknown slug returns an empty result with a warning.","on_invalid":"reject","example":"nissan","aliases":["brand","marca","maker"]},{"name":"model","type":"string","required":false,"description":"Model slug under `make` (e.g. versa, hilux); comma-separate several. Needs `make`. Measured: mx nissan/versa = 219 cars.","on_invalid":"reject","example":"versa","aliases":["modelo"]},{"name":"query","type":"string","required":false,"description":"Free text matched by Kavak's own search (make, model or trim words). Measured: mx `versa` = 221, ar `hilux` = 13.","on_invalid":"reject","example":"versa","aliases":["q","keyword"]},{"name":"city","type":"string","required":false,"description":"Region slug (Kavak's `region`): mx has 23 (ciudad_de_mexico, monterrey, guadalajara, cancun…), ar buenos_aires, cl metropolitana_de_santiago. Action `makes` lists them. Measured: mx ciudad_de_mexico = 5,266, cancun = 38.","on_invalid":"reject","example":"ciudad_de_mexico","aliases":["region"]},{"name":"branch","type":"string","required":false,"description":"Branch slug inside a region (Kavak's `location`), e.g. antara_fashion_hall (mx), kavak_tigre (ar), movicenter (cl); action `makes` lists them. Measured: ar kavak_tigre = 239.","on_invalid":"reject","example":"kavak_tigre","aliases":["location","sucursal"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel (comma-separate several); petrol is `gasolina` in mx/cl and `nafta` in ar. Measured: mx diesel 43, ar petrol 1,202, cl diesel 118.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"countries: mx, ar, cl"},{"value":"premium_petrol","label":"countries: ar, cl"},{"value":"diesel","label":"countries: mx, ar, cl"},{"value":"hybrid","label":"countries: mx, ar, cl"},{"value":"electric","label":"countries: mx, ar, cl"},{"value":"ethanol","label":"countries: ar"}],"example":"diesel","aliases":["fuel_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. Measured: mx manual 1,536, cl manual 541.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"countries: mx, ar, cl"},{"value":"manual","label":"countries: mx, ar, cl"}],"example":"automatic","aliases":["gearbox"]},{"name":"body_type","type":"enum","required":false,"description":"Body type as Kavak names it (comma-separate several); `camioneta` is Kavak's SUV/van-style class, `doble_cabina` a double-cab pickup (mx). Measured: mx pickup 295, ar pickup 92.","on_invalid":"reject","allowed_values":[{"value":"suv","label":"countries: mx, ar, cl"},{"value":"sedan","label":"countries: mx, ar, cl"},{"value":"hatchback","label":"countries: mx, ar, cl"},{"value":"pickup","label":"countries: mx, ar, cl"},{"value":"camioneta","label":"countries: mx, ar, cl"},{"value":"doble_cabina","label":"countries: mx, ar, cl"},{"value":"minivan","label":"countries: mx, ar, cl"},{"value":"coupe","label":"countries: mx, ar, cl"},{"value":"van","label":"countries: mx, ar, cl"},{"value":"convertible","label":"countries: mx, ar, cl"},{"value":"wagon","label":"countries: mx, ar, cl"},{"value":"comercial_todoterreno","label":"countries: mx, ar, cl"},{"value":"targa","label":"countries: mx, ar, cl"},{"value":"scooter","label":"countries: mx, ar, cl"}],"example":"suv","aliases":["body"]},{"name":"color","type":"enum","required":false,"description":"Exterior colour (comma-separate several). Measured: mx red 947, cl red 100.","on_invalid":"reject","allowed_values":[{"value":"white","label":"countries: mx, ar, cl"},{"value":"grey","label":"countries: mx, ar, cl"},{"value":"black","label":"countries: mx, ar, cl"},{"value":"silver","label":"countries: mx, ar, cl"},{"value":"red","label":"countries: mx, ar, cl"},{"value":"blue","label":"countries: mx, ar, cl"},{"value":"orange","label":"countries: mx, ar, cl"},{"value":"brown","label":"countries: mx, ar, cl"},{"value":"green","label":"countries: mx, ar, cl"},{"value":"beige","label":"countries: mx, ar, cl"},{"value":"gold","label":"countries: mx, ar, cl"},{"value":"yellow","label":"countries: mx, ar, cl"},{"value":"purple","label":"countries: mx, ar, cl"},{"value":"other","label":"countries: mx, ar, cl"}],"example":"white","aliases":["colour"]},{"name":"drive","type":"enum","required":false,"description":"Driven wheels. Kavak Mexico classes cars as 4x2/4x4 only; Argentina as front/rear/4x4; Chile uses all four. Measured: mx 4x4 1,070, ar front 1,251.","on_invalid":"reject","allowed_values":[{"value":"front","label":"countries: ar, cl"},{"value":"rear","label":"countries: ar, cl"},{"value":"4x4","label":"countries: mx, ar, cl"},{"value":"4x2","label":"countries: mx, cl"}],"example":"4x4","aliases":["traction"]},{"name":"status","type":"enum","required":false,"description":"`available` or `reserved` (another buyer holds it). Measured: mx reserved 2,484, ar 459, cl 185.","on_invalid":"reject","allowed_values":[{"value":"available","label":"countries: mx, ar, cl"},{"value":"reserved","label":"countries: mx, ar, cl"}],"example":"available"},{"name":"passengers","type":"string","required":false,"description":"Seat count(s), e.g. 7 or 5,7. Measured: mx 7 seats = 593.","on_invalid":"reject","example":"7","aliases":["seats"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in the country's currency (MXN / ARS / CLP), as Kavak applies it: on a car with a promotion (Argentina's 'Precio financiando 50%') Kavak compares the price BEFORE the promotion, so a row's `price` can sit just below the range (measured 1 of 30 rows, ar 20M-30M).","on_invalid":"reject","example":200000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in the country's currency, applied by Kavak to the price before any promotion (see price_min).","on_invalid":"reject","example":300000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Oldest model year.","on_invalid":"reject","example":2020,"minimum":1990,"maximum":2027},{"name":"year_max","type":"integer","required":false,"description":"Newest model year.","on_invalid":"reject","example":2024,"minimum":1990,"maximum":2027},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading, km.","on_invalid":"reject","example":0,"minimum":0,"aliases":["km_min"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading, km.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["km_max"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (Kavak's own seven).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevancia — site default"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"year_desc","label":"Newest model year first"},{"value":"year_asc","label":"Oldest model year first"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"}],"default":"relevance","example":"price_asc","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Page number; 30 cars per page. `summary.last_page` and `summary.has_more` come from the source's own total. A page past the last returns no rows (the source never repeats a page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"`{rows[], summary{country, currency, total_results, page, rows_per_page, last_page, has_more, past_last_page, reserved_on_page, filters_applied}}`. Each row: id + country (the values `detail` takes), url (pins the car with ?id=), url_as_published, title, make, model, trim, year, price + currency (MXN/ARS/CLP), price_kind (`from_financed` = Kavak-credit price, `cash`) + price_label_as_published, price_as_published, promotion_price + price_before_promotion + on_promotion (Kavak's promotion, e.g. Argentina's 'Precio financiando 50%' price), price_mismatch, monthly_payment + monthly_payment_as_published (Mexico), mileage_km, transmission, color, city, status (available/reserved), reserved, badges[], listing_type, seller {name: Kavak, type}, photo_url.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"mx","make":"nissan","model":"versa"}},{"name":"detail","description":"One Kavak car by `country` + `id` (both from a search row) or by its kavak.com URL with ?id=: cash price and Kavak-credit price side by side with the service fee and totals of each, the initial down payment of the credit simulator, VIN, mileage, fuel, engine, power, doors, seats, body, colour, equipment highlights and the full feature list, the branch with address and coordinates, delivery time, reservation status, imperfection photos, all photos and similar cars.","required_params":[],"optional_params":["country","id","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Country of the car (mx, ar, cl) — the `country` of the search row. Required with `id`.","on_invalid":"reject","allowed_values":[{"value":"mx","label":"Mexico"},{"value":"ar","label":"Argentina"},{"value":"cl","label":"Chile"}],"example":"mx"},{"name":"id","type":"string","required":false,"description":"Kavak stock id from a search row (`id`), e.g. 554720. Either `id` (+ `country`) or `url`.","on_invalid":"reject","example":"554720","aliases":["stock_id","car_id","listing_id"]},{"name":"url","type":"string","required":false,"description":"Alternative to `id`: a kavak.com vehicle URL carrying ?id=<stock id> (the `url` of a search row).","on_invalid":"reject","example":"https://www.kavak.com/mx/usado/mg-mg5-15_excite_cvt-sedan-2024?id=554720","aliases":["listing_url","link"]}],"returns":"One car: id, country, url, title, make, model, trim, year, vin, price, currency, price_cash, price_cash_label, service_fee_cash, total_cash, price_financed, price_financed_label, service_fee_financed, total_financed, initial_down_payment, price_note, promotion_price, on_promotion, promotion_name, ld_price, ld_price_mismatch, ld_availability, mileage_km, fuel, body_type, engine_litres, power_hp, cylinders, gears, engine_type, doors, passengers, color, status, reserved, available_to_buy, badges[], delivery_time, city, parked_at, financing_only, seller{name, type, branch, branch_id, address, latitude, longitude}, equipment_highlights[]{name, category}, features[]{group, code, name, value}, imperfection_photo_count, imperfection_photos[]{url, side}, photo_count, photos[], similar_ids[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.kavak.com/mx/usado/mg-mg5-15_excite_cvt-sedan-2024?id=554720"}},{"name":"makes","description":"For ONE country: the makes Kavak has in stock with each make's model slugs (the values `search` takes as `make` and `model`), the regions with their branches, the model years, the source's own value lists, and the engine's fuel, gearbox, body, colour, drive, status and sort vocabularies valid for that country.","required_params":["country"],"optional_params":[],"params":[{"name":"country","type":"enum","required":false,"description":"ONE Kavak country: mx (Mexico, MXN), ar (Argentina, ARS), cl (Chile, CLP). One call per country. Measured 2026-10-14 stock: mx 8,437 · ar 1,375 · cl 1,215 cars.","on_invalid":"reject","allowed_values":[{"value":"mx","label":"Mexico — MXN"},{"value":"ar","label":"Argentina — ARS"},{"value":"cl","label":"Chile — CLP"}],"example":"mx"}],"returns":"`{country, currency, total_cars, makes[]{slug, name, models[]{slug, name}}, regions[]{slug, name, branches[]{slug, name}}, years[], source_values{}, fuels[], transmissions[], body_types[], colors[], drives[], statuses[], sorts[]}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"cl"}}]},{"name":"keh","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"KEH API — live used photo and video gear from keh.com, the United States' largest managed second-hand camera store. KEH buys, inspects, grades and warranties every item itself, so a listing is one model held in KEH's own cosmetic grades (New, Like New, Like New Minus, Excellent Plus, Excellent, Bargain, Ugly, As Is). Search or browse the whole 54,000-product catalogue — 7,500 of them in stock today — by keyword, brand, KEH's own grade, category, system, gear type, lens mount, sensor or film format, megapixels, film type, filter thread and type, prime vs zoom, focus type, maximum aperture, focal length, memory-card type, special optical design, TTL flash system, intended use and price; pull the live filter taxonomy with counts for any slice of it; walk KEH's 135-node category tree; autocomplete a half-typed model name; or read one product's full record with its spec sheet, which grades KEH holds of it, how many units and its description. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/keh/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse KEH's catalogue. Pass `query`, or any combination of the twenty-six filters, or nothing at all to walk the whole shop. Every row carries KEH's own product id, title (with the brace shorthand KEH prints in it pulled out as `title_tokens`), brand, price, how many units are in stock, the product URL, image and description. `meta.total_results` is KEH's own exact match count for the request, so a filter that bites and a filter that is ignored are told apart without guessing, and `meta.search_page_url` is the public KEH page that shows the same slice. IN-STOCK ONLY BY DEFAULT: 46,946 of the 54,499 indexed products are sold out and their indexed price is stale, so pass `in_stock=any` if you want those records too. NOTE `price` is the CHEAPEST grade's price — the catalogue index carries no per-grade price (measured against the product page: one body indexed at $1,352 is offered at $1,352 / $1,469 / $1,527 across its three grades) — so call `product` to see which grades exist.","required_params":[],"optional_params":["query","brand","category","grade","system","product_type","format","lens_mount","megapixels","film_type","filter_size","filter_type","zoom_or_prime","focus_type","lens_type","max_aperture","memory_card","lens_design","flash_system","photography_type","tag","gear_group","in_stock","price_min","price_max","focal_length_min","focal_length_max","sort","page","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword over KEH's catalogue (model, brand, lens, accessory). Leave it out to browse the whole catalogue and filter instead. ⚠️ MEASURED 2026-10-08: KEH's search RELAXES rather than answering empty, so a keyword that matches nothing still returns rows — 'zzqqxxnotathingqq' returned 1,217, 'qwertyasdfzxcv' 870, 'xyzzy plugh frobnitz' 4, 'gibberishwordhere' 1. The relevance score does not separate a real hit from that fallback (520.9 vs 505.3), so judge a long-tail keyword by the row titles, not by the fact that rows came back. A precise model name is exact: 'canon eos r6' 157 rows, 'canon eos r6 mark ii black body' 13, 'hasselblad 503cw' 293.","on_invalid":"ignore","example":"canon eos r6","aliases":["q","keyword","search","term"]},{"name":"brand","type":"array","required":false,"description":"One or more brands as KEH spells them. 577 are live; the largest on 2026-10-08 are Nikon 3,782, Miscellaneous 3,163, Canon 2,983, Leica 2,850, Sigma 1,848, Pentax 1,629, Sony 1,366, Fuji 1,311, Olympus 1,301, Vivitar 1,231, Minolta 1,174, Hasselblad 1,134. Several values are OR-ed (measured: Canon 2,983 + Nikon 3,782 = 6,765). Call `facets` for the live list with counts.","on_invalid":"ignore","example":"Canon","value_pattern":".{1,80}","aliases":["make","manufacturer","brands"]},{"name":"category","type":"array","required":false,"description":"One or more of KEH's own category IDS (not names — the index filters on the id). 135 are live: 8226 Used Camera Lenses (15,795), 8231 Accessories (18,390), 8258 Used Cameras (9,248), 8227 Used SLR & DSLR Lenses (9,939), 8373 Used Film Cameras (4,948), 8369 Used Digital Cameras (4,323), 8240 Tripods & Supports (4,692)… A parent id includes its children. The `categories` action returns the whole tree with ids, parents, breadcrumbs and counts.","on_invalid":"ignore","example":"8258","value_pattern":"[0-9]{1,10}","aliases":["cat","categories","category_id"]},{"name":"grade","type":"array","required":false,"description":"KEH's OWN cosmetic grade — the field that makes a used-gear listing. KEH inspects and grades every item itself: new, like_new, like_new_minus, excellent_plus, excellent, bargain, ugly, as_is (its short forms LN, LN-, EX+, EX, BGN, UG are accepted too). Several values are OR-ed. ⚠️ A grade only exists on a product KEH actually has in stock: with `in_stock=false` the grade facet comes back EMPTY (measured), so combining `grade` with out-of-stock stock returns nothing, honestly.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New — 567 products in stock on 2026-10-08"},{"value":"like_new","label":"Like New — 194 products in stock on 2026-10-08"},{"value":"like_new_minus","label":"Like New Minus — 1,740 products in stock on 2026-10-08"},{"value":"excellent_plus","label":"Excellent Plus — 2,199 products in stock on 2026-10-08"},{"value":"excellent","label":"Excellent — 4,218 products in stock on 2026-10-08"},{"value":"bargain","label":"Bargain — 1,892 products in stock on 2026-10-08"},{"value":"ugly","label":"Ugly — 505 products in stock on 2026-10-08"},{"value":"as_is","label":"As Is — 18 products in stock on 2026-10-08"}],"example":"excellent","aliases":["condition","grades","conditions"]},{"name":"system","type":"array","required":false,"description":"KEH's own system family, which is how photographers actually shop a used catalogue: Tripods 3,481, Filters 3,138, Large Format 2,915, Nikon Manual Focus 2,443, Canon EOS 1,787, Nikon Autofocus 1,582, Sony E System 1,527, Leica M 1,485, Nikon Digital 1,415, Canon Digital 1,409, Canon Manual Focus 1,307… 139 live values; `facets` has the list.","on_invalid":"ignore","example":"Canon EOS","value_pattern":".{1,80}","aliases":["gear_system"]},{"name":"product_type","type":"array","required":false,"description":"KEH's own gear class, a finer cut than `category`: 'Fixed Focal Length Lenses, Mfg' 5,646, 'Fixed Focal Length Lenses, Non-Mfg' 4,967, Filters 4,188, 'Point & Shoots' 3,529, Bodies 3,494, 'Zoom Lenses, Non-Mfg' 3,370, 'Tripod Accessories' 1,749, 'Lens Shades' 1,497, Flashes 1,317… 91 live values.","on_invalid":"ignore","example":"Bodies","value_pattern":".{1,80}","aliases":["type","product_types"]},{"name":"format","type":"array","required":false,"description":"Sensor or film coverage, in KEH's own spelling: 'Full Frame 35mm (24x36mm)' 14,010, 'APS-C & DX' 1,993, '4x5\"' 968, 'Four Thirds' 763, '6x6 (56x56mm) & 2-1/4x2-1/4\"' 688, '645 (56x42mm)' 367, '8x10\"' 146… 75 live values.","on_invalid":"ignore","example":"Full Frame 35mm (24x36mm)","value_pattern":".{1,80}","aliases":["coverage","sensor_format","film_format"]},{"name":"lens_mount","type":"array","required":false,"description":"The lens bayonet, as KEH names it — 257 live values, which is the point of a catalogue this old: 'Canon EF' 1,629, 'Sony E Mount' 964, 'Sony A & Minolta A' 898, 'Leica M' 882, 'Canon FD' 848, 'Nikon F Mount Ai' 818, 'M42 - Pentax Screw' 744, 'Micro Four Thirds' 742, 'Minolta MD' 663 … down to 'Agfa Agfaflex III,IV,V & Ambiflex I,II,III' with exactly 1. Pass the spelling `facets` gives you; it is long and exact.","on_invalid":"ignore","example":"Canon EF","value_pattern":".{1,100}","aliases":["mount","lens_mounts","fit"]},{"name":"megapixels","type":"array","required":false,"description":"Sensor resolution as KEH buckets it, including the unit: '16 MP' 794, '12 MP' 632, '10 MP' 388, '14 MP' 343, '24 MP' 314, '20 MP' 313, '45 MP', '60MP'… 49 live values, only set on digital bodies (4,098 products carry one).","on_invalid":"ignore","example":"24 MP","value_pattern":".{1,20}","aliases":["mp"]},{"name":"film_type","type":"array","required":false,"description":"Which film the camera takes, with its 2026-10-08 counts. Only film gear carries it (3,507 products). Two values KEH's own taxonomy lists are left out of this list on purpose - 'Instax Mini' (37) and '70mm roll' (9) carry a stray trailing space in KEH's data and match ZERO products whichever way they are spelled (measured), so they are refused with that reason instead of answered with an empty success.","on_invalid":"reject","allowed_values":[{"value":"35mm roll","label":"35mm roll — 2,633"},{"value":"120 roll","label":"120 roll — 278"},{"value":"220 roll","label":"220 roll — 99"},{"value":"4x5 sheet","label":"4x5 sheet — 232"},{"value":"5x7 sheet","label":"5x7 sheet — 25"},{"value":"8x10 sheet","label":"8x10 sheet — 39"},{"value":"11x14 sheet","label":"11x14 sheet — 2"},{"value":"Instax Wide","label":"Instax Wide — 5"},{"value":"Instax Square","label":"Instax Square — 2"},{"value":"APS cartridge","label":"APS cartridge — 28"},{"value":"110 cartridge","label":"110 cartridge — 16"},{"value":"126 cartridge","label":"126 cartridge — 10"},{"value":"127 roll","label":"127 roll — 26"},{"value":"116 roll","label":"116 roll — 3"},{"value":"620 roll","label":"620 roll — 1"},{"value":"8mm roll","label":"8mm roll — 28"},{"value":"16mm roll","label":"16mm roll — 12"},{"value":"Super 8 cartridge","label":"Super 8 cartridge — 19"},{"value":"Polaroid Spectra cartridge","label":"Polaroid Spectra cartridge — 2"},{"value":"Polaroid Type 80 cartridge","label":"Polaroid Type 80 cartridge — 1"}],"example":"35mm roll"},{"name":"filter_size","type":"array","required":false,"description":"Filter thread / series size with its unit: '52mm' 1,977, '55mm' 1,554, '77mm' 1,441, '58mm' 1,374, '72mm' 1,369, '67mm' 1,252, '62mm' 1,241, '49mm' 1,025, '82mm' 627, '40.5mm (.5 pitch)' 299… 80 live values.","on_invalid":"ignore","example":"77mm","value_pattern":".{1,40}","aliases":["thread","filter_thread"]},{"name":"filter_type","type":"array","required":false,"description":"What an optical filter does, with its 2026-10-08 counts. KEH holds 4,189 filters, which is a real part of why people shop used. Two of KEH's own values are left out - 'ND - Variable Neutral Density' (58) and 'Cross-Screen / Star' (23) carry a stray trailing space in KEH's data and match ZERO products whichever way they are spelled (measured).","on_invalid":"reject","allowed_values":[{"value":"UV / Haze / Skylight","label":"UV / Haze / Skylight — 823"},{"value":"Black & White Contrast","label":"Black & White Contrast — 733"},{"value":"Polarizing - Circular Polarizers","label":"Circular polarizers — 557"},{"value":"ND - Fixed Neutral Density","label":"Fixed ND — 390"},{"value":"Clear & Protective","label":"Clear & protective — 191"},{"value":"Polarizing - Linear Polarizers","label":"Linear polarizers — 159"},{"value":"Diffuser / Soft Focus","label":"Diffuser / soft focus — 145"},{"value":"ND - Graduated Neutral Density","label":"Graduated ND — 113"},{"value":"Enhancing / Warming","label":"Enhancing / warming — 94"},{"value":"IR - Infrared","label":"Infrared — 77"},{"value":"Close-Up","label":"Close-up — 58"},{"value":"Special Effects & Other","label":"Special effects & other — 53"},{"value":"Color Conversion","label":"Colour conversion — 35"},{"value":"ND - Center Neutral Density","label":"Centre ND — 24"},{"value":"Color Compensating","label":"Colour compensating — 13"},{"value":"Scientific / Astronomy","label":"Scientific / astronomy — 11"}],"example":"UV / Haze / Skylight"},{"name":"zoom_or_prime","type":"enum","required":false,"description":"Prime or zoom. The complete live vocabulary (two values) with its counts.","on_invalid":"reject","allowed_values":[{"value":"prime","label":"Prime / Fixed Focal Length — 10,457"},{"value":"zoom","label":"Zoom / Variable Focal Length — 4,386"}],"example":"prime","aliases":["zoom_prime","prime"]},{"name":"focus_type","type":"enum","required":false,"description":"How the lens focuses — the complete live vocabulary with its counts. The camera-motor vs lens-motor split is the one that decides whether an old autofocus lens will actually focus on a modern body.","on_invalid":"reject","allowed_values":[{"value":"manual_only","label":"Manual focus (only) — 13,855"},{"value":"autofocus_lens_motor","label":"Autofocus (lens motor) — 3,549"},{"value":"autofocus_camera_motor","label":"Autofocus (camera motor) — 1,743"},{"value":"fixed_focus","label":"Fixed focus — 58"},{"value":"manual_option","label":"Manual focus (option) — 23"}],"example":"autofocus_lens_motor","aliases":["focus"]},{"name":"lens_type","type":"array","required":false,"description":"Angle-of-view class — the complete live vocabulary with its 2026-10-08 counts. Several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Telephoto / Long","label":"Telephoto / Long — 4,647"},{"value":"Wide-Angle","label":"Wide-Angle — 4,508"},{"value":"Standard / Normal","label":"Standard / Normal — 4,045"},{"value":"Short Tele / Portrait","label":"Short Tele / Portrait — 999"},{"value":"All-In-One","label":"All-In-One — 566"},{"value":"Ultrawide","label":"Ultrawide — 314"}],"example":"Telephoto / Long"},{"name":"max_aperture","type":"array","required":false,"description":"Maximum aperture in KEH's own notation, zooms included: 'f/2.8' 3,178, 'f/3.5' 1,585, 'f/4' 1,068, 'f/5.6' 1,057, 'f/4.5' 1,035, 'f/2' 956, 'f/1.4' 772, 'f/3.5-4.5' 588, 'f/4-5.6' 577, 'f/1.8' 528, and cine 'T1.5'… 258 live values.","on_invalid":"ignore","example":"f/2.8","value_pattern":".{1,40}","aliases":["aperture","f_stop"]},{"name":"memory_card","type":"array","required":false,"description":"Which card the body takes: SDHC 1,698, SD 1,644, SDXC 1,478, 'SDXC UHS-I' 876, 'SDHC UHS-I' 815, 'Compact Flash (Type I)' 370, 'SDXC UHS-II' 292, 'CFxpress Type B' 58, 'CFast 2.0' 33… 32 live values. Two flaws in KEH's own data here, both reported rather than hidden: one value is the literal string '2931' (4 products), and 'Sony Memory Stick PRO Duo' (194) carries a stray trailing space that makes it unfilterable — that one is refused with the reason instead of answered with an empty success.","on_invalid":"ignore","example":"SDXC UHS-II","value_pattern":".{1,60}","aliases":["card","memory_card_type"]},{"name":"lens_design","type":"array","required":false,"description":"Special optical design — the complete live vocabulary with its counts. Several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Macro Feature","label":"Macro feature — 839"},{"value":"Macro","label":"True macro — 312"},{"value":"Fisheye","label":"Fisheye — 142"},{"value":"Pancake","label":"Pancake — 122"},{"value":"Tilt / Shift / Perspective Control","label":"Tilt / shift / PC — 90"},{"value":"Mirror / Catadioptric","label":"Mirror / catadioptric — 41"},{"value":"Soft Focus","label":"Soft focus — 33"},{"value":"Pinhole","label":"Pinhole — 14"},{"value":"Defocus Control","label":"Defocus control — 3"},{"value":"Stereo","label":"Stereo — 1"}],"example":"Macro","aliases":["special_lens_design"]},{"name":"flash_system","type":"array","required":false,"description":"Which TTL flash protocol the gear speaks, which is exactly what an old flash needs matching: 'Canon E-TTL' 318, 'Canon E-TTL II' 271, 'Olympus/Panasonic TTL' 236, 'Nikon i-TTL' 190, 'Minolta/Sony TTL (Pre-Flash)' 184, 'Canon TTL (Film Cameras)' 181… 22 live values, all of them in `facets`.","on_invalid":"ignore","example":"Nikon i-TTL","value_pattern":".{1,60}","aliases":["ttl"]},{"name":"photography_type","type":"array","required":false,"description":"KEH's own 'what is this for' tag — the complete live vocabulary with its 2026-10-08 counts. Multi-valued per product, several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Travel Photography","label":"Travel — 835"},{"value":"Portraiture / People Photography","label":"Portraiture / people — 600"},{"value":"Street Photography","label":"Street — 444"},{"value":"Landscape Photography","label":"Landscape — 400"},{"value":"Sports Photography","label":"Sports — 397"},{"value":"Wedding Photography","label":"Wedding — 330"},{"value":"Family Photography","label":"Family — 269"},{"value":"Concert / Music Photography","label":"Concert / music — 204"},{"value":"Wildlife Photography","label":"Wildlife — 163"},{"value":"Vlogging Photography","label":"Vlogging — 143"},{"value":"Astrophotography","label":"Astrophotography — 138"},{"value":"Underwater Photography","label":"Underwater — 89"},{"value":"Aerial Photography","label":"Aerial — 3"}],"example":"Wedding Photography","aliases":["use_case","photography"]},{"name":"tag","type":"array","required":false,"description":"KEH's own merchandising shelves — this is how you ask 'what did KEH just mark down' or 'what arrived this week' in one call. The list is live and moves with the shop's campaigns; `facets` always has the current one with counts.","on_invalid":"reject","allowed_values":[{"value":"While Supplies Last","label":"While supplies last — 4,728"},{"value":"Overstock","label":"Overstock — 1,551"},{"value":"New Lower Price","label":"New lower price — 735"},{"value":"Back In Stock","label":"Back in stock — 656"},{"value":"Best Sellers","label":"Best sellers — 581"},{"value":"Newly Arrived","label":"Newly arrived — 392"},{"value":"Featured Products","label":"Featured products — 140"},{"value":"Rentable","label":"Rentable — 73"},{"value":"Back To School","label":"Back to school — 21"}],"example":"Overstock","aliases":["special","tags","promo"]},{"name":"gear_group","type":"array","required":false,"description":"KEH's coarse shop-grid grouping — the quickest way to split the catalogue into bodies vs lenses vs accessories without learning the 135-node category tree. The complete live vocabulary with its 2026-10-08 counts.","on_invalid":"reject","allowed_values":[{"value":"Lenses","label":"Lenses — 15,368"},{"value":"Other Accessories","label":"Other accessories — 12,618"},{"value":"Filters","label":"Filters — 4,188"},{"value":"Camera Bodies","label":"Camera bodies — 4,010"},{"value":"Other Filters","label":"Other filters — 2,447"},{"value":"Tripod Accessories","label":"Tripod accessories — 1,749"},{"value":"Flashes & Lights","label":"Flashes & lights — 1,477"},{"value":"Bags & Cases","label":"Bags & cases — 1,423"},{"value":"Finders","label":"Finders — 1,239"},{"value":"Lens Converters","label":"Lens converters — 1,053"},{"value":"UV Filters","label":"UV filters — 1,014"},{"value":"Grips","label":"Grips — 922"},{"value":"Backs","label":"Backs — 897"},{"value":"Extension Tubes","label":"Extension tubes — 744"},{"value":"Polarizing Filters","label":"Polarizing filters — 727"},{"value":"Memory & Readers","label":"Memory & readers — 465"},{"value":"Straps","label":"Straps — 411"},{"value":"Mics","label":"Mics — 318"},{"value":"Film","label":"Film — 61"}],"example":"Camera Bodies","aliases":["grid_tab"]},{"name":"in_stock","type":"enum","required":false,"description":"Whether to return gear KEH actually has. DEFAULTS TO TRUE, deliberately: 46,946 of the 54,499 indexed products are sold out, and on a sold-out record the price left in the index is STALE and the grade is gone (measured on pid 386988: indexed $1,266.00 with no grade while KEH's own page still showed a Bargain copy at $3,200.00). Pass 'any' or 'false' to see the sold-out records anyway — they are useful as a price history and a what-KEH-handles list — and read `price_is_live_offer` on every row, which is false exactly there.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Only what KEH can ship now — 7,553 products (the default)"},{"value":"false","label":"Only the sold-out records — 46,946 products"},{"value":"any","label":"Both — the whole 54,499-product index"}],"default":"true","example":"true","aliases":["stock","availability"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to return, in US dollars as a decimal (e.g. 249.99). KEH's live band on 2026-10-08 ran from $1.00 to $24,242.00. Measured: 'Price:[100 TO 200]' returned 3,542 of 54,499.","on_invalid":"ignore","example":250,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"number","required":false,"description":"Highest price to return, in US dollars. ⚠️ It filters on the CHEAPEST grade's price, because that is the only price the catalogue index carries — see `price`.","on_invalid":"ignore","example":1500,"minimum":0,"aliases":["max_price","price_to"]},{"name":"focal_length_min","type":"number","required":false,"description":"Only lenses that reach at least this focal length (mm) at the wide end. KEH's live range is 1-1,200 mm at the short end and 3.2-1,300 mm at the long end, on the 15,868 products that publish a focal length at all.","on_invalid":"ignore","example":70,"minimum":0,"aliases":["focal_min","mm_min"]},{"name":"focal_length_max","type":"number","required":false,"description":"Only lenses whose long end is at most this focal length (mm).","on_invalid":"ignore","example":300,"minimum":0,"aliases":["focal_max","mm_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Measured on the same Canon result set: price_asc first row $1.00, price_desc first row $13,010.00, so the ends are real. An unsupported sort value is REFUSED here on purpose — the source silently ignores one and hands back the unsorted order, which reads like a sort that worked.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"KEH's own relevance order (the default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"title_asc","label":"Title A-Z"},{"value":"title_desc","label":"Title Z-A"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. ⚠️ Paging is HARD-CAPPED by KEH's search service, which says so itself: at most 200 rows per call and a start offset of at most 10,000, so no single query can be walked past 10,200 rows. `meta.pagination` reports `depth_limit` and `depth_limit_reached`; to go deeper, split the query with a filter (by category, brand or price band) instead of paging on.","on_invalid":"ignore","default":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-200 (default 24). 200 is the service's own ceiling — it refuses 250 with 'Pagination limit exceeded ... Max start 10000, rows 200'.","on_invalid":"ignore","default":24,"minimum":1,"maximum":200,"aliases":["limit","per_page","rows"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. KEH is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"products[]{pid, title, title_tokens[], brand, url, image, price, price_from, currency, units_in_stock, in_stock, price_is_live_offer, description, relevance_score} + meta{total_results, currency, page, page_size, pagination, filters_applied, search_page_url, did_you_mean[], notes}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"canon eos r6","sort":"price_asc"}},{"name":"product","description":"The complete record of ONE product by its `pid` (or by its keh.com `url`). Adds everything a search row cannot carry: WHICH of KEH's grades it currently holds of this model, ranked best to worst; its full spec sheet as KEH's own catalogue describes it (system, gear type, coverage format, lens mount, megapixels, film type, filter thread and type, prime/zoom, focus type, maximum aperture, focal length range, memory-card types, special optical design, TTL flash system, intended uses); its category breadcrumb; KEH's merchandising tags; the unit count; and the cleaned description. Honest about its one real gap: KEH's per-grade prices live only on the product page, which answers a Cloudflare challenge to everything, so `per_grade_prices_available` is false and the index's own `price_range` is republished as `price_range_index` beside `price_range_is_grade_blind: true` rather than passed off as a grade ladder. A pid KEH does not index answers NOT_FOUND.","required_params":[],"optional_params":["pid","url","include_pii"],"params":[{"name":"pid","type":"string","required":false,"description":"KEH's own product id, returned as `pid` by `search`. Pass this OR `url`. A pid that is not in the index answers NOT_FOUND, never an empty success.","on_invalid":"reject","example":"384010","value_pattern":"[0-9]{1,12}","aliases":["product_id","id","item"]},{"name":"url","type":"string","required":false,"description":"A keh.com product URL instead of a `pid` — paste the link straight from the shop. The index cannot be filtered by URL, so the engine resolves it through KEH's own keyword search over the slug and costs one extra upstream request; `pid` is the cheaper and exact way in.","on_invalid":"reject","example":"https://www.keh.com/shop/canon-eos-r6-mirrorless-digital-camera-uhd-4k60-20mp.html","aliases":["product_url","link"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. KEH is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"product{pid, title, title_tokens[], brand, url, image, price, price_from, currency, units_in_stock, in_stock, price_is_live_offer, description, relevance_score, grades_available[], grades_available_labels[], category_path[], tags[], stock_label, specs{}, price_range_index[], price_range_is_grade_blind, per_grade_prices_available} + meta{currency, grade_count, warnings}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"pid":"384010"}},{"name":"facets","description":"The live filter taxonomy of KEH's catalogue: every brand, grade, category, system, gear type, lens mount, format, aperture, filter size and type, card type, flash system and intended use that actually has stock right now, each with KEH's own count — plus the price and focal-length ranges as real numeric spans. This is how you discover the exact value to pass to `search` instead of guessing it, and the counts alone answer questions a listing cannot ('how many Canon EF lenses does KEH hold today', 'how much of the shop is Bargain grade'). Takes every filter `search` takes, so you can ask for the taxonomy INSIDE a scope — the lens mounts available under Fujifilm, say.","required_params":[],"optional_params":["facets","query","brand","category","grade","system","product_type","format","lens_mount","megapixels","film_type","filter_size","filter_type","zoom_or_prime","focus_type","lens_type","max_aperture","memory_card","lens_design","flash_system","photography_type","tag","gear_group","in_stock","price_min","price_max","focal_length_min","focal_length_max","include_pii"],"params":[{"name":"facets","type":"array","required":false,"description":"Which filter taxonomies to return with their live counts. Left out, you get all 25 the index publishes. Every value here is a filter you can then pass to `search`, which is the point: discover the exact spelling instead of guessing it. `price`, `focal_length_min` and `focal_length_max` come back as a numeric `min`/`max` span rather than a value list, and `price` is the span the `price_min` / `price_max` filters work on.","on_invalid":"reject","allowed_values":[{"value":"brand","label":"Brand Name"},{"value":"category","label":"category"},{"value":"film_type","label":"Film Type"},{"value":"filter_size","label":"Filter Size"},{"value":"filter_type","label":"Filter Type"},{"value":"flash_system","label":"Flash System"},{"value":"focal_length_max","label":"Max Focal Length"},{"value":"focal_length_min","label":"Min Focal Length"},{"value":"focus_type","label":"Focus Type"},{"value":"format","label":"Coverage / Format"},{"value":"gear_group","label":"acc for grid tabs"},{"value":"grade","label":"Grade"},{"value":"in_stock","label":"Stock"},{"value":"lens_design","label":"Special Lens Design"},{"value":"lens_mount","label":"Lens Mount"},{"value":"lens_type","label":"Lens Type"},{"value":"max_aperture","label":"Max Aperture"},{"value":"megapixels","label":"Megapixels"},{"value":"memory_card","label":"Memory Card Type"},{"value":"photography_type","label":"Photography Type"},{"value":"price","label":"Price"},{"value":"product_type","label":"Product Type"},{"value":"system","label":"System"},{"value":"tag","label":"Special"},{"value":"zoom_or_prime","label":"Zoom / Prime"}],"example":"brand,grade"},{"name":"query","type":"string","required":false,"description":"Free-text keyword over KEH's catalogue (model, brand, lens, accessory). Leave it out to browse the whole catalogue and filter instead. ⚠️ MEASURED 2026-10-08: KEH's search RELAXES rather than answering empty, so a keyword that matches nothing still returns rows — 'zzqqxxnotathingqq' returned 1,217, 'qwertyasdfzxcv' 870, 'xyzzy plugh frobnitz' 4, 'gibberishwordhere' 1. The relevance score does not separate a real hit from that fallback (520.9 vs 505.3), so judge a long-tail keyword by the row titles, not by the fact that rows came back. A precise model name is exact: 'canon eos r6' 157 rows, 'canon eos r6 mark ii black body' 13, 'hasselblad 503cw' 293.","on_invalid":"ignore","example":"canon eos r6","aliases":["q","keyword","search","term"]},{"name":"brand","type":"array","required":false,"description":"One or more brands as KEH spells them. 577 are live; the largest on 2026-10-08 are Nikon 3,782, Miscellaneous 3,163, Canon 2,983, Leica 2,850, Sigma 1,848, Pentax 1,629, Sony 1,366, Fuji 1,311, Olympus 1,301, Vivitar 1,231, Minolta 1,174, Hasselblad 1,134. Several values are OR-ed (measured: Canon 2,983 + Nikon 3,782 = 6,765). Call `facets` for the live list with counts.","on_invalid":"ignore","example":"Canon","value_pattern":".{1,80}","aliases":["make","manufacturer","brands"]},{"name":"category","type":"array","required":false,"description":"One or more of KEH's own category IDS (not names — the index filters on the id). 135 are live: 8226 Used Camera Lenses (15,795), 8231 Accessories (18,390), 8258 Used Cameras (9,248), 8227 Used SLR & DSLR Lenses (9,939), 8373 Used Film Cameras (4,948), 8369 Used Digital Cameras (4,323), 8240 Tripods & Supports (4,692)… A parent id includes its children. The `categories` action returns the whole tree with ids, parents, breadcrumbs and counts.","on_invalid":"ignore","example":"8258","value_pattern":"[0-9]{1,10}","aliases":["cat","categories","category_id"]},{"name":"grade","type":"array","required":false,"description":"KEH's OWN cosmetic grade — the field that makes a used-gear listing. KEH inspects and grades every item itself: new, like_new, like_new_minus, excellent_plus, excellent, bargain, ugly, as_is (its short forms LN, LN-, EX+, EX, BGN, UG are accepted too). Several values are OR-ed. ⚠️ A grade only exists on a product KEH actually has in stock: with `in_stock=false` the grade facet comes back EMPTY (measured), so combining `grade` with out-of-stock stock returns nothing, honestly.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New — 567 products in stock on 2026-10-08"},{"value":"like_new","label":"Like New — 194 products in stock on 2026-10-08"},{"value":"like_new_minus","label":"Like New Minus — 1,740 products in stock on 2026-10-08"},{"value":"excellent_plus","label":"Excellent Plus — 2,199 products in stock on 2026-10-08"},{"value":"excellent","label":"Excellent — 4,218 products in stock on 2026-10-08"},{"value":"bargain","label":"Bargain — 1,892 products in stock on 2026-10-08"},{"value":"ugly","label":"Ugly — 505 products in stock on 2026-10-08"},{"value":"as_is","label":"As Is — 18 products in stock on 2026-10-08"}],"example":"excellent","aliases":["condition","grades","conditions"]},{"name":"system","type":"array","required":false,"description":"KEH's own system family, which is how photographers actually shop a used catalogue: Tripods 3,481, Filters 3,138, Large Format 2,915, Nikon Manual Focus 2,443, Canon EOS 1,787, Nikon Autofocus 1,582, Sony E System 1,527, Leica M 1,485, Nikon Digital 1,415, Canon Digital 1,409, Canon Manual Focus 1,307… 139 live values; `facets` has the list.","on_invalid":"ignore","example":"Canon EOS","value_pattern":".{1,80}","aliases":["gear_system"]},{"name":"product_type","type":"array","required":false,"description":"KEH's own gear class, a finer cut than `category`: 'Fixed Focal Length Lenses, Mfg' 5,646, 'Fixed Focal Length Lenses, Non-Mfg' 4,967, Filters 4,188, 'Point & Shoots' 3,529, Bodies 3,494, 'Zoom Lenses, Non-Mfg' 3,370, 'Tripod Accessories' 1,749, 'Lens Shades' 1,497, Flashes 1,317… 91 live values.","on_invalid":"ignore","example":"Bodies","value_pattern":".{1,80}","aliases":["type","product_types"]},{"name":"format","type":"array","required":false,"description":"Sensor or film coverage, in KEH's own spelling: 'Full Frame 35mm (24x36mm)' 14,010, 'APS-C & DX' 1,993, '4x5\"' 968, 'Four Thirds' 763, '6x6 (56x56mm) & 2-1/4x2-1/4\"' 688, '645 (56x42mm)' 367, '8x10\"' 146… 75 live values.","on_invalid":"ignore","example":"Full Frame 35mm (24x36mm)","value_pattern":".{1,80}","aliases":["coverage","sensor_format","film_format"]},{"name":"lens_mount","type":"array","required":false,"description":"The lens bayonet, as KEH names it — 257 live values, which is the point of a catalogue this old: 'Canon EF' 1,629, 'Sony E Mount' 964, 'Sony A & Minolta A' 898, 'Leica M' 882, 'Canon FD' 848, 'Nikon F Mount Ai' 818, 'M42 - Pentax Screw' 744, 'Micro Four Thirds' 742, 'Minolta MD' 663 … down to 'Agfa Agfaflex III,IV,V & Ambiflex I,II,III' with exactly 1. Pass the spelling `facets` gives you; it is long and exact.","on_invalid":"ignore","example":"Canon EF","value_pattern":".{1,100}","aliases":["mount","lens_mounts","fit"]},{"name":"megapixels","type":"array","required":false,"description":"Sensor resolution as KEH buckets it, including the unit: '16 MP' 794, '12 MP' 632, '10 MP' 388, '14 MP' 343, '24 MP' 314, '20 MP' 313, '45 MP', '60MP'… 49 live values, only set on digital bodies (4,098 products carry one).","on_invalid":"ignore","example":"24 MP","value_pattern":".{1,20}","aliases":["mp"]},{"name":"film_type","type":"array","required":false,"description":"Which film the camera takes, with its 2026-10-08 counts. Only film gear carries it (3,507 products). Two values KEH's own taxonomy lists are left out of this list on purpose - 'Instax Mini' (37) and '70mm roll' (9) carry a stray trailing space in KEH's data and match ZERO products whichever way they are spelled (measured), so they are refused with that reason instead of answered with an empty success.","on_invalid":"reject","allowed_values":[{"value":"35mm roll","label":"35mm roll — 2,633"},{"value":"120 roll","label":"120 roll — 278"},{"value":"220 roll","label":"220 roll — 99"},{"value":"4x5 sheet","label":"4x5 sheet — 232"},{"value":"5x7 sheet","label":"5x7 sheet — 25"},{"value":"8x10 sheet","label":"8x10 sheet — 39"},{"value":"11x14 sheet","label":"11x14 sheet — 2"},{"value":"Instax Wide","label":"Instax Wide — 5"},{"value":"Instax Square","label":"Instax Square — 2"},{"value":"APS cartridge","label":"APS cartridge — 28"},{"value":"110 cartridge","label":"110 cartridge — 16"},{"value":"126 cartridge","label":"126 cartridge — 10"},{"value":"127 roll","label":"127 roll — 26"},{"value":"116 roll","label":"116 roll — 3"},{"value":"620 roll","label":"620 roll — 1"},{"value":"8mm roll","label":"8mm roll — 28"},{"value":"16mm roll","label":"16mm roll — 12"},{"value":"Super 8 cartridge","label":"Super 8 cartridge — 19"},{"value":"Polaroid Spectra cartridge","label":"Polaroid Spectra cartridge — 2"},{"value":"Polaroid Type 80 cartridge","label":"Polaroid Type 80 cartridge — 1"}],"example":"35mm roll"},{"name":"filter_size","type":"array","required":false,"description":"Filter thread / series size with its unit: '52mm' 1,977, '55mm' 1,554, '77mm' 1,441, '58mm' 1,374, '72mm' 1,369, '67mm' 1,252, '62mm' 1,241, '49mm' 1,025, '82mm' 627, '40.5mm (.5 pitch)' 299… 80 live values.","on_invalid":"ignore","example":"77mm","value_pattern":".{1,40}","aliases":["thread","filter_thread"]},{"name":"filter_type","type":"array","required":false,"description":"What an optical filter does, with its 2026-10-08 counts. KEH holds 4,189 filters, which is a real part of why people shop used. Two of KEH's own values are left out - 'ND - Variable Neutral Density' (58) and 'Cross-Screen / Star' (23) carry a stray trailing space in KEH's data and match ZERO products whichever way they are spelled (measured).","on_invalid":"reject","allowed_values":[{"value":"UV / Haze / Skylight","label":"UV / Haze / Skylight — 823"},{"value":"Black & White Contrast","label":"Black & White Contrast — 733"},{"value":"Polarizing - Circular Polarizers","label":"Circular polarizers — 557"},{"value":"ND - Fixed Neutral Density","label":"Fixed ND — 390"},{"value":"Clear & Protective","label":"Clear & protective — 191"},{"value":"Polarizing - Linear Polarizers","label":"Linear polarizers — 159"},{"value":"Diffuser / Soft Focus","label":"Diffuser / soft focus — 145"},{"value":"ND - Graduated Neutral Density","label":"Graduated ND — 113"},{"value":"Enhancing / Warming","label":"Enhancing / warming — 94"},{"value":"IR - Infrared","label":"Infrared — 77"},{"value":"Close-Up","label":"Close-up — 58"},{"value":"Special Effects & Other","label":"Special effects & other — 53"},{"value":"Color Conversion","label":"Colour conversion — 35"},{"value":"ND - Center Neutral Density","label":"Centre ND — 24"},{"value":"Color Compensating","label":"Colour compensating — 13"},{"value":"Scientific / Astronomy","label":"Scientific / astronomy — 11"}],"example":"UV / Haze / Skylight"},{"name":"zoom_or_prime","type":"enum","required":false,"description":"Prime or zoom. The complete live vocabulary (two values) with its counts.","on_invalid":"reject","allowed_values":[{"value":"prime","label":"Prime / Fixed Focal Length — 10,457"},{"value":"zoom","label":"Zoom / Variable Focal Length — 4,386"}],"example":"prime","aliases":["zoom_prime","prime"]},{"name":"focus_type","type":"enum","required":false,"description":"How the lens focuses — the complete live vocabulary with its counts. The camera-motor vs lens-motor split is the one that decides whether an old autofocus lens will actually focus on a modern body.","on_invalid":"reject","allowed_values":[{"value":"manual_only","label":"Manual focus (only) — 13,855"},{"value":"autofocus_lens_motor","label":"Autofocus (lens motor) — 3,549"},{"value":"autofocus_camera_motor","label":"Autofocus (camera motor) — 1,743"},{"value":"fixed_focus","label":"Fixed focus — 58"},{"value":"manual_option","label":"Manual focus (option) — 23"}],"example":"autofocus_lens_motor","aliases":["focus"]},{"name":"lens_type","type":"array","required":false,"description":"Angle-of-view class — the complete live vocabulary with its 2026-10-08 counts. Several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Telephoto / Long","label":"Telephoto / Long — 4,647"},{"value":"Wide-Angle","label":"Wide-Angle — 4,508"},{"value":"Standard / Normal","label":"Standard / Normal — 4,045"},{"value":"Short Tele / Portrait","label":"Short Tele / Portrait — 999"},{"value":"All-In-One","label":"All-In-One — 566"},{"value":"Ultrawide","label":"Ultrawide — 314"}],"example":"Telephoto / Long"},{"name":"max_aperture","type":"array","required":false,"description":"Maximum aperture in KEH's own notation, zooms included: 'f/2.8' 3,178, 'f/3.5' 1,585, 'f/4' 1,068, 'f/5.6' 1,057, 'f/4.5' 1,035, 'f/2' 956, 'f/1.4' 772, 'f/3.5-4.5' 588, 'f/4-5.6' 577, 'f/1.8' 528, and cine 'T1.5'… 258 live values.","on_invalid":"ignore","example":"f/2.8","value_pattern":".{1,40}","aliases":["aperture","f_stop"]},{"name":"memory_card","type":"array","required":false,"description":"Which card the body takes: SDHC 1,698, SD 1,644, SDXC 1,478, 'SDXC UHS-I' 876, 'SDHC UHS-I' 815, 'Compact Flash (Type I)' 370, 'SDXC UHS-II' 292, 'CFxpress Type B' 58, 'CFast 2.0' 33… 32 live values. Two flaws in KEH's own data here, both reported rather than hidden: one value is the literal string '2931' (4 products), and 'Sony Memory Stick PRO Duo' (194) carries a stray trailing space that makes it unfilterable — that one is refused with the reason instead of answered with an empty success.","on_invalid":"ignore","example":"SDXC UHS-II","value_pattern":".{1,60}","aliases":["card","memory_card_type"]},{"name":"lens_design","type":"array","required":false,"description":"Special optical design — the complete live vocabulary with its counts. Several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Macro Feature","label":"Macro feature — 839"},{"value":"Macro","label":"True macro — 312"},{"value":"Fisheye","label":"Fisheye — 142"},{"value":"Pancake","label":"Pancake — 122"},{"value":"Tilt / Shift / Perspective Control","label":"Tilt / shift / PC — 90"},{"value":"Mirror / Catadioptric","label":"Mirror / catadioptric — 41"},{"value":"Soft Focus","label":"Soft focus — 33"},{"value":"Pinhole","label":"Pinhole — 14"},{"value":"Defocus Control","label":"Defocus control — 3"},{"value":"Stereo","label":"Stereo — 1"}],"example":"Macro","aliases":["special_lens_design"]},{"name":"flash_system","type":"array","required":false,"description":"Which TTL flash protocol the gear speaks, which is exactly what an old flash needs matching: 'Canon E-TTL' 318, 'Canon E-TTL II' 271, 'Olympus/Panasonic TTL' 236, 'Nikon i-TTL' 190, 'Minolta/Sony TTL (Pre-Flash)' 184, 'Canon TTL (Film Cameras)' 181… 22 live values, all of them in `facets`.","on_invalid":"ignore","example":"Nikon i-TTL","value_pattern":".{1,60}","aliases":["ttl"]},{"name":"photography_type","type":"array","required":false,"description":"KEH's own 'what is this for' tag — the complete live vocabulary with its 2026-10-08 counts. Multi-valued per product, several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Travel Photography","label":"Travel — 835"},{"value":"Portraiture / People Photography","label":"Portraiture / people — 600"},{"value":"Street Photography","label":"Street — 444"},{"value":"Landscape Photography","label":"Landscape — 400"},{"value":"Sports Photography","label":"Sports — 397"},{"value":"Wedding Photography","label":"Wedding — 330"},{"value":"Family Photography","label":"Family — 269"},{"value":"Concert / Music Photography","label":"Concert / music — 204"},{"value":"Wildlife Photography","label":"Wildlife — 163"},{"value":"Vlogging Photography","label":"Vlogging — 143"},{"value":"Astrophotography","label":"Astrophotography — 138"},{"value":"Underwater Photography","label":"Underwater — 89"},{"value":"Aerial Photography","label":"Aerial — 3"}],"example":"Wedding Photography","aliases":["use_case","photography"]},{"name":"tag","type":"array","required":false,"description":"KEH's own merchandising shelves — this is how you ask 'what did KEH just mark down' or 'what arrived this week' in one call. The list is live and moves with the shop's campaigns; `facets` always has the current one with counts.","on_invalid":"reject","allowed_values":[{"value":"While Supplies Last","label":"While supplies last — 4,728"},{"value":"Overstock","label":"Overstock — 1,551"},{"value":"New Lower Price","label":"New lower price — 735"},{"value":"Back In Stock","label":"Back in stock — 656"},{"value":"Best Sellers","label":"Best sellers — 581"},{"value":"Newly Arrived","label":"Newly arrived — 392"},{"value":"Featured Products","label":"Featured products — 140"},{"value":"Rentable","label":"Rentable — 73"},{"value":"Back To School","label":"Back to school — 21"}],"example":"Overstock","aliases":["special","tags","promo"]},{"name":"gear_group","type":"array","required":false,"description":"KEH's coarse shop-grid grouping — the quickest way to split the catalogue into bodies vs lenses vs accessories without learning the 135-node category tree. The complete live vocabulary with its 2026-10-08 counts.","on_invalid":"reject","allowed_values":[{"value":"Lenses","label":"Lenses — 15,368"},{"value":"Other Accessories","label":"Other accessories — 12,618"},{"value":"Filters","label":"Filters — 4,188"},{"value":"Camera Bodies","label":"Camera bodies — 4,010"},{"value":"Other Filters","label":"Other filters — 2,447"},{"value":"Tripod Accessories","label":"Tripod accessories — 1,749"},{"value":"Flashes & Lights","label":"Flashes & lights — 1,477"},{"value":"Bags & Cases","label":"Bags & cases — 1,423"},{"value":"Finders","label":"Finders — 1,239"},{"value":"Lens Converters","label":"Lens converters — 1,053"},{"value":"UV Filters","label":"UV filters — 1,014"},{"value":"Grips","label":"Grips — 922"},{"value":"Backs","label":"Backs — 897"},{"value":"Extension Tubes","label":"Extension tubes — 744"},{"value":"Polarizing Filters","label":"Polarizing filters — 727"},{"value":"Memory & Readers","label":"Memory & readers — 465"},{"value":"Straps","label":"Straps — 411"},{"value":"Mics","label":"Mics — 318"},{"value":"Film","label":"Film — 61"}],"example":"Camera Bodies","aliases":["grid_tab"]},{"name":"in_stock","type":"enum","required":false,"description":"Whether to return gear KEH actually has. DEFAULTS TO TRUE, deliberately: 46,946 of the 54,499 indexed products are sold out, and on a sold-out record the price left in the index is STALE and the grade is gone (measured on pid 386988: indexed $1,266.00 with no grade while KEH's own page still showed a Bargain copy at $3,200.00). Pass 'any' or 'false' to see the sold-out records anyway — they are useful as a price history and a what-KEH-handles list — and read `price_is_live_offer` on every row, which is false exactly there.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Only what KEH can ship now — 7,553 products (the default)"},{"value":"false","label":"Only the sold-out records — 46,946 products"},{"value":"any","label":"Both — the whole 54,499-product index"}],"default":"true","example":"true","aliases":["stock","availability"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to return, in US dollars as a decimal (e.g. 249.99). KEH's live band on 2026-10-08 ran from $1.00 to $24,242.00. Measured: 'Price:[100 TO 200]' returned 3,542 of 54,499.","on_invalid":"ignore","example":250,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"number","required":false,"description":"Highest price to return, in US dollars. ⚠️ It filters on the CHEAPEST grade's price, because that is the only price the catalogue index carries — see `price`.","on_invalid":"ignore","example":1500,"minimum":0,"aliases":["max_price","price_to"]},{"name":"focal_length_min","type":"number","required":false,"description":"Only lenses that reach at least this focal length (mm) at the wide end. KEH's live range is 1-1,200 mm at the short end and 3.2-1,300 mm at the long end, on the 15,868 products that publish a focal length at all.","on_invalid":"ignore","example":70,"minimum":0,"aliases":["focal_min","mm_min"]},{"name":"focal_length_max","type":"number","required":false,"description":"Only lenses whose long end is at most this focal length (mm).","on_invalid":"ignore","example":300,"minimum":0,"aliases":["focal_max","mm_max"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. KEH is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"facets[]{filter, index_field, label, type, value_count, values[]{value, label, count, param_value, rank, parent_id}, min, max, product_count} + meta{total_results, currency, filters_applied}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"facets":"brand,grade,lens_mount"}},{"name":"categories","description":"KEH's own category tree — 135 nodes with their id, name, parent, readable breadcrumb and live product count, deepest counts first. Pass it any `search` filter to get the tree WITHIN a scope (which categories hold Leica gear, which hold something in Bargain grade). The ids it returns are exactly what the `category` filter takes.","required_params":[],"optional_params":["query","brand","category","grade","system","product_type","format","lens_mount","megapixels","film_type","filter_size","filter_type","zoom_or_prime","focus_type","lens_type","max_aperture","memory_card","lens_design","flash_system","photography_type","tag","gear_group","in_stock","price_min","price_max","focal_length_min","focal_length_max","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword over KEH's catalogue (model, brand, lens, accessory). Leave it out to browse the whole catalogue and filter instead. ⚠️ MEASURED 2026-10-08: KEH's search RELAXES rather than answering empty, so a keyword that matches nothing still returns rows — 'zzqqxxnotathingqq' returned 1,217, 'qwertyasdfzxcv' 870, 'xyzzy plugh frobnitz' 4, 'gibberishwordhere' 1. The relevance score does not separate a real hit from that fallback (520.9 vs 505.3), so judge a long-tail keyword by the row titles, not by the fact that rows came back. A precise model name is exact: 'canon eos r6' 157 rows, 'canon eos r6 mark ii black body' 13, 'hasselblad 503cw' 293.","on_invalid":"ignore","example":"canon eos r6","aliases":["q","keyword","search","term"]},{"name":"brand","type":"array","required":false,"description":"One or more brands as KEH spells them. 577 are live; the largest on 2026-10-08 are Nikon 3,782, Miscellaneous 3,163, Canon 2,983, Leica 2,850, Sigma 1,848, Pentax 1,629, Sony 1,366, Fuji 1,311, Olympus 1,301, Vivitar 1,231, Minolta 1,174, Hasselblad 1,134. Several values are OR-ed (measured: Canon 2,983 + Nikon 3,782 = 6,765). Call `facets` for the live list with counts.","on_invalid":"ignore","example":"Canon","value_pattern":".{1,80}","aliases":["make","manufacturer","brands"]},{"name":"category","type":"array","required":false,"description":"One or more of KEH's own category IDS (not names — the index filters on the id). 135 are live: 8226 Used Camera Lenses (15,795), 8231 Accessories (18,390), 8258 Used Cameras (9,248), 8227 Used SLR & DSLR Lenses (9,939), 8373 Used Film Cameras (4,948), 8369 Used Digital Cameras (4,323), 8240 Tripods & Supports (4,692)… A parent id includes its children. The `categories` action returns the whole tree with ids, parents, breadcrumbs and counts.","on_invalid":"ignore","example":"8258","value_pattern":"[0-9]{1,10}","aliases":["cat","categories","category_id"]},{"name":"grade","type":"array","required":false,"description":"KEH's OWN cosmetic grade — the field that makes a used-gear listing. KEH inspects and grades every item itself: new, like_new, like_new_minus, excellent_plus, excellent, bargain, ugly, as_is (its short forms LN, LN-, EX+, EX, BGN, UG are accepted too). Several values are OR-ed. ⚠️ A grade only exists on a product KEH actually has in stock: with `in_stock=false` the grade facet comes back EMPTY (measured), so combining `grade` with out-of-stock stock returns nothing, honestly.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New — 567 products in stock on 2026-10-08"},{"value":"like_new","label":"Like New — 194 products in stock on 2026-10-08"},{"value":"like_new_minus","label":"Like New Minus — 1,740 products in stock on 2026-10-08"},{"value":"excellent_plus","label":"Excellent Plus — 2,199 products in stock on 2026-10-08"},{"value":"excellent","label":"Excellent — 4,218 products in stock on 2026-10-08"},{"value":"bargain","label":"Bargain — 1,892 products in stock on 2026-10-08"},{"value":"ugly","label":"Ugly — 505 products in stock on 2026-10-08"},{"value":"as_is","label":"As Is — 18 products in stock on 2026-10-08"}],"example":"excellent","aliases":["condition","grades","conditions"]},{"name":"system","type":"array","required":false,"description":"KEH's own system family, which is how photographers actually shop a used catalogue: Tripods 3,481, Filters 3,138, Large Format 2,915, Nikon Manual Focus 2,443, Canon EOS 1,787, Nikon Autofocus 1,582, Sony E System 1,527, Leica M 1,485, Nikon Digital 1,415, Canon Digital 1,409, Canon Manual Focus 1,307… 139 live values; `facets` has the list.","on_invalid":"ignore","example":"Canon EOS","value_pattern":".{1,80}","aliases":["gear_system"]},{"name":"product_type","type":"array","required":false,"description":"KEH's own gear class, a finer cut than `category`: 'Fixed Focal Length Lenses, Mfg' 5,646, 'Fixed Focal Length Lenses, Non-Mfg' 4,967, Filters 4,188, 'Point & Shoots' 3,529, Bodies 3,494, 'Zoom Lenses, Non-Mfg' 3,370, 'Tripod Accessories' 1,749, 'Lens Shades' 1,497, Flashes 1,317… 91 live values.","on_invalid":"ignore","example":"Bodies","value_pattern":".{1,80}","aliases":["type","product_types"]},{"name":"format","type":"array","required":false,"description":"Sensor or film coverage, in KEH's own spelling: 'Full Frame 35mm (24x36mm)' 14,010, 'APS-C & DX' 1,993, '4x5\"' 968, 'Four Thirds' 763, '6x6 (56x56mm) & 2-1/4x2-1/4\"' 688, '645 (56x42mm)' 367, '8x10\"' 146… 75 live values.","on_invalid":"ignore","example":"Full Frame 35mm (24x36mm)","value_pattern":".{1,80}","aliases":["coverage","sensor_format","film_format"]},{"name":"lens_mount","type":"array","required":false,"description":"The lens bayonet, as KEH names it — 257 live values, which is the point of a catalogue this old: 'Canon EF' 1,629, 'Sony E Mount' 964, 'Sony A & Minolta A' 898, 'Leica M' 882, 'Canon FD' 848, 'Nikon F Mount Ai' 818, 'M42 - Pentax Screw' 744, 'Micro Four Thirds' 742, 'Minolta MD' 663 … down to 'Agfa Agfaflex III,IV,V & Ambiflex I,II,III' with exactly 1. Pass the spelling `facets` gives you; it is long and exact.","on_invalid":"ignore","example":"Canon EF","value_pattern":".{1,100}","aliases":["mount","lens_mounts","fit"]},{"name":"megapixels","type":"array","required":false,"description":"Sensor resolution as KEH buckets it, including the unit: '16 MP' 794, '12 MP' 632, '10 MP' 388, '14 MP' 343, '24 MP' 314, '20 MP' 313, '45 MP', '60MP'… 49 live values, only set on digital bodies (4,098 products carry one).","on_invalid":"ignore","example":"24 MP","value_pattern":".{1,20}","aliases":["mp"]},{"name":"film_type","type":"array","required":false,"description":"Which film the camera takes, with its 2026-10-08 counts. Only film gear carries it (3,507 products). Two values KEH's own taxonomy lists are left out of this list on purpose - 'Instax Mini' (37) and '70mm roll' (9) carry a stray trailing space in KEH's data and match ZERO products whichever way they are spelled (measured), so they are refused with that reason instead of answered with an empty success.","on_invalid":"reject","allowed_values":[{"value":"35mm roll","label":"35mm roll — 2,633"},{"value":"120 roll","label":"120 roll — 278"},{"value":"220 roll","label":"220 roll — 99"},{"value":"4x5 sheet","label":"4x5 sheet — 232"},{"value":"5x7 sheet","label":"5x7 sheet — 25"},{"value":"8x10 sheet","label":"8x10 sheet — 39"},{"value":"11x14 sheet","label":"11x14 sheet — 2"},{"value":"Instax Wide","label":"Instax Wide — 5"},{"value":"Instax Square","label":"Instax Square — 2"},{"value":"APS cartridge","label":"APS cartridge — 28"},{"value":"110 cartridge","label":"110 cartridge — 16"},{"value":"126 cartridge","label":"126 cartridge — 10"},{"value":"127 roll","label":"127 roll — 26"},{"value":"116 roll","label":"116 roll — 3"},{"value":"620 roll","label":"620 roll — 1"},{"value":"8mm roll","label":"8mm roll — 28"},{"value":"16mm roll","label":"16mm roll — 12"},{"value":"Super 8 cartridge","label":"Super 8 cartridge — 19"},{"value":"Polaroid Spectra cartridge","label":"Polaroid Spectra cartridge — 2"},{"value":"Polaroid Type 80 cartridge","label":"Polaroid Type 80 cartridge — 1"}],"example":"35mm roll"},{"name":"filter_size","type":"array","required":false,"description":"Filter thread / series size with its unit: '52mm' 1,977, '55mm' 1,554, '77mm' 1,441, '58mm' 1,374, '72mm' 1,369, '67mm' 1,252, '62mm' 1,241, '49mm' 1,025, '82mm' 627, '40.5mm (.5 pitch)' 299… 80 live values.","on_invalid":"ignore","example":"77mm","value_pattern":".{1,40}","aliases":["thread","filter_thread"]},{"name":"filter_type","type":"array","required":false,"description":"What an optical filter does, with its 2026-10-08 counts. KEH holds 4,189 filters, which is a real part of why people shop used. Two of KEH's own values are left out - 'ND - Variable Neutral Density' (58) and 'Cross-Screen / Star' (23) carry a stray trailing space in KEH's data and match ZERO products whichever way they are spelled (measured).","on_invalid":"reject","allowed_values":[{"value":"UV / Haze / Skylight","label":"UV / Haze / Skylight — 823"},{"value":"Black & White Contrast","label":"Black & White Contrast — 733"},{"value":"Polarizing - Circular Polarizers","label":"Circular polarizers — 557"},{"value":"ND - Fixed Neutral Density","label":"Fixed ND — 390"},{"value":"Clear & Protective","label":"Clear & protective — 191"},{"value":"Polarizing - Linear Polarizers","label":"Linear polarizers — 159"},{"value":"Diffuser / Soft Focus","label":"Diffuser / soft focus — 145"},{"value":"ND - Graduated Neutral Density","label":"Graduated ND — 113"},{"value":"Enhancing / Warming","label":"Enhancing / warming — 94"},{"value":"IR - Infrared","label":"Infrared — 77"},{"value":"Close-Up","label":"Close-up — 58"},{"value":"Special Effects & Other","label":"Special effects & other — 53"},{"value":"Color Conversion","label":"Colour conversion — 35"},{"value":"ND - Center Neutral Density","label":"Centre ND — 24"},{"value":"Color Compensating","label":"Colour compensating — 13"},{"value":"Scientific / Astronomy","label":"Scientific / astronomy — 11"}],"example":"UV / Haze / Skylight"},{"name":"zoom_or_prime","type":"enum","required":false,"description":"Prime or zoom. The complete live vocabulary (two values) with its counts.","on_invalid":"reject","allowed_values":[{"value":"prime","label":"Prime / Fixed Focal Length — 10,457"},{"value":"zoom","label":"Zoom / Variable Focal Length — 4,386"}],"example":"prime","aliases":["zoom_prime","prime"]},{"name":"focus_type","type":"enum","required":false,"description":"How the lens focuses — the complete live vocabulary with its counts. The camera-motor vs lens-motor split is the one that decides whether an old autofocus lens will actually focus on a modern body.","on_invalid":"reject","allowed_values":[{"value":"manual_only","label":"Manual focus (only) — 13,855"},{"value":"autofocus_lens_motor","label":"Autofocus (lens motor) — 3,549"},{"value":"autofocus_camera_motor","label":"Autofocus (camera motor) — 1,743"},{"value":"fixed_focus","label":"Fixed focus — 58"},{"value":"manual_option","label":"Manual focus (option) — 23"}],"example":"autofocus_lens_motor","aliases":["focus"]},{"name":"lens_type","type":"array","required":false,"description":"Angle-of-view class — the complete live vocabulary with its 2026-10-08 counts. Several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Telephoto / Long","label":"Telephoto / Long — 4,647"},{"value":"Wide-Angle","label":"Wide-Angle — 4,508"},{"value":"Standard / Normal","label":"Standard / Normal — 4,045"},{"value":"Short Tele / Portrait","label":"Short Tele / Portrait — 999"},{"value":"All-In-One","label":"All-In-One — 566"},{"value":"Ultrawide","label":"Ultrawide — 314"}],"example":"Telephoto / Long"},{"name":"max_aperture","type":"array","required":false,"description":"Maximum aperture in KEH's own notation, zooms included: 'f/2.8' 3,178, 'f/3.5' 1,585, 'f/4' 1,068, 'f/5.6' 1,057, 'f/4.5' 1,035, 'f/2' 956, 'f/1.4' 772, 'f/3.5-4.5' 588, 'f/4-5.6' 577, 'f/1.8' 528, and cine 'T1.5'… 258 live values.","on_invalid":"ignore","example":"f/2.8","value_pattern":".{1,40}","aliases":["aperture","f_stop"]},{"name":"memory_card","type":"array","required":false,"description":"Which card the body takes: SDHC 1,698, SD 1,644, SDXC 1,478, 'SDXC UHS-I' 876, 'SDHC UHS-I' 815, 'Compact Flash (Type I)' 370, 'SDXC UHS-II' 292, 'CFxpress Type B' 58, 'CFast 2.0' 33… 32 live values. Two flaws in KEH's own data here, both reported rather than hidden: one value is the literal string '2931' (4 products), and 'Sony Memory Stick PRO Duo' (194) carries a stray trailing space that makes it unfilterable — that one is refused with the reason instead of answered with an empty success.","on_invalid":"ignore","example":"SDXC UHS-II","value_pattern":".{1,60}","aliases":["card","memory_card_type"]},{"name":"lens_design","type":"array","required":false,"description":"Special optical design — the complete live vocabulary with its counts. Several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Macro Feature","label":"Macro feature — 839"},{"value":"Macro","label":"True macro — 312"},{"value":"Fisheye","label":"Fisheye — 142"},{"value":"Pancake","label":"Pancake — 122"},{"value":"Tilt / Shift / Perspective Control","label":"Tilt / shift / PC — 90"},{"value":"Mirror / Catadioptric","label":"Mirror / catadioptric — 41"},{"value":"Soft Focus","label":"Soft focus — 33"},{"value":"Pinhole","label":"Pinhole — 14"},{"value":"Defocus Control","label":"Defocus control — 3"},{"value":"Stereo","label":"Stereo — 1"}],"example":"Macro","aliases":["special_lens_design"]},{"name":"flash_system","type":"array","required":false,"description":"Which TTL flash protocol the gear speaks, which is exactly what an old flash needs matching: 'Canon E-TTL' 318, 'Canon E-TTL II' 271, 'Olympus/Panasonic TTL' 236, 'Nikon i-TTL' 190, 'Minolta/Sony TTL (Pre-Flash)' 184, 'Canon TTL (Film Cameras)' 181… 22 live values, all of them in `facets`.","on_invalid":"ignore","example":"Nikon i-TTL","value_pattern":".{1,60}","aliases":["ttl"]},{"name":"photography_type","type":"array","required":false,"description":"KEH's own 'what is this for' tag — the complete live vocabulary with its 2026-10-08 counts. Multi-valued per product, several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"Travel Photography","label":"Travel — 835"},{"value":"Portraiture / People Photography","label":"Portraiture / people — 600"},{"value":"Street Photography","label":"Street — 444"},{"value":"Landscape Photography","label":"Landscape — 400"},{"value":"Sports Photography","label":"Sports — 397"},{"value":"Wedding Photography","label":"Wedding — 330"},{"value":"Family Photography","label":"Family — 269"},{"value":"Concert / Music Photography","label":"Concert / music — 204"},{"value":"Wildlife Photography","label":"Wildlife — 163"},{"value":"Vlogging Photography","label":"Vlogging — 143"},{"value":"Astrophotography","label":"Astrophotography — 138"},{"value":"Underwater Photography","label":"Underwater — 89"},{"value":"Aerial Photography","label":"Aerial — 3"}],"example":"Wedding Photography","aliases":["use_case","photography"]},{"name":"tag","type":"array","required":false,"description":"KEH's own merchandising shelves — this is how you ask 'what did KEH just mark down' or 'what arrived this week' in one call. The list is live and moves with the shop's campaigns; `facets` always has the current one with counts.","on_invalid":"reject","allowed_values":[{"value":"While Supplies Last","label":"While supplies last — 4,728"},{"value":"Overstock","label":"Overstock — 1,551"},{"value":"New Lower Price","label":"New lower price — 735"},{"value":"Back In Stock","label":"Back in stock — 656"},{"value":"Best Sellers","label":"Best sellers — 581"},{"value":"Newly Arrived","label":"Newly arrived — 392"},{"value":"Featured Products","label":"Featured products — 140"},{"value":"Rentable","label":"Rentable — 73"},{"value":"Back To School","label":"Back to school — 21"}],"example":"Overstock","aliases":["special","tags","promo"]},{"name":"gear_group","type":"array","required":false,"description":"KEH's coarse shop-grid grouping — the quickest way to split the catalogue into bodies vs lenses vs accessories without learning the 135-node category tree. The complete live vocabulary with its 2026-10-08 counts.","on_invalid":"reject","allowed_values":[{"value":"Lenses","label":"Lenses — 15,368"},{"value":"Other Accessories","label":"Other accessories — 12,618"},{"value":"Filters","label":"Filters — 4,188"},{"value":"Camera Bodies","label":"Camera bodies — 4,010"},{"value":"Other Filters","label":"Other filters — 2,447"},{"value":"Tripod Accessories","label":"Tripod accessories — 1,749"},{"value":"Flashes & Lights","label":"Flashes & lights — 1,477"},{"value":"Bags & Cases","label":"Bags & cases — 1,423"},{"value":"Finders","label":"Finders — 1,239"},{"value":"Lens Converters","label":"Lens converters — 1,053"},{"value":"UV Filters","label":"UV filters — 1,014"},{"value":"Grips","label":"Grips — 922"},{"value":"Backs","label":"Backs — 897"},{"value":"Extension Tubes","label":"Extension tubes — 744"},{"value":"Polarizing Filters","label":"Polarizing filters — 727"},{"value":"Memory & Readers","label":"Memory & readers — 465"},{"value":"Straps","label":"Straps — 411"},{"value":"Mics","label":"Mics — 318"},{"value":"Film","label":"Film — 61"}],"example":"Camera Bodies","aliases":["grid_tab"]},{"name":"in_stock","type":"enum","required":false,"description":"Whether to return gear KEH actually has. DEFAULTS TO TRUE, deliberately: 46,946 of the 54,499 indexed products are sold out, and on a sold-out record the price left in the index is STALE and the grade is gone (measured on pid 386988: indexed $1,266.00 with no grade while KEH's own page still showed a Bargain copy at $3,200.00). Pass 'any' or 'false' to see the sold-out records anyway — they are useful as a price history and a what-KEH-handles list — and read `price_is_live_offer` on every row, which is false exactly there.","on_invalid":"reject","allowed_values":[{"value":"true","label":"Only what KEH can ship now — 7,553 products (the default)"},{"value":"false","label":"Only the sold-out records — 46,946 products"},{"value":"any","label":"Both — the whole 54,499-product index"}],"default":"true","example":"true","aliases":["stock","availability"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to return, in US dollars as a decimal (e.g. 249.99). KEH's live band on 2026-10-08 ran from $1.00 to $24,242.00. Measured: 'Price:[100 TO 200]' returned 3,542 of 54,499.","on_invalid":"ignore","example":250,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"number","required":false,"description":"Highest price to return, in US dollars. ⚠️ It filters on the CHEAPEST grade's price, because that is the only price the catalogue index carries — see `price`.","on_invalid":"ignore","example":1500,"minimum":0,"aliases":["max_price","price_to"]},{"name":"focal_length_min","type":"number","required":false,"description":"Only lenses that reach at least this focal length (mm) at the wide end. KEH's live range is 1-1,200 mm at the short end and 3.2-1,300 mm at the long end, on the 15,868 products that publish a focal length at all.","on_invalid":"ignore","example":70,"minimum":0,"aliases":["focal_min","mm_min"]},{"name":"focal_length_max","type":"number","required":false,"description":"Only lenses whose long end is at most this focal length (mm).","on_invalid":"ignore","example":300,"minimum":0,"aliases":["focal_max","mm_max"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. KEH is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"categories[]{category_id, name, parent_id, parent_name, crumb, path[], product_count} + meta{total_results, filters_applied}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"canon eos r6"}},{"name":"suggest","description":"KEH's own search autocomplete: turn a half-typed camera or lens name into the queries KEH actually resolves. One small request (under 5 KB measured), meant to be called before `search` so a keyword lands on real gear — which matters here, because KEH's search never answers empty and will relax a miss into a catalogue slice instead.","required_params":["query"],"optional_params":["count","include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"A partial model or brand name — KEH's own search box resolves it the same way. At least three characters (KEH's own widget waits for three).","on_invalid":"reject","example":"canon eos","aliases":["q","term","prefix"]},{"name":"count","type":"integer","required":false,"description":"How many suggestions to return (1-20, default 10). KEH's service returns a fixed group and this trims it, so asking for more than it holds is not an error.","on_invalid":"ignore","default":10,"minimum":1,"maximum":20},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. KEH is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"suggestions[]{term, display_text} + meta{query, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"canon eos","count":10}}]},{"name":"kickscrew","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"KICKS CREW API — sneakers and streetwear from kickscrew.com: search and brand / series collections with the from-price of every product, and one product with EVERY SIZE's own price, stock count and 24-hour instant-ship price, style code, colorway, release date and barcode. Prices in the currency of the market you choose (50 markets: USD, EUR, GBP, JPY, HKD, AUD, CAD, KRW …). No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kickscrew/v1","spec_available":true,"actions":[{"name":"search","description":"Search kickscrew's catalogue by model, nickname or style code, with filters for gender, brand, in-stock size, colour, product type, release year, base price and instant ship. Each row has the from-price (cheapest in-stock size) in the chosen market's currency.","required_params":[],"optional_params":["query","country","gender","brand","size","color","product_type","release_year","instant_ship_only","in_stock_only","min_price_usd","max_price_usd","sort","limit","page"],"params":[{"name":"query","type":"string","required":false,"description":"What to search for: a model (dunk low, gel-kayano 14), a nickname (panda, triple white) or a style code (CW2288-111). The source's search is semantic, so close matches follow the exact ones. Leave empty to browse the whole catalogue with filters.","on_invalid":"reject","example":"dunk low","aliases":["q","keyword","search"]},{"name":"country","type":"enum","required":false,"description":"The market whose prices you want: kickscrew prices every market in its own currency (US → USD, DE → EUR, JP → JPY, HK → HKD, GB → GBP …). Every price in the answer is for this market and says its currency.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE (AED)"},{"value":"AT","label":"AT (EUR)"},{"value":"AU","label":"AU (AUD)"},{"value":"BE","label":"BE (USD)"},{"value":"BH","label":"BH (USD)"},{"value":"BN","label":"BN (SGD)"},{"value":"BR","label":"BR (USD)"},{"value":"CA","label":"CA (CAD)"},{"value":"CH","label":"CH (EUR)"},{"value":"CO","label":"CO (USD)"},{"value":"CZ","label":"CZ (CZK)"},{"value":"DE","label":"DE (EUR)"},{"value":"DK","label":"DK (EUR)"},{"value":"EG","label":"EG (USD)"},{"value":"ES","label":"ES (EUR)"},{"value":"FI","label":"FI (EUR)"},{"value":"FR","label":"FR (EUR)"},{"value":"GB","label":"GB (GBP)"},{"value":"GH","label":"GH (USD)"},{"value":"GR","label":"GR (EUR)"},{"value":"HK","label":"HK (HKD)"},{"value":"HU","label":"HU (EUR)"},{"value":"ID","label":"ID (IDR)"},{"value":"IE","label":"IE (EUR)"},{"value":"IN","label":"IN (INR)"},{"value":"IQ","label":"IQ (USD)"},{"value":"IS","label":"IS (EUR)"},{"value":"IT","label":"IT (EUR)"},{"value":"JO","label":"JO (USD)"},{"value":"JP","label":"JP (JPY)"},{"value":"KR","label":"KR (KRW)"},{"value":"KW","label":"KW (USD)"},{"value":"MO","label":"MO (HKD)"},{"value":"MY","label":"MY (MYR)"},{"value":"NG","label":"NG (USD)"},{"value":"NL","label":"NL (EUR)"},{"value":"NO","label":"NO (EUR)"},{"value":"OM","label":"OM (USD)"},{"value":"PH","label":"PH (PHP)"},{"value":"PL","label":"PL (EUR)"},{"value":"PT","label":"PT (EUR)"},{"value":"QA","label":"QA (QAR)"},{"value":"SA","label":"SA (SAR)"},{"value":"SE","label":"SE (EUR)"},{"value":"SG","label":"SG (SGD)"},{"value":"TH","label":"TH (THB)"},{"value":"TR","label":"TR (TRY)"},{"value":"TW","label":"TW (TWD)"},{"value":"US","label":"US (USD)"},{"value":"ZA","label":"ZA (ZAR)"}],"default":"US","example":"DE","aliases":["market"]},{"name":"gender","type":"enum","required":false,"description":"Only products for this gender group.","on_invalid":"reject","allowed_values":[{"value":"MENS","label":"Men"},{"value":"WOMENS","label":"Women"},{"value":"KIDS","label":"Kids"},{"value":"UNISEX","label":"Unisex"},{"value":"BABY","label":"Baby"},{"value":"OTHERS","label":"Others"}],"example":"WOMENS"},{"name":"brand","type":"string","required":false,"description":"Only this brand, as the site writes it (Nike, adidas, Jordan, New Balance, ASICS, PUMA, Onitsuka Tiger, UGG …; case does not matter). A rows' `brand` is the exact spelling.","on_invalid":"reject","example":"New Balance"},{"name":"size","type":"string","required":false,"description":"Only products with this size IN STOCK, in the site's US sizing: 10, 8.5, youth 5.5Y, kids 10C, or a letter size (S, M, L, XL) for apparel. Combine with `gender` for a men's or women's size.","on_invalid":"reject","example":"10"},{"name":"color","type":"string","required":false,"description":"Only this main colour (black, white, grey, blue, red, green, pink, beige, brown, multi-color …).","on_invalid":"reject","example":"black"},{"name":"product_type","type":"enum","required":false,"description":"Only this product type.","on_invalid":"reject","allowed_values":[{"value":"Sneakers","label":"Sneakers"},{"value":"Shoes","label":"Shoes"},{"value":"Slippers","label":"Slippers"},{"value":"Sandals","label":"Sandals"},{"value":"T-Shirts","label":"T-Shirts"},{"value":"Jackets","label":"Jackets"},{"value":"Hoodies","label":"Hoodies"},{"value":"Pants","label":"Pants"},{"value":"Shorts","label":"Shorts"},{"value":"Jerseys","label":"Jerseys"},{"value":"Sweaters","label":"Sweaters"},{"value":"Tops","label":"Tops"},{"value":"Shirts","label":"Shirts"},{"value":"Polo Shirts","label":"Polo Shirts"},{"value":"Vests","label":"Vests"},{"value":"Coats","label":"Coats"},{"value":"Bags","label":"Bags"},{"value":"Caps","label":"Caps"},{"value":"Accessories","label":"Accessories"},{"value":"Socks","label":"Socks"},{"value":"Watches","label":"Watches"},{"value":"Collectibles","label":"Collectibles"},{"value":"Trading Cards","label":"Trading Cards"},{"value":"Leggings","label":"Leggings"},{"value":"Skirts","label":"Skirts"},{"value":"Dresses","label":"Dresses"},{"value":"Glasses","label":"Glasses"}],"example":"Sneakers","aliases":["category"]},{"name":"release_year","type":"integer","required":false,"description":"Only products released in this year.","on_invalid":"reject","example":2024,"minimum":1980,"maximum":2030},{"name":"instant_ship_only","type":"boolean","required":false,"description":"Only products with at least one size that ships within 24 hours.","on_invalid":"reject","default":false,"example":true},{"name":"in_stock_only","type":"boolean","required":false,"description":"true (default, as the site) = only products with at least one size in stock; false also lists sold-out products.","on_invalid":"reject","default":true,"example":false},{"name":"min_price_usd","type":"number","required":false,"description":"Only products whose cheapest in-stock size has a BASE price of at least this many US dollars. The base price is the site's index price before the market's rate (the US market pays about 1.17 × base) — each row shows both as price_from and price_from_usd_base.","on_invalid":"reject","example":100,"minimum":0,"maximum":100000},{"name":"max_price_usd","type":"number","required":false,"description":"Only products whose cheapest in-stock size has a BASE price of at most this many US dollars (see min_price_usd).","on_invalid":"reject","example":150,"minimum":0,"maximum":100000},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"Relevance / the site's featured order (default)"},{"value":"latest_drop","label":"Newest release first"},{"value":"price_asc","label":"Lowest in-stock price first"},{"value":"price_desc","label":"Highest in-stock price first"}],"default":"featured","example":"price_asc"},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-48 (the site's own maximum).","on_invalid":"reject","default":24,"example":48,"minimum":1,"maximum":48,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"Page number from 1. page × limit cannot pass 10,000 (the source's own ceiling).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000}],"returns":"rows[]: product_id, handle (give it to `product`), url, title, brand, sku (style code), alt_skus, nickname, colorway[], color, gender, product_type, product_sub_type, series, series_handle, sub_series, sub_series_handle, release_date, is_new_release, in_stock, sizes_in_stock[] (US sizing), price_from (the cheapest in-stock size, in the market's currency), price_from_size, price_to, price_to_size, on_sale (false on every product on 2026-10-15), currency, country, price_from_usd_base, price_to_usd_base, has_instant_ship, instant_ship_price_from, instant_ship_price_from_usd_base, image, images[]. meta: total_reported (the source's own count; a moving candidate count for text searches and stops at 10000 when browsing — total_is_exact is always false), page, limit, has_more, sort, filters_applied, currency, country, market_rate, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"dunk low","country":"US"}},{"name":"collection","description":"One brand, series or sub-series collection (nike, air-jordan, nike-dunk, nike-dunk-low …) with the same filters, sort and row shape as `search`.","required_params":["collection"],"optional_params":["country","gender","brand","size","color","product_type","release_year","instant_ship_only","in_stock_only","min_price_usd","max_price_usd","sort","limit","page"],"params":[{"name":"collection","type":"string","required":true,"description":"A brand or series handle: a brand (nike, adidas, air-jordan, new-balance, asics, onitsuka-tiger, ugg), a series (nike-dunk) or a sub-series (nike-dunk-low). Every row's `series_handle` and `sub_series_handle` can be given here as is.","on_invalid":"reject","example":"nike-dunk-low","aliases":["handle","brand_handle"]},{"name":"country","type":"enum","required":false,"description":"The market whose prices you want: kickscrew prices every market in its own currency (US → USD, DE → EUR, JP → JPY, HK → HKD, GB → GBP …). Every price in the answer is for this market and says its currency.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE (AED)"},{"value":"AT","label":"AT (EUR)"},{"value":"AU","label":"AU (AUD)"},{"value":"BE","label":"BE (USD)"},{"value":"BH","label":"BH (USD)"},{"value":"BN","label":"BN (SGD)"},{"value":"BR","label":"BR (USD)"},{"value":"CA","label":"CA (CAD)"},{"value":"CH","label":"CH (EUR)"},{"value":"CO","label":"CO (USD)"},{"value":"CZ","label":"CZ (CZK)"},{"value":"DE","label":"DE (EUR)"},{"value":"DK","label":"DK (EUR)"},{"value":"EG","label":"EG (USD)"},{"value":"ES","label":"ES (EUR)"},{"value":"FI","label":"FI (EUR)"},{"value":"FR","label":"FR (EUR)"},{"value":"GB","label":"GB (GBP)"},{"value":"GH","label":"GH (USD)"},{"value":"GR","label":"GR (EUR)"},{"value":"HK","label":"HK (HKD)"},{"value":"HU","label":"HU (EUR)"},{"value":"ID","label":"ID (IDR)"},{"value":"IE","label":"IE (EUR)"},{"value":"IN","label":"IN (INR)"},{"value":"IQ","label":"IQ (USD)"},{"value":"IS","label":"IS (EUR)"},{"value":"IT","label":"IT (EUR)"},{"value":"JO","label":"JO (USD)"},{"value":"JP","label":"JP (JPY)"},{"value":"KR","label":"KR (KRW)"},{"value":"KW","label":"KW (USD)"},{"value":"MO","label":"MO (HKD)"},{"value":"MY","label":"MY (MYR)"},{"value":"NG","label":"NG (USD)"},{"value":"NL","label":"NL (EUR)"},{"value":"NO","label":"NO (EUR)"},{"value":"OM","label":"OM (USD)"},{"value":"PH","label":"PH (PHP)"},{"value":"PL","label":"PL (EUR)"},{"value":"PT","label":"PT (EUR)"},{"value":"QA","label":"QA (QAR)"},{"value":"SA","label":"SA (SAR)"},{"value":"SE","label":"SE (EUR)"},{"value":"SG","label":"SG (SGD)"},{"value":"TH","label":"TH (THB)"},{"value":"TR","label":"TR (TRY)"},{"value":"TW","label":"TW (TWD)"},{"value":"US","label":"US (USD)"},{"value":"ZA","label":"ZA (ZAR)"}],"default":"US","example":"DE","aliases":["market"]},{"name":"gender","type":"enum","required":false,"description":"Only products for this gender group.","on_invalid":"reject","allowed_values":[{"value":"MENS","label":"Men"},{"value":"WOMENS","label":"Women"},{"value":"KIDS","label":"Kids"},{"value":"UNISEX","label":"Unisex"},{"value":"BABY","label":"Baby"},{"value":"OTHERS","label":"Others"}],"example":"WOMENS"},{"name":"brand","type":"string","required":false,"description":"Only this brand, as the site writes it (Nike, adidas, Jordan, New Balance, ASICS, PUMA, Onitsuka Tiger, UGG …; case does not matter). A rows' `brand` is the exact spelling.","on_invalid":"reject","example":"New Balance"},{"name":"size","type":"string","required":false,"description":"Only products with this size IN STOCK, in the site's US sizing: 10, 8.5, youth 5.5Y, kids 10C, or a letter size (S, M, L, XL) for apparel. Combine with `gender` for a men's or women's size.","on_invalid":"reject","example":"10"},{"name":"color","type":"string","required":false,"description":"Only this main colour (black, white, grey, blue, red, green, pink, beige, brown, multi-color …).","on_invalid":"reject","example":"black"},{"name":"product_type","type":"enum","required":false,"description":"Only this product type.","on_invalid":"reject","allowed_values":[{"value":"Sneakers","label":"Sneakers"},{"value":"Shoes","label":"Shoes"},{"value":"Slippers","label":"Slippers"},{"value":"Sandals","label":"Sandals"},{"value":"T-Shirts","label":"T-Shirts"},{"value":"Jackets","label":"Jackets"},{"value":"Hoodies","label":"Hoodies"},{"value":"Pants","label":"Pants"},{"value":"Shorts","label":"Shorts"},{"value":"Jerseys","label":"Jerseys"},{"value":"Sweaters","label":"Sweaters"},{"value":"Tops","label":"Tops"},{"value":"Shirts","label":"Shirts"},{"value":"Polo Shirts","label":"Polo Shirts"},{"value":"Vests","label":"Vests"},{"value":"Coats","label":"Coats"},{"value":"Bags","label":"Bags"},{"value":"Caps","label":"Caps"},{"value":"Accessories","label":"Accessories"},{"value":"Socks","label":"Socks"},{"value":"Watches","label":"Watches"},{"value":"Collectibles","label":"Collectibles"},{"value":"Trading Cards","label":"Trading Cards"},{"value":"Leggings","label":"Leggings"},{"value":"Skirts","label":"Skirts"},{"value":"Dresses","label":"Dresses"},{"value":"Glasses","label":"Glasses"}],"example":"Sneakers","aliases":["category"]},{"name":"release_year","type":"integer","required":false,"description":"Only products released in this year.","on_invalid":"reject","example":2024,"minimum":1980,"maximum":2030},{"name":"instant_ship_only","type":"boolean","required":false,"description":"Only products with at least one size that ships within 24 hours.","on_invalid":"reject","default":false,"example":true},{"name":"in_stock_only","type":"boolean","required":false,"description":"true (default, as the site) = only products with at least one size in stock; false also lists sold-out products.","on_invalid":"reject","default":true,"example":false},{"name":"min_price_usd","type":"number","required":false,"description":"Only products whose cheapest in-stock size has a BASE price of at least this many US dollars. The base price is the site's index price before the market's rate (the US market pays about 1.17 × base) — each row shows both as price_from and price_from_usd_base.","on_invalid":"reject","example":100,"minimum":0,"maximum":100000},{"name":"max_price_usd","type":"number","required":false,"description":"Only products whose cheapest in-stock size has a BASE price of at most this many US dollars (see min_price_usd).","on_invalid":"reject","example":150,"minimum":0,"maximum":100000},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"Relevance / the site's featured order (default)"},{"value":"latest_drop","label":"Newest release first"},{"value":"price_asc","label":"Lowest in-stock price first"},{"value":"price_desc","label":"Highest in-stock price first"}],"default":"featured","example":"price_asc"},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-48 (the site's own maximum).","on_invalid":"reject","default":24,"example":48,"minimum":1,"maximum":48,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"Page number from 1. page × limit cannot pass 10,000 (the source's own ceiling).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000}],"returns":"rows[]: product_id, handle (give it to `product`), url, title, brand, sku (style code), alt_skus, nickname, colorway[], color, gender, product_type, product_sub_type, series, series_handle, sub_series, sub_series_handle, release_date, is_new_release, in_stock, sizes_in_stock[] (US sizing), price_from (the cheapest in-stock size, in the market's currency), price_from_size, price_to, price_to_size, on_sale (false on every product on 2026-10-15), currency, country, price_from_usd_base, price_to_usd_base, has_instant_ship, instant_ship_price_from, instant_ship_price_from_usd_base, image, images[]. meta: total_reported (the source's own count; a moving candidate count for text searches and stops at 10000 when browsing — total_is_exact is always false), page, limit, has_more, sort, filters_applied, currency, country, market_rate, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"collection":"nike-dunk-low"}},{"name":"product","description":"One product in full: every size with its own price, stock count, availability, instant-ship price and barcode, in the chosen market's currency; style code and alternative codes, colorway, release date, series, materials, rating, images. Give `handle` (from a search row) or `sku` (a style code).","required_params":[],"optional_params":["handle","sku","country"],"params":[{"name":"handle","type":"string","required":false,"description":"The product's `handle` from a search or collection row, as is — or its kickscrew.com/products/... URL. Give `handle` or `sku`.","on_invalid":"reject","example":"nike-air-force-1-07-white-cw2288-111","aliases":["url","slug"]},{"name":"sku","type":"string","required":false,"description":"A style code (CW2288-111, 1203A537-110). Looked up in the search index; the product whose style code (or listed alternative code) matches exactly is returned. Give `handle` or `sku`.","on_invalid":"reject","example":"CW2288-111","aliases":["style_code","model_no"]},{"name":"country","type":"enum","required":false,"description":"The market whose prices you want: kickscrew prices every market in its own currency (US → USD, DE → EUR, JP → JPY, HK → HKD, GB → GBP …). Every price in the answer is for this market and says its currency.","on_invalid":"reject","allowed_values":[{"value":"AE","label":"AE (AED)"},{"value":"AT","label":"AT (EUR)"},{"value":"AU","label":"AU (AUD)"},{"value":"BE","label":"BE (USD)"},{"value":"BH","label":"BH (USD)"},{"value":"BN","label":"BN (SGD)"},{"value":"BR","label":"BR (USD)"},{"value":"CA","label":"CA (CAD)"},{"value":"CH","label":"CH (EUR)"},{"value":"CO","label":"CO (USD)"},{"value":"CZ","label":"CZ (CZK)"},{"value":"DE","label":"DE (EUR)"},{"value":"DK","label":"DK (EUR)"},{"value":"EG","label":"EG (USD)"},{"value":"ES","label":"ES (EUR)"},{"value":"FI","label":"FI (EUR)"},{"value":"FR","label":"FR (EUR)"},{"value":"GB","label":"GB (GBP)"},{"value":"GH","label":"GH (USD)"},{"value":"GR","label":"GR (EUR)"},{"value":"HK","label":"HK (HKD)"},{"value":"HU","label":"HU (EUR)"},{"value":"ID","label":"ID (IDR)"},{"value":"IE","label":"IE (EUR)"},{"value":"IN","label":"IN (INR)"},{"value":"IQ","label":"IQ (USD)"},{"value":"IS","label":"IS (EUR)"},{"value":"IT","label":"IT (EUR)"},{"value":"JO","label":"JO (USD)"},{"value":"JP","label":"JP (JPY)"},{"value":"KR","label":"KR (KRW)"},{"value":"KW","label":"KW (USD)"},{"value":"MO","label":"MO (HKD)"},{"value":"MY","label":"MY (MYR)"},{"value":"NG","label":"NG (USD)"},{"value":"NL","label":"NL (EUR)"},{"value":"NO","label":"NO (EUR)"},{"value":"OM","label":"OM (USD)"},{"value":"PH","label":"PH (PHP)"},{"value":"PL","label":"PL (EUR)"},{"value":"PT","label":"PT (EUR)"},{"value":"QA","label":"QA (QAR)"},{"value":"SA","label":"SA (SAR)"},{"value":"SE","label":"SE (EUR)"},{"value":"SG","label":"SG (SGD)"},{"value":"TH","label":"TH (THB)"},{"value":"TR","label":"TR (TRY)"},{"value":"TW","label":"TW (TWD)"},{"value":"US","label":"US (USD)"},{"value":"ZA","label":"ZA (ZAR)"}],"default":"US","example":"DE","aliases":["market"]}],"returns":"product{product_id, handle, url, title, brand, sku, alt_skus[], nickname, colorway, color, product_type, genders[], series, series_handle, sub_series, sub_series_handle, release_date, description, available, country, currency, lowest_price_in_stock, lowest_price_in_stock_size, highest_price_in_stock, price_min_all_sizes, price_max_all_sizes (these two include sold-out sizes), sizes_total, sizes_available, sizes[]{variant_id, variant_sku, size, size_us_men, size_us_women, size_uk, size_eu, size_jp …, gender, available, quantity_available, price, currency, standard_price_usd_base, instant_ship, instant_ship_price (only where instant_ship is true), instant_ship_price_usd_base (the source's base figure, also present on sizes not flagged), barcode}, rating, rating_count, size_report, country_of_origin, materials{}, collections[], images[], updated_at}. meta: market_rate, local_price_check{checked, matched}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"handle":"nike-air-force-1-07-white-cw2288-111"}},{"name":"suggest","description":"The site's own search suggestions for the start of a query (jordan → jordan 4, jordan 5 awake …).","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a search (two letters or more).","on_invalid":"reject","example":"jordan 4","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"How many suggestions, 1-20.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":20}],"returns":"rows[]: suggestion","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"jordan"}}]},{"name":"kieskeurig","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Kieskeurig API — Dutch and Belgian price comparison: search, categories, every shop's price with shipping, specs, price history and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kieskeurig/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on Kieskeurig (kieskeurig.nl or kieskeurig.be). Rows are catalogue products with the cheapest offer incl. shipping and the shop that has it (the two cheapest new offers), number of offers, EANs, review score and count, the site's price-drop badge and lowest-price-ever flag. Filter by category, brand, price, offer, review score and the site's own facets; sort by relevance, popularity or price.","required_params":["query"],"optional_params":["category","country","page","limit","sort","brand","min_price","max_price","on_sale","lowest_price_ever","min_score","facet","range_filter"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, e.g. `iphone 15`, `wasmachine`, `robotstofzuiger`, or a model number.","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Narrow to one category slug (`categories` action, a row's `category_slug`, or a top level like `elektronica`).","on_invalid":"reject","example":"smartphone","aliases":["category_slug"]},{"name":"country","type":"enum","required":false,"description":"Which Kieskeurig: nl = kieskeurig.nl (Dutch shops), be = kieskeurig.be (Belgian shops). Product ids are shared; offers, prices and counts are per market. Prices in EUR.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands — kieskeurig.nl"},{"value":"be","label":"Belgium — kieskeurig.be"}],"default":"nl","aliases":["market","site"]},{"name":"page","type":"integer","required":false,"description":"Result page. The source serves the first 10 000 rows of a listing (page × limit ≤ 10 000); `reachable_total` says how many that is.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (site default 24).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (site default for search)"},{"value":"popular","label":"Most viewed first"},{"value":"price_asc","label":"Lowest price first (Kieskeurig's own price index; it can lag the live price, measured 3-4 rows out of order per 24)"},{"value":"price_desc","label":"Highest price first (same index)"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Brand name (`Apple`, `JACK & JONES`) or several comma-separated; matched on the site's brand key (letters and digits).","on_invalid":"reject","example":"apple","aliases":["merk","brands"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR, whole euros (the source refuses decimals and matches against the product's cheapest offer). A value below 1 is sent as 1.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR, whole euros (rounded up). The source filters on its own price index, which can lag the live cheapest offer: measured 2026-10-15, wasmachine 300-500 returned 2 of 24 rows at 529 and 259.","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only products the site marks as on offer (aanbieding).","on_invalid":"reject","default":false},{"name":"lowest_price_ever","type":"boolean","required":false,"description":"Only products at their lowest price ever (laagste prijs ooit).","on_invalid":"reject","default":false},{"name":"min_score","type":"number","required":false,"description":"Lowest user review score (1-10 scale).","on_invalid":"reject","example":8,"minimum":1,"maximum":10},{"name":"facet","type":"string","required":false,"description":"Facet option id(s) from `facets[].options[].facet_id` of an earlier `facets` call (like `t23142:iOS`, `p0-100`), comma-separated for several.","on_invalid":"reject","example":"t23142:iOS","aliases":["facets","filter"]},{"name":"range_filter","type":"string","required":false,"description":"One numeric trait range as `<trait_id>_<min>-<max>` (trait ids in `facets[].trait_id`; 23144 = storage GB on smartphones).","on_invalid":"reject","example":"23144_256-512","value_pattern":"\\d+_\\d+(\\.\\d+)?-\\d+(\\.\\d+)?","aliases":["number_filter"]}],"returns":"results[]{product_id, title, brand, url, slug, image, eans[], category_slug, category_path, taxonomy_slug, lowest_total_price, lowest_price, lowest_shipping_cost, lowest_effective_price, lowest_price_shop, lowest_price_shop_id, cheapest_offers[]{shop_id, shop_name, shop_type, total_price, discount_price, effective_price, price, shipping_cost, delivery_code, shop_certificates}, offer_count, currency, review_score, review_count, price_drop_pct, lowest_price_ever, spotlight_specs, promos} + count + total + reachable_total + total_capped + page + limit + has_more + applied{} + price_range_in_results + query + country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 15","country":"nl"}},{"name":"category","description":"One Kieskeurig category listing (e.g. `smartphone`, `wasmachine`, `televisie`, or a top level such as `elektronica`): the same rows as `search`, sorted by popularity by default, with brand, price, offer, score, facet and numeric-trait filters and paging.","required_params":["category"],"optional_params":["country","page","limit","sort","brand","min_price","max_price","on_sale","lowest_price_ever","min_score","facet","range_filter"],"params":[{"name":"category","type":"string","required":true,"description":"Category slug: from the `categories` action, a row's `category_slug`, the first path part of a category URL (kieskeurig.nl/<slug>), or a top level like `elektronica`. An unknown slug is refused (the source would silently list the whole catalogue).","on_invalid":"reject","example":"smartphone","aliases":["category_slug","slug"]},{"name":"country","type":"enum","required":false,"description":"Which Kieskeurig: nl = kieskeurig.nl (Dutch shops), be = kieskeurig.be (Belgian shops). Product ids are shared; offers, prices and counts are per market. Prices in EUR.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands — kieskeurig.nl"},{"value":"be","label":"Belgium — kieskeurig.be"}],"default":"nl","aliases":["market","site"]},{"name":"page","type":"integer","required":false,"description":"Result page. The source serves the first 10 000 rows of a listing (page × limit ≤ 10 000); `reachable_total` says how many that is.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (site default 24).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Most viewed first (site default for categories)"},{"value":"relevance","label":"Source's unsorted order"},{"value":"price_asc","label":"Lowest price first (Kieskeurig's own price index; it can lag the live price, measured 3-4 rows out of order per 24)"},{"value":"price_desc","label":"Highest price first (same index)"}],"default":"popular"},{"name":"brand","type":"string","required":false,"description":"Brand name (`Apple`, `JACK & JONES`) or several comma-separated; matched on the site's brand key (letters and digits).","on_invalid":"reject","example":"apple","aliases":["merk","brands"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR, whole euros (the source refuses decimals and matches against the product's cheapest offer). A value below 1 is sent as 1.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR, whole euros (rounded up). The source filters on its own price index, which can lag the live cheapest offer: measured 2026-10-15, wasmachine 300-500 returned 2 of 24 rows at 529 and 259.","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only products the site marks as on offer (aanbieding).","on_invalid":"reject","default":false},{"name":"lowest_price_ever","type":"boolean","required":false,"description":"Only products at their lowest price ever (laagste prijs ooit).","on_invalid":"reject","default":false},{"name":"min_score","type":"number","required":false,"description":"Lowest user review score (1-10 scale).","on_invalid":"reject","example":8,"minimum":1,"maximum":10},{"name":"facet","type":"string","required":false,"description":"Facet option id(s) from `facets[].options[].facet_id` of an earlier `facets` call (like `t23142:iOS`, `p0-100`), comma-separated for several.","on_invalid":"reject","example":"t23142:iOS","aliases":["facets","filter"]},{"name":"range_filter","type":"string","required":false,"description":"One numeric trait range as `<trait_id>_<min>-<max>` (trait ids in `facets[].trait_id`; 23144 = storage GB on smartphones).","on_invalid":"reject","example":"23144_256-512","value_pattern":"\\d+_\\d+(\\.\\d+)?-\\d+(\\.\\d+)?","aliases":["number_filter"]}],"returns":"results[]{product_id, title, brand, url, slug, image, eans[], category_slug, category_path, taxonomy_slug, lowest_total_price, lowest_price, lowest_shipping_cost, lowest_effective_price, lowest_price_shop, lowest_price_shop_id, cheapest_offers[]{shop_id, shop_name, shop_type, total_price, discount_price, effective_price, price, shipping_cost, delivery_code, shop_certificates}, offer_count, currency, review_score, review_count, price_drop_pct, lowest_price_ever, spotlight_specs, promos} + count + total + reachable_total + total_capped + page + limit + has_more + applied{} + price_range_in_results + category + country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"wasmachine","country":"nl"}},{"name":"facets","description":"The filter lists Kieskeurig shows for a search or a category, with counts: categories, brands, on offer, lowest price ever, price bands and spec traits (string options with their `facet_id`, numeric traits with their `trait_id` and min / median / max). Takes the same filters as `search` / `category`, so counts follow the filters already applied. Give `query` or `category` (or both).","required_params":[],"optional_params":["query","category","country","brand","min_price","max_price","on_sale","lowest_price_ever","min_score","facet","range_filter"],"params":[{"name":"query","type":"string","required":false,"description":"Search words (give query or category).","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Category slug (give query or category).","on_invalid":"reject","example":"smartphone","aliases":["category_slug"]},{"name":"country","type":"enum","required":false,"description":"Which Kieskeurig: nl = kieskeurig.nl (Dutch shops), be = kieskeurig.be (Belgian shops). Product ids are shared; offers, prices and counts are per market. Prices in EUR.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands — kieskeurig.nl"},{"value":"be","label":"Belgium — kieskeurig.be"}],"default":"nl","aliases":["market","site"]},{"name":"brand","type":"string","required":false,"description":"Brand name (`Apple`, `JACK & JONES`) or several comma-separated; matched on the site's brand key (letters and digits).","on_invalid":"reject","example":"apple","aliases":["merk","brands"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR, whole euros (the source refuses decimals and matches against the product's cheapest offer). A value below 1 is sent as 1.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR, whole euros (rounded up). The source filters on its own price index, which can lag the live cheapest offer: measured 2026-10-15, wasmachine 300-500 returned 2 of 24 rows at 529 and 259.","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only products the site marks as on offer (aanbieding).","on_invalid":"reject","default":false},{"name":"lowest_price_ever","type":"boolean","required":false,"description":"Only products at their lowest price ever (laagste prijs ooit).","on_invalid":"reject","default":false},{"name":"min_score","type":"number","required":false,"description":"Lowest user review score (1-10 scale).","on_invalid":"reject","example":8,"minimum":1,"maximum":10},{"name":"facet","type":"string","required":false,"description":"Facet option id(s) from `facets[].options[].facet_id` of an earlier `facets` call (like `t23142:iOS`, `p0-100`), comma-separated for several.","on_invalid":"reject","example":"t23142:iOS","aliases":["facets","filter"]},{"name":"range_filter","type":"string","required":false,"description":"One numeric trait range as `<trait_id>_<min>-<max>` (trait ids in `facets[].trait_id`; 23144 = storage GB on smartphones).","on_invalid":"reject","example":"23144_256-512","value_pattern":"\\d+_\\d+(\\.\\d+)?-\\d+(\\.\\d+)?","aliases":["number_filter"]}],"returns":"facets[]{name, type, trait_id, unit, options[]{facet_id, name, count}, range{min, max, median}} + count + applied{} + query + category + country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"smartphone","country":"nl"}},{"name":"product","description":"One Kieskeurig product with every shop's offer: title, brand, model type, EANs, product family, category, images, summary and description, the full spec sheet and filter traits, review score and count, the site's price-drop badge; plus the live offers (new and refurbished apart) and the lowest prices computed from them.","required_params":["product_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"string","required":true,"description":"Kieskeurig product id: `product_id` of a search / category row, or the number at the start of the product URL slug (/<category>/product/<id>-…).","on_invalid":"reject","example":"42638602","aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which Kieskeurig: nl = kieskeurig.nl (Dutch shops), be = kieskeurig.be (Belgian shops). Product ids are shared; offers, prices and counts are per market. Prices in EUR.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands — kieskeurig.nl"},{"value":"be","label":"Belgium — kieskeurig.be"}],"default":"nl","aliases":["market","site"]}],"returns":"product{product_id, title, type, brand, url, slug, eans[], state, category_slug, category_path, taxonomy_slug, taxonomy_name, family{family_id, name}, series_id, summary, description, images[], review_score, review_count, price_drop_pct, lowest_price_ever, spotlight_specs, traits[]{group, trait_id, name, value, unit}, specs[]{group, label, value}} + offers[] + refurbished_offers[] (same shape as the offers action) + summary{lowest_total_price, lowest_effective_price, lowest_price, highest_total_price, cheapest_shop, offer_count, lowest_total_price_refurbished, refurbished_offer_count, lowest_total_price_any_condition, currency} + country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"50848486","country":"nl"}},{"name":"offers","description":"Every shop's offer for one product on Kieskeurig: shop (name, id, type, rating and count, official dealer and quality-mark flags), item price, shipping cost, total incl. shipping, a shop's temporary discount price where the site shows one, delivery promise, the shop's own text and the click-out link. New offers in the site's order (cheapest effective price first); refurbished offers apart.","required_params":["product_id"],"optional_params":["country","condition"],"params":[{"name":"product_id","type":"string","required":true,"description":"Kieskeurig product id: `product_id` of a search / category row, or the number at the start of the product URL slug (/<category>/product/<id>-…).","on_invalid":"reject","example":"42638602","aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which Kieskeurig: nl = kieskeurig.nl (Dutch shops), be = kieskeurig.be (Belgian shops). Product ids are shared; offers, prices and counts are per market. Prices in EUR.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands — kieskeurig.nl"},{"value":"be","label":"Belgium — kieskeurig.be"}],"default":"nl","aliases":["market","site"]},{"name":"condition","type":"enum","required":false,"description":"Which offers.","on_invalid":"reject","allowed_values":[{"value":"all","label":"New offers and refurbished offers (apart)"},{"value":"new","label":"New offers only (the site's main list)"},{"value":"refurbished","label":"Refurbished offers only"}],"default":"all"}],"returns":"offers[]{position, offer_id, condition, total_price, price, shipping_cost, total_matches_price_plus_shipping, discount_price, effective_price, currency, ean, delivery_code, delivery_text, promotion, label, shop_text, offer_description, clickout_url, shop{shop_id, name, slug, type, rating, rating_count, review_count, official_dealer, kieskeurig_quality_mark, thuiswinkel_member, becommerce_member, logo}} + refurbished_offers[] + count + summary{…} + condition + country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"50848486","country":"nl"}},{"name":"price_history","description":"Kieskeurig's own price history for one product: the lowest price on each day (about six months, one point a day), with lowest / highest / median in the range. The chart's daily lowest spans every offer and can hold single days far below the band; those are kept as published and flagged `suspect_low`. Each point carries the EAN it belongs to and is checked against the product's own EANs.","required_params":["product_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"string","required":true,"description":"Kieskeurig product id: `product_id` of a search / category row, or the number at the start of the product URL slug (/<category>/product/<id>-…).","on_invalid":"reject","example":"42638602","aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which Kieskeurig: nl = kieskeurig.nl (Dutch shops), be = kieskeurig.be (Belgian shops). Product ids are shared; offers, prices and counts are per market. Prices in EUR.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands — kieskeurig.nl"},{"value":"be","label":"Belgium — kieskeurig.be"}],"default":"nl","aliases":["market","site"]}],"returns":"product_id + title + points[]{date, lowest_price, ean, suspect_low} + count + first_date + last_date + lowest_in_range{date, lowest_price} + lowest_in_range_excluding_suspect + highest_in_range + median_in_range + suspect_point_count + chart_eans + identity{requested_product_id, page_product_id, product_eans, all_points_match} + current_lowest_total_price + lowest_price_ever + currency + country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"50848486","country":"nl"}},{"name":"reviews","description":"User reviews of one product on Kieskeurig, 25 per page: score (1-10), title, text, date, whether the reviewer bought it, language, likes, criteria ratings, pros and cons, and which product variant the review was written for.","required_params":["product_id"],"optional_params":["country","page"],"params":[{"name":"product_id","type":"string","required":true,"description":"Kieskeurig product id: `product_id` of a search / category row, or the number at the start of the product URL slug (/<category>/product/<id>-…).","on_invalid":"reject","example":"42638602","aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which Kieskeurig: nl = kieskeurig.nl (Dutch shops), be = kieskeurig.be (Belgian shops). Product ids are shared; offers, prices and counts are per market. Prices in EUR.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands — kieskeurig.nl"},{"value":"be","label":"Belgium — kieskeurig.be"}],"default":"nl","aliases":["market","site"]},{"name":"page","type":"integer","required":false,"description":"Review page, 25 reviews each.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"reviews[]{review_id, score, score_max, title, text, date, acquired, acquired_label, author, language, likes, recommend, official, ratings[], pros[], cons[], reaction_count, reviewed_product_id, other_variant, family_id} + count + total + page + total_pages + has_more + review_score + product_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"50848486","country":"nl"}},{"name":"categories","description":"Kieskeurig's category list (slug + name, about 1 270 entries) for the `category` parameter. Top-level groups such as `elektronica` work too but are not in this list.","required_params":[],"optional_params":["country","query"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Kieskeurig: nl = kieskeurig.nl (Dutch shops), be = kieskeurig.be (Belgian shops). Product ids are shared; offers, prices and counts are per market. Prices in EUR.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands — kieskeurig.nl"},{"value":"be","label":"Belgium — kieskeurig.be"}],"default":"nl","aliases":["market","site"]},{"name":"query","type":"string","required":false,"description":"Keep only categories whose name or slug contains this text.","on_invalid":"reject","example":"wasmachine","aliases":["q"]}],"returns":"categories[]{slug, name} + count + total + country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"wasmachine"}}]},{"name":"kijiji","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Kijiji API — Canada's #1 classifieds (kijiji.ca): search the marketplace, cars and real estate, read the full listing with seller and category path, browse categories, autocomplete and a seller's other listings. Prices in CAD, English or French labels. No account, no browser; private sellers' data stays private.","version":"0.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/kijiji/v1","spec_available":true,"actions":[{"name":"search","description":"Search kijiji.ca listings across every category (Buy & Sell, Cars & Vehicles, Real Estate, Pets, Services …) by keyword, category, location or postal code + radius: listing id, title, price in CAD with its type (fixed, please contact, swap/trade, free), wanted or offered, city, province and postal prefix, posting date, private or dealer seller, vehicle and property details, photo, and the true total. Paid top ads come back separately. Filter by price, free / contact-only, wanted ads, seller type and any category filter (make, year, bedrooms …); sort by newest, oldest or price.","required_params":[],"optional_params":["query","category_id","location_id","postal_code","radius_km","page","sort","price_min","price_max","price_type","ad_type","seller_type","filters","include_facets","language","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. Optional when category_id, location_id or postal_code narrows the search.","on_invalid":"reject","example":"mountain bike","aliases":["q","keyword","keywords"]},{"name":"category_id","type":"integer","required":false,"description":"kijiji category id from `categories` or a search's category_facets — e.g. 10 Buy & Sell, 644 Bikes, 27 Cars & Vehicles, 174 Cars & Trucks, 34 Real Estate, 37 Apartments & Condos for rent, 17220001 Free Stuff. 0 = all categories.","on_invalid":"reject","example":644,"minimum":0,"aliases":["category"]},{"name":"location_id","type":"integer","required":false,"description":"kijiji location id from a search's location_facets — provinces (9004 Ontario, 9001 Quebec, 9003 Alberta, 9007 British Columbia …) and cities/regions (1700273 City of Toronto, 1700281 Montreal …). 0 = all of Canada.","on_invalid":"reject","example":9004,"minimum":0,"aliases":["location"]},{"name":"postal_code","type":"string","required":false,"description":"Canadian postal code (M5V 3L9) or its first three characters (M5V). Searches around it within radius_km; rows then carry location.distance_m.","on_invalid":"reject","example":"M5V 3L9","aliases":["postcode","zip"]},{"name":"radius_km","type":"number","required":false,"description":"Search radius around postal_code, in km (1-1000).","on_invalid":"reject","default":10,"minimum":1,"maximum":1000,"aliases":["radius"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-100 (40 listings per page). kijiji serves no more than 100 pages.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results. A sort the site does not apply to this search is rejected instead of silently falling back to newest.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (site default)"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Lowest price first — free and 'please contact' ads come first"},{"value":"price_desc","label":"Highest price first"}],"default":"newest"},{"name":"price_min","type":"number","required":false,"description":"Lowest asking price in CAD (whole dollars).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest asking price in CAD (whole dollars).","on_invalid":"reject","minimum":0},{"name":"price_type","type":"enum","required":false,"description":"Only give-away ads or only ads without a published price.","on_invalid":"reject","allowed_values":[{"value":"free","label":"Free / give-away only"},{"value":"contact","label":"'Please contact' only (no price shown)"}]},{"name":"ad_type","type":"enum","required":false,"description":"kijiji returns offers unless wanted ads are asked for. A wanted ad's price is the buyer's budget.","on_invalid":"reject","allowed_values":[{"value":"offer","label":"Offering (site default)"},{"value":"wanted","label":"Wanted — buyers looking for an item"}],"default":"offer"},{"name":"seller_type","type":"enum","required":false,"description":"Only private sellers or only dealers (categories that publish 'For Sale By').","on_invalid":"reject","allowed_values":[{"value":"owner","label":"Private owner"},{"value":"dealer","label":"Dealer / business"}]},{"name":"filters","type":"object","required":false,"description":"Category-specific filters by the site's own names, from filters_available (include_facets=true): a value (`{\"carmake\": \"honda\"}`), several values (`[\"honda\", \"toyota\"]`) or a range (`\"2015__2018\"` or `{\"min\": 2015, \"max\": 2018}`). A filter the site does not apply is rejected.","on_invalid":"reject","example":{"carmake":"honda","caryear":"2015__2018"}},{"name":"include_facets","type":"boolean","required":false,"description":"Also return category_facets, location_facets and filters_available with counts.","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, url, listing_format (standard|autos|real_estate — the site's record type, not the category), listing_type (offer|wanted), price (CAD, null unless an amount is published), currency, price_type (fixed|contact|swap_trade|give_away), is_free, price_before_drop, msrp, price_extras (e.g. PLUS_TAXES), price_rating (vehicles), category_id, location{location_id, location_name, city, province, postal_prefix, neighbourhood, distance_m — every seller; address, postal_code, nearest_intersection, latitude, longitude — businesses, or with include_pii}, posted_at, sorted_at, seller_type (private|business), seller_id, seller_rating, seller_verified, is_top_ad, ad_source, price_drop, highlighted, shipped_by_seller, description_excerpt, image, image_count, vehicle{make, model, trim, year, mileage_km, condition, body_type, transmission, drivetrain, fuel_type, colour, doors, seats, vin}, property{bedrooms, bathrooms, area_sqft, unit_type, furnished, pets_allowed, parking_spots, date_available, agreement_type, rented_by, utilities_included, smoking_permitted}, attributes[]{name, codes}, duplicate_of}, count, total_results, page, page_size, last_page, has_more, sort_applied, filters_applied[], category{category_id, name, path[]}, location{location_id, name}, radius_km, keywords, site_search_url, top_ads[] (paid placements, same row shape), category_facets[], location_facets[], filters_available[] (include_facets), currency","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bike"}},{"name":"cars/search","description":"Search cars and trucks (and other vehicles) on kijiji.ca — Canada's largest used-car marketplace: make, model, trim, year, mileage in km, body type, transmission, drivetrain, fuel, colour, VIN, price in CAD with dealer extras (plus taxes, MSRP, kijiji's price rating) and dealer or private seller. Filter by make, model, year, mileage, body type, fuel, drivetrain, condition, price, seller type, location or postal code; sort by newest, oldest, price or mileage.","required_params":[],"optional_params":["make","model","year_min","year_max","mileage_min_km","mileage_max_km","body_type","fuel_type","drivetrain","condition","query","category_id","location_id","postal_code","radius_km","page","sort","price_min","price_max","price_type","ad_type","seller_type","filters","include_facets","language","max_rotations"],"params":[{"name":"make","type":"string","required":false,"description":"Make code as kijiji writes it (honda, toyota, mercedesbenz …; see filters_available).","on_invalid":"reject","example":"honda","aliases":["carmake"]},{"name":"model","type":"string","required":false,"description":"Model code (civic, corolla …).","on_invalid":"reject","example":"civic","aliases":["carmodel"]},{"name":"year_min","type":"integer","required":false,"description":"","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_min_km","type":"integer","required":false,"description":"","on_invalid":"reject","minimum":0},{"name":"mileage_max_km","type":"integer","required":false,"description":"","on_invalid":"reject","minimum":0},{"name":"body_type","type":"string","required":false,"description":"Body type code (sedan, suvcrossover, pickuptruck, coup, htchbck, conv, minivan …).","on_invalid":"reject","example":"suvcrossover"},{"name":"fuel_type","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"gas","label":"Gas"},{"value":"diesel","label":"Diesel"},{"value":"electric","label":"Electric"},{"value":"hybrid","label":"Hybrid"},{"value":"other","label":"Other"}]},{"name":"drivetrain","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"4x4","label":"4x4"},{"value":"awd","label":"AWD"},{"value":"fwd","label":"FWD"},{"value":"rwd","label":"RWD"}]},{"name":"condition","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used","label":"Used"},{"value":"lease","label":"Lease takeover"},{"value":"damaged","label":"Damaged"}]},{"name":"category_id","type":"integer","required":false,"description":"Vehicle category, default 174 Cars & Trucks (27 = all Cars & Vehicles).","on_invalid":"reject","default":174,"minimum":0,"aliases":["category"]},{"name":"query","type":"string","required":false,"description":"Keyword. Optional when category_id, location_id or postal_code narrows the search.","on_invalid":"reject","example":"mountain bike","aliases":["q","keyword","keywords"]},{"name":"location_id","type":"integer","required":false,"description":"kijiji location id from a search's location_facets — provinces (9004 Ontario, 9001 Quebec, 9003 Alberta, 9007 British Columbia …) and cities/regions (1700273 City of Toronto, 1700281 Montreal …). 0 = all of Canada.","on_invalid":"reject","example":9004,"minimum":0,"aliases":["location"]},{"name":"postal_code","type":"string","required":false,"description":"Canadian postal code (M5V 3L9) or its first three characters (M5V). Searches around it within radius_km; rows then carry location.distance_m.","on_invalid":"reject","example":"M5V 3L9","aliases":["postcode","zip"]},{"name":"radius_km","type":"number","required":false,"description":"Search radius around postal_code, in km (1-1000).","on_invalid":"reject","default":10,"minimum":1,"maximum":1000,"aliases":["radius"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-100 (40 listings per page). kijiji serves no more than 100 pages.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (site default)"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Lowest price first — free and 'please contact' ads come first"},{"value":"price_desc","label":"Highest price first"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"}],"default":"newest"},{"name":"price_min","type":"number","required":false,"description":"Lowest asking price in CAD (whole dollars).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest asking price in CAD (whole dollars).","on_invalid":"reject","minimum":0},{"name":"seller_type","type":"enum","required":false,"description":"Only private sellers or only dealers (categories that publish 'For Sale By').","on_invalid":"reject","allowed_values":[{"value":"owner","label":"Private owner"},{"value":"dealer","label":"Dealer / business"}]},{"name":"filters","type":"object","required":false,"description":"Category-specific filters by the site's own names, from filters_available (include_facets=true): a value (`{\"carmake\": \"honda\"}`), several values (`[\"honda\", \"toyota\"]`) or a range (`\"2015__2018\"` or `{\"min\": 2015, \"max\": 2018}`). A filter the site does not apply is rejected.","on_invalid":"reject","example":{"carmake":"honda","caryear":"2015__2018"}},{"name":"include_facets","type":"boolean","required":false,"description":"Also return category_facets, location_facets and filters_available with counts.","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, url, listing_format (standard|autos|real_estate — the site's record type, not the category), listing_type (offer|wanted), price (CAD, null unless an amount is published), currency, price_type (fixed|contact|swap_trade|give_away), is_free, price_before_drop, msrp, price_extras (e.g. PLUS_TAXES), price_rating (vehicles), category_id, location{location_id, location_name, city, province, postal_prefix, neighbourhood, distance_m — every seller; address, postal_code, nearest_intersection, latitude, longitude — businesses, or with include_pii}, posted_at, sorted_at, seller_type (private|business), seller_id, seller_rating, seller_verified, is_top_ad, ad_source, price_drop, highlighted, shipped_by_seller, description_excerpt, image, image_count, vehicle{make, model, trim, year, mileage_km, condition, body_type, transmission, drivetrain, fuel_type, colour, doors, seats, vin}, property{bedrooms, bathrooms, area_sqft, unit_type, furnished, pets_allowed, parking_spots, date_available, agreement_type, rented_by, utilities_included, smoking_permitted}, attributes[]{name, codes}, duplicate_of}, count, total_results, page, page_size, last_page, has_more, sort_applied, filters_applied[], category{category_id, name, path[]}, location{location_id, name}, radius_km, keywords, site_search_url, top_ads[] (paid placements, same row shape), category_facets[], location_facets[], filters_available[] (include_facets), currency","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"honda"}},{"name":"real_estate/search","description":"Search kijiji.ca real estate — apartments and condos for rent, houses for rent and for sale, rooms, land and commercial space: rent or price in CAD, bedrooms, bathrooms, size in sq ft, unit type, furnished, pets, parking, move-in date, utilities included, neighbourhood, and whether the owner or a property manager lists it. Filter by bedrooms, bathrooms, unit type, furnished, pets, size, price, landlord type, location or postal code; sort by newest, oldest or price.","required_params":[],"optional_params":["bedrooms","bathrooms","unit_type","furnished","pets_allowed","rented_by","area_min_sqft","area_max_sqft","query","category_id","location_id","postal_code","radius_km","page","sort","price_min","price_max","price_type","ad_type","seller_type","filters","include_facets","language","max_rotations"],"params":[{"name":"bedrooms","type":"string","required":false,"description":"Bedroom count as kijiji lists it: 0 (bachelor/studio), 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5.","on_invalid":"reject","example":"2"},{"name":"bathrooms","type":"number","required":false,"description":"Bathroom count (1, 1.5, 2 …).","on_invalid":"reject","minimum":1,"maximum":10},{"name":"unit_type","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"Apartment"},{"value":"condo","label":"Condo"},{"value":"basement-apartment","label":"Basement apartment"},{"value":"house","label":"House"},{"value":"townhouse","label":"Townhouse"},{"value":"duplex-triplex","label":"Duplex / triplex"}]},{"name":"furnished","type":"boolean","required":false,"description":"","on_invalid":"reject"},{"name":"pets_allowed","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"1","label":"Yes"},{"value":"0","label":"No"},{"value":"limited","label":"Limited"}]},{"name":"rented_by","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"owner","label":"Owner"},{"value":"professional","label":"Professional / property manager"}]},{"name":"area_min_sqft","type":"integer","required":false,"description":"","on_invalid":"reject","minimum":0},{"name":"area_max_sqft","type":"integer","required":false,"description":"","on_invalid":"reject","minimum":0},{"name":"category_id","type":"integer","required":false,"description":"Real-estate category, default 34 (all real estate). 37 Apartments & Condos for rent, 30349001 For Rent, 35 Houses for Sale, 641 Land for Sale, 40 Commercial & Office Space — more in category_facets.","on_invalid":"reject","default":34,"minimum":0,"aliases":["category"]},{"name":"query","type":"string","required":false,"description":"Keyword. Optional when category_id, location_id or postal_code narrows the search.","on_invalid":"reject","example":"mountain bike","aliases":["q","keyword","keywords"]},{"name":"location_id","type":"integer","required":false,"description":"kijiji location id from a search's location_facets — provinces (9004 Ontario, 9001 Quebec, 9003 Alberta, 9007 British Columbia …) and cities/regions (1700273 City of Toronto, 1700281 Montreal …). 0 = all of Canada.","on_invalid":"reject","example":9004,"minimum":0,"aliases":["location"]},{"name":"postal_code","type":"string","required":false,"description":"Canadian postal code (M5V 3L9) or its first three characters (M5V). Searches around it within radius_km; rows then carry location.distance_m.","on_invalid":"reject","example":"M5V 3L9","aliases":["postcode","zip"]},{"name":"radius_km","type":"number","required":false,"description":"Search radius around postal_code, in km (1-1000).","on_invalid":"reject","default":10,"minimum":1,"maximum":1000,"aliases":["radius"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-100 (40 listings per page). kijiji serves no more than 100 pages.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results. A sort the site does not apply to this search is rejected instead of silently falling back to newest.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (site default)"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Lowest price first — free and 'please contact' ads come first"},{"value":"price_desc","label":"Highest price first"}],"default":"newest"},{"name":"price_min","type":"number","required":false,"description":"Lowest asking price in CAD (whole dollars).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest asking price in CAD (whole dollars).","on_invalid":"reject","minimum":0},{"name":"filters","type":"object","required":false,"description":"Category-specific filters by the site's own names, from filters_available (include_facets=true): a value (`{\"carmake\": \"honda\"}`), several values (`[\"honda\", \"toyota\"]`) or a range (`\"2015__2018\"` or `{\"min\": 2015, \"max\": 2018}`). A filter the site does not apply is rejected.","on_invalid":"reject","example":{"carmake":"honda","caryear":"2015__2018"}},{"name":"include_facets","type":"boolean","required":false,"description":"Also return category_facets, location_facets and filters_available with counts.","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, url, listing_format (standard|autos|real_estate — the site's record type, not the category), listing_type (offer|wanted), price (CAD, null unless an amount is published), currency, price_type (fixed|contact|swap_trade|give_away), is_free, price_before_drop, msrp, price_extras (e.g. PLUS_TAXES), price_rating (vehicles), category_id, location{location_id, location_name, city, province, postal_prefix, neighbourhood, distance_m — every seller; address, postal_code, nearest_intersection, latitude, longitude — businesses, or with include_pii}, posted_at, sorted_at, seller_type (private|business), seller_id, seller_rating, seller_verified, is_top_ad, ad_source, price_drop, highlighted, shipped_by_seller, description_excerpt, image, image_count, vehicle{make, model, trim, year, mileage_km, condition, body_type, transmission, drivetrain, fuel_type, colour, doors, seats, vin}, property{bedrooms, bathrooms, area_sqft, unit_type, furnished, pets_allowed, parking_spots, date_available, agreement_type, rented_by, utilities_included, smoking_permitted}, attributes[]{name, codes}, duplicate_of}, count, total_results, page, page_size, last_page, has_more, sort_applied, filters_applied[], category{category_id, name, path[]}, location{location_id, name}, radius_km, keywords, site_search_url, top_ads[] (paid placements, same row shape), category_facets[], location_facets[], filters_available[] (include_facets), currency","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"bedrooms":"2"}},{"name":"listing","description":"The full kijiji.ca listing by id or URL: title, full description, price in CAD with its type, status (active, deleted, expired), wanted or offered, category path, every attribute with its label, every photo, video and virtual-tour links, city, province and postal prefix, posting and expiry dates, view count, vehicle details (make, model, year, km, VIN, dealer price extras and market price rating) or property details (bedrooms, bathrooms, size, utilities, neighbourhood walk/transit scores), and the seller — for businesses the dealer or agency name, website, profile and member-since date; for private sellers only type, member-since and listing count.","required_params":["listing_id"],"optional_params":["language","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Listing id (the number at the end of a kijiji.ca/v-… URL) or the full listing URL.","on_invalid":"reject","example":"1743275135","aliases":["id","ad_id","url"]},{"name":"language","type":"enum","required":false,"description":"Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, title, url, status (active|deleted|expired|…), is_active, listing_format, listing_type, price, currency, price_type, is_free, price_before_drop, msrp, price_extras, price_rating, market_average_price, description, category_id, category, category_path[]{category_id, name}, location{…}, neighbourhood{name, summary, walk_score, transit_score, cycle_score}, posted_at, sorted_at, expires_at, views, images[], image_count, video_url, virtual_tour_url, is_mls_listing, rental_badge, vehicle{…}, property{…}, attributes[]{name, codes, label, values}, flags{is_top_ad_listing, price_drop, highlighted, from_dealer, financing_available, trade_in_accepted, commission_free}, seller{type, id, name (businesses; private sellers with include_pii, which the gateway sets by default), verified, has_phone, phone (masked by kijiji itself, e.g. 780717xxxx), member_since, listing_count, profile_url, website_url, account_type}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"1743275135"}},{"name":"categories","description":"kijiji.ca's category tree one level at a time, with live listing counts: the sub-categories of a category (all of Canada or one location), plus the locations below the chosen one and the filters that category supports. Pass a node's category_id back to walk down.","required_params":[],"optional_params":["category_id","location_id","query","language","max_rotations"],"params":[{"name":"category_id","type":"integer","required":false,"description":"kijiji category id from `categories` or a search's category_facets — e.g. 10 Buy & Sell, 644 Bikes, 27 Cars & Vehicles, 174 Cars & Trucks, 34 Real Estate, 37 Apartments & Condos for rent, 17220001 Free Stuff. 0 = all categories.","on_invalid":"reject","example":644,"minimum":0,"aliases":["category"]},{"name":"location_id","type":"integer","required":false,"description":"kijiji location id from a search's location_facets — provinces (9004 Ontario, 9001 Quebec, 9003 Alberta, 9007 British Columbia …) and cities/regions (1700273 City of Toronto, 1700281 Montreal …). 0 = all of Canada.","on_invalid":"reject","example":9004,"minimum":0,"aliases":["location"]},{"name":"query","type":"string","required":false,"description":"Optional keyword: counts are then for that keyword.","on_invalid":"reject","example":"bike","aliases":["q"]},{"name":"language","type":"enum","required":false,"description":"Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"category{category_id, name, path[]}, categories[]{category_id, name, count}, count, total_results, locations[]{location_id, name, count}, filters_available[]{name, label, group, kind, values[], min, max}, location{location_id, name}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":644}},{"name":"suggest","description":"kijiji.ca search autocomplete: completed keywords for a partial term, each with the categories it is most often searched in.","required_params":["query"],"optional_params":["language","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The partial keyword.","on_invalid":"reject","example":"mountain bi","aliases":["q","prefix"]},{"name":"language","type":"enum","required":false,"description":"Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{keyword, categories[]{category_id, name}}, count, query","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bike"}},{"name":"seller_listings","description":"All current listings of one kijiji.ca seller (a dealer, agency or private seller), newest first: listing id, title, price, city, category and photo — with the business name for dealers.","required_params":["seller_id"],"optional_params":["page","language","max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"The seller id from a search row (seller_id) or listing (seller.id).","on_invalid":"reject","example":"1013972214","aliases":["poster_id","profile_id"]},{"name":"page","type":"integer","required":false,"description":"Page, 20 listings per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"language","type":"enum","required":false,"description":"Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"seller{id, type, name (businesses), listing_count, member_since, profile_url}, results[]{listing_id, title, url, price, price_type, is_free, city, category_id, image, posted_at, is_top_ad}, count, page, has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"1013972214"}}]},{"name":"kilimall","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Kilimall API — Kenya and Uganda marketplace prices (KES / UGX), list price and promotions, stock by source, Fulfilled-by-Kilimall / overseas / local dispatch, stores with ratings, reviews","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/kilimall/v1","spec_available":true,"actions":[{"name":"search","description":"Search Kilimall (Kenya kilimall.co.ke or Uganda kilimall.ug) by keyword and/or category, department or brand, with a price range, fulfilment (Fulfilled by Kilimall / overseas shipment / local dispatch), ships-from country and store badge filters, sorted by relevance, price, top sales or newest. Each row: listing id, title, URL, image, lowest and highest variant price, list-price range, rating and review count, fulfilment tags, store badge (brand_official / brand_authorized / none). Plus the source's total (capped at 10,000). One of `query`, `category_id` or `department_id` is required.","required_params":[],"optional_params":["query","category_id","department_id","brand","min_price","max_price","fulfilment","ships_from","store_type","sort","country","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Search words, as typed in Kilimall's search box.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"category_id","type":"string","required":false,"description":"Kilimall category id (digits): from a product's `categories`, or from the `categories` action with a `department_id`.","on_invalid":"reject","example":"4224","aliases":["category","cat"]},{"name":"department_id","type":"string","required":false,"description":"Kilimall department id (digits) from the `categories` action (e.g. 872 = Phones & Accessories).","on_invalid":"reject","example":"872","aliases":["department","front_category_id"]},{"name":"brand","type":"string","required":false,"description":"Brand as Kilimall writes it (e.g. Apple, Samsung). Matched case-insensitively.","on_invalid":"reject","example":"Apple"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in the site's currency (KES / UGX); a listing matches when its variant price range reaches this.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in the site's currency (applies to the listing's lowest variant price).","on_invalid":"reject","example":20000,"minimum":0,"aliases":["price_max"]},{"name":"fulfilment","type":"enum","required":false,"description":"Only listings with this delivery type.","on_invalid":"reject","allowed_values":[{"value":"kilimall","label":"Fulfilled by Kilimall (Kilimall warehouse)"},{"value":"overseas","label":"Oversea shipment"},{"value":"local","label":"Local dispatch by the seller"}],"example":"kilimall","aliases":["fulfillment","delivery"]},{"name":"ships_from","type":"enum","required":false,"description":"Only listings that ship from this country (the site's own 'Shipped from' filter).","on_invalid":"reject","allowed_values":[{"value":"kenya","label":"Ships from Kenya"},{"value":"china","label":"Ships from China"}],"example":"kenya"},{"name":"store_type","type":"enum","required":false,"description":"Only listings from stores with this badge.","on_invalid":"reject","allowed_values":[{"value":"brand_official","label":"Brand official store"},{"value":"brand_authorized","label":"Brand authorised store"}],"example":"brand_official"},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"top_sales","label":"Top sales"},{"value":"newest","label":"Latest"}],"default":"relevance","example":"price_asc"},{"name":"country","type":"enum","required":false,"description":"Which Kilimall site: KE (Kenya, KES) or UG (Uganda, UGX).","on_invalid":"reject","allowed_values":[{"value":"KE","label":"Kenya — kilimall.co.ke, prices in KES"},{"value":"UG","label":"Uganda — kilimall.ug, prices in UGX"}],"default":"KE","example":"KE"},{"name":"page","type":"integer","required":false,"description":"Result page, starting at 1. The source serves the first 10,000 results only.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100; the site uses 36).","on_invalid":"reject","default":36,"example":36,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"results[]{listing_id, sku_id, title, short_title, url, image, currency, price, price_max, list_price_min, list_price_max, rating, review_count, rating_scale, fulfilment[], delivery_tags[], store_badge, big_discount_sale, tags[], highlights[]} + total, total_capped, page, page_size, last_page, has_more, country, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone"}},{"name":"product","description":"Full record of one Kilimall listing: title, price in KES / UGX (the live promotion price when one runs, with its window), sale and list price, discount, stock as the site shows it plus the Kilimall-warehouse / overseas / seller stock, every variant with its own price and stock, fulfilment and ships-from town, warranty / exchange / return days, store vouchers, specifications, category path, images, video, rating histogram and the store with its rating and followers.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Kilimall listing id exactly as a search row returns it in `listing_id` (digits; the number after /listing/ in a kilimall.co.ke or kilimall.ug URL). A listing URL is accepted too.","on_invalid":"reject","example":"1001816391","aliases":["product_id","id","url","listing_url"]},{"name":"country","type":"enum","required":false,"description":"Which Kilimall site: KE (Kenya, KES) or UG (Uganda, UGX).","on_invalid":"reject","allowed_values":[{"value":"KE","label":"Kenya — kilimall.co.ke, prices in KES"},{"value":"UG","label":"Uganda — kilimall.ug, prices in UGX"}],"default":"KE","example":"KE"}],"returns":"{listing_id, sku_id, title, short_title, url, currency, price, regular_sale_price, list_price, price_before_discount, discount_percent, promotion{type, price, starts_at, ends_at}, in_stock, stock_quantity, stock_status, stock_kilimall_warehouse, stock_overseas, stock_seller, ships_by, fulfilment, ships_from, warranty_days, exchange_days, return_refund_days, rating, review_count, rating_histogram[], images[], video_url, in_the_box, description, specifications[]{name, value}, variant_options[], variants[]{sku_id, options, sale_price, list_price, discount_percent, in_stock, stock_quantity, …}, categories[]{id, name}, store_vouchers[], store{store_id, name, badge, rating, review_count, followers, product_count, …}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"1001816391"}},{"name":"reviews","description":"Customer reviews of one Kilimall listing: product, delivery and service score, review text, photos, the variant bought and its price, reviewer name as the site shows it ('Anonymous User' for reviewers who chose anonymity) plus the name, account id and avatar the review payload itself carries, date, likes and the seller's reply. Paged, with the source's total.","required_params":["listing_id"],"optional_params":["sort","page","page_size","country"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Kilimall listing id exactly as a search row returns it in `listing_id` (digits; the number after /listing/ in a kilimall.co.ke or kilimall.ug URL). A listing URL is accepted too.","on_invalid":"reject","example":"1001816391","aliases":["product_id","id","url","listing_url"]},{"name":"sort","type":"enum","required":false,"description":"Review order as the site offers it.","on_invalid":"reject","allowed_values":[{"value":"top","label":"Kilimall's top reviews first"},{"value":"default","label":"Kilimall's standard order"}],"default":"top","example":"top"},{"name":"country","type":"enum","required":false,"description":"Which Kilimall site: KE (Kenya, KES) or UG (Uganda, UGX).","on_invalid":"reject","allowed_values":[{"value":"KE","label":"Kenya — kilimall.co.ke, prices in KES"},{"value":"UG","label":"Uganda — kilimall.ug, prices in UGX"}],"default":"KE","example":"KE"},{"name":"page","type":"integer","required":false,"description":"Page, starting at 1.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit","per_page"]}],"returns":"{listing_id, total, page, page_size, has_more, reviews[]{review_id, rating, delivery_rating, service_rating, comment, images[], videos[], author (as the site prints it), author_name (the name in the payload, also for anonymous reviews), author_id, author_avatar, order_id, anonymous, date, variant, sku_id, price_paid, likes, replies, seller_reply{comment, date, author}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"1001816391"}},{"name":"store","description":"A Kilimall marketplace store: name, badge (brand official / authorised), rating and review count, followers, number of products, shipping address as the store states it, plus one page of the store's listings (same row shape as search), optionally searched and sorted.","required_params":["store_id"],"optional_params":["query","sort","country","page","page_size"],"params":[{"name":"store_id","type":"string","required":true,"description":"Store id (digits) — a product's `store.store_id`.","on_invalid":"reject","example":"100012240","aliases":["store","seller_id","id"]},{"name":"query","type":"string","required":false,"description":"Only this store's listings matching these words.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"sort","type":"enum","required":false,"description":"Order of the store's listings.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"top_sales","label":"Top sales"},{"value":"newest","label":"Latest"}],"default":"relevance","example":"price_asc"},{"name":"country","type":"enum","required":false,"description":"Which Kilimall site: KE (Kenya, KES) or UG (Uganda, UGX).","on_invalid":"reject","allowed_values":[{"value":"KE","label":"Kenya — kilimall.co.ke, prices in KES"},{"value":"UG","label":"Uganda — kilimall.ug, prices in UGX"}],"default":"KE","example":"KE"},{"name":"page","type":"integer","required":false,"description":"Result page, starting at 1. The source serves the first 10,000 results only.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100; the site uses 36).","on_invalid":"reject","default":36,"example":36,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"{store{store_id, name, alias, url, logo, badge, rating, review_count, followers, product_count, shipping_address}, results[] (search rows), total, page, page_size, last_page, has_more}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"100012240"}},{"name":"categories","description":"Kilimall's departments (id, name) as the site's menu lists them; with `department_id`, the categories the source lists under that department (id, name) — those ids work in search `category_id`.","required_params":[],"optional_params":["department_id","country"],"params":[{"name":"department_id","type":"string","required":false,"description":"A department id from this action's first call.","on_invalid":"reject","example":"872","aliases":["department","parent_id"]},{"name":"country","type":"enum","required":false,"description":"Which Kilimall site: KE (Kenya, KES) or UG (Uganda, UGX).","on_invalid":"reject","allowed_values":[{"value":"KE","label":"Kenya — kilimall.co.ke, prices in KES"},{"value":"UG","label":"Uganda — kilimall.ug, prices in UGX"}],"default":"KE","example":"KE"}],"returns":"departments[]{department_id, name, url} or categories[]{category_id, name} + total","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"department_id":"872"}}]},{"name":"kitantik","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Kitantik — Turkish rare books, antiques, ephemera & auctions","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/kitantik/v1","spec_available":true,"actions":[{"name":"search","description":"Search kitantik.com listings — second-hand and rare books, antiques, ephemera, coins, stamps, postcards, records — by keyword, category or shop, with the site's own filters. Needs at least one of query, category_id or store_id.","required_params":[],"optional_params":["query","category_id","store_id","condition","listing_type","has_image","binding","features","min_price","max_price","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over titles, authors, publishers and descriptions, as the site's own search box (Turkish works best: 'nutuk', 'osmanlıca', 'pul', 'kartpostal'). One of query, category_id or store_id is required.","on_invalid":"reject","example":"nutuk","aliases":["q","keyword","st"]},{"name":"category_id","type":"integer","required":false,"description":"Kitantik category id (the `category_id` values in the `categories` facet of any search, or a product's `category_path`). 181 = Kitap (books).","on_invalid":"reject","example":550,"minimum":1,"aliases":["category"]},{"name":"store_id","type":"string","required":false,"description":"Only this shop's listings: a `seller.store_id` / `store_id` value from product, auctions or auction_lots.","on_invalid":"reject","example":"0z8kgltj5olbl5t1006","aliases":["seller_id","shop_id"]},{"name":"condition","type":"enum","required":false,"description":"New or second-hand (the site's 'Kullanım Durumu').","on_invalid":"reject","allowed_values":[{"value":"new","label":"Yeni / new"},{"value":"second_hand","label":"İkinci El / second-hand"}]},{"name":"listing_type","type":"enum","required":false,"description":"'auction' keeps only items currently in an auction (their cards carry no fixed price). Default all.","on_invalid":"reject","allowed_values":[{"value":"all","label":"all listings"},{"value":"auction","label":"auction lots only"}],"default":"all"},{"name":"has_image","type":"boolean","required":false,"description":"true = only listings with a photo, false = only listings without one.","on_invalid":"reject"},{"name":"binding","type":"enum","required":false,"description":"Book binding (Cilt Durumu).","on_invalid":"reject","allowed_values":[{"value":"paperback","label":"KARTON KAPAKLI"},{"value":"cloth","label":"BEZ CİLTLİ"},{"value":"leather","label":"DERİ CİLTLİ"},{"value":"leather_spine","label":"SIRTI DERİ CİLTLİ"},{"value":"other_binding","label":"DİĞER CİLTLİ"},{"value":"other","label":"DİĞER"}]},{"name":"features","type":"array","required":false,"description":"Book features, any of (all must apply): signed, first_edition, pocket, fine_binding, incunabula, fine_press, illustrated, illustrated_cover, set, gilt, manuscript, ottoman_turkish, limited_edition, ex_libris, dust_jacket.","on_invalid":"reject","allowed_values":[{"value":"signed","label":"İMZALI"},{"value":"first_edition","label":"İLK BASKI"},{"value":"pocket","label":"CEP KİTABI"},{"value":"fine_binding","label":"CİLT GÜZELİ"},{"value":"incunabula","label":"INCUNABULA"},{"value":"fine_press","label":"PRESTİJ"},{"value":"illustrated","label":"ÇİZİMLİ"},{"value":"illustrated_cover","label":"ÇİZİM KAPAK"},{"value":"set","label":"SET/TAKIM"},{"value":"gilt","label":"YALDIZLI"},{"value":"manuscript","label":"YAZMA/MANUSCRIPT"},{"value":"ottoman_turkish","label":"OSMANLICA"},{"value":"limited_edition","label":"ÖZEL/SINIRLI BASKI"},{"value":"ex_libris","label":"EX-LIBRIS'li"},{"value":"dust_jacket","label":"ŞÖMİZLİ"}],"example":["signed"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in TRY.","on_invalid":"reject","example":500,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in TRY.","on_invalid":"reject","example":1000,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own sort menu.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"newest","label":"newest"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"title_asc","label":"title asc"},{"value":"title_desc","label":"title desc"},{"value":"year_asc","label":"year asc"},{"value":"year_desc","label":"year desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Page number, 20 results per page; the site serves pages up to 501 (10,020 results), whatever the total.","on_invalid":"reject","default":1,"minimum":1,"maximum":501}],"returns":"{total, page, last_page, has_more, products:[{product_id, title, url, image, kind, subtitle, condition, store_name, is_auction, price_try, original_price_try, list_price_try, category_path}], categories:[{category_id, name, count, level}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"nutuk"}},{"name":"product","description":"Full listing page: title, authors, publisher, year, every printed attribute (pages, binding, language, dimensions, weight…), condition and grade, price and store discount, stock, shipping payer/carrier/fee, all photos, the shop block (rating, review count, completed orders, success rate) and, for an auction lot, the live bid state.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"A kitantik product id (`product_id` from search, auction_lots or a product URL's last segment after '_'), or the full kitantik.com/product/… URL.","on_invalid":"reject","example":"1br9qfwmuxvgah11uzz","aliases":["id","url","product_url"]}],"returns":"{product_id, product_code, title, authors, publisher, year, category_path, condition, condition_grade, availability, stock_quantity, price_try, original_price_try, store_discount_pct, shipping_*, attributes, description, images, seller{…}, auction{auction_id, ends_at, is_live, bids{…}} | null}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"0z8kgltjm1x1zwp1vun"}},{"name":"auctions","description":"Auctions (mezat / müzayede) run by kitantik shops — open ones or the archive: title, shop, description, closing time, number of lots.","required_params":[],"optional_params":["status","query","sort","page","per_page"],"params":[{"name":"status","type":"enum","required":false,"description":"active = open auctions (default); closed = the archive.","on_invalid":"reject","allowed_values":[{"value":"active","label":"open auctions"},{"value":"closed","label":"finished auctions (archive)"}],"default":"active"},{"name":"query","type":"string","required":false,"description":"Words in the auction title.","on_invalid":"reject","example":"para","aliases":["q"]},{"name":"sort","type":"enum","required":false,"description":"Order of auctions.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"ending soonest"},{"value":"newest","label":"newest"},{"value":"store_name","label":"store name"},{"value":"title","label":"title"}],"default":"ending_soonest"},{"name":"page","type":"integer","required":false,"description":"Page number.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"per_page","type":"integer","required":false,"description":"Auctions per page: 20, 30, 40 or 50.","on_invalid":"reject","allowed_values":[{"value":20,"label":"20"},{"value":30,"label":"30"},{"value":40,"label":"40"},{"value":50,"label":"50"}],"default":50}],"returns":"{status, page, per_page, has_more, auctions:[{auction_id, title, url, image, store_id, store_name, description, ends_at, is_live, lot_count}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"status":"active","per_page":20}},{"name":"auction_lots","description":"One auction's lots with their live bids: lot number, title, photo, grade, starting bid, current bid, bid and watcher counts, buy-it-now price, time left.","required_params":["auction_id"],"optional_params":[],"params":[{"name":"auction_id","type":"string","required":true,"description":"An auction id (`auction_id` from auctions or a product's `auction` block) or a kitantik.com/mezat-muzayede/… URL.","on_invalid":"reject","example":"1br9qfwmuox3hml1xoh","aliases":["id","url","auction_url"]},{"name":"page","type":"integer","required":false,"description":"Page of lots.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"per_page","type":"integer","required":false,"description":"Lots per page: 20, 30, 40 or 50 (the auction page's own selector).","on_invalid":"reject","allowed_values":[{"value":20,"label":"20"},{"value":30,"label":"30"},{"value":40,"label":"40"},{"value":50,"label":"50"}],"default":50}],"returns":"{auction_id, title, store_*, ends_at, is_live, lot_count, total_pages, page, lots:[{product_id, auction_product_id, lot_number, title, url, image, condition_grade, lot_status, bids{starting_bid_try, current_bid_try, bid_count, watcher_count, buy_it_now_price_try, is_open, remaining_text}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"auction_id":"1br9qfwmuox3hml1xoh"}},{"name":"lot_prices","description":"Live bid state for up to 50 auction lots in one call — the cheap way to watch lots you already found.","required_params":["auction_product_ids"],"optional_params":[],"params":[{"name":"auction_product_ids","type":"array","required":true,"description":"Up to 50 `auction_product_id` values (from auction_lots or a product's `auction` block). Returns the live bid state the auction page itself polls.","on_invalid":"reject","example":["1br9qfwmupiut8a1m29"],"aliases":["ids","auction_product_id"]}],"returns":"{lots:[{auction_product_id, product_id, starting_bid_try, current_bid_try, bid_count, watcher_count, buy_it_now_price_try, is_open, remaining_text}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"auction_product_ids":["1br9qfwmupiut8a1m29"]}}]},{"name":"klaravik","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Klaravik Sweden auctions","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/klaravik/v1","spec_available":true,"actions":[{"name":"search","description":"Search native Sweden auction lots; source pages 1-2.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Published text query, 1-80 characters.","on_invalid":"reject","example":"volvo"},{"name":"page","type":"integer","required":false,"description":"One-based source page, qualified pages 1-2.","on_invalid":"reject","default":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Local cap; source stride remains 60.","on_invalid":"reject","default":10,"minimum":1,"maximum":60}],"returns":"results[]{listing_id,auction_id,title,url,price,current_bid,source_bid_amount,currency,bid_count,auction_end,location,images},source_total,has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"volvo","page":1,"limit":5}},{"name":"listing_detail","description":"Read primary public lot description and auction bid state by returned native handle.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Exact lot handle from search, including any suffix, or its published Klaravik URL.","on_invalid":"reject","example":"3295957-lastvaxlare-volvo-fh-84"}],"returns":"listing_id,auction_id,title,url,description,current_bid,currency,bid_count,next_bid,buyer_fee,vat_rate,reserve_status,auction_status,images,brand,model,gtin","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"3295957-lastvaxlare-volvo-fh-84"}}]},{"name":"kleinanzeigen","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Kleinanzeigen API scraper — search Germany's #1 classifieds (kleinanzeigen.de): listings with prices, photos & attributes, full listing detail, similar ads, category tree, live filter facets, location autocomplete, seller profiles & inventory. No account needed; German locale, seller PII redacted.","version":"0.3.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/kleinanzeigen/v1","spec_available":true,"actions":[{"name":"search","description":"Search Kleinanzeigen classifieds by keyword and/or category with price, location + radius, seller-type and sort filters. Returns normalized listings (title, price, photos, location, seller type) with the true total. Page pagination.","required_params":[],"optional_params":["query","category_id","category_slug","location_id","radius","location","price_min","price_max","seller_type","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword. (search needs query OR category_id/category_slug.)","on_invalid":"reject","example":"iphone 13"},{"name":"category_id","type":"integer","required":false,"description":"Numeric category id (the c<NNN> in a category URL; discover via the categories action).","on_invalid":"ignore","example":161},{"name":"category_slug","type":"string","required":false,"description":"Category slug for sorted/HTML browse, e.g. handy-telefon (from a category URL s-<slug>).","on_invalid":"reject"},{"name":"location_id","type":"integer","required":false,"description":"Location id from the location_suggestions action (enables radius search).","on_invalid":"ignore","example":3331},{"name":"radius","type":"integer","required":false,"description":"Search radius in km around location_id (e.g. 10, 20, 50).","on_invalid":"ignore","example":20},{"name":"location","type":"string","required":false,"description":"City/postal-code SLUG for the result URL. It is cosmetic on the current search page — measured 2026-09-05, a city name alone still returns all of Germany. To actually restrict by area pass location_id (from location_suggestions) plus radius.","on_invalid":"reject","example":"Berlin"},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in EUR (whole euros).","on_invalid":"ignore","example":100},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in EUR.","on_invalid":"ignore","example":500},{"name":"seller_type","type":"enum","required":false,"description":"Filter by seller type. privat = private, gewerblich = commercial dealer.","on_invalid":"ignore","allowed_values":[{"value":"privat","label":"Private seller"},{"value":"gewerblich","label":"Commercial dealer"}],"example":"privat"},{"name":"sort","type":"enum","required":false,"description":"Result ordering. 'newest' = most recently posted first; omit for Kleinanzeigen's default relevance ordering.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Newest first"}],"example":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"listings[] (adid, title, price, location, images, seller_type, posted_date), total, page, has_more, next_page","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}},{"name":"listing","description":"Full listing detail by url, slug or adid: title, price, description, all photos, attributes (e.g. car specs), category breadcrumb, seller id & badges, posted date.","required_params":[],"optional_params":["url","slug","adid"],"params":[{"name":"url","type":"string","required":false,"description":"Full Kleinanzeigen listing URL. (listing needs url OR slug OR adid.)","on_invalid":"reject","example":"https://www.kleinanzeigen.de/s-anzeige/.../3372412834-173-1563"},{"name":"slug","type":"string","required":false,"description":"Listing slug/path (the s-anzeige/... part).","on_invalid":"reject"},{"name":"adid","type":"integer","required":false,"description":"Numeric ad id (from a search result's adid).","on_invalid":"ignore"}],"returns":"listing{} — title, price, description, images, attributes, breadcrumb, seller_id, seller_badges, posted_date. An ad that has been taken down answers NOT_FOUND (not retryable, not charged): Kleinanzeigen redirects a dead ad away from its own URL, so retrying never brings it back.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.kleinanzeigen.de/s-anzeige/.../3372412834-173-1563"}},{"name":"similar","description":"Related/similar listings shown on an ad's detail page (\"Das könnte dich auch interessieren\") — by url, slug or adid.","required_params":[],"optional_params":["url","slug","adid"],"params":[{"name":"url","type":"string","required":false,"description":"Full listing URL. (similar needs url OR slug OR adid.)","on_invalid":"reject","example":"https://www.kleinanzeigen.de/s-anzeige/.../308066172-226-6444"},{"name":"slug","type":"string","required":false,"description":"Listing slug/path.","on_invalid":"reject"},{"name":"adid","type":"integer","required":false,"description":"Numeric ad id of the source listing — the shortest locator (get one from the search action's adid).","on_invalid":"ignore","example":308066172}],"returns":"listings[] — related ads (adid, title, price, location, image)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"adid":308066172}},{"name":"categories","description":"Full Kleinanzeigen category tree (id, name, nested children) for discovering category_id values to use in search.","required_params":[],"optional_params":[],"params":[],"returns":"categories[] — nested {id, name, children[]}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"filters","description":"Live filter facets for a query/category from the search filter tree: category, location (state) and attribute facets, each with a result count — so you know which filter values are available and how many listings match.","required_params":[],"optional_params":["query","category_id"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to scope facets to (filters needs query OR category_id).","on_invalid":"reject","example":"iphone 13"},{"name":"category_id","type":"integer","required":false,"description":"Category id to scope facets to.","on_invalid":"ignore","example":161}],"returns":"category_facets[], location_facets[], attribute_facets[] (each {name, count, url/value}), total","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}},{"name":"location_suggestions","description":"Autocomplete location names + ids for a partial query — use the returned location_id with search's location_id + radius.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Partial location text to autocomplete (e.g. Munc).","on_invalid":"reject","example":"Berlin"}],"returns":"suggestions[] — {location_id, name}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Berlin"}},{"name":"user_listings","description":"All active listings for a seller (by user/seller id), with page pagination.","required_params":["user_id"],"optional_params":["page"],"params":[{"name":"user_id","type":"integer","required":true,"description":"Seller user/seller id (a listing's seller_id).","on_invalid":"ignore","example":92546099},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"listings[] for this seller, user_id, page, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"user_id":92546099}},{"name":"seller","description":"Public seller profile by user/seller id: display name (redacted by default), member since, reputation badges, rating count, and listing count.","required_params":["user_id"],"optional_params":[],"params":[{"name":"user_id","type":"integer","required":true,"description":"Seller user/seller id.","on_invalid":"ignore","example":92546099}],"returns":"seller{} — seller_id, name (redacted), active_since, badges, rating_count, listing_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"user_id":92546099}}]},{"name":"klook","category":{"id":"travel","title":"Travel & Lodging"},"title":"Klook — Asian activities, attractions & experiences","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/klook/v1","spec_available":true,"actions":[{"name":"activities/search","description":"Search or browse Klook activities by keyword and/or destination, with category, price, date, instant-confirmation and sort filters. Every filter here was proved to change the result count against a same-run unfiltered control; filters Klook silently ignores are not offered.","required_params":[],"optional_params":["query","destination_id","category","sort","price_min","price_max","date","date_to","instant_confirmation","page","currency","language"],"params":[{"name":"query","type":"string","required":false,"description":"Free text — a place, an attraction, a product type. Klook's search is fuzzy and typo-tolerant, so a nonsense term can still return a handful of weak matches; the count returned is Klook's own.","on_invalid":"reject","example":"teamlab tokyo","aliases":["q","keyword","search"]},{"name":"destination_id","type":"integer","required":false,"description":"A city or country id AS RETURNED BY destinations/resolve in its search_location_id field. A country's own id is NOT accepted here (Klook offsets countries by 1000) and silently returns nothing, so take the value from the resolver rather than building it.","on_invalid":"reject","example":28,"aliases":["location","city_id","location_id"]},{"name":"category","type":"enum","required":false,"description":"Klook's own top-level product tabs.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Everything Klook sells for this destination"},{"value":"tours","label":"Tours & experiences — day trips, guided tours, workshops, food tours"},{"value":"attractions","label":"Attraction tickets — theme parks, museums, zoos, observation decks"},{"value":"transport","label":"Transport — airport transfers, rail passes, car charter"},{"value":"hotels","label":"Hotels & stays"},{"value":"more","label":"Everything else — wifi & SIM, eSIM, dining vouchers, shopping coupons"}],"default":"all","example":"attractions"},{"name":"sort","type":"enum","required":false,"description":"Klook publishes exactly these five orderings. Any other value is accepted by the site and changes nothing, so it is rejected here instead. Note that these are Klook's RANKINGS, not strict sorts: asking for lowest price moves the cheapest results onto page one (the cheapest row on page one fell from 27.99 to 1.79 in a measured comparison) but promoted listings are still mixed in, so the page is about 63% strictly ascending. Sort the rows yourself if you need a guarantee.","on_invalid":"reject","allowed_values":[{"value":"most_relevant","label":"Recommended (Klook's default ranking)"},{"value":"price","label":"Lowest price first"},{"value":"participants","label":"Most booked first"},{"value":"publish_time","label":"Recently added first"},{"value":"review_score","label":"Top rated first"}],"default":"most_relevant","example":"review_score"},{"name":"price_min","type":"number","required":false,"description":"Lower bound, in the requested currency. Must be sent together with price_max.","on_invalid":"reject","example":10,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Upper bound, in the requested currency.","on_invalid":"reject","example":60,"minimum":0,"aliases":["max_price"]},{"name":"date","type":"string","required":false,"description":"Keep only activities bookable on this date (YYYY-MM-DD). With date_to it becomes a range.","on_invalid":"reject","example":"2026-12-24","aliases":["start_date","available_on"]},{"name":"date_to","type":"string","required":false,"description":"End of the availability range (YYYY-MM-DD). Ignored unless date is also given.","on_invalid":"reject","example":"2026-12-28","aliases":["end_date"]},{"name":"instant_confirmation","type":"boolean","required":false,"description":"Only activities Klook confirms immediately.","on_invalid":"reject","example":true,"aliases":["instant"]},{"name":"page","type":"integer","required":false,"description":"20 results per page — the page size is fixed by Klook and a limit parameter is ignored. Klook stops counting broad queries at 1000 matches.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"currency","type":"enum","required":false,"description":"ISO currency the prices are returned in. Klook prices in HKD when nothing is asked for, so this is always sent; every price in the response repeats the code it belongs to.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"TWD","label":"TWD"},{"value":"THB","label":"THB"},{"value":"MYR","label":"MYR"},{"value":"IDR","label":"IDR"},{"value":"PHP","label":"PHP"},{"value":"VND","label":"VND"},{"value":"CNY","label":"CNY"},{"value":"AUD","label":"AUD"},{"value":"NZD","label":"NZD"},{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"CAD","label":"CAD"},{"value":"INR","label":"INR"},{"value":"AED","label":"AED"},{"value":"CHF","label":"CHF"},{"value":"SEK","label":"SEK"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"PLN","label":"PLN"},{"value":"CZK","label":"CZK"},{"value":"HUF","label":"HUF"},{"value":"RUB","label":"RUB"},{"value":"BRL","label":"BRL"},{"value":"MXN","label":"MXN"},{"value":"ZAR","label":"ZAR"},{"value":"TRY","label":"TRY"},{"value":"SAR","label":"SAR"},{"value":"ILS","label":"ILS"},{"value":"KHR","label":"KHR"},{"value":"LAK","label":"LAK"},{"value":"MMK","label":"MMK"},{"value":"MOP","label":"MOP"},{"value":"QAR","label":"QAR"},{"value":"RON","label":"RON"},{"value":"EGP","label":"EGP"},{"value":"LKR","label":"LKR"},{"value":"BDT","label":"BDT"}],"default":"USD","example":"USD"},{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"activities[] with id, title, url, category, city, coordinates, price and struck price in the requested currency, rating, review count and tags; plus total, page and the categories/sorts Klook offers for this query.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"destination_id":28,"category":"attractions","currency":"USD"}},{"name":"activities/list","description":"Destination browse in 50-result pages — the bulk-listing shape for walking a city's or a country's whole catalogue. Fewer filters than activities/search (Klook's list endpoint ignores category and sort), but 2.5x the rows per call.","required_params":[],"optional_params":["query","city_id","country_id","price_min","price_max","instant_confirmation","page","currency","language"],"params":[{"name":"query","type":"string","required":false,"description":"Free text. Optional — omit it to browse a destination.","on_invalid":"reject","example":"onsen","aliases":["q","keyword"]},{"name":"city_id","type":"array","required":false,"description":"One or more Klook city ids (from destinations/resolve). Plain city ids here — no offset.","on_invalid":"reject","example":[28],"aliases":["city_ids"]},{"name":"country_id","type":"array","required":false,"description":"One or more Klook country ids (from destinations/resolve). Plain country ids here.","on_invalid":"reject","example":[12],"aliases":["country_ids"]},{"name":"price_min","type":"number","required":false,"description":"Lower bound in the requested currency.","on_invalid":"reject","example":10,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Upper bound in the requested currency.","on_invalid":"reject","example":60,"minimum":0,"aliases":["max_price"]},{"name":"instant_confirmation","type":"boolean","required":false,"description":"Only activities Klook confirms immediately.","on_invalid":"reject","example":true,"aliases":["instant"]},{"name":"page","type":"integer","required":false,"description":"50 results per page, fixed by Klook.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"currency","type":"enum","required":false,"description":"ISO currency the prices are returned in. Klook prices in HKD when nothing is asked for, so this is always sent; every price in the response repeats the code it belongs to.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"TWD","label":"TWD"},{"value":"THB","label":"THB"},{"value":"MYR","label":"MYR"},{"value":"IDR","label":"IDR"},{"value":"PHP","label":"PHP"},{"value":"VND","label":"VND"},{"value":"CNY","label":"CNY"},{"value":"AUD","label":"AUD"},{"value":"NZD","label":"NZD"},{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"CAD","label":"CAD"},{"value":"INR","label":"INR"},{"value":"AED","label":"AED"},{"value":"CHF","label":"CHF"},{"value":"SEK","label":"SEK"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"PLN","label":"PLN"},{"value":"CZK","label":"CZK"},{"value":"HUF","label":"HUF"},{"value":"RUB","label":"RUB"},{"value":"BRL","label":"BRL"},{"value":"MXN","label":"MXN"},{"value":"ZAR","label":"ZAR"},{"value":"TRY","label":"TRY"},{"value":"SAR","label":"SAR"},{"value":"ILS","label":"ILS"},{"value":"KHR","label":"KHR"},{"value":"LAK","label":"LAK"},{"value":"MMK","label":"MMK"},{"value":"MOP","label":"MOP"},{"value":"QAR","label":"QAR"},{"value":"RON","label":"RON"},{"value":"EGP","label":"EGP"},{"value":"LKR","label":"LKR"},{"value":"BDT","label":"BDT"}],"default":"USD","example":"USD"},{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"activities[] with id, title, url, images, price, rating, review count and tags; plus total and page.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"city_id":[28],"currency":"USD"}},{"name":"activity/detail","description":"The full published record for one activity: description, highlights, what's included, images, address and coordinates, category path, rating, review count and the price span across its packages.","required_params":["activity_id"],"optional_params":["currency","language"],"params":[{"name":"activity_id","type":"integer","required":true,"description":"Klook activity id — the number in an activity URL (/activity/93901-…), or the activity_id from search.","on_invalid":"reject","example":93901,"aliases":["id","activity"]},{"name":"currency","type":"enum","required":false,"description":"ISO currency the prices are returned in. Klook prices in HKD when nothing is asked for, so this is always sent; every price in the response repeats the code it belongs to.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"TWD","label":"TWD"},{"value":"THB","label":"THB"},{"value":"MYR","label":"MYR"},{"value":"IDR","label":"IDR"},{"value":"PHP","label":"PHP"},{"value":"VND","label":"VND"},{"value":"CNY","label":"CNY"},{"value":"AUD","label":"AUD"},{"value":"NZD","label":"NZD"},{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"CAD","label":"CAD"},{"value":"INR","label":"INR"},{"value":"AED","label":"AED"},{"value":"CHF","label":"CHF"},{"value":"SEK","label":"SEK"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"PLN","label":"PLN"},{"value":"CZK","label":"CZK"},{"value":"HUF","label":"HUF"},{"value":"RUB","label":"RUB"},{"value":"BRL","label":"BRL"},{"value":"MXN","label":"MXN"},{"value":"ZAR","label":"ZAR"},{"value":"TRY","label":"TRY"},{"value":"SAR","label":"SAR"},{"value":"ILS","label":"ILS"},{"value":"KHR","label":"KHR"},{"value":"LAK","label":"LAK"},{"value":"MMK","label":"MMK"},{"value":"MOP","label":"MOP"},{"value":"QAR","label":"QAR"},{"value":"RON","label":"RON"},{"value":"EGP","label":"EGP"},{"value":"LKR","label":"LKR"},{"value":"BDT","label":"BDT"}],"default":"USD","example":"USD"},{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"activity{} with title, subtitle, summary, highlights[], what_we_love, insider_tips, images[], address, coordinates, place_id, category_path[], rating, review_count, price, strike_price, price_range and default_package_id; plus requested_activity_id and a redirected flag, because Klook sometimes answers with a superseded listing's replacement rather than the id you asked for. Cancellation terms are published per package, not per activity — use activity/packages for those.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"activity_id":141,"currency":"USD"}},{"name":"activity/packages","description":"Every bookable package (option) of one activity with its OWN price, cancellation policy, confirmation type, voucher type and party-size limits — plus the dates Klook currently publishes as available. Klook prices packages independently: the same attraction can run from 46 to 503 in one currency, so a headline price is not the price.","required_params":["activity_id"],"optional_params":["currency","language"],"params":[{"name":"activity_id","type":"integer","required":true,"description":"Klook activity id.","on_invalid":"reject","example":93901,"aliases":["id","activity"]},{"name":"currency","type":"enum","required":false,"description":"ISO currency the prices are returned in. Klook prices in HKD when nothing is asked for, so this is always sent; every price in the response repeats the code it belongs to.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"TWD","label":"TWD"},{"value":"THB","label":"THB"},{"value":"MYR","label":"MYR"},{"value":"IDR","label":"IDR"},{"value":"PHP","label":"PHP"},{"value":"VND","label":"VND"},{"value":"CNY","label":"CNY"},{"value":"AUD","label":"AUD"},{"value":"NZD","label":"NZD"},{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"CAD","label":"CAD"},{"value":"INR","label":"INR"},{"value":"AED","label":"AED"},{"value":"CHF","label":"CHF"},{"value":"SEK","label":"SEK"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"PLN","label":"PLN"},{"value":"CZK","label":"CZK"},{"value":"HUF","label":"HUF"},{"value":"RUB","label":"RUB"},{"value":"BRL","label":"BRL"},{"value":"MXN","label":"MXN"},{"value":"ZAR","label":"ZAR"},{"value":"TRY","label":"TRY"},{"value":"SAR","label":"SAR"},{"value":"ILS","label":"ILS"},{"value":"KHR","label":"KHR"},{"value":"LAK","label":"LAK"},{"value":"MMK","label":"MMK"},{"value":"MOP","label":"MOP"},{"value":"QAR","label":"QAR"},{"value":"RON","label":"RON"},{"value":"EGP","label":"EGP"},{"value":"LKR","label":"LKR"},{"value":"BDT","label":"BDT"}],"default":"USD","example":"USD"},{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"packages[] each with package_id, name, price, strike_price, cancellation_policy, confirmation_type, ticket_type, min/max participants and stock; available_dates[]; is_open_dated.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"activity_id":93901,"currency":"USD"}},{"name":"activities/batch","description":"Price, rating, coordinates, package count and availability for up to 50 activities in ONE upstream call. This is the efficient shape for refreshing a watchlist — 50 ids cost one call instead of 50.","required_params":["activity_id"],"optional_params":["currency","language"],"params":[{"name":"activity_id","type":"array","required":true,"description":"Up to 50 Klook activity ids. Ids Klook does not publish are reported in missing_ids rather than silently dropped.","on_invalid":"reject","example":[93901,141,1552],"aliases":["activity_ids","ids","id"]},{"name":"currency","type":"enum","required":false,"description":"ISO currency the prices are returned in. Klook prices in HKD when nothing is asked for, so this is always sent; every price in the response repeats the code it belongs to.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"},{"value":"TWD","label":"TWD"},{"value":"THB","label":"THB"},{"value":"MYR","label":"MYR"},{"value":"IDR","label":"IDR"},{"value":"PHP","label":"PHP"},{"value":"VND","label":"VND"},{"value":"CNY","label":"CNY"},{"value":"AUD","label":"AUD"},{"value":"NZD","label":"NZD"},{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"CAD","label":"CAD"},{"value":"INR","label":"INR"},{"value":"AED","label":"AED"},{"value":"CHF","label":"CHF"},{"value":"SEK","label":"SEK"},{"value":"DKK","label":"DKK"},{"value":"NOK","label":"NOK"},{"value":"PLN","label":"PLN"},{"value":"CZK","label":"CZK"},{"value":"HUF","label":"HUF"},{"value":"RUB","label":"RUB"},{"value":"BRL","label":"BRL"},{"value":"MXN","label":"MXN"},{"value":"ZAR","label":"ZAR"},{"value":"TRY","label":"TRY"},{"value":"SAR","label":"SAR"},{"value":"ILS","label":"ILS"},{"value":"KHR","label":"KHR"},{"value":"LAK","label":"LAK"},{"value":"MMK","label":"MMK"},{"value":"MOP","label":"MOP"},{"value":"QAR","label":"QAR"},{"value":"RON","label":"RON"},{"value":"EGP","label":"EGP"},{"value":"LKR","label":"LKR"},{"value":"BDT","label":"BDT"}],"default":"USD","example":"USD"},{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"activities[] with id, title, url, price, struck price, price range, rating, review count, coordinates, city/country, package_count and next_available_at; plus requested/found counts and missing_ids[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"activity_id":[141,93901,1552],"currency":"USD"}},{"name":"activity/reviews","description":"Traveller reviews for one activity, newest first, with rating, text, photos, the package the reviewer booked and any operator reply.","required_params":["activity_id"],"optional_params":["page","limit","language"],"params":[{"name":"activity_id","type":"integer","required":true,"description":"Klook activity id.","on_invalid":"reject","example":141,"aliases":["id","activity"]},{"name":"page","type":"integer","required":false,"description":"Klook serves at most 2,000 reviews per activity even when the activity has far more; a page past that boundary returns an empty list.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Reviews per page (Klook honours up to 100).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"reviews[] with review_id, author, rating, date, text, images, package_name and reply; plus total, rating and page.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"activity_id":141}},{"name":"destinations/resolve","description":"Turn a typed place name into the ids the other actions need. Returns cities and countries, each with a search_location_id already in the form activities/search expects — Klook offsets country ids by 1000 there and answers a bare country id with an empty result, so this is the intended way in.","required_params":["query"],"optional_params":["language"],"params":[{"name":"query","type":"string","required":true,"description":"A place as a traveller would type it.","on_invalid":"reject","example":"tokyo","aliases":["q","destination","name"]},{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"cities[] and countries[] with id, name, seo slug, url and search_location_id; plus activities[] Klook suggests for the term.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"tokyo"}},{"name":"destinations/browse","description":"Klook's own destination directory — world regions with their featured cities, and every country Klook sells in, each already carrying the id activities/search needs. The starting point when you have no place name to resolve. Ask for include_all_cities to get the complete 1,400-plus city list instead of the featured ones.","required_params":[],"optional_params":["include_all_cities","language"],"params":[{"name":"include_all_cities","type":"boolean","required":false,"description":"Include every city Klook publishes (about 1,440) rather than only the featured ones. Adds roughly 200 KB to the response.","on_invalid":"reject","default":false,"example":false,"aliases":["all_cities"]},{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"regions[] each with cities[] (city_id, name, country_id, url, search_location_id), countries[] with search_location_id, counts, and all_cities[] when asked for.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"include_all_cities":false}},{"name":"categories","description":"The category vocabulary: Klook's top-level product tabs (the values activities/search accepts) and the second-level activity categories with their ids and links.","required_params":[],"optional_params":["language"],"params":[{"name":"language","type":"enum","required":false,"description":"Content language. Klook's catalogue differs slightly per language — the same search returns 1,412 results in English and 1,319 in Japanese — so the row count is language-specific, not an error.","on_invalid":"reject","allowed_values":[{"value":"en","label":"en"},{"value":"en-US","label":"en-US"},{"value":"en-GB","label":"en-GB"},{"value":"en-AU","label":"en-AU"},{"value":"en-CA","label":"en-CA"},{"value":"en-HK","label":"en-HK"},{"value":"en-IN","label":"en-IN"},{"value":"en-MY","label":"en-MY"},{"value":"en-NZ","label":"en-NZ"},{"value":"en-PH","label":"en-PH"},{"value":"en-SG","label":"en-SG"},{"value":"en-AE","label":"en-AE"},{"value":"de","label":"de"},{"value":"es","label":"es"},{"value":"fr","label":"fr"},{"value":"id","label":"id"},{"value":"it","label":"it"},{"value":"ja","label":"ja"},{"value":"ko","label":"ko"},{"value":"ru","label":"ru"},{"value":"th","label":"th"},{"value":"vi","label":"vi"},{"value":"zh-CN","label":"zh-CN"},{"value":"zh-HK","label":"zh-HK"},{"value":"zh-TW","label":"zh-TW"},{"value":"ms-MY","label":"ms-MY"},{"value":"pl","label":"pl"},{"value":"cs","label":"cs"},{"value":"sk","label":"sk"},{"value":"bg","label":"bg"},{"value":"nl","label":"nl"},{"value":"ca","label":"ca"},{"value":"pt-PT","label":"pt-PT"},{"value":"pt-BR","label":"pt-BR"},{"value":"da","label":"da"},{"value":"sv","label":"sv"},{"value":"fi","label":"fi"},{"value":"nb","label":"nb"},{"value":"el","label":"el"},{"value":"hu","label":"hu"},{"value":"tl","label":"tl"},{"value":"hi","label":"hi"},{"value":"ta","label":"ta"},{"value":"si","label":"si"},{"value":"bn","label":"bn"},{"value":"ro","label":"ro"}],"default":"en-US","example":"en-US"}],"returns":"tabs[] (value, label, description) and categories[] (id, name, url).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"language":"en-US"}}]},{"name":"kogan","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Kogan.com API — Australia & New Zealand: search products, prices with was-price and Kogan FIRST member price, stock, dispatch, Marketplace seller, specs and reviews","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kogan/v1","spec_available":true,"actions":[{"name":"search","description":"Search kogan.com (Australia or New Zealand store) by keywords and/or category, with brand, seller (Kogan.com only), price range and sort. Every row carries the price a logged-out shopper sees, the struck-through \"was\" price, the Kogan FIRST member price, stock and pre-sale flags, the dispatch promise, the seller (Kogan.com or the Marketplace seller's name), brand, rating and review count, and `is_sponsored`. The answer also returns the site's facets with counts (brands, categories, price ranges, attribute filters). Needs `query` or `category` (or both). Kogan publishes no reliable total: page with `page` until `has_more` is false.","required_params":[],"optional_params":["query","category","brand","sold_by","min_price","max_price","sort","page","store","exclude_sponsored"],"params":[{"name":"query","type":"string","required":false,"description":"Search words as typed in Kogan's search box (`office chair`, `65 inch tv`, `air fryer`). Kogan may map the words to one of its categories — the answer says how in `interpreted_as`. Provide query OR category (or both).","on_invalid":"reject","example":"office chair","aliases":["q","keyword","keywords"]},{"name":"category","type":"string","required":false,"description":"A Kogan category slug, as in its category URLs after `/shop/category/` (`office-chairs`, `home-entertainment-3762/led-tv`, `computerstablets-networking-laptops-38644`) or a `facets.categories[].value` of a previous answer.","on_invalid":"reject","example":"office-chairs","aliases":["categories","category_slug"]},{"name":"brand","type":"string","required":false,"description":"One brand slug, as listed in `facets.brands[].value` of a previous answer (`ergolux`, `apple`, `dell`, `samsung`). A slug Kogan does not know answers an empty list with a warning.","on_invalid":"reject","example":"ergolux"},{"name":"sold_by","type":"enum","required":false,"description":"`kogan` = only items sold by Kogan.com itself (no Marketplace sellers).","on_invalid":"reject","allowed_values":[{"value":"any","label":"Kogan.com and Kogan Marketplace sellers"},{"value":"kogan","label":"Sold by Kogan.com only"}],"default":"any","aliases":["deals_from","seller"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in the store's currency (GST included).","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price, in the store's currency (GST included). Sponsored rows the site injects are not price-filtered by Kogan — see `exclude_sponsored`.","on_invalid":"reject","example":200,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"Kogan's default (featured) order"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"}],"default":"featured","aliases":["order_by"]},{"name":"page","type":"integer","required":false,"description":"Result page, 36 organic rows a page (page 1 of the featured order can add up to 6 sponsored rows). A page past the end answers 0 rows with has_more false.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"store","type":"enum","required":false,"description":"Kogan storefront. `au` = kogan.com/au (AUD), `nz` = kogan.com/nz (NZD). Product ids and slugs belong to one store.","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — kogan.com/au, prices in AUD"},{"value":"nz","label":"New Zealand — kogan.com/nz, prices in NZD"}],"default":"au","aliases":["country","market"]},{"name":"exclude_sponsored","type":"boolean","required":false,"description":"Drop the sponsored rows Kogan injects into page 1 (they ignore the price filter). Their number is still reported in `sponsored_rows`.","on_invalid":"reject","default":false}],"returns":"results[]{position, product_id, slug, sku, gtin, title, brand, url, image, price, was_price, was_price_text, discount_pct, kogan_first_price, future_price, future_kogan_first_price, future_price_date, price_note, member_benefit, currency, rating (0-5), review_count, in_stock, is_sold_out, is_presale, is_coming_soon, is_international_stock, free_shipping, dispatch, seller{is_marketplace, name, slug, disclaimer}, categories[], badges[], promo, is_sponsored} + page + has_more + title + interpreted_as{category, keywords} + breadcrumbs[] + facets{brands[], categories[], price_ranges[], other[]} + sponsored_rows","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"office chair"}},{"name":"product","description":"One kogan.com product: title, brand, SKU, GTIN, images, description, what's in the box, the full specification table, prices (logged-out price, \"was\" price and saving, Kogan FIRST member price with its free-shipping flag and reward, scheduled future price), price type (Full / Presale / …), stock, dispatch date, condition, the seller (Kogan.com or the Marketplace seller), variants with their own price and stock, warranty and returns text, the rating distribution and the first page of reviews.","required_params":[],"optional_params":["slug","url","store"],"params":[{"name":"slug","type":"string","required":false,"description":"The product slug — the part of a product URL after `/buy/` (kogan.com/au/buy/<slug>/). Returned by `search` as `slug`. Provide slug OR url.","on_invalid":"reject","example":"ergolux-plus-ergonomic-mesh-office-chair-with-footrest-black-ergolux","aliases":["product_slug","handle"]},{"name":"url","type":"string","required":false,"description":"A kogan.com product URL (/au/buy/… or /nz/buy/…); its store wins over `store`.","on_invalid":"reject","example":"https://www.kogan.com/au/buy/ergolux-plus-ergonomic-mesh-office-chair-with-footrest-black-ergolux/","aliases":["product_url"]},{"name":"store","type":"enum","required":false,"description":"Kogan storefront. `au` = kogan.com/au (AUD), `nz` = kogan.com/nz (NZD). Product ids and slugs belong to one store.","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — kogan.com/au, prices in AUD"},{"value":"nz","label":"New Zealand — kogan.com/nz, prices in NZD"}],"default":"au","aliases":["country","market"]}],"returns":"product{product_id, slug, sku, gtin, title, brand, brand_url, url, image, images[], price, was_price, discount_pct, saving, price_type, kogan_first{price, price_saving, free_shipping, reward_amount, member_exclusive}, future_price, future_price_date, price_note, currency, in_stock, unavailable, is_presale, condition, fast_dispatch, ships_by, dispatch, free_shipping, seller{is_marketplace, name, slug}, description, in_the_box[], features[], specifications[]{group, name, value, unit}, warranty_and_returns, breadcrumbs[], variants[]{group, value, slug, url, selected, price, kogan_first_price, in_stock}, qantas_points, finance_options[], rating, review_count, reviews_summary{count, average_rating, distribution}, reviews_preview[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"slug":"ergolux-plus-ergonomic-mesh-office-chair-with-footrest-black-ergolux"}},{"name":"reviews","description":"Customer reviews of one Kogan product, 5 per page, newest first as Kogan lists them: star rating, text, reviewer display name, date, whether the reviewer is a Kogan FIRST member, the variant reviewed, helpful votes — plus the product's review count, average and star distribution. Page with `cursor` = the previous `next_cursor`.","required_params":["product_id"],"optional_params":["cursor","store"],"params":[{"name":"product_id","type":"integer","required":true,"description":"Kogan's numeric product id — `product_id` of a `search` row or of `product`.","on_invalid":"reject","example":329279277,"aliases":["id"]},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` of the previous reviews page; omit for the first page.","on_invalid":"reject","example":"dD1rb2dhbiZvPTU="},{"name":"store","type":"enum","required":false,"description":"Kogan storefront. `au` = kogan.com/au (AUD), `nz` = kogan.com/nz (NZD). Product ids and slugs belong to one store.","on_invalid":"reject","allowed_values":[{"value":"au","label":"Australia — kogan.com/au, prices in AUD"},{"value":"nz","label":"New Zealand — kogan.com/nz, prices in NZD"}],"default":"au","aliases":["country","market"]}],"returns":"reviews[]{review_id, stars (0-5), rating_raw_out_of_10, comment, reviewer_name, reviewer_type, date, is_kogan_first_member, helpful_count, variant[]{name, value}, disclaimer} + count + average_rating + distribution{5..1} + next_cursor + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":329279277}}]},{"name":"kolesa","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Kolesa.kz API scraper — search Kazakhstan's largest car marketplace (161 697 live car ads measured on 2026-10-02) by keyword, brand, model, city or region, price band in tenge, model year, mileage, engine size, body style, gearbox, fuel, colour, drivetrain, steering side, new/used, and dealer-only, with seven sorts. Every row carries the price in KZT beside the source's own printed string, the brand and model, the city and region, whether the seller is a private owner or a business, and Kolesa's own average market price for that model. Full ad detail returns the complete description, every photo at full size, the whole parameter table (generation, body, engine, mileage, gearbox, drivetrain, steering, colour, customs status), the option list and the seller's public block including the dealer name, address, verification badge and ad count. No account, logged-out public data only, no phone numbers.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/kolesa/v1","spec_available":true,"actions":[{"name":"search","description":"Search Kolesa.kz car classifieds. Every parameter is optional — with none of them you get the whole board, newest first — and each filter below was measured narrowing the same 161 697-row control in the same run. Returns 20 rows a page with the source's own total, and tells you how many of those rows paging can actually reach (the source stops at page 1000).","required_params":[],"optional_params":["query","brand","model","city","region","price_min","price_max","year_min","year_max","mileage_max","engine_volume_min","engine_volume_max","body","transmission","fuel","color","steering","drive","condition","vehicle_class","dealers_only","customs_cleared","damaged_only","with_photo","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keywords, exactly as typed into the site's own search box (Russian or Latin). Measured bite: the 161 697-row control narrowed to 11 356 for `camry`. Combine freely with `brand` (brand=toyota&query=camry → 10 799).","on_invalid":"reject","example":"camry","aliases":["keywords","q","text"]},{"name":"brand","type":"string","required":false,"description":"Brand slug as it appears in Kolesa's own URLs — 'toyota', 'bmw', 'mercedes-benz', 'hyundai', 'lada'. Measured bite: 161 697 → 29 943 for toyota. An unknown slug returns NOT_FOUND because the source answers it with HTTP 404. Every search row returns its own `brand`, so the spelling never has to be guessed twice.","on_invalid":"reject","example":"toyota","value_pattern":"[a-z0-9][a-z0-9\\-_.]{0,48}","aliases":["mark","make"]},{"name":"model","type":"string","required":false,"description":"Model slug, e.g. 'camry', 'land-cruiser', 'x5'. 🔴 Only works WITH `brand`: the source answers /cars/<model>/ with HTTP 404. Measured bite: toyota 29 943 → toyota+camry 10 454.","on_invalid":"reject","example":"camry","value_pattern":"[a-z0-9][a-z0-9\\-_.]{0,48}"},{"name":"city","type":"string","required":false,"description":"City slug as Kolesa writes it: almaty (42 852 rows), astana (20 391), shymkent (13 725), karaganda, aktobe, atyrau, aktau, uralsk, pavlodar, taldykorgan and the rest — every search row returns its own `city` slug. Cannot be combined with `region`: the source lets the region win and drops the city, so the pair is rejected here instead of answering the wrong question.","on_invalid":"reject","example":"almaty","value_pattern":"[a-z0-9][a-z0-9\\-_.]{0,48}"},{"name":"region","type":"enum","required":false,"description":"Kazakhstan region (oblast). Measured bite: 161 697 → 44 535 for almaty-region. Mutually exclusive with `city` (see `city`).","on_invalid":"reject","allowed_values":[{"value":"abay","label":"Abay"},{"value":"akmola","label":"Akmola"},{"value":"aktobe","label":"Aktobe"},{"value":"almaty-region","label":"Almaty Region"},{"value":"atyrau","label":"Atyrau"},{"value":"east-kazakhstan","label":"East Kazakhstan"},{"value":"karaganda","label":"Karaganda"},{"value":"kostanay","label":"Kostanay"},{"value":"kyzylorda","label":"Kyzylorda"},{"value":"mangystau","label":"Mangystau"},{"value":"north-kazakhstan","label":"North Kazakhstan"},{"value":"pavlodar","label":"Pavlodar"},{"value":"turkestan","label":"Turkestan"},{"value":"ulytau","label":"Ulytau"},{"value":"west-kazakhstan","label":"West Kazakhstan"},{"value":"zhambyl","label":"Zhambyl"},{"value":"zhetysu","label":"Zhetysu"}],"example":"almaty-region"},{"name":"price_min","type":"integer","required":false,"description":"Minimum asking price in **tenge (KZT)** — this site quotes nothing else. Measured bite: the 161 697-row control narrowed to 19 497 for 2 000 000–3 000 000 ₸. A band excludes ads with no price.","on_invalid":"reject","example":2000000,"minimum":0,"maximum":10000000000,"aliases":["min_price","priceFrom"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum asking price in **tenge (KZT)** — this site quotes nothing else. Measured bite: the 161 697-row control narrowed to 19 497 for 2 000 000–3 000 000 ₸. A band excludes ads with no price.","on_invalid":"reject","example":3000000,"minimum":0,"maximum":10000000000,"aliases":["max_price","priceTo"]},{"name":"year_min","type":"integer","required":false,"description":"Minimum model year. Measured bite: 161 697 → 35 261 for year_min=2020.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["min_year","yearFrom"]},{"name":"year_max","type":"integer","required":false,"description":"Maximum model year. Measured bite: 161 697 → 35 261 for year_min=2020.","on_invalid":"reject","example":2025,"minimum":1900,"maximum":2100,"aliases":["max_year","yearTo"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading in km. Measured bite: 161 697 → 19 406 for 50 000 km. The source publishes no lower bound for mileage, so there is no `mileage_min` — it would be a handle that does nothing.","on_invalid":"reject","example":50000,"minimum":0,"maximum":3000000,"aliases":["max_mileage","run_to"]},{"name":"engine_volume_min","type":"number","required":false,"description":"Minimum engine displacement in litres. Measured bite: 161 697 → 44 208 for 1.3–1.6 l.","on_invalid":"reject","example":1.3,"minimum":0.1,"maximum":20.0,"aliases":["volume_from"]},{"name":"engine_volume_max","type":"number","required":false,"description":"Maximum engine displacement in litres. Measured bite: 161 697 → 44 208 for 1.3–1.6 l.","on_invalid":"reject","example":1.6,"minimum":0.1,"maximum":20.0,"aliases":["volume_to"]},{"name":"body","type":"enum","required":false,"description":"Body style, the source's own 18 values. Measured bite: 161 697 → 30 864 for crossover. An unknown value is rejected here, because the source would accept and ignore it.","on_invalid":"reject","allowed_values":[{"value":"convertible","label":"кабриолет"},{"value":"coupe","label":"купе"},{"value":"crossover","label":"кроссовер"},{"value":"fastback","label":"фастбек"},{"value":"hardtop","label":"хардтоп"},{"value":"hatchback","label":"хэтчбек"},{"value":"liftback","label":"лифтбек"},{"value":"limousine","label":"лимузин"},{"value":"microvan","label":"микровэн"},{"value":"minibus","label":"микроавтобус"},{"value":"minivan","label":"минивэн"},{"value":"offroad","label":"внедорожник"},{"value":"pickup","label":"пикап"},{"value":"roadster","label":"родстер"},{"value":"sedan","label":"седан"},{"value":"targa","label":"тарга"},{"value":"van","label":"фургон"},{"value":"wagon","label":"универсал"}],"example":"crossover","aliases":["body_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. Measured bite: 161 697 → 53 372 for manual.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"механика — manual"},{"value":"automatic","label":"автомат — torque-converter automatic"},{"value":"tiptronic","label":"типтроник"},{"value":"cvt","label":"вариатор — continuously variable"},{"value":"dual-clutch","label":"робот — automated manual"},{"value":"any-automatic","label":"АКПП — any of the four self-shifting kinds"}],"example":"automatic","aliases":["gearbox"]},{"name":"fuel","type":"enum","required":false,"description":"Engine type. Measured bite: 161 697 → 1 254 for electric — on this market EVs are 0.8 % of the board, and that is the kind of number this filter is for.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"бензин"},{"value":"diesel","label":"дизель"},{"value":"lpg-petrol","label":"газ-бензин — bi-fuel"},{"value":"lpg","label":"газ"},{"value":"hybrid","label":"гибрид"},{"value":"electric","label":"электричество"}],"example":"electric","aliases":["fuel_type","engine"]},{"name":"color","type":"enum","required":false,"description":"Exterior colour, the source's own 21 values. Measured bite: 161 697 → 31 047 for white and 161 708 → 7 635 for blue. An unknown value is rejected here because the source answers an unknown colour id with a convincing empty page (measured).","on_invalid":"reject","allowed_values":[{"value":"beige","label":"beige"},{"value":"black","label":"black"},{"value":"blue","label":"blue"},{"value":"bronze","label":"bronze"},{"value":"brown","label":"brown"},{"value":"chameleon","label":"chameleon"},{"value":"cherry","label":"cherry"},{"value":"gold","label":"gold"},{"value":"green","label":"green"},{"value":"grey","label":"grey"},{"value":"light-blue","label":"light blue"},{"value":"lilac","label":"lilac"},{"value":"maroon","label":"maroon"},{"value":"orange","label":"orange"},{"value":"pink","label":"pink"},{"value":"red","label":"red"},{"value":"silver","label":"silver"},{"value":"turquoise","label":"turquoise"},{"value":"violet","label":"violet"},{"value":"white","label":"white"},{"value":"yellow","label":"yellow"}],"example":"white"},{"name":"steering","type":"enum","required":false,"description":"Which side the steering wheel is on. Measured bite: 161 697 → 9 578 right-hand-drive cars, which on a Japanese-import market is a filter buyers actually use.","on_invalid":"reject","allowed_values":[{"value":"left","label":"слева — left-hand drive"},{"value":"right","label":"справа — right-hand drive (JDM imports)"}],"example":"right","aliases":["wheel"]},{"name":"drive","type":"enum","required":false,"description":"Drivetrain. Measured bite: 161 697 → 48 905 for all-wheel drive.","on_invalid":"reject","allowed_values":[{"value":"front","label":"передний привод"},{"value":"all","label":"полный привод"},{"value":"rear","label":"задний привод"}],"example":"all","aliases":["drivetrain"]},{"name":"condition","type":"enum","required":false,"description":"New or used. Measured bite: 161 697 → 4 667 new and 157 031 used, i.e. 97 % of this board is second-hand.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Новая — brand new, never registered"},{"value":"used","label":"С пробегом — used"}],"example":"new"},{"name":"vehicle_class","type":"enum","required":false,"description":"Coarse vehicle class, one level above `body`. Measured bite: 161 697 → 47 435 for suv-pickup.","on_invalid":"reject","allowed_values":[{"value":"car","label":"Легковые — passenger cars"},{"value":"suv-pickup","label":"Внедорожники и пикапы — SUVs and pickups"},{"value":"minivan-minibus","label":"Минивены и микроавтобусы"}],"example":"suv-pickup"},{"name":"dealers_only","type":"boolean","required":false,"description":"Only ads from businesses and dealers. Measured bite: 161 697 → 10 055, and cross-checked against the rows themselves — all 20 rows of the filtered page came back with a business `seller_kind`, all 20 of the unfiltered control with a private one. There is no inverse flag: the source's own `who` parameter returns an empty page for every value tried, so it is not offered. Filter `seller_kind == \"private\"` on the rows instead.","on_invalid":"reject","default":false,"example":true,"aliases":["is_dealer","dealer"]},{"name":"customs_cleared","type":"boolean","required":false,"description":"Only cars already customs-cleared in Kazakhstan — the question every buyer of a grey import asks. Measured bite: 161 697 → 157 582, so it rarely narrows much.","on_invalid":"reject","default":false,"example":true,"aliases":["cleared"]},{"name":"damaged_only","type":"boolean","required":false,"description":"Only cars the seller marks as damaged or not roadworthy (Аварийная/Не на ходу). Measured bite: 161 697 → 3 232.","on_invalid":"reject","default":false,"example":true,"aliases":["need_repair"]},{"name":"with_photo","type":"boolean","required":false,"description":"Only ads with at least one photo. Measured bite: 161 697 → 159 960 — on this site 98.9 % of ads already have one.","on_invalid":"reject","default":false,"example":true,"aliases":["has_photo"]},{"name":"sort","type":"enum","required":false,"description":"Ordering. All six named orders were measured changing the row order on the same query (price_asc opened at 10 000 ₸, price_desc at 1 000 000 000 ₸). An unknown value is rejected here because the source accepts it and silently keeps its own order. `default` is the source's own order, which measured identical to `newest`.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The source's own order (newest first)"},{"value":"newest","label":"Newest advert first"},{"value":"oldest","label":"Oldest advert first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"year_desc","label":"Newest model year first"},{"value":"year_asc","label":"Oldest model year first"}],"default":"default","example":"price_asc","aliases":["order","sort_by"]},{"name":"page","type":"integer","required":false,"description":"1-based page number, 20 rows a page. 🔴 The source stops at page 1000 — its own page selector says so ('1 из 1000') and pages 1001, 1500 and 4000 all return exactly what page 1000 returns. So one query hands over at most 20 000 of its rows; narrow it with brand, model, city or a price band instead. Every response reports `reachable_rows` for this.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"total_results (the source's own count), reachable_rows, page, page_size, page_count, has_more, page_at_ceiling, promoted_tiles_excluded, sort, query, filters (the path and query string actually sent) and listings[] with listing_id, url, title, brand, model, year, condition, body, engine_volume_l, fuel, transmission, steering, mileage_km, color, options[], description_excerpt, price, price_currency (always KZT), price_kind, price_display (the source's own printed string), market_avg_price (Kolesa's own average for this model), city, city_name, region_code (ISO 3166-2, e.g. KZ-ALM), seller_id, seller_kind (private | business), seller_type_id, is_new, is_trade_in, credit_available, has_video, photo_count, status, availability, updated_at, published_until, paid_services[], promoted, labels[], posted_label, image and spec_line[] (the card's own chips, verbatim).","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"toyota","city":"almaty","max_results":20}},{"name":"listing","description":"Full detail of one advert by id or URL: the complete seller description, every photo at full size, the price with the source's own printed string, the entire parameter table, the option list, and the seller's public block (kind, dealer name, verification badge, address, ads on file, phone prefix and how many numbers are on file). A removed or non-existent advert returns NOT_FOUND. The seller's phone number itself is never requested and never returned, and a PRIVATE seller's display name is not published on this page at all — `seller.name` is null there and `seller.name_published` says so.","required_params":[],"optional_params":["listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Advert id — the number at the end of every kolesa.kz/a/show/<id> URL and the `listing_id` of every search row. Give this or `url`.","on_invalid":"reject","example":"231475478","value_pattern":"\\d{4,12}","aliases":["advert_id","id"]},{"name":"url","type":"string","required":false,"description":"Full advert URL exactly as `search` returns it; the id is taken from its /a/show/<id> tail. Give this or `listing_id`.","on_invalid":"reject","example":"https://kolesa.kz/a/show/231475478","aliases":["listing_url","advert_url"]}],"returns":"listing_id, url, title, brand, model, year, equipment, generation, body, body_text, engine_text, engine_volume_l, fuel, mileage_km, transmission, transmission_text, drive_text, steering, color, color_text, customs_cleared, vin, city, city_name, region_code, description (full text), options[], parameters[] (the source's own label/value rows), images[], image_count, photo_count, price, price_currency, price_kind, price_display, market_avg_price, status, availability, updated_at, published_until, is_new, is_trade_in, credit_available, has_video, paid_services[], promoted and seller{seller_id, kind, seller_type_id, name, name_published, is_verified_dealer, shop_url, experience_text, shop_listing_count, address, labels[], phone_prefix, phone_count, phone_hidden}.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://kolesa.kz/a/show/231475478"}}]},{"name":"komehyo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"KOMEHYO API — live second-hand luxury stock from komehyo.jp, Japan's largest pre-owned luxury retailer. KOMEHYO buys every piece in over its own counters, has its own in-house specialists authenticate and grade it, and resells it from a named branch — so every listing is ONE physical object with ONE of KOMEHYO's six grades, ONE tax-included yen price and ONE branch holding it. Search ~155,000 live online items (bags, watches, jewellery, certificated diamonds, fashion, kimono, cameras, guitars) by keyword, brand id, category, grade, branch, price band, sale or new-arrival day; pull one item's full record with KOMEHYO's own written definition of its grade, its condition notes, its measurements, stones, carat/clarity/cut, what is in the box and every photo; or read KOMEHYO's own live taxonomy — 13 categories with 101 subcategories, 2,752 brands with item counts, 37 branches with per-branch stock, and every filter value with its own count. Prices are tax-included (税込) throughout, measured. Reads KOMEHYO's own Japanese, English and Chinese surfaces. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/komehyo/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse KOMEHYO's live catalogue at ITEM level — every row is one specific second-hand object in stock, with KOMEHYO's own grade, the branch holding it, its tax-included price and, when it is reduced, the price before the reduction. Pass `query`, or any combination of `category` / `brand_no` / `condition` / `gender` / `price_band` / `discount` / `new_arrival` / `store` / `rare` / `vintage`, or nothing at all to walk all ~155,000 online items. `meta.total_results` is KOMEHYO's own exact count for the request, so a filter that bites and a filter that was ignored are told apart without guessing. 50 rows per page (KOMEHYO's own fixed size). Set `include_store_stock` to add the ~15,000 items that sit in a branch but are not sold online.","required_params":[],"optional_params":["query","hashtag","category","brand_no","condition","gender","price_band","discount","new_arrival","store","rare","vintage","include_store_stock","sort","page","lang","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as KOMEHYO's own search box takes it — Japanese or latin, a brand name, a model reference (`M68775`), a product code or one of KOMEHYO's own campaign codes. Omit it to browse the whole catalogue (154,594 live online items measured 2026-10-08).","on_invalid":"reject","example":"ROLEX","aliases":["q","keyword"]},{"name":"hashtag","type":"string","required":false,"description":"One of KOMEHYO's own item tags, as `product` returns them in `hashtags[]` (e.g. `バッグ ブラック`). A separate index from `query`, and it bites: `バッグ ブラック` → 4,508 items.","on_invalid":"reject","example":"バッグ ブラック"},{"name":"category","type":"enum","required":false,"description":"One of KOMEHYO's 13 top-level categories (pass the slug below), or ANY subcategory slug the `categories` action returns (e.g. `brandbag_handbag`, `watch-mens`), or KOMEHYO's own numeric dispNo. 101 subcategories were live on 2026-10-08.","on_invalid":"reject","allowed_values":[{"value":"brandbag","label":"ブランドバッグ (dispNo 009001004)"},{"value":"brandwallet-accessories","label":"ブランド財布・小物 (dispNo 009001005)"},{"value":"brandjewelry","label":"ブランドジュエリー (dispNo 009001001)"},{"value":"nobrandjewelry","label":"ジュエリー (dispNo 009001002)"},{"value":"4cdiamond","label":"鑑定書付ダイヤモンド (dispNo 009001003)"},{"value":"watch-mens","label":"時計メンズ (dispNo 009001006)"},{"value":"watch-ladies","label":"時計レディース (dispNo 009001007)"},{"value":"fashion-ladies","label":"レディースファッション (dispNo 009001008)"},{"value":"fashion-mens","label":"メンズファッション (dispNo 009001009)"},{"value":"camera","label":"カメラ (dispNo 009001010)"},{"value":"musicalinstrument","label":"ギター (dispNo 009001011)"},{"value":"kimono","label":"きもの (dispNo 009001012)"},{"value":"stationery","label":"筆記具 (dispNo 009001013)"}],"example":"brandbag","value_pattern":"[a-z0-9][a-z0-9\\-]*(_[a-z0-9][a-z0-9\\-_]*)?|\\d{9}(\\d{3})?"},{"name":"brand_no","type":"array","required":false,"description":"KOMEHYO's own brand id (`brand_no` from the `brands` action). Repeatable / comma-separated = OR, verified: 1304 → 27 items, 1305 → 6, both → 33. This is the exact brand filter; a brand NAME passed to `query` is a text match and will also catch items that merely mention it.","on_invalid":"reject","example":"1304","aliases":["brand_id"]},{"name":"condition","type":"array","required":false,"description":"KOMEHYO's own product grade. Pass the key below, KOMEHYO's own numeric code 1-6, or its own Japanese label — comma-separated = OR. KOMEHYO grades every item itself; the grade IS the product. Note the site prints the same label with a fullwidth OR an ASCII letter (中古品Ａ / 中古品A); both are accepted and everything returned is folded to the ASCII form.","on_invalid":"reject","allowed_values":[{"value":"new","label":"新品 (KOMEHYO grade code 1, rank 6/6)"},{"value":"unused","label":"未使用品 (KOMEHYO grade code 2, rank 5/6)"},{"value":"used_s","label":"中古品S (KOMEHYO grade code 3, rank 4/6)"},{"value":"used_a","label":"中古品A (KOMEHYO grade code 4, rank 3/6)"},{"value":"used_b","label":"中古品B (KOMEHYO grade code 5, rank 2/6)"},{"value":"used_c","label":"中古品C (KOMEHYO grade code 6, rank 1/6)"}],"example":"used_a","value_pattern":"[1-6]|[^,]+","aliases":["grade","rank"]},{"name":"gender","type":"enum","required":false,"description":"KOMEHYO's own gender index (性別). Measured: `mens` → 47,127 items.","on_invalid":"reject","allowed_values":[{"value":"mens","label":"メンズ"},{"value":"ladies","label":"レディース"}],"example":"ladies"},{"name":"price_band","type":"array","required":false,"description":"KOMEHYO's own price band, tax-included yen. 🔴 These five strings are the ONLY values its price filter accepts: any other range (`1000000-`, `100000-250000`) is answered with ZERO results rather than an error, which is why this engine offers no free-form min/max. To reach a price outside a band, use `sort=price_asc` / `price_desc`. Comma-separated = OR (verified: `-30000` 44,553 + `500001-` 9,801 = 54,359 together).","on_invalid":"reject","allowed_values":[{"value":"-30000","label":"¥1〜¥30,000"},{"value":"30001-100000","label":"¥30,001〜¥100,000"},{"value":"100001-250000","label":"¥100,001〜¥250,000"},{"value":"250001-500000","label":"¥250,001〜¥500,000"},{"value":"500001-","label":"¥500,001〜"}],"example":"500001-"},{"name":"discount","type":"enum","required":false,"description":"KOMEHYO's own sale index. `0` = every reduced item (7,526 measured); the others are its own off-rate buckets.","on_invalid":"reject","allowed_values":[{"value":"0","label":"セール品のすべて — every reduced item"},{"value":"-20","label":"～20％ off"},{"value":"-30","label":"～30％ off"},{"value":"30-","label":"30％～ off"}],"example":"0"},{"name":"new_arrival","type":"string","required":false,"description":"KOMEHYO's own new-arrival index: `0` = everything it currently calls new (7,362 measured), or one `YYYYMMDD` intake day — the days it offers are returned by `facets`.","on_invalid":"reject","example":"0","value_pattern":"0|\\d{8}"},{"name":"store","type":"array","required":false,"description":"KOMEHYO's own branch id — the branch physically holding the item. Comma-separated = OR. 37 branches were live on 2026-10-08; `stores` returns them with KOMEHYO's current counts.","on_invalid":"reject","allowed_values":[{"value":"1","label":"名古屋本館"},{"value":"31","label":"名古屋本店BAG＋"},{"value":"7","label":"名駅店"},{"value":"3","label":"KOMEHYO SHINJUKU WOMEN"},{"value":"4","label":"KOMEHYO SHINJUKU MEN"},{"value":"5","label":"KOMEHYO SHINJUKU"},{"value":"29","label":"KOMEHYO SHIBUYA"},{"value":"6","label":"KOMEHYO GINZA"},{"value":"38","label":"KOMEHYO GINZA PLUS"},{"value":"36","label":"GINZA SNEAKER MARKET"},{"value":"35","label":"KOMEHYO VINTAGE TOKYO"},{"value":"40","label":"【新店】KOMEHYO VINTAGE TOKYO atelier"},{"value":"39","label":"【新店】KOMEHYO YOKOHAMA"},{"value":"37","label":"【新店】KOMEHYO OSAKA SHINSAIBASHI"},{"value":"10","label":"心斎橋店"},{"value":"8","label":"梅田店"},{"value":"11","label":"神戸三宮店"},{"value":"30","label":"日本橋店"},{"value":"9","label":"青山店"},{"value":"34","label":"新宿南口店"},{"value":"12","label":"大宮東口店"},{"value":"13","label":"柏東口店"},{"value":"14","label":"町田店"},{"value":"15","label":"自由が丘店"},{"value":"32","label":"二子玉川ライズ・オークモール店"},{"value":"20","label":"きもの館"},{"value":"21","label":"日進竹の山店"},{"value":"22","label":"植田山店"},{"value":"23","label":"鎌倉台店"},{"value":"24","label":"春日井柏原店"},{"value":"27","label":"稲沢店"},{"value":"33","label":"ららぽーと愛知東郷店"},{"value":"17","label":"あべの店"},{"value":"16","label":"京都新京極店"},{"value":"18","label":"広島本通店"},{"value":"41","label":"【新店】KOMEHYO FUKUOKA TENJIN"},{"value":"19","label":"天神店"}],"example":"29","value_pattern":"\\d{1,3}","aliases":["store_id"]},{"name":"rare","type":"boolean","required":false,"description":"Only items KOMEHYO itself flags レア商品 (rare). Measured: 196 items in the whole catalogue.","on_invalid":"reject","example":true},{"name":"vintage","type":"boolean","required":false,"description":"Only items KOMEHYO itself flags ヴィンテージ商品 (vintage). Measured: 3,181 items.","on_invalid":"reject","example":true},{"name":"include_store_stock","type":"boolean","required":false,"description":"Include stock that exists in a branch but is NOT buyable online. Default false = online stock only. Measured 2026-10-08: 154,594 online, 169,742 with branch stock — 15,148 extra items.","on_invalid":"reject","default":false,"example":true},{"name":"sort","type":"enum","required":false,"description":"KOMEHYO's own sort order. Default `recommended`, which is deterministic (two calls a second apart returned the identical 50 codes). An unsupported value is rejected here rather than silently ignored, which is what KOMEHYO's own page does with it.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"おすすめ順 (KOMEHYO sortKey 06)"},{"value":"newest","label":"新着順 (KOMEHYO sortKey 01)"},{"value":"price_asc","label":"価格が安い順 (KOMEHYO sortKey 02)"},{"value":"price_desc","label":"価格が高い順 (KOMEHYO sortKey 03)"},{"value":"discount_asc","label":"OFF率の低い順 (KOMEHYO sortKey 04)"},{"value":"discount_desc","label":"OFF率の高い順 (KOMEHYO sortKey 05)"}],"default":"recommended","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"1-based page. KOMEHYO's page size is fixed at 50 rows and cannot be changed. Paging is honest: page 1 and 2 share no items, the last page returns its real remainder, and past the end you get an empty page instead of a repeat of the last one.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":4000},{"name":"lang","type":"enum","required":false,"description":"Which of KOMEHYO's own language surfaces to read. `ja` (default) is its source text. The others are KOMEHYO's OWN server-side translation of the same page — machine translation, declared as such in `meta.translation` — and cost no extra request; the Japanese original comes back alongside in the `*_ja` fields. Nothing is translated by this API.","on_invalid":"reject","allowed_values":[{"value":"ja","label":"日本語 — KOMEHYO's own source text"},{"value":"en","label":"English — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHT","label":"繁體中文 — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHS","label":"简体中文 — KOMEHYO's own published translation (machine translation)"}],"default":"ja","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"No effect on this engine: KOMEHYO is the seller of every item it lists, so there is no third-party merchant and no personal data on this surface. Accepted for gateway uniformity.","on_invalid":"reject","default":false,"example":false}],"returns":"products[]{product_code, goods_no, url, title, brand, condition, condition_label, condition_rank, store, store_id, price, currency, price_before_discount, discount_percent, reference, reference_price, size, material, arrival, badges[], image} + meta{total_results, page, page_size, pagination, filters_applied, price_basis, currency, language, catalog}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"ROLEX","sort":"price_desc"}},{"name":"product","description":"The complete record of ONE item by its `product_code`. Adds everything a search row cannot carry: KOMEHYO's own written definition of the grade this piece carries, its condition notes in KOMEHYO's own words (what is scuffed, blackened, scratched), the maker's model reference, the measured dimensions, the stones with carat / clarity / cut for jewellery, the material, colour and weight, what is in the box (including the appraisal or warranty certificate when there is one), the resizing range for a ring, the warranty period, the return policy, loyalty points, how many shoppers are watching it, every photo, KOMEHYO's own tags, its breadcrumb trail, and `attributes[]` — every label/value pair KOMEHYO printed, in order, verbatim, so nothing it publishes is lost to a mapping. A code that is no longer live answers NOT_FOUND (KOMEHYO returns a real 404, so this is never a guess). Prices are tax-included and cross-checked against two other numbers on KOMEHYO's own page.","required_params":["product_code"],"optional_params":["lang","include_pii"],"params":[{"name":"product_code","type":"string","required":true,"description":"KOMEHYO's own stock number for one physical item, as every `search` row returns it and as the product page prints it under 商品コード — e.g. `230-000-577-1256`. Each one is a single object: when it sells, the page 404s.","on_invalid":"reject","example":"230-000-577-1256","value_pattern":"\\d{3}-\\d{3}-\\d{3}-\\d{4}","aliases":["code","sku","goods_stk_no"]},{"name":"lang","type":"enum","required":false,"description":"Which of KOMEHYO's own language surfaces to read. `ja` (default) is its source text. The others are KOMEHYO's OWN server-side translation of the same page — machine translation, declared as such in `meta.translation` — and cost no extra request; the Japanese original comes back alongside in the `*_ja` fields. Nothing is translated by this API.","on_invalid":"reject","allowed_values":[{"value":"ja","label":"日本語 — KOMEHYO's own source text"},{"value":"en","label":"English — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHT","label":"繁體中文 — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHS","label":"简体中文 — KOMEHYO's own published translation (machine translation)"}],"default":"ja","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"No effect on this engine: KOMEHYO is the seller of every item it lists, so there is no third-party merchant and no personal data on this surface. Accepted for gateway uniformity.","on_invalid":"reject","default":false,"example":false}],"returns":"product{product_code, goods_no, url, title, brand, brand_slug, item_name, common_name, model_number, material, condition, condition_label, condition_rank, condition_description, gender_type, size, measured_size, resize_range, color, main_color, carat, clarity, cut, stones[], weight, accessories, warranty_period, special_notes, store, store_id, description, return_policy, price, currency, price_before_discount, discount_percent, price_includes_tax, loyalty_points, watchers, images[], hashtags[], breadcrumbs[]{name,url}, attributes[]{label,value}} + meta{price_basis, currency, language}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_code":"230-000-577-1256"}},{"name":"categories","description":"KOMEHYO's own live category tree: 13 top-level categories, each with its slug, its numeric dispNo and KOMEHYO's own current item count, plus every subcategory underneath with its own slug and count (101 subcategories live on 2026-10-08). Takes the same scope parameters as `search`, so you can ask 'how does Louis Vuitton stock split across categories' in one call. This is how you get the exact `category` value to pass to `search` instead of guessing it.","required_params":[],"optional_params":["query","hashtag","category","brand_no","condition","gender","price_band","discount","new_arrival","store","rare","vintage","include_store_stock","lang","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as KOMEHYO's own search box takes it — Japanese or latin, a brand name, a model reference (`M68775`), a product code or one of KOMEHYO's own campaign codes. Omit it to browse the whole catalogue (154,594 live online items measured 2026-10-08).","on_invalid":"reject","example":"ROLEX","aliases":["q","keyword"]},{"name":"hashtag","type":"string","required":false,"description":"One of KOMEHYO's own item tags, as `product` returns them in `hashtags[]` (e.g. `バッグ ブラック`). A separate index from `query`, and it bites: `バッグ ブラック` → 4,508 items.","on_invalid":"reject","example":"バッグ ブラック"},{"name":"category","type":"enum","required":false,"description":"One of KOMEHYO's 13 top-level categories (pass the slug below), or ANY subcategory slug the `categories` action returns (e.g. `brandbag_handbag`, `watch-mens`), or KOMEHYO's own numeric dispNo. 101 subcategories were live on 2026-10-08.","on_invalid":"reject","allowed_values":[{"value":"brandbag","label":"ブランドバッグ (dispNo 009001004)"},{"value":"brandwallet-accessories","label":"ブランド財布・小物 (dispNo 009001005)"},{"value":"brandjewelry","label":"ブランドジュエリー (dispNo 009001001)"},{"value":"nobrandjewelry","label":"ジュエリー (dispNo 009001002)"},{"value":"4cdiamond","label":"鑑定書付ダイヤモンド (dispNo 009001003)"},{"value":"watch-mens","label":"時計メンズ (dispNo 009001006)"},{"value":"watch-ladies","label":"時計レディース (dispNo 009001007)"},{"value":"fashion-ladies","label":"レディースファッション (dispNo 009001008)"},{"value":"fashion-mens","label":"メンズファッション (dispNo 009001009)"},{"value":"camera","label":"カメラ (dispNo 009001010)"},{"value":"musicalinstrument","label":"ギター (dispNo 009001011)"},{"value":"kimono","label":"きもの (dispNo 009001012)"},{"value":"stationery","label":"筆記具 (dispNo 009001013)"}],"example":"brandbag","value_pattern":"[a-z0-9][a-z0-9\\-]*(_[a-z0-9][a-z0-9\\-_]*)?|\\d{9}(\\d{3})?"},{"name":"brand_no","type":"array","required":false,"description":"KOMEHYO's own brand id (`brand_no` from the `brands` action). Repeatable / comma-separated = OR, verified: 1304 → 27 items, 1305 → 6, both → 33. This is the exact brand filter; a brand NAME passed to `query` is a text match and will also catch items that merely mention it.","on_invalid":"reject","example":"1304","aliases":["brand_id"]},{"name":"condition","type":"array","required":false,"description":"KOMEHYO's own product grade. Pass the key below, KOMEHYO's own numeric code 1-6, or its own Japanese label — comma-separated = OR. KOMEHYO grades every item itself; the grade IS the product. Note the site prints the same label with a fullwidth OR an ASCII letter (中古品Ａ / 中古品A); both are accepted and everything returned is folded to the ASCII form.","on_invalid":"reject","allowed_values":[{"value":"new","label":"新品 (KOMEHYO grade code 1, rank 6/6)"},{"value":"unused","label":"未使用品 (KOMEHYO grade code 2, rank 5/6)"},{"value":"used_s","label":"中古品S (KOMEHYO grade code 3, rank 4/6)"},{"value":"used_a","label":"中古品A (KOMEHYO grade code 4, rank 3/6)"},{"value":"used_b","label":"中古品B (KOMEHYO grade code 5, rank 2/6)"},{"value":"used_c","label":"中古品C (KOMEHYO grade code 6, rank 1/6)"}],"example":"used_a","value_pattern":"[1-6]|[^,]+","aliases":["grade","rank"]},{"name":"gender","type":"enum","required":false,"description":"KOMEHYO's own gender index (性別). Measured: `mens` → 47,127 items.","on_invalid":"reject","allowed_values":[{"value":"mens","label":"メンズ"},{"value":"ladies","label":"レディース"}],"example":"ladies"},{"name":"price_band","type":"array","required":false,"description":"KOMEHYO's own price band, tax-included yen. 🔴 These five strings are the ONLY values its price filter accepts: any other range (`1000000-`, `100000-250000`) is answered with ZERO results rather than an error, which is why this engine offers no free-form min/max. To reach a price outside a band, use `sort=price_asc` / `price_desc`. Comma-separated = OR (verified: `-30000` 44,553 + `500001-` 9,801 = 54,359 together).","on_invalid":"reject","allowed_values":[{"value":"-30000","label":"¥1〜¥30,000"},{"value":"30001-100000","label":"¥30,001〜¥100,000"},{"value":"100001-250000","label":"¥100,001〜¥250,000"},{"value":"250001-500000","label":"¥250,001〜¥500,000"},{"value":"500001-","label":"¥500,001〜"}],"example":"500001-"},{"name":"discount","type":"enum","required":false,"description":"KOMEHYO's own sale index. `0` = every reduced item (7,526 measured); the others are its own off-rate buckets.","on_invalid":"reject","allowed_values":[{"value":"0","label":"セール品のすべて — every reduced item"},{"value":"-20","label":"～20％ off"},{"value":"-30","label":"～30％ off"},{"value":"30-","label":"30％～ off"}],"example":"0"},{"name":"new_arrival","type":"string","required":false,"description":"KOMEHYO's own new-arrival index: `0` = everything it currently calls new (7,362 measured), or one `YYYYMMDD` intake day — the days it offers are returned by `facets`.","on_invalid":"reject","example":"0","value_pattern":"0|\\d{8}"},{"name":"store","type":"array","required":false,"description":"KOMEHYO's own branch id — the branch physically holding the item. Comma-separated = OR. 37 branches were live on 2026-10-08; `stores` returns them with KOMEHYO's current counts.","on_invalid":"reject","allowed_values":[{"value":"1","label":"名古屋本館"},{"value":"31","label":"名古屋本店BAG＋"},{"value":"7","label":"名駅店"},{"value":"3","label":"KOMEHYO SHINJUKU WOMEN"},{"value":"4","label":"KOMEHYO SHINJUKU MEN"},{"value":"5","label":"KOMEHYO SHINJUKU"},{"value":"29","label":"KOMEHYO SHIBUYA"},{"value":"6","label":"KOMEHYO GINZA"},{"value":"38","label":"KOMEHYO GINZA PLUS"},{"value":"36","label":"GINZA SNEAKER MARKET"},{"value":"35","label":"KOMEHYO VINTAGE TOKYO"},{"value":"40","label":"【新店】KOMEHYO VINTAGE TOKYO atelier"},{"value":"39","label":"【新店】KOMEHYO YOKOHAMA"},{"value":"37","label":"【新店】KOMEHYO OSAKA SHINSAIBASHI"},{"value":"10","label":"心斎橋店"},{"value":"8","label":"梅田店"},{"value":"11","label":"神戸三宮店"},{"value":"30","label":"日本橋店"},{"value":"9","label":"青山店"},{"value":"34","label":"新宿南口店"},{"value":"12","label":"大宮東口店"},{"value":"13","label":"柏東口店"},{"value":"14","label":"町田店"},{"value":"15","label":"自由が丘店"},{"value":"32","label":"二子玉川ライズ・オークモール店"},{"value":"20","label":"きもの館"},{"value":"21","label":"日進竹の山店"},{"value":"22","label":"植田山店"},{"value":"23","label":"鎌倉台店"},{"value":"24","label":"春日井柏原店"},{"value":"27","label":"稲沢店"},{"value":"33","label":"ららぽーと愛知東郷店"},{"value":"17","label":"あべの店"},{"value":"16","label":"京都新京極店"},{"value":"18","label":"広島本通店"},{"value":"41","label":"【新店】KOMEHYO FUKUOKA TENJIN"},{"value":"19","label":"天神店"}],"example":"29","value_pattern":"\\d{1,3}","aliases":["store_id"]},{"name":"rare","type":"boolean","required":false,"description":"Only items KOMEHYO itself flags レア商品 (rare). Measured: 196 items in the whole catalogue.","on_invalid":"reject","example":true},{"name":"vintage","type":"boolean","required":false,"description":"Only items KOMEHYO itself flags ヴィンテージ商品 (vintage). Measured: 3,181 items.","on_invalid":"reject","example":true},{"name":"include_store_stock","type":"boolean","required":false,"description":"Include stock that exists in a branch but is NOT buyable online. Default false = online stock only. Measured 2026-10-08: 154,594 online, 169,742 with branch stock — 15,148 extra items.","on_invalid":"reject","default":false,"example":true},{"name":"lang","type":"enum","required":false,"description":"Which of KOMEHYO's own language surfaces to read. `ja` (default) is its source text. The others are KOMEHYO's OWN server-side translation of the same page — machine translation, declared as such in `meta.translation` — and cost no extra request; the Japanese original comes back alongside in the `*_ja` fields. Nothing is translated by this API.","on_invalid":"reject","allowed_values":[{"value":"ja","label":"日本語 — KOMEHYO's own source text"},{"value":"en","label":"English — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHT","label":"繁體中文 — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHS","label":"简体中文 — KOMEHYO's own published translation (machine translation)"}],"default":"ja","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"No effect on this engine: KOMEHYO is the seller of every item it lists, so there is no third-party merchant and no personal data on this surface. Accepted for gateway uniformity.","on_invalid":"reject","default":false,"example":false}],"returns":"categories[]{slug, name, disp_no, count, subcategories[]{slug, name, count}} + meta{total_results, scope}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"ROLEX"}},{"name":"brands","description":"Every brand KOMEHYO currently carries, with KOMEHYO's own brand id, its Japanese and latin names and how many items of it are in stock — 2,752 brands unscoped, or 96-128 inside one category. The `brand_no` returned here is the exact brand filter for `search`. Pass `category` to scope it (far cheaper: 240 KB instead of 2.9 MB) and `starts_with` to narrow it.","required_params":[],"optional_params":["category","starts_with","page","page_size","include_pii"],"params":[{"name":"category","type":"enum","required":false,"description":"One of KOMEHYO's 13 top-level categories (pass the slug below), or ANY subcategory slug the `categories` action returns (e.g. `brandbag_handbag`, `watch-mens`), or KOMEHYO's own numeric dispNo. 101 subcategories were live on 2026-10-08.","on_invalid":"reject","allowed_values":[{"value":"brandbag","label":"ブランドバッグ (dispNo 009001004)"},{"value":"brandwallet-accessories","label":"ブランド財布・小物 (dispNo 009001005)"},{"value":"brandjewelry","label":"ブランドジュエリー (dispNo 009001001)"},{"value":"nobrandjewelry","label":"ジュエリー (dispNo 009001002)"},{"value":"4cdiamond","label":"鑑定書付ダイヤモンド (dispNo 009001003)"},{"value":"watch-mens","label":"時計メンズ (dispNo 009001006)"},{"value":"watch-ladies","label":"時計レディース (dispNo 009001007)"},{"value":"fashion-ladies","label":"レディースファッション (dispNo 009001008)"},{"value":"fashion-mens","label":"メンズファッション (dispNo 009001009)"},{"value":"camera","label":"カメラ (dispNo 009001010)"},{"value":"musicalinstrument","label":"ギター (dispNo 009001011)"},{"value":"kimono","label":"きもの (dispNo 009001012)"},{"value":"stationery","label":"筆記具 (dispNo 009001013)"}],"example":"brandbag","value_pattern":"[a-z0-9][a-z0-9\\-]*(_[a-z0-9][a-z0-9\\-_]*)?|\\d{9}(\\d{3})?"},{"name":"starts_with","type":"string","required":false,"description":"Keep only brands whose latin or Japanese name starts with this (case-insensitive). Applied after KOMEHYO's own list is read, so the counts stay KOMEHYO's.","on_invalid":"reject","example":"LOU"},{"name":"page","type":"integer","required":false,"description":"1-based page. KOMEHYO's page size is fixed at 50 rows and cannot be changed. Paging is honest: page 1 and 2 share no items, the last page returns its real remainder, and past the end you get an empty page instead of a repeat of the last one.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":4000},{"name":"page_size","type":"integer","required":false,"description":"Brands per page. KOMEHYO publishes its whole brand list in one 2.9 MB document, so this engine pages it for you rather than making you hold it.","on_invalid":"reject","default":200,"example":200,"minimum":1,"maximum":3000},{"name":"include_pii","type":"boolean","required":false,"description":"No effect on this engine: KOMEHYO is the seller of every item it lists, so there is no third-party merchant and no personal data on this surface. Accepted for gateway uniformity.","on_invalid":"reject","default":false,"example":false}],"returns":"brands[]{brand_no, name_ja, name_latin, item_count} + meta{total_results, page, page_size, pagination, category}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"watch-mens","page_size":200}},{"name":"facets","description":"KOMEHYO's own live filter taxonomy with its own counts: every grade, gender, price band, sale bucket, new-arrival day, branch and the rare / vintage flags that actually have stock right now. Accepts the same scope parameters as `search`, so the counts are scoped — 'which grades exist inside Hermès bags', 'how much Rolex sits in Shibuya'. Use it to discover the exact filter value to pass rather than guessing it, and to read the grade ladder with KOMEHYO's own codes, labels and counts in one call.","required_params":[],"optional_params":["query","hashtag","category","brand_no","condition","gender","price_band","discount","new_arrival","store","rare","vintage","include_store_stock","facets","lang","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as KOMEHYO's own search box takes it — Japanese or latin, a brand name, a model reference (`M68775`), a product code or one of KOMEHYO's own campaign codes. Omit it to browse the whole catalogue (154,594 live online items measured 2026-10-08).","on_invalid":"reject","example":"ROLEX","aliases":["q","keyword"]},{"name":"hashtag","type":"string","required":false,"description":"One of KOMEHYO's own item tags, as `product` returns them in `hashtags[]` (e.g. `バッグ ブラック`). A separate index from `query`, and it bites: `バッグ ブラック` → 4,508 items.","on_invalid":"reject","example":"バッグ ブラック"},{"name":"category","type":"enum","required":false,"description":"One of KOMEHYO's 13 top-level categories (pass the slug below), or ANY subcategory slug the `categories` action returns (e.g. `brandbag_handbag`, `watch-mens`), or KOMEHYO's own numeric dispNo. 101 subcategories were live on 2026-10-08.","on_invalid":"reject","allowed_values":[{"value":"brandbag","label":"ブランドバッグ (dispNo 009001004)"},{"value":"brandwallet-accessories","label":"ブランド財布・小物 (dispNo 009001005)"},{"value":"brandjewelry","label":"ブランドジュエリー (dispNo 009001001)"},{"value":"nobrandjewelry","label":"ジュエリー (dispNo 009001002)"},{"value":"4cdiamond","label":"鑑定書付ダイヤモンド (dispNo 009001003)"},{"value":"watch-mens","label":"時計メンズ (dispNo 009001006)"},{"value":"watch-ladies","label":"時計レディース (dispNo 009001007)"},{"value":"fashion-ladies","label":"レディースファッション (dispNo 009001008)"},{"value":"fashion-mens","label":"メンズファッション (dispNo 009001009)"},{"value":"camera","label":"カメラ (dispNo 009001010)"},{"value":"musicalinstrument","label":"ギター (dispNo 009001011)"},{"value":"kimono","label":"きもの (dispNo 009001012)"},{"value":"stationery","label":"筆記具 (dispNo 009001013)"}],"example":"brandbag","value_pattern":"[a-z0-9][a-z0-9\\-]*(_[a-z0-9][a-z0-9\\-_]*)?|\\d{9}(\\d{3})?"},{"name":"brand_no","type":"array","required":false,"description":"KOMEHYO's own brand id (`brand_no` from the `brands` action). Repeatable / comma-separated = OR, verified: 1304 → 27 items, 1305 → 6, both → 33. This is the exact brand filter; a brand NAME passed to `query` is a text match and will also catch items that merely mention it.","on_invalid":"reject","example":"1304","aliases":["brand_id"]},{"name":"condition","type":"array","required":false,"description":"KOMEHYO's own product grade. Pass the key below, KOMEHYO's own numeric code 1-6, or its own Japanese label — comma-separated = OR. KOMEHYO grades every item itself; the grade IS the product. Note the site prints the same label with a fullwidth OR an ASCII letter (中古品Ａ / 中古品A); both are accepted and everything returned is folded to the ASCII form.","on_invalid":"reject","allowed_values":[{"value":"new","label":"新品 (KOMEHYO grade code 1, rank 6/6)"},{"value":"unused","label":"未使用品 (KOMEHYO grade code 2, rank 5/6)"},{"value":"used_s","label":"中古品S (KOMEHYO grade code 3, rank 4/6)"},{"value":"used_a","label":"中古品A (KOMEHYO grade code 4, rank 3/6)"},{"value":"used_b","label":"中古品B (KOMEHYO grade code 5, rank 2/6)"},{"value":"used_c","label":"中古品C (KOMEHYO grade code 6, rank 1/6)"}],"example":"used_a","value_pattern":"[1-6]|[^,]+","aliases":["grade","rank"]},{"name":"gender","type":"enum","required":false,"description":"KOMEHYO's own gender index (性別). Measured: `mens` → 47,127 items.","on_invalid":"reject","allowed_values":[{"value":"mens","label":"メンズ"},{"value":"ladies","label":"レディース"}],"example":"ladies"},{"name":"price_band","type":"array","required":false,"description":"KOMEHYO's own price band, tax-included yen. 🔴 These five strings are the ONLY values its price filter accepts: any other range (`1000000-`, `100000-250000`) is answered with ZERO results rather than an error, which is why this engine offers no free-form min/max. To reach a price outside a band, use `sort=price_asc` / `price_desc`. Comma-separated = OR (verified: `-30000` 44,553 + `500001-` 9,801 = 54,359 together).","on_invalid":"reject","allowed_values":[{"value":"-30000","label":"¥1〜¥30,000"},{"value":"30001-100000","label":"¥30,001〜¥100,000"},{"value":"100001-250000","label":"¥100,001〜¥250,000"},{"value":"250001-500000","label":"¥250,001〜¥500,000"},{"value":"500001-","label":"¥500,001〜"}],"example":"500001-"},{"name":"discount","type":"enum","required":false,"description":"KOMEHYO's own sale index. `0` = every reduced item (7,526 measured); the others are its own off-rate buckets.","on_invalid":"reject","allowed_values":[{"value":"0","label":"セール品のすべて — every reduced item"},{"value":"-20","label":"～20％ off"},{"value":"-30","label":"～30％ off"},{"value":"30-","label":"30％～ off"}],"example":"0"},{"name":"new_arrival","type":"string","required":false,"description":"KOMEHYO's own new-arrival index: `0` = everything it currently calls new (7,362 measured), or one `YYYYMMDD` intake day — the days it offers are returned by `facets`.","on_invalid":"reject","example":"0","value_pattern":"0|\\d{8}"},{"name":"store","type":"array","required":false,"description":"KOMEHYO's own branch id — the branch physically holding the item. Comma-separated = OR. 37 branches were live on 2026-10-08; `stores` returns them with KOMEHYO's current counts.","on_invalid":"reject","allowed_values":[{"value":"1","label":"名古屋本館"},{"value":"31","label":"名古屋本店BAG＋"},{"value":"7","label":"名駅店"},{"value":"3","label":"KOMEHYO SHINJUKU WOMEN"},{"value":"4","label":"KOMEHYO SHINJUKU MEN"},{"value":"5","label":"KOMEHYO SHINJUKU"},{"value":"29","label":"KOMEHYO SHIBUYA"},{"value":"6","label":"KOMEHYO GINZA"},{"value":"38","label":"KOMEHYO GINZA PLUS"},{"value":"36","label":"GINZA SNEAKER MARKET"},{"value":"35","label":"KOMEHYO VINTAGE TOKYO"},{"value":"40","label":"【新店】KOMEHYO VINTAGE TOKYO atelier"},{"value":"39","label":"【新店】KOMEHYO YOKOHAMA"},{"value":"37","label":"【新店】KOMEHYO OSAKA SHINSAIBASHI"},{"value":"10","label":"心斎橋店"},{"value":"8","label":"梅田店"},{"value":"11","label":"神戸三宮店"},{"value":"30","label":"日本橋店"},{"value":"9","label":"青山店"},{"value":"34","label":"新宿南口店"},{"value":"12","label":"大宮東口店"},{"value":"13","label":"柏東口店"},{"value":"14","label":"町田店"},{"value":"15","label":"自由が丘店"},{"value":"32","label":"二子玉川ライズ・オークモール店"},{"value":"20","label":"きもの館"},{"value":"21","label":"日進竹の山店"},{"value":"22","label":"植田山店"},{"value":"23","label":"鎌倉台店"},{"value":"24","label":"春日井柏原店"},{"value":"27","label":"稲沢店"},{"value":"33","label":"ららぽーと愛知東郷店"},{"value":"17","label":"あべの店"},{"value":"16","label":"京都新京極店"},{"value":"18","label":"広島本通店"},{"value":"41","label":"【新店】KOMEHYO FUKUOKA TENJIN"},{"value":"19","label":"天神店"}],"example":"29","value_pattern":"\\d{1,3}","aliases":["store_id"]},{"name":"rare","type":"boolean","required":false,"description":"Only items KOMEHYO itself flags レア商品 (rare). Measured: 196 items in the whole catalogue.","on_invalid":"reject","example":true},{"name":"vintage","type":"boolean","required":false,"description":"Only items KOMEHYO itself flags ヴィンテージ商品 (vintage). Measured: 3,181 items.","on_invalid":"reject","example":true},{"name":"include_store_stock","type":"boolean","required":false,"description":"Include stock that exists in a branch but is NOT buyable online. Default false = online stock only. Measured 2026-10-08: 154,594 online, 169,742 with branch stock — 15,148 extra items.","on_invalid":"reject","default":false,"example":true},{"name":"facets","type":"array","required":false,"description":"Which filter groups to return. Default: all of them.","on_invalid":"reject","allowed_values":[{"value":"condition","label":"KOMEHYO's own product grade"},{"value":"gender","label":"性別 — gender"},{"value":"price_band","label":"価格 — KOMEHYO's own price bands (the only ones it accepts)"},{"value":"discount","label":"セール品 — reduced items"},{"value":"new_arrival","label":"新入荷アイテム — arrival day"},{"value":"rare","label":"レア商品 — rare"},{"value":"vintage","label":"ヴィンテージ商品 — vintage"},{"value":"store","label":"お近くの店舗で探す — the branch holding the item"}],"example":"condition,store"},{"name":"lang","type":"enum","required":false,"description":"Which of KOMEHYO's own language surfaces to read. `ja` (default) is its source text. The others are KOMEHYO's OWN server-side translation of the same page — machine translation, declared as such in `meta.translation` — and cost no extra request; the Japanese original comes back alongside in the `*_ja` fields. Nothing is translated by this API.","on_invalid":"reject","allowed_values":[{"value":"ja","label":"日本語 — KOMEHYO's own source text"},{"value":"en","label":"English — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHT","label":"繁體中文 — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHS","label":"简体中文 — KOMEHYO's own published translation (machine translation)"}],"default":"ja","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"No effect on this engine: KOMEHYO is the seller of every item it lists, so there is no third-party merchant and no personal data on this surface. Accepted for gateway uniformity.","on_invalid":"reject","default":false,"example":false}],"returns":"facets[]{filter, source_field, label, value_count, values[]{value, label, count, rank, key, store_id}} + meta{total_results, scope}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"facets":"condition,price_band,store"}},{"name":"stores","description":"KOMEHYO's 37 branches with its own branch id and how many of its online items each one is physically holding right now — Nagoya's main building, the Shinjuku and Shibuya stores, Ginza, Yokohama, Osaka Shinsaibashi, Fukuoka Tenjin and the rest. The `store_id` here is the exact branch filter for `search`, and the counts answer 'where is the stock' without 37 calls. Accepts the same scope parameters, so you can ask which branch holds the Rolexes.","required_params":[],"optional_params":["query","hashtag","category","brand_no","condition","gender","price_band","discount","new_arrival","store","rare","vintage","include_store_stock","lang","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as KOMEHYO's own search box takes it — Japanese or latin, a brand name, a model reference (`M68775`), a product code or one of KOMEHYO's own campaign codes. Omit it to browse the whole catalogue (154,594 live online items measured 2026-10-08).","on_invalid":"reject","example":"ROLEX","aliases":["q","keyword"]},{"name":"hashtag","type":"string","required":false,"description":"One of KOMEHYO's own item tags, as `product` returns them in `hashtags[]` (e.g. `バッグ ブラック`). A separate index from `query`, and it bites: `バッグ ブラック` → 4,508 items.","on_invalid":"reject","example":"バッグ ブラック"},{"name":"category","type":"enum","required":false,"description":"One of KOMEHYO's 13 top-level categories (pass the slug below), or ANY subcategory slug the `categories` action returns (e.g. `brandbag_handbag`, `watch-mens`), or KOMEHYO's own numeric dispNo. 101 subcategories were live on 2026-10-08.","on_invalid":"reject","allowed_values":[{"value":"brandbag","label":"ブランドバッグ (dispNo 009001004)"},{"value":"brandwallet-accessories","label":"ブランド財布・小物 (dispNo 009001005)"},{"value":"brandjewelry","label":"ブランドジュエリー (dispNo 009001001)"},{"value":"nobrandjewelry","label":"ジュエリー (dispNo 009001002)"},{"value":"4cdiamond","label":"鑑定書付ダイヤモンド (dispNo 009001003)"},{"value":"watch-mens","label":"時計メンズ (dispNo 009001006)"},{"value":"watch-ladies","label":"時計レディース (dispNo 009001007)"},{"value":"fashion-ladies","label":"レディースファッション (dispNo 009001008)"},{"value":"fashion-mens","label":"メンズファッション (dispNo 009001009)"},{"value":"camera","label":"カメラ (dispNo 009001010)"},{"value":"musicalinstrument","label":"ギター (dispNo 009001011)"},{"value":"kimono","label":"きもの (dispNo 009001012)"},{"value":"stationery","label":"筆記具 (dispNo 009001013)"}],"example":"brandbag","value_pattern":"[a-z0-9][a-z0-9\\-]*(_[a-z0-9][a-z0-9\\-_]*)?|\\d{9}(\\d{3})?"},{"name":"brand_no","type":"array","required":false,"description":"KOMEHYO's own brand id (`brand_no` from the `brands` action). Repeatable / comma-separated = OR, verified: 1304 → 27 items, 1305 → 6, both → 33. This is the exact brand filter; a brand NAME passed to `query` is a text match and will also catch items that merely mention it.","on_invalid":"reject","example":"1304","aliases":["brand_id"]},{"name":"condition","type":"array","required":false,"description":"KOMEHYO's own product grade. Pass the key below, KOMEHYO's own numeric code 1-6, or its own Japanese label — comma-separated = OR. KOMEHYO grades every item itself; the grade IS the product. Note the site prints the same label with a fullwidth OR an ASCII letter (中古品Ａ / 中古品A); both are accepted and everything returned is folded to the ASCII form.","on_invalid":"reject","allowed_values":[{"value":"new","label":"新品 (KOMEHYO grade code 1, rank 6/6)"},{"value":"unused","label":"未使用品 (KOMEHYO grade code 2, rank 5/6)"},{"value":"used_s","label":"中古品S (KOMEHYO grade code 3, rank 4/6)"},{"value":"used_a","label":"中古品A (KOMEHYO grade code 4, rank 3/6)"},{"value":"used_b","label":"中古品B (KOMEHYO grade code 5, rank 2/6)"},{"value":"used_c","label":"中古品C (KOMEHYO grade code 6, rank 1/6)"}],"example":"used_a","value_pattern":"[1-6]|[^,]+","aliases":["grade","rank"]},{"name":"gender","type":"enum","required":false,"description":"KOMEHYO's own gender index (性別). Measured: `mens` → 47,127 items.","on_invalid":"reject","allowed_values":[{"value":"mens","label":"メンズ"},{"value":"ladies","label":"レディース"}],"example":"ladies"},{"name":"price_band","type":"array","required":false,"description":"KOMEHYO's own price band, tax-included yen. 🔴 These five strings are the ONLY values its price filter accepts: any other range (`1000000-`, `100000-250000`) is answered with ZERO results rather than an error, which is why this engine offers no free-form min/max. To reach a price outside a band, use `sort=price_asc` / `price_desc`. Comma-separated = OR (verified: `-30000` 44,553 + `500001-` 9,801 = 54,359 together).","on_invalid":"reject","allowed_values":[{"value":"-30000","label":"¥1〜¥30,000"},{"value":"30001-100000","label":"¥30,001〜¥100,000"},{"value":"100001-250000","label":"¥100,001〜¥250,000"},{"value":"250001-500000","label":"¥250,001〜¥500,000"},{"value":"500001-","label":"¥500,001〜"}],"example":"500001-"},{"name":"discount","type":"enum","required":false,"description":"KOMEHYO's own sale index. `0` = every reduced item (7,526 measured); the others are its own off-rate buckets.","on_invalid":"reject","allowed_values":[{"value":"0","label":"セール品のすべて — every reduced item"},{"value":"-20","label":"～20％ off"},{"value":"-30","label":"～30％ off"},{"value":"30-","label":"30％～ off"}],"example":"0"},{"name":"new_arrival","type":"string","required":false,"description":"KOMEHYO's own new-arrival index: `0` = everything it currently calls new (7,362 measured), or one `YYYYMMDD` intake day — the days it offers are returned by `facets`.","on_invalid":"reject","example":"0","value_pattern":"0|\\d{8}"},{"name":"store","type":"array","required":false,"description":"KOMEHYO's own branch id — the branch physically holding the item. Comma-separated = OR. 37 branches were live on 2026-10-08; `stores` returns them with KOMEHYO's current counts.","on_invalid":"reject","allowed_values":[{"value":"1","label":"名古屋本館"},{"value":"31","label":"名古屋本店BAG＋"},{"value":"7","label":"名駅店"},{"value":"3","label":"KOMEHYO SHINJUKU WOMEN"},{"value":"4","label":"KOMEHYO SHINJUKU MEN"},{"value":"5","label":"KOMEHYO SHINJUKU"},{"value":"29","label":"KOMEHYO SHIBUYA"},{"value":"6","label":"KOMEHYO GINZA"},{"value":"38","label":"KOMEHYO GINZA PLUS"},{"value":"36","label":"GINZA SNEAKER MARKET"},{"value":"35","label":"KOMEHYO VINTAGE TOKYO"},{"value":"40","label":"【新店】KOMEHYO VINTAGE TOKYO atelier"},{"value":"39","label":"【新店】KOMEHYO YOKOHAMA"},{"value":"37","label":"【新店】KOMEHYO OSAKA SHINSAIBASHI"},{"value":"10","label":"心斎橋店"},{"value":"8","label":"梅田店"},{"value":"11","label":"神戸三宮店"},{"value":"30","label":"日本橋店"},{"value":"9","label":"青山店"},{"value":"34","label":"新宿南口店"},{"value":"12","label":"大宮東口店"},{"value":"13","label":"柏東口店"},{"value":"14","label":"町田店"},{"value":"15","label":"自由が丘店"},{"value":"32","label":"二子玉川ライズ・オークモール店"},{"value":"20","label":"きもの館"},{"value":"21","label":"日進竹の山店"},{"value":"22","label":"植田山店"},{"value":"23","label":"鎌倉台店"},{"value":"24","label":"春日井柏原店"},{"value":"27","label":"稲沢店"},{"value":"33","label":"ららぽーと愛知東郷店"},{"value":"17","label":"あべの店"},{"value":"16","label":"京都新京極店"},{"value":"18","label":"広島本通店"},{"value":"41","label":"【新店】KOMEHYO FUKUOKA TENJIN"},{"value":"19","label":"天神店"}],"example":"29","value_pattern":"\\d{1,3}","aliases":["store_id"]},{"name":"rare","type":"boolean","required":false,"description":"Only items KOMEHYO itself flags レア商品 (rare). Measured: 196 items in the whole catalogue.","on_invalid":"reject","example":true},{"name":"vintage","type":"boolean","required":false,"description":"Only items KOMEHYO itself flags ヴィンテージ商品 (vintage). Measured: 3,181 items.","on_invalid":"reject","example":true},{"name":"include_store_stock","type":"boolean","required":false,"description":"Include stock that exists in a branch but is NOT buyable online. Default false = online stock only. Measured 2026-10-08: 154,594 online, 169,742 with branch stock — 15,148 extra items.","on_invalid":"reject","default":false,"example":true},{"name":"lang","type":"enum","required":false,"description":"Which of KOMEHYO's own language surfaces to read. `ja` (default) is its source text. The others are KOMEHYO's OWN server-side translation of the same page — machine translation, declared as such in `meta.translation` — and cost no extra request; the Japanese original comes back alongside in the `*_ja` fields. Nothing is translated by this API.","on_invalid":"reject","allowed_values":[{"value":"ja","label":"日本語 — KOMEHYO's own source text"},{"value":"en","label":"English — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHT","label":"繁體中文 — KOMEHYO's own published translation (machine translation)"},{"value":"zh-CHS","label":"简体中文 — KOMEHYO's own published translation (machine translation)"}],"default":"ja","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"No effect on this engine: KOMEHYO is the seller of every item it lists, so there is no third-party merchant and no personal data on this surface. Accepted for gateway uniformity.","on_invalid":"reject","default":false,"example":false}],"returns":"stores[]{store_id, name, online_items, published_name} + meta{total_results, scope}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"ROLEX"}},{"name":"suggest","description":"KOMEHYO's own autocomplete: turn a half-typed word into the real search terms, brand slugs and categories KOMEHYO carries. One tiny request (under 450 bytes measured), meant to be called before `search` so a keyword lands on something real. ⚠️ KOMEHYO's own widget decorates these suggestions with counts generated by `Math.random()` in its front-end; those are not data and are not returned.","required_params":["query"],"optional_params":["include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"A part of what the shopper is typing. Japanese or latin; `rolex` and `ROLEX` return the same thing. A term with no match returns empty lists, not an error.","on_invalid":"reject","example":"ROLEX","aliases":["q"]},{"name":"include_pii","type":"boolean","required":false,"description":"No effect on this engine: KOMEHYO is the seller of every item it lists, so there is no third-party merchant and no personal data on this surface. Accepted for gateway uniformity.","on_invalid":"reject","default":false,"example":false}],"returns":"suggestions{keywords[]{term, query}, brands[]{name, brand_slug, url}, categories[]{name, slug, url}} + meta{query}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ROLEX"}}]},{"name":"konga","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Konga API — Nigerian marketplace prices in naira, previous price and discount, stock and units sold, marketplace sellers with ratings, delivery options, reviews and the category tree","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/konga/v1","spec_available":true,"actions":[{"name":"search","description":"Search Konga (konga.com, Nigeria) by keyword and/or category, brand or seller, with price range (on the selling price), minimum rating, free shipping, pay on delivery, pickup, express delivery and fulfilled-by-Konga / by-vendor filters, sorted by relevance or price. Each row: product id, title, brand, URL, image, price in NGN, previous price and discount when the product is reduced, stock and units sold, seller id and name, rating and review count, delivery flags. Plus the source's own exact total. One of `query`, `category_id`, `brand` or `seller_id` is required.","required_params":[],"optional_params":["query","category_id","brand","seller_id","min_price","max_price","min_rating","free_shipping","pay_on_delivery","pickup","express_delivery","fulfilled_by","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Search words, as typed in Konga's search box.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"category_id","type":"string","required":false,"description":"Konga category id (digits) — from the `categories` action, a product's `categories`, or the number at the end of a konga.com/category/... URL. Includes every sub-category.","on_invalid":"reject","example":"7541","aliases":["category","cat"]},{"name":"brand","type":"string","required":false,"description":"Brand name as Konga writes it (e.g. Samsung, Apple, Infinix).","on_invalid":"reject","example":"Samsung"},{"name":"seller_id","type":"string","required":false,"description":"Only this marketplace seller's products (the `seller.id` of a row, or the number in konga.com/merchant/<id>).","on_invalid":"reject","example":"230034","aliases":["seller","merchant_id"]},{"name":"min_price","type":"number","required":false,"description":"Lowest selling price in NGN.","on_invalid":"reject","example":100000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest selling price in NGN.","on_invalid":"reject","example":500000,"minimum":0,"aliases":["price_max"]},{"name":"min_rating","type":"number","required":false,"description":"Only products rated at least this (1-5).","on_invalid":"reject","example":4,"minimum":1,"maximum":5},{"name":"free_shipping","type":"boolean","required":false,"description":"true = only products with free shipping.","on_invalid":"reject","example":true},{"name":"pay_on_delivery","type":"boolean","required":false,"description":"true = only products that can be paid for on delivery.","on_invalid":"reject","example":true},{"name":"pickup","type":"boolean","required":false,"description":"true = only products that can be collected at a pickup point.","on_invalid":"reject","example":true},{"name":"express_delivery","type":"boolean","required":false,"description":"true = only products with express (same-day, KongaNow) delivery.","on_invalid":"reject","example":true},{"name":"fulfilled_by","type":"enum","required":false,"description":"konga = only products stocked and shipped by Konga; vendor = shipped by the marketplace seller.","on_invalid":"reject","allowed_values":[{"value":"konga","label":"Fulfilled by Konga (Konga warehouse)"},{"value":"vendor","label":"Shipped by the seller"}],"example":"konga"},{"name":"sort","type":"enum","required":false,"description":"Order of results (price = selling price).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, starting at 1.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100; the site uses 40).","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"results[]{product_id, title, brand, url, image, currency, price, price_before_discount, discount_percent, deal_price, in_stock, stock_quantity, quantity_sold, seller{id, name, url}, rating, review_count, rating_scale, fulfilled_by, free_shipping, pay_on_delivery, pickup_available, express_delivery, official_store, non_returnable, product_type, variant_count, primary_category_id, category_ids} + total, page, page_size, last_page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone"}},{"name":"product","description":"Full record of one Konga product: title, brand, description, images, selling price in NGN, previous price and discount, stock, units sold, order limits, seller with its sales and ratings, fulfilled by Konga or the vendor, free shipping / pay on delivery / pickup / express delivery, warranty, rating histogram, review count, specifications by group, categories, variants (size / colour) each with its own price and stock.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"Konga product id exactly as a search row returns it in `product_id` (digits; also the number at the end of the product URL). A konga.com product URL is accepted too.","on_invalid":"reject","example":"6060300","aliases":["id","sku","url","product_url"]}],"returns":"{…every search row field, description, short_description, images[], rating_histogram[], rating_percent, min_order_quantity, backorders, weight, warranty{has_warranty, period, text}, after_sales_service, installments_available, categories[]{id, name, url}, specifications[]{group, name, value}, variant_options[]{code, label, values}, variants[]{variant_id, options, price, price_before_discount, discount_percent, in_stock, stock_quantity, backorders, image}, available_regions, seller{…, units_sold, rating, rating_count, delivery_percent, rating_histogram}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"7014687"}},{"name":"reviews","description":"Customer reviews of one Konga product: average rating, review count, the 5-to-1 star histogram and every review the product carries (star rating, comment when written, reviewer display name, date, seller), newest first.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"Konga product id exactly as a search row returns it in `product_id` (digits; also the number at the end of the product URL). A konga.com product URL is accepted too.","on_invalid":"reject","example":"6060300","aliases":["id","sku","url","product_url"]}],"returns":"{product_id, title, url, rating, rating_scale, review_count, rating_histogram[], reviews[]{rating, communication_rating, comment, author, author_id, date, seller_id, source}, reviews_returned, with_comment}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"7014687"}},{"name":"seller","description":"A Konga marketplace seller's store: name, city and state, official-store flag, how long it has sold on Konga, units sold, delivered orders and delivery score, quality and communication ratings, plus one page of the seller's products (same row shape as search) and the seller's exact product count.","required_params":["seller_id"],"optional_params":[],"params":[{"name":"seller_id","type":"string","required":true,"description":"Seller id (a search row's `seller.id`, or the number in konga.com/merchant/<id>). A merchant URL is accepted too.","on_invalid":"reject","example":"230034","aliases":["seller","merchant_id","id","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, starting at 1.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100; the site uses 40).","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"{seller{seller_id, name, url_key, url, logo, banner, city, state, official_store, premium, konga_merchant, selling_on_konga_for, units_sold, delivered_orders, delivery_percent, rating, rating_count, rating_percent, communication_rating, communication_rating_count, total_ratings}, results[] (search rows), total, page, page_size, last_page, has_more}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"230034"}},{"name":"categories","description":"Konga's category tree as the site's menu publishes it: category id, name, URL, parent id and depth (three levels). The ids work in search `category_id`.","required_params":[],"optional_params":["parent_id"],"params":[{"name":"parent_id","type":"string","required":false,"description":"Only the direct children of this category id.","on_invalid":"reject","example":"5294","aliases":["parent"]}],"returns":"categories[]{category_id, name, url, parent_id, depth, active} + total","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"parent_id":"5294"}}]},{"name":"kream","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"KREAM API scraper — KREAM (kream.co.kr), South Korea's sneaker and streetwear resale market: search products, read the live market (lowest ask, highest bid, last trade, premium over release price) overall and per size with fast-delivery prices apart, recent trades, price charts, categories. Prices in KRW. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/kream/v1","spec_available":true,"actions":[{"name":"search","description":"Search KREAM by keyword. Each product comes with its immediate-buy price (lowest ask), its discount against the release price, English and Korean names, brand, style code, category, fast-delivery availability and wish / review / trade counts. Sort by popularity, price, premium, wishes, reviews or release date and filter by brand, category, gender, shoe or clothing size, price range, delivery type and below-release-price. KREAM DRAW entries are removed unless you ask for them.","required_params":["query"],"optional_params":["page","sort","category_id","brand","gender","shoe_size","clothing_size","price_min","price_max","delivery","hide_sold_out","below_release_price","include_draws","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed on kream.co.kr: a brand, a model, a style code ('DD1391-100') or Korean text ('나이키'). KREAM corrects misspellings on its own — read `query_used` and `corrected`.","on_invalid":"reject","example":"nike","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. KREAM returns 50 products per page; `has_more` says whether another page exists. Measured on 'nike' (42,489 results): pages 1-500 all distinct, page 999 empty.","on_invalid":"ignore","default":1,"minimum":1,"maximum":1000},{"name":"sort","type":"enum","required":false,"description":"Result order. `sort_applied` is KREAM's own confirmation of the order used.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"KREAM's default order (추천순)"},{"value":"popular","label":"Most sold (인기순)"},{"value":"popular_men","label":"Most popular with men"},{"value":"popular_women","label":"Most popular with women"},{"value":"premium_desc","label":"Highest price over release price first"},{"value":"premium_asc","label":"Lowest price over release price first"},{"value":"lowest_ask","label":"Lowest immediate-buy price first"},{"value":"highest_bid","label":"Highest immediate-sell price first"},{"value":"most_wished","label":"Most wish-listed first"},{"value":"most_reviewed","label":"Most reviewed first"},{"value":"newest_release","label":"Newest release date first (upcoming releases included)"}]},{"name":"category_id","type":"array","required":false,"description":"Only these KREAM categories — ids from `categories` (1 = sneakers, 34 = all shoes). Several ids are OR-ed.","on_invalid":"reject","example":["1"],"aliases":["category_ids"]},{"name":"brand","type":"array","required":false,"description":"Only these brands, by KREAM's English brand name ('Nike', 'New Balance', 'Jordan'). Several brands are OR-ed.","on_invalid":"reject","example":["New Balance"],"aliases":["brands","brand_name"]},{"name":"gender","type":"enum","required":false,"description":"Only products for this gender.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Men"},{"value":"women","label":"Women"},{"value":"kids","label":"Kids"}]},{"name":"shoe_size","type":"array","required":false,"description":"Only products with this shoe size in stock, in millimetres as KREAM lists them ('250', '270'). Prices on the rows become that size's prices.","on_invalid":"reject","example":["270"]},{"name":"clothing_size","type":"array","required":false,"description":"Only products with this clothing size ('S', 'M', 'L', 'XL', or a waist size such as '30'). Prices on the rows become that size's prices.","on_invalid":"reject","example":["M"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in KRW (inclusive). KREAM keeps a product when ANY of its sizes is priced in the range, so a row's `price` (the overall lowest ask) can fall outside it.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in KRW (inclusive). Same any-size rule as price_min.","on_invalid":"reject","minimum":0},{"name":"delivery","type":"array","required":false,"description":"Only products available with this delivery: fast (KREAM warehouse stock), fast_95 (warehouse stock with a minor box/condition note), normal (seller ships through inspection), overseas, brand (sent by the brand), free_shipping, warehouse_storage.","on_invalid":"reject","example":["fast"]},{"name":"hide_sold_out","type":"boolean","required":false,"description":"true hides products with no immediate-buy offer.","on_invalid":"ignore","default":false},{"name":"below_release_price","type":"boolean","required":false,"description":"true keeps only products currently priced below their release price (정가이하).","on_invalid":"ignore","default":false},{"name":"include_draws","type":"boolean","required":false,"description":"KREAM DRAW entries appear among products with a 100 KRW entry fee as their price. false (default) drops them and counts them in `draws_dropped`; true keeps them flagged `listing_type: draw`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string), url, name (English), name_ko, name_tag (bracketed tag KREAM puts before some names: a coupon or refurbished grade), brand{id,name}, style_code, style_codes[], category{id, path[]}, listing_type ('resale' | 'brand_store' | 'draw'), product_type, image, price (number, KRW: the immediate-buy price = lowest ask for resale; the fixed price for brand-store rows; null when nobody is selling), price_display, price_type ('lowest_ask' | 'brand_store_price' | 'draw_entry_fee'), currency=KRW, pre_coupon_price (brand-store rows showing a KREAM coupon: the price before it — `price` is after the coupon), coupon_applied, discount_percent (KREAM's percentage below the release price, or below the list price on brand-store rows), discount_basis ('release_price' | 'list_price'), fast_delivery, sold_out_temporarily, upcoming_release_date, wish_count_approx / wish_count_display, review_count_approx / review_count_display, trade_count_approx / trade_count_display (KREAM abbreviates these on cards: '23.4만' ≈ 234,000), badges[], rating / rating_scale (null)}, count, total_results, page, page_size (50), has_more, next_page, draws_dropped, sort_applied (KREAM's own echo), query_used (the query KREAM actually searched), corrected, correction_type, rows_matching_query_words, query","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"nike"}},{"name":"product/detail","description":"The full KREAM product by `product_id` (or URL): English and Korean names, brand, style code, colorway, release price and date, every image, and the live market — lowest ask, highest bid, last trade and its change, total trades, premium over the release price, last trade per delivery channel — plus every size with its own lowest ask, highest bid and normal / fast / 95점 fast-delivery asks, the 5 most recent trades, the 5 best asks and bids, wish and review counts and delivery options. Brand-store listings return their fixed price, list price and discount instead.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"KREAM product id (the number in kream.co.kr/products/12831, returned by every search row), or the product URL.","on_invalid":"reject","example":"12831","aliases":["id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, url, name, name_ko, name_tag, listing_type ('resale' | 'brand_store'), brand{id, name, name_ko, type, saved_count}, style_code, style_codes[], colorway, gender, category, shop_category{id, path[]}, release_price, release_price_display, release_date, listed_at (brand-store only), image, images[], price (lowest ask; brand-store price), price_display, price_type, currency=KRW, original_price (brand-store list price, else null), discount_percent (brand-store only), price_label, in_stock, is_tradable, is_active, allowed_transactions[], market{lowest_ask, lowest_ask_display, highest_bid, highest_bid_display, last_sale_price, last_sale_change, last_sale_change_percent, total_sales, price_premium (lowest ask minus release price), price_premium_percent, fast_delivery_available, last_sale_by_channel{normal_delivery, fast_delivery, fast_delivery_95, overseas_delivery, verified_fast, integrated_inventory}{price, change, change_percent}} (null on brand-store), brand_store_sale{price, price_display, list_price, discount_percent, status, status_display, stock_quantity, store_name, store_url} (null on resale), size_count, sizes[]{size, option_key, lowest_ask, highest_bid, lowest_ask_normal_delivery, lowest_ask_fast_delivery, lowest_ask_fast_delivery_95}, recent_sales[]{price, size, fast_delivery, traded_at} (5), top_asks[]{price, size, fast_delivery, quantity} (5), top_bids[] (5), wish_count, review_count, rating / rating_scale (null), delivery_options[]{method, label, fee, note, description, applies_to[]}, notice{title, description}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"12831"}},{"name":"product/price_history","description":"KREAM's price chart for a product over 1 month, 3 months, 6 months, 1 year or all time — for all sizes or for one size — as dated points with the first, last, lowest and highest price in the period.","required_params":["product_id"],"optional_params":["size","period","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"KREAM product id (the number in kream.co.kr/products/12831, returned by every search row), or the product URL.","on_invalid":"reject","example":"12831","aliases":["id","url"]},{"name":"size","type":"string","required":false,"description":"Optional: one size exactly as `product/detail` lists it in `sizes[].size` ('270', 'M', 'ONE SIZE'). Leave empty for the all-sizes chart.","on_invalid":"reject","example":"270","aliases":["option"]},{"name":"period","type":"enum","required":false,"description":"Chart span. Each span is KREAM's own series; spans are not merged.","on_invalid":"reject","allowed_values":[{"value":"1m","label":"Last month"},{"value":"3m","label":"Last 3 months"},{"value":"6m","label":"Last 6 months"},{"value":"1y","label":"Last year"},{"value":"all","label":"Since the first trade"}],"default":"1y"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product_id, name, size (null = all sizes), option_key, period, points[]{date, price}, points_count, empty_days_dropped, first_date, last_date, first_price, last_price, min_price, max_price, currency=KRW, market{lowest_ask, highest_bid, last_sale_price} (for that size when a size is given)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"12831","period":"1m"}},{"name":"category","description":"Every product in one KREAM category, paged, with the same rows, sorts and filters as search. Category ids come from `categories`.","required_params":["category_id"],"optional_params":["page","sort","brand","gender","shoe_size","clothing_size","price_min","price_max","delivery","hide_sold_out","below_release_price","include_draws","max_rotations"],"params":[{"name":"category_id","type":"string","required":true,"description":"A KREAM category id from `categories` (level-1 ids such as 34 = shoes, or level-2 ids such as 1 = sneakers).","on_invalid":"reject","example":"1","aliases":["category"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. KREAM returns 50 products per page; `has_more` says whether another page exists. Measured on 'nike' (42,489 results): pages 1-500 all distinct, page 999 empty.","on_invalid":"ignore","default":1,"minimum":1,"maximum":1000},{"name":"sort","type":"enum","required":false,"description":"Result order. `sort_applied` is KREAM's own confirmation of the order used.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"KREAM's default order (추천순)"},{"value":"popular","label":"Most sold (인기순)"},{"value":"popular_men","label":"Most popular with men"},{"value":"popular_women","label":"Most popular with women"},{"value":"premium_desc","label":"Highest price over release price first"},{"value":"premium_asc","label":"Lowest price over release price first"},{"value":"lowest_ask","label":"Lowest immediate-buy price first"},{"value":"highest_bid","label":"Highest immediate-sell price first"},{"value":"most_wished","label":"Most wish-listed first"},{"value":"most_reviewed","label":"Most reviewed first"},{"value":"newest_release","label":"Newest release date first (upcoming releases included)"}]},{"name":"brand","type":"array","required":false,"description":"Only these brands, by KREAM's English brand name ('Nike', 'New Balance', 'Jordan'). Several brands are OR-ed.","on_invalid":"reject","example":["New Balance"],"aliases":["brands","brand_name"]},{"name":"gender","type":"enum","required":false,"description":"Only products for this gender.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Men"},{"value":"women","label":"Women"},{"value":"kids","label":"Kids"}]},{"name":"shoe_size","type":"array","required":false,"description":"Only products with this shoe size in stock, in millimetres as KREAM lists them ('250', '270'). Prices on the rows become that size's prices.","on_invalid":"reject","example":["270"]},{"name":"clothing_size","type":"array","required":false,"description":"Only products with this clothing size ('S', 'M', 'L', 'XL', or a waist size such as '30'). Prices on the rows become that size's prices.","on_invalid":"reject","example":["M"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in KRW (inclusive). KREAM keeps a product when ANY of its sizes is priced in the range, so a row's `price` (the overall lowest ask) can fall outside it.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in KRW (inclusive). Same any-size rule as price_min.","on_invalid":"reject","minimum":0},{"name":"delivery","type":"array","required":false,"description":"Only products available with this delivery: fast (KREAM warehouse stock), fast_95 (warehouse stock with a minor box/condition note), normal (seller ships through inspection), overseas, brand (sent by the brand), free_shipping, warehouse_storage.","on_invalid":"reject","example":["fast"]},{"name":"hide_sold_out","type":"boolean","required":false,"description":"true hides products with no immediate-buy offer.","on_invalid":"ignore","default":false},{"name":"below_release_price","type":"boolean","required":false,"description":"true keeps only products currently priced below their release price (정가이하).","on_invalid":"ignore","default":false},{"name":"include_draws","type":"boolean","required":false,"description":"KREAM DRAW entries appear among products with a 100 KRW entry fee as their price. false (default) drops them and counts them in `draws_dropped`; true keeps them flagged `listing_type: draw`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string), url, name (English), name_ko, name_tag (bracketed tag KREAM puts before some names: a coupon or refurbished grade), brand{id,name}, style_code, style_codes[], category{id, path[]}, listing_type ('resale' | 'brand_store' | 'draw'), product_type, image, price (number, KRW: the immediate-buy price = lowest ask for resale; the fixed price for brand-store rows; null when nobody is selling), price_display, price_type ('lowest_ask' | 'brand_store_price' | 'draw_entry_fee'), currency=KRW, pre_coupon_price (brand-store rows showing a KREAM coupon: the price before it — `price` is after the coupon), coupon_applied, discount_percent (KREAM's percentage below the release price, or below the list price on brand-store rows), discount_basis ('release_price' | 'list_price'), fast_delivery, sold_out_temporarily, upcoming_release_date, wish_count_approx / wish_count_display, review_count_approx / review_count_display, trade_count_approx / trade_count_display (KREAM abbreviates these on cards: '23.4만' ≈ 234,000), badges[], rating / rating_scale (null)}, count, total_results, page, page_size (50), has_more, next_page, draws_dropped, sort_applied (KREAM's own echo), query_used (the query KREAM actually searched), corrected, correction_type, rows_matching_query_words, category_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"1"}},{"name":"categories","description":"KREAM's category tree: the top-level categories, or the sub-categories of one of them, with the `category_id` to pass to `category` or to search's category filter.","required_params":[],"optional_params":["parent","max_rotations"],"params":[{"name":"parent","type":"string","required":false,"description":"Optional: a level-1 `key` (or its `category_id`) from `categories` to list its sub-categories. Leave empty for the top level.","on_invalid":"reject","example":"44","aliases":["parent_key"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"categories[]{name (Korean, as KREAM names it), key, category_id, level}, count, parent","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"parent":"44"}}]},{"name":"krisha","category":{"id":"real-estate","title":"Real Estate"},"title":"Krisha.kz — Kazakhstan property listings and full detail","version":"1.0.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/krisha/v1","spec_available":true,"actions":[{"name":"search","description":"Search public Kazakhstan property sale/rental inventory, preserving source totals and pagination limits.","required_params":[],"optional_params":["mode","property_type","rent_period","city","rooms","price_min","price_max","area_min","area_max","query","owner_only","has_photo","sort","page"],"params":[{"name":"mode","type":"enum","required":false,"description":"Sale or rental inventory; prices retain their source monetary basis.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"sale"},{"value":"rent","label":"rent"}],"default":"sale","example":"sale"},{"name":"property_type","type":"enum","required":false,"description":"Apartments, houses/dachas, or commercial property.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"apartment"},{"value":"house","label":"house"},{"value":"commercial","label":"commercial"}],"default":"apartment","example":"apartment"},{"name":"rent_period","type":"enum","required":false,"description":"Rent only: monthly, daily or hourly apartments; houses support month/day; commercial month.","on_invalid":"reject","allowed_values":[{"value":"month","label":"month"},{"value":"day","label":"day"},{"value":"hour","label":"hour"}],"example":"month"},{"name":"city","type":"string","required":false,"description":"City or region URL slug used by Krisha, for example almaty, astana, or shymkent.","on_invalid":"reject","example":"almaty","aliases":["location"]},{"name":"rooms","type":"string","required":false,"description":"Apartment rooms: 1, 2, 3, 4, 5+. House rooms: 1 through 9 or 10+. Not commercial.","on_invalid":"reject","example":"2"},{"name":"price_min","type":"number","required":false,"description":"Minimum source asking price in tenge, using the chosen sale/rental basis.","on_invalid":"reject","example":20000000,"minimum":0,"maximum":1000000000000},{"name":"price_max","type":"number","required":false,"description":"Maximum source asking price in tenge; rent is not converted to an annual price.","on_invalid":"reject","example":40000000,"minimum":0,"maximum":1000000000000},{"name":"area_min","type":"number","required":false,"description":"Minimum property floor area in square metres.","on_invalid":"reject","example":40,"minimum":0,"maximum":1000000000000},{"name":"area_max","type":"number","required":false,"description":"Maximum property floor area in square metres; not land plot area.","on_invalid":"reject","example":80,"minimum":0,"maximum":1000000000000},{"name":"query","type":"string","required":false,"description":"Source free-text title/description search, at most 200 characters.","on_invalid":"reject","example":"ремонт","aliases":["_txt_"]},{"name":"owner_only","type":"boolean","required":false,"description":"Restrict to the source's owner listings.","on_invalid":"reject","example":true},{"name":"has_photo","type":"boolean","required":false,"description":"Restrict to listings with a photo.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Source default ordering, ascending price, or descending price.","on_invalid":"reject","allowed_values":[{"value":"default","label":"default"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"default","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"One source page. The source declares at most 1000 accessible pages; page size varies.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"listings with source id, canonical URL, title, KZT price and basis, rooms, floor area, city/address, preview, photo, source date text; source total, page, last_page and has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"mode":"sale","property_type":"apartment","city":"almaty","page":1}},{"name":"listing","description":"Full public listing detail; supply listing_id or url returned by search.","required_params":[],"optional_params":["listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Public source listing id; required unless url is provided.","on_invalid":"reject","example":"1012574406","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Public Krisha listing URL; required unless listing_id is provided.","on_invalid":"reject","example":"https://krisha.kz/a/show/1012574406"}],"returns":"Full listing with price/currency/basis and per-m² offer, rooms/areas/units, public coordinates and map-centre disagreement, all source attribute pairs, full description, all published photos, source listing status and public seller block. A view-counter date is not a listing publication timestamp.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://krisha.kz/a/show/1012574406"}}]},{"name":"kroger","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Kroger API — store-level shelf prices, sale and multi-buy deals, stock, aisle and full product data (nutrition, UPC) for Kroger and its 18 banners","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kroger/v1","spec_available":true,"actions":[{"name":"stores","description":"Kroger-family stores near a US ZIP code (up to 50, nearest first) or one store by location_id: the location_id the price actions take, banner (Kroger, Ralphs, Fred Meyer, King Soopers, Fry's, Smith's, QFC, Harris Teeter, ...), address, coordinates, phone, distance, ways to shop (in store / pickup / delivery), opening hours, departments. Fuel centers are excluded unless include_fuel=true. `zip` or `location_id` is required.","required_params":[],"optional_params":["zip","location_id","banner","include_fuel"],"params":[{"name":"zip","type":"string","required":false,"description":"US 5-digit ZIP code; stores are returned nearest first (the source returns up to 50 locations per ZIP, fuel centers included).","on_invalid":"reject","example":"45202","aliases":["zip_code","postal_code","zipcode"]},{"name":"location_id","type":"string","required":false,"description":"Look up ONE store by its 8-digit location id instead of a ZIP.","on_invalid":"reject","example":"01400929","aliases":["store_id","locationId","store"]},{"name":"banner","type":"enum","required":false,"description":"With `zip`: pick the nearest store of this banner. With `stores`: only this banner's stores.","on_invalid":"reject","allowed_values":[{"value":"kroger","label":"Kroger"},{"value":"ralphs","label":"Ralphs"},{"value":"frysfood","label":"Fry's"},{"value":"kingsoopers","label":"King Soopers"},{"value":"fredmeyer","label":"Fred Meyer"},{"value":"smithsfoodanddrug","label":"Smith's"},{"value":"qfc","label":"QFC"},{"value":"harristeeter","label":"Harris Teeter"},{"value":"dillons","label":"Dillons"},{"value":"bakersplus","label":"Baker's"},{"value":"citymarket","label":"City Market"},{"value":"gerbes","label":"Gerbes"},{"value":"jaycfoods","label":"JayC"},{"value":"payless","label":"Pay Less"},{"value":"marianos","label":"Mariano's"},{"value":"metromarket","label":"Metro Market"},{"value":"picknsave","label":"Pick 'n Save"},{"value":"foodsco","label":"Foods Co"},{"value":"food4less","label":"Food 4 Less"}]},{"name":"include_fuel","type":"boolean","required":false,"description":"Also return fuel-center locations (they have no grocery prices).","on_invalid":"reject","default":false}],"returns":"stores[]{location_id, store_number, banner, banner_name, name, legal_name, address{lines[], city, state, postal_code, country}, lat, lng, phone, distance_miles, store_type, is_fuel_center, ways_to_shop[], supported (true = usable with search/product), is_open, open_text, open_24h, hours[]{days, hours}, departments[], division} + total, fuel_centers_excluded","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"zip":"45202"}},{"name":"search","description":"Search one Kroger-family store's catalogue: the first 24 results for `query`, priced AT THAT STORE. Each row: UPC, GTIN-14, title, brand, size, department, regular price, sale price + end date, multi-buy deal (e.g. 10 For $12.00), unit price per oz/lb/count, price tag type, the store's sellable stock count and stock level, aisle and shelf, ways to shop (in store / pickup / delivery / ship), SNAP eligibility, rating, dietary tags, sponsored flag. Filters: brand, on_sale, nutrition. `query` and (`location_id` or `zip`) are required.","required_params":["query"],"optional_params":["location_id","zip","banner","brand","on_sale","nutrition"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the Kroger search box (e.g. milk, greek yogurt, coffee).","on_invalid":"reject","example":"milk","aliases":["q","keyword","search"]},{"name":"location_id","type":"string","required":false,"description":"The store's 8-digit Kroger location id (from the `stores` action, e.g. 01400929 = Kroger University Plaza, Cincinnati). Prices, stock and aisle are this store's. Any Kroger-family banner works (Ralphs, Fred Meyer, King Soopers, ...). `location_id` or `zip` is required.","on_invalid":"reject","example":"01400929","aliases":["store_id","locationId","store"]},{"name":"zip","type":"string","required":false,"description":"US 5-digit ZIP. Used only when `location_id` is not given: the nearest grocery store to that ZIP (of `banner`, if given) is used and returned in `store`.","on_invalid":"reject","example":"45202","aliases":["zip_code","postal_code","zipcode"]},{"name":"banner","type":"enum","required":false,"description":"With `zip`: pick the nearest store of this banner. With `stores`: only this banner's stores.","on_invalid":"reject","allowed_values":[{"value":"kroger","label":"Kroger"},{"value":"ralphs","label":"Ralphs"},{"value":"frysfood","label":"Fry's"},{"value":"kingsoopers","label":"King Soopers"},{"value":"fredmeyer","label":"Fred Meyer"},{"value":"smithsfoodanddrug","label":"Smith's"},{"value":"qfc","label":"QFC"},{"value":"harristeeter","label":"Harris Teeter"},{"value":"dillons","label":"Dillons"},{"value":"bakersplus","label":"Baker's"},{"value":"citymarket","label":"City Market"},{"value":"gerbes","label":"Gerbes"},{"value":"jaycfoods","label":"JayC"},{"value":"payless","label":"Pay Less"},{"value":"marianos","label":"Mariano's"},{"value":"metromarket","label":"Metro Market"},{"value":"picknsave","label":"Pick 'n Save"},{"value":"foodsco","label":"Foods Co"},{"value":"food4less","label":"Food 4 Less"}]},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled exactly as in a row's `brand` (case-sensitive at the source: 'Kroger' matches 66 milk products, 'kroger' none). One brand per call.","on_invalid":"reject","example":"Kroger","aliases":["brand_name","brandName"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only products with a current sale or deal at the store (milk at one store: 929 -> 351).","on_invalid":"reject","default":false,"aliases":["sale","savings","deals"]},{"name":"nutrition","type":"enum","required":false,"description":"Only products carrying this dietary / nutrition tag.","on_invalid":"reject","allowed_values":[{"value":"organic","label":"Organic"},{"value":"gluten_free","label":"Gluten Free"},{"value":"kosher","label":"Kosher"},{"value":"vegan","label":"Vegan"},{"value":"vegetarian","label":"Vegetarian"},{"value":"lactose_free","label":"Lactose Free"},{"value":"low_sodium","label":"Low Sodium"},{"value":"sugar_free","label":"Sugar Free"},{"value":"pescatarian","label":"Pescatarian"}],"aliases":["dietary","diet"]}],"returns":"store{location_id, banner, name, address, ...}, total (the source's own count; capped at 1000), total_is_capped, returned, sponsored_count, results[]{upc, gtin14, title, brand, size, url, image, department, category, subcategory, categories[], regular_price, sale_price, on_sale, discount_pct, price_tag, price_text, regular_price_text, sale_ends_at, multibuy{quantity, total, per_unit, must_buy, text}, regular_unit_price{amount_cents, unit, display}, sale_unit_price, sold_by, seller_name, currency, available_to_sell, stock_level, aisle{description, number, side, bay, shelf, position_in_bay, facings}, ways_to_shop{in_store, pickup, delivery, ship}, snap_eligible, rating, review_count, dietary[], nutritional_claims[], sponsored, rank}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","location_id":"01400929"}},{"name":"product","description":"One product at one Kroger-family store by UPC: everything in a search row (store price, sale, multi-buy, unit price, stock count, stock level) plus every aisle location, the per-way fulfillment summary (in store / pickup / delivery with max order quantity), full nutrition panel (serving size, nutrients, ingredients, allergens), marketing description, country of origin, weight, dimensions, all images, rating breakdown and restriction flags. `upc` (or a product `url`) and (`location_id` or `zip`) are required.","required_params":[],"optional_params":["upc","url","location_id","zip","banner"],"params":[{"name":"upc","type":"string","required":false,"description":"Kroger's 13-digit UPC exactly as search rows return it (0001111041700). A printed 12-digit UPC-A or a 14-digit GTIN with a valid check digit is converted.","on_invalid":"reject","example":"0001111041700","aliases":["gtin","product_id","id"]},{"name":"url","type":"string","required":false,"description":"A Kroger-family product page URL (/p/<slug>/<upc>).","on_invalid":"reject","example":"https://www.kroger.com/p/kroger-2-reduced-fat-milk/0001111041700","aliases":["product_url"]},{"name":"location_id","type":"string","required":false,"description":"The store's 8-digit Kroger location id (from the `stores` action, e.g. 01400929 = Kroger University Plaza, Cincinnati). Prices, stock and aisle are this store's. Any Kroger-family banner works (Ralphs, Fred Meyer, King Soopers, ...). `location_id` or `zip` is required.","on_invalid":"reject","example":"01400929","aliases":["store_id","locationId","store"]},{"name":"zip","type":"string","required":false,"description":"US 5-digit ZIP. Used only when `location_id` is not given: the nearest grocery store to that ZIP (of `banner`, if given) is used and returned in `store`.","on_invalid":"reject","example":"45202","aliases":["zip_code","postal_code","zipcode"]},{"name":"banner","type":"enum","required":false,"description":"With `zip`: pick the nearest store of this banner. With `stores`: only this banner's stores.","on_invalid":"reject","allowed_values":[{"value":"kroger","label":"Kroger"},{"value":"ralphs","label":"Ralphs"},{"value":"frysfood","label":"Fry's"},{"value":"kingsoopers","label":"King Soopers"},{"value":"fredmeyer","label":"Fred Meyer"},{"value":"smithsfoodanddrug","label":"Smith's"},{"value":"qfc","label":"QFC"},{"value":"harristeeter","label":"Harris Teeter"},{"value":"dillons","label":"Dillons"},{"value":"bakersplus","label":"Baker's"},{"value":"citymarket","label":"City Market"},{"value":"gerbes","label":"Gerbes"},{"value":"jaycfoods","label":"JayC"},{"value":"payless","label":"Pay Less"},{"value":"marianos","label":"Mariano's"},{"value":"metromarket","label":"Metro Market"},{"value":"picknsave","label":"Pick 'n Save"},{"value":"foodsco","label":"Foods Co"},{"value":"food4less","label":"Food 4 Less"}]}],"returns":"store{...}, item{all search-row fields, description, receipt_description, country_of_origin, weight, dimensions{}, temperature, family_tree{}, images[]{perspective, url}, rating_breakdown{5..1}, aisles[], fulfillment[]{type, sellable, inventory_level, unavailable_message, max_order_quantity, regular_price, sale_price}, nutrition{ingredients, allergens, warning, preparation_states[]{description, serving_size, servings_per_container, facts[]{name, value, unit, daily_value_pct}}, flags{}}, alcohol, age_restricted, hazmat, prop65_warning_required, sold_in_store_only}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"upc":"0001111041700","location_id":"01400929"}}]},{"name":"kuantokusta","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"KuantoKusta API — Portugal price comparison: search, every store's offer with shipping and total, marketplace offers, lowest price, price history","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kuantokusta/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on KuantoKusta (Portugal, EUR). Each row is a product with its lowest offer price, number of offers, brand, category and whether it can be bought through KuantoKusta's checkout. Filter by price range, brand, marketplace or good-deal; sort by popularity, price, name or newest. The site's total stops at 1000 (`total_capped`); `matching_total` is its own full count. Some words are a category to the site (e.g. `berbequim`): it sends the visitor to that category listing, and so does this API (`redirected_to_category`).","required_params":["query"],"optional_params":["sort","page","price_min","price_max","brand","marketplace_only","good_deal_only"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, e.g. `iphone 17`, `frigorifico combinado`, `tv 55`.","on_invalid":"reject","example":"iphone 17","aliases":["q","keyword"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's popularity order"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"name","label":"Alphabetical"},{"value":"newest","label":"Newest first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (48 rows per page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR. The site compares the product's lowest offer price (`price_min` of the row).","on_invalid":"reject","example":300,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (same comparison).","on_invalid":"reject","example":600,"minimum":0,"aliases":["max_price"]},{"name":"marketplace_only","type":"boolean","required":false,"description":"Only products that can be bought through KuantoKusta's own checkout (\"Comprar no KuantoKusta\").","on_invalid":"reject","default":false},{"name":"good_deal_only","type":"boolean","required":false,"description":"Only products the site marks as a good buy (\"Boa compra\").","on_invalid":"reject","default":false},{"name":"brand","type":"string","required":false,"description":"Brand name as in `facets.brand[].value` (e.g. `Apple`, `Samsung`).","on_invalid":"reject","example":"Samsung"}],"returns":"results[]{row_type=product, product_id, title, brand, category, url, image, price_min (EUR), currency, offer_count, marketplace_available, split_payment, adult_only, badges[], rating_count, review_count} + count + total + total_capped + matching_total + page + pages + has_more + facets{area[], brand[], price_buckets[], price_range, purchase_options[], attributes[]} + query + sort + redirected_to_category{category_id, name, url} (set when the site treats the words as a category and sends the visitor there)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 17"}},{"name":"category","description":"One KuantoKusta category listing (e.g. 157 = Smartphones): the same product rows as search, with price range, brand (`brand_id`), feature (`feature_id`), marketplace and good-deal filters, sort and paging. Takes the numeric id or the category URL (/c/<id>/...). Parent sections (/a/<id>/...) are listed by `categories`.","required_params":["category_id"],"optional_params":["sort","page","price_min","price_max","brand_id","feature_id","marketplace_only","good_deal_only"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric leaf category id (`category.category_id` of a product, a `categories` row with is_leaf true) or a category URL.","on_invalid":"reject","example":"157","aliases":["category","url"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's popularity order"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"name","label":"Alphabetical"},{"value":"newest","label":"Newest first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (48 rows per page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR. The site compares the product's lowest offer price (`price_min` of the row).","on_invalid":"reject","example":300,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (same comparison).","on_invalid":"reject","example":600,"minimum":0,"aliases":["max_price"]},{"name":"marketplace_only","type":"boolean","required":false,"description":"Only products that can be bought through KuantoKusta's own checkout (\"Comprar no KuantoKusta\").","on_invalid":"reject","default":false},{"name":"good_deal_only","type":"boolean","required":false,"description":"Only products the site marks as a good buy (\"Boa compra\").","on_invalid":"reject","default":false},{"name":"brand_id","type":"string","required":false,"description":"Brand id from `facets.brand[].brand_id` (765 = Samsung in Smartphones).","on_invalid":"reject","example":"765"},{"name":"feature_id","type":"string","required":false,"description":"Feature value id from `facets.attributes[].values[].feature_id` (12939 = 5G in Smartphones).","on_invalid":"reject","example":"12939"}],"returns":"results[]{same row shape as search} + count + total + page + pages + has_more + facets{brand[]{brand_id}, price_buckets[], price_range, purchase_options[], attributes[]{values[]{feature_id}}} + category{category_id, name, url, category_path[]} + sort","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"157"}},{"name":"categories","description":"KuantoKusta's category tree: without `area_id` the top-level sections; with an `area_id` its children. A child with `is_leaf: true` is a category for `category`; otherwise pass its id here again.","required_params":[],"optional_params":["area_id"],"params":[{"name":"area_id","type":"string","required":false,"description":"Section id (/a/<id>/...) from a previous call or a product's `category_path`.","on_invalid":"reject","example":"155","aliases":["id","url"]}],"returns":"area{area_id, name} + categories[]{category_id, name, url, is_leaf, has_children, image, popularity_position} + popular_products[]{same row shape as search} + count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"area_id":"155"}},{"name":"product","description":"One product on KuantoKusta: title, brand, EAN and SKU codes, category path, images, description, the full spec sheet, lowest and highest price, number of offers, stores and marketplace offers, the cheapest offer, the cheapest offer with shipping, the highlighted buy-box offer, the site's 30-day average price, colour / storage variations and refurbished alternatives (each its own product id).","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id: `product_id` of a search / category row, of a variation or refurbished option, or a kuantokusta.pt product URL (/p/<id>/...).","on_invalid":"reject","example":"11928772","aliases":["id","url"]}],"returns":"product{row_type, product_id, title, brand, url, category{category_id, name}, category_path[], ean[], sku[], images[], description, specs[]{group, name, value}, price_min, price_max, currency, offer_count, store_count, marketplace_offer_count, in_stock, marketplace_available, fast_delivery_available, average_price{price, date}, store_discount, cheapest_offer, cheapest_total_offer, buy_box_offer, variations[]{feature, options[]{product_id, value, price_min, available, current, url}}, refurbished[]{grade, product_id, price_min, url}, rating_count, review_count, created_at, updated_at}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"11928772"}},{"name":"offers","description":"Every offer for one product: store (id, name, page, logo, rating count), the store's own offer title, price, previous price, shipping cost, total (price + shipping, as the site prints it), delivery window, fast / next-day delivery, islands, split payment, loyalty points, and the row type: `store` (bought on the shop's own site) or `marketplace` (bought through KuantoKusta). Featured rows and the buy box are flagged; the cheapest offer and cheapest total are computed.","required_params":["product_id"],"optional_params":["sort","offer_type"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id: `product_id` of a search / category row, of a variation or refurbished option, or a kuantokusta.pt product URL (/p/<id>/...).","on_invalid":"reject","example":"11928772","aliases":["id","url"]},{"name":"sort","type":"enum","required":false,"description":"Offer order.","on_invalid":"reject","allowed_values":[{"value":"site","label":"The site's order (featured rows first)"},{"value":"price_asc","label":"Lowest price first"},{"value":"total_asc","label":"Lowest price + shipping first"}],"default":"site"},{"name":"offer_type","type":"enum","required":false,"description":"Which offers.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All offers"},{"value":"store","label":"Only offers bought on the shop's site"},{"value":"marketplace","label":"Only offers bought through KuantoKusta"}],"default":"all"}],"returns":"product_id + title + offers[]{position, offer_type (store|marketplace), product_id, seller_id, store_name, store_slug, store_url, store_logo, store_rating_count, store_review_count, offer_title, price, old_price, currency, shipping_cost, total_price, free_shipping, free_shipping_programme, delivery_from, delivery_to, next_day_delivery, fast_delivery, ships_to_islands, split_payment, is_featured, is_buy_box, badges[], loyalty_points, clickout_available, last_checked_at} + count + store_count + marketplace_count + cheapest_offer + cheapest_total_offer + buy_box_offer + price_min (site) + sort","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"11928772"}},{"name":"price_history","description":"The site's own price history for one product: the lowest and the average offer price on every day of the last 30 or 90 days, with the period's lowest point. Every call checks the series against the product's own page (its published average price on its date) and refuses a series that does not match. The site states its history does not include Amazon.es prices.","required_params":["product_id"],"optional_params":["period"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id: `product_id` of a search / category row, of a variation or refurbished option, or a kuantokusta.pt product URL (/p/<id>/...).","on_invalid":"reject","example":"11928772","aliases":["id","url"]},{"name":"period","type":"enum","required":false,"description":"How far back (the site offers 30 and 90 days only).","on_invalid":"reject","allowed_values":[{"value":"30d","label":"Last 30 days"},{"value":"90d","label":"Last 90 days"}],"default":"30d","aliases":["range","days"]}],"returns":"product_id + title + period + currency + points[]{date, min_price, avg_price} + count + first_date + last_date + lowest{date, min_price} + highest_daily_min{date, min_price} + last_min_price + current_price_min + identity{product_id, witness, verified, page_average_price, page_average_date, series_average_that_day, last_min_equals_page_price_min}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"11928772","period":"90d"}}]},{"name":"kufar","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Kufar.by API scraper — search Belarus' largest classifieds marketplace: keyword, category, region/city and price-band search over ~6 million live ads with four sorts and paging, full ad detail with photos and every category attribute, plus the live category tree and the region/city table. Prices come back in the currency the SELLER chose (BYN/USD/EUR/RUB) with Kufar's own conversions beside them, and a negotiable ad returns null rather than a fake zero. Russian and Belarusian text is returned exactly as the source spells it. No account, public logged-out data only, no seller phone.","version":"1.0.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/kufar/v1","spec_available":true,"actions":[{"name":"search","description":"Search Kufar classifieds by keyword and/or category, region, city/district, price band, ad type and seller type, with four sorts and paging (up to 200 ads per page). With no filter at all it walks the whole live catalogue (~6 000 000 ads).","required_params":[],"optional_params":["query","category","region","area","price_min","price_max","listing_type","company_only","sort","size","page","language"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search, in the site's own language (Russian/Cyrillic matches best — Kufar's ads are written in Russian). Omit it to browse a category, a region or the whole catalogue.","on_invalid":"reject","example":"холодильник","aliases":["keywords","q","search","text"]},{"name":"category","type":"string","required":false,"description":"Kufar SUBCATEGORY id — 17010 Мобильные телефоны, 1010 Квартиры, 2010 Легковые автомобили... The `categories` action lists every id. Kufar's own filter does NOT match top-level group ids (1000, 2000, 17000...): it answers them with an empty result, so this engine rejects a group id and names its subcategories instead.","on_invalid":"reject","example":"17010","value_pattern":"\\d{3,6}","aliases":["cat","category_id"]},{"name":"region","type":"enum","required":false,"description":"Kufar region id (7 = Минск). The `regions` action returns the names and every city/district id inside each region.","on_invalid":"reject","allowed_values":[{"value":1,"label":"1 — Брестская область"},{"value":2,"label":"2 — Гомельская область"},{"value":3,"label":"3 — Гродненская область"},{"value":4,"label":"4 — Могилевская область"},{"value":5,"label":"5 — Минская область"},{"value":6,"label":"6 — Витебская область"},{"value":7,"label":"7 — Минск"}],"example":7,"aliases":["rgn","region_id"]},{"name":"area","type":"integer","required":false,"description":"City or district id INSIDE the chosen region — requires `region`. Ids come from the `regions` action (region 7 → 22 Центральный…).","on_invalid":"reject","example":22,"minimum":1,"aliases":["ar","area_id"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in whole BYN roubles — the number Kufar prints beside the ad. Kufar filters on its own BYN conversion, so an ad quoted in USD is matched on its BYN figure. Kufar needs both ends of the band, so an omitted bound is filled with 0 / 9999999 BYN and the band actually applied comes back in `filters.prc` (kopecks). A price band always excludes negotiable ads — they carry no number to compare.","on_invalid":"reject","example":500,"minimum":0,"maximum":9999999,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in whole BYN roubles — the number Kufar prints beside the ad. Kufar filters on its own BYN conversion, so an ad quoted in USD is matched on its BYN figure. Kufar needs both ends of the band, so an omitted bound is filled with 0 / 9999999 BYN and the band actually applied comes back in `filters.prc` (kopecks). A price band always excludes negotiable ads — they carry no number to compare.","on_invalid":"reject","example":1500,"minimum":0,"maximum":9999999,"aliases":["max_price"]},{"name":"listing_type","type":"enum","required":false,"description":"Kufar's own ad type, query key `typ`. In real estate the same key is the deal type: `let` = long-term rent, `sell` = for sale (e.g. category 1010 Квартиры). Omit for all.","on_invalid":"reject","allowed_values":[{"value":"sell","label":"Ads offering something (the whole catalogue in practice); in real estate: for sale"},{"value":"buy","label":"Wanted ads"},{"value":"let","label":"Real estate for long-term rent (Kufar's deal type 'Долгосрочная аренда')"}],"example":"sell","aliases":["typ","ad_type"]},{"name":"company_only","type":"boolean","required":false,"description":"Only ads posted by registered companies/shops (measured: 4 100 of 21 641 `iphone` ads).","on_invalid":"reject","default":false,"example":true,"aliases":["cmp","companies_only"]},{"name":"sort","type":"enum","required":false,"description":"Ordering. Kufar has no relevance sort; `newest` is what the site itself shows by default.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (Kufar's default, lst.d)"},{"value":"oldest","label":"Oldest first (lst.a)"},{"value":"price_asc","label":"Cheapest first (prc.a)"},{"value":"price_desc","label":"Most expensive first (prc.d)"}],"default":"newest","example":"price_asc"},{"name":"size","type":"integer","required":false,"description":"Ads per page, 1–200. Kufar clamps anything larger to 200 rather than erroring.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":200,"aliases":["limit","per_page","page_size"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (translated into Kufar's own opaque cursor).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100},{"name":"language","type":"enum","required":false,"description":"Language of Kufar's own labels (category/region names). Ad titles and bodies are returned exactly as the seller typed them.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian — how Kufar's ads are written"},{"value":"by","label":"Belarusian — Kufar's own translation of the labels"}],"default":"ru","example":"ru","aliases":["lang"]}],"returns":"total_results, page, page_size, returned, has_more and listings[] with listing_id, url, title, description_excerpt, price, price_currency (the currency the seller chose), price_kind (fixed|negotiable), price_byn, price_conversions{BYN,USD,EUR,RUB}, category_id/category_name, region_id/region_name, area_id/area_name, listing_type, posted_at, seller_type (company|private), seller_name, seller_account_id, phone_hidden, promoted, highlighted, image, images[], image_thumbnails[], image_count and attributes[] (every category field Kufar publishes, with its own label and value). `description_excerpt` is Kufar's own `body_short`, which the source fills only for its real-estate vertical (measured 50/50 real-estate rows, 0/50 phone rows) — elsewhere it is null and the full text comes from the `listing` action.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"холодильник"}},{"name":"listing","description":"Full detail of one Kufar ad by id or URL: the complete description, price in the seller's own currency with Kufar's conversions, location, posting time, seller display name and account id, every photo, and all category attributes. Text is returned as the seller wrote it (a phone typed into the description stays). The phone behind Kufar's reveal button is not requested — only Kufar's own `phone_hidden` flag.","required_params":[],"optional_params":["listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Kufar ad id — the number in the ad URL and in every search row's `listing_id`. Give this or `url`.","on_invalid":"reject","example":"1087257888","value_pattern":"\\d{6,12}","aliases":["ad_id","id"]},{"name":"url","type":"string","required":false,"description":"Full ad URL, exactly as a search row returns it (real-estate and car ads live on re./auto. subdomains — both are accepted).","on_invalid":"reject","example":"https://www.kufar.by/item/1087257888","aliases":["listing_url","ad_url"]}],"returns":"the same row shape as `search` plus `description` (the full body) instead of `description_excerpt`. A removed or non-existent ad returns NOT_FOUND.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.kufar.by/item/1087257888"}},{"name":"categories","description":"Kufar's live category tree — the resolver `search` needs, because the `category` filter takes numeric ids. 22 top-level groups and 214 subcategories, each with its Russian and Belarusian name.","required_params":[],"optional_params":["category","language"],"params":[{"name":"category","type":"string","required":false,"description":"Omit to get all 22 top-level groups with their subcategories; pass a group id to get just that group.","on_invalid":"reject","example":"17000","value_pattern":"\\d{3,6}","aliases":["cat","category_id"]},{"name":"language","type":"enum","required":false,"description":"Language of Kufar's own labels (category/region names). Ad titles and bodies are returned exactly as the seller typed them.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian — how Kufar's ads are written"},{"value":"by","label":"Belarusian — Kufar's own translation of the labels"}],"default":"ru","example":"ru","aliases":["lang"]}],"returns":"categories[] with id, name, name_ru, name_by, subcategory_count and subcategories[] (id, name, name_ru, name_by, parent_id).","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"17000"}},{"name":"regions","description":"Kufar's live region and city/district table — the resolver the `region` and `area` search filters need. Seven regions, each with every city/district id Kufar offers.","required_params":[],"optional_params":[],"params":[],"returns":"regions[] with id, name_ru, name_by, area_count and areas[] (id, name_ru, name_by).","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"kupujemprodajem","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"KupujemProdajem API scraper — search Serbia's largest general classifieds site across all 89 categories (cars, property for sale and to rent, phones, furniture, clothing, services, jobs) by keyword, category, sub-group, town, seller, price band, condition and offer direction, with three sorts and up to 500 rows per page. Full ad detail returns the complete description, every photo, delivery options and the seller's public profile with its review counts and verification badges. Prices come back in the currency the SELLER chose (EUR or RSD) beside the source's own printed string, and an ad with no price — a job or a wanted ad — returns null instead of a fake zero. No account, logged-out public data only.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/kupujemprodajem/v1","spec_available":true,"actions":[{"name":"search","description":"Search KupujemProdajem classifieds. Needs `query` (keywords) OR `category` (a numeric id from the `categories` action) — either alone is enough, and the rest of the filters narrow it: sub-group, town, seller, price band with currency, condition, offer direction, has-price, has-photo, accepts-swap, available-immediately. Returns the source's own total plus, when that total is capped at 20 000, its uncapped count in `total_available`.","required_params":[],"optional_params":["query","category","group","location","seller_id","price_min","price_max","currency","condition","listing_type","has_price","has_photo","exchange_only","immediate_available","sort","page","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keywords, exactly as typed into the site's own search box (Serbian Latin or Cyrillic both work). Give this or `category`, or both.","on_invalid":"reject","example":"iphone 15","aliases":["keywords","q"]},{"name":"category","type":"integer","required":false,"description":"Numeric category id. 23 Mobilni telefoni, 2919 Automobili, 2821 Nekretnine | Prodaja, 2850 Nekretnine | Izdavanje, 2546 Poslovi, 1268 Nameštaj. The `categories` action lists all 89. Give this or `query`, or both.","on_invalid":"reject","example":23,"minimum":1,"aliases":["category_id","categoryId"]},{"name":"group","type":"integer","required":false,"description":"Sub-group id inside a category (489 = Apple iPhone inside category 23). Group ids are not published as a standalone table; they come back on every search row as `group_id`/`group_name`. Measured bite: 4 595 → 721.","on_invalid":"reject","example":489,"minimum":1,"aliases":["group_id","groupId"]},{"name":"location","type":"integer","required":false,"description":"Town/city id (1 = Beograd). The source publishes no public location table (five endpoint spellings probed, all 404), so ids come from search rows' own `location_id`/`location_name`. Measured bite: 4 595 → 2 842.","on_invalid":"reject","example":1,"minimum":1,"aliases":["location_id","locationId"]},{"name":"seller_id","type":"integer","required":false,"description":"Every ad of one seller. The id comes back as `seller_id` on search rows and inside the `seller` block of `listing`.","on_invalid":"reject","example":1396317,"minimum":1,"aliases":["user_id","userId"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price. A band is only meaningful together with `currency` because sellers quote in EUR *or* RSD on the same page; when you omit `currency` the source's own default (`rsd`) is used and echoed back in `filters`. Measured bite: 4 595 → 137 for 100–200 EUR. A band excludes ads with no price.","on_invalid":"reject","example":100,"minimum":0,"aliases":["min_price","priceFrom"]},{"name":"price_max","type":"number","required":false,"description":"Maximum price. A band is only meaningful together with `currency` because sellers quote in EUR *or* RSD on the same page; when you omit `currency` the source's own default (`rsd`) is used and echoed back in `filters`. Measured bite: 4 595 → 137 for 100–200 EUR. A band excludes ads with no price.","on_invalid":"reject","example":200,"minimum":0,"aliases":["max_price","priceTo"]},{"name":"currency","type":"enum","required":false,"description":"Currency the price band is expressed in. Does not translate the ads: each row still comes back in the currency its seller chose.","on_invalid":"reject","allowed_values":[{"value":"eur","label":"EUR — euro"},{"value":"rsd","label":"RSD — Serbian dinar"}],"example":"eur"},{"name":"condition","type":"enum","required":false,"description":"The source's own item condition. Measured bite on a 4 595-row control: new 481, used 1 960. An unknown value is rejected here because the source would answer it with a misleading empty page.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Novo — brand new"},{"value":"as-new","label":"Nekorišćeno (polovno) — unused second hand"},{"value":"used","label":"Korišćeno (polovno) — used"},{"value":"damaged","label":"Oštećeno ili neispravno — damaged or faulty"}],"example":"used"},{"name":"listing_type","type":"enum","required":false,"description":"Offer direction. Omit for both. Measured: sell 2 108, buy 2 487 of a 4 595-row control — wanted ads are a real part of this site, and they carry no price.","on_invalid":"reject","allowed_values":[{"value":"sell","label":"Ads offering something for sale"},{"value":"buy","label":"Wanted ads (the poster is buying/looking)"}],"example":"sell","aliases":["type","ad_type"]},{"name":"has_price","type":"boolean","required":false,"description":"Only ads that actually carry a number (measured 4 595 → 1 989).","on_invalid":"reject","default":false,"example":true,"aliases":["hasPrice","priced_only"]},{"name":"has_photo","type":"boolean","required":false,"description":"Only ads with at least one photo (measured 4 595 → 4 565 — on this site almost everything has a photo, so it rarely narrows).","on_invalid":"reject","default":false,"example":true,"aliases":["hasPhoto","with_photo"]},{"name":"exchange_only","type":"boolean","required":false,"description":"Only ads whose seller accepts a swap (measured 4 595 → 128).","on_invalid":"reject","default":false,"example":true,"aliases":["exchange"]},{"name":"immediate_available","type":"boolean","required":false,"description":"Only ads flagged available right away (measured 4 595 → 1 249).","on_invalid":"reject","default":false,"example":true,"aliases":["immediateAvailable","in_stock"]},{"name":"sort","type":"enum","required":false,"description":"Ordering. 🔴 The source sorts on the RAW price number and ignores the currency, so `price_desc` can put a 316 472 RSD ad above a 9 999 EUR one. Measured, and returned as the source orders it.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The source's own order (paid placements first)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"default","example":"price_asc","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. 🔴 The source stops at 20 000 rows per query no matter how many it reports available, so narrow the query (category, location, price band) rather than paging past it.","on_invalid":"reject","default":1,"example":2,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, 1–500 (measured: 30 → 59 KB, 60 → 118 KB, 200 → 384 KB, 500 → 956 KB; the source honours all of them). Three other spellings the source silently ignores (`pageSize`, `limit`, `size`) are accepted here as aliases and translated to the one that works.","on_invalid":"reject","default":30,"example":60,"minimum":1,"maximum":500,"aliases":["perPage","page_size","limit","size"]}],"returns":"total_results (the source's figure, capped at 20 000), total_capped, total_available (the source's uncapped count, filled only when capped), page, page_count, page_size, returned, page_clamped, has_more, dropped_non_listing_tiles, filter_id, query, filters (the query string actually sent) and listings[] with listing_id, url, title, description_excerpt, price, price_currency (EUR or RSD — the seller's own choice), price_kind (fixed | negotiable | not_priced | not_priced_job | not_priced_wanted), price_display (the source's own printed string), price_label, price_suffix, exchange_accepted, category_id/category_name, group_id/group_name, location_id/location_name, condition, listing_type (sell | buy), listing_kind (goods | service | job), posted_at, renewed_at, view_count, favorite_count, seller_id, promoted, highlighted, immediate_available, has_video, is_vehicle, image, image_thumbnail and attributes[].","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone","max_results":20}},{"name":"listing","description":"Full detail of one ad by id or URL: the complete description, every photo at full size and as a thumbnail, price with the source's own printed string, condition, location, posting and renewal time, view and favourite counts, delivery and local-pickup flags, vehicle/ISBN/OEM fields where the category has them, and the seller's public profile (display name, person or company, town, member-since, review counts, phone-verified and bank-account-verified badges, company tax and registry ids). A removed or non-existent ad returns NOT_FOUND. The seller's phone number behind the reveal button is not requested — only the source's own `has_phone`; a number typed into the description is returned as written.","required_params":[],"optional_params":["listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Ad id — the number at the end of every ad URL and the `listing_id` of every search row. Give this or `url`.","on_invalid":"reject","example":"152902916","value_pattern":"\\d{3,12}","aliases":["ad_id","id"]},{"name":"url","type":"string","required":false,"description":"Full ad URL exactly as `search` returns it; the id is taken from its `/oglas/<id>` tail.","on_invalid":"reject","example":"https://www.kupujemprodajem.com/mobilni-telefoni/apple-iphone/iphone-15/oglas/152902916","aliases":["listing_url","ad_url"]}],"returns":"the same row shape as `search` plus description (full text), images[], image_thumbnails[], image_count, status, valid_until, has_phone, courier_delivery, local_pickup, promo_type, isbn, oem_code, vehicle_vin, vehicle_km, vehicle_registration, share_url, attributes[] and seller{} (seller_id, name, kind, location_id, location_name, member_since, reviews, reviews_positive, reviews_negative, phone_verified, bank_account_verified, company_tax_id, company_registry_id, response_info, profile_note, has_phone).","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.kupujemprodajem.com/mobilni-telefoni/apple-iphone/iphone-15/oglas/152902916"}},{"name":"count","description":"How many live ads match a filter set, without downloading any of them. One ~60-byte upstream call, and it is the source's UNCAPPED number: the same query whose `search` total stops at 20 000 counts 84 718 here. Takes exactly the same filters as `search` (page and sort are ignored).","required_params":[],"optional_params":["query","category","group","location","seller_id","price_min","price_max","currency","condition","listing_type","has_price","has_photo","exchange_only","immediate_available"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keywords, exactly as typed into the site's own search box (Serbian Latin or Cyrillic both work). Give this or `category`, or both.","on_invalid":"reject","example":"iphone 15","aliases":["keywords","q"]},{"name":"category","type":"integer","required":false,"description":"Numeric category id. 23 Mobilni telefoni, 2919 Automobili, 2821 Nekretnine | Prodaja, 2850 Nekretnine | Izdavanje, 2546 Poslovi, 1268 Nameštaj. The `categories` action lists all 89. Give this or `query`, or both.","on_invalid":"reject","example":23,"minimum":1,"aliases":["category_id","categoryId"]},{"name":"group","type":"integer","required":false,"description":"Sub-group id inside a category (489 = Apple iPhone inside category 23). Group ids are not published as a standalone table; they come back on every search row as `group_id`/`group_name`. Measured bite: 4 595 → 721.","on_invalid":"reject","example":489,"minimum":1,"aliases":["group_id","groupId"]},{"name":"location","type":"integer","required":false,"description":"Town/city id (1 = Beograd). The source publishes no public location table (five endpoint spellings probed, all 404), so ids come from search rows' own `location_id`/`location_name`. Measured bite: 4 595 → 2 842.","on_invalid":"reject","example":1,"minimum":1,"aliases":["location_id","locationId"]},{"name":"seller_id","type":"integer","required":false,"description":"Every ad of one seller. The id comes back as `seller_id` on search rows and inside the `seller` block of `listing`.","on_invalid":"reject","example":1396317,"minimum":1,"aliases":["user_id","userId"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price. A band is only meaningful together with `currency` because sellers quote in EUR *or* RSD on the same page; when you omit `currency` the source's own default (`rsd`) is used and echoed back in `filters`. Measured bite: 4 595 → 137 for 100–200 EUR. A band excludes ads with no price.","on_invalid":"reject","example":100,"minimum":0,"aliases":["min_price","priceFrom"]},{"name":"price_max","type":"number","required":false,"description":"Maximum price. A band is only meaningful together with `currency` because sellers quote in EUR *or* RSD on the same page; when you omit `currency` the source's own default (`rsd`) is used and echoed back in `filters`. Measured bite: 4 595 → 137 for 100–200 EUR. A band excludes ads with no price.","on_invalid":"reject","example":200,"minimum":0,"aliases":["max_price","priceTo"]},{"name":"currency","type":"enum","required":false,"description":"Currency the price band is expressed in. Does not translate the ads: each row still comes back in the currency its seller chose.","on_invalid":"reject","allowed_values":[{"value":"eur","label":"EUR — euro"},{"value":"rsd","label":"RSD — Serbian dinar"}],"example":"eur"},{"name":"condition","type":"enum","required":false,"description":"The source's own item condition. Measured bite on a 4 595-row control: new 481, used 1 960. An unknown value is rejected here because the source would answer it with a misleading empty page.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Novo — brand new"},{"value":"as-new","label":"Nekorišćeno (polovno) — unused second hand"},{"value":"used","label":"Korišćeno (polovno) — used"},{"value":"damaged","label":"Oštećeno ili neispravno — damaged or faulty"}],"example":"used"},{"name":"listing_type","type":"enum","required":false,"description":"Offer direction. Omit for both. Measured: sell 2 108, buy 2 487 of a 4 595-row control — wanted ads are a real part of this site, and they carry no price.","on_invalid":"reject","allowed_values":[{"value":"sell","label":"Ads offering something for sale"},{"value":"buy","label":"Wanted ads (the poster is buying/looking)"}],"example":"sell","aliases":["type","ad_type"]},{"name":"has_price","type":"boolean","required":false,"description":"Only ads that actually carry a number (measured 4 595 → 1 989).","on_invalid":"reject","default":false,"example":true,"aliases":["hasPrice","priced_only"]},{"name":"has_photo","type":"boolean","required":false,"description":"Only ads with at least one photo (measured 4 595 → 4 565 — on this site almost everything has a photo, so it rarely narrows).","on_invalid":"reject","default":false,"example":true,"aliases":["hasPhoto","with_photo"]},{"name":"exchange_only","type":"boolean","required":false,"description":"Only ads whose seller accepts a swap (measured 4 595 → 128).","on_invalid":"reject","default":false,"example":true,"aliases":["exchange"]},{"name":"immediate_available","type":"boolean","required":false,"description":"Only ads flagged available right away (measured 4 595 → 1 249).","on_invalid":"reject","default":false,"example":true,"aliases":["immediateAvailable","in_stock"]}],"returns":"count (the number of live matching ads) and filters (the query string actually sent).","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone 15"}},{"name":"categories","description":"The site's live category table — the resolver `search` needs, because `category` takes a numeric id. 89 categories across three kinds (66 goods, 22 services, 1 jobs), each with the flags that tell you whether the condition and swap filters mean anything in it.","required_params":[],"optional_params":["kind"],"params":[{"name":"kind","type":"enum","required":false,"description":"Narrow the category list to one kind. Omit for all 89.","on_invalid":"reject","allowed_values":[{"value":"goods","label":"Physical goods — 66 of the 89 categories"},{"value":"service","label":"Services — 22 categories"},{"value":"job","label":"Jobs — 1 category (2546 Poslovi)"}],"example":"goods"}],"returns":"category_count and categories[] with category_id, name, kind (goods | service | job), active, max_photos, shows_condition, shows_exchange, supports_wanted_ads.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"kind":"goods"}}]},{"name":"kurly","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Market Kurly (kurly.com) groceries","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kurly/v1","spec_available":true,"actions":[{"name":"search","description":"Search Market Kurly (kurly.com) by keyword: KRW regular and lowest card price, delivery type (샛별배송 / 판매자배송), stock status, review counts, facets (category, brand, price, storage, delivery). 96 products per page.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, Korean or English, up to 100 characters (e.g. 우유, 사과, 라면).","on_invalid":"reject","example":"우유","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Category id(s) from facets.category or the categories action (e.g. 018001 = 우유·두유), comma-separated for several.","on_invalid":"reject","example":"018001"},{"name":"sort","type":"enum","required":false,"description":"Ordering, as on the site: recommended (추천순), newest (신상품순), best_selling (판매량순), benefit (혜택순), price_asc / price_desc (on the lowest_price the card shows: sale, coupon-applied or Kurly Members price, whichever is lowest).","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"recommended"},{"value":"newest","label":"newest"},{"value":"best_selling","label":"best_selling"},{"value":"benefit","label":"benefit"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"recommended","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is empty with has_more=false.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in KRW. Kurly applies the price range to lowest_price (the big card price: sale, coupon-applied or Kurly Members price, whichever is lowest), not to the struck regular price.","on_invalid":"reject","example":3000,"minimum":0,"maximum":100000000,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in KRW (same basis as min_price).","on_invalid":"reject","example":8000,"minimum":0,"maximum":100000000,"aliases":["price_max"]},{"name":"brand","type":"string","required":false,"description":"Brand id(s) from facets.brand of a search (e.g. br-7793), comma-separated for several.","on_invalid":"reject","example":"br-9918"},{"name":"storage_type","type":"enum","required":false,"description":"Packaging temperature: ambient (상온), cold (냉장), frozen (냉동). Comma-separated for several.","on_invalid":"reject","allowed_values":[{"value":"ambient","label":"ambient"},{"value":"cold","label":"cold"},{"value":"frozen","label":"frozen"}],"example":"cold"},{"name":"delivery_type","type":"enum","required":false,"description":"Delivery method: dawn (샛별배송, Kurly next-morning delivery), normal_parcel (판매자배송, seller parcel), self_pickup_wine, installation_delivery, international_direct, online_ticket.","on_invalid":"reject","allowed_values":[{"value":"dawn","label":"dawn"},{"value":"normal_parcel","label":"normal_parcel"},{"value":"self_pickup_wine","label":"self_pickup_wine"},{"value":"installation_delivery","label":"installation_delivery"},{"value":"international_direct","label":"international_direct"},{"value":"online_ticket","label":"online_ticket"}],"example":"dawn"},{"name":"benefit","type":"enum","required":false,"description":"Benefit facet: discount (할인상품), coupon (쿠폰), exclusive_price (단독특가), express_delivery (빠른도착), limited (한정수량).","on_invalid":"reject","allowed_values":[{"value":"discount","label":"discount"},{"value":"coupon","label":"coupon"},{"value":"exclusive_price","label":"exclusive_price"},{"value":"express_delivery","label":"express_delivery"},{"value":"limited","label":"limited"}],"example":"discount"},{"name":"kurly_only","type":"boolean","required":false,"description":"Only Kurly Only (컬리 단독) products.","on_invalid":"reject","default":false},{"name":"new_only","type":"boolean","required":false,"description":"Only products the site marks as new (신상품).","on_invalid":"reject","default":false}],"returns":"products[] (id, name, short_description, price (struck regular price), lowest_price (the big price on the card: lowest of sale, coupon-applied and Kurly Members price - the product action splits them), discount_rate, multiple_prices, sold_out, purchasable, status, delivery_types, tags, stickers, review_count (exact when the card shows it) / review_count_min / review_count_max, image, url), sponsored[], total (exact), page, total_pages, has_more, exact_match (false when Kurly found nothing and shows related products instead), notice, related_keywords, facets, sort_options.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"우유"}},{"name":"category","description":"List one Market Kurly category by its id (from categories), with the same filters and sort as search.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"Category id from the categories action: a top category (e.g. 907 채소) or a sub category (e.g. 018001 우유·두유).","on_invalid":"reject","example":"018001","aliases":["category_code"]},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-120.","on_invalid":"reject","default":96,"example":96,"minimum":1,"maximum":120},{"name":"sort","type":"enum","required":false,"description":"Ordering, as on the site: recommended (추천순), newest (신상품순), best_selling (판매량순), benefit (혜택순), price_asc / price_desc (on the lowest_price the card shows: sale, coupon-applied or Kurly Members price, whichever is lowest).","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"recommended"},{"value":"newest","label":"newest"},{"value":"best_selling","label":"best_selling"},{"value":"benefit","label":"benefit"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"recommended","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is empty with has_more=false.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in KRW. Kurly applies the price range to lowest_price (the big card price: sale, coupon-applied or Kurly Members price, whichever is lowest), not to the struck regular price.","on_invalid":"reject","example":3000,"minimum":0,"maximum":100000000,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in KRW (same basis as min_price).","on_invalid":"reject","example":8000,"minimum":0,"maximum":100000000,"aliases":["price_max"]},{"name":"brand","type":"string","required":false,"description":"Brand id(s) from facets.brand of a search (e.g. br-7793), comma-separated for several.","on_invalid":"reject","example":"br-9918"},{"name":"storage_type","type":"enum","required":false,"description":"Packaging temperature: ambient (상온), cold (냉장), frozen (냉동). Comma-separated for several.","on_invalid":"reject","allowed_values":[{"value":"ambient","label":"ambient"},{"value":"cold","label":"cold"},{"value":"frozen","label":"frozen"}],"example":"cold"},{"name":"delivery_type","type":"enum","required":false,"description":"Delivery method: dawn (샛별배송, Kurly next-morning delivery), normal_parcel (판매자배송, seller parcel), self_pickup_wine, installation_delivery, international_direct, online_ticket.","on_invalid":"reject","allowed_values":[{"value":"dawn","label":"dawn"},{"value":"normal_parcel","label":"normal_parcel"},{"value":"self_pickup_wine","label":"self_pickup_wine"},{"value":"installation_delivery","label":"installation_delivery"},{"value":"international_direct","label":"international_direct"},{"value":"online_ticket","label":"online_ticket"}],"example":"dawn"},{"name":"benefit","type":"enum","required":false,"description":"Benefit facet: discount (할인상품), coupon (쿠폰), exclusive_price (단독특가), express_delivery (빠른도착), limited (한정수량).","on_invalid":"reject","allowed_values":[{"value":"discount","label":"discount"},{"value":"coupon","label":"coupon"},{"value":"exclusive_price","label":"exclusive_price"},{"value":"express_delivery","label":"express_delivery"},{"value":"limited","label":"limited"}],"example":"discount"},{"name":"kurly_only","type":"boolean","required":false,"description":"Only Kurly Only (컬리 단독) products.","on_invalid":"reject","default":false},{"name":"new_only","type":"boolean","required":false,"description":"Only products the site marks as new (신상품).","on_invalid":"reject","default":false}],"returns":"products[] (same fields as search, plus low_stock and ranking when the source sends them), total (exact), page, total_pages, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"018001"}},{"name":"product","description":"Full Market Kurly product sheet: regular, sale, Kurly Members and coupon prices kept apart, every purchase option with its own prices and stock flags, unit price, origin (원산지), storage type, delivery type and fee, sold-out / low-stock status, review count, allergy text, legal product notices (상품고시정보), seller, images.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Kurly product number (`id` of a search/category row) or a https://www.kurly.com/goods/<number> URL.","on_invalid":"reject","example":5104002,"aliases":["product_id","no","url"]}],"returns":"id, name, brand, seller, price, discounted_price, discounted_price_is_members_only, member_price, non_member_price, coupon_price, lowest_price (= the search card price), base_price, retail_price, unit_price + unit, volume, origin, storage_types, delivery_types (code, label, guide, fee), sold_out, low_stock, review_count, allergy, legal_notices, options[] (per option: members_only, price, discounted_price, final_price, coupon_price, unit_price, sold_out, low_stock), images, url.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":5104002}},{"name":"categories","description":"Market Kurly category tree (top categories and their sub categories) with the ids the category action and the search `category` filter take.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]: id, name, children[] (id, name).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"kvd","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"KVD Sweden vehicle auctions","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/kvd/v1","spec_available":true,"actions":[{"name":"search","description":"Search Swedish vehicle auctions and buy-now listings","required_params":[],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Native free-text vehicle search","on_invalid":"reject","example":"Volvo"},{"name":"page","type":"integer","required":false,"description":"Page number; shallow windows qualified","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Source result window size","on_invalid":"reject","default":10,"example":3,"minimum":1,"maximum":30}],"returns":"items, matching total, source_total and next_page","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Volvo","page":1,"limit":3}},{"name":"listing","description":"Published vehicle and auction details by search ID","required_params":[],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Numeric auction ID returned by search","on_invalid":"reject","example":"305235"}],"returns":"Vehicle, native offer basis, SEK, fees, description, photos and location","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"305235"}}]},{"name":"kwork","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Kwork project exchange API — live BUYER project requests from kwork.ru in clean JSON: description, buyer budget in roubles, deadline, category, offers already received and the buyer (username, profile, history). No login, and no detail call (every field is in the search result). Russian-language marketplace.","version":"1.0.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/kwork/v1","spec_available":true,"actions":[{"name":"search","description":"Search live BUYER project requests on the Kwork exchange. Returns the full description, the buyer's budget cap in roubles, the deadline, the category, how many offers the request has already received, and the buyer (id, username, profile URL, avatar, projects posted, hire rate, purchase-level badges). No second call is needed: Kwork publishes no project detail page and every field is already here. Cost is bounded by `max_pages`, and the response states how many pages were read.","required_params":[],"optional_params":["query","category","budget_min","budget_max","max_offers","limit","offset","max_pages"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search, applied by Kwork itself across BOTH the title and the body of the request (measured: for 'telegram', 7 of the first 12 matches were in the title and 5 matched only in the body). The exchange is Russian-language, so Russian terms match far more than English ones.","on_invalid":"ignore","example":"телеграм","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"Restrict to one Kwork category, by slug ('script-programming') or numeric id ('41'). Validated against the live category tree: Kwork itself does NOT reject an unknown category, it silently returns the whole exchange, so we reject it here instead of answering a narrow question with everything.","on_invalid":"reject","allowed_values":[{"value":"writing-translations","label":"Texts and translation (5)"},{"value":"translations","label":"Translation (35)"},{"value":"creative-writing","label":"Website copy and content (73)"},{"value":"business-copywriting","label":"Sales and business copy (74)"},{"value":"typing","label":"Typing (75)"},{"value":"resumes-and-letters","label":"Resumes and job ads (235)"},{"value":"textgeneration","label":"AI text generation (303)"},{"value":"audio-video","label":"Audio, video and filming (7)"},{"value":"audio","label":"Voice-over and audio recording (20)"},{"value":"music","label":"Music and songs (23)"},{"value":"animation","label":"Video clips (76)"},{"value":"intro","label":"Intros and logo animation (77)"},{"value":"editing-media","label":"Video filming and editing (78)"},{"value":"editing-audio","label":"Audio editing (106)"},{"value":"videogeneration","label":"AI video generation (300)"},{"value":"programming","label":"Development and IT (11)"},{"value":"website-development","label":"Website creation (37)"},{"value":"website-repair","label":"Website fixes and setup (38)"},{"value":"mobile-apps","label":"Mobile apps (39)"},{"value":"game-dev","label":"Games (40)"},{"value":"script-programming","label":"Scripts, bots and mini apps (41)"},{"value":"frontend","label":"HTML and CSS markup (79)"},{"value":"software","label":"Desktop software (80)"},{"value":"usability-testing","label":"Usability, testing and support (81)"},{"value":"server-administration","label":"Servers and hosting (255)"},{"value":"design","label":"Design (15)"},{"value":"web-plus-mobile-design","label":"Web and mobile design (24)"},{"value":"logo","label":"Logo and branding (25)"},{"value":"graphic-design","label":"Print design (27)"},{"value":"illustrations","label":"Art and illustration (28)"},{"value":"vector-tracing","label":"Image editing and retouching (68)"},{"value":"interior-exterior-design","label":"Interior and exterior design (90)"},{"value":"packaging","label":"Industrial design (250)"},{"value":"presentations-infographics","label":"Presentations and infographics (270)"},{"value":"outdoor-advertising","label":"Outdoor advertising (272)"},{"value":"e-commerce-social-network","label":"Marketplace and social media creative (286)"},{"value":"imagegeneration","label":"AI image generation (306)"},{"value":"seo","label":"SEO and traffic (17)"},{"value":"optimization","label":"On-page optimisation (43)"},{"value":"audit","label":"SEO audits and consulting (44)"},{"value":"analytics","label":"Analytics and statistics (56)"},{"value":"links","label":"Link building (59)"},{"value":"keywords","label":"Keyword research (71)"},{"value":"traffic","label":"Traffic (72)"},{"value":"integrated-promotion","label":"Full-service site promotion (273)"},{"value":"promotion","label":"Social media and marketing (45)"},{"value":"smm","label":"Social media and SMM (46)"},{"value":"marketing","label":"Marketing and PR (47)"},{"value":"context","label":"Paid search advertising (49)"},{"value":"email-marketing","label":"Email marketing (108)"},{"value":"bulletin-boards","label":"Marketplaces and classifieds (112)"},{"value":"information-bases","label":"Databases and lead lists (113)"},{"value":"training-consulting","label":"Training and consulting (55)"},{"value":"lawyer-consulting","label":"Legal help (63)"},{"value":"financial-consulting","label":"Accounting and tax (64)"},{"value":"engineering","label":"Construction and renovation (65)"},{"value":"business","label":"Business and life (83)"},{"value":"personal-assistant","label":"Personal assistant (84)"},{"value":"sites-for-sale","label":"Websites and groups for sale (114)"},{"value":"calls-sales","label":"Cold calling and sales (262)"},{"value":"recruitment","label":"Recruitment (265)"}],"example":"script-programming","value_pattern":"^\\d{1,4}$","aliases":["c","category_id","cat"]},{"name":"budget_min","type":"number","required":false,"description":"Keep only projects whose buyer budget is at least this many roubles. Kwork does not offer this over HTTP, so it is applied on our side to the pages covered by `max_pages` — see `budget_exhausted` in the response.","on_invalid":"ignore","example":5000,"minimum":0,"aliases":["price_from","min_budget"]},{"name":"budget_max","type":"number","required":false,"description":"Keep only projects whose buyer budget is at most this many roubles. Applied on our side, like `budget_min`.","on_invalid":"ignore","example":100000,"minimum":0,"aliases":["price_to","max_budget"]},{"name":"max_offers","type":"integer","required":false,"description":"Keep only projects that have received at most this many offers, for finding requests that are still winnable. Of 657 open projects measured, 102 had no offers at all. Applied on our side.","on_invalid":"ignore","example":3,"minimum":0,"maximum":1000,"aliases":["max_kworks","max_bids"]},{"name":"limit","type":"integer","required":false,"description":"How many projects to return (1–120). The page budget still applies, so a heavily filtered request can return fewer.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":120,"aliases":["max_results","count"]},{"name":"offset","type":"integer","required":false,"description":"Skip this many projects before returning `limit` (0–660; the exchange is about 55 pages of 12).","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":660,"aliases":["skip","page_offset"]},{"name":"max_pages","type":"integer","required":false,"description":"Hard cap on how many exchange pages this one call may read (1–10, default 3). This is the cost control: the call reads at most this many pages whatever the filters, and the response reports `pages_read` and `budget_exhausted` so you can tell a truncated result from an exhausted one.","on_invalid":"ignore","default":3,"example":3,"minimum":1,"maximum":10,"aliases":["page_budget","pages"]}],"returns":"projects[]{id, title, description, budget, budget_ceiling, currency, offers_received, views, category, category_slug, delivery_days_max, status, status_label, is_active, time_left, created_at, expires_at, attachments, buyer{id, username, profile_url, avatar, avatar_srcset, projects_posted, hire_rate_percent, badges[]}}, total_count, returned, offset, pages_read, page_budget, budget_exhausted, filters_applied","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":10}},{"name":"categories","description":"The Kwork exchange category tree with the number of OPEN buyer projects in each one right now. Use it to pick a `category` value for `search`, or on its own as a demand signal showing which kinds of work buyers are asking for today.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{id, slug, name, parent_id, parent, open_projects}, total_open_projects","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"stats","description":"Kwork's own 30-day exchange statistics as the marketplace publishes them: buyer projects posted, orders completed, and the total rouble value of those orders. A market-size signal, not a scrape of individual rows.","required_params":[],"optional_params":[],"params":[],"returns":"stats{period_days, projects_posted, orders_completed, orders_value, currency}, open_projects_now","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"laced","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Laced API — the UK sneaker and streetwear marketplace (laced.com): search and brand / series collections with every size's lowest asking price, and one product with each size's live lowest ask, shipping and return fee, barcode and 28-day sales count, priced for the delivery country (100 countries) in GBP, EUR, USD or AED. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/laced/v1","spec_available":true,"actions":[{"name":"search","description":"Search Laced by model, colourway or style code, with filters for brand, product type, colour, gender, age group, size and price. Each row carries every size's lowest asking price for the chosen delivery country and currency.","required_params":[],"optional_params":["query","delivery_country","currency","brand","product_type","color","gender","age_category","size","size_system","min_price","max_price","sort","limit","page"],"params":[{"name":"query","type":"string","required":false,"description":"What to search for: a model (dunk low, samba, gel-kayano 14), a colourway (panda, grey fog) or a style code (DD1391-103). Leave empty to browse with filters only.","on_invalid":"reject","example":"dunk low","aliases":["q","keyword","search"]},{"name":"delivery_country","type":"enum","required":false,"description":"The country the item would be delivered to (ISO code, 100 countries; UK is accepted for GB). Laced prices every size per delivery country: EU and US prices include taxes and duties, so the same size costs more there than in the UK (measured: £148 to GB, €235 to DE, $230 to the US).","on_invalid":"reject","allowed_values":[{"value":"AL","label":"AL"},{"value":"AM","label":"AM"},{"value":"AW","label":"AW"},{"value":"AU","label":"AU"},{"value":"AT","label":"AT"},{"value":"BH","label":"BH"},{"value":"BE","label":"BE"},{"value":"BM","label":"BM"},{"value":"BA","label":"BA"},{"value":"BW","label":"BW"},{"value":"BN","label":"BN"},{"value":"BG","label":"BG"},{"value":"KH","label":"KH"},{"value":"CA","label":"CA"},{"value":"KY","label":"KY"},{"value":"CL","label":"CL"},{"value":"CN","label":"CN"},{"value":"CO","label":"CO"},{"value":"CR","label":"CR"},{"value":"HR","label":"HR"},{"value":"CY","label":"CY"},{"value":"CZ","label":"CZ"},{"value":"DK","label":"DK"},{"value":"DO","label":"DO"},{"value":"EE","label":"EE"},{"value":"FK","label":"FK"},{"value":"FI","label":"FI"},{"value":"FR","label":"FR"},{"value":"GF","label":"GF"},{"value":"GE","label":"GE"},{"value":"DE","label":"DE"},{"value":"GI","label":"GI"},{"value":"GR","label":"GR"},{"value":"GL","label":"GL"},{"value":"GP","label":"GP"},{"value":"GU","label":"GU"},{"value":"GG","label":"GG"},{"value":"HK","label":"HK"},{"value":"HU","label":"HU"},{"value":"IS","label":"IS"},{"value":"IN","label":"IN"},{"value":"IE","label":"IE"},{"value":"IM","label":"IM"},{"value":"IL","label":"IL"},{"value":"IT","label":"IT"},{"value":"JP","label":"JP"},{"value":"JE","label":"JE"},{"value":"JO","label":"JO"},{"value":"KZ","label":"KZ"},{"value":"KW","label":"KW"},{"value":"LV","label":"LV"},{"value":"LB","label":"LB"},{"value":"LI","label":"LI"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"MO","label":"MO"},{"value":"MY","label":"MY"},{"value":"MT","label":"MT"},{"value":"MQ","label":"MQ"},{"value":"YT","label":"YT"},{"value":"MD","label":"MD"},{"value":"MC","label":"MC"},{"value":"ME","label":"ME"},{"value":"NL","label":"NL"},{"value":"NC","label":"NC"},{"value":"NZ","label":"NZ"},{"value":"MK","label":"MK"},{"value":"NO","label":"NO"},{"value":"OM","label":"OM"},{"value":"PW","label":"PW"},{"value":"PH","label":"PH"},{"value":"PL","label":"PL"},{"value":"PT","label":"PT"},{"value":"PR","label":"PR"},{"value":"QA","label":"QA"},{"value":"RO","label":"RO"},{"value":"RE","label":"RE"},{"value":"BL","label":"BL"},{"value":"SA","label":"SA"},{"value":"RS","label":"RS"},{"value":"SG","label":"SG"},{"value":"SK","label":"SK"},{"value":"SI","label":"SI"},{"value":"ZA","label":"ZA"},{"value":"KR","label":"KR"},{"value":"ES","label":"ES"},{"value":"SE","label":"SE"},{"value":"CH","label":"CH"},{"value":"TW","label":"TW"},{"value":"TR","label":"TR"},{"value":"UA","label":"UA"},{"value":"AE","label":"AE"},{"value":"GB","label":"GB"},{"value":"US","label":"US"},{"value":"UZ","label":"UZ"},{"value":"VE","label":"VE"},{"value":"VN","label":"VN"},{"value":"VI","label":"VI"},{"value":"ZM","label":"ZM"},{"value":"ZW","label":"ZW"}],"default":"GB","example":"DE","aliases":["country","delivery_location"]},{"name":"currency","type":"enum","required":false,"description":"Currency of every price: GBP, EUR, USD or AED (the site's own four). Default follows the delivery country: GB → GBP, US → USD, AE → AED, an EU country → EUR, anywhere else → GBP.","on_invalid":"reject","allowed_values":[{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"USD","label":"USD"},{"value":"AED","label":"AED"}],"example":"EUR"},{"name":"brand","type":"string","required":false,"description":"Only this brand as the site writes it (Nike, Adidas, Air Jordan, Asics, New Balance, UGG, PUMA, On-Running, HOKA, Lego, Salomon, Crocs, Yeezy, Supreme, POP MART, Pokemon …; case does not matter). An unknown brand returns 0 rows.","on_invalid":"reject","example":"Nike"},{"name":"product_type","type":"enum","required":false,"description":"Only this product type.","on_invalid":"reject","allowed_values":[{"value":"Shoes","label":"Shoes"},{"value":"Toys","label":"Toys"},{"value":"Boots","label":"Boots"},{"value":"Clogs","label":"Clogs"},{"value":"Slippers","label":"Slippers"},{"value":"Sweatshirts & Hoodies","label":"Sweatshirts & Hoodies"},{"value":"T-Shirts","label":"T-Shirts"},{"value":"Figurines","label":"Figurines"},{"value":"Trousers","label":"Trousers"},{"value":"Sandals","label":"Sandals"},{"value":"Trading Card Boxes","label":"Trading Card Boxes"},{"value":"Shorts","label":"Shorts"},{"value":"Watches","label":"Watches"},{"value":"Football Shirts","label":"Football Shirts"},{"value":"Jackets","label":"Jackets"},{"value":"Tracksuits","label":"Tracksuits"},{"value":"Hats","label":"Hats"},{"value":"Games Console","label":"Games Console"},{"value":"Shirts","label":"Shirts"},{"value":"Trading Card Packs","label":"Trading Card Packs"},{"value":"Trading Card Singles","label":"Trading Card Singles"},{"value":"Backpack","label":"Backpack"}],"example":"Shoes","aliases":["category"]},{"name":"color","type":"enum","required":false,"description":"Only this main colour.","on_invalid":"reject","allowed_values":[{"value":"Black","label":"Black"},{"value":"White","label":"White"},{"value":"Grey","label":"Grey"},{"value":"Blue","label":"Blue"},{"value":"Green","label":"Green"},{"value":"Multi-colour","label":"Multi-colour"},{"value":"Beige","label":"Beige"},{"value":"Pink","label":"Pink"},{"value":"Brown","label":"Brown"},{"value":"Cream","label":"Cream"},{"value":"Red","label":"Red"},{"value":"Yellow","label":"Yellow"},{"value":"Purple","label":"Purple"},{"value":"Orange","label":"Orange"},{"value":"Tan","label":"Tan"},{"value":"Teal","label":"Teal"},{"value":"Silver","label":"Silver"},{"value":"Sail","label":"Sail"},{"value":"Burgundy","label":"Burgundy"},{"value":"Gold","label":"Gold"},{"value":"Bone","label":"Bone"},{"value":"Rust","label":"Rust"},{"value":"Copper","label":"Copper"},{"value":"Bronze","label":"Bronze"}],"example":"Black","aliases":["colour"]},{"name":"gender","type":"enum","required":false,"description":"Only products the site tags with this gender. Most products are tagged unisex (24,114 of 31,780 size records), so men / women are narrow.","on_invalid":"reject","allowed_values":[{"value":"men","label":"men"},{"value":"women","label":"women"},{"value":"unisex","label":"unisex"}],"example":"women"},{"name":"age_category","type":"enum","required":false,"description":"Only this age group (Adult, Grade School, Pre School, Toddler, Kids, Infant).","on_invalid":"reject","allowed_values":[{"value":"Adult","label":"Adult"},{"value":"Grade School","label":"Grade School"},{"value":"Pre School","label":"Pre School"},{"value":"Toddler","label":"Toddler"},{"value":"Kids","label":"Kids"},{"value":"Infant","label":"Infant"}],"example":"Grade School"},{"name":"size","type":"string","required":false,"description":"Only products with this size for sale, in the `size_system` sizing (UK by default): 9, 10.5, kids 10.5c, EU 42.5 or 40 2/3, letter sizes S/M/L/XL, One Size. Each row then carries matched_size and matched_size_price (the lowest ask for THAT size).","on_invalid":"reject","example":"9"},{"name":"size_system","type":"enum","required":false,"description":"Which sizing `size` is written in.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"UK sizes (default, as the site)"},{"value":"eu","label":"EU sizes"},{"value":"us","label":"US sizes"}],"default":"uk","example":"eu"},{"name":"min_price","type":"number","required":false,"description":"Only products with at least one size whose lowest ask (for the delivery country, in the currency) is at least this much. The row's matched_size_price is that size's price; price_from (the cheapest size of the product) can be lower.","on_invalid":"reject","example":100,"minimum":0,"maximum":1000000,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Only products with at least one size whose lowest ask is at most this much (see min_price).","on_invalid":"reject","example":150,"minimum":0,"maximum":1000000,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. price_asc orders by the lowest ask in the delivery area (UK, EU or rest of world), the site's own price sort; there is no descending price order on the site.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's relevance order (default)"},{"value":"price_asc","label":"Lowest asking price first (the matching size's price)"},{"value":"newest","label":"Newest release first"},{"value":"recently_sold","label":"Most sold recently first"}],"default":"relevance","example":"price_asc"},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100.","on_invalid":"reject","default":40,"example":100,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"Page number from 1. The source serves the first 1,000 products of any search only: page × limit cannot pass 1,000 (narrow with filters instead).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: style_code, slug (give it to `product`), url, title, brand, product_type, color, gender, age_category, release_date, delivery_country, currency, price_from (the cheapest size's lowest ask), price_from_size{uk, eu, us}, price_to (the dearest size's lowest ask), sizes_available, size_prices[]{size_id, uk, eu, us, price}, matched_size{uk, eu, us} + matched_size_price (only with a size or price filter, or the price sort), sold_last_28_days, distinct_sellers, categories[]{name, collection}, image. Prices are the search index's figures and can trail the live product page by minutes. meta: total (the index's count), reachable (the first 1,000 only), page, limit, has_more, sort, filters_applied, delivery_country, currency, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"dunk low"}},{"name":"collection","description":"One Laced collection — a brand (nike), a brand series (nike/dunk-low) or a group (best-sellers) — with the same filters, sort and row shape as `search`.","required_params":["collection"],"optional_params":["delivery_country","currency","brand","product_type","color","gender","age_category","size","size_system","min_price","max_price","sort","limit","page"],"params":[{"name":"collection","type":"string","required":true,"description":"A collection as its laced.com path: a brand (nike, adidas, air-jordan, asics, ugg), a brand series (nike/dunk-low, air-jordan/air-jordan-4, asics/asics-gel-kayano-14) or a group (best-sellers, new-in). Every row's categories[].collection can be given here as is; a full laced.com URL works too.","on_invalid":"reject","example":"nike/dunk-low","aliases":["path"]},{"name":"delivery_country","type":"enum","required":false,"description":"The country the item would be delivered to (ISO code, 100 countries; UK is accepted for GB). Laced prices every size per delivery country: EU and US prices include taxes and duties, so the same size costs more there than in the UK (measured: £148 to GB, €235 to DE, $230 to the US).","on_invalid":"reject","allowed_values":[{"value":"AL","label":"AL"},{"value":"AM","label":"AM"},{"value":"AW","label":"AW"},{"value":"AU","label":"AU"},{"value":"AT","label":"AT"},{"value":"BH","label":"BH"},{"value":"BE","label":"BE"},{"value":"BM","label":"BM"},{"value":"BA","label":"BA"},{"value":"BW","label":"BW"},{"value":"BN","label":"BN"},{"value":"BG","label":"BG"},{"value":"KH","label":"KH"},{"value":"CA","label":"CA"},{"value":"KY","label":"KY"},{"value":"CL","label":"CL"},{"value":"CN","label":"CN"},{"value":"CO","label":"CO"},{"value":"CR","label":"CR"},{"value":"HR","label":"HR"},{"value":"CY","label":"CY"},{"value":"CZ","label":"CZ"},{"value":"DK","label":"DK"},{"value":"DO","label":"DO"},{"value":"EE","label":"EE"},{"value":"FK","label":"FK"},{"value":"FI","label":"FI"},{"value":"FR","label":"FR"},{"value":"GF","label":"GF"},{"value":"GE","label":"GE"},{"value":"DE","label":"DE"},{"value":"GI","label":"GI"},{"value":"GR","label":"GR"},{"value":"GL","label":"GL"},{"value":"GP","label":"GP"},{"value":"GU","label":"GU"},{"value":"GG","label":"GG"},{"value":"HK","label":"HK"},{"value":"HU","label":"HU"},{"value":"IS","label":"IS"},{"value":"IN","label":"IN"},{"value":"IE","label":"IE"},{"value":"IM","label":"IM"},{"value":"IL","label":"IL"},{"value":"IT","label":"IT"},{"value":"JP","label":"JP"},{"value":"JE","label":"JE"},{"value":"JO","label":"JO"},{"value":"KZ","label":"KZ"},{"value":"KW","label":"KW"},{"value":"LV","label":"LV"},{"value":"LB","label":"LB"},{"value":"LI","label":"LI"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"MO","label":"MO"},{"value":"MY","label":"MY"},{"value":"MT","label":"MT"},{"value":"MQ","label":"MQ"},{"value":"YT","label":"YT"},{"value":"MD","label":"MD"},{"value":"MC","label":"MC"},{"value":"ME","label":"ME"},{"value":"NL","label":"NL"},{"value":"NC","label":"NC"},{"value":"NZ","label":"NZ"},{"value":"MK","label":"MK"},{"value":"NO","label":"NO"},{"value":"OM","label":"OM"},{"value":"PW","label":"PW"},{"value":"PH","label":"PH"},{"value":"PL","label":"PL"},{"value":"PT","label":"PT"},{"value":"PR","label":"PR"},{"value":"QA","label":"QA"},{"value":"RO","label":"RO"},{"value":"RE","label":"RE"},{"value":"BL","label":"BL"},{"value":"SA","label":"SA"},{"value":"RS","label":"RS"},{"value":"SG","label":"SG"},{"value":"SK","label":"SK"},{"value":"SI","label":"SI"},{"value":"ZA","label":"ZA"},{"value":"KR","label":"KR"},{"value":"ES","label":"ES"},{"value":"SE","label":"SE"},{"value":"CH","label":"CH"},{"value":"TW","label":"TW"},{"value":"TR","label":"TR"},{"value":"UA","label":"UA"},{"value":"AE","label":"AE"},{"value":"GB","label":"GB"},{"value":"US","label":"US"},{"value":"UZ","label":"UZ"},{"value":"VE","label":"VE"},{"value":"VN","label":"VN"},{"value":"VI","label":"VI"},{"value":"ZM","label":"ZM"},{"value":"ZW","label":"ZW"}],"default":"GB","example":"DE","aliases":["country","delivery_location"]},{"name":"currency","type":"enum","required":false,"description":"Currency of every price: GBP, EUR, USD or AED (the site's own four). Default follows the delivery country: GB → GBP, US → USD, AE → AED, an EU country → EUR, anywhere else → GBP.","on_invalid":"reject","allowed_values":[{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"USD","label":"USD"},{"value":"AED","label":"AED"}],"example":"EUR"},{"name":"brand","type":"string","required":false,"description":"Only this brand as the site writes it (Nike, Adidas, Air Jordan, Asics, New Balance, UGG, PUMA, On-Running, HOKA, Lego, Salomon, Crocs, Yeezy, Supreme, POP MART, Pokemon …; case does not matter). An unknown brand returns 0 rows.","on_invalid":"reject","example":"Nike"},{"name":"product_type","type":"enum","required":false,"description":"Only this product type.","on_invalid":"reject","allowed_values":[{"value":"Shoes","label":"Shoes"},{"value":"Toys","label":"Toys"},{"value":"Boots","label":"Boots"},{"value":"Clogs","label":"Clogs"},{"value":"Slippers","label":"Slippers"},{"value":"Sweatshirts & Hoodies","label":"Sweatshirts & Hoodies"},{"value":"T-Shirts","label":"T-Shirts"},{"value":"Figurines","label":"Figurines"},{"value":"Trousers","label":"Trousers"},{"value":"Sandals","label":"Sandals"},{"value":"Trading Card Boxes","label":"Trading Card Boxes"},{"value":"Shorts","label":"Shorts"},{"value":"Watches","label":"Watches"},{"value":"Football Shirts","label":"Football Shirts"},{"value":"Jackets","label":"Jackets"},{"value":"Tracksuits","label":"Tracksuits"},{"value":"Hats","label":"Hats"},{"value":"Games Console","label":"Games Console"},{"value":"Shirts","label":"Shirts"},{"value":"Trading Card Packs","label":"Trading Card Packs"},{"value":"Trading Card Singles","label":"Trading Card Singles"},{"value":"Backpack","label":"Backpack"}],"example":"Shoes","aliases":["category"]},{"name":"color","type":"enum","required":false,"description":"Only this main colour.","on_invalid":"reject","allowed_values":[{"value":"Black","label":"Black"},{"value":"White","label":"White"},{"value":"Grey","label":"Grey"},{"value":"Blue","label":"Blue"},{"value":"Green","label":"Green"},{"value":"Multi-colour","label":"Multi-colour"},{"value":"Beige","label":"Beige"},{"value":"Pink","label":"Pink"},{"value":"Brown","label":"Brown"},{"value":"Cream","label":"Cream"},{"value":"Red","label":"Red"},{"value":"Yellow","label":"Yellow"},{"value":"Purple","label":"Purple"},{"value":"Orange","label":"Orange"},{"value":"Tan","label":"Tan"},{"value":"Teal","label":"Teal"},{"value":"Silver","label":"Silver"},{"value":"Sail","label":"Sail"},{"value":"Burgundy","label":"Burgundy"},{"value":"Gold","label":"Gold"},{"value":"Bone","label":"Bone"},{"value":"Rust","label":"Rust"},{"value":"Copper","label":"Copper"},{"value":"Bronze","label":"Bronze"}],"example":"Black","aliases":["colour"]},{"name":"gender","type":"enum","required":false,"description":"Only products the site tags with this gender. Most products are tagged unisex (24,114 of 31,780 size records), so men / women are narrow.","on_invalid":"reject","allowed_values":[{"value":"men","label":"men"},{"value":"women","label":"women"},{"value":"unisex","label":"unisex"}],"example":"women"},{"name":"age_category","type":"enum","required":false,"description":"Only this age group (Adult, Grade School, Pre School, Toddler, Kids, Infant).","on_invalid":"reject","allowed_values":[{"value":"Adult","label":"Adult"},{"value":"Grade School","label":"Grade School"},{"value":"Pre School","label":"Pre School"},{"value":"Toddler","label":"Toddler"},{"value":"Kids","label":"Kids"},{"value":"Infant","label":"Infant"}],"example":"Grade School"},{"name":"size","type":"string","required":false,"description":"Only products with this size for sale, in the `size_system` sizing (UK by default): 9, 10.5, kids 10.5c, EU 42.5 or 40 2/3, letter sizes S/M/L/XL, One Size. Each row then carries matched_size and matched_size_price (the lowest ask for THAT size).","on_invalid":"reject","example":"9"},{"name":"size_system","type":"enum","required":false,"description":"Which sizing `size` is written in.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"UK sizes (default, as the site)"},{"value":"eu","label":"EU sizes"},{"value":"us","label":"US sizes"}],"default":"uk","example":"eu"},{"name":"min_price","type":"number","required":false,"description":"Only products with at least one size whose lowest ask (for the delivery country, in the currency) is at least this much. The row's matched_size_price is that size's price; price_from (the cheapest size of the product) can be lower.","on_invalid":"reject","example":100,"minimum":0,"maximum":1000000,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Only products with at least one size whose lowest ask is at most this much (see min_price).","on_invalid":"reject","example":150,"minimum":0,"maximum":1000000,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. price_asc orders by the lowest ask in the delivery area (UK, EU or rest of world), the site's own price sort; there is no descending price order on the site.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's relevance order (default)"},{"value":"price_asc","label":"Lowest asking price first (the matching size's price)"},{"value":"newest","label":"Newest release first"},{"value":"recently_sold","label":"Most sold recently first"}],"default":"relevance","example":"price_asc"},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100.","on_invalid":"reject","default":40,"example":100,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"page","type":"integer","required":false,"description":"Page number from 1. The source serves the first 1,000 products of any search only: page × limit cannot pass 1,000 (narrow with filters instead).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: style_code, slug (give it to `product`), url, title, brand, product_type, color, gender, age_category, release_date, delivery_country, currency, price_from (the cheapest size's lowest ask), price_from_size{uk, eu, us}, price_to (the dearest size's lowest ask), sizes_available, size_prices[]{size_id, uk, eu, us, price}, matched_size{uk, eu, us} + matched_size_price (only with a size or price filter, or the price sort), sold_last_28_days, distinct_sellers, categories[]{name, collection}, image. Prices are the search index's figures and can trail the live product page by minutes. meta: total (the index's count), reachable (the first 1,000 only), page, limit, has_more, sort, filters_applied, delivery_country, currency, warnings. data.collection: name, type (Brand / BrandCategory / Group), path, parents[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"collection":"nike/dunk-low"}},{"name":"product","description":"One product, live: every size with its lowest asking price, shipping fee, return fee, whether taxes and duties are included, barcode (GTIN) and listing id, for the chosen delivery country and currency; style code, brand, colour, release year, 28-day sales count, description, images. Give `slug` (from a search row) or `style_code`.","required_params":[],"optional_params":["slug","style_code","delivery_country","currency"],"params":[{"name":"slug","type":"string","required":false,"description":"The product's `slug` from a search row, as is, or its laced.com/products/... URL. Give `slug` or `style_code`.","on_invalid":"reject","example":"nike-dunk-low-grey-fog","aliases":["url","handle"]},{"name":"style_code","type":"string","required":false,"description":"A manufacturer style code (DD1391-103, 1203A537-020, FY5158). Give `slug` or `style_code`.","on_invalid":"reject","example":"DD1391-103","aliases":["sku","mpn"]},{"name":"delivery_country","type":"enum","required":false,"description":"The country the item would be delivered to (ISO code, 100 countries; UK is accepted for GB). Laced prices every size per delivery country: EU and US prices include taxes and duties, so the same size costs more there than in the UK (measured: £148 to GB, €235 to DE, $230 to the US).","on_invalid":"reject","allowed_values":[{"value":"AL","label":"AL"},{"value":"AM","label":"AM"},{"value":"AW","label":"AW"},{"value":"AU","label":"AU"},{"value":"AT","label":"AT"},{"value":"BH","label":"BH"},{"value":"BE","label":"BE"},{"value":"BM","label":"BM"},{"value":"BA","label":"BA"},{"value":"BW","label":"BW"},{"value":"BN","label":"BN"},{"value":"BG","label":"BG"},{"value":"KH","label":"KH"},{"value":"CA","label":"CA"},{"value":"KY","label":"KY"},{"value":"CL","label":"CL"},{"value":"CN","label":"CN"},{"value":"CO","label":"CO"},{"value":"CR","label":"CR"},{"value":"HR","label":"HR"},{"value":"CY","label":"CY"},{"value":"CZ","label":"CZ"},{"value":"DK","label":"DK"},{"value":"DO","label":"DO"},{"value":"EE","label":"EE"},{"value":"FK","label":"FK"},{"value":"FI","label":"FI"},{"value":"FR","label":"FR"},{"value":"GF","label":"GF"},{"value":"GE","label":"GE"},{"value":"DE","label":"DE"},{"value":"GI","label":"GI"},{"value":"GR","label":"GR"},{"value":"GL","label":"GL"},{"value":"GP","label":"GP"},{"value":"GU","label":"GU"},{"value":"GG","label":"GG"},{"value":"HK","label":"HK"},{"value":"HU","label":"HU"},{"value":"IS","label":"IS"},{"value":"IN","label":"IN"},{"value":"IE","label":"IE"},{"value":"IM","label":"IM"},{"value":"IL","label":"IL"},{"value":"IT","label":"IT"},{"value":"JP","label":"JP"},{"value":"JE","label":"JE"},{"value":"JO","label":"JO"},{"value":"KZ","label":"KZ"},{"value":"KW","label":"KW"},{"value":"LV","label":"LV"},{"value":"LB","label":"LB"},{"value":"LI","label":"LI"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"MO","label":"MO"},{"value":"MY","label":"MY"},{"value":"MT","label":"MT"},{"value":"MQ","label":"MQ"},{"value":"YT","label":"YT"},{"value":"MD","label":"MD"},{"value":"MC","label":"MC"},{"value":"ME","label":"ME"},{"value":"NL","label":"NL"},{"value":"NC","label":"NC"},{"value":"NZ","label":"NZ"},{"value":"MK","label":"MK"},{"value":"NO","label":"NO"},{"value":"OM","label":"OM"},{"value":"PW","label":"PW"},{"value":"PH","label":"PH"},{"value":"PL","label":"PL"},{"value":"PT","label":"PT"},{"value":"PR","label":"PR"},{"value":"QA","label":"QA"},{"value":"RO","label":"RO"},{"value":"RE","label":"RE"},{"value":"BL","label":"BL"},{"value":"SA","label":"SA"},{"value":"RS","label":"RS"},{"value":"SG","label":"SG"},{"value":"SK","label":"SK"},{"value":"SI","label":"SI"},{"value":"ZA","label":"ZA"},{"value":"KR","label":"KR"},{"value":"ES","label":"ES"},{"value":"SE","label":"SE"},{"value":"CH","label":"CH"},{"value":"TW","label":"TW"},{"value":"TR","label":"TR"},{"value":"UA","label":"UA"},{"value":"AE","label":"AE"},{"value":"GB","label":"GB"},{"value":"US","label":"US"},{"value":"UZ","label":"UZ"},{"value":"VE","label":"VE"},{"value":"VN","label":"VN"},{"value":"VI","label":"VI"},{"value":"ZM","label":"ZM"},{"value":"ZW","label":"ZW"}],"default":"GB","example":"DE","aliases":["country","delivery_location"]},{"name":"currency","type":"enum","required":false,"description":"Currency of every price: GBP, EUR, USD or AED (the site's own four). Default follows the delivery country: GB → GBP, US → USD, AE → AED, an EU country → EUR, anywhere else → GBP.","on_invalid":"reject","allowed_values":[{"value":"GBP","label":"GBP"},{"value":"EUR","label":"EUR"},{"value":"USD","label":"USD"},{"value":"AED","label":"AED"}],"example":"EUR"}],"returns":"product{product_id, slug, url, style_code, mpn, title, brand, brand_id, colour, product_type, category, release_year, description, fitting_note, sold_last_28_days, delivery_country, currency, lowest_price, lowest_price_size{uk, eu, us}, highest_price, sizes_total, sizes_available, premium_shipping_available, sizes[]{size_id, uk, eu, us, label, gtin, available, price (the lowest ask, standard delivery), shipping_method, shipping_fee, return_fee, discount, price_includes_tax_duties, free_shipping_eligible, listing_id, other_offers[]{shipping_method, price, shipping_fee} (premium delivery where offered)}, images[], affiliate_links}. meta.lowest_check: the source's own lowest/highest size id against ours.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"nike-dunk-low-grey-fog"}},{"name":"suggest","description":"The site's own search suggestions for the start of a query (jordan → jordan 4, jordan 5 …), with the site's popularity score.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a search (two characters or more).","on_invalid":"reject","example":"jordan","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"How many suggestions, 1-20.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":20}],"returns":"rows[]: suggestion, popularity","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"jordan"}}]},{"name":"lacentrale","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"La Centrale France manufacturer vehicle search and detail","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/lacentrale/v1","spec_available":true,"actions":[{"name":"search","description":"Search published France manufacturer pages","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"enum","required":true,"description":"Qualified manufacturer name","on_invalid":"reject","allowed_values":[{"value":"bmw","label":"bmw"},{"value":"peugeot","label":"peugeot"},{"value":"renault","label":"renault"},{"value":"mercedes","label":"mercedes"},{"value":"volkswagen","label":"volkswagen"},{"value":"tesla","label":"tesla"}],"example":"bmw","aliases":["make","q"]},{"name":"page","type":"integer","required":false,"description":"Qualified source page 1 or 2","on_invalid":"reject","default":1,"minimum":1,"maximum":2},{"name":"max_results","type":"integer","required":false,"description":"Return cap within current page","on_invalid":"reject","default":12,"minimum":1,"maximum":23,"aliases":["limit"]}],"returns":"results[],total_results,page,source_page_size,has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"query":"bmw","max_results":3}},{"name":"listing","description":"Meaningful native listing by source ID","required_params":[],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":false,"description":"Numeric source ID from search","on_invalid":"reject","example":"69119972262","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Native HTTPS listing URL alternative","on_invalid":"reject"}],"returns":"listing{listing_id,title,full_title,price,currency,year,mileage_km,images,seller}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"listing_id":"69119972262"}}]},{"name":"lalafo","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"lalafo API — search and read classified ads on lalafo.kg (Kyrgyzstan), lalafo.az (Azerbaijan), lalafo.rs (Serbia) and lalafo.pl (Poland): cars, property, phones and electronics, jobs, services, home goods. Keyword, category, city, seller, price band and the category's own attribute filters (make, year, mileage, gearbox, fuel, rooms ...), four sorts, uncapped counts. Every ad returns its price in the currency the seller chose plus the source's own national-currency conversion, city with coordinates, posting / update / bump times, impression and contact counters, promoted flag, photos and the seller (private or business). Full ad detail adds the attribute table. Logged-out public data.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/lalafo/v1","spec_available":true,"actions":[{"name":"search","description":"Search one lalafo site. Needs `query`, `category_id` or `user_id` (any one); the rest narrow it. Promoted rows are flagged and come first on every page.","required_params":[],"optional_params":["country","query","category_id","city_id","user_id","price_min","price_max","currency","filters","sort","page","per_page","language"],"params":[{"name":"country","type":"enum","required":false,"description":"Which lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.","on_invalid":"reject","allowed_values":[{"value":"kg","label":"Kyrgyzstan — lalafo.kg"},{"value":"az","label":"Azerbaijan — lalafo.az"},{"value":"rs","label":"Serbia — lalafo.rs"},{"value":"pl","label":"Poland — lalafo.pl"}],"default":"kg","example":"kg","aliases":["market","site"]},{"name":"query","type":"string","required":false,"description":"Keywords, matched by the source's own search. Needs `query`, `category_id` or `user_id` (any one is enough).","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords"]},{"name":"category_id","type":"integer","required":false,"description":"Numeric category id from the `categories` action (e.g. kg 1502 = cars for sale, 1343 = laptops). Checked against the source — an unknown id is rejected (the source would silently return the whole site).","on_invalid":"reject","example":1502,"aliases":["category"]},{"name":"city_id","type":"integer","required":false,"description":"Numeric city id from the `cities` action (kg 103184 = Bishkek). Checked against the site's city list.","on_invalid":"reject","example":103184,"aliases":["city"]},{"name":"user_id","type":"integer","required":false,"description":"Only this seller's live ads (the `seller.seller_id` of a row).","on_invalid":"reject","aliases":["seller_id"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, read in `currency` when given, otherwise in the site's national currency (KGS/AZN/RSD/PLN) — ads priced in USD/EUR are compared after the source's own conversion.","on_invalid":"reject","minimum":0,"aliases":["price_from","min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price, same currency rule as `price_min`.","on_invalid":"reject","minimum":0,"aliases":["price_to","max_price"]},{"name":"currency","type":"enum","required":false,"description":"Return every price CONVERTED by the source into this currency (and read price_min/price_max in it). Leave empty to get each ad in the currency its seller chose. kg: KGS, USD · az: AZN, USD · rs: RSD, EUR · pl: PLN.","on_invalid":"reject","allowed_values":[{"value":"KGS","label":"Kyrgyz som"},{"value":"USD","label":"US dollar"},{"value":"AZN","label":"Azerbaijani manat"},{"value":"RSD","label":"Serbian dinar"},{"value":"EUR","label":"Euro"},{"value":"PLN","label":"Polish zloty"}]},{"name":"filters","type":"array","required":false,"description":"Attribute filters of the category, from the `filters` action: '<param_id>:<value_id>' for a list attribute (repeat or use '|' for several values, e.g. '64:2780|2779'), '<param_id>:<from>-<to>' for a range attribute with plain VALUES (e.g. year '62:2018-2022', mileage '56:0-100000'). Needs `category_id`; every id is validated against the category's own definitions.","on_invalid":"reject","example":["64:2780"],"aliases":["parameters","attributes"]},{"name":"sort","type":"enum","required":false,"description":"Order. Promoted (paid) rows always come first on every page, outside this order. On rs and pl a `query` with the default order is ranked SEMANTICALLY by the source (every ad is a match, `match_mode: semantic`, total not exact); any explicit order gives real keyword matches with an exact total.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Source's default (relevance / promoted mix)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"default","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). The source serves at most 10 000 ads per query.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"per_page","type":"integer","required":false,"description":"Ads per page, 1-50 (default 20). Promoted rows (4-17 per page measured) come on top of this number.","on_invalid":"reject","default":20,"minimum":1,"maximum":50,"aliases":["limit","max_results"]},{"name":"language","type":"enum","required":false,"description":"Language of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"ky","label":"Kyrgyz"},{"value":"az","label":"Azerbaijani"},{"value":"sr","label":"Serbian"},{"value":"en","label":"English"},{"value":"pl","label":"Polish"},{"value":"uk","label":"Ukrainian"}],"aliases":["lang"]}],"returns":"country, total_results (the source's figure; stops at 10 000), total_capped, total_is_exact, match_mode (semantic | keyword_or_filter), total_available (the uncapped count, filled only when capped), page, page_count, per_page, returned, promoted_count, page_clamped, has_more, prices_converted_to, query, sort, filters_sent and listings[] with listing_id, country, url, title, description, price, currency (the seller's own: KGS/USD, AZN/USD, RSD/EUR, PLN), price_kind (fixed | negotiable | not_priced), is_negotiable, price_converted, old_price, national_price + national_currency (the source's own conversion, KG), national_old_price, category_id, city, city_id, city_alias, lat, lng, created_at, updated_at, bumped_at, impressions, favorite_count, callers_count, writers_count, promoted, is_premium, label, phone (as the public page publishes it; null when the seller hid it), phone_hidden, chat_disabled, image, image_count, seller{seller_id, name, company_name, is_pro, seller_type (business | private), avatar, response_rate_pct, response_time_s, response_info, is_banned}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"kg","category_id":1502,"sort":"newest"}},{"name":"listing","description":"Full detail of one ad by `listing_id` (+ `country`) or by its lalafo URL (the country is read off the domain). A removed ad, or an id asked under the wrong country, returns NOT_FOUND.","required_params":[],"optional_params":["listing_id","url","country","language"],"params":[{"name":"listing_id","type":"integer","required":false,"description":"Ad id (`listing_id` of a search row).","on_invalid":"reject","example":117332522,"aliases":["id","ad_id"]},{"name":"url","type":"string","required":false,"description":"A lalafo ad URL; its domain sets the country.","on_invalid":"reject","aliases":["listing_url"]},{"name":"country","type":"enum","required":false,"description":"Which lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.","on_invalid":"reject","allowed_values":[{"value":"kg","label":"Kyrgyzstan — lalafo.kg"},{"value":"az","label":"Azerbaijan — lalafo.az"},{"value":"rs","label":"Serbia — lalafo.rs"},{"value":"pl","label":"Poland — lalafo.pl"}],"default":"kg","example":"kg","aliases":["market","site"]},{"name":"language","type":"enum","required":false,"description":"Language of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"ky","label":"Kyrgyz"},{"value":"az","label":"Azerbaijani"},{"value":"sr","label":"Serbian"},{"value":"en","label":"English"},{"value":"pl","label":"Polish"},{"value":"uk","label":"Ukrainian"}],"aliases":["lang"]}],"returns":"the search row shape plus description (full text), images[] (url, thumbnail_url, is_main), attributes[] (param_id, name, value, value_id), email (only when the ad publishes one) and status_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":117332522}},{"name":"seller","description":"A seller's public profile by `user_id` (from a row's `seller.seller_id`). Use `search` with `user_id` for their ads.","required_params":["user_id"],"optional_params":["country","language"],"params":[{"name":"user_id","type":"integer","required":true,"description":"Seller id.","on_invalid":"reject","example":17287932,"aliases":["seller_id"]},{"name":"country","type":"enum","required":false,"description":"Which lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.","on_invalid":"reject","allowed_values":[{"value":"kg","label":"Kyrgyzstan — lalafo.kg"},{"value":"az","label":"Azerbaijan — lalafo.az"},{"value":"rs","label":"Serbia — lalafo.rs"},{"value":"pl","label":"Poland — lalafo.pl"}],"default":"kg","example":"kg","aliases":["market","site"]},{"name":"language","type":"enum","required":false,"description":"Language of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"ky","label":"Kyrgyz"},{"value":"az","label":"Azerbaijani"},{"value":"sr","label":"Serbian"},{"value":"en","label":"English"},{"value":"pl","label":"Polish"},{"value":"uk","label":"Ukrainian"}],"aliases":["lang"]}],"returns":"seller_id, name, about, avatar, member_since, is_pro, seller_type (business | private), has_business_profile, verified, response_rate_pct, response_time_s, response_info, is_banned, is_deleted","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"user_id":17287932}},{"name":"count","description":"How many live ads match a filter set, without downloading them — the source's UNCAPPED number (cars on lalafo.kg: 54 537, where search stops at 10 000). Same filters as `search`.","required_params":[],"optional_params":["country","query","category_id","city_id","user_id","price_min","price_max","currency","filters","language"],"params":[{"name":"country","type":"enum","required":false,"description":"Which lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.","on_invalid":"reject","allowed_values":[{"value":"kg","label":"Kyrgyzstan — lalafo.kg"},{"value":"az","label":"Azerbaijan — lalafo.az"},{"value":"rs","label":"Serbia — lalafo.rs"},{"value":"pl","label":"Poland — lalafo.pl"}],"default":"kg","example":"kg","aliases":["market","site"]},{"name":"query","type":"string","required":false,"description":"Keywords, matched by the source's own search. Needs `query`, `category_id` or `user_id` (any one is enough).","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords"]},{"name":"category_id","type":"integer","required":false,"description":"Numeric category id from the `categories` action (e.g. kg 1502 = cars for sale, 1343 = laptops). Checked against the source — an unknown id is rejected (the source would silently return the whole site).","on_invalid":"reject","example":1502,"aliases":["category"]},{"name":"city_id","type":"integer","required":false,"description":"Numeric city id from the `cities` action (kg 103184 = Bishkek). Checked against the site's city list.","on_invalid":"reject","example":103184,"aliases":["city"]},{"name":"user_id","type":"integer","required":false,"description":"Only this seller's live ads (the `seller.seller_id` of a row).","on_invalid":"reject","aliases":["seller_id"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, read in `currency` when given, otherwise in the site's national currency (KGS/AZN/RSD/PLN) — ads priced in USD/EUR are compared after the source's own conversion.","on_invalid":"reject","minimum":0,"aliases":["price_from","min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price, same currency rule as `price_min`.","on_invalid":"reject","minimum":0,"aliases":["price_to","max_price"]},{"name":"currency","type":"enum","required":false,"description":"Return every price CONVERTED by the source into this currency (and read price_min/price_max in it). Leave empty to get each ad in the currency its seller chose. kg: KGS, USD · az: AZN, USD · rs: RSD, EUR · pl: PLN.","on_invalid":"reject","allowed_values":[{"value":"KGS","label":"Kyrgyz som"},{"value":"USD","label":"US dollar"},{"value":"AZN","label":"Azerbaijani manat"},{"value":"RSD","label":"Serbian dinar"},{"value":"EUR","label":"Euro"},{"value":"PLN","label":"Polish zloty"}]},{"name":"filters","type":"array","required":false,"description":"Attribute filters of the category, from the `filters` action: '<param_id>:<value_id>' for a list attribute (repeat or use '|' for several values, e.g. '64:2780|2779'), '<param_id>:<from>-<to>' for a range attribute with plain VALUES (e.g. year '62:2018-2022', mileage '56:0-100000'). Needs `category_id`; every id is validated against the category's own definitions.","on_invalid":"reject","example":["64:2780"],"aliases":["parameters","attributes"]},{"name":"language","type":"enum","required":false,"description":"Language of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"ky","label":"Kyrgyz"},{"value":"az","label":"Azerbaijani"},{"value":"sr","label":"Serbian"},{"value":"en","label":"English"},{"value":"pl","label":"Polish"},{"value":"uk","label":"Ukrainian"}],"aliases":["lang"]}],"returns":"country, count, filters_sent","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"kg"}},{"name":"categories","description":"The site's category tree with live ad counts — the ids `search` takes. Default: the top two levels; `parent_id` returns one branch, `max_depth` goes deeper.","required_params":[],"optional_params":["country","parent_id","max_depth","language"],"params":[{"name":"country","type":"enum","required":false,"description":"Which lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.","on_invalid":"reject","allowed_values":[{"value":"kg","label":"Kyrgyzstan — lalafo.kg"},{"value":"az","label":"Azerbaijan — lalafo.az"},{"value":"rs","label":"Serbia — lalafo.rs"},{"value":"pl","label":"Poland — lalafo.pl"}],"default":"kg","example":"kg","aliases":["market","site"]},{"name":"parent_id","type":"integer","required":false,"description":"Only this category's subtree.","on_invalid":"reject","example":1501},{"name":"max_depth","type":"integer","required":false,"description":"Levels below the start (1-6).","on_invalid":"reject","default":2,"minimum":1,"maximum":6},{"name":"language","type":"enum","required":false,"description":"Language of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"ky","label":"Kyrgyz"},{"value":"az","label":"Azerbaijani"},{"value":"sr","label":"Serbian"},{"value":"en","label":"English"},{"value":"pl","label":"Polish"},{"value":"uk","label":"Ukrainian"}],"aliases":["lang"]}],"returns":"country, category_count, categories[] with category_id, name, parent_id, depth, path, url_path, ads_count, child_count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"kg"}},{"name":"cities","description":"Every city/town of one lalafo site with its region — the ids `city_id` takes.","required_params":[],"optional_params":["country","language"],"params":[{"name":"country","type":"enum","required":false,"description":"Which lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.","on_invalid":"reject","allowed_values":[{"value":"kg","label":"Kyrgyzstan — lalafo.kg"},{"value":"az","label":"Azerbaijan — lalafo.az"},{"value":"rs","label":"Serbia — lalafo.rs"},{"value":"pl","label":"Poland — lalafo.pl"}],"default":"kg","example":"kg","aliases":["market","site"]},{"name":"language","type":"enum","required":false,"description":"Language of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"ky","label":"Kyrgyz"},{"value":"az","label":"Azerbaijani"},{"value":"sr","label":"Serbian"},{"value":"en","label":"English"},{"value":"pl","label":"Polish"},{"value":"uk","label":"Ukrainian"}],"aliases":["lang"]}],"returns":"country, city_count, cities[] with city_id, name, alias, region_id, region_name, featured","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"rs"}},{"name":"filters","description":"The attribute filters one category offers (make, model, year, mileage, gearbox, rooms, condition ...) with their ids and value ids — what `search` `filters` takes.","required_params":["category_id"],"optional_params":["country","language"],"params":[{"name":"category_id","type":"integer","required":true,"description":"Category id.","on_invalid":"reject","example":1502,"aliases":["category"]},{"name":"country","type":"enum","required":false,"description":"Which lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.","on_invalid":"reject","allowed_values":[{"value":"kg","label":"Kyrgyzstan — lalafo.kg"},{"value":"az","label":"Azerbaijan — lalafo.az"},{"value":"rs","label":"Serbia — lalafo.rs"},{"value":"pl","label":"Poland — lalafo.pl"}],"default":"kg","example":"kg","aliases":["market","site"]},{"name":"language","type":"enum","required":false,"description":"Language of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"ky","label":"Kyrgyz"},{"value":"az","label":"Azerbaijani"},{"value":"sr","label":"Serbian"},{"value":"en","label":"English"},{"value":"pl","label":"Polish"},{"value":"uk","label":"Ukrainian"}],"aliases":["lang"]}],"returns":"country, category_id, params[] (param_id, name, alias, kind, is_range, is_multi_select, filter_syntax, values[] {value_id, value, alias}), currencies, source_sorts","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":1502}},{"name":"suggest","description":"The site's own search suggestions for a partial query, each pointing at the category it belongs to.","required_params":["query"],"optional_params":["country","language"],"params":[{"name":"query","type":"string","required":true,"description":"Partial text.","on_invalid":"reject","example":"iphon","aliases":["q"]},{"name":"country","type":"enum","required":false,"description":"Which lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.","on_invalid":"reject","allowed_values":[{"value":"kg","label":"Kyrgyzstan — lalafo.kg"},{"value":"az","label":"Azerbaijan — lalafo.az"},{"value":"rs","label":"Serbia — lalafo.rs"},{"value":"pl","label":"Poland — lalafo.pl"}],"default":"kg","example":"kg","aliases":["market","site"]},{"name":"language","type":"enum","required":false,"description":"Language of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"ky","label":"Kyrgyz"},{"value":"az","label":"Azerbaijani"},{"value":"sr","label":"Serbian"},{"value":"en","label":"English"},{"value":"pl","label":"Polish"},{"value":"uk","label":"Ukrainian"}],"aliases":["lang"]}],"returns":"country, query, suggestions[] with text, category_id, category_path, usage_count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}}]},{"name":"lamoda","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Lamoda API scraper — lamoda.ru, Russia's largest fashion e-commerce site: keyword search, category listings, full product cards (price and struck price, per-size stock, attributes, seller) and customer reviews. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/lamoda/v1","spec_available":true,"actions":[{"name":"search","description":"Search the whole Lamoda catalogue by keyword and/or category, brand, gender and colour (at least one of query, category_id or brand_id). Rows carry the price, struck price, per-size stock (uncapped on this surface), colours and category.","required_params":[],"optional_params":["query","category_id","brand_id","gender","color_id","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Search words, Russian or Latin (brand names work: 'кеды nike'). Case does not matter.","on_invalid":"reject","example":"кеды","aliases":["q","keyword","text"]},{"name":"category_id","type":"integer","required":false,"description":"Optional Lamoda category id (the number in /c/<id>/… URLs, or category_id / category_ids from any row), e.g. 15 = women's shoes, 129 = low sneakers.","on_invalid":"reject","example":15,"aliases":["category"]},{"name":"brand_id","type":"integer","required":false,"description":"Optional Lamoda brand id (brand_id from any row), e.g. 1163 = adidas Originals. One per call.","on_invalid":"reject","example":1163,"aliases":["brand"]},{"name":"gender","type":"enum","required":false,"description":"Optional: only products for this audience (the site's own gender segment).","on_invalid":"reject","allowed_values":[{"value":"women","label":"women"},{"value":"men","label":"men"},{"value":"girls","label":"girls"},{"value":"boys","label":"boys"},{"value":"children","label":"children"},{"value":"unisex","label":"unisex"}],"example":"women","aliases":["genders"]},{"name":"color_id","type":"integer","required":false,"description":"Optional Lamoda colour id, e.g. 615 = white, 647 = beige.","on_invalid":"reject","example":615,"aliases":["colour_id","color"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). The source stops at result 10 000; a later page is refused.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-50 (the source's own maximum).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":50}],"returns":"results[{position, product_id (Lamoda SKU), title, model, brand, brand_id, gender, url, image, images[], price (what the buyer pays now, RUB), was_price (struck original, only when discounted), discount_percent (computed from the two prices), discount_percent_site (the site's own figure), price_type (original | onsite | onsite_promo …, the source's own type of the price applied), promotion{type, price, percent, ends_at} (a timed promotion already in price), promo_code_price{price, promocode, percent, ends_at} (only with a code, never in price), price_display, currency, available, stock_quantity (sum over sizes), stock_cap (null = not capped), sizes[{size, size_system, brand_size, brand_size_system, size_sku, stock_quantity, stock_capped, available}], colours[], category_id, category_ids[], tags[], badges[]}], count, page, limit, total_results (the source's own figure), last_page, has_more, query, applied_filters","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"кеды","limit":20}},{"name":"category","description":"List one Lamoda category, 60 rows a page, with the site's sorts, the on-sale filter, an optional keyword, brand and gender. Rows add rating, review count and seasons; per-size stock on this surface is capped at 10 by the source (stock_capped says when).","required_params":["category_id"],"optional_params":["query","brand_id","gender","on_sale","sort","page"],"params":[{"name":"category_id","type":"integer","required":true,"description":"Lamoda category id (the number in /c/<id>/… URLs), e.g. 15 = women's shoes, 17 = women's clothing.","on_invalid":"reject","example":15,"aliases":["category"]},{"name":"query","type":"string","required":false,"description":"Optional keyword inside the category.","on_invalid":"reject","example":"кеды","aliases":["q","keyword","text"]},{"name":"brand_id","type":"integer","required":false,"description":"Optional Lamoda brand id (brand_id from any row), e.g. 1163 = adidas Originals. One per call.","on_invalid":"reject","example":1163,"aliases":["brand"]},{"name":"gender","type":"enum","required":false,"description":"Optional: only products for this audience (the site's own gender segment).","on_invalid":"reject","allowed_values":[{"value":"women","label":"women"},{"value":"men","label":"men"},{"value":"girls","label":"girls"},{"value":"boys","label":"boys"},{"value":"children","label":"children"},{"value":"unisex","label":"unisex"}],"example":"women","aliases":["genders"]},{"name":"on_sale","type":"boolean","required":false,"description":"true = only discounted products, false = only full-price products.","on_invalid":"reject","example":true,"aliases":["is_sale"]},{"name":"sort","type":"enum","required":false,"description":"Order of the listing, the site's own sorts. The site orders by its own price key, so with price_asc / price_desc a row can sit out of order on the published price (3 of 59 steps on a 2026-10-15 page).","on_invalid":"reject","allowed_values":[{"value":"popular","label":"the site's default order"},{"value":"new","label":"newest first"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"dearest first"},{"value":"discount","label":"biggest discount first"},{"value":"new_sale","label":"newest discounts first"}],"default":"popular","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Listing page of 60 rows (1-167; the source repeats page 167 after that).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":167}],"returns":"results[{position, product_id (Lamoda SKU), title, model, brand, brand_id, gender, url, image, images[], price (what the buyer pays now, RUB), was_price (struck original, only when discounted), discount_percent (computed from the two prices), discount_percent_site (the site's own figure), price_type (original | onsite | onsite_promo …, the source's own type of the price applied), promotion{type, price, percent, ends_at} (a timed promotion already in price), promo_code_price{price, promocode, percent, ends_at} (only with a code, never in price), price_display, currency, available, stock_quantity (sum over sizes), stock_cap (null = not capped), sizes[{size, size_system, brand_size, brand_size_system, size_sku, stock_quantity, stock_capped, available}], colours[], category_id, category_ids[], tags[], badges[], is_returnable, rating, rating_scale, review_count, seasons[], seller_id, stock_capped, sizes_from_other_products[] (sibling SKUs whose sizes the listing merged in; each size carries its own product_id)}], count, page, total_pages, total_results, has_more, page_clamped, sort_applied, category{id, name}, applied_filters","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":15,"sort":"price_asc"}},{"name":"product","description":"One full Lamoda product card by SKU or URL: title, brand, supplier article, description, attributes, price and struck price, every size with its stock (the card caps stock at 20 per size), colours, season, collection, category path, rating, review and question counts, seller and its legal owner.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Lamoda SKU, exactly as search/category rows return it in product_id (e.g. RTLAFQ471301).","on_invalid":"reject","example":"RTLAFQ471301","aliases":["sku","id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a lamoda.ru product URL (/p/<sku>/…).","on_invalid":"reject","example":"https://www.lamoda.ru/p/rtlafq471301/shoes-adidasoriginals-kedy/","aliases":["product_url"]}],"returns":"product{product_id, title, model, seo_title, brand, brand_id, supplier_article, gender, product_type, url, images[], description, price, was_price, discount_percent, discount_percent_site, price_type, promotion{type, price, percent, ends_at}, promo_code_price{price, promocode, percent, ends_at}, price_display, currency, available, stock_quantity, stock_cap, stock_capped, sizes[{size, size_system, brand_size, brand_size_system, size_sku, stock_quantity, stock_capped, available, other_systems[]}], size_scale, colours[], seasons[], collection, attributes[{key, name, value}], category{id, name}, breadcrumbs[{id, name, slug}], category_ids[], rating, rating_scale, review_count, question_count, photo_review_count, tags[], badges[], is_returnable, is_tryon, seller{id, name, business_model, is_lamoda}, legal_owner{company_name, shop_name, business_model, tax_id, registration_number, country, city, address, postcode, description, terms, delivery_terms}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"RTLAFQ471301"}},{"name":"reviews","description":"Customer reviews of one Lamoda product, paged: star rating, text, author's display name, date, the size bought, size fit, likes and photos.","required_params":["product_id"],"optional_params":["sort","direction","page","limit"],"params":[{"name":"product_id","type":"string","required":true,"description":"Lamoda SKU (product_id from search/category/product).","on_invalid":"reject","example":"RTLAFQ471501","aliases":["sku","id"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"date","label":"by date"},{"value":"rating","label":"by star rating"},{"value":"likes","label":"by likes"},{"value":"relevance","label":"the site's relevance ranking"}],"default":"date","example":"date"},{"name":"direction","type":"enum","required":false,"description":"Sort direction.","on_invalid":"reject","allowed_values":[{"value":"desc","label":"descending"},{"value":"asc","label":"ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"Review page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-50.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50}],"returns":"reviews[{review_id, rating, text, author, created_at, size_bought, size_sku, purchase_status, colour, is_bought, is_verified, like_count, dislike_count, photos[], size_fit, width_fit}], count, page, limit, total_reviews, total_photos, has_more, product_id, sort_applied","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"RTLAFQ471501"}}]},{"name":"landwirt","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Landwirt.com API — live agricultural machinery and tractor listings from Austria, Germany and Switzerland's farm-machinery marketplace: ~1,300 dealers plus private classified ads. Search by manufacturer, model, category, year of construction, operating hours, horsepower, price band, condition (used / demo / new / rental) and seller country and region; then pull one listing in full: price net and gross with its VAT rate, the equipment list, the dealer's technical fields, every photo, the description, and the dealer's address, rating and profile. Plus the live category tree with exact counts, manufacturer lists and the dealer directory. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/landwirt/v1","spec_available":true,"actions":[{"name":"search","description":"Search the dealer market or the private classifieds with the filters the source applies natively: free text, category, sub-category, manufacturer, condition, year of construction, operating hours, horsepower, price band, seller country and region. 1-100 rows a page. 🔴 The source's total stops at 10,000 (`total_is_capped`) and it serves at most 10,000 rows per query; exact per-category counts come from `categories`.","required_params":[],"optional_params":["listing_type","query","group_id","category_id","subcategory_id","manufacturer_id","condition","year_min","year_max","operating_hours_min","operating_hours_max","power_hp_min","power_hp_max","price_min","price_max","country","region","sort","page","limit","include_facets","language"],"params":[{"name":"listing_type","type":"enum","required":false,"description":"Which side of the marketplace to read. 'dealer' = the machinery market of ~1,300 commercial dealers (used, demo, new and rental machines; the bulk of the machinery). 'private' = private classified ads; that index also carries livestock, feed and jobs, so pass group_id=1 for farm machinery only.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealer listings — the machinery market (index `gmm`): used, demo, new and rental machines from ~1,300 commercial dealers"},{"value":"private","label":"Private classified ads (index `classifieds`) — mostly private sellers; this index also carries livestock, feed and jobs, so scope it with group_id"}],"default":"dealer","example":"dealer","aliases":["source","index"]},{"name":"query","type":"string","required":false,"description":"Free text as typed into the site's search box: a manufacturer, a model, a machine type ('Mähdrescher', 'Rundballenpresse') or any word in the listing.","on_invalid":"reject","example":"fendt 724","aliases":["q","keyword","search"]},{"name":"group_id","type":"enum","required":false,"description":"Top-level market group. Use 1 (agricultural machinery) to keep livestock, feed and jobs out of a private-index search.","on_invalid":"reject","allowed_values":[{"value":"1","label":"Landtechnik — agricultural machinery (tractors, harvesting, tillage, …)"},{"value":"2","label":"Forsttechnik — forestry machinery"},{"value":"3","label":"Futtermittel — feed (private index only)"},{"value":"4","label":"Tiermarkt — livestock (private index only)"},{"value":"5","label":"Direktvermarktung — farm-gate produce"},{"value":"6","label":"Lohnarbeit und Jobs — contract work and jobs (private index only)"},{"value":"7","label":"Kommunaltechnik — municipal machinery"},{"value":"8","label":"Bautechnik — construction machinery"},{"value":"9","label":"PKW / LKW / Moped — cars, trucks, mopeds"},{"value":"10","label":"Realitätenmarkt — real estate (private index only)"},{"value":"11","label":"Sonstiges — other"}],"example":"1"},{"name":"category_id","type":"integer","required":false,"description":"Category id from the `categories` action (e.g. 1 = Traktoren / tractors).","on_invalid":"reject","example":1,"minimum":1},{"name":"subcategory_id","type":"integer","required":false,"description":"Sub-category id from the `categories` action (e.g. 24 = Standard Traktoren).","on_invalid":"reject","example":24,"minimum":1},{"name":"manufacturer_id","type":"integer","required":false,"description":"Manufacturer id from the `manufacturers` action (e.g. 385 = Fendt). Search rows carry the same id as `manufacturer_id`.","on_invalid":"reject","example":385,"minimum":1,"aliases":["brand_id"]},{"name":"condition","type":"enum","required":false,"description":"Dealer listings only: used, demo, new or rental. Private ads have no such field and the parameter is rejected for listing_type=private.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used machine (Gebrauchtmaschine) — type 0"},{"value":"demo","label":"Ex-demonstration machine (Vorführmaschine) — type 1"},{"value":"new","label":"New machine (Neumaschine) — type 2"},{"value":"rental","label":"Rental machine (Mietmaschine) — type 3"}],"example":"used"},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction (inclusive).","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction (inclusive).","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100},{"name":"operating_hours_min","type":"integer","required":false,"description":"Fewest operating hours (inclusive).","on_invalid":"reject","example":0,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Most operating hours (inclusive). Any hours filter returns only listings that state their hours (the source stores 'not given' as 0).","on_invalid":"reject","example":3000,"minimum":0,"aliases":["hours_max"]},{"name":"power_hp_min","type":"integer","required":false,"description":"Lowest engine power in horsepower (PS), inclusive.","on_invalid":"reject","example":100,"minimum":0,"aliases":["ps_min"]},{"name":"power_hp_max","type":"integer","required":false,"description":"Highest engine power in horsepower (PS), inclusive. Any power filter returns only listings that state their power.","on_invalid":"reject","example":200,"minimum":0,"aliases":["ps_max"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in EUR (inclusive). 🔴 The source compares the price as the dealer typed it — net for dealers who enter net prices — so a row's gross `price` can exceed a bound by up to the VAT rate (measured: price_max=9 returned 3 rows at 9.52 gross / 8 net out of 11).","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in EUR (inclusive), compared like price_min. Any price filter excludes price-on-request listings (the source stores them as 0 and would otherwise mix them in); placeholder prices of 1 € stay in, flagged price_symbolic.","on_invalid":"reject","example":50000,"minimum":0},{"name":"country","type":"string","required":false,"description":"Seller country, ISO-3166 two-letter code (AT, DE, CH, IT, SI, …). A code with no listings is an honest empty answer (total 0), never the whole catalogue.","on_invalid":"reject","example":"AT","value_pattern":"[A-Za-z]{2}","aliases":["country_code"]},{"name":"region","type":"string","required":false,"description":"Region / federal state NAME as the source spells it (Bayern, Oberösterreich, Steiermark, Bern …), together with `country`. The `categories` action lists the regions per country with counts.","on_invalid":"reject","example":"Bayern","aliases":["state"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's default order (premium placement, then recency)"},{"value":"newest","label":"Newest listing first"},{"value":"oldest","label":"Oldest listing first"},{"value":"price_asc","label":"Cheapest first — 🔴 placeholder prices of 1 € sort first, see price_symbolic"},{"value":"price_desc","label":"Most expensive first"},{"value":"year_desc","label":"Newest year of construction first"},{"value":"year_asc","label":"Oldest year of construction first"},{"value":"hours_asc","label":"Fewest operating hours first"},{"value":"hours_desc","label":"Most operating hours first"},{"value":"power_desc","label":"Most horsepower first"},{"value":"power_asc","label":"Least horsepower first"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Page number. The source serves at most 10,000 rows per query (page × limit ≤ 10,000; page 501 at limit 20 is refused), so narrow instead of paging deeper.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 6-100 (the source refuses fewer than 6).","on_invalid":"reject","default":20,"example":20,"minimum":6,"maximum":100},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the live facet counts for this query (manufacturers, categories, countries/regions, condition). Adds ~30 KB.","on_invalid":"reject","default":false,"example":false},{"name":"language","type":"enum","required":false,"description":"Language of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German labels (the site's main language)"},{"value":"en","label":"English labels"},{"value":"fr","label":"French labels"},{"value":"it","label":"Italian labels"}],"default":"de","example":"de","aliases":["lang"]}],"returns":"listings[]: listing_id, listing_type (dealer|private), url, title, manufacturer, manufacturer_id, model, group, group_id, category, category_id, subcategory, subcategory_id, condition (used|demo|new|rental|private_classified), condition_label, year, operating_hours, operating_hours_unit, power_hp, power_kw, mileage, mileage_unit, price (the gross price the site prints as its headline), currency, price_net, price_gross, price_entered_as (net|gross — which one the dealer typed), vat (included|not_applicable), vat_text, vat_rate_pct, price_on_request, price_previous, discount_pct, price_symbolic (true when the price is below 10 — dealers type 1 € as 'ask us'), price_converted (true when a non-euro dealer's price was converted to EUR by the source), reserved, auction, seller_id, seller_name, seller_is_dealer, location_postcode, location_city, location_country_code, location_lat, location_lng, image, image_count, has_video, description_preview, created_at (private ads; null for dealer rows) and price_option (private ads: 'Preis', 'VB', 'Preis auf Anfrage'). meta: total, total_is_capped, pagination{page, limit, last_page, has_more, retrievable_max}, filters_applied, warnings, facets (when include_facets).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"fendt","subcategory_id":24,"year_min":2015,"sort":"newest"}},{"name":"detail","description":"One listing in full by its id: manufacturer, model and series, year, operating hours, hp and kW, price net and gross with the VAT rate and the previous price, the full equipment list grouped the way the source groups it, every technical field the dealer typed (tyres, tread depth, spool valves …), all photos, the description, the location, and the seller block (dealer address, homepage, rating, contact person, phone as the source masks it). Private ads return the seller's own price in the seller's own currency next to the source's EUR value.","required_params":["listing_id"],"optional_params":["listing_type","language"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The `listing_id` of a search row, passed as is.","on_invalid":"reject","example":"7652733","value_pattern":"[0-9]{1,10}","aliases":["id","offer_id"]},{"name":"listing_type","type":"enum","required":false,"description":"The `listing_type` of the search row. If omitted, the dealer market is tried first and then the private index (one extra request when the id is a private ad).","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealer listings — the machinery market (index `gmm`): used, demo, new and rental machines from ~1,300 commercial dealers"},{"value":"private","label":"Private classified ads (index `classifieds`) — mostly private sellers; this index also carries livestock, feed and jobs, so scope it with group_id"}],"example":"dealer","aliases":["source","index"]},{"name":"language","type":"enum","required":false,"description":"Language of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German labels (the site's main language)"},{"value":"en","label":"English labels"},{"value":"fr","label":"French labels"},{"value":"it","label":"Italian labels"}],"default":"de","example":"de","aliases":["lang"]}],"returns":"listing{} with the search-row fields plus model_series, reference_number, description, equipment[{group, value}], specs[{key, label, value}], images[], location{}, seller{}, contact{} (dealer listings), services[], and for private ads price_eur, price_option, created_at, updated_at.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"7652733","listing_type":"dealer"}},{"name":"categories","description":"The live category tree (group → category → sub-category) with exact listing counts for the dealer market or the private index — these counts are NOT capped at 10,000 like a search total — plus the condition split and the countries with their regions and counts. Ids feed `search`'s category_id / subcategory_id / group_id / region.","required_params":[],"optional_params":["listing_type","query","country","language"],"params":[{"name":"listing_type","type":"enum","required":false,"description":"Which side of the marketplace to read. 'dealer' = the machinery market of ~1,300 commercial dealers (used, demo, new and rental machines; the bulk of the machinery). 'private' = private classified ads; that index also carries livestock, feed and jobs, so pass group_id=1 for farm machinery only.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealer listings — the machinery market (index `gmm`): used, demo, new and rental machines from ~1,300 commercial dealers"},{"value":"private","label":"Private classified ads (index `classifieds`) — mostly private sellers; this index also carries livestock, feed and jobs, so scope it with group_id"}],"default":"dealer","example":"dealer","aliases":["source","index"]},{"name":"query","type":"string","required":false,"description":"Free text as typed into the site's search box: a manufacturer, a model, a machine type ('Mähdrescher', 'Rundballenpresse') or any word in the listing.","on_invalid":"reject","example":"fendt 724","aliases":["q","keyword","search"]},{"name":"country","type":"string","required":false,"description":"Seller country, ISO-3166 two-letter code (AT, DE, CH, IT, SI, …). A code with no listings is an honest empty answer (total 0), never the whole catalogue.","on_invalid":"reject","example":"AT","value_pattern":"[A-Za-z]{2}","aliases":["country_code"]},{"name":"language","type":"enum","required":false,"description":"Language of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German labels (the site's main language)"},{"value":"en","label":"English labels"},{"value":"fr","label":"French labels"},{"value":"it","label":"Italian labels"}],"default":"de","example":"de","aliases":["lang"]}],"returns":"categories[] (tree: id, name, slug, level, parent_id, count, children[]), conditions[], countries[{country_code, name, count, regions[]}].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_type":"dealer"}},{"name":"manufacturers","description":"Manufacturers with live listing counts, optionally inside one category or sub-category — the ids `search` takes as manufacturer_id. 🔴 The source lists at most the 69 biggest manufacturers for a scope (`meta.truncated`); narrow by category to reach the long tail.","required_params":[],"optional_params":["listing_type","category_id","subcategory_id","query","country","language"],"params":[{"name":"listing_type","type":"enum","required":false,"description":"Which side of the marketplace to read. 'dealer' = the machinery market of ~1,300 commercial dealers (used, demo, new and rental machines; the bulk of the machinery). 'private' = private classified ads; that index also carries livestock, feed and jobs, so pass group_id=1 for farm machinery only.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealer listings — the machinery market (index `gmm`): used, demo, new and rental machines from ~1,300 commercial dealers"},{"value":"private","label":"Private classified ads (index `classifieds`) — mostly private sellers; this index also carries livestock, feed and jobs, so scope it with group_id"}],"default":"dealer","example":"dealer","aliases":["source","index"]},{"name":"category_id","type":"integer","required":false,"description":"Category id from the `categories` action (e.g. 1 = Traktoren / tractors).","on_invalid":"reject","example":1,"minimum":1},{"name":"subcategory_id","type":"integer","required":false,"description":"Sub-category id from the `categories` action (e.g. 24 = Standard Traktoren).","on_invalid":"reject","example":24,"minimum":1},{"name":"query","type":"string","required":false,"description":"Free text as typed into the site's search box: a manufacturer, a model, a machine type ('Mähdrescher', 'Rundballenpresse') or any word in the listing.","on_invalid":"reject","example":"fendt 724","aliases":["q","keyword","search"]},{"name":"country","type":"string","required":false,"description":"Seller country, ISO-3166 two-letter code (AT, DE, CH, IT, SI, …). A code with no listings is an honest empty answer (total 0), never the whole catalogue.","on_invalid":"reject","example":"AT","value_pattern":"[A-Za-z]{2}","aliases":["country_code"]},{"name":"language","type":"enum","required":false,"description":"Language of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German labels (the site's main language)"},{"value":"en","label":"English labels"},{"value":"fr","label":"French labels"},{"value":"it","label":"Italian labels"}],"default":"de","example":"de","aliases":["lang"]}],"returns":"manufacturers[{manufacturer_id, name, slug, count}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":1}},{"name":"dealer","description":"One dealer's profile: address, region, country, coordinates, homepage, phone as the source masks it, year on Landwirt.com, listings online, rating and the reviews the page shows, opening hours, contact persons, other branches and awards.","required_params":["dealer_id"],"optional_params":["language"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"Dealer id: `seller_id` of a dealer search row, `seller.dealer_id` of a detail, or `dealer_id` of `dealers`.","on_invalid":"reject","example":"3561","value_pattern":"[0-9]{1,10}","aliases":["seller_id","firm_id"]},{"name":"language","type":"enum","required":false,"description":"Language of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German labels (the site's main language)"},{"value":"en","label":"English labels"},{"value":"fr","label":"French labels"},{"value":"it","label":"Italian labels"}],"default":"de","example":"de","aliases":["lang"]}],"returns":"dealer{dealer_id, name, url, street, postcode, city, region, country, country_code, lat, lng, homepage, phone_masked, description, on_landwirt_since, listings_online, review_rating, reviews[], opening_hours[], services[], other_branches[], contacts[], awards[], logo, more_listings[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"dealer_id":"3561"}},{"name":"dealers","description":"The dealer directory, 1-100 dealers a page, optionally by country or by part of the name, with address, coordinates and listings online.","required_params":[],"optional_params":["country","query","page","limit","language"],"params":[{"name":"country","type":"enum","required":false,"description":"Dealer country, ISO-3166 two-letter code (the countries the directory itself lists).","on_invalid":"reject","allowed_values":[{"value":"AT","label":"AT"},{"value":"BA","label":"BA"},{"value":"BE","label":"BE"},{"value":"BG","label":"BG"},{"value":"CH","label":"CH"},{"value":"CZ","label":"CZ"},{"value":"DE","label":"DE"},{"value":"DK","label":"DK"},{"value":"EE","label":"EE"},{"value":"FR","label":"FR"},{"value":"GB","label":"GB"},{"value":"HR","label":"HR"},{"value":"HU","label":"HU"},{"value":"IT","label":"IT"},{"value":"LV","label":"LV"},{"value":"NL","label":"NL"},{"value":"NO","label":"NO"},{"value":"PL","label":"PL"},{"value":"RO","label":"RO"},{"value":"RS","label":"RS"},{"value":"SE","label":"SE"},{"value":"SI","label":"SI"},{"value":"SK","label":"SK"},{"value":"UA","label":"UA"}],"example":"AT","aliases":["country_code"]},{"name":"query","type":"string","required":false,"description":"Part of the dealer's name.","on_invalid":"reject","example":"baywa","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"Page number. The source serves at most 10,000 rows per query (page × limit ≤ 10,000; page 501 at limit 20 is refused), so narrow instead of paging deeper.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 6-100 (the source refuses fewer than 6).","on_invalid":"reject","default":20,"example":20,"minimum":6,"maximum":100},{"name":"language","type":"enum","required":false,"description":"Language of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German labels (the site's main language)"},{"value":"en","label":"English labels"},{"value":"fr","label":"French labels"},{"value":"it","label":"Italian labels"}],"default":"de","example":"de","aliases":["lang"]}],"returns":"dealers[{dealer_id, name, url, street, postcode, city, region, country, country_code, lat, lng, listings_online, on_landwirt_since, is_premium, logo}]; meta.total, meta.pagination.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"AT"}}]},{"name":"lazada","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Lazada Product API — full product detail from the six Southeast Asian Lazada marketplaces (Singapore, Malaysia, Thailand, Indonesia, Vietnam, Philippines), plus item-id discovery from Lazada's own product feed. Keyword search is NOT offered: Lazada's listing surface answers 4 calls in 10 and we will not sell that","version":"2.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/lazada/v1","spec_available":true,"actions":[{"name":"product","description":"Full product detail for one Lazada item id: title, numeric price with the currency and the exact string Lazada displays, brand, seller id, the full 3-level category path, description as clean text and as the original HTML, the whole image gallery, the product video where one exists, every SKU and variant axis, schema.org sku/mpn, the return-policy code and Lazada's per-order purchase limit. Measured 2026-10-06 over 37 live products from all six marketplaces and six currencies: 20 of those field groups arrived on 37/37, brand on 35/37 (two were genuinely unbranded), variants on 27/37 and a video on 12/37. 🔴 Lazada does NOT publish rating, review count, seller NAME, list price, discount or stock quantity on this document — those exist only on its listing surface, which this API does not offer, so they come back null and are never guessed at. A dead or withdrawn item id returns NOT_FOUND (Lazada answers 404 with its 'no longer available' page); it is not a block and retrying will not change it.","required_params":["itemId"],"optional_params":["country"],"params":[{"name":"itemId","type":"string","required":true,"description":"Lazada item id — the digits in a product URL (…-i3492111551.html) or an `item_id` from `catalog_ids`. A whole product URL is accepted too. 🔴 Lazada item ids EXPIRE: measured 2026-10-06, 12 of 13 resolvable ids that were live 30 days earlier were still live, but ids taken from Lazada's own 15-month-old product feed were dead on 18-75 % of fetches depending on the storefront. Take a fresh id from `catalog_ids` rather than reusing an old one; a dead id comes back as NOT_FOUND, never as a block.","on_invalid":"reject","example":"3478876886","aliases":["item_id","id","productId","product_id"]},{"name":"country","type":"enum","required":false,"description":"Lazada storefront to query — each is a separate marketplace with its own catalogue, sellers and currency. Default sg.","on_invalid":"reject","allowed_values":[{"value":"sg","label":"Singapore — lazada.sg (SGD)"},{"value":"my","label":"Malaysia — lazada.com.my (MYR)"},{"value":"th","label":"Thailand — lazada.co.th (THB)"},{"value":"id","label":"Indonesia — lazada.co.id (IDR)"},{"value":"vn","label":"Vietnam — lazada.vn (VND)"},{"value":"ph","label":"Philippines — lazada.com.ph (PHP)"}],"default":"sg","example":"sg"}],"returns":"product{} — one product object. `price` is a NUMBER and `price_display` keeps Lazada's localised string (IDR and VND have no minor unit, so `Rp296.000` is 296000, not 296). `seller` is a nested object whose `name` is null: Lazada leaves it empty on this document. `rating`, `review_count`, `rating_scale`, `list_price`, `discount_percent`, `stock_quantity` and `sold_count` are null for the same reason and are NEVER back-filled from anywhere else.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"itemId":"3478876886","country":"sg"}},{"name":"catalog_ids","description":"Item ids straight out of Lazada's OWN published product feed, so a caller with no id can get one. It is the `sitemap-products-order-last-N-days-morethan0` feed the storefront publishes for search engines: a second-level index of leaves, each leaf exactly 10 000 canonical product URLs. `page` picks the leaf, and `offset`/`limit` slice inside it. Measured 2026-10-06: sg 235 leaves (≈2.34 M ids), my 600 (≈6.00 M), th 762 (≈7.61 M), vn 241 (≈2.40 M), ph 627 (≈6.26 M), id 1308 (≈13.08 M); leaves are disjoint. 🔴 READ `sitemap_lastmod` BEFORE TRUSTING THE NAME. The feed says 'last 30 days' but every URL in it carries one single lastmod — the day Lazada regenerated the file — and on 2026-10-06 that was today for Indonesia and 2025-07 for the other five storefronts. So a share of these ids is already withdrawn: measured dead rate (n=12 per storefront, fetched through `product`) id 0 %, my 25 %, th 42 %, ph 58 %, sg 82 %, vn 83 %. Every response repeats that figure in `dead_id_rate_measured`. This action is NOT a search: it cannot be filtered by keyword, price or category, it is ordered the way Lazada orders its feed, and it returns no product data — only the id and the canonical URL.","required_params":[],"optional_params":["country","page","limit","offset"],"params":[{"name":"country","type":"enum","required":false,"description":"Lazada storefront to query — each is a separate marketplace with its own catalogue, sellers and currency. Default sg.","on_invalid":"reject","allowed_values":[{"value":"sg","label":"Singapore — lazada.sg (SGD)"},{"value":"my","label":"Malaysia — lazada.com.my (MYR)"},{"value":"th","label":"Thailand — lazada.co.th (THB)"},{"value":"id","label":"Indonesia — lazada.co.id (IDR)"},{"value":"vn","label":"Vietnam — lazada.vn (VND)"},{"value":"ph","label":"Philippines — lazada.com.ph (PHP)"}],"default":"sg","example":"sg"},{"name":"page","type":"integer","required":false,"description":"Which leaf of the feed to read, 1-based. `leaves_total` in the response is the ceiling and it differs per storefront (235 on sg, 1308 on id).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"How many ids to return from that leaf (max 2000). A full leaf holds 10 000, so walk it with `offset`.","on_invalid":"reject","default":200,"example":200,"minimum":1,"maximum":2000},{"name":"offset","type":"integer","required":false,"description":"How many ids to skip inside the leaf. 0-9999.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":9999}],"returns":"ids[] — `{item_id, url}` per row, feed order, deduplicated inside the leaf. Plus `source_sitemap`, `sitemap_lastmod` (the feed's own date, often stale — read it), `sitemap_window_days`, `leaf`, `leaves_total`, `ids_in_leaf`, `catalog_ids_estimate`, `dead_id_rate_measured`, `dead_id_rate_measured_at`, `offset`, `limit`, `has_more`, `next_offset`, `next_page`. Runs on cheap datacentre, not residential: this surface is never punished.`next_page`. Runs on cheap datacentre, not residential: this surface is never punished.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"id","limit":50}}]},{"name":"lcw","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"LC Waikiki API scraper — lcw.com and 20 LC Waikiki country shops: search by keyword, category, brand or outlet with sort and filters, and read every colour option with per-size stock and prices, grid, campaign and struck price, composition, model measurements, colour siblings, ratings and reviews. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/lcw/v1","spec_available":true,"actions":[{"name":"search","description":"Search an LC Waikiki shop by keyword, or browse any category, brand, store or outlet listing, with the shop's sort orders and filters. 100 products a page: option id, product code, title, brand, URL, images, the grid price, the struck price, the campaign price (e.g. 'Sepette İndirim') and the price you finally pay, lowest price of the last 30 days, multi-buy campaigns, stock count, rating and review count, category path, seller. Also returns every filter the shop offers for the result, with value ids and counts.","required_params":[],"optional_params":["country","query","url","page","sort","filters","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"LC Waikiki shop. tr = lcw.com (the main shop, Turkish lira); the others are LC Waikiki's own country shops on the same platform, each in its own currency and language. A `url` parameter sets the country from its host.","on_invalid":"reject","allowed_values":[{"value":"tr","label":"Turkey (lcw.com, TRY)"},{"value":"ro","label":"Romania (lcwaikiki.ro, RON)"},{"value":"ua","label":"Ukraine (lcwaikiki.ua, UAH)"},{"value":"ba","label":"Bosnia and Herzegovina (lcwaikiki.ba, BAM)"},{"value":"rs","label":"Serbia (lcwaikiki.rs, RSD)"},{"value":"bg","label":"Bulgaria (lcwaikiki.bg, EUR)"},{"value":"de","label":"Germany (lcwaikiki.de, EUR)"},{"value":"al","label":"Albania (lcwaikiki.al, ALL)"},{"value":"mk","label":"North Macedonia (lcwaikiki.mk, MKD)"},{"value":"ru","label":"Russia (lcwaikiki.ru, RUB)"},{"value":"fr","label":"France (lcwaikiki.fr, EUR)"},{"value":"gr","label":"Greece (lcwaikiki.gr, EUR)"},{"value":"hr","label":"Croatia (lcwaikiki.hr, EUR)"},{"value":"it","label":"Italy (lcwaikiki.it, EUR)"},{"value":"me","label":"Montenegro (lcwaikiki.me, EUR)"},{"value":"xk","label":"Kosovo (lcwaikiki-ks.com, EUR)"},{"value":"kz","label":"Kazakhstan (lcwaikiki.kz, KZT)"},{"value":"eg","label":"Egypt (lcwaikiki.eg, EGP)"},{"value":"ma","label":"Morocco (lcwaikiki.ma, MAD)"},{"value":"ge","label":"Georgia (lcwaikiki.ge, GEL)"},{"value":"iq","label":"Iraq (lcwaikiki.iq, IQD)"}],"default":"tr","example":"tr"},{"name":"query","type":"string","required":false,"description":"Keyword, in the shop's language ('tişört', 'erkek jean', 'kadın mont'). Optional when `url` is given.","on_invalid":"reject","example":"tişört","aliases":["q","keyword"]},{"name":"url","type":"string","required":false,"description":"An LC Waikiki LISTING URL to browse: a category (…-t-345, …-u-6000061), a brand (/marka/lcw-kids-b-724), a store (/magaza/lc-waikiki-s-1), the outlet (/outlet) or a search page. Every breadcrumb and campaign URL this API returns is one.","on_invalid":"reject","example":"https://www.lcw.com/erkek-tisort-t-345","aliases":["category_url","listing_url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. LC Waikiki serves 100 products per page; `total_pages` says how many exist. A page past the end comes back empty.","on_invalid":"reject","default":1,"minimum":1,"maximum":1500},{"name":"sort","type":"enum","required":false,"description":"Order of the results — the orderings the shop itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"LC Waikiki's default order"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Newest first"},{"value":"newest_discounts","label":"Most recently discounted first"},{"value":"best_selling","label":"Best sellers first"},{"value":"most_favorited","label":"Most favourited first"},{"value":"most_reviewed","label":"Most reviewed first"}],"default":"relevance"},{"name":"filters","type":"object","required":false,"description":"The shop's own filters, as {key: value}. Keys and value ids come from the `available_filters` of a previous search on the same keyword or URL (m_color = colour, m_size = size, m_8 = brand, m_price = price band, m_campaigntype = discounted items …). Several ids for one key: \"141,145\".","on_invalid":"reject","example":{"m_color":"141"}},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{position, option_id, model_id, product_code, model_code, title, brand, url, image, images[], color_hex, price (grid price), price_display, original_price (struck, null when none), campaign_price (badge price such as 'Sepette İndirim', null when none), campaign_label, campaign_discount_percent, campaign_ends_at, final_price, lowest_price_30_days, currency, campaigns[{campaign_id, label, starts_at, ends_at, url}], search_index_stock_count, in_stock, search_index_rating, search_index_review_count (the listing index's figures, which can lag the product page; product/detail has the page's own), rating_scale, category, category_path[], product_group, seller{id, name}, is_outlet}, count, total_results, total_pages, page, served_page, page_size, sort, applied_filters, available_filters[{key, title, values[{value, label, count, selected}]}], breadcrumb[], category_name, did_you_mean, no_match_notice, page_notice, fallback_results_dropped, country, currency, route ('keyword', 'keyword_to_listing' when the shop maps the keyword to a listing, 'keyword_search_page', 'category', 'brand', 'store', 'outlet'), resolved_url (the listing a mapped keyword resolved to, else null)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"tişört"}},{"name":"product/detail","description":"One LC Waikiki colour option by URL or option id: title, brand, colour, every size (and waist × length for trousers) with its own stock count and price, the grid price, campaign price, final price and struck price, barcode, composition, materials, model measurements and the size the model wears, attributes, care instructions, description, colour siblings with their stock state, rating and count, newest reviews, breadcrumb, seller, shipping cost and delivery window, return days.","required_params":[],"optional_params":["country","url","option_id","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"LC Waikiki shop. tr = lcw.com (the main shop, Turkish lira); the others are LC Waikiki's own country shops on the same platform, each in its own currency and language. A `url` parameter sets the country from its host.","on_invalid":"reject","allowed_values":[{"value":"tr","label":"Turkey (lcw.com, TRY)"},{"value":"ro","label":"Romania (lcwaikiki.ro, RON)"},{"value":"ua","label":"Ukraine (lcwaikiki.ua, UAH)"},{"value":"ba","label":"Bosnia and Herzegovina (lcwaikiki.ba, BAM)"},{"value":"rs","label":"Serbia (lcwaikiki.rs, RSD)"},{"value":"bg","label":"Bulgaria (lcwaikiki.bg, EUR)"},{"value":"de","label":"Germany (lcwaikiki.de, EUR)"},{"value":"al","label":"Albania (lcwaikiki.al, ALL)"},{"value":"mk","label":"North Macedonia (lcwaikiki.mk, MKD)"},{"value":"ru","label":"Russia (lcwaikiki.ru, RUB)"},{"value":"fr","label":"France (lcwaikiki.fr, EUR)"},{"value":"gr","label":"Greece (lcwaikiki.gr, EUR)"},{"value":"hr","label":"Croatia (lcwaikiki.hr, EUR)"},{"value":"it","label":"Italy (lcwaikiki.it, EUR)"},{"value":"me","label":"Montenegro (lcwaikiki.me, EUR)"},{"value":"xk","label":"Kosovo (lcwaikiki-ks.com, EUR)"},{"value":"kz","label":"Kazakhstan (lcwaikiki.kz, KZT)"},{"value":"eg","label":"Egypt (lcwaikiki.eg, EGP)"},{"value":"ma","label":"Morocco (lcwaikiki.ma, MAD)"},{"value":"ge","label":"Georgia (lcwaikiki.ge, GEL)"},{"value":"iq","label":"Iraq (lcwaikiki.iq, IQD)"}],"default":"tr","example":"tr"},{"name":"url","type":"string","required":false,"description":"An LC Waikiki product URL (…-o-<option id>) on any country shop; it also sets the country. Every search row returns one.","on_invalid":"reject","example":"https://www.lcw.com/slim-fit-modal-kumas-tisort-02-murdum-o-5373859","aliases":["product_url"]},{"name":"option_id","type":"integer","required":false,"description":"Alternative to `url`: the colour option id (the number after -o-). Every search row returns it. Ids are shared across country shops.","on_invalid":"reject","example":5373859,"aliases":["id"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{option_id, model_id, product_code, model_code, color_code, gtin13 (one barcode for the option; null unless a valid GTIN), title, full_name, brand, brand_url, url, color, price (grid price), campaign_price, campaign_discount_percent, final_price (the headline price), original_price (struck), currency, sizes_have_different_prices, availability, in_stock, stock_count (sum of sizes), variants[{size, length, size_id, length_id, display_order, stock_count, in_stock, final_price, original_price, sku_ref, product_id}], sizes[], materials[], composition[{part, value}], images[], rating (one decimal, as the page prints it), rating_count, rating_scale, top_reviews[{review_id, rating, text, seller, reviewer_name}], color_options[{option_id, color, url, image, selected, in_stock}], color_option_count, description, model_measurements[{label, value}], model_size, specifications[{name, value}], attributes[{name, value, property_id}], care_instructions[], manufacturer, category, breadcrumb[], gender, seller{id, name, url}, shipping{cost, currency, handling_days_min/max, transit_days_min/max, cutoff_time}, return_days, free_returns, multi_buy_campaigns (null — not on the product page; search rows carry them)}, country","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"option_id":5248220}},{"name":"product/reviews","description":"Every published review of an LC Waikiki colour option: exact average and count, the 1-5 breakdown, how buyers rate the fit (runs small / true to size / runs large) and each review with its stars, text, date, the size bought, the reviewer's height and weight when given, likes and photos, and the reviewer's name and customer id as LC Waikiki publishes them (the shop masks most names itself, e.g. \"M*** A*\"; they are passed through unchanged).","required_params":[],"optional_params":["country","url","option_id","page","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"LC Waikiki shop. tr = lcw.com (the main shop, Turkish lira); the others are LC Waikiki's own country shops on the same platform, each in its own currency and language. A `url` parameter sets the country from its host.","on_invalid":"reject","allowed_values":[{"value":"tr","label":"Turkey (lcw.com, TRY)"},{"value":"ro","label":"Romania (lcwaikiki.ro, RON)"},{"value":"ua","label":"Ukraine (lcwaikiki.ua, UAH)"},{"value":"ba","label":"Bosnia and Herzegovina (lcwaikiki.ba, BAM)"},{"value":"rs","label":"Serbia (lcwaikiki.rs, RSD)"},{"value":"bg","label":"Bulgaria (lcwaikiki.bg, EUR)"},{"value":"de","label":"Germany (lcwaikiki.de, EUR)"},{"value":"al","label":"Albania (lcwaikiki.al, ALL)"},{"value":"mk","label":"North Macedonia (lcwaikiki.mk, MKD)"},{"value":"ru","label":"Russia (lcwaikiki.ru, RUB)"},{"value":"fr","label":"France (lcwaikiki.fr, EUR)"},{"value":"gr","label":"Greece (lcwaikiki.gr, EUR)"},{"value":"hr","label":"Croatia (lcwaikiki.hr, EUR)"},{"value":"it","label":"Italy (lcwaikiki.it, EUR)"},{"value":"me","label":"Montenegro (lcwaikiki.me, EUR)"},{"value":"xk","label":"Kosovo (lcwaikiki-ks.com, EUR)"},{"value":"kz","label":"Kazakhstan (lcwaikiki.kz, KZT)"},{"value":"eg","label":"Egypt (lcwaikiki.eg, EGP)"},{"value":"ma","label":"Morocco (lcwaikiki.ma, MAD)"},{"value":"ge","label":"Georgia (lcwaikiki.ge, GEL)"},{"value":"iq","label":"Iraq (lcwaikiki.iq, IQD)"}],"default":"tr","example":"tr"},{"name":"url","type":"string","required":false,"description":"An LC Waikiki product URL (…-o-<option id>) on any country shop; it also sets the country. Every search row returns one.","on_invalid":"reject","example":"https://www.lcw.com/slim-fit-modal-kumas-tisort-02-murdum-o-5373859","aliases":["product_url"]},{"name":"option_id","type":"integer","required":false,"description":"Alternative to `url`: the colour option id (the number after -o-). Every search row returns it. Ids are shared across country shops.","on_invalid":"reject","example":5373859,"aliases":["id"]},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based, 100 reviews per page (newest first); `total_pages` says how many exist.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"option_id, rating (exact), rating_count, rating_scale, rating_breakdown{'1'..'5'}, page, total_pages, reviews_source ('review_list', or 'product_page_newest' for an option whose reviews are pooled with paired options: then only the page's rounded rating, its count and the newest reviews it prints), reviews_note, size_fit{runs_small_percent, true_to_size_percent, runs_large_percent} (null when none), reviews_listed, reviews_returned, reviews[{review_id, rating, title, text, date, size_purchased, color_code, like_count, dislike_count, seller, reviewer_height_cm, reviewer_weight_kg, images[], reviewer_name (as LC Waikiki sends it, usually masked by the shop), reviewer_id, reviewer_name_shown}], country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.lcw.com/slim-fit-modal-kumas-tisort-02-murdum-o-5373859"}},{"name":"suggest","description":"LC Waikiki's search autocomplete for the characters typed so far: category suggestions with their listing URL (usable in search `url`) and popular searches.","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"LC Waikiki shop. tr = lcw.com (the main shop, Turkish lira); the others are LC Waikiki's own country shops on the same platform, each in its own currency and language. A `url` parameter sets the country from its host.","on_invalid":"reject","allowed_values":[{"value":"tr","label":"Turkey (lcw.com, TRY)"},{"value":"ro","label":"Romania (lcwaikiki.ro, RON)"},{"value":"ua","label":"Ukraine (lcwaikiki.ua, UAH)"},{"value":"ba","label":"Bosnia and Herzegovina (lcwaikiki.ba, BAM)"},{"value":"rs","label":"Serbia (lcwaikiki.rs, RSD)"},{"value":"bg","label":"Bulgaria (lcwaikiki.bg, EUR)"},{"value":"de","label":"Germany (lcwaikiki.de, EUR)"},{"value":"al","label":"Albania (lcwaikiki.al, ALL)"},{"value":"mk","label":"North Macedonia (lcwaikiki.mk, MKD)"},{"value":"ru","label":"Russia (lcwaikiki.ru, RUB)"},{"value":"fr","label":"France (lcwaikiki.fr, EUR)"},{"value":"gr","label":"Greece (lcwaikiki.gr, EUR)"},{"value":"hr","label":"Croatia (lcwaikiki.hr, EUR)"},{"value":"it","label":"Italy (lcwaikiki.it, EUR)"},{"value":"me","label":"Montenegro (lcwaikiki.me, EUR)"},{"value":"xk","label":"Kosovo (lcwaikiki-ks.com, EUR)"},{"value":"kz","label":"Kazakhstan (lcwaikiki.kz, KZT)"},{"value":"eg","label":"Egypt (lcwaikiki.eg, EGP)"},{"value":"ma","label":"Morocco (lcwaikiki.ma, MAD)"},{"value":"ge","label":"Georgia (lcwaikiki.ge, GEL)"},{"value":"iq","label":"Iraq (lcwaikiki.iq, IQD)"}],"default":"tr","example":"tr"},{"name":"query","type":"string","required":true,"description":"The characters typed so far, in the shop's language.","on_invalid":"reject","example":"kaz","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"query, suggestions[{text, type ('category'|'search_history'|…), id, url}], count, did_you_mean, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"tişört"}}]},{"name":"leboncoin","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"leboncoin API scraper — France's largest classifieds site: marketplace search with condition, shipping, free-item and pro/private filters, real estate (sales, rentals, flat-shares, commercial) and vehicles (cars, motorcycles, vans, campervans), and the full ad record. No account, no browser; private sellers' personal data withheld.","version":"0.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/leboncoin/v1","spec_available":true,"actions":[{"name":"search","description":"Search leboncoin, France's largest classifieds site, by keyword and/or category: price (free 'Don' items and placeholder prices labelled, price drops with the earlier price), town, postcode, department and region, pro or private seller, condition, shipping available, urgent and paid options, publication and re-publication dates, images and description. Filter by price, category, location or radius, condition, shipping, free only, urgent only, seller type or seller; sort by relevance, newest, oldest or price.","required_params":[],"optional_params":["query","titles_only","category","condition","shippable","free_only","urgent_only","ad_type","price_min","price_max","city","zipcode","department","region","latitude","longitude","radius_km","seller_type","seller_id","sort","page","page_token","limit","include_sponsored","include_pii","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into leboncoin's search box.","on_invalid":"reject","example":"velo"},{"name":"titles_only","type":"boolean","required":false,"description":"Match the keyword in ad titles only.","on_invalid":"reject"},{"name":"category","type":"string","required":false,"description":"leboncoin category id (55 = Vélos, 19 = Ameublement, 17 = Téléphones…); the categories action lists them.","on_invalid":"reject","example":"55"},{"name":"condition","type":"array","required":false,"description":"One or more of new_with_tags, new_without_tags, new, very_good, good, fair, refurbished, for_parts.","on_invalid":"reject","allowed_values":[{"value":"new_with_tags","label":"new_with_tags"},{"value":"new_without_tags","label":"new_without_tags"},{"value":"new","label":"new"},{"value":"very_good","label":"very_good"},{"value":"good","label":"good"},{"value":"fair","label":"fair"},{"value":"refurbished","label":"refurbished"},{"value":"for_parts","label":"for_parts"}]},{"name":"shippable","type":"boolean","required":false,"description":"Only ads the seller will ship.","on_invalid":"reject"},{"name":"free_only","type":"boolean","required":false,"description":"Only free give-away ('Don') ads.","on_invalid":"reject"},{"name":"urgent_only","type":"boolean","required":false,"description":"Only ads marked urgent.","on_invalid":"reject"},{"name":"ad_type","type":"enum","required":false,"description":"offer (default) or demand (wanted ads).","on_invalid":"reject","allowed_values":[{"value":"offer","label":"Offers"},{"value":"demand","label":"Wanted ads"}],"default":"offer"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"city","type":"string","required":false,"description":"Town name, e.g. Lyon. Combine with zipcode for one arrondissement.","on_invalid":"reject","example":"Lyon"},{"name":"zipcode","type":"string","required":false,"description":"5-digit postcode; needs city.","on_invalid":"reject","example":"69001"},{"name":"department","type":"string","required":false,"description":"French department number, e.g. 13, 69, 75.","on_invalid":"reject","example":"13"},{"name":"region","type":"string","required":false,"description":"leboncoin region id, e.g. 12 = Ile-de-France (see categories).","on_invalid":"reject"},{"name":"latitude","type":"number","required":false,"description":"Centre of a radius search (with longitude).","on_invalid":"reject"},{"name":"longitude","type":"number","required":false,"description":"Centre of a radius search (with latitude).","on_invalid":"reject"},{"name":"radius_km","type":"number","required":false,"description":"Radius around latitude/longitude, km.","on_invalid":"reject","default":10,"minimum":1,"maximum":200},{"name":"seller_type","type":"enum","required":false,"description":"Only professional or only private sellers.","on_invalid":"reject","allowed_values":[{"value":"pro","label":"Professional"},{"value":"private","label":"Private"}]},{"name":"seller_id","type":"string","required":false,"description":"A seller's seller_id (UUID) or store_id from a result row: that seller's ads.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"relevance, newest (last re-published first), oldest, price_asc or price_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"newest","label":"newest"},{"value":"oldest","label":"oldest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (leboncoin serves the first 3,500 results).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":3500},{"name":"page_token","type":"string","required":false,"description":"next_page_token from the previous page of the same search. Relevance order is re-ranked on every request; without the token, page 2 can repeat ads from page 1.","on_invalid":"reject"},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":35,"example":35,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return leboncoin's paid 'À la une' placements, apart, under sponsored[].","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' display names, exact coordinates and unmasked descriptions.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, category_id, category, ad_type, status, price, currency, is_free, price_not_published, price_looks_placeholder, price_before_reduction, discount_pct, published_at, republished_at, expires_at, location{city, zipcode, district, department_id, department, region_id, region, latitude, longitude, coordinates_precision}, seller{type, seller_id, store_id, name (pro), siren, shop_name, has_phone, rating_score, rating_scale, rating_count}, brand, condition, condition_label, shippable, shipping_type, is_urgent, is_boosted, paid_options[], thumbnail, image_count, images[], description}, count, total, total_pro, total_private, page, limit, has_more, next_page_token, sort_applied, dropped_outside_price_range, sponsored_available, sponsored[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"velo"}},{"name":"real_estate/search","description":"Search leboncoin real estate — sales, rentals, flat-shares and commercial property: price or rent, price per m², surface, land surface, rooms, bedrooms, floor, energy and climate class, heating, building year, furnished, charges and deposit, agency fees and who pays them, new-build programmes with their units, town, postcode, district and department, agency or private owner, images. Filter by transaction, property type, price, surface, rooms, bedrooms, energy class, sale type, furnished and location or radius; sort by relevance, newest or price.","required_params":["transaction"],"optional_params":["query","property_type","sell_type","price_min","price_max","surface_min","surface_max","land_surface_min","land_surface_max","rooms_min","rooms_max","bedrooms_min","bedrooms_max","energy_class","furnished","city","zipcode","department","region","latitude","longitude","radius_km","seller_type","seller_id","sort","page","page_token","limit","include_sponsored","include_pii","max_rotations"],"params":[{"name":"transaction","type":"enum","required":true,"description":"sale, rent, flatshare or commercial.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"sale"},{"value":"rent","label":"rent"},{"value":"flatshare","label":"flatshare"},{"value":"commercial","label":"commercial"}],"example":"sale"},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into leboncoin's search box.","on_invalid":"reject","example":"velo"},{"name":"property_type","type":"array","required":false,"description":"One or more of house, apartment, land, parking, other.","on_invalid":"reject","allowed_values":[{"value":"house","label":"house"},{"value":"apartment","label":"apartment"},{"value":"land","label":"land"},{"value":"parking","label":"parking"},{"value":"other","label":"other"}]},{"name":"sell_type","type":"array","required":false,"description":"Sales only: old, new (new-build) or life_annuity (viager).","on_invalid":"reject","allowed_values":[{"value":"old","label":"old"},{"value":"new","label":"new"},{"value":"life_annuity","label":"life_annuity"}]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"surface_min","type":"number","required":false,"description":"Smallest living surface, m².","on_invalid":"reject","minimum":0},{"name":"surface_max","type":"number","required":false,"description":"Largest living surface, m².","on_invalid":"reject","minimum":0},{"name":"land_surface_min","type":"number","required":false,"description":"Smallest plot, m².","on_invalid":"reject","minimum":0},{"name":"land_surface_max","type":"number","required":false,"description":"Largest plot, m².","on_invalid":"reject","minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Fewest rooms.","on_invalid":"reject","minimum":1,"maximum":20},{"name":"rooms_max","type":"integer","required":false,"description":"Most rooms.","on_invalid":"reject","minimum":1,"maximum":20},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms.","on_invalid":"reject","minimum":1,"maximum":20},{"name":"bedrooms_max","type":"integer","required":false,"description":"Most bedrooms.","on_invalid":"reject","minimum":1,"maximum":20},{"name":"energy_class","type":"array","required":false,"description":"Energy (DPE) classes, e.g. [\"a\", \"b\"].","on_invalid":"reject","allowed_values":[{"value":"a","label":"A"},{"value":"b","label":"B"},{"value":"c","label":"C"},{"value":"d","label":"D"},{"value":"e","label":"E"},{"value":"f","label":"F"},{"value":"g","label":"G"}]},{"name":"furnished","type":"boolean","required":false,"description":"Rentals: true furnished only, false unfurnished only.","on_invalid":"reject"},{"name":"city","type":"string","required":false,"description":"Town name, e.g. Lyon. Combine with zipcode for one arrondissement.","on_invalid":"reject","example":"Lyon"},{"name":"zipcode","type":"string","required":false,"description":"5-digit postcode; needs city.","on_invalid":"reject","example":"69001"},{"name":"department","type":"string","required":false,"description":"French department number, e.g. 13, 69, 75.","on_invalid":"reject","example":"13"},{"name":"region","type":"string","required":false,"description":"leboncoin region id, e.g. 12 = Ile-de-France (see categories).","on_invalid":"reject"},{"name":"latitude","type":"number","required":false,"description":"Centre of a radius search (with longitude).","on_invalid":"reject"},{"name":"longitude","type":"number","required":false,"description":"Centre of a radius search (with latitude).","on_invalid":"reject"},{"name":"radius_km","type":"number","required":false,"description":"Radius around latitude/longitude, km.","on_invalid":"reject","default":10,"minimum":1,"maximum":200},{"name":"seller_type","type":"enum","required":false,"description":"Only professional or only private sellers.","on_invalid":"reject","allowed_values":[{"value":"pro","label":"Professional"},{"value":"private","label":"Private"}]},{"name":"seller_id","type":"string","required":false,"description":"A seller's seller_id (UUID) or store_id from a result row: that seller's ads.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"relevance, newest (last re-published first), oldest, price_asc or price_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"newest","label":"newest"},{"value":"oldest","label":"oldest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (leboncoin serves the first 3,500 results).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":3500},{"name":"page_token","type":"string","required":false,"description":"next_page_token from the previous page of the same search. Relevance order is re-ranked on every request; without the token, page 2 can repeat ads from page 1.","on_invalid":"reject"},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":35,"example":35,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return leboncoin's paid 'À la une' placements, apart, under sponsored[].","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' display names, exact coordinates and unmasked descriptions.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, category_id, category, ad_type, status, price, currency, is_free, price_not_published, price_looks_placeholder, price_before_reduction, discount_pct, published_at, republished_at, expires_at, location{city, zipcode, district, department_id, department, region_id, region, latitude, longitude, coordinates_precision}, seller{type, seller_id, store_id, name (pro), siren, shop_name, has_phone, rating_score, rating_scale, rating_count}, brand, condition, condition_label, shippable, shipping_type, is_urgent, is_boosted, paid_options[], thumbnail, image_count, images[], description, price_is_from, property{property_type, transaction, sell_type, surface_m2, land_surface_m2, rooms, bedrooms, bathrooms, floor, floors_in_building, elevator, energy_class, ghg_class, heating_type, building_year, furnished, price_per_m2, rent_excluding_charges, monthly_charges, charges_included, security_deposit, agency_fees_paid_by, agency_fees, estimated_notary_fees, is_new_build_programme, units[]{unit_id, surface_m2, price}, …}}, count, total, total_pro, total_private, page, limit, has_more, next_page_token, sort_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"transaction":"rent","department":"75"}},{"name":"cars/search","description":"Search leboncoin vehicles — cars, motorcycles, vans and campervans: price and price drops, make, model, version, trim, model year, first registration, mileage, fuel, gearbox, body type, doors, seats, fiscal and DIN horsepower, engine size, colour, condition, Crit'Air, inspection, battery health, equipment, leboncoin's market price estimate, dealer or private seller, town and department. Filter by vehicle type, make, model, year, mileage, fuel, gearbox, body type, engine size, price, seller type and location; sort by relevance, newest or price.","required_params":[],"optional_params":["vehicle_type","query","make","model","year_min","year_max","mileage_min","mileage_max","fuel","gearbox","body_type","cubic_capacity_min","cubic_capacity_max","price_min","price_max","city","zipcode","department","region","latitude","longitude","radius_km","seller_type","seller_id","sort","page","page_token","limit","include_sponsored","include_pii","max_rotations"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"car (default), motorcycle, van or caravan.","on_invalid":"reject","allowed_values":[{"value":"car","label":"car"},{"value":"motorcycle","label":"motorcycle"},{"value":"caravan","label":"caravan"},{"value":"van","label":"van"}],"default":"car"},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into leboncoin's search box.","on_invalid":"reject","example":"velo"},{"name":"make","type":"string","required":false,"description":"Make as leboncoin lists it, e.g. VOLKSWAGEN, PEUGEOT, YAMAHA (cars, motorcycles, vans).","on_invalid":"reject","example":"VOLKSWAGEN"},{"name":"model","type":"string","required":false,"description":"Cars: model name, with make (e.g. Golf).","on_invalid":"reject","example":"Golf"},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_min","type":"number","required":false,"description":"Lowest mileage, km.","on_invalid":"reject","minimum":0},{"name":"mileage_max","type":"number","required":false,"description":"Highest mileage, km.","on_invalid":"reject","minimum":0},{"name":"fuel","type":"array","required":false,"description":"petrol, diesel, hybrid, plug_in_hybrid, electric, lpg, natural_gas, hydrogen, other.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"diesel","label":"diesel"},{"value":"lpg","label":"lpg"},{"value":"electric","label":"electric"},{"value":"other","label":"other"},{"value":"hybrid","label":"hybrid"},{"value":"natural_gas","label":"natural_gas"},{"value":"plug_in_hybrid","label":"plug_in_hybrid"},{"value":"hydrogen","label":"hydrogen"}]},{"name":"gearbox","type":"enum","required":false,"description":"manual or automatic.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic"}]},{"name":"body_type","type":"array","required":false,"description":"Cars: suv, sedan, estate, convertible, city_car, coupe, mpv, company_car, other. Motorcycles: motorcycle, scooter, quad, moped, other.","on_invalid":"reject","allowed_values":[{"value":"suv","label":"suv"},{"value":"sedan","label":"sedan"},{"value":"estate","label":"estate"},{"value":"convertible","label":"convertible"},{"value":"city_car","label":"city_car"},{"value":"coupe","label":"coupe"},{"value":"mpv","label":"mpv"},{"value":"company_car","label":"company_car"},{"value":"other","label":"other"},{"value":"motorcycle","label":"motorcycle"},{"value":"scooter","label":"scooter"},{"value":"quad","label":"quad"},{"value":"moped","label":"moped"}]},{"name":"cubic_capacity_min","type":"number","required":false,"description":"Motorcycles: smallest engine, cm³.","on_invalid":"reject","minimum":0},{"name":"cubic_capacity_max","type":"number","required":false,"description":"Motorcycles: largest engine, cm³.","on_invalid":"reject","minimum":0},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"city","type":"string","required":false,"description":"Town name, e.g. Lyon. Combine with zipcode for one arrondissement.","on_invalid":"reject","example":"Lyon"},{"name":"zipcode","type":"string","required":false,"description":"5-digit postcode; needs city.","on_invalid":"reject","example":"69001"},{"name":"department","type":"string","required":false,"description":"French department number, e.g. 13, 69, 75.","on_invalid":"reject","example":"13"},{"name":"region","type":"string","required":false,"description":"leboncoin region id, e.g. 12 = Ile-de-France (see categories).","on_invalid":"reject"},{"name":"latitude","type":"number","required":false,"description":"Centre of a radius search (with longitude).","on_invalid":"reject"},{"name":"longitude","type":"number","required":false,"description":"Centre of a radius search (with latitude).","on_invalid":"reject"},{"name":"radius_km","type":"number","required":false,"description":"Radius around latitude/longitude, km.","on_invalid":"reject","default":10,"minimum":1,"maximum":200},{"name":"seller_type","type":"enum","required":false,"description":"Only professional or only private sellers.","on_invalid":"reject","allowed_values":[{"value":"pro","label":"Professional"},{"value":"private","label":"Private"}]},{"name":"seller_id","type":"string","required":false,"description":"A seller's seller_id (UUID) or store_id from a result row: that seller's ads.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"relevance, newest (last re-published first), oldest, price_asc or price_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"newest","label":"newest"},{"value":"oldest","label":"oldest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (leboncoin serves the first 3,500 results).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":3500},{"name":"page_token","type":"string","required":false,"description":"next_page_token from the previous page of the same search. Relevance order is re-ranked on every request; without the token, page 2 can repeat ads from page 1.","on_invalid":"reject"},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":35,"example":35,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return leboncoin's paid 'À la une' placements, apart, under sponsored[].","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' display names, exact coordinates and unmasked descriptions.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, category_id, category, ad_type, status, price, currency, is_free, price_not_published, price_looks_placeholder, price_before_reduction, discount_pct, published_at, republished_at, expires_at, location{city, zipcode, district, department_id, department, region_id, region, latitude, longitude, coordinates_precision}, seller{type, seller_id, store_id, name (pro), siren, shop_name, has_phone, rating_score, rating_scale, rating_count}, brand, condition, condition_label, shippable, shipping_type, is_urgent, is_boosted, paid_options[], thumbnail, image_count, images[], description, vehicle{make, model, version, trim, model_year, first_registration, mileage_km, fuel, gearbox, body_type, doors, seats, fiscal_horsepower, power_din_hp, cubic_capacity_cc, colour, condition, critair, technical_inspection_valid, battery_health_pct, equipment[], history[], market_price_estimate{min, max, positioning}, …}}, count, total, total_pro, total_private, page, limit, has_more, next_page_token","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"VOLKSWAGEN","query":"golf"}},{"name":"listing","description":"The full leboncoin ad by id or URL, in any category: title, price (free, placeholder and price-drop labelled), description, all images, status, condition, shipping, every published attribute with its French label, publication, re-publication and expiry dates, location, vehicle or property details, paid options, and the seller — a pro's company, SIREN and shop; a private seller's name withheld.","required_params":["ad_id"],"optional_params":["include_pii","max_rotations"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The leboncoin ad id (the digits at the end of an ad URL) or the full URL.","on_invalid":"reject","example":"3266471918"},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' display names, exact coordinates and unmasked descriptions.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{ad_id, title, url, category_id, category, ad_type, status, price, currency, is_free, price_not_published, price_looks_placeholder, price_before_reduction, discount_pct, published_at, republished_at, expires_at, location{city, zipcode, district, department_id, department, region_id, region, latitude, longitude, coordinates_precision}, seller{type, seller_id, store_id, name (pro), siren, shop_name, has_phone, rating_score, rating_scale, rating_count}, brand, condition, condition_label, shippable, shipping_type, is_urgent, is_boosted, paid_options[], thumbnail, image_count, images[], description, attributes[]{key, label, value, value_label, values[]}, reference, vehicle{} | property{}, price_is_from}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"ad_id":"3266471918"}},{"name":"categories","description":"leboncoin's category tree (ids, names, parents, and which shortcut categories map to another) and its regions with their departments — the ids the search actions accept.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"categories[]{category_id, name, parent_id, same_as}, count, regions[]{region_id, name, departments[]{department_id, name}}","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"leclerc-drive","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"E.Leclerc Drive prices","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/leclerc-drive/v1","spec_available":true,"actions":[{"name":"stores","description":"Find E.Leclerc Drive stores near a point, a French postal code or a town. Give latitude+longitude, or postal_code, or town. The store_id it returns is what search, category and product take.","required_params":[],"optional_params":["latitude","longitude","postal_code","town"],"params":[{"name":"latitude","type":"number","required":false,"description":"Latitude (with longitude).","on_invalid":"reject","example":43.2965},{"name":"longitude","type":"number","required":false,"description":"Longitude (with latitude).","on_invalid":"reject","example":5.3698},{"name":"postal_code","type":"string","required":false,"description":"French postal code (5 digits).","on_invalid":"reject","example":"13001"},{"name":"town","type":"string","required":false,"description":"Town or store name, e.g. \"Vitrolles\".","on_invalid":"reject","example":"Vitrolles"}],"returns":"Stores: store_id, name, postal_code, distance_km, coordinates, service_type, home_delivery + postal codes served, shop_url; plus the resolved search point.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"latitude":43.2965,"longitude":5.3698}},{"name":"search","description":"Search one E.Leclerc Drive store catalogue: shelf price, unit price, promotions, Ticket E.Leclerc offers, stock units, Nutri-Score, rating. Prices are those of that store.","required_params":["store_id","query"],"optional_params":[],"params":[{"name":"store_id","type":"string","required":true,"description":"Drive store id from the stores action (noPL-noPR, e.g. 031301-031301). Required: prices differ between stores.","on_invalid":"reject","example":"031301-031301","aliases":["store"]},{"name":"query","type":"string","required":true,"description":"Search text (max 100 characters).","on_invalid":"reject","example":"lait","aliases":["q"]},{"name":"filters","type":"array","required":false,"description":"Facet values from the `facets` of a previous answer for the same store (e.g. \"2-1657357\" = Les promotions, a brand, a label or a Nutri-Score value; \"4-<id>\" = a sub-category). Several values are combined the way the site combines them.","on_invalid":"reject","example":["4-1303216"]},{"name":"sort","type":"enum","required":false,"description":"Order of the returned rows (applied to the rows the source returned, as the site does).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"unit_price_asc","label":"unit_price_asc"},{"value":"unit_price_desc","label":"unit_price_desc"},{"value":"rating_desc","label":"rating_desc"}],"default":"relevance","example":"price_asc"}],"returns":"products (max 200, the site's own cap), source_total, total_capped, facets (categories with counts + filter values), store.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"031301-031301","query":"lait"}},{"name":"category","description":"List one category (family) of an E.Leclerc Drive store: all its products with store prices. Family ids come from category.family_id of any product row, or from facets.","required_params":["store_id","category_id"],"optional_params":[],"params":[{"name":"store_id","type":"string","required":true,"description":"Drive store id from the stores action.","on_invalid":"reject","example":"031301-031301","aliases":["store"]},{"name":"category_id","type":"integer","required":true,"description":"Family id (category.family_id of a product row). An id this store does not know answers NOT_FOUND.","on_invalid":"reject","example":284370},{"name":"filters","type":"array","required":false,"description":"Facet values from the `facets` of a previous answer for the same store (e.g. \"2-1657357\" = Les promotions, a brand, a label or a Nutri-Score value; \"4-<id>\" = a sub-category). Several values are combined the way the site combines them.","on_invalid":"reject","example":["4-1303216"]},{"name":"sort","type":"enum","required":false,"description":"Order of the returned rows (applied to the rows the source returned, as the site does).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"unit_price_asc","label":"unit_price_asc"},{"value":"unit_price_desc","label":"unit_price_desc"},{"value":"rating_desc","label":"rating_desc"}],"default":"relevance","example":"price_asc"}],"returns":"products of that family with store prices, facets, store.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"031301-031301","category_id":284370}},{"name":"product","description":"Full E.Leclerc Drive product sheet in one store: price, promotions, EAN, brand, Nutri-Score, ingredients, allergens, nutrition table, storage, VAT rate, images.","required_params":["store_id","product_id"],"optional_params":[],"params":[{"name":"store_id","type":"string","required":true,"description":"Drive store id from the stores action.","on_invalid":"reject","example":"031301-031301","aliases":["store"]},{"name":"product_id","type":"string","required":true,"description":"Product id (`id` of a search row) or a Leclerc Drive product URL.","on_invalid":"reject","example":"2613","aliases":["id","url"]}],"returns":"The row fields plus gtin, brand, ingredients, allergens, nutrition, storage, vat_rate, images, store.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":"031301-031301","product_id":"2613"}}]},{"name":"lei","category":{"id":"finance","title":"Finance & Data"},"title":"Legal Entity & LEI API (GLEIF) — verified company and legal-entity records, fuzzy company search, corporate ownership hierarchy and ISIN/BIC/MIC-to-LEI mapping","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/lei/v1","spec_available":true,"actions":[{"name":"lookup","description":"One LEI → the full verified legal-entity record (Level-1 who-is-who): legal name, addresses, jurisdiction, legal form, registration status + honesty note, authority ids, renewal dates, BIC/ISIN-adjacent identifiers.","required_params":["lei"],"optional_params":["resolve_codes","history"],"params":[{"name":"lei","type":"string","required":true,"description":"The 20-character Legal Entity Identifier (ISO 17442). Spaces/dashes are ignored; case-insensitive. Format + MOD-97-10 checksum are validated offline first — a malformed LEI returns a clean error with the reason, never an upstream call.","on_invalid":"reject","example":"HWUPKR0MPOU8FGXBT394","aliases":["lei_code","id"]},{"name":"resolve_codes","type":"boolean","required":false,"description":"If true, also resolve the legal-form ELF code and registration-authority code to their human-readable names (2 extra cached GLEIF calls; silently skipped if unavailable).","on_invalid":"ignore","default":false,"example":true},{"name":"history","type":"boolean","required":false,"description":"If true, append the record's field-modification audit trail (what changed, when, old/new value) — GLEIF Level-1 history.","on_invalid":"ignore","default":false,"example":true,"aliases":["field_modifications"]}],"returns":"entity{lei, legal_name, other_names[], entity_status, jurisdiction, category, legal_form{code,name?}, legal_address{}, hq_address{}, registration{status, status_note, authority_id, entity_id_at_authority, initial, last_update, next_renewal, managing_lou, corroboration_level}, expiration, successor, bic[], mic, spglobal[], conformity_flag} (+ field_modifications[] when history=true)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"lei":"HWUPKR0MPOU8FGXBT394"}},{"name":"search","description":"Company name → ranked candidate entities with match_confidence for disambiguation (same-name entities across countries/legal-forms). Filters: country, status, jurisdiction, entity_status.","required_params":["name"],"optional_params":["scope","country","status","entity_status","jurisdiction","limit","page","min_confidence","typo"],"params":[{"name":"name","type":"string","required":true,"description":"Company/entity name to search for. Matching is word-based on the GLEIF data pool; results are ranked by `match_confidence` (an explicit string-similarity heuristic) so same-name entities in different countries/forms are easy to disambiguate.","on_invalid":"reject","example":"Apple Inc","aliases":["q","query","company"]},{"name":"scope","type":"enum","required":false,"description":"Which name surface to search. `auto` (default) queries BOTH the fulltext and the legal-name surface and merges by LEI — GLEIF's fulltext relevance alone can bury an exact legal-name match below the page cut. `fulltext` also matches former and transliterated names; `name` is strict legal-name matching.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"merge fulltext + legal-name surfaces, rank by confidence (best disambiguation)"},{"value":"fulltext","label":"match legal name + other/trade/transliterated names (broadest)"},{"value":"name","label":"match the registered legal name only"}],"default":"auto","example":"auto"},{"name":"country","type":"string","required":false,"description":"Filter by the entity's legal-address country (ISO-3166 alpha-2, e.g. US, DE).","on_invalid":"ignore","example":"US","aliases":["country_code","cc"]},{"name":"status","type":"string","required":false,"description":"Filter by registration status (case-insensitive). Common values: ISSUED, LAPSED, RETIRED, ANNULLED, MERGED, DUPLICATE, PENDING_TRANSFER, PENDING_ARCHIVAL. NOTE: LAPSED only means the record's re-certification is overdue — not that the company is gone.","on_invalid":"ignore","example":"ISSUED","aliases":["registration_status"]},{"name":"entity_status","type":"string","required":false,"description":"Filter by entity status: ACTIVE or INACTIVE (INACTIVE = the legal entity itself ceased to exist; different axis than `status`).","on_invalid":"ignore","example":"ACTIVE"},{"name":"jurisdiction","type":"string","required":false,"description":"Filter by legal jurisdiction (ISO-3166 code, may include region subdivisions like US-DE for Delaware).","on_invalid":"ignore","example":"DE"},{"name":"limit","type":"integer","required":false,"description":"Max results to return (1-200; GLEIF page cap is 200).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":200},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"min_confidence","type":"number","required":false,"description":"Drop candidates whose match_confidence is below this 0-1 threshold.","on_invalid":"ignore","example":0.6,"minimum":0,"maximum":1},{"name":"typo","type":"boolean","required":false,"description":"When the name has NO exact matches, attempt typo-recovery: probe GLEIF autocompletions with bounded misspelling-candidates and re-run the search on the best correction (did_you_mean). Recovers common typos (gogle→Google, deutsche bnk→Deutsche Bank); best-effort, never blocks an exact-match query. Set false to skip.","on_invalid":"ignore","default":true,"example":true,"aliases":["fuzzy","did_you_mean"]}],"returns":"candidates[]{lei, legal_name, match_confidence, jurisdiction, entity_status, registration_status, status_note, city, country, legal_form_code}, count, total (full GLEIF match count), page, confidence_note, did_you_mean + typo_recovered (when a zero-result query was recovered from a misspelling)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"Apple Inc","country":"US"}},{"name":"autocomplete","description":"Type-ahead suggestions for a partial company name (GLEIF autocompletions surface) — each suggestion carries its LEI for direct lookup.","required_params":["name"],"optional_params":[],"params":[{"name":"name","type":"string","required":true,"description":"Partial name (min 2 chars) to complete.","on_invalid":"reject","example":"apple i","aliases":["q","query","prefix"]}],"returns":"suggestions[]{value, highlighted, lei}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"apple"}},{"name":"relationships","description":"One LEI → Level-2 corporate hierarchy: direct & ultimate parent (entity OR the entity's declared reporting-exception with reason+meaning OR no_data), children list + total counts. detail=true adds the auditable relationship provenance.","required_params":["lei"],"optional_params":["children_limit","detail"],"params":[{"name":"lei","type":"string","required":true,"description":"The 20-character Legal Entity Identifier (ISO 17442). Spaces/dashes are ignored; case-insensitive. Format + MOD-97-10 checksum are validated offline first — a malformed LEI returns a clean error with the reason, never an upstream call.","on_invalid":"reject","example":"HWUPKR0MPOU8FGXBT394","aliases":["lei_code","id"]},{"name":"children_limit","type":"integer","required":false,"description":"Max direct/ultimate children to list (0-200). The TOTAL count is always returned in children_total regardless of this cap.","on_invalid":"ignore","default":50,"example":50,"minimum":0,"maximum":200},{"name":"detail","type":"boolean","required":false,"description":"If true, include the raw relationship-record provenance for each parent link (valid_from, accounting periods, corroboration level/documents) — the auditable Level-2 trail.","on_invalid":"ignore","default":false,"example":true}],"returns":"lei, direct_parent{type: entity|reporting_exception|no_data, ...record|reason+meaning}, ultimate_parent{same}, direct_children[]/ultimate_children[]{lei, legal_name, country, registration_status} (capped at children_limit), direct_children_total, ultimate_children_total (+ direct_parent.provenance/ultimate_parent.provenance when detail=true)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"lei":"5493006MHB84DD0ZWV18"}},{"name":"map","description":"Identifier mapping: ISIN / BIC / MIC / QCC / S&P-Global-ID → LEI record(s), or reverse LEI → all its ISINs.","required_params":["type","value"],"optional_params":["limit"],"params":[{"name":"type","type":"enum","required":true,"description":"Which identifier system to map. isin/bic/mic/qcc/spglobal map TO LEI records; lei_to_isin maps an LEI to its issued ISINs.","on_invalid":"reject","allowed_values":[{"value":"isin","label":"ISIN security identifier → issuing entity's LEI record"},{"value":"bic","label":"SWIFT/BIC bank code → the bank's LEI record"},{"value":"mic","label":"Market Identifier Code → venue operator's LEI record (GLEIF + ISO 10383 registry supplement for venues GLEIF lacks)"},{"value":"qcc","label":"Quoted Currency Code identifier → LEI record"},{"value":"spglobal","label":"S&P Global company ID → LEI record"},{"value":"lei_to_isin","label":"reverse: LEI → all ISINs issued by that entity"}],"example":"isin","aliases":["map_type","kind"]},{"name":"value","type":"string","required":true,"description":"The identifier to map: an ISIN (e.g. US0378331005), BIC (e.g. DEUTDEFFXXX), MIC, QCC, S&P Global ID — or the LEI itself for type=lei_to_isin.","on_invalid":"reject","example":"US0378331005","aliases":["identifier","code"]},{"name":"limit","type":"integer","required":false,"description":"Max results to return (1-200; GLEIF page cap is 200).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":200}],"returns":"type, value, entities[]{lei, legal_name, jurisdiction, registration_status, bic[], ...} for *→LEI types; isins[] + count for type=lei_to_isin","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"isin","value":"US0378331005"}},{"name":"reference","description":"GLEIF reference collections: ISO-20275 legal forms, registration authorities, LEI issuers (LOUs), jurisdictions, countries, regions, field catalog — list or fetch one by code.","required_params":["kind"],"optional_params":["code","limit","page"],"params":[{"name":"kind","type":"enum","required":true,"description":"Which reference list to query. All are GLEIF live except 'mic', which is served from the embedded ISO 10383 registry snapshot.","on_invalid":"reject","allowed_values":[{"value":"legal-forms","label":"ISO 20275 entity legal forms (ELF codes)"},{"value":"registration-authorities","label":"business-register authorities (RA codes)"},{"value":"lei-issuers","label":"LEI issuing organizations (LOUs)"},{"value":"jurisdictions","label":"legal jurisdictions"},{"value":"countries","label":"ISO 3166 countries"},{"value":"regions","label":"ISO 3166-2 regions"},{"value":"fields","label":"queryable LEI-record field catalog"},{"value":"mic","label":"ISO 10383 Market Identifier Codes (embedded registry; supports country=)"}],"example":"legal-forms","aliases":["type"]},{"name":"code","type":"string","required":false,"description":"Optional: fetch ONE reference item by its code/id (e.g. ELF code '8888', RA code 'RA000602', LOU LEI). Omit to list.","on_invalid":"ignore","example":"8888","aliases":["id"]},{"name":"limit","type":"integer","required":false,"description":"Max results to return (1-200; GLEIF page cap is 200).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":200},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":10000}],"returns":"kind, items[] (raw GLEIF attributes per item, id included), count, total — or item{} when code= is given","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"kind":"legal-forms"}},{"name":"batch","description":"Up to 50 mixed lookup/search items in one call. Lookups are collapsed into one upstream request per 50 LEIs (GLEIF rate-friendly); searches are spaced.","required_params":["items"],"optional_params":[],"params":[{"name":"items","type":"array","required":true,"description":"Up to 50 items. Each is {type: lookup|search, ...}: lookup items carry `lei`; search items carry `name` (+ optional `country`). Lookups are collapsed into ONE upstream call per 50 LEIs (rate-friendly); searches run sequentially, spaced. A bad item yields its own error entry — it never fails the batch.","on_invalid":"reject","example":[{"type":"lookup","lei":"HWUPKR0MPOU8FGXBT394"},{"type":"search","name":"Apple Inc","country":"US"}],"aliases":["inputs","batch"]}],"returns":"count, ok_count, results[] (each: {type, ok, entity|candidates|error, input echo}) in input order","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"items":[{"type":"lookup","lei":"HWUPKR0MPOU8FGXBT394"},{"type":"search","name":"Deutsche Bank","country":"DE"}]}}]},{"name":"letgo","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"letgo Turkey Second-Hand Classifieds","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/letgo/v1","spec_available":true,"actions":[{"name":"search","description":"Search letgo, Turkey's general second-hand classifieds app: phones, electronics, furniture and home, cars and motorbikes, clothing, kids, hobby, pets. Free text plus the site's own filters (category, province, district, price range, posting date, seller rating, free shipping) and its four sort orders, with cursor paging. Nothing is required: no parameters browses the newest-ranked live listings.","required_params":[],"optional_params":["query","category_id","city_id","district_id","min_price","max_price","posted_within","min_seller_rating","free_shipping","sort","cursor","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text as a Turkish shopper types it: `iphone 13`, `koltuk takımı`, `bisiklet`, `ford fiesta`. Without it the call browses a category or the whole site.","on_invalid":"reject","example":"koltuk","aliases":["q","keyword","query_text"]},{"name":"category_id","type":"integer","required":false,"description":"One letgo category id at any level (15000 Telefon, 15705 Araba, 15134 Ev & Yaşam, 15137 Koltuk). The full tree with ids is the `categories` action.","on_invalid":"reject","example":15134,"aliases":["category"]},{"name":"city_id","type":"string","required":false,"description":"Province: its id (İstanbul 4000040, Ankara 4000007, İzmir 4000041) or its name (`İzmir`, `izmir`). All 81 are in `locations`.","on_invalid":"reject","example":"4000041","aliases":["city"]},{"name":"district_id","type":"integer","required":false,"description":"District inside the chosen city (needs city_id). Ids come from `locations` with city_id, e.g. Bayraklı 5000458 in İzmir.","on_invalid":"reject","example":5000458,"aliases":["district"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in Turkish lira.","on_invalid":"reject","example":1000,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in Turkish lira.","on_invalid":"reject","example":5000,"minimum":0},{"name":"posted_within","type":"enum","required":false,"description":"Only listings published within this window (the site's 'İlan Tarihi' filter).","on_invalid":"reject","allowed_values":[{"value":"24h","label":"Last 24 hours"},{"value":"3d","label":"Last 3 days"},{"value":"7d","label":"Last 7 days"},{"value":"15d","label":"Last 15 days"}],"example":"7d"},{"name":"min_seller_rating","type":"number","required":false,"description":"Only sellers rated at least this (the site's 'Satıcı Puanı' filter): 3, 3.5, 4 or 4.5.","on_invalid":"reject","allowed_values":[{"value":3,"label":"3.0+"},{"value":3.5,"label":"3.5+"},{"value":4,"label":"4.0+"},{"value":4.5,"label":"4.5+"}],"example":4,"value_pattern":"(?:3|4)(?:\\.0+)?|(?:3|4)\\.50*"},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings that ship free (the site's 'Ücretsiz Kargo' filter).","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Order: relevance (the site's 'Akıllı Sıralama'), newest, price_asc, price_desc. Paid promoted rows are placed first on every order; is_promoted marks them.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"relevance","example":"price_asc"},{"name":"cursor","type":"string","required":false,"description":"Paging token: pass `next_cursor` from the previous page unchanged, with the same filters. Omit for the first page.","on_invalid":"reject","aliases":["next_cursor"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, total, rows_on_page, duplicates_dropped, has_more, next_cursor, sort, filters_applied, listings[]}. Each listing: {id, url, title, subtitle, price_try, price_display, currency, is_promoted, promotions[], city, district, category_id, image, has_video, max_installment_count, seller_id, seller_name, seller_rating, is_successful_seller}. For cars and motorbikes `title` is the card heading (make + model) and `subtitle` is year and km, exactly as the results page prints them; the seller's own title is in `item`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"koltuk","min_price":1000,"max_price":5000,"sort":"price_asc"}},{"name":"item","description":"One letgo listing in full: title, description, price, condition, every structured attribute the seller filled (for cars: make, model, year, km, fuel, gearbox, body, colour, plate, damage record and the paint/replacement state of each panel), category path, province and district, all photos and videos, posting and expiry dates, offer and payment options, and the seller — name, member since, verification, rating, review count.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"letgo listing id, exactly the `id` of a search row.","on_invalid":"reject","example":"1724093900","aliases":["item_id","listing_id"]},{"name":"url","type":"string","required":false,"description":"Or the listing URL (https://www.letgo.com/item/<slug>-iid-<id>).","on_invalid":"reject","example":"https://www.letgo.com/item/ikea-fjallbo-raf-unitesi-kitaplik-iid-1724093900"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, url, title, description, price_try, price_display, currency, price_mismatch, status, status_label, is_active, is_promoted, promotions[], condition, condition_display, category_id, category_name, category_path[], attributes{}, parameters[{key,label,value,display,code}], city_id, city, district_id, district, country, latitude, longitude, images[{url,width,height}], image_count, videos[], favorite_count, created_at, first_published_at, republished_at, updated_at, valid_to, max_installment_count, offers_enabled, hand_delivery, secure_payment, card_payment_on_delivery, seller_type, member_since_text, seller_id, seller{id, name, about, member_since, is_business, verification_status, account_status, rating, review_count, is_successful_seller, has_phone, avatar, profile_url}}. Either `id` or `url`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.letgo.com/item/ikea-fjallbo-raf-unitesi-kitaplik-iid-1724093900"}},{"name":"seller","description":"A letgo seller's public profile: name, about text, member since, business or private, verification status and what they verified with (phone, e-mail, Facebook…), avatar, and the profile counters — listings published, followers, following, items bought.","required_params":["seller_id"],"optional_params":["seller_id","include_pii"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"The seller's numeric id: `seller_id` of any search row or listing.","on_invalid":"reject","example":36187254,"aliases":["user_id"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, name, about, profile_url, member_since, is_business, is_banned, verification_status, verified_with[], has_phone, subscription_active, avatar, listings_published, followers, following, items_bought, favourites}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":36187254}},{"name":"seller_listings","description":"Every live listing of one letgo seller, newest first or by price, with cursor paging. The seller id is on every search row and listing.","required_params":["seller_id"],"optional_params":["seller_id","sort","cursor","include_pii"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"The seller's numeric id: `seller_id` of any search row or listing.","on_invalid":"reject","example":36187254,"aliases":["user_id"]},{"name":"sort","type":"enum","required":false,"description":"Order: newest (default), price_asc, price_desc.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"newest","example":"newest"},{"name":"cursor","type":"string","required":false,"description":"Paging token: pass `next_cursor` from the previous page unchanged, with the same filters. Omit for the first page.","on_invalid":"reject","aliases":["next_cursor"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{seller_id, total, rows_on_page, duplicates_dropped, has_more, next_cursor, sort, listings[{id, url, title, price_try, price_display, currency, is_promoted, city, district, category_id, created_at, image, attributes{}, seller_id, seller_name}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":36187254}},{"name":"categories","description":"letgo's full category tree (15 top-level sections, 846 categories), flattened with ids, parent ids, the readable path and the category page URL. Use the ids as `category_id` in search.","required_params":[],"optional_params":["parent_id","include_pii"],"params":[{"name":"parent_id","type":"integer","required":false,"description":"Only this category and everything under it (e.g. 15705 Araba).","on_invalid":"reject","example":15705,"aliases":["root_id"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{count, categories[{id, name, slug, parent_id, path, depth, is_leaf, url}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"parent_id":15705}},{"name":"locations","description":"The place ids search filters on: without a city, Turkey's 81 provinces; with a city_id (or name), that province's districts with the live number of listings in each.","required_params":[],"optional_params":["city_id","include_pii"],"params":[{"name":"city_id","type":"string","required":false,"description":"Omit to list the 81 provinces. Give a province id or name to list its districts with live listing counts.","on_invalid":"reject","example":"4000041","aliases":["city"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{level: 'city'|'district', city_id, city, count, locations[{id, name, listings}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"city_id":"4000041"}}]},{"name":"letterboxd","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Letterboxd API scraper — film details (rating, runtime, cast, crew, similar films), reviews, member profiles, diary, curated lists, and search from Letterboxd.com","version":"0.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/letterboxd/v1","spec_available":true,"actions":[{"name":"film","description":"Full Letterboxd film detail by film slug or URL: title, year, directors, cast, genres, runtime, poster, IMDb/TMDb IDs, average rating, total ratings, watch count, like count, and list appearances.","required_params":[],"optional_params":["film","film_slug","url"],"params":[{"name":"film","type":"string","required":false,"description":"Letterboxd film slug, OR a full film URL (https://letterboxd.com/film/parasite-2019/) — the path is parsed to the slug.","on_invalid":"reject","example":"parasite-2019","aliases":["film_slug","url"]}],"returns":"film{} — title, year, directors, cast[], genres, runtime, poster, imdb_id/tmdb_id, avg_rating, rating_count, watch_count, like_count, list_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"film":"parasite-2019"}},{"name":"user","description":"Public Letterboxd member profile and stats by username: display name, avatar, bio, film/list/follower counts, and the member's favourite films.","required_params":["user"],"optional_params":[],"params":[{"name":"user","type":"string","required":true,"description":"Letterboxd username (the handle in a profile URL), OR a profile URL.","on_invalid":"reject","example":"dave","aliases":["username"]}],"returns":"profile{} — display_name, avatar, bio, films/lists/following/followers counts, favorite_films[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dave"}},{"name":"user_films","description":"Paginated list of films a Letterboxd member has watched and rated, with their personal star rating for each.","required_params":["user"],"optional_params":["page","per_page"],"params":[{"name":"user","type":"string","required":true,"description":"Letterboxd username (the handle in a profile URL), OR a profile URL.","on_invalid":"reject","example":"dave","aliases":["username"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Hint only — Letterboxd fixes the page size per view (films 72, reviews 12, diary/list 100); reported back in meta.per_page.","on_invalid":"ignore","example":72}],"returns":"films[] (slug, name, url, user_rating); meta.page/per_page/has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dave"}},{"name":"user_diary","description":"Paginated diary entries for a Letterboxd member: film slug, name, watch date, and star rating for each viewing.","required_params":["user"],"optional_params":["page","per_page"],"params":[{"name":"user","type":"string","required":true,"description":"Letterboxd username (the handle in a profile URL), OR a profile URL.","on_invalid":"reject","example":"dave","aliases":["username"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Hint only — Letterboxd fixes the page size per view (films 72, reviews 12, diary/list 100); reported back in meta.per_page.","on_invalid":"ignore","example":72}],"returns":"entries[] (slug, name, watched_date, rating); meta.page/per_page/has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dave"}},{"name":"list","description":"A public Letterboxd curated film list: title, description, and the paginated film entries with user ratings.","required_params":["user","list"],"optional_params":["page","per_page"],"params":[{"name":"user","type":"string","required":true,"description":"Letterboxd username (the handle in a profile URL), OR a profile URL.","on_invalid":"reject","example":"dave","aliases":["username"]},{"name":"list","type":"string","required":true,"description":"List slug (the segment after /list/ in a list URL).","on_invalid":"reject","example":"official-top-250-narrative-feature-films","aliases":["list_slug"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Hint only — Letterboxd fixes the page size per view (films 72, reviews 12, diary/list 100); reported back in meta.per_page.","on_invalid":"ignore","example":72}],"returns":"username, slug, title, description, films[]; meta.page/per_page/has_more","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dave","list":"official-top-250-narrative-feature-films"}},{"name":"film_reviews","description":"Paginated public reviews for a Letterboxd film: reviewer username, display name, star rating, review text, and like count.","required_params":[],"optional_params":["film","film_slug","url","page","per_page"],"params":[{"name":"film","type":"string","required":false,"description":"Letterboxd film slug, OR a full film URL (https://letterboxd.com/film/parasite-2019/) — the path is parsed to the slug.","on_invalid":"reject","example":"parasite-2019","aliases":["film_slug","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Hint only — Letterboxd fixes the page size per view (films 72, reviews 12, diary/list 100); reported back in meta.per_page.","on_invalid":"ignore","example":72}],"returns":"reviews[] (username, display_name, rating, text, likes), film; meta.page/per_page/has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"film":"parasite-2019"}},{"name":"browse","description":"Browse Letterboxd films with optional genre / decade / year filters, ordered by popularity, rating, release date, or runtime (paginated): slug, name, URL, and average rating.","required_params":[],"optional_params":["sort","genre","decade","year","page","per_page"],"params":[{"name":"sort","type":"enum","required":false,"description":"Ordering for the films browser.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Most popular (default)"},{"value":"rating","label":"Highest rated"},{"value":"release","label":"Newest by release date"},{"value":"shortest","label":"Shortest runtime first"},{"value":"longest","label":"Longest runtime first"}],"default":"popular","example":"popular"},{"name":"genre","type":"enum","required":false,"description":"Optional genre filter for the films browser (e.g. horror, science-fiction). Combine with sort to get e.g. highest-rated horror.","on_invalid":"reject","allowed_values":[{"value":"action","label":"Action"},{"value":"adventure","label":"Adventure"},{"value":"animation","label":"Animation"},{"value":"comedy","label":"Comedy"},{"value":"crime","label":"Crime"},{"value":"documentary","label":"Documentary"},{"value":"drama","label":"Drama"},{"value":"family","label":"Family"},{"value":"fantasy","label":"Fantasy"},{"value":"history","label":"History"},{"value":"horror","label":"Horror"},{"value":"music","label":"Music"},{"value":"mystery","label":"Mystery"},{"value":"romance","label":"Romance"},{"value":"science-fiction","label":"Science Fiction"},{"value":"thriller","label":"Thriller"},{"value":"tv-movie","label":"Tv Movie"},{"value":"war","label":"War"},{"value":"western","label":"Western"}],"example":"horror"},{"name":"decade","type":"string","required":false,"description":"Optional decade filter, e.g. '1990s', '2010s'. Combine with sort and/or genre.","on_invalid":"reject","example":"1990s"},{"name":"year","type":"integer","required":false,"description":"Optional release-year filter, e.g. 2019. Combine with sort and/or genre.","on_invalid":"reject","example":2019},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Hint only — Letterboxd fixes the page size per view (films 72, reviews 12, diary/list 100); reported back in meta.per_page.","on_invalid":"ignore","example":72}],"returns":"films[] (slug, name, url, avg_rating), sort, filters; meta.page/per_page/has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"sort":"popular"}},{"name":"film_similar","description":"Films Letterboxd shows as similar/related to a given film: slug, name, URL — useful for recommendation and discovery off a single seed film.","required_params":[],"optional_params":["film","film_slug","url"],"params":[{"name":"film","type":"string","required":false,"description":"Letterboxd film slug, OR a full film URL (https://letterboxd.com/film/parasite-2019/) — the path is parsed to the slug.","on_invalid":"reject","example":"parasite-2019","aliases":["film_slug","url"]}],"returns":"similar_films[] (slug, name, url), film; meta.record_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"film":"parasite-2019"}},{"name":"lists_popular","description":"Browse Letterboxd's most popular member-curated film lists for a time window (week/month/year/all): list title, owner username, list slug+URL, and a preview of the first films.","required_params":[],"optional_params":["period","page","per_page"],"params":[{"name":"period","type":"enum","required":false,"description":"Time window for the popular-lists ranking.","on_invalid":"reject","allowed_values":[{"value":"week","label":"Popular this week (default)"},{"value":"month","label":"Popular this month"},{"value":"year","label":"Popular this year"},{"value":"all","label":"Most popular of all time"}],"default":"week","example":"week"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Hint only — Letterboxd fixes the page size per view (films 72, reviews 12, diary/list 100); reported back in meta.per_page.","on_invalid":"ignore","example":72}],"returns":"lists[] (list_id, username, slug, title, url, preview_film_slugs[]), period; meta.page/per_page/has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"period":"week"}},{"name":"user_lists","description":"The public film lists a Letterboxd member has created (paginated): list title, slug+URL, and a preview of the first films in each list.","required_params":["user"],"optional_params":["page","per_page"],"params":[{"name":"user","type":"string","required":true,"description":"Letterboxd username (the handle in a profile URL), OR a profile URL.","on_invalid":"reject","example":"dave","aliases":["username"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Hint only — Letterboxd fixes the page size per view (films 72, reviews 12, diary/list 100); reported back in meta.per_page.","on_invalid":"ignore","example":72}],"returns":"lists[] (list_id, username, slug, title, url, preview_film_slugs[]); meta.page/per_page/has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dave"}},{"name":"search","description":"Search Letterboxd for films, members, or curated lists by keyword — returns matching results with ratings and links.","required_params":["query"],"optional_params":["type","page","per_page"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query.","on_invalid":"reject","example":"parasite"},{"name":"type","type":"enum","required":false,"description":"Which catalog to search.","on_invalid":"reject","allowed_values":[{"value":"films","label":"Films (default)"},{"value":"members","label":"Members / users"},{"value":"lists","label":"Public lists"}],"default":"films","example":"films"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Use meta.has_more to know when to stop; values < 1 clamp to 1.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Hint only — Letterboxd fixes the page size per view (films 72, reviews 12, diary/list 100); reported back in meta.per_page.","on_invalid":"ignore","example":72}],"returns":"films[] | members[] | lists[] (keyed by type), type, query; meta.page/per_page/has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"parasite"}}]},{"name":"levels-fyi","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Levels.fyi API — tech salary & compensation scraper: total comp, base, stock and bonus by company, role, level, location and years of experience, plus percentile bands (P10/P25/P50/P75/P90), the median offer and individual anonymized salary submissions from Levels.fyi (levels.fyi) — company role catalog and role-to-company coverage included, no API key required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/levels-fyi/v1","spec_available":true,"actions":[{"name":"company/salaries","description":"The flagship action: full Levels.fyi compensation breakdown for one company + role. Returns the level ladder (L3/L4/…), per-level averages (base / stock / bonus / total), the percentile bands (P10/P25/P50/P75/P90 for total-comp, base, bonus and stock), the median offer (with years of experience), the role's sub-specializations and a sample of recent salary submissions. Pass an optional `location` to scope to a metro.","required_params":["company","role"],"optional_params":["location"],"params":[{"name":"company","type":"string","required":true,"description":"Company name or Levels.fyi slug ('google', 'Goldman Sachs', 'stripe', 'nvidia'). A name is auto-slugified; if you already have the slug from company/search, pass it directly.","on_invalid":"reject","example":"google","aliases":["company_slug","employer"]},{"name":"role","type":"string","required":true,"description":"Job family / role ('software-engineer', 'product-manager', 'data-scientist', 'hardware-engineer'). Use company/roles to list the exact roles a company reports.","on_invalid":"reject","example":"software-engineer","aliases":["job_family","title","job_title"]},{"name":"location","type":"string","required":false,"description":"Optional metro/location slug to scope comp to one area ('new-york-city-area', 'seattle-area', 'bay-area'). Omit for the company-wide (United States) figures.","on_invalid":"ignore","example":"new-york-city-area"}],"returns":"company{id,slug,name,…}, role, location, percentiles{total_comp,base_salary,bonus,stock_grant each p10..p90}, median{level,total_compensation,base_salary,years_of_experience,…}, levels[]{titles,order,percent_workforce}, averages[]{level,total_compensation,base_salary,stock_grant,bonus,sample_count}, related_roles[]{title,title_slug,salary_count}, sample_submissions[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"google","role":"software-engineer"}},{"name":"company/roles","description":"Resolve a company to its Levels.fyi profile (id, slug, website, employee count, HQ, vesting schedule…) plus the catalog of job-family role slugs you can query for it. Use this to confirm a company's slug and pick a role slug to feed into company/salaries. NOTE: the role list is the full Levels.fyi job-family catalog (the roles available to query) — for the roles a company actually has reported data for, read `related_roles` from a company/salaries response.","required_params":["company"],"optional_params":[],"params":[{"name":"company","type":"string","required":true,"description":"Company name or Levels.fyi slug ('google', 'Goldman Sachs', 'stripe', 'nvidia'). A name is auto-slugified; if you already have the slug from company/search, pass it directly.","on_invalid":"reject","example":"google","aliases":["company_slug","employer"]}],"returns":"company{id,slug,name,website,employee_count,hq_city,vesting_schedule,…}, available_roles[]{slug,name,category,description}","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"stripe"}},{"name":"company/search","description":"Find companies on Levels.fyi by name. Returns matching companies with the slug and a ready-to-use salaries URL — feed the slug into company/roles or company/salaries.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Company name (or part of it) to search for.","on_invalid":"reject","example":"goldman","aliases":["q","company"]},{"name":"limit","type":"integer","required":false,"description":"Max companies to return (1–100).","on_invalid":"ignore","default":20,"minimum":1,"maximum":100}],"returns":"companies[]{name, slug, salaries_url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"goldman"}},{"name":"role/companies","description":"For a given role/title, list every company that reports compensation data for it on Levels.fyi (the role's coverage), plus the country-wide median total-comp and the full job-family catalog. Useful for 'which companies pay for <role>' and leaderboard-style discovery.","required_params":["role"],"optional_params":["limit"],"params":[{"name":"role","type":"string","required":true,"description":"Role / job-family slug ('software-engineer', 'product-manager', 'data-scientist').","on_invalid":"reject","example":"software-engineer","aliases":["job_family","title"]},{"name":"limit","type":"integer","required":false,"description":"Max companies to return (1–2000).","on_invalid":"ignore","default":200,"minimum":1,"maximum":2000}],"returns":"role, median_total_compensation, companies[]{name}, job_families[]{slug,name,category}","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"role":"software-engineer"}},{"name":"submissions","description":"Paginated individual salary submissions for a company + role — the raw anonymized datapoints behind the averages: level, focus, years of experience, location, base / stock / bonus / total comp and offer date. 50 per page; page with `page`.","required_params":["company","role"],"optional_params":["location","page"],"params":[{"name":"company","type":"string","required":true,"description":"Company name or Levels.fyi slug ('google', 'Goldman Sachs', 'stripe', 'nvidia'). A name is auto-slugified; if you already have the slug from company/search, pass it directly.","on_invalid":"reject","example":"google","aliases":["company_slug","employer"]},{"name":"role","type":"string","required":true,"description":"Job family / role ('software-engineer', 'product-manager', 'data-scientist', 'hardware-engineer'). Use company/roles to list the exact roles a company reports.","on_invalid":"reject","example":"software-engineer","aliases":["job_family","title","job_title"]},{"name":"location","type":"string","required":false,"description":"Optional metro/location slug to scope comp to one area ('new-york-city-area', 'seattle-area', 'bay-area'). Omit for the company-wide (United States) figures.","on_invalid":"ignore","example":"new-york-city-area"},{"name":"page","type":"integer","required":false,"description":"Submission page (50 per page). Page until meta.total_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"submissions[]{uuid, level, title, focus_tag, years_of_experience, location, base_salary, total_compensation, stock_grant_annual, bonus_annual, offer_date, currency} + meta{page, total_pages, total}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"google","role":"software-engineer"}}]},{"name":"libraccio","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Libraccio API — live data from libraccio.it, Italy's big new and second-hand bookseller. Search about 1.16 million books, school textbooks and stationery by keyword, ISBN, author, publisher, series, department, school type, school subject, age band, year and price, and get for every EAN Libraccio's NEW price, the cover price, the discount, whether a USED copy is in stock and its used price — side by side. Price up to 50 ISBNs in one call, or open one book for its live new and used buy boxes, dispatch times, stock units, school-book voucher and full bibliography. Prices in EUR. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/libraccio/v1","spec_available":true,"actions":[{"name":"search","description":"Search Libraccio's catalogue. Free text plus exact filters on author, publisher, series, department, school type and subject, character, product family, age band, publication year, new price, used price and new/used stock. One row per EAN with the NEW selling price, the cover price, the new discount, the USED price and its discount against cover, both stock flags, both dispatch times, the shop's own 30/90/180-day sales counters and the full bibliographic record. Every filter was measured to change the total in the same run; the result window is 10,000 hits per query and the engine says so instead of looping past it. Order is the shop's own relevance (no other sort exists on the public search backend).","required_params":[],"optional_params":["query","author","publisher","series","department","school_type","school_subject","character","product_type","age_band","used_in_stock","new_in_stock","min_price","max_price","min_used_price","max_used_price","year_min","year_max","page","per_page","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text over title, author, publisher, series and the EAN/ISBN itself, matched the way the shop's own search box matches it (typo-tolerant). Optional when a filter is given.","on_invalid":"reject","example":"carofiglio","aliases":["q","keyword","keywords","search","text"]},{"name":"author","type":"string","required":false,"description":"Exact author name as the catalogue spells it (see `facets`).","on_invalid":"reject","example":"Gianni Rodari"},{"name":"publisher","type":"string","required":false,"description":"Exact publisher name as the catalogue spells it, e.g. 'Mondadori', 'Zanichelli', 'Giuffrè' (see `facets`).","on_invalid":"reject","example":"Einaudi","aliases":["editore"]},{"name":"series","type":"string","required":false,"description":"Publisher series ('collana'), exact spelling, e.g. 'Oscar bestsellers', 'Piccola biblioteca Adelphi'.","on_invalid":"reject","example":"Supercoralli","aliases":["collana"]},{"name":"department","type":"string","required":false,"description":"Libraccio's own department ('reparto'), e.g. 'Narrativa', 'Libri per ragazzi', 'Diritto', 'Fumetti & graphic novels'.","on_invalid":"reject","example":"Narrativa","aliases":["reparto","category"]},{"name":"school_type","type":"string","required":false,"description":"School type a textbook is adopted in ('Scuola primaria', 'Scuole medie inferiori', 'Liceo classico', ...).","on_invalid":"reject","example":"Liceo scientifico","aliases":["scuola"]},{"name":"school_subject","type":"string","required":false,"description":"Textbook subject ('materia'), e.g. 'Matematica', 'Storia', 'Inglese. Grammatica'.","on_invalid":"reject","example":"Matematica","aliases":["materia"]},{"name":"character","type":"string","required":false,"description":"Franchise / character tag, e.g. 'Harry Potter', 'One Piece'.","on_invalid":"reject","example":"Harry Potter","aliases":["personaggio"]},{"name":"product_type","type":"enum","required":false,"description":"Product family. 'school_book' is the textbook catalogue where the used offer is deepest.","on_invalid":"reject","allowed_values":[{"value":"book","label":"general book, Italian and foreign (1,028,002 records on 2026-10-14)"},{"value":"school_book","label":"school textbook, 'testi scolastici' (120,452)"},{"value":"stationery","label":"stationery / school supplies, 'cartoleria' (16,430)"},{"value":"hardware","label":"e-reader hardware (49)"}],"example":"school_book","aliases":["type"]},{"name":"age_band","type":"enum","required":false,"description":"Children's age band as the shop labels it ('da 6 anni' = from 6).","on_invalid":"reject","allowed_values":[{"value":"0-2","label":"da 0 a 2 anni"},{"value":"3","label":"da 3 anni"},{"value":"4","label":"da 4 anni"},{"value":"5","label":"da 5 anni"},{"value":"6","label":"da 6 anni"},{"value":"7","label":"da 7 anni"},{"value":"8","label":"da 8 anni"},{"value":"9","label":"da 9 anni"},{"value":"10","label":"da 10 anni"},{"value":"11","label":"da 11 anni"},{"value":"12","label":"da 12 anni"},{"value":"13","label":"da 13 anni"},{"value":"young_adult","label":"Young Adult"}],"example":"6","aliases":["age"]},{"name":"used_in_stock","type":"boolean","required":false,"description":"true = only titles Libraccio has a USED copy of right now; false = only titles with no used copy.","on_invalid":"reject","example":true,"aliases":["used","usato","used_available"]},{"name":"new_in_stock","type":"boolean","required":false,"description":"The index's new-stock flag. Note: a title with false can still be orderable new from a supplier (3 of 6 measured) — `detail` gives the page's own wording.","on_invalid":"reject","example":true,"aliases":["new_available"]},{"name":"min_price","type":"number","required":false,"description":"Minimum NEW selling price in EUR.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Maximum NEW selling price in EUR.","on_invalid":"reject","example":30,"minimum":0},{"name":"min_used_price","type":"number","required":false,"description":"Minimum USED price in EUR (implies used_in_stock).","on_invalid":"reject","example":2,"minimum":0},{"name":"max_used_price","type":"number","required":false,"description":"Maximum USED price in EUR (implies used_in_stock).","on_invalid":"reject","example":8,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Earliest publication year.","on_invalid":"reject","example":2020,"minimum":1400},{"name":"year_max","type":"integer","required":false,"description":"Latest publication year.","on_invalid":"reject","example":2026,"minimum":1400},{"name":"page","type":"integer","required":false,"description":"1-based page. The source answers at most 10,000 hits per query, so the last page is 10,000 / per_page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, 1-100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","hits_per_page"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: Libraccio is the only seller and it is a company.","on_invalid":"reject","default":false}],"returns":"books[]{ean, isbn13, isbn10, title, authors[], author_sort, editors[], translators[], publisher, series, department, subject, school_type, school_subject, characters[], age_band, age_band_label, product_type, year_published, year_edition, year_published_raw, date_published, currency, new_price, new_discount_pct, cover_price, cover_price_derived, new_in_stock, new_dispatch_days, used_in_stock, used_price, used_discount_pct_vs_cover, used_dispatch_days, used_saving_vs_new, rating, sales_30d, sales_90d, sales_180d, image_url, url} + seller{} + meta{total, total_is_exhaustive, returned, page, per_page, max_page, has_more, filters_applied{}, filter_check{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rodari","used_in_stock":true,"per_page":20}},{"name":"isbn","description":"Price up to 50 ISBNs/EANs against Libraccio in ONE upstream request — new price, cover price, used price, both stock flags and dispatch days, plus the bibliographic record. ISBN-10s are converted to ISBN-13 and every check digit is verified first. The answer keeps your order and separates found, not carried by Libraccio, and invalid input.","required_params":["isbns"],"optional_params":[],"params":[{"name":"isbns","type":"array","required":true,"description":"Up to 50 ISBN-13 / ISBN-10 / EAN codes in ONE call, mixed freely. The answer keeps your order and separates found, not carried, and invalid.","on_invalid":"reject","example":["9788807592867","9788804772132","8806254483"],"aliases":["eans","isbn_list","barcodes"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: Libraccio is the only seller and it is a company.","on_invalid":"reject","default":false}],"returns":"books[]{ean, isbn13, isbn10, title, authors[], author_sort, editors[], translators[], publisher, series, department, subject, school_type, school_subject, characters[], age_band, age_band_label, product_type, year_published, year_edition, year_published_raw, date_published, currency, new_price, new_discount_pct, cover_price, cover_price_derived, new_in_stock, new_dispatch_days, used_in_stock, used_price, used_discount_pct_vs_cover, used_dispatch_days, used_saving_vs_new, rating, sales_30d, sales_90d, sales_180d, image_url, url}, not_found[]{isbn, lookup_key}, invalid[]{isbn, reason} + meta{requested, found, not_found, invalid}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"isbns":["9788807592867","9788804772132","9788828869269"]}},{"name":"detail","description":"Everything Libraccio's product page publishes for one EAN: title, authors, publisher, series, translator, school subject and type, edition and publication year, physical description and page count, category, full description. Then the two offers as the page shows them — the NEW buy box (price, crossed-out cover price, availability wording, whether it can be bought) and the USED buy box (price, reference cover price, availability) — with the cover price, the new discount, the saving of used against new and against cover, the school-book voucher Libraccio pays back, free-shipping flag, stock units for new and used and dispatch days, and the review count. Prices are cross-checked against the page's own product data and any disagreement is published.","required_params":["ean"],"optional_params":[],"params":[{"name":"ean","type":"string","required":true,"description":"The `ean` every search row carries — or any ISBN-13 / ISBN-10 / 13-digit EAN, with or without dashes. ISBN-10 is converted to the 978 ISBN-13 the shop is keyed on; a wrong check digit is rejected before any request.","on_invalid":"reject","example":"9788807592867","aliases":["isbn","isbn13","isbn10","barcode","id"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: Libraccio is the only seller and it is a company.","on_invalid":"reject","default":false}],"returns":"ean, isbn13, isbn10, title, authors[], publisher, series, translator, editor, brand, supplier, school_subject, school_type, year_edition, year_published, physical_description, pages, category, description, image_url, url, currency, cover_price, new_price, new_discount_pct, new_offer{price, crossed_out_price, availability, button, buyable}, used_price, used_offer{...}, used_available, used_saving_vs_new, used_saving_vs_cover, school_voucher_eur, free_shipping_italy, preorder, hard_to_find, stock{new_units, used_units, new_status, used_status, new_sellable, used_sellable, new_dispatch_days, used_dispatch_days, preorder, raw}, rating_stars, review_count, ld_json_price, ld_json_availability, ld_json_offers[]{price, availability}, attributes{}, seller{}, price_disagreements[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"ean":"9788807592867"}},{"name":"facets","description":"The shape of the catalogue (or of one search) in one request: departments, publishers, authors, series, school types, school subjects, characters, product families, age bands, new/used stock split and years, each with a count, plus min/avg/max new and used price. Use it to get the exact spellings `search` filters take. Counts are index-wide and can exceed what `search` returns for the same filter (measured: stationery facet 16,430 vs search 6,756).","required_params":[],"optional_params":["query","department","product_type","top"],"params":[{"name":"query","type":"string","required":false,"description":"Free text over title, author, publisher, series and the EAN/ISBN itself, matched the way the shop's own search box matches it (typo-tolerant). Optional when a filter is given.","on_invalid":"reject","example":"carofiglio","aliases":["q","keyword","keywords","search","text"]},{"name":"department","type":"string","required":false,"description":"Libraccio's own department ('reparto'), e.g. 'Narrativa', 'Libri per ragazzi', 'Diritto', 'Fumetti & graphic novels'.","on_invalid":"reject","example":"Narrativa","aliases":["reparto","category"]},{"name":"product_type","type":"enum","required":false,"description":"Product family. 'school_book' is the textbook catalogue where the used offer is deepest.","on_invalid":"reject","allowed_values":[{"value":"book","label":"general book, Italian and foreign (1,028,002 records on 2026-10-14)"},{"value":"school_book","label":"school textbook, 'testi scolastici' (120,452)"},{"value":"stationery","label":"stationery / school supplies, 'cartoleria' (16,430)"},{"value":"hardware","label":"e-reader hardware (49)"}],"example":"school_book","aliases":["type"]},{"name":"top","type":"integer","required":false,"description":"How many values to return per facet (by count).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: Libraccio is the only seller and it is a company.","on_invalid":"reject","default":false}],"returns":"departments[], publishers[], authors[], series[], school_types[], school_subjects[], characters[], product_types[], age_bands[], new_in_stock{}, used_in_stock{}, years[], price_stats{new, used} + meta{total, counts_are_index_wide}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"top":20}}]},{"name":"lider","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Lider API — Walmart Chile supermarket and catálogo: shelf prices in CLP, Rebaja and multi-buy deals, unit price, price per kg, stock, brand, seller, full product data","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/lider/v1","spec_available":true,"actions":[{"name":"search","description":"Search Lider.cl (Walmart Chile): the supermarket (super.lider.cl) or the general catálogo (www.lider.cl, with Marketplace sellers). One page of ~44 products: item_id, name, brand, price in CLP, crossed-out price + saving on a Rebaja, multi-buy deal ('Combina 2 x $3.000'), unit price ($/lt, $/kg, $/un), price per kg for loose produce, stock state, seller, category path, rating, sponsored flag — plus the source's own filter values with counts (brands, categories, campaigns, seals, seller types, price range). Filters: brand, category, campaign, seal, seller_type, min_price, max_price; sort; page. Prices are the site's default store (Vitacura, Santiago). `query` is required.","required_params":["query"],"optional_params":["store","page","sort","brand","category","campaign","seal","seller_type","min_price","max_price"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the Lider search box (Spanish: leche, arroz, cerveza, televisor).","on_invalid":"reject","example":"leche","aliases":["q","keyword","search"]},{"name":"store","type":"enum","required":false,"description":"Which Lider catalogue: `supermercado` (super.lider.cl, groceries) or `catalogo` (www.lider.cl: electronics, home, toys, incl. Marketplace sellers). They are different catalogues (televisor: 47 vs 6,511 results).","on_invalid":"reject","allowed_values":[{"value":"supermercado","label":"Supermercado (super.lider.cl)"},{"value":"catalogo","label":"Catálogo / general store (www.lider.cl)"}],"default":"supermercado","aliases":["site","tienda"]},{"name":"page","type":"integer","required":false,"description":"Result page (~44 products each). `max_page` in the answer is the source's last page; deep paging stops near 1,000 results even when the total is larger.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Most relevant (the site's default)"},{"value":"price_low","label":"Price, low to high"},{"value":"price_high","label":"Price, high to low"}],"default":"best_match"},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled exactly as in `facets.brands` (case-sensitive at the source: 'Soprole' 60 milk products, 'soprole' none). One brand per call.","on_invalid":"reject","example":"Soprole","aliases":["marca"]},{"name":"category","type":"string","required":false,"description":"Only this department, spelled exactly as in `facets.categories`.","on_invalid":"reject","example":"Lácteos, Fiambrería y Huevos","aliases":["categoria"]},{"name":"campaign","type":"string","required":false,"description":"Only products in this campaign, spelled exactly as in `facets.campaigns` (e.g. 'Precio Lider').","on_invalid":"reject","example":"Precio Lider","aliases":["campana","campaña"]},{"name":"seal","type":"string","required":false,"description":"Chilean front-of-pack warning seals, exactly as in `facets.seals` (e.g. 'alto en azúcares'). Supermarket.","on_invalid":"reject","example":"alto en azúcares","aliases":["sellos","sello"]},{"name":"seller_type","type":"enum","required":false,"description":"Catálogo only: sold by Lider itself or by a Marketplace seller (televisor: Lider 451, Marketplace 6,006).","on_invalid":"reject","allowed_values":[{"value":"lider","label":"Lider"},{"value":"marketplace","label":"Marketplace"},{"value":"marketplace_fast","label":"Marketplace con Envío Rápido"}],"aliases":["sold_by","vendido_por"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in CLP (whole pesos, e.g. 1000).","on_invalid":"reject","minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in CLP (whole pesos, e.g. 2000).","on_invalid":"reject","minimum":0,"aliases":["price_max"]}],"returns":"store, store_id, total (the source's count), page, max_page, beyond_last_page, returned, sponsored_count, results[]{item_id, name, brand, url, store, price, price_display, list_price, savings_amount, savings_display, on_sale, multibuy{quantity, total, per_unit, mix_and_match, text}, unit_price{amount, unit, display}, unit_price_display, sold_by_weight, price_per, weight_increment_kg, currency, badges[], availability, in_stock, seller, seller_id, seller_type, category, category_path[], image, rating, review_count, sponsored, rank}, facets{brands[], categories[], campaigns[], seals[], seller_types[], price_min, price_max}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"leche"}},{"name":"product","description":"One Lider.cl product by item_id (as search rows return it) or product URL: everything in a search row plus UPC, all images, short and long description, the specification table (ingredients, net content, country of origin, food-condition tags, presentation, ...), nutrition rows, order limits, seller and offer type (1P Lider / 3P Marketplace), pickup / delivery labels and the page's own ld+json price as a second witness (`price_mismatch`). `item_id` or `url` is required.","required_params":[],"optional_params":["item_id","url","store"],"params":[{"name":"item_id","type":"string","required":false,"description":"The 14-digit item_id exactly as a search row returns it (00780290000130).","on_invalid":"reject","example":"00780290000130","aliases":["id","sku","product_id","upc"]},{"name":"url","type":"string","required":false,"description":"A super.lider.cl or www.lider.cl product URL (/ip/...).","on_invalid":"reject","example":"https://super.lider.cl/ip/leche/00780290000130","aliases":["product_url"]},{"name":"store","type":"enum","required":false,"description":"Which catalogue to price the product in. Omitted: supermercado, then catálogo if the supermarket does not sell it (a product URL picks its own host).","on_invalid":"reject","allowed_values":[{"value":"supermercado","label":"Supermercado (super.lider.cl)"},{"value":"catalogo","label":"Catálogo / general store (www.lider.cl)"}],"aliases":["site","tienda"]}],"returns":"item{item_id, upc, name, brand, url, store, offered, price, price_display, list_price, savings_amount, savings_display, on_sale, multibuy{}, unit_price{}, unit_price_display, sold_by_weight, price_per, weight_increment_kg, currency, badges[], availability, in_stock, order_limit, order_min, seller, seller_id, seller_type, offer_type, category, category_path[]{name, url}, images[], rating, review_count, short_description, description, specifications[]{name, value}, nutrition[]{name, amount, standard_serving_amount, daily_value_pct}, fulfillment[]{method, message, location}, ld_json{price, availability, brand}, price_mismatch}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"00780290000130"}}]},{"name":"lidl","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Lidl API scraper — Lidl's web shops in 8 European countries and the in-store weekly offers of 30: search, category browse, offers and the full product record with EAN, variants, Lidl Plus member price and delivery, in local currency. No account, no browser.","version":"0.1.3","pii_redact_default":false,"mint_reusable":null,"base_path":"/lidl/v1","spec_available":true,"actions":[{"name":"search","description":"Search one Lidl country by keyword (or EAN): product id, title, brand, image, the public price with the struck-through price and whether that is the recommended retail price or Lidl's previous price, discount, unit price, Lidl Plus member price kept separate, rating and review count, web-shop availability and in-store offer dates. Filter by brand, price, rating and availability; sort by price, rating, newest, bestselling or discount.","required_params":["query"],"optional_params":["country","language","page","limit","sort","brand","price_min","price_max","min_rating","availability","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, in the country's language. An EAN barcode also works.","on_invalid":"reject","example":"kaffeemaschine","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Lidl country site. de, fr, pl, nl, be, es, cz and sk have a web shop; the other countries list only their current and upcoming in-store offers. Prices come back in that country's currency. 'uk' is accepted and read as 'gb'.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (EUR, web shop)"},{"value":"fr","label":"France (EUR, web shop)"},{"value":"pl","label":"Poland (PLN, web shop)"},{"value":"nl","label":"Netherlands (EUR, web shop)"},{"value":"be","label":"Belgium (EUR, web shop)"},{"value":"es","label":"Spain (EUR, web shop)"},{"value":"cz","label":"Czechia (CZK, web shop)"},{"value":"sk","label":"Slovakia (EUR, web shop)"},{"value":"it","label":"Italy (EUR, in-store offers only)"},{"value":"at","label":"Austria (EUR, in-store offers only)"},{"value":"hu","label":"Hungary (HUF, in-store offers only)"},{"value":"ro","label":"Romania (RON, in-store offers only)"},{"value":"bg","label":"Bulgaria (EUR, in-store offers only)"},{"value":"hr","label":"Croatia (EUR, in-store offers only)"},{"value":"si","label":"Slovenia (EUR, in-store offers only)"},{"value":"ch","label":"Switzerland (CHF, in-store offers only)"},{"value":"dk","label":"Denmark (DKK, in-store offers only)"},{"value":"se","label":"Sweden (SEK, in-store offers only)"},{"value":"fi","label":"Finland (EUR, in-store offers only)"},{"value":"ie","label":"Ireland (EUR, in-store offers only)"},{"value":"gb","label":"United Kingdom (GBP, in-store offers only)"},{"value":"pt","label":"Portugal (EUR, in-store offers only)"},{"value":"lt","label":"Lithuania (EUR, in-store offers only)"},{"value":"lv","label":"Latvia (EUR, in-store offers only)"},{"value":"ee","label":"Estonia (EUR, in-store offers only)"},{"value":"gr","label":"Greece (EUR, in-store offers only)"},{"value":"cy","label":"Cyprus (EUR, in-store offers only)"},{"value":"rs","label":"Serbia (RSD, in-store offers only)"},{"value":"mt","label":"Malta (EUR, in-store offers only)"},{"value":"lu","label":"Luxembourg (EUR, in-store offers only)"}],"default":"de","example":"de"},{"name":"language","type":"enum","required":false,"description":"Only for Belgium (nl, fr) and Switzerland (de, fr, it). Every other country has one language and ignores nothing — a language it does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Dutch (Belgium)"},{"value":"fr","label":"French (Belgium, Switzerland)"},{"value":"de","label":"German (Switzerland)"},{"value":"it","label":"Italian (Switzerland)"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100 (Lidl's own page is 36).","on_invalid":"reject","default":36,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only orderings Lidl offers are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Lidl's ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Newest first"},{"value":"rating","label":"Best rated first"},{"value":"bestselling","label":"Most added to basket"},{"value":"discount","label":"Biggest discount first"}],"default":"relevance"},{"name":"brand","type":"array","required":false,"description":"One brand or a list (any of them), spelt as Lidl shows it on rows (`brand`).","on_invalid":"reject","example":["PARKSIDE"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"min_rating","type":"number","required":false,"description":"Only products rated at least this (1-5).","on_invalid":"reject","minimum":1,"maximum":5},{"name":"availability","type":"enum","required":false,"description":"Restrict to web-shop stock or to in-store offers.","on_invalid":"reject","allowed_values":[{"value":"online","label":"Orderable in the web shop now"},{"value":"in_store","label":"In-store offers"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, title, brand, url, image, images[], currency, price (public shelf price — null when Lidl publishes only a member price), price_before_discount, price_before_discount_type (recommended_retail_price|previous_price), discount_percent, discount_label, multi_buy, unit_price, unit_price_text, packaging, price_valid_from, price_valid_until, member_price (Lidl Plus app price — never the public price), member_price_before_discount, member_program, member_price_label, member_discount_label, member_unit_price_text, regional_prices[]{region_id, price, price_before_discount, valid_until}, rating, review_count, rating_scale (5), available_online, availability (available_online|coming_soon_online|in_store_only|unavailable_online), availability_text, in_store, store_offers[]{label, type, valid_from, valid_until}, offer_valid_from, offer_valid_until, offer_dates_source (store_window|store_window+price_end|store_window+member_price_end|null), product_type, has_variants, category, deal_of_the_day, age_restricted}, count, total_results, offset, sort_applied, corrected_query, keyword_matches_on_page, fallback_results_dropped, country, language, currency, web_shop, query, redirect{url, product_id}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kaffeemaschine","country":"de"}},{"name":"category/products","description":"Browse one Lidl category by its id or URL: the same product rows, filters, sorts and paging as search.","required_params":["category"],"optional_params":["country","language","page","limit","sort","brand","price_min","price_max","min_rating","availability","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A Lidl category id from a category URL (…/h/kaffee-espressomaschinen/h10006306 → h10006306, …/c/kueche-haushalt/s10067764 → s10067764). The full URL is accepted.","on_invalid":"reject","example":"h10006306","aliases":["category_id","url"]},{"name":"country","type":"enum","required":false,"description":"Lidl country site. de, fr, pl, nl, be, es, cz and sk have a web shop; the other countries list only their current and upcoming in-store offers. Prices come back in that country's currency. 'uk' is accepted and read as 'gb'.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (EUR, web shop)"},{"value":"fr","label":"France (EUR, web shop)"},{"value":"pl","label":"Poland (PLN, web shop)"},{"value":"nl","label":"Netherlands (EUR, web shop)"},{"value":"be","label":"Belgium (EUR, web shop)"},{"value":"es","label":"Spain (EUR, web shop)"},{"value":"cz","label":"Czechia (CZK, web shop)"},{"value":"sk","label":"Slovakia (EUR, web shop)"},{"value":"it","label":"Italy (EUR, in-store offers only)"},{"value":"at","label":"Austria (EUR, in-store offers only)"},{"value":"hu","label":"Hungary (HUF, in-store offers only)"},{"value":"ro","label":"Romania (RON, in-store offers only)"},{"value":"bg","label":"Bulgaria (EUR, in-store offers only)"},{"value":"hr","label":"Croatia (EUR, in-store offers only)"},{"value":"si","label":"Slovenia (EUR, in-store offers only)"},{"value":"ch","label":"Switzerland (CHF, in-store offers only)"},{"value":"dk","label":"Denmark (DKK, in-store offers only)"},{"value":"se","label":"Sweden (SEK, in-store offers only)"},{"value":"fi","label":"Finland (EUR, in-store offers only)"},{"value":"ie","label":"Ireland (EUR, in-store offers only)"},{"value":"gb","label":"United Kingdom (GBP, in-store offers only)"},{"value":"pt","label":"Portugal (EUR, in-store offers only)"},{"value":"lt","label":"Lithuania (EUR, in-store offers only)"},{"value":"lv","label":"Latvia (EUR, in-store offers only)"},{"value":"ee","label":"Estonia (EUR, in-store offers only)"},{"value":"gr","label":"Greece (EUR, in-store offers only)"},{"value":"cy","label":"Cyprus (EUR, in-store offers only)"},{"value":"rs","label":"Serbia (RSD, in-store offers only)"},{"value":"mt","label":"Malta (EUR, in-store offers only)"},{"value":"lu","label":"Luxembourg (EUR, in-store offers only)"}],"default":"de","example":"de"},{"name":"language","type":"enum","required":false,"description":"Only for Belgium (nl, fr) and Switzerland (de, fr, it). Every other country has one language and ignores nothing — a language it does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Dutch (Belgium)"},{"value":"fr","label":"French (Belgium, Switzerland)"},{"value":"de","label":"German (Switzerland)"},{"value":"it","label":"Italian (Switzerland)"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100 (Lidl's own page is 36).","on_invalid":"reject","default":36,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only orderings Lidl offers are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Lidl's ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Newest first"},{"value":"rating","label":"Best rated first"},{"value":"bestselling","label":"Most added to basket"},{"value":"discount","label":"Biggest discount first"}],"default":"relevance"},{"name":"brand","type":"array","required":false,"description":"One brand or a list (any of them), spelt as Lidl shows it on rows (`brand`).","on_invalid":"reject","example":["PARKSIDE"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"min_rating","type":"number","required":false,"description":"Only products rated at least this (1-5).","on_invalid":"reject","minimum":1,"maximum":5},{"name":"availability","type":"enum","required":false,"description":"Restrict to web-shop stock or to in-store offers.","on_invalid":"reject","allowed_values":[{"value":"online","label":"Orderable in the web shop now"},{"value":"in_store","label":"In-store offers"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, title, brand, url, image, images[], currency, price (public shelf price — null when Lidl publishes only a member price), price_before_discount, price_before_discount_type (recommended_retail_price|previous_price), discount_percent, discount_label, multi_buy, unit_price, unit_price_text, packaging, price_valid_from, price_valid_until, member_price (Lidl Plus app price — never the public price), member_price_before_discount, member_program, member_price_label, member_discount_label, member_unit_price_text, regional_prices[]{region_id, price, price_before_discount, valid_until}, rating, review_count, rating_scale (5), available_online, availability (available_online|coming_soon_online|in_store_only|unavailable_online), availability_text, in_store, store_offers[]{label, type, valid_from, valid_until}, offer_valid_from, offer_valid_until, offer_dates_source (store_window|store_window+price_end|store_window+member_price_end|null), product_type, has_variants, category, deal_of_the_day, age_restricted}, count, total_results, offset, sort_applied, corrected_query, keyword_matches_on_page, fallback_results_dropped, country, language, currency, web_shop, category","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"h10006306"}},{"name":"deals","description":"Lidl's in-store offers for one country — the weekly leaflet products, current and upcoming — with the offer price, struck price, unit price and any Lidl Plus member price, and the offer period: offer_valid_from / offer_valid_until from Lidl's in-store window; when Lidl publishes only a start ('Le 05.11 | En supermarché') the end comes from the row's own price record (offer_dates_source says which), else null. price_valid_from / price_valid_until are the price record's own dates. Works in all 30 countries, including those without a web shop. available_only=true drops rows that are neither online nor in store.","required_params":[],"optional_params":["country","language","query","page","limit","sort","brand","price_min","price_max","available_only","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Lidl country site. de, fr, pl, nl, be, es, cz and sk have a web shop; the other countries list only their current and upcoming in-store offers. Prices come back in that country's currency. 'uk' is accepted and read as 'gb'.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (EUR, web shop)"},{"value":"fr","label":"France (EUR, web shop)"},{"value":"pl","label":"Poland (PLN, web shop)"},{"value":"nl","label":"Netherlands (EUR, web shop)"},{"value":"be","label":"Belgium (EUR, web shop)"},{"value":"es","label":"Spain (EUR, web shop)"},{"value":"cz","label":"Czechia (CZK, web shop)"},{"value":"sk","label":"Slovakia (EUR, web shop)"},{"value":"it","label":"Italy (EUR, in-store offers only)"},{"value":"at","label":"Austria (EUR, in-store offers only)"},{"value":"hu","label":"Hungary (HUF, in-store offers only)"},{"value":"ro","label":"Romania (RON, in-store offers only)"},{"value":"bg","label":"Bulgaria (EUR, in-store offers only)"},{"value":"hr","label":"Croatia (EUR, in-store offers only)"},{"value":"si","label":"Slovenia (EUR, in-store offers only)"},{"value":"ch","label":"Switzerland (CHF, in-store offers only)"},{"value":"dk","label":"Denmark (DKK, in-store offers only)"},{"value":"se","label":"Sweden (SEK, in-store offers only)"},{"value":"fi","label":"Finland (EUR, in-store offers only)"},{"value":"ie","label":"Ireland (EUR, in-store offers only)"},{"value":"gb","label":"United Kingdom (GBP, in-store offers only)"},{"value":"pt","label":"Portugal (EUR, in-store offers only)"},{"value":"lt","label":"Lithuania (EUR, in-store offers only)"},{"value":"lv","label":"Latvia (EUR, in-store offers only)"},{"value":"ee","label":"Estonia (EUR, in-store offers only)"},{"value":"gr","label":"Greece (EUR, in-store offers only)"},{"value":"cy","label":"Cyprus (EUR, in-store offers only)"},{"value":"rs","label":"Serbia (RSD, in-store offers only)"},{"value":"mt","label":"Malta (EUR, in-store offers only)"},{"value":"lu","label":"Luxembourg (EUR, in-store offers only)"}],"default":"de","example":"de"},{"name":"language","type":"enum","required":false,"description":"Only for Belgium (nl, fr) and Switzerland (de, fr, it). Every other country has one language and ignores nothing — a language it does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Dutch (Belgium)"},{"value":"fr","label":"French (Belgium, Switzerland)"},{"value":"de","label":"German (Switzerland)"},{"value":"it","label":"Italian (Switzerland)"}]},{"name":"query","type":"string","required":false,"description":"Optional keyword to narrow the offers.","on_invalid":"reject","example":"parkside","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100 (Lidl's own page is 36).","on_invalid":"reject","default":36,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only orderings Lidl offers are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Lidl's ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Newest first"},{"value":"rating","label":"Best rated first"},{"value":"bestselling","label":"Most added to basket"},{"value":"discount","label":"Biggest discount first"}],"default":"relevance"},{"name":"brand","type":"array","required":false,"description":"One brand or a list (any of them), spelt as Lidl shows it on rows (`brand`).","on_invalid":"reject","example":["PARKSIDE"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"available_only","type":"boolean","required":false,"description":"deals only. true drops rows that are neither orderable online (available_online, coming_soon_online) nor in store (in_store false) - on lidl.fr these are web-shop products sold out online that Lidl's own 'En supermarché' filter still lists. Default false returns Lidl's list unchanged; total_results stays Lidl's count and unavailable_dropped says how many rows of this page were removed.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, title, brand, url, image, images[], currency, price (public shelf price — null when Lidl publishes only a member price), price_before_discount, price_before_discount_type (recommended_retail_price|previous_price), discount_percent, discount_label, multi_buy, unit_price, unit_price_text, packaging, price_valid_from, price_valid_until, member_price (Lidl Plus app price — never the public price), member_price_before_discount, member_program, member_price_label, member_discount_label, member_unit_price_text, regional_prices[]{region_id, price, price_before_discount, valid_until}, rating, review_count, rating_scale (5), available_online, availability (available_online|coming_soon_online|in_store_only|unavailable_online), availability_text, in_store, store_offers[]{label, type, valid_from, valid_until}, offer_valid_from, offer_valid_until, offer_dates_source (store_window|store_window+price_end|store_window+member_price_end|null), product_type, has_variants, category, deal_of_the_day, age_restricted}, count, total_results, offset, sort_applied, corrected_query, keyword_matches_on_page, fallback_results_dropped, country, language, currency, web_shop, query, unavailable_dropped (only with available_only=true)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"it"}},{"name":"product/detail","description":"The full Lidl product record by id or URL: title, brand, gallery, EAN/GTIN, public price with struck price and its type, unit price, Lidl Plus member price, rating with review count and recommendation counts, web-shop availability, in-store offer dates, delivery time and charge, maximum order quantity, description, bullet points, specification table, breadcrumb, size and colour variants each with price, stock state and EAN, manuals, and the other Lidl countries that sell it.","required_params":["product_id"],"optional_params":["country","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Lidl product id — the digits after /p in a product URL (…/p100348984 → 100348984). A variant id or a full product URL is accepted; a URL also sets the country.","on_invalid":"reject","example":"100348984","aliases":["id","url"]},{"name":"country","type":"enum","required":false,"description":"Lidl country site. de, fr, pl, nl, be, es, cz and sk have a web shop; the other countries list only their current and upcoming in-store offers. Prices come back in that country's currency. 'uk' is accepted and read as 'gb'.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (EUR, web shop)"},{"value":"fr","label":"France (EUR, web shop)"},{"value":"pl","label":"Poland (PLN, web shop)"},{"value":"nl","label":"Netherlands (EUR, web shop)"},{"value":"be","label":"Belgium (EUR, web shop)"},{"value":"es","label":"Spain (EUR, web shop)"},{"value":"cz","label":"Czechia (CZK, web shop)"},{"value":"sk","label":"Slovakia (EUR, web shop)"},{"value":"it","label":"Italy (EUR, in-store offers only)"},{"value":"at","label":"Austria (EUR, in-store offers only)"},{"value":"hu","label":"Hungary (HUF, in-store offers only)"},{"value":"ro","label":"Romania (RON, in-store offers only)"},{"value":"bg","label":"Bulgaria (EUR, in-store offers only)"},{"value":"hr","label":"Croatia (EUR, in-store offers only)"},{"value":"si","label":"Slovenia (EUR, in-store offers only)"},{"value":"ch","label":"Switzerland (CHF, in-store offers only)"},{"value":"dk","label":"Denmark (DKK, in-store offers only)"},{"value":"se","label":"Sweden (SEK, in-store offers only)"},{"value":"fi","label":"Finland (EUR, in-store offers only)"},{"value":"ie","label":"Ireland (EUR, in-store offers only)"},{"value":"gb","label":"United Kingdom (GBP, in-store offers only)"},{"value":"pt","label":"Portugal (EUR, in-store offers only)"},{"value":"lt","label":"Lithuania (EUR, in-store offers only)"},{"value":"lv","label":"Latvia (EUR, in-store offers only)"},{"value":"ee","label":"Estonia (EUR, in-store offers only)"},{"value":"gr","label":"Greece (EUR, in-store offers only)"},{"value":"cy","label":"Cyprus (EUR, in-store offers only)"},{"value":"rs","label":"Serbia (RSD, in-store offers only)"},{"value":"mt","label":"Malta (EUR, in-store offers only)"},{"value":"lu","label":"Luxembourg (EUR, in-store offers only)"}],"default":"de","example":"de"},{"name":"language","type":"enum","required":false,"description":"Only for Belgium (nl, fr) and Switzerland (de, fr, it). Every other country has one language and ignores nothing — a language it does not offer is rejected.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Dutch (Belgium)"},{"value":"fr","label":"French (Belgium, Switzerland)"},{"value":"de","label":"German (Switzerland)"},{"value":"it","label":"Italian (Switzerland)"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, requested_variant_id, title, brand, url, images[], currency, price, price_before_discount, price_before_discount_type, discount_percent, discount_label, multi_buy, unit_price, unit_price_text, packaging, price_valid_from, price_valid_until, member_price, member_price_before_discount, member_program, member_price_label, member_discount_label, member_unit_price_text, regional_prices[], rating, review_count, rating_scale, recommended_yes, recommended_no, available_online, availability, availability_text, in_store, store_offers[], sold_online, sold_in_store, max_order_quantity, gtin (a valid GS1 barcode; null when Lidl publishes none), gtins[], in_store_codes[] (Lidl's internal 2-prefix store codes, not barcodes), description, feature_bullets[], long_description, specifications[]{name, value}, breadcrumbs[], category, product_type, variants[]{variant_id, attributes{size, colour, …}, title, price, price_before_discount, price_before_discount_type, available_online, availability, ean, url}, delivery{text, days, by_freight_forwarder, home_delivery_charge, free_delivery, returns}, manuals[]{name, url}, age_restricted, alcoholic, other_countries[]{country, language, url}, country, language, web_shop}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"100348984","country":"de"}}]},{"name":"ligamagic","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"LigaMagic API scraper - Brazil's card price guide and store marketplace for Magic, Pokémon, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood, Digimon, Star Wars Unlimited, Riftbound, Sorcery, Gundam, Vanguard and Dragon Ball: min/avg/max price per printing and finish, every store offer with price, stock, condition, language and store, buylist prices, sets, price movers and store profiles. BRL.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/ligamagic/v1","spec_available":true,"actions":[{"name":"search","description":"Search a Liga site's catalog by card or product name, or list one edition's cards: each row has the card name (Portuguese and English where the site has both), edition, collector number, the minimum, average and maximum price in BRL across Brazilian stores, the image and the keys `card`/`edition_code`/`number` that the card action takes. Sealed products appear as type=product. 40 rows a page; sort by name or by min/avg/max price.","required_params":[],"optional_params":["game","query","edition","sort","page","limit"],"params":[{"name":"game","type":"enum","required":false,"description":"Which Liga site to read. All share one platform (same stores, same data layout); prices in BRL.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering — www.ligamagic.com.br"},{"value":"pokemon","label":"Pokémon TCG — www.ligapokemon.com.br"},{"value":"yugioh","label":"Yu-Gi-Oh! — www.ligayugioh.com.br"},{"value":"onepiece","label":"One Piece Card Game — www.ligaonepiece.com.br"},{"value":"lorcana","label":"Disney Lorcana — www.ligalorcana.com.br"},{"value":"fab","label":"Flesh and Blood — www.ligafab.com.br"},{"value":"digimon","label":"Digimon Card Game — www.ligadigimon.com.br"},{"value":"starwars","label":"Star Wars: Unlimited — www.ligastarwars.com.br"},{"value":"riftbound","label":"Riftbound (League of Legends TCG) — www.ligariftbound.com.br"},{"value":"sorcery","label":"Sorcery: Contested Realm — www.ligasorcery.com.br"},{"value":"gundam","label":"Gundam Card Game — www.ligagundam.com.br"},{"value":"vanguard","label":"Cardfight!! Vanguard — www.ligavanguard.com.br"},{"value":"dragonball_masters","label":"Dragon Ball Super Card Game (Masters) — masters.ligadragonball.com.br"},{"value":"dragonball_fusion","label":"Dragon Ball Super Fusion World — fusion.ligadragonball.com.br"}],"default":"magic","example":"pokemon","aliases":["tcg","site"]},{"name":"query","type":"string","required":false,"description":"Card or product name (Portuguese or English). Optional when edition is given. The site's own syntax also works: 'artista=Simon Dominic'.","on_invalid":"reject","example":"Charizard ex","aliases":["q","keyword"]},{"name":"edition","type":"string","required":false,"description":"Edition id (from `editions`) or edition code (as the site writes it, e.g. MEW, 30C-C): lists that set's cards; with `query`, only the cards whose name contains it (the site's own filter on the edition page).","on_invalid":"reject","example":"479849","aliases":["edition_id","set"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's default order"},{"value":"name_pt_asc","label":"Portuguese name A-Z"},{"value":"name_pt_desc","label":"Portuguese name Z-A"},{"value":"name_en_asc","label":"English name A-Z"},{"value":"name_en_desc","label":"English name Z-A"},{"value":"min_price_asc","label":"Lowest price, cheapest first"},{"value":"min_price_desc","label":"Lowest price, most expensive first"},{"value":"avg_price_asc","label":"Average price ascending"},{"value":"avg_price_desc","label":"Average price descending"},{"value":"max_price_asc","label":"Highest price ascending"},{"value":"max_price_desc","label":"Highest price descending"}],"default":"relevance","example":"min_price_desc"},{"name":"page","type":"integer","required":false,"description":"Result page (40 rows each).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Trim the page to this many rows.","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":40}],"returns":"results[]{type, name, name_alt, card, edition_code, number, collector_number, card_id, edition_id, edition_name, product_id, price_min_brl, price_avg_brl, price_max_brl, image_url, url}, count, page, has_more, game, site; with edition also total, edition_id, edition_name","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"game":"pokemon","query":"Charizard ex"}},{"name":"card","description":"One card in full: Portuguese and English name, card details as the site lists them (rarity, type, artist, formats…), every printing with its edition, number, rarity, artist, release date, image and the price guide per finish (Normal, Foil, Foil Etched, Promo… min/avg/max BRL); then EVERY store offer — price in BRL (and the pre-discount price), copies in stock, condition, language, finish/extras, photo, graded, pre-order — with the store's name, city, state, rating, review volume, verified/physical flags and shipping time; the open auctions (current bid, buy-now, bids, end time); and the stores.","required_params":[],"optional_params":["game","card","url","edition","number","offers_limit","offers_offset","condition","language","foil","state","min_quantity","max_price","verified_only"],"params":[{"name":"game","type":"enum","required":false,"description":"Which Liga site to read. All share one platform (same stores, same data layout); prices in BRL.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering — www.ligamagic.com.br"},{"value":"pokemon","label":"Pokémon TCG — www.ligapokemon.com.br"},{"value":"yugioh","label":"Yu-Gi-Oh! — www.ligayugioh.com.br"},{"value":"onepiece","label":"One Piece Card Game — www.ligaonepiece.com.br"},{"value":"lorcana","label":"Disney Lorcana — www.ligalorcana.com.br"},{"value":"fab","label":"Flesh and Blood — www.ligafab.com.br"},{"value":"digimon","label":"Digimon Card Game — www.ligadigimon.com.br"},{"value":"starwars","label":"Star Wars: Unlimited — www.ligastarwars.com.br"},{"value":"riftbound","label":"Riftbound (League of Legends TCG) — www.ligariftbound.com.br"},{"value":"sorcery","label":"Sorcery: Contested Realm — www.ligasorcery.com.br"},{"value":"gundam","label":"Gundam Card Game — www.ligagundam.com.br"},{"value":"vanguard","label":"Cardfight!! Vanguard — www.ligavanguard.com.br"},{"value":"dragonball_masters","label":"Dragon Ball Super Card Game (Masters) — masters.ligadragonball.com.br"},{"value":"dragonball_fusion","label":"Dragon Ball Super Fusion World — fusion.ligadragonball.com.br"}],"default":"magic","example":"pokemon","aliases":["tcg","site"]},{"name":"card","type":"string","required":false,"description":"Card name as the site writes it: Magic/Yu-Gi-Oh! accept the English (or Portuguese) name and return every printing; Pokémon/One Piece/Lorcana card pages are per print, so pass the exact `card` value from search (e.g. 'Charizard ex (006/165)') with `edition` and `number`, or pass `url`.","on_invalid":"reject","example":"Lightning Bolt","aliases":["name"]},{"name":"url","type":"string","required":false,"description":"A card page URL from any Liga site (overrides game/card/edition/number).","on_invalid":"reject","example":"https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex+(006/165)&ed=MEW&num=006"},{"name":"edition","type":"string","required":false,"description":"Edition code as the site uses it (search rows return it in `edition_code`). On `card` it selects one print; on `search` an edition id or code lists that set's cards.","on_invalid":"reject","example":"MEW","aliases":["set","ed","edition_code"]},{"name":"number","type":"string","required":false,"description":"Card number inside the edition (search rows return it in `number`).","on_invalid":"reject","example":"006","aliases":["num"]},{"name":"offers_limit","type":"integer","required":false,"description":"How many store offers to return after filters, in the site's own order (cheapest first). 0 = price guide only, no offers (cheaper and faster).","on_invalid":"reject","default":100,"example":50,"minimum":0,"maximum":2000,"aliases":["limit"]},{"name":"offers_offset","type":"integer","required":false,"description":"Skip this many filtered offers (paging through a card with 1 000+ offers).","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":20000},{"name":"condition","type":"enum","required":false,"description":"Minimum condition: NM returns M and NM offers, SP returns M/NM/SP, and so on.","on_invalid":"reject","allowed_values":[{"value":"M","label":"Nova (Mint)"},{"value":"NM","label":"Praticamente Nova (Near Mint)"},{"value":"SP","label":"Usada Levemente (Slightly Played)"},{"value":"MP","label":"Usada Moderadamente"},{"value":"HP","label":"Muito Usada"},{"value":"D","label":"Danificada"}],"example":"NM"},{"name":"language","type":"string","required":false,"description":"Comma list of language codes as the site writes them: EN, PT, PTEN (Português/Inglês), JP, DE, ES, FR, IT, KO, RU, TW, TK, PH (game-dependent).","on_invalid":"reject","example":"EN,PT"},{"name":"foil","type":"boolean","required":false,"description":"true = only foil finishes (Foil, Foil Etched…), false = only non-foil.","on_invalid":"reject","example":false},{"name":"state","type":"string","required":false,"description":"Comma list of Brazilian states (UF) of the store, e.g. SP,RJ,MG.","on_invalid":"reject","example":"SP"},{"name":"min_quantity","type":"integer","required":false,"description":"Only offers with at least this many copies in stock (playsets: 4).","on_invalid":"reject","example":4,"minimum":1,"maximum":1000},{"name":"max_price","type":"number","required":false,"description":"Only offers at or below this price in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"verified_only","type":"boolean","required":false,"description":"Only stores the site marks as verified (Loja Verificada).","on_invalid":"reject","example":true}],"returns":"card{card_id, name, name_en, details[]{label, value}, url, resolved_from}, editions[]{edition_id, edition_name, edition_code, number, rarity, rarity_code, artist, release_date, image_url, price_guide[]{finish, finish_id, min_brl, avg_brl, max_brl}}, offers[]{offer_id, rank, price_brl, original_price_brl, price_readable, quantity, edition_id, edition_name, edition_code, number, condition, condition_label, language, language_label, extras[], is_foil, has_photo, is_graded, preorder_ships, store_id, store_name, store_city, store_state, store_rating, store_reviews, store_types[], store_ships_in, store_on_vacation}, offers_total, offers_matched, auctions[]{auction_id, title, current_bid_brl, buy_now_brl, bids, ends_at, seller, …}, stores[]{store_id, name, city, state, phone, rating, rating_shipping, rating_packaging, rating_accuracy, reviews, has_physical_store, latitude, longitude}, summary{}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":4},"example_params":{"game":"magic","card":"Lightning Bolt","offers_limit":20}},{"name":"buylist","description":"What Brazilian stores PAY for a card (the site's Buylist tab): per store and printing, the buy price for Mint/Near Mint in Portuguese or English, the base price, the discount and resulting buy price for every accepted condition, the discount for every accepted language, and the store's city, state and rating. Use it with `card` offers for arbitrage (buy below the best buylist).","required_params":[],"optional_params":["game","card","url","edition","number","limit"],"params":[{"name":"game","type":"enum","required":false,"description":"Which Liga site to read. All share one platform (same stores, same data layout); prices in BRL.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering — www.ligamagic.com.br"},{"value":"pokemon","label":"Pokémon TCG — www.ligapokemon.com.br"},{"value":"yugioh","label":"Yu-Gi-Oh! — www.ligayugioh.com.br"},{"value":"onepiece","label":"One Piece Card Game — www.ligaonepiece.com.br"},{"value":"lorcana","label":"Disney Lorcana — www.ligalorcana.com.br"},{"value":"fab","label":"Flesh and Blood — www.ligafab.com.br"},{"value":"digimon","label":"Digimon Card Game — www.ligadigimon.com.br"},{"value":"starwars","label":"Star Wars: Unlimited — www.ligastarwars.com.br"},{"value":"riftbound","label":"Riftbound (League of Legends TCG) — www.ligariftbound.com.br"},{"value":"sorcery","label":"Sorcery: Contested Realm — www.ligasorcery.com.br"},{"value":"gundam","label":"Gundam Card Game — www.ligagundam.com.br"},{"value":"vanguard","label":"Cardfight!! Vanguard — www.ligavanguard.com.br"},{"value":"dragonball_masters","label":"Dragon Ball Super Card Game (Masters) — masters.ligadragonball.com.br"},{"value":"dragonball_fusion","label":"Dragon Ball Super Fusion World — fusion.ligadragonball.com.br"}],"default":"magic","example":"pokemon","aliases":["tcg","site"]},{"name":"card","type":"string","required":false,"description":"Card name as the site writes it: Magic/Yu-Gi-Oh! accept the English (or Portuguese) name and return every printing; Pokémon/One Piece/Lorcana card pages are per print, so pass the exact `card` value from search (e.g. 'Charizard ex (006/165)') with `edition` and `number`, or pass `url`.","on_invalid":"reject","example":"Lightning Bolt","aliases":["name"]},{"name":"url","type":"string","required":false,"description":"A card page URL from any Liga site (overrides game/card/edition/number).","on_invalid":"reject","example":"https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex+(006/165)&ed=MEW&num=006"},{"name":"edition","type":"string","required":false,"description":"Edition code as the site uses it (search rows return it in `edition_code`). On `card` it selects one print; on `search` an edition id or code lists that set's cards.","on_invalid":"reject","example":"MEW","aliases":["set","ed","edition_code"]},{"name":"number","type":"string","required":false,"description":"Card number inside the edition (search rows return it in `number`).","on_invalid":"reject","example":"006","aliases":["num"]},{"name":"limit","type":"integer","required":false,"description":"How many buylist rows to return (the site's order).","on_invalid":"reject","default":200,"example":50,"minimum":1,"maximum":1000}],"returns":"card{name, name_en, card_id, url, resolved_from}, buylist[]{buylist_id, edition_id, edition_name, edition_code, number, extras[], is_foil, buy_price_brl, base_price_brl, conditions[]{condition, discount_pct, buy_price_brl}, languages[]{language, discount_pct}, store_id, store_name, store_city, store_state, store_rating, store_reviews, store_types[]}, count, best_buy_price_brl","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex+(006/165)&ed=MEW&num=006"}},{"name":"editions","description":"Every edition (set) of a game on its Liga site: id, code, name (English and Portuguese where the site has one), release date, symbol, and whether it is a main or auxiliary (promo / grouped) edition. The id feeds search's `edition` to list the set's cards with prices.","required_params":[],"optional_params":["game","query","year"],"params":[{"name":"game","type":"enum","required":false,"description":"Which Liga site to read. All share one platform (same stores, same data layout); prices in BRL.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering — www.ligamagic.com.br"},{"value":"pokemon","label":"Pokémon TCG — www.ligapokemon.com.br"},{"value":"yugioh","label":"Yu-Gi-Oh! — www.ligayugioh.com.br"},{"value":"onepiece","label":"One Piece Card Game — www.ligaonepiece.com.br"},{"value":"lorcana","label":"Disney Lorcana — www.ligalorcana.com.br"},{"value":"fab","label":"Flesh and Blood — www.ligafab.com.br"},{"value":"digimon","label":"Digimon Card Game — www.ligadigimon.com.br"},{"value":"starwars","label":"Star Wars: Unlimited — www.ligastarwars.com.br"},{"value":"riftbound","label":"Riftbound (League of Legends TCG) — www.ligariftbound.com.br"},{"value":"sorcery","label":"Sorcery: Contested Realm — www.ligasorcery.com.br"},{"value":"gundam","label":"Gundam Card Game — www.ligagundam.com.br"},{"value":"vanguard","label":"Cardfight!! Vanguard — www.ligavanguard.com.br"},{"value":"dragonball_masters","label":"Dragon Ball Super Card Game (Masters) — masters.ligadragonball.com.br"},{"value":"dragonball_fusion","label":"Dragon Ball Super Fusion World — fusion.ligadragonball.com.br"}],"default":"magic","example":"pokemon","aliases":["tcg","site"]},{"name":"query","type":"string","required":false,"description":"Keep editions whose name or code contains this text.","on_invalid":"reject","example":"Horizons","aliases":["q"]},{"name":"year","type":"integer","required":false,"description":"Keep editions released in this year.","on_invalid":"reject","example":2025,"minimum":1990,"maximum":2100}],"returns":"editions[]{edition_id, edition_code, name, name_en, name_pt, release_date, group, grouped_under_id, icon_url, cards_url}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":3},"example_params":{"game":"lorcana"}},{"name":"movers","description":"The site's biggest price risers or fallers (Cards em Alta / em Queda): 50 cards with their current min/avg/max price in BRL and the change over the day, week and month for each, edition and number. Magic can be narrowed to a format (Standard, Modern, Legacy, Commander, Pauper, Pioneer, Premodern).","required_params":[],"optional_params":["game","direction","period","format"],"params":[{"name":"game","type":"enum","required":false,"description":"Which Liga site to read. All share one platform (same stores, same data layout); prices in BRL.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering — www.ligamagic.com.br"},{"value":"pokemon","label":"Pokémon TCG — www.ligapokemon.com.br"},{"value":"yugioh","label":"Yu-Gi-Oh! — www.ligayugioh.com.br"},{"value":"onepiece","label":"One Piece Card Game — www.ligaonepiece.com.br"},{"value":"lorcana","label":"Disney Lorcana — www.ligalorcana.com.br"},{"value":"fab","label":"Flesh and Blood — www.ligafab.com.br"},{"value":"digimon","label":"Digimon Card Game — www.ligadigimon.com.br"},{"value":"starwars","label":"Star Wars: Unlimited — www.ligastarwars.com.br"},{"value":"riftbound","label":"Riftbound (League of Legends TCG) — www.ligariftbound.com.br"},{"value":"sorcery","label":"Sorcery: Contested Realm — www.ligasorcery.com.br"},{"value":"gundam","label":"Gundam Card Game — www.ligagundam.com.br"},{"value":"vanguard","label":"Cardfight!! Vanguard — www.ligavanguard.com.br"},{"value":"dragonball_masters","label":"Dragon Ball Super Card Game (Masters) — masters.ligadragonball.com.br"},{"value":"dragonball_fusion","label":"Dragon Ball Super Fusion World — fusion.ligadragonball.com.br"}],"default":"magic","example":"pokemon","aliases":["tcg","site"]},{"name":"direction","type":"enum","required":false,"description":"Risers or fallers.","on_invalid":"reject","allowed_values":[{"value":"up","label":"Rising (Cards em Alta)"},{"value":"down","label":"Falling (Cards em Queda)"}],"default":"up","example":"up"},{"name":"period","type":"enum","required":false,"description":"Which change the list is ranked by.","on_invalid":"reject","allowed_values":[{"value":"day","label":"Day"},{"value":"week","label":"Week"},{"value":"month","label":"Month"}],"default":"day","example":"week"},{"name":"format","type":"enum","required":false,"description":"Magic only: rank within one format.","on_invalid":"reject","allowed_values":[{"value":"standard","label":"Standard"},{"value":"modern","label":"Modern"},{"value":"legacy","label":"Legacy"},{"value":"commander","label":"Commander"},{"value":"pauper","label":"Pauper"},{"value":"pioneer","label":"Pioneer"},{"value":"premodern","label":"Premodern"}],"example":"modern"}],"returns":"movers[]{card_id, name, name_en, edition_id, edition_name, edition_code, number, rarity_code, price_min_brl, price_avg_brl, price_max_brl, change_brl, change_day_brl{min, avg, max}, change_week_brl{…}, change_month_brl{…}, image_url, url}, count, direction, period","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon"}},{"name":"store","description":"A marketplace store's public profile (store_id from card offers): name, website, logo, average rating over 12/6/3 months and all time with the per-aspect ratings (shipping, packaging, accuracy), contact phones/WhatsApp, e-mail, social links, address (or that it has no physical store), and customer reviews (rating, date, purchase value band, per-aspect stars, comment), 25 per page.","required_params":["store_id"],"optional_params":["game","reviews_page"],"params":[{"name":"store_id","type":"integer","required":true,"description":"Store id (offers[].store_id from card or buylist).","on_invalid":"reject","example":75364,"minimum":1,"aliases":["id","lj_id"]},{"name":"game","type":"enum","required":false,"description":"Which Liga site to read. All share one platform (same stores, same data layout); prices in BRL.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering — www.ligamagic.com.br"},{"value":"pokemon","label":"Pokémon TCG — www.ligapokemon.com.br"},{"value":"yugioh","label":"Yu-Gi-Oh! — www.ligayugioh.com.br"},{"value":"onepiece","label":"One Piece Card Game — www.ligaonepiece.com.br"},{"value":"lorcana","label":"Disney Lorcana — www.ligalorcana.com.br"},{"value":"fab","label":"Flesh and Blood — www.ligafab.com.br"},{"value":"digimon","label":"Digimon Card Game — www.ligadigimon.com.br"},{"value":"starwars","label":"Star Wars: Unlimited — www.ligastarwars.com.br"},{"value":"riftbound","label":"Riftbound (League of Legends TCG) — www.ligariftbound.com.br"},{"value":"sorcery","label":"Sorcery: Contested Realm — www.ligasorcery.com.br"},{"value":"gundam","label":"Gundam Card Game — www.ligagundam.com.br"},{"value":"vanguard","label":"Cardfight!! Vanguard — www.ligavanguard.com.br"},{"value":"dragonball_masters","label":"Dragon Ball Super Card Game (Masters) — masters.ligadragonball.com.br"},{"value":"dragonball_fusion","label":"Dragon Ball Super Fusion World — fusion.ligadragonball.com.br"}],"default":"magic","example":"pokemon","aliases":["tcg","site"]},{"name":"reviews_page","type":"integer","required":false,"description":"Customer reviews page (25 each).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"store{store_id, name, website, logo_url, ratings[]{period, rating, based_on, by_aspect{}}, phones[]{number, whatsapp}, emails[], social[]{network, url}, address, has_physical_address, reviews[]{rating, customer, customer_location, date, purchase_value, by_aspect{}, comment}, reviews_has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":75364}}]},{"name":"ligaonepiece","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"LigaOnePiece API scraper - Brazil's One Piece Card Game price guide and store marketplace: min/avg/max price per printing and finish, every store offer with price, stock, condition, language and store, buylist prices, sets, price movers and store profiles. BRL.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/ligaonepiece/v1","spec_available":true,"actions":[{"name":"search","description":"Search LigaOnePiece's catalog by card or product name, or list one edition's cards: each row has the card name (Portuguese and English where the site has both), edition, collector number, the minimum, average and maximum price in BRL across Brazilian stores, the image and the keys `card`/`edition_code`/`number` that the card action takes. Sealed products appear as type=product. 40 rows a page; sort by name or by min/avg/max price.","required_params":[],"optional_params":["query","edition","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Card or product name (Portuguese or English). Optional when edition is given. The site's own syntax also works: 'artista=Simon Dominic'.","on_invalid":"reject","example":"Luffy","aliases":["q","keyword"]},{"name":"edition","type":"string","required":false,"description":"Edition id (from `editions`) or edition code (as the site writes it, e.g. MEW, 30C-C): lists that set's cards; with `query`, only the cards whose name contains it (the site's own filter on the edition page).","on_invalid":"reject","example":"479849","aliases":["edition_id","set"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's default order"},{"value":"name_pt_asc","label":"Portuguese name A-Z"},{"value":"name_pt_desc","label":"Portuguese name Z-A"},{"value":"name_en_asc","label":"English name A-Z"},{"value":"name_en_desc","label":"English name Z-A"},{"value":"min_price_asc","label":"Lowest price, cheapest first"},{"value":"min_price_desc","label":"Lowest price, most expensive first"},{"value":"avg_price_asc","label":"Average price ascending"},{"value":"avg_price_desc","label":"Average price descending"},{"value":"max_price_asc","label":"Highest price ascending"},{"value":"max_price_desc","label":"Highest price descending"}],"default":"relevance","example":"min_price_desc"},{"name":"page","type":"integer","required":false,"description":"Result page (40 rows each).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Trim the page to this many rows.","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":40}],"returns":"results[]{type, name, name_alt, card, edition_code, number, collector_number, card_id, edition_id, edition_name, product_id, price_min_brl, price_avg_brl, price_max_brl, image_url, url}, count, page, has_more, game, site; with edition also total, edition_id, edition_name","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Luffy"}},{"name":"card","description":"One card in full: Portuguese and English name, card details as the site lists them (rarity, type, artist, formats…), every printing with its edition, number, rarity, artist, release date, image and the price guide per finish (Normal, Foil, Foil Etched, Promo… min/avg/max BRL); then EVERY store offer — price in BRL (and the pre-discount price), copies in stock, condition, language, finish/extras, photo, graded, pre-order — with the store's name, city, state, rating, review volume, verified/physical flags and shipping time; the open auctions (current bid, buy-now, bids, end time); and the stores.","required_params":[],"optional_params":["card","url","edition","number","offers_limit","offers_offset","condition","language","foil","state","min_quantity","max_price","verified_only"],"params":[{"name":"card","type":"string","required":false,"description":"Card name. Card pages are per print: pass the exact `card` value from search with `edition` and `number`, or pass `url`.","on_invalid":"reject","example":"Ace & Sabo & Luffy (OP13-007)","aliases":["name"]},{"name":"url","type":"string","required":false,"description":"A card page URL from LigaOnePiece (overrides card/edition/number).","on_invalid":"reject","example":"https://www.ligaonepiece.com.br/?view=cards/card&card=Ace+%26+Sabo+%26+Luffy+(OP13-007)&ed=OP-13&num=OP13-007"},{"name":"edition","type":"string","required":false,"description":"Edition code as the site uses it (search rows return it in `edition_code`). On `card` it selects one print; on `search` an edition id or code lists that set's cards.","on_invalid":"reject","example":"OP-13","aliases":["set","ed","edition_code"]},{"name":"number","type":"string","required":false,"description":"Card number inside the edition (search rows return it in `number`).","on_invalid":"reject","example":"OP13-007","aliases":["num"]},{"name":"offers_limit","type":"integer","required":false,"description":"How many store offers to return after filters, in the site's own order (cheapest first). 0 = price guide only, no offers (cheaper and faster).","on_invalid":"reject","default":100,"example":50,"minimum":0,"maximum":2000,"aliases":["limit"]},{"name":"offers_offset","type":"integer","required":false,"description":"Skip this many filtered offers (paging through a card with 1 000+ offers).","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":20000},{"name":"condition","type":"enum","required":false,"description":"Minimum condition: NM returns M and NM offers, SP returns M/NM/SP, and so on.","on_invalid":"reject","allowed_values":[{"value":"M","label":"Nova (Mint)"},{"value":"NM","label":"Praticamente Nova (Near Mint)"},{"value":"SP","label":"Usada Levemente (Slightly Played)"},{"value":"MP","label":"Usada Moderadamente"},{"value":"HP","label":"Muito Usada"},{"value":"D","label":"Danificada"}],"example":"NM"},{"name":"language","type":"string","required":false,"description":"Comma list of language codes as the site writes them: EN, PT, PTEN (Português/Inglês), JP, DE, ES, FR, IT, KO, RU, TW, TK, PH (game-dependent).","on_invalid":"reject","example":"EN,PT"},{"name":"foil","type":"boolean","required":false,"description":"true = only foil finishes (Foil, Foil Etched…), false = only non-foil.","on_invalid":"reject","example":false},{"name":"state","type":"string","required":false,"description":"Comma list of Brazilian states (UF) of the store, e.g. SP,RJ,MG.","on_invalid":"reject","example":"SP"},{"name":"min_quantity","type":"integer","required":false,"description":"Only offers with at least this many copies in stock (playsets: 4).","on_invalid":"reject","example":4,"minimum":1,"maximum":1000},{"name":"max_price","type":"number","required":false,"description":"Only offers at or below this price in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"verified_only","type":"boolean","required":false,"description":"Only stores the site marks as verified (Loja Verificada).","on_invalid":"reject","example":true}],"returns":"card{card_id, name, name_en, details[]{label, value}, url, resolved_from}, editions[]{edition_id, edition_name, edition_code, number, rarity, rarity_code, artist, release_date, image_url, price_guide[]{finish, finish_id, min_brl, avg_brl, max_brl}}, offers[]{offer_id, rank, price_brl, original_price_brl, price_readable, quantity, edition_id, edition_name, edition_code, number, condition, condition_label, language, language_label, extras[], is_foil, has_photo, is_graded, preorder_ships, store_id, store_name, store_city, store_state, store_rating, store_reviews, store_types[], store_ships_in, store_on_vacation}, offers_total, offers_matched, auctions[]{auction_id, title, current_bid_brl, buy_now_brl, bids, ends_at, seller, …}, stores[]{store_id, name, city, state, phone, rating, rating_shipping, rating_packaging, rating_accuracy, reviews, has_physical_store, latitude, longitude}, summary{}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":4},"example_params":{"url":"https://www.ligaonepiece.com.br/?view=cards/card&card=Ace+%26+Sabo+%26+Luffy+(OP13-007)&ed=OP-13&num=OP13-007"}},{"name":"buylist","description":"What Brazilian stores PAY for a card (the site's Buylist tab): per store and printing, the buy price for Mint/Near Mint in Portuguese or English, the base price, the discount and resulting buy price for every accepted condition, the discount for every accepted language, and the store's city, state and rating. Use it with `card` offers for arbitrage (buy below the best buylist).","required_params":[],"optional_params":["card","url","edition","number","limit"],"params":[{"name":"card","type":"string","required":false,"description":"Card name. Card pages are per print: pass the exact `card` value from search with `edition` and `number`, or pass `url`.","on_invalid":"reject","example":"Ace & Sabo & Luffy (OP13-007)","aliases":["name"]},{"name":"url","type":"string","required":false,"description":"A card page URL from LigaOnePiece (overrides card/edition/number).","on_invalid":"reject","example":"https://www.ligaonepiece.com.br/?view=cards/card&card=Ace+%26+Sabo+%26+Luffy+(OP13-007)&ed=OP-13&num=OP13-007"},{"name":"edition","type":"string","required":false,"description":"Edition code as the site uses it (search rows return it in `edition_code`). On `card` it selects one print; on `search` an edition id or code lists that set's cards.","on_invalid":"reject","example":"OP-13","aliases":["set","ed","edition_code"]},{"name":"number","type":"string","required":false,"description":"Card number inside the edition (search rows return it in `number`).","on_invalid":"reject","example":"OP13-007","aliases":["num"]},{"name":"limit","type":"integer","required":false,"description":"How many buylist rows to return (the site's order).","on_invalid":"reject","default":200,"example":50,"minimum":1,"maximum":1000}],"returns":"card{name, name_en, card_id, url, resolved_from}, buylist[]{buylist_id, edition_id, edition_name, edition_code, number, extras[], is_foil, buy_price_brl, base_price_brl, conditions[]{condition, discount_pct, buy_price_brl}, languages[]{language, discount_pct}, store_id, store_name, store_city, store_state, store_rating, store_reviews, store_types[]}, count, best_buy_price_brl","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.ligaonepiece.com.br/?view=cards/card&card=Ace+%26+Sabo+%26+Luffy+(OP13-007)&ed=OP-13&num=OP13-007"}},{"name":"editions","description":"Every edition (set) on LigaOnePiece: id, code, name (English and Portuguese where the site has one), release date, symbol, and whether it is a main or auxiliary (promo / grouped) edition. The id feeds search's `edition` to list the set's cards with prices.","required_params":[],"optional_params":["query","year"],"params":[{"name":"query","type":"string","required":false,"description":"Keep editions whose name or code contains this text.","on_invalid":"reject","example":"OP","aliases":["q"]},{"name":"year","type":"integer","required":false,"description":"Keep editions released in this year.","on_invalid":"reject","example":2025,"minimum":1990,"maximum":2100}],"returns":"editions[]{edition_id, edition_code, name, name_en, name_pt, release_date, group, grouped_under_id, icon_url, cards_url}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"OP"}},{"name":"movers","description":"The site's biggest price risers or fallers (Cards em Alta / em Queda): 50 cards with their current min/avg/max price in BRL and the change over the day, week and month for each, edition and number.","required_params":[],"optional_params":["direction","period"],"params":[{"name":"direction","type":"enum","required":false,"description":"Risers or fallers.","on_invalid":"reject","allowed_values":[{"value":"up","label":"Rising (Cards em Alta)"},{"value":"down","label":"Falling (Cards em Queda)"}],"default":"up","example":"up"},{"name":"period","type":"enum","required":false,"description":"Which change the list is ranked by.","on_invalid":"reject","allowed_values":[{"value":"day","label":"Day"},{"value":"week","label":"Week"},{"value":"month","label":"Month"}],"default":"day","example":"week"}],"returns":"movers[]{card_id, name, name_en, edition_id, edition_name, edition_code, number, rarity_code, price_min_brl, price_avg_brl, price_max_brl, change_brl, change_day_brl{min, avg, max}, change_week_brl{…}, change_month_brl{…}, image_url, url}, count, direction, period","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"direction":"up"}},{"name":"store","description":"A marketplace store's public profile (store_id from card offers): name, website, logo, average rating over 12/6/3 months and all time with the per-aspect ratings (shipping, packaging, accuracy), contact phones/WhatsApp, e-mail, social links, address (or that it has no physical store), and customer reviews (rating, date, purchase value band, per-aspect stars, comment), 25 per page.","required_params":["store_id"],"optional_params":["reviews_page"],"params":[{"name":"store_id","type":"integer","required":true,"description":"Store id (offers[].store_id from card or buylist).","on_invalid":"reject","example":75364,"minimum":1,"aliases":["id","lj_id"]},{"name":"reviews_page","type":"integer","required":false,"description":"Customer reviews page (25 each).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"store{store_id, name, website, logo_url, ratings[]{period, rating, based_on, by_aspect{}}, phones[]{number, whatsapp}, emails[], social[]{network, url}, address, has_physical_address, reviews[]{rating, customer, customer_location, date, purchase_value, by_aspect{}, comment}, reviews_has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":75364}}]},{"name":"ligapokemon","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"LigaPokemon API scraper - Brazil's Pokémon TCG price guide and store marketplace: min/avg/max price per printing and finish, every store offer with price, stock, condition, language and store, buylist prices, sets, price movers and store profiles. BRL.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/ligapokemon/v1","spec_available":true,"actions":[{"name":"search","description":"Search LigaPokemon's catalog by card or product name, or list one edition's cards: each row has the card name (Portuguese and English where the site has both), edition, collector number, the minimum, average and maximum price in BRL across Brazilian stores, the image and the keys `card`/`edition_code`/`number` that the card action takes. Sealed products appear as type=product. 40 rows a page; sort by name or by min/avg/max price.","required_params":[],"optional_params":["query","edition","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Card or product name (Portuguese or English). Optional when edition is given. The site's own syntax also works: 'artista=Simon Dominic'.","on_invalid":"reject","example":"Charizard ex","aliases":["q","keyword"]},{"name":"edition","type":"string","required":false,"description":"Edition id (from `editions`) or edition code (as the site writes it, e.g. MEW, 30C-C): lists that set's cards; with `query`, only the cards whose name contains it (the site's own filter on the edition page).","on_invalid":"reject","example":"479849","aliases":["edition_id","set"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's default order"},{"value":"name_pt_asc","label":"Portuguese name A-Z"},{"value":"name_pt_desc","label":"Portuguese name Z-A"},{"value":"name_en_asc","label":"English name A-Z"},{"value":"name_en_desc","label":"English name Z-A"},{"value":"min_price_asc","label":"Lowest price, cheapest first"},{"value":"min_price_desc","label":"Lowest price, most expensive first"},{"value":"avg_price_asc","label":"Average price ascending"},{"value":"avg_price_desc","label":"Average price descending"},{"value":"max_price_asc","label":"Highest price ascending"},{"value":"max_price_desc","label":"Highest price descending"}],"default":"relevance","example":"min_price_desc"},{"name":"page","type":"integer","required":false,"description":"Result page (40 rows each).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Trim the page to this many rows.","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":40}],"returns":"results[]{type, name, name_alt, card, edition_code, number, collector_number, card_id, edition_id, edition_name, product_id, price_min_brl, price_avg_brl, price_max_brl, image_url, url}, count, page, has_more, game, site; with edition also total, edition_id, edition_name","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Charizard ex"}},{"name":"card","description":"One card in full: Portuguese and English name, card details as the site lists them (rarity, type, artist, formats…), every printing with its edition, number, rarity, artist, release date, image and the price guide per finish (Normal, Foil, Foil Etched, Promo… min/avg/max BRL); then EVERY store offer — price in BRL (and the pre-discount price), copies in stock, condition, language, finish/extras, photo, graded, pre-order — with the store's name, city, state, rating, review volume, verified/physical flags and shipping time; the open auctions (current bid, buy-now, bids, end time); and the stores.","required_params":[],"optional_params":["card","url","edition","number","offers_limit","offers_offset","condition","language","foil","state","min_quantity","max_price","verified_only"],"params":[{"name":"card","type":"string","required":false,"description":"Card name. Card pages are per print: pass the exact `card` value from search (e.g. 'Charizard ex (006/165)') with `edition` and `number`, or pass `url`.","on_invalid":"reject","example":"Charizard ex (006/165)","aliases":["name"]},{"name":"url","type":"string","required":false,"description":"A card page URL from LigaPokemon (overrides card/edition/number).","on_invalid":"reject","example":"https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex+(006/165)&ed=MEW&num=006"},{"name":"edition","type":"string","required":false,"description":"Edition code as the site uses it (search rows return it in `edition_code`). On `card` it selects one print; on `search` an edition id or code lists that set's cards.","on_invalid":"reject","example":"MEW","aliases":["set","ed","edition_code"]},{"name":"number","type":"string","required":false,"description":"Card number inside the edition (search rows return it in `number`).","on_invalid":"reject","example":"006","aliases":["num"]},{"name":"offers_limit","type":"integer","required":false,"description":"How many store offers to return after filters, in the site's own order (cheapest first). 0 = price guide only, no offers (cheaper and faster).","on_invalid":"reject","default":100,"example":50,"minimum":0,"maximum":2000,"aliases":["limit"]},{"name":"offers_offset","type":"integer","required":false,"description":"Skip this many filtered offers (paging through a card with 1 000+ offers).","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":20000},{"name":"condition","type":"enum","required":false,"description":"Minimum condition: NM returns M and NM offers, SP returns M/NM/SP, and so on.","on_invalid":"reject","allowed_values":[{"value":"M","label":"Nova (Mint)"},{"value":"NM","label":"Praticamente Nova (Near Mint)"},{"value":"SP","label":"Usada Levemente (Slightly Played)"},{"value":"MP","label":"Usada Moderadamente"},{"value":"HP","label":"Muito Usada"},{"value":"D","label":"Danificada"}],"example":"NM"},{"name":"language","type":"string","required":false,"description":"Comma list of language codes as the site writes them: EN, PT, PTEN (Português/Inglês), JP, DE, ES, FR, IT, KO, RU, TW, TK, PH (game-dependent).","on_invalid":"reject","example":"EN,PT"},{"name":"foil","type":"boolean","required":false,"description":"true = only foil finishes (Foil, Foil Etched…), false = only non-foil.","on_invalid":"reject","example":false},{"name":"state","type":"string","required":false,"description":"Comma list of Brazilian states (UF) of the store, e.g. SP,RJ,MG.","on_invalid":"reject","example":"SP"},{"name":"min_quantity","type":"integer","required":false,"description":"Only offers with at least this many copies in stock (playsets: 4).","on_invalid":"reject","example":4,"minimum":1,"maximum":1000},{"name":"max_price","type":"number","required":false,"description":"Only offers at or below this price in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"verified_only","type":"boolean","required":false,"description":"Only stores the site marks as verified (Loja Verificada).","on_invalid":"reject","example":true}],"returns":"card{card_id, name, name_en, details[]{label, value}, url, resolved_from}, editions[]{edition_id, edition_name, edition_code, number, rarity, rarity_code, artist, release_date, image_url, price_guide[]{finish, finish_id, min_brl, avg_brl, max_brl}}, offers[]{offer_id, rank, price_brl, original_price_brl, price_readable, quantity, edition_id, edition_name, edition_code, number, condition, condition_label, language, language_label, extras[], is_foil, has_photo, is_graded, preorder_ships, store_id, store_name, store_city, store_state, store_rating, store_reviews, store_types[], store_ships_in, store_on_vacation}, offers_total, offers_matched, auctions[]{auction_id, title, current_bid_brl, buy_now_brl, bids, ends_at, seller, …}, stores[]{store_id, name, city, state, phone, rating, rating_shipping, rating_packaging, rating_accuracy, reviews, has_physical_store, latitude, longitude}, summary{}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":4},"example_params":{"url":"https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex+(006/165)&ed=MEW&num=006"}},{"name":"buylist","description":"What Brazilian stores PAY for a card (the site's Buylist tab): per store and printing, the buy price for Mint/Near Mint in Portuguese or English, the base price, the discount and resulting buy price for every accepted condition, the discount for every accepted language, and the store's city, state and rating. Use it with `card` offers for arbitrage (buy below the best buylist).","required_params":[],"optional_params":["card","url","edition","number","limit"],"params":[{"name":"card","type":"string","required":false,"description":"Card name. Card pages are per print: pass the exact `card` value from search (e.g. 'Charizard ex (006/165)') with `edition` and `number`, or pass `url`.","on_invalid":"reject","example":"Charizard ex (006/165)","aliases":["name"]},{"name":"url","type":"string","required":false,"description":"A card page URL from LigaPokemon (overrides card/edition/number).","on_invalid":"reject","example":"https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex+(006/165)&ed=MEW&num=006"},{"name":"edition","type":"string","required":false,"description":"Edition code as the site uses it (search rows return it in `edition_code`). On `card` it selects one print; on `search` an edition id or code lists that set's cards.","on_invalid":"reject","example":"MEW","aliases":["set","ed","edition_code"]},{"name":"number","type":"string","required":false,"description":"Card number inside the edition (search rows return it in `number`).","on_invalid":"reject","example":"006","aliases":["num"]},{"name":"limit","type":"integer","required":false,"description":"How many buylist rows to return (the site's order).","on_invalid":"reject","default":200,"example":50,"minimum":1,"maximum":1000}],"returns":"card{name, name_en, card_id, url, resolved_from}, buylist[]{buylist_id, edition_id, edition_name, edition_code, number, extras[], is_foil, buy_price_brl, base_price_brl, conditions[]{condition, discount_pct, buy_price_brl}, languages[]{language, discount_pct}, store_id, store_name, store_city, store_state, store_rating, store_reviews, store_types[]}, count, best_buy_price_brl","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex+(006/165)&ed=MEW&num=006"}},{"name":"editions","description":"Every edition (set) on LigaPokemon: id, code, name (English and Portuguese where the site has one), release date, symbol, and whether it is a main or auxiliary (promo / grouped) edition. The id feeds search's `edition` to list the set's cards with prices.","required_params":[],"optional_params":["query","year"],"params":[{"name":"query","type":"string","required":false,"description":"Keep editions whose name or code contains this text.","on_invalid":"reject","example":"Escarlate","aliases":["q"]},{"name":"year","type":"integer","required":false,"description":"Keep editions released in this year.","on_invalid":"reject","example":2025,"minimum":1990,"maximum":2100}],"returns":"editions[]{edition_id, edition_code, name, name_en, name_pt, release_date, group, grouped_under_id, icon_url, cards_url}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Escarlate"}},{"name":"movers","description":"The site's biggest price risers or fallers (Cards em Alta / em Queda): 50 cards with their current min/avg/max price in BRL and the change over the day, week and month for each, edition and number.","required_params":[],"optional_params":["direction","period"],"params":[{"name":"direction","type":"enum","required":false,"description":"Risers or fallers.","on_invalid":"reject","allowed_values":[{"value":"up","label":"Rising (Cards em Alta)"},{"value":"down","label":"Falling (Cards em Queda)"}],"default":"up","example":"up"},{"name":"period","type":"enum","required":false,"description":"Which change the list is ranked by.","on_invalid":"reject","allowed_values":[{"value":"day","label":"Day"},{"value":"week","label":"Week"},{"value":"month","label":"Month"}],"default":"day","example":"week"}],"returns":"movers[]{card_id, name, name_en, edition_id, edition_name, edition_code, number, rarity_code, price_min_brl, price_avg_brl, price_max_brl, change_brl, change_day_brl{min, avg, max}, change_week_brl{…}, change_month_brl{…}, image_url, url}, count, direction, period","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"direction":"up"}},{"name":"store","description":"A marketplace store's public profile (store_id from card offers): name, website, logo, average rating over 12/6/3 months and all time with the per-aspect ratings (shipping, packaging, accuracy), contact phones/WhatsApp, e-mail, social links, address (or that it has no physical store), and customer reviews (rating, date, purchase value band, per-aspect stars, comment), 25 per page.","required_params":["store_id"],"optional_params":["reviews_page"],"params":[{"name":"store_id","type":"integer","required":true,"description":"Store id (offers[].store_id from card or buylist).","on_invalid":"reject","example":75364,"minimum":1,"aliases":["id","lj_id"]},{"name":"reviews_page","type":"integer","required":false,"description":"Customer reviews page (25 each).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"store{store_id, name, website, logo_url, ratings[]{period, rating, based_on, by_aspect{}}, phones[]{number, whatsapp}, emails[], social[]{network, url}, address, has_physical_address, reviews[]{rating, customer, customer_location, date, purchase_value, by_aspect{}, comment}, reviews_has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":75364}}]},{"name":"ligayugioh","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"LigaYugioh API scraper - Brazil's Yu-Gi-Oh! price guide and store marketplace: min/avg/max price per printing and finish, every store offer with price, stock, condition, language and store, buylist prices, sets, price movers and store profiles. BRL.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/ligayugioh/v1","spec_available":true,"actions":[{"name":"search","description":"Search LigaYugioh's catalog by card or product name, or list one edition's cards: each row has the card name (Portuguese and English where the site has both), edition, collector number, the minimum, average and maximum price in BRL across Brazilian stores, the image and the keys `card`/`edition_code`/`number` that the card action takes. Sealed products appear as type=product. 40 rows a page; sort by name or by min/avg/max price.","required_params":[],"optional_params":["query","edition","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Card or product name (Portuguese or English). Optional when edition is given. The site's own syntax also works: 'artista=Simon Dominic'.","on_invalid":"reject","example":"Dark Magician","aliases":["q","keyword"]},{"name":"edition","type":"string","required":false,"description":"Edition id (from `editions`) or edition code (as the site writes it, e.g. MEW, 30C-C): lists that set's cards; with `query`, only the cards whose name contains it (the site's own filter on the edition page).","on_invalid":"reject","example":"479849","aliases":["edition_id","set"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's default order"},{"value":"name_pt_asc","label":"Portuguese name A-Z"},{"value":"name_pt_desc","label":"Portuguese name Z-A"},{"value":"name_en_asc","label":"English name A-Z"},{"value":"name_en_desc","label":"English name Z-A"},{"value":"min_price_asc","label":"Lowest price, cheapest first"},{"value":"min_price_desc","label":"Lowest price, most expensive first"},{"value":"avg_price_asc","label":"Average price ascending"},{"value":"avg_price_desc","label":"Average price descending"},{"value":"max_price_asc","label":"Highest price ascending"},{"value":"max_price_desc","label":"Highest price descending"}],"default":"relevance","example":"min_price_desc"},{"name":"page","type":"integer","required":false,"description":"Result page (40 rows each).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Trim the page to this many rows.","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":40}],"returns":"results[]{type, name, name_alt, card, edition_code, number, collector_number, card_id, edition_id, edition_name, product_id, price_min_brl, price_avg_brl, price_max_brl, image_url, url}, count, page, has_more, game, site; with edition also total, edition_id, edition_name","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Dark Magician"}},{"name":"card","description":"One card in full: Portuguese and English name, card details as the site lists them (rarity, type, artist, formats…), every printing with its edition, number, rarity, artist, release date, image and the price guide per finish (Normal, Foil, Foil Etched, Promo… min/avg/max BRL); then EVERY store offer — price in BRL (and the pre-discount price), copies in stock, condition, language, finish/extras, photo, graded, pre-order — with the store's name, city, state, rating, review volume, verified/physical flags and shipping time; the open auctions (current bid, buy-now, bids, end time); and the stores.","required_params":[],"optional_params":["card","url","edition","number","offers_limit","offers_offset","condition","language","foil","state","min_quantity","max_price","verified_only"],"params":[{"name":"card","type":"string","required":false,"description":"Card name. The English or Portuguese card name, as the site writes it; the card page returns every printing. Add `edition` and `number` to select one print, or pass `url`.","on_invalid":"reject","example":"Dark Magician Knight","aliases":["name"]},{"name":"url","type":"string","required":false,"description":"A card page URL from LigaYugioh (overrides card/edition/number).","on_invalid":"reject","example":"https://www.ligayugioh.com.br/?view=cards/card&card=Dark+Magician+Knight&ed=LCYW&num=LCYW-EN028"},{"name":"edition","type":"string","required":false,"description":"Edition code as the site uses it (search rows return it in `edition_code`). On `card` it selects one print; on `search` an edition id or code lists that set's cards.","on_invalid":"reject","example":"LCYW","aliases":["set","ed","edition_code"]},{"name":"number","type":"string","required":false,"description":"Card number inside the edition (search rows return it in `number`).","on_invalid":"reject","example":"LCYW-EN028","aliases":["num"]},{"name":"offers_limit","type":"integer","required":false,"description":"How many store offers to return after filters, in the site's own order (cheapest first). 0 = price guide only, no offers (cheaper and faster).","on_invalid":"reject","default":100,"example":50,"minimum":0,"maximum":2000,"aliases":["limit"]},{"name":"offers_offset","type":"integer","required":false,"description":"Skip this many filtered offers (paging through a card with 1 000+ offers).","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":20000},{"name":"condition","type":"enum","required":false,"description":"Minimum condition: NM returns M and NM offers, SP returns M/NM/SP, and so on.","on_invalid":"reject","allowed_values":[{"value":"M","label":"Nova (Mint)"},{"value":"NM","label":"Praticamente Nova (Near Mint)"},{"value":"SP","label":"Usada Levemente (Slightly Played)"},{"value":"MP","label":"Usada Moderadamente"},{"value":"HP","label":"Muito Usada"},{"value":"D","label":"Danificada"}],"example":"NM"},{"name":"language","type":"string","required":false,"description":"Comma list of language codes as the site writes them: EN, PT, PTEN (Português/Inglês), JP, DE, ES, FR, IT, KO, RU, TW, TK, PH (game-dependent).","on_invalid":"reject","example":"EN,PT"},{"name":"foil","type":"boolean","required":false,"description":"true = only foil finishes (Foil, Foil Etched…), false = only non-foil.","on_invalid":"reject","example":false},{"name":"state","type":"string","required":false,"description":"Comma list of Brazilian states (UF) of the store, e.g. SP,RJ,MG.","on_invalid":"reject","example":"SP"},{"name":"min_quantity","type":"integer","required":false,"description":"Only offers with at least this many copies in stock (playsets: 4).","on_invalid":"reject","example":4,"minimum":1,"maximum":1000},{"name":"max_price","type":"number","required":false,"description":"Only offers at or below this price in BRL.","on_invalid":"reject","example":50,"minimum":0},{"name":"verified_only","type":"boolean","required":false,"description":"Only stores the site marks as verified (Loja Verificada).","on_invalid":"reject","example":true}],"returns":"card{card_id, name, name_en, details[]{label, value}, url, resolved_from}, editions[]{edition_id, edition_name, edition_code, number, rarity, rarity_code, artist, release_date, image_url, price_guide[]{finish, finish_id, min_brl, avg_brl, max_brl}}, offers[]{offer_id, rank, price_brl, original_price_brl, price_readable, quantity, edition_id, edition_name, edition_code, number, condition, condition_label, language, language_label, extras[], is_foil, has_photo, is_graded, preorder_ships, store_id, store_name, store_city, store_state, store_rating, store_reviews, store_types[], store_ships_in, store_on_vacation}, offers_total, offers_matched, auctions[]{auction_id, title, current_bid_brl, buy_now_brl, bids, ends_at, seller, …}, stores[]{store_id, name, city, state, phone, rating, rating_shipping, rating_packaging, rating_accuracy, reviews, has_physical_store, latitude, longitude}, summary{}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":4},"example_params":{"url":"https://www.ligayugioh.com.br/?view=cards/card&card=Dark+Magician+Knight&ed=LCYW&num=LCYW-EN028"}},{"name":"buylist","description":"What Brazilian stores PAY for a card (the site's Buylist tab): per store and printing, the buy price for Mint/Near Mint in Portuguese or English, the base price, the discount and resulting buy price for every accepted condition, the discount for every accepted language, and the store's city, state and rating. Use it with `card` offers for arbitrage (buy below the best buylist).","required_params":[],"optional_params":["card","url","edition","number","limit"],"params":[{"name":"card","type":"string","required":false,"description":"Card name. The English or Portuguese card name, as the site writes it; the card page returns every printing. Add `edition` and `number` to select one print, or pass `url`.","on_invalid":"reject","example":"Dark Magician Knight","aliases":["name"]},{"name":"url","type":"string","required":false,"description":"A card page URL from LigaYugioh (overrides card/edition/number).","on_invalid":"reject","example":"https://www.ligayugioh.com.br/?view=cards/card&card=Dark+Magician+Knight&ed=LCYW&num=LCYW-EN028"},{"name":"edition","type":"string","required":false,"description":"Edition code as the site uses it (search rows return it in `edition_code`). On `card` it selects one print; on `search` an edition id or code lists that set's cards.","on_invalid":"reject","example":"LCYW","aliases":["set","ed","edition_code"]},{"name":"number","type":"string","required":false,"description":"Card number inside the edition (search rows return it in `number`).","on_invalid":"reject","example":"LCYW-EN028","aliases":["num"]},{"name":"limit","type":"integer","required":false,"description":"How many buylist rows to return (the site's order).","on_invalid":"reject","default":200,"example":50,"minimum":1,"maximum":1000}],"returns":"card{name, name_en, card_id, url, resolved_from}, buylist[]{buylist_id, edition_id, edition_name, edition_code, number, extras[], is_foil, buy_price_brl, base_price_brl, conditions[]{condition, discount_pct, buy_price_brl}, languages[]{language, discount_pct}, store_id, store_name, store_city, store_state, store_rating, store_reviews, store_types[]}, count, best_buy_price_brl","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.ligayugioh.com.br/?view=cards/card&card=Dark+Magician+Knight&ed=LCYW&num=LCYW-EN028"}},{"name":"editions","description":"Every edition (set) on LigaYugioh: id, code, name (English and Portuguese where the site has one), release date, symbol, and whether it is a main or auxiliary (promo / grouped) edition. The id feeds search's `edition` to list the set's cards with prices.","required_params":[],"optional_params":["query","year"],"params":[{"name":"query","type":"string","required":false,"description":"Keep editions whose name or code contains this text.","on_invalid":"reject","example":"Legend","aliases":["q"]},{"name":"year","type":"integer","required":false,"description":"Keep editions released in this year.","on_invalid":"reject","example":2025,"minimum":1990,"maximum":2100}],"returns":"editions[]{edition_id, edition_code, name, name_en, name_pt, release_date, group, grouped_under_id, icon_url, cards_url}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"Legend"}},{"name":"movers","description":"The site's biggest price risers or fallers (Cards em Alta / em Queda): 50 cards with their current min/avg/max price in BRL and the change over the day, week and month for each, edition and number.","required_params":[],"optional_params":["direction","period"],"params":[{"name":"direction","type":"enum","required":false,"description":"Risers or fallers.","on_invalid":"reject","allowed_values":[{"value":"up","label":"Rising (Cards em Alta)"},{"value":"down","label":"Falling (Cards em Queda)"}],"default":"up","example":"up"},{"name":"period","type":"enum","required":false,"description":"Which change the list is ranked by.","on_invalid":"reject","allowed_values":[{"value":"day","label":"Day"},{"value":"week","label":"Week"},{"value":"month","label":"Month"}],"default":"day","example":"week"}],"returns":"movers[]{card_id, name, name_en, edition_id, edition_name, edition_code, number, rarity_code, price_min_brl, price_avg_brl, price_max_brl, change_brl, change_day_brl{min, avg, max}, change_week_brl{…}, change_month_brl{…}, image_url, url}, count, direction, period","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"direction":"up"}},{"name":"store","description":"A marketplace store's public profile (store_id from card offers): name, website, logo, average rating over 12/6/3 months and all time with the per-aspect ratings (shipping, packaging, accuracy), contact phones/WhatsApp, e-mail, social links, address (or that it has no physical store), and customer reviews (rating, date, purchase value band, per-aspect stars, comment), 25 per page.","required_params":["store_id"],"optional_params":["reviews_page"],"params":[{"name":"store_id","type":"integer","required":true,"description":"Store id (offers[].store_id from card or buylist).","on_invalid":"reject","example":75364,"minimum":1,"aliases":["id","lj_id"]},{"name":"reviews_page","type":"integer","required":false,"description":"Customer reviews page (25 each).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"store{store_id, name, website, logo_url, ratings[]{period, rating, based_on, by_aspect{}}, phones[]{number, whatsapp}, emails[], social[]{network, url}, address, has_physical_address, reviews[]{rating, customer, customer_location, date, purchase_value, by_aspect{}, comment}, reviews_has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"store_id":75364}}]},{"name":"linkedin-jobs","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"LinkedIn Jobs API — search jobs, jobs by company, location lookup, similar jobs, posting detail & company profiles from LinkedIn (linkedin.com), no login required","version":"1.2.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/linkedin-jobs/v1","spec_available":true,"actions":[{"name":"jobs/search","description":"Search public LinkedIn job postings by keywords, with optional location and date/seniority/job-type/workplace filters.","required_params":["keywords"],"optional_params":["location","max_results","date_posted","experience","job_type","workplace","industry","job_function","salary_min","salary_band","company","include_detail","include_company","page","cursor","start","geoId","filters","detail_concurrency"],"params":[{"name":"keywords","type":"string","required":true,"description":"What job to search for — title, skill or keyword.","on_invalid":"reject","example":"python developer","aliases":["query"]},{"name":"location","type":"string","required":false,"description":"Country, region or city to search in (free text, e.g. 'United States', 'Berlin').","on_invalid":"reject","example":"United States"},{"name":"max_results","type":"integer","required":false,"description":"How many jobs to return (1–1000). LinkedIn's guest API caps any single query at ~1000; use filters to narrow.","on_invalid":"reject","default":50,"minimum":1,"maximum":1000},{"name":"date_posted","type":"enum","required":false,"description":"Only jobs posted within this window (raw f_TPR codes like r86400 also accepted).","on_invalid":"ignore","allowed_values":[{"value":"24h","label":"Last 24 hours"},{"value":"week","label":"Last week"},{"value":"month","label":"Last month"}]},{"name":"experience","type":"enum","required":false,"description":"Only jobs at this experience level (raw f_E codes 1–6 also accepted).","on_invalid":"ignore","allowed_values":[{"value":"internship","label":"Internship"},{"value":"entry","label":"Entry level"},{"value":"associate","label":"Associate"},{"value":"mid_senior","label":"Mid-Senior level"},{"value":"director","label":"Director"},{"value":"executive","label":"Executive"}]},{"name":"job_type","type":"enum","required":false,"description":"Only jobs of this employment type (raw f_JT codes F/P/C/T/I/V/O also accepted).","on_invalid":"ignore","allowed_values":[{"value":"fulltime","label":"Full-time"},{"value":"parttime","label":"Part-time"},{"value":"contract","label":"Contract"},{"value":"temporary","label":"Temporary"},{"value":"internship","label":"Internship"},{"value":"volunteer","label":"Volunteer"},{"value":"other","label":"Other"}]},{"name":"workplace","type":"enum","required":false,"description":"Only jobs with this workplace arrangement (raw f_WT codes 1/2/3 also accepted).","on_invalid":"ignore","allowed_values":[{"value":"onsite","label":"On-site"},{"value":"remote","label":"Remote"},{"value":"hybrid","label":"Hybrid"}]},{"name":"company","type":"string","required":false,"description":"Only jobs at this employer — a company slug (the part after linkedin.com/company/), the full company URL, or its numeric LinkedIn company id (maps to the f_C facet; slugs are resolved automatically). For a pure company browse use the jobs/by-company action.","on_invalid":"ignore","example":"microsoft"},{"name":"industry","type":"string","required":false,"description":"Only jobs in this LinkedIn industry — raw f_I industry code(s), comma-separated for several (e.g. '4' = software).","on_invalid":"ignore","example":"4"},{"name":"job_function","type":"string","required":false,"description":"Only jobs in this job function — raw f_F function code(s) (e.g. 'it', 'eng', 'sale'), comma-separated.","on_invalid":"ignore","example":"it"},{"name":"salary_min","type":"integer","required":false,"description":"Only jobs paying at least this annual salary (USD). Mapped to LinkedIn's nearest pay band: 40k/60k/80k/100k/120k/140k+.","on_invalid":"ignore","example":100000,"minimum":0},{"name":"salary_band","type":"enum","required":false,"description":"Advanced: LinkedIn pay-band code directly (raw f_SB2). Prefer salary_min.","on_invalid":"ignore","allowed_values":[{"value":"1","label":"$40k+"},{"value":"2","label":"$60k+"},{"value":"3","label":"$80k+"},{"value":"4","label":"$100k+"},{"value":"5","label":"$120k+"},{"value":"6","label":"$140k+"}]},{"name":"include_detail","type":"boolean","required":false,"description":"Fetch the full posting per job (description, employment type, seniority, salary) — slower.","on_invalid":"reject","default":false},{"name":"include_company","type":"boolean","required":false,"description":"Also fetch the employer's company profile (industry, size, HQ) per job — slower.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3… — page size = max_results).","on_invalid":"ignore","default":1,"minimum":1},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"start","type":"integer","required":false,"description":"Advanced: raw result offset (10 jobs/page, must stay < 1000). Prefer `page` or `cursor`.","on_invalid":"ignore","minimum":0,"maximum":999},{"name":"geoId","type":"string","required":false,"description":"Advanced: LinkedIn numeric geo ID — pins the search to an exact region (more precise than free-text location).","on_invalid":"ignore","example":"103644278"},{"name":"filters","type":"object","required":false,"description":"Advanced: the same facets as one object {date_posted, experience, job_type, workplace} — explicit keys here win over the flat params.","on_invalid":"ignore","example":{"workplace":"remote","date_posted":"24h"}},{"name":"detail_concurrency","type":"integer","required":false,"description":"Advanced: parallel detail fetches when include_detail=true (1–8).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"jobs[]{job_id, job_url, title, company{name, url, slug}, location, workplace_type, posted_date, posted_relative, salary, seniority_level, employment_type, description_text, job_poster{name, title, profile_url, image} (with include_detail)} + meta.pagination{page, has_more, next_cursor}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"keywords":"python developer","location":"United States","max_results":25}},{"name":"jobs/detail","description":"Full posting for one job: description, employment type, seniority, salary, applicant count, and the job poster when LinkedIn shows one.","required_params":["job_id"],"optional_params":["include_company"],"params":[{"name":"job_id","type":"string","required":true,"description":"LinkedIn job ID — the number in the job URL (linkedin.com/jobs/view/<job_id>) or `job_id` from jobs/search.","on_invalid":"reject","example":"4425539379","aliases":["jobId"]},{"name":"include_company","type":"boolean","required":false,"description":"Also fetch the employer's company profile (industry, size, HQ) per job — slower.","on_invalid":"reject","default":false}],"returns":"job{job_id, job_url, title, company{...}, description_text, description_html, employment_type, seniority_level, salary, applicants, job_poster{name, title, profile_url, image, label}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"job_id":"4425539379"}},{"name":"company","description":"Company profile: description, website, employee count, industry, HQ, founded year, specialties.","required_params":["company"],"optional_params":[],"params":[{"name":"company","type":"string","required":true,"description":"Company slug (the part after linkedin.com/company/) or the full LinkedIn company URL.","on_invalid":"reject","example":"microsoft","aliases":["slug","url"]}],"returns":"company{slug, url, description, website, employee_count, company_size, industry, headquarters, founded, organization_type, specialties}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"company":"microsoft"}},{"name":"jobs/by-company","description":"All public job postings at a specific company — pass a company slug, URL or numeric id; optionally narrow with the same keyword/location/date/seniority/job-type/workplace filters as jobs/search.","required_params":["company"],"optional_params":["keywords","location","max_results","date_posted","experience","job_type","workplace","industry","job_function","salary_min","salary_band","include_detail","include_company","page","cursor","start","geoId","filters","detail_concurrency"],"params":[{"name":"company","type":"string","required":true,"description":"The employer — a company slug (the part after linkedin.com/company/), the full company URL, or its numeric LinkedIn company id. Slugs/URLs are resolved to the company id automatically.","on_invalid":"reject","example":"microsoft","aliases":["slug","url"]},{"name":"keywords","type":"string","required":false,"description":"Optional: also filter the company's jobs by title/skill/keyword (leave empty to browse all of the company's jobs).","on_invalid":"reject","example":"software engineer","aliases":["query"]},{"name":"location","type":"string","required":false,"description":"Optional: country, region or city to narrow to.","on_invalid":"reject","example":"United States"},{"name":"max_results","type":"integer","required":false,"description":"How many jobs to return (1–1000).","on_invalid":"reject","default":50,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"Page number (easy paging: 1, 2, 3… — page size = max_results).","on_invalid":"ignore","default":1,"minimum":1},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"}],"returns":"jobs[]{job_id, job_url, title, company{name, url, slug}, location, workplace_type, posted_date, posted_relative} + company_id + meta.pagination{page, has_more, next_cursor}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"company":"microsoft"}},{"name":"locations/search","description":"Location typeahead → resolve a place name (city, region, metro area, country) to the LinkedIn numeric geoId used by the `geoId` search param for precise geo-pinned searches.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Place name to look up — city, region, metro area or country (e.g. 'San Francisco', 'Greater London').","on_invalid":"reject","example":"San Francisco","aliases":["q","keywords"]},{"name":"limit","type":"integer","required":false,"description":"Max suggestions to return (1–25).","on_invalid":"ignore","default":10,"minimum":1,"maximum":25}],"returns":"locations[]{name, geoId}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"San Francisco"}},{"name":"jobs/similar","description":"Related job postings for a given job_id. LinkedIn's guest surface exposes no direct similar-jobs feed, so results are a keyword+location re-search seeded from the source job's own title (the seed job is excluded).","required_params":["job_id"],"optional_params":["keywords","location","max_results","include_detail","include_company"],"params":[{"name":"job_id","type":"string","required":true,"description":"LinkedIn job ID to find similar postings for — the number in the job URL or `job_id` from jobs/search.","on_invalid":"reject","example":"4425539379","aliases":["jobId"]},{"name":"keywords","type":"string","required":false,"description":"Optional: override the re-search keywords (defaults to the seed job's title).","on_invalid":"reject","example":"data engineer","aliases":["query"]},{"name":"location","type":"string","required":false,"description":"Optional: override the re-search location (defaults to the seed job's location).","on_invalid":"reject","example":"United States"},{"name":"max_results","type":"integer","required":false,"description":"How many similar jobs to return (1–100).","on_invalid":"reject","default":25,"minimum":1,"maximum":100}],"returns":"jobs[]{job_id, job_url, title, company{name, url, slug}, location, posted_date, posted_relative} + seed{job_id, title, company, location} + method","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"job_id":"4425539379"}}]},{"name":"listennotes","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Listen Notes API — podcast search engine scraper: search podcasts by keyword, get full podcast details (publisher, description, episode count, genres, hosts, latest episodes, cover art, rating) and episode details (audio URL, duration, publish date, description), browse the best podcasts by country and by genre, and read the complete podcast genre taxonomy — from Listen Notes (listennotes.com, 3.7M+ podcasts / 190M+ episodes), no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/listennotes/v1","spec_available":true,"actions":[{"name":"search","description":"Search Listen Notes for podcasts by keyword. Returns up to 10 matching podcasts with title, publisher, cover image and the podcast id (feed into `podcast` for full details).","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"What to look for — a topic, show name or person ('startup', 'true crime', 'Joe Rogan', 'bitcoin').","on_invalid":"reject","example":"startup","aliases":["q","term"]}],"returns":"podcasts[]{id, uuid, title, publisher, image, thumbnail, url, is_claimed, explicit}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"startup"}},{"name":"podcast","description":"Full detail for one podcast by id (from search) or a Listen Notes podcast URL: title, publisher, description, cover art, language, country, genres, hosts, rating, total episode count, social links and its latest episodes.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Podcast id (the short id returned by `search`, e.g. 'ynkdVHl_OTE').","on_invalid":"reject","example":"ynkdVHl_OTE","aliases":["podcast_id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full Listen Notes podcast URL.","on_invalid":"ignore","example":"https://www.listennotes.com/podcasts/the-daily-the-new-york-times-xp7nhsmSkX2/"}],"returns":"podcast{id, uuid, title, publisher, description, image, url, language, country, genre_ids[], hosts[], rating, rating_count, total_episodes, extra_urls{}, rss, itunes_url, nlp_entities[], latest_episodes[]{episode_id, title, audio, duration, duration_sec, image, url}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"xp7nhsmSkX2"}},{"name":"episode","description":"Full detail for one episode by id or a Listen Notes episode URL: title, description, audio URL, duration, publish date, cover art and the parent podcast.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Episode id (32-char uuid, e.g. from a podcast's latest_episodes[].episode_id).","on_invalid":"reject","example":"5d3f3a3fc4534c2ca63c3245f8c2b894","aliases":["episode_id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full Listen Notes episode URL.","on_invalid":"ignore","example":"https://www.listennotes.com/podcasts/hey-jonas/leave-a-message-after-the-beep-ug_4YbW9mB8/"}],"returns":"episode{id, uuid, title, description, audio, audio_length, audio_length_sec, image, url, published, transcript, podcast{title, id, url}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"5d3f3a3fc4534c2ca63c3245f8c2b894"}},{"name":"best_podcasts","description":"The curated 'best podcasts' list for a country, paginated. Each entry has the podcast title, publisher, cover image, id, Listen Score and global rank.","required_params":[],"optional_params":["region","page"],"params":[{"name":"region","type":"enum","required":false,"description":"ISO-3166 country code for the curated list (common set listed; others fall back to the global list).","on_invalid":"ignore","allowed_values":[{"value":"us","label":"United States"},{"value":"gb","label":"United Kingdom"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"de","label":"Germany"},{"value":"fr","label":"France"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"nl","label":"Netherlands"},{"value":"se","label":"Sweden"},{"value":"br","label":"Brazil"},{"value":"mx","label":"Mexico"},{"value":"in","label":"India"},{"value":"jp","label":"Japan"},{"value":"kr","label":"South Korea"},{"value":"cn","label":"China"},{"value":"tw","label":"Taiwan"},{"value":"hk","label":"Hong Kong"},{"value":"sg","label":"Singapore"},{"value":"ru","label":"Russia"},{"value":"tr","label":"Türkiye"},{"value":"za","label":"South Africa"},{"value":"ph","label":"Philippines"},{"value":"my","label":"Malaysia"},{"value":"id","label":"Indonesia"},{"value":"th","label":"Thailand"},{"value":"nz","label":"New Zealand"},{"value":"pt","label":"Portugal"},{"value":"pl","label":"Poland"},{"value":"be","label":"Belgium"}],"default":"us","example":"us"},{"name":"page","type":"integer","required":false,"description":"Result page (each page is one curated batch). Page until the returned list is empty.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"podcasts[]{id, title, publisher, url, image, listen_score, global_rank} + meta{region, page, has_more}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"region":"us"}},{"name":"genre","description":"Browse the best podcasts in a genre, paginated. Use the `genres` action to get the genre id → name list. Each entry has title, publisher, image, id, Listen Score and global rank.","required_params":["genre_id"],"optional_params":["page"],"params":[{"name":"genre_id","type":"integer","required":true,"description":"Numeric genre id (e.g. 93=Business, 127=Technology, 133=Comedy, 135=True Crime, 134=Music). See `genres`.","on_invalid":"reject","example":93},{"name":"page","type":"integer","required":false,"description":"Result page (each page is one curated batch). Page until the returned list is empty.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"podcasts[]{id, title, publisher, url, image, listen_score, global_rank} + meta{genre_id, genre_name, page, has_more}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"genre_id":93}},{"name":"genres","description":"The complete Listen Notes genre taxonomy — every genre id mapped to its name. These ids are the input vocabulary for the `genre` action.","required_params":[],"optional_params":[],"params":[],"returns":"genres[]{id, name}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"liveauctioneers","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"LiveAuctioneers — auction lots, sold archive, sales, houses","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/liveauctioneers/v1","spec_available":true,"actions":[{"name":"search","description":"Search lots that are open for bidding or coming up, across thousands of auction houses. Filters: category, house, country, state, sale type, estimate range, current-bid range. Give `query` or at least one filter.","required_params":[],"optional_params":[],"params":[{"name":"query","type":"string","required":false,"description":"Keywords, as typed on liveauctioneers.com (e.g. 'rolex daytona', 'tiffany lamp'). Optional when a filter is given.","on_invalid":"reject","example":"tiffany lamp","aliases":["q","keyword"]},{"name":"category","type":"enum","required":false,"description":"Top-level category. Unknown values are refused (the source would silently ignore them and return everything).","on_invalid":"reject","allowed_values":[{"value":"art","label":"Art"},{"value":"collectibles","label":"Collectibles"},{"value":"fashion","label":"Fashion"},{"value":"furniture","label":"Furniture"},{"value":"home_decor","label":"Home & Décor"},{"value":"jewelry","label":"Jewelry"}]},{"name":"house_id","type":"integer","required":false,"description":"Restrict to one auction house — the `house_id` of a row or of `auction_house`.","on_invalid":"reject","example":7169,"minimum":1},{"name":"country","type":"string","required":false,"description":"Two-letter country of the auction house (US, UK, DE, CA …). `GB` is accepted for the United Kingdom.","on_invalid":"reject","example":"US"},{"name":"state","type":"string","required":false,"description":"Two-letter US state / province code of the house (NY, CA, FL, ON …).","on_invalid":"reject","example":"NY"},{"name":"sale_type","type":"enum","required":false,"description":"Kind of sale.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Live auction run in real time by the house"},{"value":"timed","label":"Online timed auction with a closing time"},{"value":"timed_plus","label":"Timed+ auction (staggered close, live-style)"},{"value":"buy_now","label":"Fixed-price Buy Now listings"}]},{"name":"min_estimate","type":"number","required":false,"description":"Lower bound on the LOW pre-sale estimate, in the lot's own currency.","on_invalid":"reject","minimum":0},{"name":"max_estimate","type":"number","required":false,"description":"Upper bound on the LOW pre-sale estimate (the source filters on the low end of the range), in the lot's own currency.","on_invalid":"reject","minimum":0},{"name":"min_bid","type":"number","required":false,"description":"Lowest current bid (or opening price on a lot with no bids), in the lot's own currency.","on_invalid":"reject","minimum":0},{"name":"max_bid","type":"number","required":false,"description":"Highest current bid (or opening price).","on_invalid":"reject","minimum":0},{"name":"sort","type":"enum","required":false,"description":"Order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"LiveAuctioneers' own relevance ranking (default)"},{"value":"newly_listed","label":"Most recently published first"},{"value":"sale_soonest","label":"Sale starting soonest first"},{"value":"most_bids","label":"Most bids first"},{"value":"estimate_high_first","label":"Highest estimate first"},{"value":"bid_high_first","label":"Highest current bid / opening price first"},{"value":"bid_low_first","label":"Lowest current bid / opening price first"},{"value":"lot_number","label":"Lot number order"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"Rows per page (the source caps a page at 120).","on_invalid":"reject","default":24,"minimum":1,"maximum":120,"aliases":["limit","page_size"]}],"returns":"`results[]` lots (lot_id, url, title, estimate_low/high, starting_price, current_bid, bid_count, price_is, currency, sale + house + location, sale_starts_at, lot_ends_at_estimated, images) plus `total_found`, `total_is_capped`, `last_reachable_page`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"tiffany lamp","max_results":10}},{"name":"past_results","description":"The sold-lot archive: what each lot sold for (the hammer price, before the buyer's premium), when, at which house, against which estimate and opening price, and how many bids it drew. Give `query` or at least one filter.","required_params":[],"optional_params":[],"params":[{"name":"query","type":"string","required":false,"description":"Keywords, as typed on liveauctioneers.com (e.g. 'rolex daytona', 'tiffany lamp'). Optional when a filter is given.","on_invalid":"reject","example":"tiffany lamp","aliases":["q","keyword"]},{"name":"category","type":"enum","required":false,"description":"Top-level category. Unknown values are refused (the source would silently ignore them and return everything).","on_invalid":"reject","allowed_values":[{"value":"art","label":"Art"},{"value":"collectibles","label":"Collectibles"},{"value":"fashion","label":"Fashion"},{"value":"furniture","label":"Furniture"},{"value":"home_decor","label":"Home & Décor"},{"value":"jewelry","label":"Jewelry"}]},{"name":"house_id","type":"integer","required":false,"description":"Restrict to one auction house — the `house_id` of a row or of `auction_house`.","on_invalid":"reject","example":7169,"minimum":1},{"name":"country","type":"string","required":false,"description":"Two-letter country of the auction house (US, UK, DE, CA …). `GB` is accepted for the United Kingdom.","on_invalid":"reject","example":"US"},{"name":"state","type":"string","required":false,"description":"Two-letter US state / province code of the house (NY, CA, FL, ON …).","on_invalid":"reject","example":"NY"},{"name":"sale_type","type":"enum","required":false,"description":"Kind of sale.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Live auction run in real time by the house"},{"value":"timed","label":"Online timed auction with a closing time"}]},{"name":"min_estimate","type":"number","required":false,"description":"Lower bound on the LOW pre-sale estimate, in the lot's own currency.","on_invalid":"reject","minimum":0},{"name":"max_estimate","type":"number","required":false,"description":"Upper bound on the LOW pre-sale estimate (the source filters on the low end of the range), in the lot's own currency.","on_invalid":"reject","minimum":0},{"name":"min_price","type":"number","required":false,"description":"Lowest hammer price, in the lot's own currency.","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest hammer price, in the lot's own currency.","on_invalid":"reject","minimum":0},{"name":"sold_after","type":"string","required":false,"description":"Sale date on or after (YYYY-MM-DD, UTC).","on_invalid":"reject","example":"2024-01-01"},{"name":"sold_before","type":"string","required":false,"description":"Sale date on or before (YYYY-MM-DD, UTC).","on_invalid":"reject","example":"2024-12-31"},{"name":"sort","type":"enum","required":false,"description":"Order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"LiveAuctioneers' own relevance ranking (default)"},{"value":"sale_date_desc","label":"Most recent sale first"},{"value":"price_high_first","label":"Highest hammer price first"},{"value":"price_low_first","label":"Lowest hammer price first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"Rows per page (the source caps a page at 120).","on_invalid":"reject","default":24,"minimum":1,"maximum":120,"aliases":["limit","page_size"]}],"returns":"`results[]` sold lots with `hammer_price`, `final_bid`, estimates, `starting_price`, `bid_count`, `winning_bidder_id`, sale date and house.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"tiffany lamp","sort":"price_high_first","max_results":10}},{"name":"detail","description":"One lot in full: description, condition report, dimensions, category path, maker, materials, every image, the hammer price and bid history of an ended lot, and the sale's buyer's premium schedule, bid increments and location.","required_params":["lot_id"],"optional_params":[],"params":[{"name":"lot_id","type":"integer","required":true,"description":"The `lot_id` of a search or archive row (the number in /item/<id>_…).","on_invalid":"reject","example":135377389,"minimum":1,"aliases":["lot","item_id"]}],"returns":"The lot row plus `description`, `condition_report`, `dimensions`, `weight`, `categories[]`, `makers[]`, `materials[]`, `origins[]`, `style_periods[]`, `bid_history[]` (filled after close), `sale{buyers_premium_schedule, bid_increments, location}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"lot_id":135377389}},{"name":"auction","description":"One sale (catalogue): its terms, buyer's premium schedule, bid increments, location and its lots, page by page.","required_params":["sale_id"],"optional_params":[],"params":[{"name":"sale_id","type":"integer","required":true,"description":"The `sale_id` of a lot row (the number in /catalog/<id>).","on_invalid":"reject","example":259954,"minimum":1,"aliases":["catalog_id"]},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"Lots per page.","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["limit","page_size"]}],"returns":"`sale{…}` plus `lots[]` (same row shape as search) and `total_lots`, `sold_on_page`, `passed_on_page`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"sale_id":259954,"max_results":20}},{"name":"auction_house","description":"One auction house: address, website, business contact, review scores by dimension, number of open and finished sales, and its upcoming sales with their buyer's premium.","required_params":["house_id"],"optional_params":[],"params":[{"name":"house_id","type":"integer","required":true,"description":"The `house_id` of a lot row or a suggestion (the number in /auctioneer/<id>/).","on_invalid":"reject","example":7169,"minimum":1,"aliases":["seller_id"]}],"returns":"`house{name, address, website, email, phone, member_since, rating{…}, sales_open, sales_finished}` and `upcoming_sales[]`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"house_id":7169}},{"name":"suggest","description":"Search-box suggestions: completed queries and matching auction houses (with their `house_id`).","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"At least 3 characters.","on_invalid":"reject","example":"rolex day","aliases":["q","term"]}],"returns":"`suggestions[]` {text, kind: query|house, house_id}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex day"}},{"name":"calendar","description":"The auction calendar (liveauctioneers.com/catalog/search/): every upcoming and in-progress auction (sale / catalogue) across all houses, one row per auction — title, house, start and calendar time (UTC and in your offset), type, location, lot count, status, image and catalogue link — with the site's own total and filters (day, house, country, sale type, shipping, live stream, top-rated houses). No parameter is required.","required_params":[],"optional_params":[],"params":[{"name":"date","type":"string","required":false,"description":"Only auctions the calendar lists on this day (YYYY-MM-DD). The source accepts ONE day; for a span, call once per day or page through `sort: starts_soonest`. The day boundary follows `utc_offset_minutes`.","on_invalid":"reject","example":"2026-11-20","aliases":["day"]},{"name":"utc_offset_minutes","type":"integer","required":false,"description":"Your clock's offset from UTC in minutes (New York winter -300, London 0, Berlin 60). Sets where `date`'s day starts and ends, and the `*_local` times in each row.","on_invalid":"reject","default":0,"example":-300,"minimum":-720,"maximum":840},{"name":"house_id","type":"array","required":false,"description":"One auction house id, or several (comma-separated) — any of them. The `house_id` of a lot row, a suggestion or `facets.auction_houses`.","on_invalid":"reject","example":"6177"},{"name":"country","type":"string","required":false,"description":"Country of the auction, as a two-letter code (US, GB/UK, DE, CA …) or the country name the site uses ('United States', 'Germany'). One country per call.","on_invalid":"reject","example":"US"},{"name":"sale_type","type":"enum","required":false,"description":"Kind of auction. One value per call (the source returns nothing for two).","on_invalid":"reject","allowed_values":[{"value":"live","label":"Live Auction"},{"value":"timed","label":"Timed Auction"},{"value":"timed_plus","label":"Timed+ Auction (lots close one by one)"},{"value":"catalog_only","label":"Preview Only (catalogue published, no online bidding)"}]},{"name":"shipping","type":"enum","required":false,"description":"Shipping option the house offers. One value per call.","on_invalid":"reject","allowed_values":[{"value":"free_local_pickup","label":"Free local pick-up"},{"value":"ships_with_house","label":"Ships with the auction house"},{"value":"ships_with_liveauctioneers","label":"Ships with LiveAuctioneers"}]},{"name":"live_stream","type":"boolean","required":false,"description":"true = only auctions with a live audio/video stream.","on_invalid":"reject"},{"name":"top_rated","type":"boolean","required":false,"description":"true = only auctions run by LiveAuctioneers top-rated houses.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The calendar's own default ranking (what the page shows first)"},{"value":"starts_soonest","label":"Calendar date, soonest first"}],"default":"relevance"},{"name":"include_description","type":"boolean","required":false,"description":"true = add each auction's full description text (about 3 KB per auction).","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"Auctions per page.","on_invalid":"reject","default":24,"minimum":1,"maximum":120,"aliases":["limit","page_size"]}],"returns":"`results[]` auctions (sale_id, title, url, status upcoming|in_progress, sale_type, house_id, house, starts_at, ends_at_estimated, calendar_at, calendar_at_is, *_local, lots_listed, currency, buyers_premium_pct, location{city, state, country, …}, location_text, image, cover_lots[]) plus `total_found` (the site's own count), `last_page`, `has_more` and `facets` (houses, countries, sale types, shipping with counts).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"US","max_results":10}}]},{"name":"liverpool","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Liverpool API — search Mexico's largest department store and marketplace (liverpool.com.mx) and read full products: list, sale and promotion price, Liverpool-card and other-card offers with months without interest, variants, marketplace sellers, delivery date by postal code, store stock and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/liverpool/v1","spec_available":true,"actions":[{"name":"search","description":"Search liverpool.com.mx by keyword and/or category with the store's own filters (brand, price range, minimum discount, minimum rating, sold by Liverpool, marketplace seller id, gift with purchase) and 5 sort orders. Each row: product id, title, brand, URL, image, list price and promotion price (ranges for multi-variant items), discount %, rating and review count, who sells it (Liverpool and/or marketplace sellers), sponsored flag, category ids, colours with their SKU. Plus the source's total, facets and `next_offset` for gap-free paging. Liverpool lists in-stock items only. Needs `query` or `category` (or `seller_id`).","required_params":[],"optional_params":["query","category","brand","min_price","max_price","min_discount","min_rating","sold_by_liverpool","seller_id","gift_with_purchase","sort","page_size","offset","page"],"params":[{"name":"query","type":"string","required":false,"description":"Search words in Spanish, e.g. 'televisor', 'tenis nike', 'vestido', 'perfume'. Needs query OR category OR seller_id.","on_invalid":"reject","example":"pantalla 50 pulgadas","aliases":["q","keyword","keywords","s","search"]},{"name":"category","type":"string","required":false,"description":"Liverpool category id (e.g. CAT5150041 Electrónica, CATST14457077 Pantallas), from `categories[].category_id` of any search row or `category_path` of a product. Alone it browses the category; with query it narrows the search. An id Liverpool does not know is rejected.","on_invalid":"reject","example":"CATST14457077","aliases":["category_id","categoryId"]},{"name":"brand","type":"string","required":false,"description":"Brand name as Liverpool lists it (facets.brands). Matched case-insensitively.","on_invalid":"reject","example":"SAMSUNG"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in MXN. Liverpool applies it to the promotion price (the bold price), not to the sale price.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest promotion price in MXN.","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_max"]},{"name":"min_discount","type":"integer","required":false,"description":"Only items discounted at least this many percent off the list price.","on_invalid":"reject","example":30,"minimum":1,"maximum":99},{"name":"min_rating","type":"number","required":false,"description":"Only items whose average rating is at least this (0-5). Liverpool's own '4 estrellas o más' chip uses 3.8.","on_invalid":"reject","example":4,"minimum":0,"maximum":5},{"name":"sold_by_liverpool","type":"boolean","required":false,"description":"Only items Liverpool itself sells (an item can be sold by Liverpool and marketplace sellers at once).","on_invalid":"reject","example":true,"aliases":["liverpool_only"]},{"name":"seller_id","type":"string","required":false,"description":"Only items offered by this marketplace seller (`variants[].offers[].seller_id` in product).","on_invalid":"reject","example":"5831"},{"name":"gift_with_purchase","type":"boolean","required":false,"description":"Only items with Liverpool's 'Regalo con compra' promotion.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order (Liverpool's own sort bar).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Destacados"},{"value":"newest","label":"Novedades"},{"value":"price_asc","label":"Menor precio"},{"value":"price_desc","label":"Mayor precio"},{"value":"top_rated","label":"Mejor calificados"}],"default":"relevance"},{"name":"page_size","type":"integer","required":false,"description":"Rows per call (Liverpool's default 56, at most 120). Sponsored rows, when Liverpool inserts them, count toward it.","on_invalid":"reject","default":56,"example":56,"minimum":1,"maximum":120},{"name":"offset","type":"integer","required":false,"description":"How many organic (non-sponsored) results to skip. Pass `next_offset` from the previous call to page without gaps.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":200000},{"name":"page","type":"integer","required":false,"description":"Convenience: offset = (page-1) x page_size. When Liverpool inserted sponsored rows on an earlier page this skips the organic rows they displaced; use offset/next_offset for complete paging. Ignored when offset is given.","on_invalid":"reject","example":1,"minimum":1,"maximum":5000}],"returns":"results[]{product_id, sku_id, title, brand, url, image, product_type, currency (MXN), list_price (precio de lista), list_price_max, promo_price (the bold price), promo_price_max, price_is_range, discount_pct, rating, review_count, sold_by[], sold_by_liverpool, is_marketplace, is_cross_border, sponsored, main_category, category_paths[], categories[]{category_id, name}, colors[]{sku_id, color, color_hex, images[]}} + total, offset, next_offset, has_more, sponsored_count, corrected_query, redirected_to{category_id, url} (Liverpool sends some words, e.g. brand names, to a category page; the rows are then that category), facets{categories[], brands[], sellers[], price_ranges[], discount_ranges[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"televisor","sort":"price_asc"}},{"name":"product","description":"Full Liverpool product by product_id or URL: title, brand, description, images, category path, list / sale / promotion price, discount, stock flag, rating, who sells it, colour and size options, every variant (SKU) with its own prices, stock flag, Liverpool-card and other-card payment promotions (discount %, months without interest, monthly payment, total), wallet cashback, coupons and marketplace offers (seller id and name, seller rating, ships-in days, offer prices), and the specification table. With `postal_code` it adds Liverpool's delivery-date estimate to that Mexican postal code.","required_params":[],"optional_params":["product_id","url","sku_id","postal_code"],"params":[{"name":"product_id","type":"string","required":false,"description":"Liverpool product id: the number at the end of a product URL (`/tienda/pdp/<slug>/1183307572`), returned as `product_id` in every search row. Provide product_id OR url.","on_invalid":"reject","example":"1183307572","aliases":["id","productId","item_id"]},{"name":"url","type":"string","required":false,"description":"A liverpool.com.mx product URL; alternative to product_id.","on_invalid":"reject","example":"https://www.liverpool.com.mx/tienda/pdp/pantalla-smart-tv-uhd-de-50-pulgadas-4k-uhd-50a65nv-con-ai-sports-mode/1183307572","aliases":["product_url"]},{"name":"sku_id","type":"string","required":false,"description":"Variant to estimate delivery for (`variants[].sku_id`). Default: the first in-stock variant.","on_invalid":"reject","example":"1163059041","aliases":["sku","skuId","variant_id"]},{"name":"postal_code","type":"string","required":false,"description":"Mexican postal code (5 digits). Adds `delivery`: Liverpool's estimated delivery dates to it. Dates differ by postal code (11000 Oct 21-25 vs 64000 Oct 23-27 for the same TV).","on_invalid":"reject","example":"11000","aliases":["zip","zip_code","cp","codigo_postal"]}],"returns":"item{product_id, title, brand, url, description, product_type, department, images[], category_path[]{category_id, name}, currency, list_price, list_price_max, sale_price, promo_price, promo_price_max, price_is_range, discount_pct, in_stock, rating, review_count, sold_by[], is_marketplace, has_hybrid_seller, is_presale, is_international, is_collection, extended_warranty_available, min_pieces, options{colors[], sizes[]}, variant_count, variants[]{sku_id, color, color_brand_name, color_hex, size, in_stock, list_price, sale_price, promo_price, discount_pct, liverpool_card_promotions[]{description, discount_pct, months_without_interest, monthly_payment, total_price, is_best, type}, other_card_promotions[], has_msi, wallet_cashback, wallet_cashback_amount, coupon_ids[], min_pieces, offers_count, best_offer_id, offers[]{offer_id, seller_id, seller_name, seller_sku_id, ships_in_days, seller_rating, seller_review_count, list_price, sale_price, promo_price, discount_pct, currency, is_cross_border}, image}, specs[]{group, name, value}, delivery{postal_code, sku_id, available, date_from, date_to, text, shipping_type, message, days_to_deliver, fulfillment} (only with postal_code)}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"1163569672"}},{"name":"reviews","description":"Customer reviews of a Liverpool product: rating, title, text, date, author nickname as Liverpool shows it, verified-purchase flag, helpful / not-helpful votes, photos and videos, plus the review summary (average, count, star distribution, attribute ratings such as battery or picture quality) with `include_summary`.","required_params":["product_id"],"optional_params":["sort","rating","with_text_only","page","page_size","include_summary"],"params":[{"name":"product_id","type":"string","required":true,"description":"Liverpool product id.","on_invalid":"reject","example":"1163569672","aliases":["id","productId","item_id"]},{"name":"sort","type":"enum","required":false,"description":"Review order (Liverpool's own options).","on_invalid":"reject","allowed_values":[{"value":"most_helpful","label":"Más útil"},{"value":"newest","label":"Más reciente"},{"value":"highest_rating","label":"Mayor calificación"},{"value":"lowest_rating","label":"Menor calificación"}],"default":"most_helpful"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with exactly this many stars.","on_invalid":"reject","example":5,"minimum":1,"maximum":5},{"name":"with_text_only","type":"boolean","required":false,"description":"Only reviews that have written text (Liverpool's own page shows these; star-only ratings are excluded).","on_invalid":"reject","example":true},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (at most 100).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100},{"name":"include_summary","type":"boolean","required":false,"description":"Also return the review summary: average, review count, star distribution in percent and attribute ratings.","on_invalid":"reject","example":true}],"returns":"reviews[]{review_id, rating, title, text, date, author, verified_purchase, helpful_count, not_helpful_count, featured, photos[], videos[], sku_id} + total, page, page_size, has_more, summary{average, review_count, stars_pct{}, attributes[]{name, rating}} (with include_summary)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"1163569672"}},{"name":"store_stock","description":"Units in stock per Liverpool department store in one Mexican state, for one variant (SKU): store name and id, stock count, address, city, postal code, coordinates, opening hours, store phone and whether click-and-collect / drive-thru pick-up is available. Liverpool's own 'Ver disponibilidad en tienda'.","required_params":["sku_id","state"],"optional_params":[],"params":[{"name":"sku_id","type":"string","required":true,"description":"Variant SKU: `variants[].sku_id` from product (for single-variant items it equals the product id).","on_invalid":"reject","example":"1183307572","aliases":["sku","skuId","product_id"]},{"name":"state","type":"string","required":true,"description":"Mexican state: two-digit code 01-32 (09 = CDMX / zona metropolitana, 14 = Jalisco, 19 = Nuevo León) or its name as Liverpool writes it (e.g. 'JALISCO').","on_invalid":"reject","example":"09","aliases":["state_id","estado"]}],"returns":"sku_id, state, state_name, stores[]{store_id, store_name, stock, address, address_text, city, state, postal_code, lat, lon, phone, hours, click_and_collect, drive_thru_pickup}, stores_with_stock, total_units","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"sku_id":"1163059041","state":"09"}}]},{"name":"loblaws","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Loblaws API — Canadian grocery prices per store: Loblaws, Real Canadian Superstore, No Frills, Zehrs, Fortinos, Maxi and more — price, unit price, sale and multi-buy deals, member price, PC Optimum offers, stock and full product data","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/loblaws/v1","spec_available":true,"actions":[{"name":"search","description":"Search one Loblaw-banner store's shelf: price, was-price, unit price, member price, sale / multi-buy deal, PC Optimum offer flag, stock level, brand, pack size and a sponsored flag per row, plus the brand / category / deal facets. Prices are the chosen store's (`store_id`; without it the banner's default store, flagged).","required_params":["query"],"optional_params":["banner","store_id","page","page_size","sort","brand","deal","category_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the site's search box. The site's search is semantic: a word it does not know still returns the closest products.","on_invalid":"reject","example":"milk","aliases":["q","keyword","search","term"]},{"name":"banner","type":"enum","required":false,"description":"Which Loblaw grocery banner (all share one catalogue platform; prices and assortment are the chosen store's). Default loblaw (loblaws.ca).","on_invalid":"reject","allowed_values":[{"value":"loblaw","label":"Loblaws"},{"value":"superstore","label":"Real Canadian Superstore"},{"value":"nofrills","label":"No Frills"},{"value":"zehrs","label":"Zehrs"},{"value":"fortinos","label":"Fortinos"},{"value":"maxi","label":"Maxi"},{"value":"independent","label":"Your Independent Grocer"},{"value":"rass","label":"Atlantic Superstore"},{"value":"wholesaleclub","label":"Wholesale Club"},{"value":"valumart","label":"Valu-mart"},{"value":"dominion","label":"Dominion"}],"default":"loblaw","aliases":["store_banner","chain"]},{"name":"store_id","type":"string","required":false,"description":"The store whose shelf you read (prices, deals, stock and assortment differ store by store). Get ids from the `stores` action. Without it the banner's default store is used and the answer says so (store_defaulted: true): loblaw 1032 Markham ON, superstore 1562, nofrills 3683, zehrs 0550, fortinos 0065, maxi 8049, independent 1891, rass 0311, wholesaleclub 0215, valumart 5374, dominion 0927.","on_invalid":"reject","example":"1032","aliases":["store","storeId","location_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50. Past the last page the answer is an honest empty.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Organic rows per page (the site uses 48). Sponsored rows come on top of these on page 1.","on_invalid":"reject","default":48,"minimum":1,"maximum":96,"aliases":["limit","size"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own five sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"newest","label":"Newest products first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, by the brand CODE the `facets.brands` list of any search answer gives (e.g. BDIA = Blue Diamond). One code per call.","on_invalid":"reject","example":"NEIL","aliases":["brand_code"]},{"name":"deal","type":"enum","required":false,"description":"Only products on this kind of deal at the chosen store.","on_invalid":"reject","allowed_values":[{"value":"price_reduction","label":"Price reduction (sale)"},{"value":"multi_buy","label":"Multi-buy"},{"value":"pc_points","label":"PC Optimum points offer"},{"value":"dollar_deals","label":"$1-$5 deals"},{"value":"flyer","label":"In this week's flyer"}],"aliases":["deal_type","promotion"]},{"name":"category_id","type":"string","required":false,"description":"A category id (numeric) — from a product's breadcrumbs, `facets.categories`, or the site's own /c/<id> URLs (28224 = Milk & Cream, 28003 = Dairy & Eggs, 27985 = Food).","on_invalid":"reject","example":"28224","aliases":["category","categoryId"]}],"returns":"query, banner, store_id, store_name, store_defaulted, page, page_size, total (the source's own count), returned, organic_rows, sponsored_rows, has_next, results[]{product_id (-> product.product_id), article_number, title, brand, package_size, package_sizing_text, price, price_display, price_is_estimate (true for items sold by weight: 'about $x' for one average piece), currency (CAD), original_price (the was-price this row prints), discount_amount, unit_price, unit_price_per (e.g. '100ml', '1kg'), unit_prices[]{price, per_quantity, per_unit}, sold_by ('piece' | 'weight'), sold_by_source, member_price (PC Optimum member-only price), member_price_display, deal{type ('sale' | 'multi' | 'limit' | …), text, expires, points}, multi_buy{price, min_quantity, text}, pc_optimum_offer (bool), pc_optimum_offer_text, stock_status ('in_stock' | 'low_stock' | 'out_of_stock'), max_order_quantity, environmental_fee, badge, sponsored, repeated_in_results, image, url, rank}, facets{categories[], brands[], deals[], flyers[] ({code, name, count})}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk","banner":"loblaw","store_id":"1032"}},{"name":"category","description":"Every product in one category (department, aisle or shelf) at one store, paged, with the same rows, sorts and filters as search.","required_params":["category_id"],"optional_params":["banner","store_id","page","page_size","sort","brand","deal"],"params":[{"name":"category_id","type":"string","required":true,"description":"A category id (numeric) — from a product's breadcrumbs, `facets.categories`, or the site's own /c/<id> URLs (28224 = Milk & Cream, 28003 = Dairy & Eggs, 27985 = Food).","on_invalid":"reject","example":"28224","aliases":["category","categoryId"]},{"name":"banner","type":"enum","required":false,"description":"Which Loblaw grocery banner (all share one catalogue platform; prices and assortment are the chosen store's). Default loblaw (loblaws.ca).","on_invalid":"reject","allowed_values":[{"value":"loblaw","label":"Loblaws"},{"value":"superstore","label":"Real Canadian Superstore"},{"value":"nofrills","label":"No Frills"},{"value":"zehrs","label":"Zehrs"},{"value":"fortinos","label":"Fortinos"},{"value":"maxi","label":"Maxi"},{"value":"independent","label":"Your Independent Grocer"},{"value":"rass","label":"Atlantic Superstore"},{"value":"wholesaleclub","label":"Wholesale Club"},{"value":"valumart","label":"Valu-mart"},{"value":"dominion","label":"Dominion"}],"default":"loblaw","aliases":["store_banner","chain"]},{"name":"store_id","type":"string","required":false,"description":"The store whose shelf you read (prices, deals, stock and assortment differ store by store). Get ids from the `stores` action. Without it the banner's default store is used and the answer says so (store_defaulted: true): loblaw 1032 Markham ON, superstore 1562, nofrills 3683, zehrs 0550, fortinos 0065, maxi 8049, independent 1891, rass 0311, wholesaleclub 0215, valumart 5374, dominion 0927.","on_invalid":"reject","example":"1032","aliases":["store","storeId","location_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50. Past the last page the answer is an honest empty.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Organic rows per page (the site uses 48). Sponsored rows come on top of these on page 1.","on_invalid":"reject","default":48,"minimum":1,"maximum":96,"aliases":["limit","size"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own five sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"newest","label":"Newest products first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, by the brand CODE the `facets.brands` list of any search answer gives (e.g. BDIA = Blue Diamond). One code per call.","on_invalid":"reject","example":"NEIL","aliases":["brand_code"]},{"name":"deal","type":"enum","required":false,"description":"Only products on this kind of deal at the chosen store.","on_invalid":"reject","allowed_values":[{"value":"price_reduction","label":"Price reduction (sale)"},{"value":"multi_buy","label":"Multi-buy"},{"value":"pc_points","label":"PC Optimum points offer"},{"value":"dollar_deals","label":"$1-$5 deals"},{"value":"flyer","label":"In this week's flyer"}],"aliases":["deal_type","promotion"]}],"returns":"category_id, banner, store_id, store_name, store_defaulted, page, page_size, total (the source's own count), returned, organic_rows, sponsored_rows, has_next, results[]{product_id (-> product.product_id), article_number, title, brand, package_size, package_sizing_text, price, price_display, price_is_estimate (true for items sold by weight: 'about $x' for one average piece), currency (CAD), original_price (the was-price this row prints), discount_amount, unit_price, unit_price_per (e.g. '100ml', '1kg'), unit_prices[]{price, per_quantity, per_unit}, sold_by ('piece' | 'weight'), sold_by_source, member_price (PC Optimum member-only price), member_price_display, deal{type ('sale' | 'multi' | 'limit' | …), text, expires, points}, multi_buy{price, min_quantity, text}, pc_optimum_offer (bool), pc_optimum_offer_text, stock_status ('in_stock' | 'low_stock' | 'out_of_stock'), max_order_quantity, environmental_fee, badge, sponsored, repeated_in_results, image, url, rank}, facets{categories[], brands[], deals[], flyers[] ({code, name, count})}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"28224","store_id":"1032"}},{"name":"deals","description":"Everything on one kind of deal at one store right now — sale prices, multi-buys, PC Optimum points offers, $1-$5 deals or this week's flyer — optionally inside one category.","required_params":[],"optional_params":["deal","banner","store_id","category_id","page","page_size","sort"],"params":[{"name":"deal","type":"enum","required":false,"description":"Which deal list (default price_reduction = items on sale).","on_invalid":"reject","allowed_values":[{"value":"price_reduction","label":"Price reduction (sale)"},{"value":"multi_buy","label":"Multi-buy"},{"value":"pc_points","label":"PC Optimum points offer"},{"value":"dollar_deals","label":"$1-$5 deals"},{"value":"flyer","label":"In this week's flyer"}],"default":"price_reduction","aliases":["deal_type","promotion"]},{"name":"banner","type":"enum","required":false,"description":"Which Loblaw grocery banner (all share one catalogue platform; prices and assortment are the chosen store's). Default loblaw (loblaws.ca).","on_invalid":"reject","allowed_values":[{"value":"loblaw","label":"Loblaws"},{"value":"superstore","label":"Real Canadian Superstore"},{"value":"nofrills","label":"No Frills"},{"value":"zehrs","label":"Zehrs"},{"value":"fortinos","label":"Fortinos"},{"value":"maxi","label":"Maxi"},{"value":"independent","label":"Your Independent Grocer"},{"value":"rass","label":"Atlantic Superstore"},{"value":"wholesaleclub","label":"Wholesale Club"},{"value":"valumart","label":"Valu-mart"},{"value":"dominion","label":"Dominion"}],"default":"loblaw","aliases":["store_banner","chain"]},{"name":"store_id","type":"string","required":false,"description":"The store whose shelf you read (prices, deals, stock and assortment differ store by store). Get ids from the `stores` action. Without it the banner's default store is used and the answer says so (store_defaulted: true): loblaw 1032 Markham ON, superstore 1562, nofrills 3683, zehrs 0550, fortinos 0065, maxi 8049, independent 1891, rass 0311, wholesaleclub 0215, valumart 5374, dominion 0927.","on_invalid":"reject","example":"1032","aliases":["store","storeId","location_id"]},{"name":"category_id","type":"string","required":false,"description":"A category id (numeric) — from a product's breadcrumbs, `facets.categories`, or the site's own /c/<id> URLs (28224 = Milk & Cream, 28003 = Dairy & Eggs, 27985 = Food).","on_invalid":"reject","example":"28224","aliases":["category","categoryId"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50. Past the last page the answer is an honest empty.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Organic rows per page (the site uses 48). Sponsored rows come on top of these on page 1.","on_invalid":"reject","default":48,"minimum":1,"maximum":96,"aliases":["limit","size"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own five sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"name_asc","label":"Name A-Z"},{"value":"newest","label":"Newest products first"}],"default":"relevance"}],"returns":"deal, banner, store_id, store_name, store_defaulted, page, page_size, total (the source's own count), returned, organic_rows, sponsored_rows, has_next, results[]{product_id (-> product.product_id), article_number, title, brand, package_size, package_sizing_text, price, price_display, price_is_estimate (true for items sold by weight: 'about $x' for one average piece), currency (CAD), original_price (the was-price this row prints), discount_amount, unit_price, unit_price_per (e.g. '100ml', '1kg'), unit_prices[]{price, per_quantity, per_unit}, sold_by ('piece' | 'weight'), sold_by_source, member_price (PC Optimum member-only price), member_price_display, deal{type ('sale' | 'multi' | 'limit' | …), text, expires, points}, multi_buy{price, min_quantity, text}, pc_optimum_offer (bool), pc_optimum_offer_text, stock_status ('in_stock' | 'low_stock' | 'out_of_stock'), max_order_quantity, environmental_fee, badge, sponsored, repeated_in_results, image, url, rank}, facets{categories[], brands[], deals[], flyers[] ({code, name, count})}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"deal":"multi_buy","store_id":"1032"}},{"name":"product","description":"One product at one store by the `product_id` a search row returns (or its product URL): price and price type (regular / special) with its end date, was-price, every unit price, member price, deal and multi-buy price, PC Optimum points offer, all promotions, stock, taxes, deposit, GTIN, description, ingredients, nutrition table, breadcrumb, variants and images. `date` reads the price for a coming day (the store's flyer changes on Thursdays).","required_params":["product_id"],"optional_params":["banner","store_id","date","language"],"params":[{"name":"product_id","type":"string","required":true,"description":"The `product_id` exactly as a search row returns it (e.g. 20896887_EA, 20175355001_KG) or a product URL ending /p/<id>.","on_invalid":"reject","example":"20896887_EA","aliases":["id","code","url","product_url"]},{"name":"banner","type":"enum","required":false,"description":"Which Loblaw grocery banner (all share one catalogue platform; prices and assortment are the chosen store's). Default loblaw (loblaws.ca).","on_invalid":"reject","allowed_values":[{"value":"loblaw","label":"Loblaws"},{"value":"superstore","label":"Real Canadian Superstore"},{"value":"nofrills","label":"No Frills"},{"value":"zehrs","label":"Zehrs"},{"value":"fortinos","label":"Fortinos"},{"value":"maxi","label":"Maxi"},{"value":"independent","label":"Your Independent Grocer"},{"value":"rass","label":"Atlantic Superstore"},{"value":"wholesaleclub","label":"Wholesale Club"},{"value":"valumart","label":"Valu-mart"},{"value":"dominion","label":"Dominion"}],"default":"loblaw","aliases":["store_banner","chain"]},{"name":"store_id","type":"string","required":false,"description":"The store whose shelf you read (prices, deals, stock and assortment differ store by store). Get ids from the `stores` action. Without it the banner's default store is used and the answer says so (store_defaulted: true): loblaw 1032 Markham ON, superstore 1562, nofrills 3683, zehrs 0550, fortinos 0065, maxi 8049, independent 1891, rass 0311, wholesaleclub 0215, valumart 5374, dominion 0927.","on_invalid":"reject","example":"1032","aliases":["store","storeId","location_id"]},{"name":"date","type":"string","required":false,"description":"The day whose price you want, YYYY-MM-DD, from today (Toronto) to 6 days ahead. Default today in Toronto.","on_invalid":"reject","example":"2026-10-15"},{"name":"language","type":"enum","required":false,"description":"Language of the product texts.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"}],"default":"en","aliases":["lang"]}],"returns":"banner, store_id, store_name, store_defaulted, price_date, product{product_id, article_number, gtin, title, brand, description, package_size, price, price_type ('regular' | 'special'), price_expires, currency, original_price, discount_amount, unit_prices[]{price, per_quantity, per_unit}, sold_by, sold_by_source, average_weight, member_price, member_price_expires, deal{type, text, expires}, deal_price, multi_buy{price, min_quantity, text}, pc_optimum_points, pc_optimum_offer_text, pc_optimum_offer_expires, promotions[]{type, title, text, reward, expires, promo_code}, member_promotions[], stock_status, shoppable, max_order_quantity, taxes{gst, hst, pst}, deposit, environmental_fee, badges[], breadcrumbs[]{category_id, name}, ingredients, nutrition{serving_size, household_serving, nutrients[]{name, amount, daily_value, sub[]}, micronutrients[], disclaimer}, variants[]{product_id, title}, images[], url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"20896887_EA","store_id":"1032"}},{"name":"stores","description":"The stores of one banner with their store_id (for every other action): name, address, postal code, coordinates, phone, today's hours and open-now, minimum online order, departments. Narrow by `postal_code` prefix, `city`, or sort by distance from `lat`+`lon`.","required_params":[],"optional_params":["banner","postal_code","city","lat","lon","sells_online","limit"],"params":[{"name":"banner","type":"enum","required":false,"description":"Which Loblaw grocery banner (all share one catalogue platform; prices and assortment are the chosen store's). Default loblaw (loblaws.ca).","on_invalid":"reject","allowed_values":[{"value":"loblaw","label":"Loblaws"},{"value":"superstore","label":"Real Canadian Superstore"},{"value":"nofrills","label":"No Frills"},{"value":"zehrs","label":"Zehrs"},{"value":"fortinos","label":"Fortinos"},{"value":"maxi","label":"Maxi"},{"value":"independent","label":"Your Independent Grocer"},{"value":"rass","label":"Atlantic Superstore"},{"value":"wholesaleclub","label":"Wholesale Club"},{"value":"valumart","label":"Valu-mart"},{"value":"dominion","label":"Dominion"}],"default":"loblaw","aliases":["store_banner","chain"]},{"name":"postal_code","type":"string","required":false,"description":"Canadian postal code or its first 3 characters (FSA): stores whose postal code starts with it.","on_invalid":"reject","example":"M5V","aliases":["postal","postcode","zip"]},{"name":"city","type":"string","required":false,"description":"Stores in this city (exact name, case-insensitive).","on_invalid":"reject","example":"Toronto","aliases":["town"]},{"name":"lat","type":"number","required":false,"description":"Latitude; with `lon`, stores are sorted by distance and carry distance_km.","on_invalid":"reject","example":"43.6532"},{"name":"lon","type":"number","required":false,"description":"Longitude, with `lat`.","on_invalid":"reject","example":"-79.3832","aliases":["lng","long"]},{"name":"sells_online","type":"boolean","required":false,"description":"Only stores that sell online on the site (default true; the others answer no prices).","on_invalid":"reject","default":true},{"name":"limit","type":"integer","required":false,"description":"At most this many stores.","on_invalid":"reject","default":50,"minimum":1,"maximum":500}],"returns":"banner, total (stores of the banner), matched, returned, stores[]{store_id, name, banner, banner_name, location_type, pickup_type, sells_online, address, city, province, postal_code, lat, lon, distance_km, phone, store_manager, time_zone, open_now, hours_today, hours_date, min_order_value, departments[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"banner":"loblaw","city":"Toronto"}}]},{"name":"loopnet","category":{"id":"real-estate","title":"Real Estate"},"title":"LoopNet API — live US commercial real estate scraper: search offices, retail, industrial, land, multifamily and shopping centres for sale, for lease or at auction by market, submarket, county, ZIP or address, filtered by price, rent, building and lot size, year built, cap rate and unit count, plus full listing detail with the asking figure, property facts, available spaces, coordinates, photos and the broker and brokerage — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/loopnet/v1","spec_available":true,"actions":[{"name":"search","description":"Commercial listings in a market. Give a `location` ('Austin, TX', '78704', 'Downtown Austin') or a `location_id` from the `location_search` action, and pick a `transaction` (for_lease, for_sale or auction). Every filter offered here was proven to narrow the result set against an unfiltered control; the ones LoopNet accepts and ignores are deliberately not offered. `total_results` is the source's own count and saturates at 750 — `total_is_capped` tells you when it did.","required_params":[],"optional_params":["location","location_id","transaction","property_type","page","limit","sort","min_price","max_price","min_rent","max_rent","min_building_size","max_building_size","size_unit","min_space_available","max_space_available","min_lot_size","max_lot_size","lot_size_unit","min_year_built","max_year_built","min_cap_rate","max_cap_rate","min_units","max_units","keywords","sublease_only","net_leased_only"],"params":[{"name":"location","type":"string","required":false,"description":"Where to search: a US market ('Austin, TX'), a LoopNet submarket ('CBD - Austin, TX'), a county ('Travis County, TX'), a state ('Texas'), a ZIP code ('78704'), a street address, or 'usa' for a nationwide search. Resolved through LoopNet's own geography service, which recognises ITS submarket names rather than every local nickname — run the `location_search` action first to see what it matches, and pass the `location_id` of the one you want. An address is widened by LoopNet to the area around it, and the response says so.","on_invalid":"reject","example":"Austin, TX","aliases":["query","q","market","city","address"]},{"name":"location_id","type":"string","required":false,"description":"A geography id from the `location_search` action, used ALONGSIDE `location` to pick which of the matches to search. LoopNet's geography service is searched by text, so the text is still required; the id only decides which match wins (e.g. location='Austin, TX' with location_id='251' searches the CBD submarket).","on_invalid":"reject","example":"6062","aliases":["geography_id"]},{"name":"transaction","type":"enum","required":false,"description":"Which side of the market to search. The filters available differ between them — rent, space size and lease type only exist for lease; price, cap rate, unit count, lot size and year built only exist for sale.","on_invalid":"reject","allowed_values":[{"value":"for_lease","label":"Space offered for lease"},{"value":"for_sale","label":"Property offered for sale"},{"value":"auction","label":"Property offered at auction"}],"default":"for_lease"},{"name":"property_type","type":"array","required":false,"description":"Property types to keep, from LoopNet's own category tree. For lease: office, industrial, retail, flex, medical, restaurant, lab, land, coworking. For sale: office, industrial, retail, shopping-center, multifamily, specialty, health-care, hospitality, sports-entertainment, land, residential-income, restaurant, lab. A type that does not exist on the chosen side is rejected rather than ignored.","on_invalid":"reject","example":["office"]},{"name":"page","type":"integer","required":false,"description":"Which page of 25 listings to return. The source serves 25 per page and will page through at most 30.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":30},{"name":"limit","type":"integer","required":false,"description":"How many listings to return, up to 100. The source serves 25 per page and each page is a large document, so a bigger limit costs one upstream page per 25. Use `page` to walk further — the source itself stops at page 30. `all_listing_ids` already returns every id in the result set (up to 750) in the FIRST call, so paging is only needed for the rows.","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order, applied BY THE SOURCE. Only the orders whose effect could be verified against the published figures are offered here.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"LoopNet's own relevance order"},{"value":"price_low_to_high","label":"Asking price or rent, lowest first"},{"value":"price_high_to_low","label":"Asking price or rent, highest first"}],"default":"default"},{"name":"min_price","type":"integer","required":false,"description":"Lowest asking SALE price in USD. For-sale searches only — LoopNet has no price filter on the lease side.","on_invalid":"reject","example":500000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Highest asking SALE price in USD. For-sale searches only.","on_invalid":"reject","example":5000000,"minimum":0},{"name":"min_rent","type":"number","required":false,"description":"Lowest asking rent, in dollars per square foot per year. FOR-LEASE searches only. Listings that publish no rent (very common — 14 of 25 rows in the measured Austin page) cannot match a rent filter.","on_invalid":"reject","example":20,"minimum":0},{"name":"max_rent","type":"number","required":false,"description":"Highest asking rent in dollars per square foot per year. For-lease searches only.","on_invalid":"reject","example":40,"minimum":0},{"name":"min_building_size","type":"integer","required":false,"description":"Smallest building size, in `size_unit`.","on_invalid":"reject","example":10000,"minimum":0},{"name":"max_building_size","type":"integer","required":false,"description":"Largest building size, in `size_unit`.","on_invalid":"reject","example":100000,"minimum":0},{"name":"size_unit","type":"enum","required":false,"description":"Unit for the building and space-size filters.","on_invalid":"ignore","allowed_values":[{"value":"sf","label":"Square feet"},{"value":"sm","label":"Square metres"}],"default":"sf"},{"name":"min_space_available","type":"integer","required":false,"description":"Smallest available space, in `size_unit`. FOR-LEASE searches only — on the sale side LoopNet accepts this and does not apply it, so it is not sent.","on_invalid":"reject","example":5000,"minimum":0},{"name":"max_space_available","type":"integer","required":false,"description":"Largest available space, in `size_unit`. For-lease only.","on_invalid":"reject","example":50000,"minimum":0},{"name":"min_lot_size","type":"number","required":false,"description":"Smallest lot size, in `lot_size_unit`. FOR-SALE searches only.","on_invalid":"reject","example":1,"minimum":0},{"name":"max_lot_size","type":"number","required":false,"description":"Largest lot size, in `lot_size_unit`. For-sale only.","on_invalid":"reject","example":20,"minimum":0},{"name":"lot_size_unit","type":"enum","required":false,"description":"Unit for the lot-size filter.","on_invalid":"ignore","allowed_values":[{"value":"ac","label":"Acres"},{"value":"ha","label":"Hectares"},{"value":"sf","label":"Square feet"}],"default":"ac"},{"name":"min_year_built","type":"integer","required":false,"description":"Earliest year built. FOR-SALE searches only — the lease side accepts the value and ignores it.","on_invalid":"reject","example":2000,"minimum":1700,"maximum":2100},{"name":"max_year_built","type":"integer","required":false,"description":"Latest year built. For-sale only.","on_invalid":"reject","minimum":1700,"maximum":2100},{"name":"min_cap_rate","type":"number","required":false,"description":"Lowest capitalisation rate, in percent. For-sale only.","on_invalid":"reject","example":6,"minimum":0,"maximum":100},{"name":"max_cap_rate","type":"number","required":false,"description":"Highest capitalisation rate, in percent. For-sale only.","on_invalid":"reject","minimum":0,"maximum":100},{"name":"min_units","type":"integer","required":false,"description":"Fewest units (multifamily and similar). For-sale only.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_units","type":"integer","required":false,"description":"Most units. For-sale only.","on_invalid":"reject","minimum":0},{"name":"keywords","type":"string","required":false,"description":"Free-text keyword the listing must match. Proven to narrow (750 → 227 for 'warehouse'); a keyword with no matches returns an empty result set, not an error.","on_invalid":"reject","example":"warehouse"},{"name":"sublease_only","type":"boolean","required":false,"description":"Keep only sublease listings. For-lease searches only.","on_invalid":"ignore","default":false},{"name":"net_leased_only","type":"boolean","required":false,"description":"Keep only net-leased investments. For-sale only.","on_invalid":"ignore","default":false}],"returns":"results[]{listing_id, property_id, url, name, address, city, state, postal_code, country, property_type, space_use, transaction, year_built, size{display,min,max,unit}, price{display,shape,value_min,value_max,currency,rate_term}, description, broker, brokerage, images[], exposure_level}, total_results, total_is_capped, all_listing_ids[], page, limit, location{…}, filters_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX","transaction":"for_lease","property_type":["office"],"limit":25}},{"name":"property_detail","description":"One listing by id or URL: the asking figure with its SHAPE, property type and subtype, building and lot size, year built and renovated, units, cap rate, NOI where published, zoning, address and coordinates, photos, the marketing description, every available space with its own size, term and rate, and the brokers with their firms. `detail_level` says whether the deep record came back ('full') or only the listing-card record ('placard') — see the API notes.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The LoopNet listing id (the number at the end of the listing URL) or the full listing URL.","on_invalid":"reject","example":"21695896","aliases":["id","property_id","url"]}],"returns":"property{listing_id, url, name, description, transaction, price{…}, property_type, property_subtype, building_class, building_size{…}, space_available{…}, lot_size{…}, floors, year_built, year_renovated, units, cap_rate, noi, price_per_sf, zoning, parking, amenities[], address{street,city,state,postal_code,country}, latitude, longitude, images[], brokers[]{name,brokerage,city,state,profile_url}, spaces[]{space,size,term,space_use,available,rate}, last_updated, detail_level}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"21695896"}},{"name":"listings","description":"Up to 30 listing ids in ONE upstream call. Each row carries the address, city, state, ZIP, property type, the asking figure with its shape and the lead photo — the compact record, not the deep one. Use it to price or re-check a saved set of ids; use `property_detail` when you need the facts table, the spaces or the coordinates.","required_params":["listing_ids"],"optional_params":[],"params":[{"name":"listing_ids","type":"array","required":true,"description":"Listing ids or listing URLs, up to 30. Ids the source does not return are listed in `missing` rather than silently dropped.","on_invalid":"reject","example":["21695896","36561247"],"aliases":["ids","listing_id"]}],"returns":"results[]{listing_id, property_id, url, address, city, state, postal_code, country, property_type, transaction, price{…}, image, exposure_level}, requested, returned, missing[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_ids":["21695896","4036830"]}},{"name":"location_search","description":"Turn a typed place into the geography LoopNet's search takes: the id, the type (state, city, postal_code, submarket, county, country — or property/address/building for a single site), the coordinates and the bounding box. `searchable` says whether a search can be scoped to that row: only the area types carry a bounding box. Pass a row's `location_id` back to `search` alongside the same `location` text to pick that match instead of the top one.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"What was typed: a city, a county, a ZIP code, a neighbourhood or a street address.","on_invalid":"reject","example":"austin","aliases":["q","term","location"]},{"name":"limit","type":"integer","required":false,"description":"How many matches to return.","on_invalid":"reject","default":12,"minimum":1,"maximum":25}],"returns":"locations[]{location_id, display, display_long, type, city, state, county, country, postal_code, latitude, longitude, bounding_box{…}, searchable}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"austin"}}]},{"name":"lucky-supermarkets","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Lucky Supermarkets API scraper — shop.luckysupermarkets.com product search, categories, Weekly Ad, Member Prices and Sales, product detail and store locator with each Lucky store's price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/lucky-supermarkets/v1","spec_available":true,"actions":[{"name":"search","description":"Search shop.luckysupermarkets.com at one Lucky store: regular price (price list), was-price, member/card price and promotions apart, unit price, stock level, brand and size, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in the shop.luckysupermarkets.com search box ('milk').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"shop.luckysupermarkets.com pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Lucky store prices the results (Lucky prices and range differ by store). Default 94577 — then `store_defaulted` is true.","on_invalid":"reject","example":"94577","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Lucky store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34711"}],"returns":"products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"94577"}},{"name":"category","description":"Every product of a shop.luckysupermarkets.com collection (a category, a brand or a diet collection from `categories`) priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (n-milk-11988 …) or a shop.luckysupermarkets.com /store/lucky-supermarkets/collections/<slug> URL.","on_invalid":"reject","example":"n-milk-11988","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Lucky store prices the results (Lucky prices and range differ by store). Default 94577 — then `store_defaulted` is true.","on_invalid":"reject","example":"94577","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Lucky store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34711"}],"returns":"collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-11988","postal_code":"94577"}},{"name":"product/detail","description":"One Lucky product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price, promotions and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or a shop.luckysupermarkets.com /store/lucky-supermarkets/products/ URL.","on_invalid":"reject","example":"20227964","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Lucky store prices the results (Lucky prices and range differ by store). Default 94577 — then `store_defaulted` is true.","on_invalid":"reject","example":"94577","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Lucky store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34711"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"20227964","postal_code":"94577"}},{"name":"categories","description":"The shop.luckysupermarkets.com category tree (departments and their collections) or one collection's sub-collections; slugs feed `category`.","required_params":[],"optional_params":["slug","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Optional collection slug: returns its sub-collections. Without it: the whole category tree.","on_invalid":"reject","example":"n-milk-11988","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Lucky store prices the results (Lucky prices and range differ by store). Default 94577 — then `store_defaulted` is true.","on_invalid":"reject","example":"94577","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Lucky store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34711"}],"returns":"collections[]{slug,name,url,children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-11988"}},{"name":"stores","description":"Lucky stores around a US ZIP code, nearest first, with address, coordinates, distance and which services shop.luckysupermarkets.com offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find Lucky stores around (nearest first).","on_invalid":"reject","example":"94577","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"postal_code":"94577"}},{"name":"offers","description":"Lucky's current deal lists at one store: Weekly Ad, Member Prices, Sales.","required_params":[],"optional_params":["type","page","per_page","cursor","postal_code","store_id"],"params":[{"name":"type","type":"enum","required":false,"description":"Which deal list: weekly_ad (Weekly Ad), member_prices (Member Prices), sales (Sales).","on_invalid":"reject","allowed_values":[{"value":"weekly_ad","label":"Weekly Ad"},{"value":"member_prices","label":"Member Prices"},{"value":"sales","label":"Sales"}],"default":"weekly_ad"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Lucky store prices the results (Lucky prices and range differ by store). Default 94577 — then `store_defaulted` is true.","on_invalid":"reject","example":"94577","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Lucky store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34711"}],"returns":"type, collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"94577"}},{"name":"promotions","description":"Which Lucky deal lists are live now at one store, each with its name and product count.","required_params":[],"optional_params":["postal_code","store_id"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Lucky store prices the results (Lucky prices and range differ by store). Default 94577 — then `store_defaulted` is true.","on_invalid":"reject","example":"94577","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Lucky store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34711"}],"returns":"promotions[]{type,name,slug,url,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"94577"}}]},{"name":"luluhypermarket","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"LuLu Hypermarket API — Gulf supermarket prices from luluhypermarket.com in UAE, Saudi Arabia, Qatar, Kuwait, Bahrain and Oman: price paid and regular price, discount, promotion badges, stock, pack sizes, price per kg/l, barcodes and specifications","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/luluhypermarket/v1","spec_available":true,"actions":[{"name":"search","description":"Search LuLu Hypermarket's online shop in one Gulf country: price paid and regular price in the local currency, discount, promotion badges, stock count, pack size and price per kg/l/pc, other pack sizes with their prices, brand, barcodes, category path. `query` required; filters brand, product_type, category_id, min_price/max_price, min_discount, organic; sort; page.","required_params":["query"],"optional_params":["country","language","category_id","brand","product_type","min_price","max_price","min_discount","organic","sort","page","page_size"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed on the shop (English or Arabic). Several words BROADEN the result (any word may match), they do not narrow it.","on_invalid":"reject","example":"milk","aliases":["q","keyword","search","term"]},{"name":"country","type":"enum","required":false,"description":"Which LuLu online shop: ae (UAE, AED), sa (Saudi Arabia, SAR), qa (Qatar, QAR), kw (Kuwait, KWD), bh (Bahrain, BHD), om (Oman, OMR). Prices, stock, range, badges and order limits all follow the country (Almarai milk 2 L: 12.50 AED, 12.85 SAR, 11.00 QAR out of stock, 1.035 KWD, 1.250 BHD, 1.330 OMR on 2026-10-15). Default ae; the response always names it.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates"},{"value":"sa","label":"Saudi Arabia"},{"value":"qa","label":"Qatar"},{"value":"kw","label":"Kuwait"},{"value":"bh","label":"Bahrain"},{"value":"om","label":"Oman"}],"default":"ae","aliases":["market","region","store_country"]},{"name":"language","type":"enum","required":false,"description":"en (default) or ar: names, descriptions and badges in Arabic where the shop has them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","aliases":["lang","locale"]},{"name":"category_id","type":"string","required":false,"description":"Narrow to one category id (a facet `categories[].category_id` or a `categories` node's category_id).","on_invalid":"reject","example":"5017","aliases":["category"]},{"name":"brand","type":"string","required":false,"description":"One brand as the shop prints it (a row's `brand`, e.g. Almarai, Al Rawabi). Matched against the listing's own brand list; an unknown brand returns 0 with the brands present.","on_invalid":"reject","example":"Almarai"},{"name":"product_type","type":"string","required":false,"description":"LuLu's product type as a row's `product_type` prints it (e.g. Full Fat, Laban, UHT Milk).","on_invalid":"reject","example":"Laban","aliases":["type"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in the country's currency. The shop filters product GROUPS: a row is kept when any of its pack sizes is in range, so a row's own `price` can be outside it (its `pack_options` show the matching pack).","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in the country's currency (same group rule as min_price).","on_invalid":"reject","example":20,"minimum":0,"aliases":["price_max"]},{"name":"min_discount","type":"number","required":false,"description":"Only items cut by at least this percent (1-100). Same group rule as the price filter: a row is kept when any of its pack sizes has the cut (17/20 rows had it on their own price, 3/20 on a pack option; 2026-10-15, 'milk' AE).","on_invalid":"reject","example":10,"minimum":1,"maximum":100,"aliases":["discount_min"]},{"name":"organic","type":"boolean","required":false,"description":"true: only items the shop labels organic.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · newest · discount (biggest % first). The shop can pin a promoted item on top of a sorted page; such rows carry `pinned: true`.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"newest","label":"newest"},{"value":"discount","label":"discount"}],"default":"relevance","aliases":["sort_by","sorter"]},{"name":"page","type":"integer","required":false,"description":"Result page. The shop serves the first 10,000 products of any listing (page 500 at 20 per page); `last_reachable_page` says where a listing stops.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-20 (default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":20,"aliases":["limit","per_page"]}],"returns":"country, country_name, currency, currency_decimals, language, query, category{category_id, name, path}, filters, sort, total, total_capped, page, page_size, last_page, last_reachable_page, has_more, returned, facets{categories[], brands[], product_types[], pack_sizes[], price_range}, results[]{rank, product_id (-> product.product_id), sku, base_code, name, brand, barcodes[], price (what a shopper pays), regular_price (before the cut; null when no cut), discount_amount, discount_percent, on_offer, currency, currency_decimals, tax_rate_percent, badges[], pack_size, unit_price (per kg / l / pc, computed from pack_size), unit_price_unit, pack_quantity, pack_options[]{label, pack_quantity, product_id, sku, name, price, regular_price, in_stock, url}, in_stock, stock, max_order_quantity, delivery_type, product_type, category_path[], dietary[], hidden_in_country, pinned, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk","country":"ae"}},{"name":"category","description":"List one LuLu category (its path from `categories`, e.g. grocery-food-cupboard-beverage, or a numeric category id) with the same row fields, filters and sorts as `search`.","required_params":["category"],"optional_params":["country","language","brand","product_type","min_price","max_price","min_discount","organic","sort","page","page_size"],"params":[{"name":"category","type":"string","required":true,"description":"A category path as `categories` returns it (grocery, grocery-food-cupboard-beverage), a shop category URL, or a numeric category id (5017).","on_invalid":"reject","example":"grocery-food-cupboard-beverage","aliases":["category_path","category_id","slug"]},{"name":"country","type":"enum","required":false,"description":"Which LuLu online shop: ae (UAE, AED), sa (Saudi Arabia, SAR), qa (Qatar, QAR), kw (Kuwait, KWD), bh (Bahrain, BHD), om (Oman, OMR). Prices, stock, range, badges and order limits all follow the country (Almarai milk 2 L: 12.50 AED, 12.85 SAR, 11.00 QAR out of stock, 1.035 KWD, 1.250 BHD, 1.330 OMR on 2026-10-15). Default ae; the response always names it.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates"},{"value":"sa","label":"Saudi Arabia"},{"value":"qa","label":"Qatar"},{"value":"kw","label":"Kuwait"},{"value":"bh","label":"Bahrain"},{"value":"om","label":"Oman"}],"default":"ae","aliases":["market","region","store_country"]},{"name":"language","type":"enum","required":false,"description":"en (default) or ar: names, descriptions and badges in Arabic where the shop has them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","aliases":["lang","locale"]},{"name":"brand","type":"string","required":false,"description":"One brand as the shop prints it (a row's `brand`, e.g. Almarai, Al Rawabi). Matched against the listing's own brand list; an unknown brand returns 0 with the brands present.","on_invalid":"reject","example":"Almarai"},{"name":"product_type","type":"string","required":false,"description":"LuLu's product type as a row's `product_type` prints it (e.g. Full Fat, Laban, UHT Milk).","on_invalid":"reject","example":"Laban","aliases":["type"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in the country's currency. The shop filters product GROUPS: a row is kept when any of its pack sizes is in range, so a row's own `price` can be outside it (its `pack_options` show the matching pack).","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in the country's currency (same group rule as min_price).","on_invalid":"reject","example":20,"minimum":0,"aliases":["price_max"]},{"name":"min_discount","type":"number","required":false,"description":"Only items cut by at least this percent (1-100). Same group rule as the price filter: a row is kept when any of its pack sizes has the cut (17/20 rows had it on their own price, 3/20 on a pack option; 2026-10-15, 'milk' AE).","on_invalid":"reject","example":10,"minimum":1,"maximum":100,"aliases":["discount_min"]},{"name":"organic","type":"boolean","required":false,"description":"true: only items the shop labels organic.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · newest · discount (biggest % first). The shop can pin a promoted item on top of a sorted page; such rows carry `pinned: true`.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"newest","label":"newest"},{"value":"discount","label":"discount"}],"default":"relevance","aliases":["sort_by","sorter"]},{"name":"page","type":"integer","required":false,"description":"Result page. The shop serves the first 10,000 products of any listing (page 500 at 20 per page); `last_reachable_page` says where a listing stops.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-20 (default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":20,"aliases":["limit","per_page"]}],"returns":"country, country_name, currency, currency_decimals, language, query, category{category_id, name, path}, filters, sort, total, total_capped, page, page_size, last_page, last_reachable_page, has_more, returned, facets{categories[], brands[], product_types[], pack_sizes[], price_range}, results[]{rank, product_id (-> product.product_id), sku, base_code, name, brand, barcodes[], price (what a shopper pays), regular_price (before the cut; null when no cut), discount_amount, discount_percent, on_offer, currency, currency_decimals, tax_rate_percent, badges[], pack_size, unit_price (per kg / l / pc, computed from pack_size), unit_price_unit, pack_quantity, pack_options[]{label, pack_quantity, product_id, sku, name, price, regular_price, in_stock, url}, in_stock, stock, max_order_quantity, delivery_type, product_type, category_path[], dietary[], hidden_in_country, pinned, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"grocery-food-cupboard-beverage"}},{"name":"product","description":"One LuLu product by the `product_id` a search row returns (or its shop URL), in one country: prices, discount, badges, stock, every pack size with its own price and stock flag, barcodes, images, description, highlights, ingredients and the full specification sheet.","required_params":["product_id"],"optional_params":["country","language"],"params":[{"name":"product_id","type":"string","required":true,"description":"The `product_id` a search row returns (e.g. 276), or the product's shop URL (https://gcc.luluhypermarket.com/en-ae/<name>/p/<sku>/).","on_invalid":"reject","example":"276","aliases":["id","url","product_url"]},{"name":"country","type":"enum","required":false,"description":"Which LuLu online shop: ae (UAE, AED), sa (Saudi Arabia, SAR), qa (Qatar, QAR), kw (Kuwait, KWD), bh (Bahrain, BHD), om (Oman, OMR). Prices, stock, range, badges and order limits all follow the country (Almarai milk 2 L: 12.50 AED, 12.85 SAR, 11.00 QAR out of stock, 1.035 KWD, 1.250 BHD, 1.330 OMR on 2026-10-15). Default ae; the response always names it.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates"},{"value":"sa","label":"Saudi Arabia"},{"value":"qa","label":"Qatar"},{"value":"kw","label":"Kuwait"},{"value":"bh","label":"Bahrain"},{"value":"om","label":"Oman"}],"default":"ae","aliases":["market","region","store_country"]},{"name":"language","type":"enum","required":false,"description":"en (default) or ar: names, descriptions and badges in Arabic where the shop has them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","aliases":["lang","locale"]}],"returns":"product{product_id, sku, base_code, name, brand, barcodes[], price, regular_price, discount_amount, discount_percent, on_offer, currency, currency_decimals, tax_rate_percent, badges[], pack_size, unit_price, unit_price_unit, pack_quantity, pack_options[], in_stock, stock, max_order_quantity, delivery_type, product_type, category_path[], dietary[], hidden_in_country, image, images[], url, description, short_description, highlights[], ingredients, specifications[]{key, label, value}, substitute_skus[], seller_offers}, country, country_name, currency, language","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"276","country":"ae"}},{"name":"categories","description":"LuLu's category tree from the shop menu (318 nodes on 2026-10-15): name, path, id where the menu gives one, children. Paths and ids feed `category`.","required_params":[],"optional_params":["category","country","language"],"params":[{"name":"category","type":"string","required":false,"description":"Return only this node's subtree (its path, e.g. grocery); omit for the whole tree.","on_invalid":"reject","example":"grocery","aliases":["category_path","parent"]},{"name":"country","type":"enum","required":false,"description":"Which LuLu online shop: ae (UAE, AED), sa (Saudi Arabia, SAR), qa (Qatar, QAR), kw (Kuwait, KWD), bh (Bahrain, BHD), om (Oman, OMR). Prices, stock, range, badges and order limits all follow the country (Almarai milk 2 L: 12.50 AED, 12.85 SAR, 11.00 QAR out of stock, 1.035 KWD, 1.250 BHD, 1.330 OMR on 2026-10-15). Default ae; the response always names it.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates"},{"value":"sa","label":"Saudi Arabia"},{"value":"qa","label":"Qatar"},{"value":"kw","label":"Kuwait"},{"value":"bh","label":"Bahrain"},{"value":"om","label":"Oman"}],"default":"ae","aliases":["market","region","store_country"]},{"name":"language","type":"enum","required":false,"description":"en (default) or ar: names, descriptions and badges in Arabic where the shop has them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","aliases":["lang","locale"]}],"returns":"parent, country, total_categories, categories[]{name, category, category_id, url, depth, parent, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"ae"}}]},{"name":"macys","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Macy's US product, price, promotion and UPC-level stock data","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/macys/v1","spec_available":true,"actions":[{"name":"search","description":"Search the US catalogue by keyword, or list a whole category by its id. Returns the retailer's own result total, the product ids on the page, and the facets it offers for that result. Pages are real: page 1, 2 and 3 of a result are different products, and one page past the end the source stops publishing a grid, which is reported as past_last_page so a paging loop has a stop condition. Search answers with the retailer's own result count and the product ids on the page; turn those ids into full records with products/batch (up to 50 per call) or product/detail.","required_params":[],"optional_params":["query","category_id","page"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search the US catalogue for. Exactly one of query or category_id is required. They cannot be combined: the source keeps the keyword and throws the category away, so the call is refused instead of quietly answering a different question.","on_invalid":"reject","example":"nike air max","aliases":["keyword","q"]},{"name":"category_id","type":"string","required":false,"description":"A numeric category id from the categories action, to list that whole category instead of searching a keyword. Exactly one of query or category_id is required. Narrowing is real and measured: 18,472 rows for women's dresses, 4,616 for mini dresses, 307 for corset dresses.","on_invalid":"reject","example":"339459","aliases":["category"]},{"name":"page","type":"integer","required":false,"description":"One-based result page. The answer carries total, page_size and last_page so a paging loop has a real stop condition.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"total (the retailer's own count), product_ids[], products[] with id and url, page, page_size (read from the answer, 60 on every full page measured), last_page, page_clamped, past_last_page, has_more, and facets[] with each value's own count. Product names, prices and stock are not published on this surface; resolve the ids with products/batch or product/detail.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"nike air max"}},{"name":"product/detail","description":"Full published record for one Macy's product: brand, description, the whole price band with percent off and sale end date, promotions with their legal text, the category path, review summary, and one row per orderable variant with its 12-digit UPC, stock, shipping fees and delivery days.","required_params":["id"],"optional_params":["fields"],"params":[{"name":"id","type":"string","required":true,"description":"Macy's numeric product id, or a macys.com product URL carrying ?ID=. Ids come from products/list, from product/detail URLs, or from your own records.","on_invalid":"reject","example":"20573337","aliases":["product_id","url"]},{"name":"fields","type":"enum","required":false,"description":"full returns the review summary and the loyalty-card offer as well. core asks the retailer for its compact form: identical prices, UPCs, per-variant stock, shipping fees, delivery days, promotions, images and category path, measured 11-73 % smaller.","on_invalid":"reject","allowed_values":[{"value":"full","label":"Everything the product endpoint publishes"},{"value":"core","label":"Same data without the review summary or the loyalty-card offer"}],"default":"full","example":"full"}],"returns":"One product object. price carries regular/sale/low/high in USD plus price_is_range; variants[] carries upc, color, size, available, ship_days, ship_fees_usd and delivery_days; unavailable_variants[] lists colours the retailer publishes as sold out; categories[] is the category path; reviews_summary carries rating, review_count and the rating distribution. Ids are returned as decimal strings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"20573337"}},{"name":"products/batch","description":"Price, promotion, stock and UPC data for up to 50 products in ONE upstream call. The multi-id form of the source does not publish the category path, the review summary or the loyalty-card offer; those three fields come back null and are named in omitted_fields. Ids with no published product are returned in missing_ids rather than silently dropped.","required_params":["ids"],"optional_params":[],"params":[{"name":"ids","type":"array","required":true,"description":"Two to 50 Macy's product ids. A comma-separated string works too. Duplicates are collapsed and ids with no published product are returned in missing_ids.","on_invalid":"reject","example":["16851227","18507592","20573337"],"aliases":["product_ids"]}],"returns":"products[] in the same shape as product/detail minus the three omitted fields, plus requested_count, returned_count, missing_ids and omitted_fields.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"ids":["16851227","18507592","20573337"]}},{"name":"product/reviews","description":"A page of published customer reviews for one product, with rating, title, body, author nickname and location, helpful votes and whether the review was incentivised or syndicated.","required_params":["id"],"optional_params":["limit","offset"],"params":[{"name":"id","type":"string","required":true,"description":"Macy's numeric product id, or a macys.com product URL carrying ?ID=. Ids come from products/list, from product/detail URLs, or from your own records.","on_invalid":"reject","example":"20573337","aliases":["product_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Reviews per page. Values outside 1-50 are clamped, not rejected.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"offset","type":"integer","required":false,"description":"Reviews to skip. The authoritative review total is reviews_summary.review_count on product/detail.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":10000}],"returns":"reviews[] plus a summary with rating, review_count and the rating distribution. The source publishes no page total on this endpoint, so has_more is derived from a full page and source_publishes_total says so.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"20573337","limit":10}},{"name":"products/list","description":"Walk the retailer's own published product feed to discover product ids and URLs. Measured 2026-10-03: 1,121,654 product entries across 23 shards. Use this when you want the whole catalogue rather than a keyword slice.","required_params":[],"optional_params":["shard","limit","page"],"params":[{"name":"shard","type":"enum","required":false,"description":"Which shard of the retailer's published product feed to read. Twenty-two shards hold 50,000 products each and one holds the remainder; the response names every shard that exists today.","on_invalid":"reject","allowed_values":[{"value":"aa","label":"AA"},{"value":"ab","label":"AB"},{"value":"ac","label":"AC"},{"value":"ad","label":"AD"},{"value":"ae","label":"AE"},{"value":"af","label":"AF"},{"value":"ag","label":"AG"},{"value":"ah","label":"AH"},{"value":"ai","label":"AI"},{"value":"aj","label":"AJ"},{"value":"ak","label":"AK"},{"value":"al","label":"AL"},{"value":"am","label":"AM"},{"value":"an","label":"AN"},{"value":"ao","label":"AO"},{"value":"ap","label":"AP"},{"value":"aq","label":"AQ"},{"value":"ar","label":"AR"},{"value":"as","label":"AS"},{"value":"at","label":"AT"},{"value":"au","label":"AU"},{"value":"av","label":"AV"},{"value":"aw","label":"AW"}],"default":"aa","example":"aa"},{"name":"limit","type":"integer","required":false,"description":"Products per page out of the shard. Clamped to 1-1000.","on_invalid":"reject","default":200,"example":200,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"One-based page within the shard. A page past the end is clamped and page_clamped is set, so a paging loop cannot spin forever.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50000}],"returns":"products[] with id, url, slug and last_modified, plus shard, shard_total, page, last_page, page_clamped and has_more, and the list of shards that exist today.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"shard":"aa","limit":50}},{"name":"categories","description":"The retailer's published category and brand-page list with ids and URLs, optionally narrowed by a text match on the category path. Category ids are the ids that appear as category_id on a product.","required_params":[],"optional_params":["name_contains","limit","page"],"params":[{"name":"name_contains","type":"string","required":false,"description":"Keep only categories whose published path contains this text, case-insensitive. The answer always carries both the feed total and the matched total. This is NOT a product keyword search.","on_invalid":"reject","example":"dresses","aliases":["query","q"]},{"name":"limit","type":"integer","required":false,"description":"Categories per page. Clamped to 1-1000.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":1000},{"name":"page","type":"integer","required":false,"description":"One-based page. A page past the end is clamped.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"categories[] with id, name, path, depth, url and last_modified, plus feed_total and matched_total so the narrowing is always visible.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"name_contains":"dresses","limit":50}}]},{"name":"made-in-china","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Made-in-China Easy Sourcing API — live B2B buying requests (RFQs) from sourcing.made-in-china.com: what importers are asking to purchase right now, in their own full text, with quantity, buyer country, post date and expiry date. Keyword search, 27 category boards, buyer-country and recency filters, real pagination — clean JSON, no login.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/made-in-china/v1","spec_available":true,"actions":[{"name":"rfq_search","description":"Search live buying requests posted by Made-in-China buyers — the demand side of the marketplace. Each row is a purchase someone is asking for right now: their FULL request text (this board does not truncate it), how many they want, which country they are buying from, the day they posted and the day the request expires. Filter by keyword, category, buyer country and recency; page through up to 100 requests per call. Omit `query` to browse the whole open board.","required_params":[],"optional_params":["query","category","buyer_country","posted_within","page","limit","include_expired"],"params":[{"name":"query","type":"string","required":false,"description":"What the buyer is asking for, in the buyer's own words ('solar panel', 'coffee machine', 'cnc machining'). Leave it out to browse the whole open board (2,200,000+ requests), which is what `category` and `posted_within` are for.","on_invalid":"reject","example":"solar panel","aliases":["q","keyword","keywords","search","word"]},{"name":"category","type":"string","required":false,"description":"Restrict to one of the 27 top-level sourcing categories. Call the `categories` action for the id list. Combines with `query`.","on_invalid":"ignore","example":"nOmtxmJTGEnQ","aliases":["cat","category_id"]},{"name":"buyer_country","type":"enum","required":false,"description":"Country of the BUYER. Made-in-China publishes a fixed facet of ten countries plus 'other'; two-letter codes and plain names ('US', 'uk', 'south africa') are accepted and mapped. Anything outside that set is REJECTED rather than accepted, because the site silently treats an unknown region as 'other' and would hand you a plausible list of the wrong buyers.","on_invalid":"reject","allowed_values":[{"value":"united_states","label":"United States"},{"value":"india","label":"India"},{"value":"nigeria","label":"Nigeria"},{"value":"united_kingdom","label":"United Kingdom"},{"value":"pakistan","label":"Pakistan"},{"value":"australia","label":"Australia"},{"value":"canada","label":"Canada"},{"value":"south_africa","label":"South Africa"},{"value":"ghana","label":"Ghana"},{"value":"brazil","label":"Brazil"},{"value":"other","label":"Every other country — the site's own catch-all bucket"}],"example":"united_states","aliases":["country","region","buyer_location"]},{"name":"posted_within","type":"enum","required":false,"description":"Only requests posted inside this window. 'older_than_7d' is the site's own inverse facet — it returns requests OLDER than a week, not newer. Board-wide '24h' was 730 requests when measured, which is the daily new-demand flow.","on_invalid":"reject","allowed_values":[{"value":"12h","label":"Posted in the last 12 hours"},{"value":"24h","label":"Posted in the last 24 hours"},{"value":"3d","label":"Posted in the last 3 days"},{"value":"7d","label":"Posted in the last 7 days"},{"value":"older_than_7d","label":"Posted MORE than 7 days ago — the site's own inverse facet"}],"example":"24h","aliases":["posted","age","pdate"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based (max 20000). Page forward with `next_page` from the response. Asking for a page past the end returns NOT_FOUND — the site itself would silently re-serve the last page instead.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20000,"aliases":["p","sayfa"]},{"name":"limit","type":"integer","required":false,"description":"Requests per page, 1-100 (default 20). This is a real upstream page size, not a client-side trim, so a bigger number is one call rather than several — 100 rows arrive in a single ~187 KB response.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["psize","page_size","count"]},{"name":"include_expired","type":"boolean","required":false,"description":"Include requests the site marks expired or closed. Off by default: an expired request cannot be quoted on, so it is history rather than demand. 0 of 100 rows measured on the fresh board were expired, so this normally removes nothing.","on_invalid":"ignore","default":false,"example":true}],"returns":"results[]{rfq_id, title, description, url, quantity, quantity_text, quantity_unit, buyer{name, country, country_code, email_confirmed}, posted_at, expires_at, expired, closed, quotes_left, quotes_allowed, budget, budget_currency, category_id, origin_site, image, has_attachments}, query, page, page_size, returned, total_estimate, pages_available, has_more, next_page, filters_applied","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"solar panel"}},{"name":"categories","description":"The 27 top-level sourcing categories of the buying-request board, with the ids that `rfq_search`'s `category` parameter takes. Read live from the board's own category rail, so a new or renamed category appears without a code change.","required_params":[],"optional_params":["query"],"params":[{"name":"query","type":"string","required":false,"description":"Filter categories whose name contains this text (case-insensitive). Omit for all 27.","on_invalid":"ignore","example":"machinery","aliases":["q","name","filter"]}],"returns":"categories[]{id, name, url}, returned, source","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"machinery"}}]},{"name":"maedchenflohmarkt","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Mädchenflohmarkt API — live data from maedchenflohmarkt.de, Germany's second-hand women's fashion marketplace (~374,000 live items): search with brand, size, colour, condition, category and price filters, and read every item's brand, size, colours, condition grade, material, current price, the crossed-out original price, discount, shipping, likes, photos and seller. Seller profiles with rating scores, seller closets, seller reviews, similar items, the 787-node category tree, the filter vocabulary and the storefront's autocomplete. EUR. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/maedchenflohmarkt/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse the live catalogue (~374,000 items). Every filter was measured biting against the unfiltered total in the same run, and the engine checks the source's own echo of what it applied: a filter the source did not apply is reported in meta.warnings. brand, size and colour take several values (OR); category and condition take one. Prices are whole euros. `total` is the source's exact count; there is no paging ceiling.","required_params":[],"optional_params":["query","category","brand","size","color","condition","min_price","max_price","sale","shipped_by_maedchenflohmarkt","sort","page","limit","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text, matched by the source's own search (titles, brands, types). Example: 'gucci' -> 692 live items.","on_invalid":"reject","example":"gucci","aliases":["q","keyword","search"]},{"name":"category","type":"integer","required":false,"description":"ONE category id from `categories` (787 nodes; roots: 1 Mode, 406 Schuhe, 341 Taschen, 281 Accessoires, 376 Schmuck). The source applies a single category only.","on_invalid":"reject","example":32,"minimum":1,"aliases":["category_id"]},{"name":"brand","type":"array","required":false,"description":"One or more numeric brand ids (OR). Get ids from `suggest` (brand names -> ids) or `filters`. Measured: [605] 81 + [73] 1,540 = [605, 73] 1,621.","on_invalid":"reject","example":[282],"aliases":["brand_id","brands","brand_ids"]},{"name":"size","type":"array","required":false,"description":"One or more numeric size ids (OR) from `filters`. A size id is shared across categories (id 5 = '38' for clothing AND shoes), so combine with `category`.","on_invalid":"reject","example":[5],"aliases":["size_id","sizes","size_ids"]},{"name":"color","type":"array","required":false,"description":"One or more colour keys (OR), closed list. Measured: black 97,277 + red 17,896 = both 115,173.","on_invalid":"reject","allowed_values":[{"value":"beige","label":"beige"},{"value":"blue","label":"blue"},{"value":"brown","label":"brown"},{"value":"bronze","label":"bronze"},{"value":"cream","label":"cream"},{"value":"yellow","label":"yellow"},{"value":"gold","label":"gold"},{"value":"grey","label":"grey"},{"value":"green","label":"green"},{"value":"khaki","label":"khaki"},{"value":"purple","label":"purple"},{"value":"nude","label":"nude"},{"value":"orange","label":"orange"},{"value":"pink","label":"pink"},{"value":"red","label":"red"},{"value":"black","label":"black"},{"value":"silver","label":"silver"},{"value":"turquoise","label":"turquoise"},{"value":"white","label":"white"}],"example":["black"],"aliases":["colour","colors","colours"]},{"name":"condition","type":"enum","required":false,"description":"ONE condition grade (the source applies a single grade): new_with_tags, new_without_tags, excellent, good, flawed.","on_invalid":"reject","allowed_values":[{"value":"new_with_tags","label":"new_with_tags"},{"value":"new_without_tags","label":"new_without_tags"},{"value":"excellent","label":"excellent"},{"value":"good","label":"good"},{"value":"flawed","label":"flawed"}],"example":"excellent"},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in whole euros. The source truncates decimals (99.5 -> 99), so only whole euros are accepted.","on_invalid":"reject","example":20,"minimum":0,"aliases":["price_min","minprice"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in whole euros.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_max","maxprice"]},{"name":"sale","type":"boolean","required":false,"description":"true = only discounted items (230,645 of 374,045). false applies nothing.","on_invalid":"reject","example":true,"aliases":["on_sale"]},{"name":"shipped_by_maedchenflohmarkt","type":"boolean","required":false,"description":"true = only items checked and shipped by Mädchenflohmarkt itself (256,098 of 374,045). false applies nothing.","on_invalid":"reject","example":true,"aliases":["concierge"]},{"name":"sort","type":"enum","required":false,"description":"Order. Default: newest without a query, relevance with one. price_asc, price_desc and most_liked were strictly ordered on 20/20 rows; newest follows the source's index date, which lagged a re-published item's `published_at` on 1 of 20 rows.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"most_liked","label":"most_liked"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. There is no paging ceiling.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (the source caps at 100).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100,"aliases":["per_page","page_size"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{total, total_label, page, limit, has_more, applied{...}, items[{id, url, title, brand_id, brand_name, category{id,name,parent_id,path_ids}, size_id, size, size_label, colours[{id,name,hex}], condition, condition_id, condition_label, material, price_eur, original_price_eur, discount_label, discount_pct_computed, currency, shipping_eur, shipping_text, shipped_by_maedchenflohmarkt, available, like_count, published_at, badges[], image, images_count, seller_id, seller{id, username, profile_url, rating_total, rating_positive, item_count}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"gucci","size":[5],"sort":"price_asc","limit":24}},{"name":"product","description":"One item, complete: everything a search row has plus the full description (measurements and details as the source writes them), every photo with its size, payment methods, the condition text, the brand block and the full seller profile. Pass `id` (from any row) or a product `url`.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"Product id — the `id` of any search row (e.g. 22017250). Or pass `url`.","on_invalid":"reject","example":"22017250","aliases":["product_id"]},{"name":"url","type":"string","required":false,"description":"A maedchenflohmarkt.de / .at product URL instead of `id`.","on_invalid":"reject","example":"https://www.maedchenflohmarkt.de/produkt/22017250.html","aliases":["product_url"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{item: {id, url, title, brand_id, brand_name, category{id,name,parent_id,path_ids}, size_id, size, size_label, colours[{id,name,hex}], condition, condition_id, condition_label, material, price_eur, original_price_eur, discount_label, discount_pct_computed, currency, shipping_eur, shipping_text, shipped_by_maedchenflohmarkt, available, like_count, published_at, badges[], image, images_count, seller_id, seller{id, username, profile_url, rating_total, rating_positive, item_count}, description, discount_text, images[{url, url_template, width, height}], original_invoice, payment_methods[], hints[], payment_hints[], condition_description, brand{id,name,is_top_brand,is_sustainable_brand,logo}, seller{...full profile}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"22017250"}},{"name":"similar","description":"Items the source itself lists as similar to one item (measured: 13 for a leather belt).","required_params":[],"optional_params":["id","url","limit","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"Product id — the `id` of any search row (e.g. 22017250). Or pass `url`.","on_invalid":"reject","example":"22017250","aliases":["product_id"]},{"name":"url","type":"string","required":false,"description":"A maedchenflohmarkt.de / .at product URL instead of `id`.","on_invalid":"reject","example":"https://www.maedchenflohmarkt.de/produkt/22017250.html","aliases":["product_url"]},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (the source caps at 100).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100,"aliases":["per_page","page_size"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{product_id, total, items[{id, url, title, brand_id, brand_name, category{id,name,parent_id,path_ids}, size_id, size, size_label, colours[{id,name,hex}], condition, condition_id, condition_label, material, price_eur, original_price_eur, discount_label, discount_pct_computed, currency, shipping_eur, shipping_text, shipped_by_maedchenflohmarkt, available, like_count, published_at, badges[], image, images_count, seller_id, seller{id, username, profile_url, rating_total, rating_positive, item_count}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"22017250"}},{"name":"seller","description":"A seller account's public profile: username, active-since date, about text, item count, followers, rating total, positive count, the four rating scores (article, communication, shipping time, shipping) and, for business accounts, the business block.","required_params":["seller_id"],"optional_params":["include_pii"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Seller account id — `seller_id` of any row, or the number in a /kleiderschrank/<id>/ URL.","on_invalid":"reject","example":"177069","aliases":["user_id","seller"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{seller{id, username, profile_url, active_since, about, photo, is_business, business, ratings{total, positive, summary, article_score, communication_score, shipping_time_score, shipping_score}, item_count, follower_count, following_count}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"177069"}},{"name":"seller_listings","description":"A seller's closet: the items listed from that account. For private sellers whose items Mädchenflohmarkt checks and ships, this is the only place their items are tied to them (on the item itself the seller shown is Mädchenflohmarkt).","required_params":["seller_id"],"optional_params":["sort","page","limit","include_pii"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Seller account id — `seller_id` of any row, or the number in a /kleiderschrank/<id>/ URL.","on_invalid":"reject","example":"177069","aliases":["user_id","seller"]},{"name":"sort","type":"enum","required":false,"description":"Order. Default: newest without a query, relevance with one. price_asc, price_desc and most_liked were strictly ordered on 20/20 rows; newest follows the source's index date, which lagged a re-published item's `published_at` on 1 of 20 rows.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"most_liked","label":"most_liked"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. There is no paging ceiling.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (the source caps at 100).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100,"aliases":["per_page","page_size"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{seller_id, total, page, limit, has_more, items[{id, url, title, brand_id, brand_name, category{id,name,parent_id,path_ids}, size_id, size, size_label, colours[{id,name,hex}], condition, condition_id, condition_label, material, price_eur, original_price_eur, discount_label, discount_pct_computed, currency, shipping_eur, shipping_text, shipped_by_maedchenflohmarkt, available, like_count, published_at, badges[], image, images_count, seller_id, seller{id, username, profile_url, rating_total, rating_positive, item_count}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"177069","limit":20}},{"name":"seller_reviews","description":"Written buyer reviews of a seller (positive/negative + comment + date). `rating_total` is the source's count of ALL ratings; the source lists fewer of them as rows (measured 63 rows for 551, 9 for 71).","required_params":["seller_id"],"optional_params":["page","limit","include_pii"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Seller account id — `seller_id` of any row, or the number in a /kleiderschrank/<id>/ URL.","on_invalid":"reject","example":"177069","aliases":["user_id","seller"]},{"name":"page","type":"integer","required":false,"description":"1-based page. There is no paging ceiling.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (the source caps at 100).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100,"aliases":["per_page","page_size"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{seller_id, rating_total, page, limit, has_more, reviews[{id, date, rating, comment, reviewer{id, username, profile_url}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"177069","limit":20}},{"name":"filters","description":"The filter vocabulary the source publishes, optionally for one category: brand ids (the source cuts the list at 1,000, A-Z), size ids, colour keys, condition grades, price range buckets and sort options.","required_params":[],"optional_params":["category","include_pii"],"params":[{"name":"category","type":"integer","required":false,"description":"ONE category id from `categories` (787 nodes; roots: 1 Mode, 406 Schuhe, 341 Taschen, 281 Accessoires, 376 Schmuck). The source applies a single category only.","on_invalid":"reject","example":32,"minimum":1,"aliases":["category_id"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{category, total, brands[{id,name}], brands_truncated, sizes[{id,name}], colours[{key,name,hex}], conditions[{key,id,name,description}], price{min,max,ranges[]}, sorts[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":406}},{"name":"categories","description":"The category tree (787 nodes under 5 roots) with ids for `search.category`.","required_params":[],"optional_params":["parent","depth","include_pii"],"params":[{"name":"parent","type":"integer","required":false,"description":"Return only this category's subtree (an id from the tree).","on_invalid":"reject","example":1,"minimum":1,"aliases":["parent_id","category"]},{"name":"depth","type":"integer","required":false,"description":"How many levels to return below the starting level (default all).","on_invalid":"reject","example":2,"minimum":0,"maximum":6,"aliases":["max_depth"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{node_count, tree[{id, name, parent_id, path_ids, depth, child_count, children[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"depth":1}},{"name":"suggest","description":"The storefront's autocomplete: brand and category suggestions for a prefix, each with the id to pass to `search`.","required_params":["query"],"optional_params":["include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"Two or more letters of a brand, category or search term.","on_invalid":"reject","example":"gucc","aliases":["q","term","prefix"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","example":false}],"returns":"{query, suggestions[{label, kind, brand_id, category_id, query}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"zara"}}]},{"name":"magalu","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Magalu API scraper — magazineluiza.com.br (Brazil): search and browse products with the card price, PIX price, struck list price and interest-free installments kept apart, coupons, Magalu or marketplace seller with seller rating, EAN, specifications, variants, ratings and reviews, and delivery quotes by CEP. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/magalu/v1","spec_available":true,"actions":[{"name":"search","description":"Search Magalu by keyword. Each product comes with the card price, the PIX price and its discount, the struck list price, the best interest-free installment plan, any coupon (not applied to the price), the seller (Magalu itself or a marketplace seller), availability, rating and review count, badges and category. Sort by price, best sellers, rating, newest or fastest delivery; filter by brand, seller, price range, category or subcategory. Sponsored rows are removed and counted.","required_params":["query"],"optional_params":["country","page","page_size","sort","brand","seller","min_price","max_price","category_id","subcategory_id","include_sponsored","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Words a shopper would type on Magalu (Portuguese).","on_invalid":"reject","example":"geladeira","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Magalu sells in Brazil only (magazineluiza.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — magazineluiza.com.br (BRL)"}],"default":"br","example":"br"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Magalu serves 100 pages at most.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (Magalu's own page shows 40).","on_invalid":"reject","default":40,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Magalu's own sort orders. price_asc / price_desc order by the BEST price Magalu shows (the PIX price when there is one), not by the card price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevância"},{"value":"price_asc","label":"Menor preço"},{"value":"price_desc","label":"Maior preço"},{"value":"bestsellers","label":"Mais vendidos"},{"value":"rating","label":"Mais bem avaliados"},{"value":"newest","label":"Lançamento"},{"value":"fastest_delivery","label":"Menor prazo"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand, as the `value` in filters_available.brands (e.g. electrolux).","on_invalid":"reject","example":"electrolux"},{"name":"seller","type":"string","required":false,"description":"One seller id, as in filters_available.sellers or a row's seller.id (magazineluiza = sold by Magalu itself).","on_invalid":"reject","example":"magazineluiza"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in BRL (reais). Magalu applies it to the best price (PIX when offered), not the card price, and lets a few rows just outside the range through.","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in BRL (reais), applied by Magalu to the best price (PIX when offered).","on_invalid":"reject","minimum":0},{"name":"category_id","type":"string","required":false,"description":"Limit to one Magalu category id (a row's category.id, e.g. TE).","on_invalid":"reject","example":"TE"},{"name":"subcategory_id","type":"string","required":false,"description":"Limit to one Magalu subcategory id (a row's subcategory.id, e.g. IP17).","on_invalid":"reject","example":"IP17"},{"name":"include_sponsored","type":"boolean","required":false,"description":"Rows Magalu marks as sponsored are left out and counted in sponsored_dropped. true: they are returned with sponsored true.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no product matches the keyword, Magalu sometimes fills the page with unrelated products. They are dropped and counted in fallback_results_dropped; true returns them separately in fallback_results.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, type, title, brand, url, image, price, pix_price, pix_discount_pct, list_price, discount_pct, best_price_other_method, installments{count, amount, total, interest_free, label}, currency, price_source, coupon{code, discount_type, discount_value, message, valid_from, valid_until}, offer_discounts[], seller{id, sku, is_magalu, name}, availability, search_index_rating, search_index_review_count (search-index figures; product/detail has the product page's), rating_scale, badges[], max_quantity, has_variants, category{id, name}, subcategory{id, name}, sponsored}, count (organic rows), sponsored_dropped, sponsored_included, fallback_results_dropped, total_results, total_results_capped, total_pages, page, page_size, has_more, page_notice, filters_available{brands[], sellers[], categories[] ({value, label, count}), price_range{min, max}, attributes[]{name, slug, values[]}}, sort, applied_filters, country, currency, query, matched_query, keyword_matches_on_page, fallback_total, fallback_results[] (opt-in)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"geladeira"}},{"name":"category","description":"Every product in a Magalu category or subcategory (by id such as TE / IP17, or by the category URL), paged, with the same rows, sorts and filters as search.","required_params":["category"],"optional_params":["subcategory","country","page","page_size","sort","brand","seller","min_price","max_price","include_sponsored","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A Magalu category id (TE) or a category / subcategory URL (/celulares-e-smartphones/l/te/ or /iphone-17/celulares-e-smartphones/s/te/ip17/).","on_invalid":"reject","example":"TE","aliases":["category_url"]},{"name":"subcategory","type":"string","required":false,"description":"A subcategory id inside the category (IP17). A subcategory URL sets it by itself.","on_invalid":"reject","example":"IP17"},{"name":"country","type":"enum","required":false,"description":"Magalu sells in Brazil only (magazineluiza.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — magazineluiza.com.br (BRL)"}],"default":"br","example":"br"},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. Magalu serves 100 pages at most.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (Magalu's own page shows 40).","on_invalid":"reject","default":40,"minimum":1,"maximum":60},{"name":"sort","type":"enum","required":false,"description":"Magalu's own sort orders. price_asc / price_desc order by the BEST price Magalu shows (the PIX price when there is one), not by the card price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevância"},{"value":"price_asc","label":"Menor preço"},{"value":"price_desc","label":"Maior preço"},{"value":"bestsellers","label":"Mais vendidos"},{"value":"rating","label":"Mais bem avaliados"},{"value":"newest","label":"Lançamento"},{"value":"fastest_delivery","label":"Menor prazo"}],"default":"relevance","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"One brand, as the `value` in filters_available.brands (e.g. electrolux).","on_invalid":"reject","example":"electrolux"},{"name":"seller","type":"string","required":false,"description":"One seller id, as in filters_available.sellers or a row's seller.id (magazineluiza = sold by Magalu itself).","on_invalid":"reject","example":"magazineluiza"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in BRL (reais). Magalu applies it to the best price (PIX when offered), not the card price, and lets a few rows just outside the range through.","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in BRL (reais), applied by Magalu to the best price (PIX when offered).","on_invalid":"reject","minimum":0},{"name":"include_sponsored","type":"boolean","required":false,"description":"Rows Magalu marks as sponsored are left out and counted in sponsored_dropped. true: they are returned with sponsored true.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, type, title, brand, url, image, price, pix_price, pix_discount_pct, list_price, discount_pct, best_price_other_method, installments{count, amount, total, interest_free, label}, currency, price_source, coupon{code, discount_type, discount_value, message, valid_from, valid_until}, offer_discounts[], seller{id, sku, is_magalu, name}, availability, search_index_rating, search_index_review_count (search-index figures; product/detail has the product page's), rating_scale, badges[], max_quantity, has_variants, category{id, name}, subcategory{id, name}, sponsored}, count (organic rows), sponsored_dropped, sponsored_included, fallback_results_dropped, total_results, total_results_capped, total_pages, page, page_size, has_more, page_notice, filters_available{brands[], sellers[], categories[] ({value, label, count}), price_range{min, max}, attributes[]{name, slug, values[]}}, sort, applied_filters, country, currency, category_id, subcategory_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"TE"}},{"name":"product/detail","description":"The full Magalu product record by id or URL: title, brand, EAN, reference, card price, PIX price, list price and discount, best installment plan, coupon, promotions, the seller (Magalu or marketplace) with seller rating, total sales and response/delivery reputation, availability including out-of-stock items, rating with distribution, description, specifications, images, videos, variants with their own ids, package dimensions and category breadcrumb.","required_params":["product_id"],"optional_params":["country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Magalu product id (the code after /p/ in a product URL, e.g. 241267100 or gf8hj05ja2) or the product URL.","on_invalid":"reject","example":"241267100","aliases":["id","url","sku"]},{"name":"country","type":"enum","required":false,"description":"Magalu sells in Brazil only (magazineluiza.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — magazineluiza.com.br (BRL)"}],"default":"br","example":"br"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, type, title, brand, brand_slug, ean, reference, product_type, url, price, pix_price, pix_discount_pct, list_price, discount_pct, best_price_other_method, installments{}, currency, price_source, coupon{}, promotions[], offer_discounts[], badges[], seller{id, name, is_magalu, sku, delivered_by, seller_since, rating, rating_scale, total_sales, answer_rate, delivery_rate, city, state}, marketplace, availability, max_quantity, minimum_order_quantity, offer_timer, rating, review_count, rating_scale, comment_count, rating_distribution{}, description, specifications{name: value}, images[], videos[], variants[]{attribute, value, product_id, available, url, selected}, variant_count, package{length_m, width_m, height_m, weight_kg}, category, subcategory, breadcrumb[], tags[], is_buy_box}, country, currency","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"241267100"}},{"name":"product/reviews","description":"Customer reviews of a Magalu product, paged and sorted (most relevant, newest, positive, negative), with rating, title, text, date, reviewer first name, the variant bought and review photos, plus the average rating, rating count and star distribution.","required_params":["product_id"],"optional_params":["country","page","page_size","sort","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Magalu product id (the code after /p/ in a product URL, e.g. 241267100 or gf8hj05ja2) or the product URL.","on_invalid":"reject","example":"241267100","aliases":["id","url","sku"]},{"name":"country","type":"enum","required":false,"description":"Magalu sells in Brazil only (magazineluiza.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — magazineluiza.com.br (BRL)"}],"default":"br","example":"br"},{"name":"page","type":"integer","required":false,"description":"Review page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (Magalu's own page shows 8).","on_invalid":"reject","default":10,"minimum":1,"maximum":20},{"name":"sort","type":"enum","required":false,"description":"Magalu's own review orders.","on_invalid":"reject","allowed_values":[{"value":"relevant","label":"Mais relevantes"},{"value":"newest","label":"Mais recentes"},{"value":"positive","label":"Avaliações positivas"},{"value":"negative","label":"Avaliações negativas"}],"default":"relevant","example":"newest"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"reviews[]{review_id, rating, title, text, date, author, variant{}, reviewed_product_id, images[]}, count, page, page_size, total_reviews (reviews with text), total_pages, has_more, average_rating, rating_count (all ratings), rating_scale, comment_count, rating_distribution{}, product_id, sort, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"241267100"}},{"name":"product/shipping","description":"Delivery options and prices for a Magalu product to a Brazilian CEP, as Magalu quotes them on the product page: standard delivery and store pickup with cost, working days or hours, expected delivery dates and who ships it.","required_params":["product_id","zipcode"],"optional_params":["quantity","country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Magalu product id (the code after /p/ in a product URL, e.g. 241267100 or gf8hj05ja2) or the product URL.","on_invalid":"reject","example":"241267100","aliases":["id","url","sku"]},{"name":"zipcode","type":"string","required":true,"description":"Brazilian CEP, 8 digits (01310-100 or 01310100).","on_invalid":"reject","example":"01310100","aliases":["cep","postal_code"]},{"name":"quantity","type":"integer","required":false,"description":"Units to quote.","on_invalid":"reject","default":1,"minimum":1,"maximum":10},{"name":"country","type":"enum","required":false,"description":"Magalu sells in Brazil only (magazineluiza.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — magazineluiza.com.br (BRL)"}],"default":"br","example":"br"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"options[]{type, name, cost, free, currency, time_unit, time_min, time_max, delivery_date_min, delivery_date_max, description}, count, deliverable, shipping_status, message, shipped_by, disclaimers[], product_id, seller_id, zipcode, quantity, country","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"241267100","zipcode":"01310100"}},{"name":"search/suggest","description":"Magalu's search-box suggestions for what a shopper has typed.","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper has typed so far.","on_invalid":"reject","example":"gelad","aliases":["q","prefix"]},{"name":"country","type":"enum","required":false,"description":"Magalu sells in Brazil only (magazineluiza.com.br, BRL).","on_invalid":"reject","allowed_values":[{"value":"br","label":"Brazil — magazineluiza.com.br (BRL)"}],"default":"br","example":"br"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"suggestions[]{term, position}, count, query, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"geladeira"}}]},{"name":"magi","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"magi API — Japan's trading-card marketplace (マギ, magi.camp): live and SOLD listings with the price they sold at, every card's trade history (each sale's price + dated daily chart), cheapest live price per card, listing detail with seller rating, Pokémon, One Piece, Yu-Gi-Oh!, Duel Masters, MTG, Weiß Schwarz and 200+ games. JPY. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/magi/v1","spec_available":true,"actions":[{"name":"search","description":"Search magi listings: keyword, game, sub-category (singles, unopened boxes, packs, old-back …), new/used, price range, live or sold, one card product, one seller, graded (PSA10 …), sorted newest / cheapest / dearest / most favourited, 96 a page. Every row carries the SOLD flag.","required_params":[],"optional_params":["query","game","series_id","category","condition","min_price","max_price","status","include_description","product_id","seller_id","grade","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword as sellers write it (Japanese works best: card name, card number such as '134/108' or 'OP05-119', set name, 'PSA10', 'BOX', '未開封'). Matched in the listing title (and in the description with include_description).","on_invalid":"reject","example":"リザードン","aliases":["q","keyword"]},{"name":"game","type":"enum","required":false,"description":"Card game (magi 'brand'): pokemon, one_piece, yugioh, duel_masters, mtg, weiss_schwarz, union_arena, digimon, lorcana, sports … or any numeric game id from `categories` (200+ games).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム"},{"value":"one_piece","label":"ワンピースカードゲーム"},{"value":"yugioh","label":"遊戯王"},{"value":"duel_masters","label":"デュエル・マスターズ"},{"value":"mtg","label":"マジック：ザ・ギャザリング"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ"},{"value":"weiss_schwarz_blau","label":"ヴァイスシュヴァルツブラウ"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ"},{"value":"union_arena","label":"ユニオンアリーナ"},{"value":"digimon","label":"デジモンカードゲーム"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"dragon_ball_fusion_world","label":"ドラゴンボール フュージョンワールド"},{"value":"dragon_ball_heroes","label":"ドラゴンボールヒーローズ"},{"value":"battle_spirits","label":"バトルスピリッツ"},{"value":"vanguard","label":"ヴァンガード"},{"value":"lorcana","label":"ディズニーロルカナ"},{"value":"gundam","label":"ガンダムカードゲーム"},{"value":"hololive","label":"ホロライブ"},{"value":"flesh_and_blood","label":"Flesh and Blood"},{"value":"wixoss","label":"WIXOSS"},{"value":"naruto","label":"NARUTOカードゲーム"},{"value":"love_live","label":"ラブライブ！シリーズ オフィシャルカードゲーム"},{"value":"godzilla","label":"ゴジラ カードゲーム"},{"value":"ultraman","label":"ウルトラマンカードゲーム"},{"value":"rebirth","label":"Reバース for you"},{"value":"zx","label":"Z/X"},{"value":"buddyfight","label":"バディファイト"},{"value":"detective_conan","label":"名探偵コナン"},{"value":"sports","label":"スポーツ"},{"value":"bikkuriman","label":"ビックリマン"},{"value":"mushiking","label":"ムシキング"},{"value":"supplies","label":"サプライ・梱包材"}],"example":"pokemon","value_pattern":"\\d{1,6}"},{"name":"series_id","type":"string","required":false,"description":"Sub-category of a game from `categories` with game=… (e.g. Pokémon 31 singles, 100058 unopened boxes, 100562 unopened packs, 100002 old-back cards, 100007 overseas versions).","on_invalid":"reject","example":"100058","value_pattern":"\\d{1,9}","aliases":["series"]},{"name":"category","type":"enum","required":false,"description":"magi's top category: cards (トレカ), sneakers, hobby, video_games, nft. Default: the whole site (almost all cards).","on_invalid":"reject","allowed_values":[{"value":"cards","label":"トレカ"},{"value":"sneakers","label":"スニーカー"},{"value":"nft","label":"NFT・NFTゲーム"},{"value":"hobby","label":"ホビー"},{"value":"video_games","label":"ゲーム機・ゲームソフト"}],"example":"cards"},{"name":"condition","type":"enum","required":false,"description":"new (新品, incl. unopened boxes) or used (中古).","on_invalid":"reject","allowed_values":[{"value":"new","label":"New / unopened (新品)"},{"value":"used","label":"Used (中古)"}],"example":"used"},{"name":"min_price","type":"integer","required":false,"description":"Lowest listing price, JPY (inclusive; price as shown, buyer fee included).","on_invalid":"reject","example":10000,"minimum":0,"maximum":99999999},{"name":"max_price","type":"integer","required":false,"description":"Highest listing price, JPY (inclusive).","on_invalid":"reject","example":50000,"minimum":0,"maximum":99999999},{"name":"status","type":"enum","required":false,"description":"Live listings, sold listings, or both.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Live and sold listings (the site's default)"},{"value":"on_sale","label":"Only listings still for sale (出品中)"},{"value":"sold","label":"Only sold listings (SOLD OUT)"}],"default":"all","example":"on_sale"},{"name":"include_description","type":"boolean","required":false,"description":"Also match the keyword inside the listing description (商品説明を含める).","on_invalid":"reject","default":false,"example":true},{"name":"product_id","type":"string","required":false,"description":"Only listings of one card product (a `products` / `catalog` row's product_id, or a magi.camp/products/<id> URL).","on_invalid":"reject","example":"422598","value_pattern":"\\d{1,12}"},{"name":"seller_id","type":"string","required":false,"description":"Only one seller's listings (item.seller.seller_id, or a magi.camp/users/<id> URL).","on_invalid":"reject","example":"1239226822","aliases":["user_id"]},{"name":"grade","type":"string","required":false,"description":"Graded slabs only: grader + grade as sellers write it (PSA10, PSA9, BGS9.5, ARS10+, CGC10). Added to the keyword — magi has no separate grade filter — and every row's `grade` is parsed from its title.","on_invalid":"reject","example":"PSA10"},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Recently listed or updated first (the site's default 新しい順; on a sold search ≈ most recently sold first)"},{"value":"oldest","label":"Oldest update first (古い順)"},{"value":"price_asc","label":"Cheapest first (価格の安い順)"},{"value":"price_desc","label":"Most expensive first (価格の高い順)"},{"value":"most_favorited","label":"Most favourited first (お気に入りの多い順)"}],"default":"newest","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number, 96 rows a page. magi serves at most 100 pages (9,600 rows) per query.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100}],"returns":"rows[]: item_id, title (as the seller wrote it, Japanese kept), price_jpy (price as shown: tax and buyer fee included; on a sold row = the price it sold at), sold (true = SOLD OUT), favorites, certified_seller (認定出品者 = registered shop), grade{grader, grade, label} (parsed from the title; null when ungraded), image_url, url. meta: total (the site's own count; capped at 10000 by the site), total_capped, products_total, page, per_page (96), last_page, has_more, filters_applied, promoted[] (listings the site pins above the results on the default sort — not part of the results), warnings.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"リザードン","game":"pokemon"}},{"name":"sold","description":"Sold listings only — what cards actually SOLD for on magi (the realised price, buyer fee included), newest sales first by default: the price check / arbitrage feed. Same filters as search; meta.price_summary gives count, min, median, mean and max of the page's sold prices.","required_params":[],"optional_params":["query","game","series_id","category","condition","min_price","max_price","include_description","product_id","seller_id","grade","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword as sellers write it (Japanese works best: card name, card number such as '134/108' or 'OP05-119', set name, 'PSA10', 'BOX', '未開封'). Matched in the listing title (and in the description with include_description).","on_invalid":"reject","example":"リザードン","aliases":["q","keyword"]},{"name":"game","type":"enum","required":false,"description":"Card game (magi 'brand'): pokemon, one_piece, yugioh, duel_masters, mtg, weiss_schwarz, union_arena, digimon, lorcana, sports … or any numeric game id from `categories` (200+ games).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム"},{"value":"one_piece","label":"ワンピースカードゲーム"},{"value":"yugioh","label":"遊戯王"},{"value":"duel_masters","label":"デュエル・マスターズ"},{"value":"mtg","label":"マジック：ザ・ギャザリング"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ"},{"value":"weiss_schwarz_blau","label":"ヴァイスシュヴァルツブラウ"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ"},{"value":"union_arena","label":"ユニオンアリーナ"},{"value":"digimon","label":"デジモンカードゲーム"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"dragon_ball_fusion_world","label":"ドラゴンボール フュージョンワールド"},{"value":"dragon_ball_heroes","label":"ドラゴンボールヒーローズ"},{"value":"battle_spirits","label":"バトルスピリッツ"},{"value":"vanguard","label":"ヴァンガード"},{"value":"lorcana","label":"ディズニーロルカナ"},{"value":"gundam","label":"ガンダムカードゲーム"},{"value":"hololive","label":"ホロライブ"},{"value":"flesh_and_blood","label":"Flesh and Blood"},{"value":"wixoss","label":"WIXOSS"},{"value":"naruto","label":"NARUTOカードゲーム"},{"value":"love_live","label":"ラブライブ！シリーズ オフィシャルカードゲーム"},{"value":"godzilla","label":"ゴジラ カードゲーム"},{"value":"ultraman","label":"ウルトラマンカードゲーム"},{"value":"rebirth","label":"Reバース for you"},{"value":"zx","label":"Z/X"},{"value":"buddyfight","label":"バディファイト"},{"value":"detective_conan","label":"名探偵コナン"},{"value":"sports","label":"スポーツ"},{"value":"bikkuriman","label":"ビックリマン"},{"value":"mushiking","label":"ムシキング"},{"value":"supplies","label":"サプライ・梱包材"}],"example":"pokemon","value_pattern":"\\d{1,6}"},{"name":"series_id","type":"string","required":false,"description":"Sub-category of a game from `categories` with game=… (e.g. Pokémon 31 singles, 100058 unopened boxes, 100562 unopened packs, 100002 old-back cards, 100007 overseas versions).","on_invalid":"reject","example":"100058","value_pattern":"\\d{1,9}","aliases":["series"]},{"name":"category","type":"enum","required":false,"description":"magi's top category: cards (トレカ), sneakers, hobby, video_games, nft. Default: the whole site (almost all cards).","on_invalid":"reject","allowed_values":[{"value":"cards","label":"トレカ"},{"value":"sneakers","label":"スニーカー"},{"value":"nft","label":"NFT・NFTゲーム"},{"value":"hobby","label":"ホビー"},{"value":"video_games","label":"ゲーム機・ゲームソフト"}],"example":"cards"},{"name":"condition","type":"enum","required":false,"description":"new (新品, incl. unopened boxes) or used (中古).","on_invalid":"reject","allowed_values":[{"value":"new","label":"New / unopened (新品)"},{"value":"used","label":"Used (中古)"}],"example":"used"},{"name":"min_price","type":"integer","required":false,"description":"Lowest listing price, JPY (inclusive; price as shown, buyer fee included).","on_invalid":"reject","example":10000,"minimum":0,"maximum":99999999},{"name":"max_price","type":"integer","required":false,"description":"Highest listing price, JPY (inclusive).","on_invalid":"reject","example":50000,"minimum":0,"maximum":99999999},{"name":"include_description","type":"boolean","required":false,"description":"Also match the keyword inside the listing description (商品説明を含める).","on_invalid":"reject","default":false,"example":true},{"name":"product_id","type":"string","required":false,"description":"Only listings of one card product (a `products` / `catalog` row's product_id, or a magi.camp/products/<id> URL).","on_invalid":"reject","example":"422598","value_pattern":"\\d{1,12}"},{"name":"seller_id","type":"string","required":false,"description":"Only one seller's listings (item.seller.seller_id, or a magi.camp/users/<id> URL).","on_invalid":"reject","example":"1239226822","aliases":["user_id"]},{"name":"grade","type":"string","required":false,"description":"Graded slabs only: grader + grade as sellers write it (PSA10, PSA9, BGS9.5, ARS10+, CGC10). Added to the keyword — magi has no separate grade filter — and every row's `grade` is parsed from its title.","on_invalid":"reject","example":"PSA10"},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Recently listed or updated first (the site's default 新しい順; on a sold search ≈ most recently sold first)"},{"value":"oldest","label":"Oldest update first (古い順)"},{"value":"price_asc","label":"Cheapest first (価格の安い順)"},{"value":"price_desc","label":"Most expensive first (価格の高い順)"},{"value":"most_favorited","label":"Most favourited first (お気に入りの多い順)"}],"default":"newest","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number, 96 rows a page. magi serves at most 100 pages (9,600 rows) per query.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100}],"returns":"rows[]: item_id, title (as the seller wrote it, Japanese kept), price_jpy (price as shown: tax and buyer fee included; on a sold row = the price it sold at), sold (true = SOLD OUT), favorites, certified_seller (認定出品者 = registered shop), grade{grader, grade, label} (parsed from the title; null when ungraded), image_url, url (sold is always true). meta: total, total_capped, page, per_page, last_page, has_more, price_summary{count, min_jpy, max_jpy, median_jpy, mean_jpy}, filters_applied, promoted[] (unsold listings the site pins on top — excluded), warnings.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"ルフィ","game":"one_piece"}},{"name":"item","description":"One magi listing in full: price with and without the buyer fee, SOLD flag, condition, quantity, the card product it is listed under, shipping (fee included or not, method, anonymous shipping, ships from prefecture, dispatch time), the seller's public profile (name, id, identity check, rank, good / normal / bad rating counts, registered shop / real store), description, all photos and last-update time.","required_params":["item_id"],"optional_params":[],"params":[{"name":"item_id","type":"string","required":true,"description":"Listing id (a search row's item_id) or a magi.camp/items/<id> URL.","on_invalid":"reject","example":"2121835655","value_pattern":"\\d{1,12}","aliases":["id","url"]}],"returns":"item{item_id, url, title, sold, availability (InStock / OutOfStock …), buy_button, price_jpy (tax + buyer fee included), price_excl_fee_jpy, buyer_fee_jpy, tax_included, currency, condition (状態 as printed), condition_code (new|used), quantity, quantity_label, category, game, series, product{product_id, name, url} (null when the seller linked no card), grade{grader, grade, label}, shipping_fee, shipping_included, shipping_method, shipping_tags[] (匿名配送 …), ships_from, ships_within, attributes{label: value}, tags[], certified_seller, real_store, seller{seller_id, name, url, identity_verified, rank_level, ratings{good, normal, bad}}, last_updated (relative, as printed), description, images[], image_url}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"item_id":"2121835655"}},{"name":"products","description":"Search magi's card catalogue (製品): one row per card / box / graded slab with the cheapest live listing price and the number of listings — the fastest way to find a product_id for price history. Keyword, game, sub-category, price range, sort, 96 a page.","required_params":[],"optional_params":["query","game","series_id","category","min_price","max_price","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword as sellers write it (Japanese works best: card name, card number such as '134/108' or 'OP05-119', set name, 'PSA10', 'BOX', '未開封'). Matched in the listing title (and in the description with include_description).","on_invalid":"reject","example":"リザードン","aliases":["q","keyword"]},{"name":"game","type":"enum","required":false,"description":"Card game (magi 'brand'): pokemon, one_piece, yugioh, duel_masters, mtg, weiss_schwarz, union_arena, digimon, lorcana, sports … or any numeric game id from `categories` (200+ games).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム"},{"value":"one_piece","label":"ワンピースカードゲーム"},{"value":"yugioh","label":"遊戯王"},{"value":"duel_masters","label":"デュエル・マスターズ"},{"value":"mtg","label":"マジック：ザ・ギャザリング"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ"},{"value":"weiss_schwarz_blau","label":"ヴァイスシュヴァルツブラウ"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ"},{"value":"union_arena","label":"ユニオンアリーナ"},{"value":"digimon","label":"デジモンカードゲーム"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"dragon_ball_fusion_world","label":"ドラゴンボール フュージョンワールド"},{"value":"dragon_ball_heroes","label":"ドラゴンボールヒーローズ"},{"value":"battle_spirits","label":"バトルスピリッツ"},{"value":"vanguard","label":"ヴァンガード"},{"value":"lorcana","label":"ディズニーロルカナ"},{"value":"gundam","label":"ガンダムカードゲーム"},{"value":"hololive","label":"ホロライブ"},{"value":"flesh_and_blood","label":"Flesh and Blood"},{"value":"wixoss","label":"WIXOSS"},{"value":"naruto","label":"NARUTOカードゲーム"},{"value":"love_live","label":"ラブライブ！シリーズ オフィシャルカードゲーム"},{"value":"godzilla","label":"ゴジラ カードゲーム"},{"value":"ultraman","label":"ウルトラマンカードゲーム"},{"value":"rebirth","label":"Reバース for you"},{"value":"zx","label":"Z/X"},{"value":"buddyfight","label":"バディファイト"},{"value":"detective_conan","label":"名探偵コナン"},{"value":"sports","label":"スポーツ"},{"value":"bikkuriman","label":"ビックリマン"},{"value":"mushiking","label":"ムシキング"},{"value":"supplies","label":"サプライ・梱包材"}],"example":"pokemon","value_pattern":"\\d{1,6}"},{"name":"series_id","type":"string","required":false,"description":"Sub-category of a game from `categories` with game=… (e.g. Pokémon 31 singles, 100058 unopened boxes, 100562 unopened packs, 100002 old-back cards, 100007 overseas versions).","on_invalid":"reject","example":"100058","value_pattern":"\\d{1,9}","aliases":["series"]},{"name":"category","type":"enum","required":false,"description":"magi's top category: cards (トレカ), sneakers, hobby, video_games, nft. Default: the whole site (almost all cards).","on_invalid":"reject","allowed_values":[{"value":"cards","label":"トレカ"},{"value":"sneakers","label":"スニーカー"},{"value":"nft","label":"NFT・NFTゲーム"},{"value":"hobby","label":"ホビー"},{"value":"video_games","label":"ゲーム機・ゲームソフト"}],"example":"cards"},{"name":"min_price","type":"integer","required":false,"description":"Lowest cheapest-listing price, JPY.","on_invalid":"reject","example":10000,"minimum":0,"maximum":99999999},{"name":"max_price","type":"integer","required":false,"description":"Highest cheapest-listing price, JPY.","on_invalid":"reject","example":50000,"minimum":0,"maximum":99999999},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Recently listed or updated first (the site's default 新しい順; on a sold search ≈ most recently sold first)"},{"value":"oldest","label":"Oldest update first (古い順)"},{"value":"price_asc","label":"Cheapest first (価格の安い順)"},{"value":"price_desc","label":"Most expensive first (価格の高い順)"},{"value":"most_favorited","label":"Most favourited first (お気に入りの多い順)"}],"default":"newest","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number, 96 rows a page. magi serves at most 100 pages (9,600 rows) per query.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100}],"returns":"rows[]: product_id, name (card name + rarity + number, grade prefix such as 【PSA10】 kept), min_price_jpy (cheapest live listing; null = none listed now), listing_count, grade{grader, grade, label}, image_url, url. meta: total, total_capped, listings_total, page, per_page (96), last_page, has_more, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"リザードン"}},{"name":"product","description":"One card product with its sold-price history: every completed sale (price, quantity, how long ago), the dated daily price chart, last sale, the site's 12-month price range and all-time average, the cheapest live price, rarity / set (pack) / card number, the live and recently sold listings, and the same card in other grades (PSA10, PSA9, ARS10 …) with their prices.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"Card product id (from `products`, `catalog` or a listing's product.product_id) or a magi.camp/products/<id> URL.","on_invalid":"reject","example":"422598","value_pattern":"\\d{1,12}","aliases":["id","url"]}],"returns":"product{product_id, url, name, short_name, grade, goods{goods_id, name}, game{game_id, name, alias}, series{series_id, name}, rarity, pack_name, model_number, attributes{}, min_price_jpy, currency, trade_count, last_trade_date, last_trade_price_jpy, range_12m_min_jpy, range_12m_max_jpy, average_all_time_jpy (the site's figures), median_all_trades_jpy, trades[]{age (as printed), days_ago, date (only when exact), price_jpy, quantity, quantity_label}, daily_chart[]{date, price_jpy} (one point per day, newest first, at most 200 days), trade_dates_exact, listings[] (item_id, title (as the seller wrote it, Japanese kept), price_jpy (price as shown: tax and buyer fee included; on a sold row = the price it sold at), sold (true = SOLD OUT), favorites, certified_seller (認定出品者 = registered shop), grade{grader, grade, label} (parsed from the title; null when ungraded), image_url, url), other_grades[]{product_id, name, min_price_jpy, listing_count, grade, image_url, url}, image_url}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"422598"}},{"name":"price_history","description":"A card's sold-price history ready for charts and price checks: the dated daily series (optionally only the last N days), every sale with its price, and a summary — count, min, median, mean, max, first and last date, change from first to last — plus the site's own 12-month range and all-time average.","required_params":["product_id"],"optional_params":["days"],"params":[{"name":"product_id","type":"string","required":true,"description":"Card product id (from `products`, `catalog` or a listing's product.product_id) or a magi.camp/products/<id> URL.","on_invalid":"reject","example":"422598","value_pattern":"\\d{1,12}","aliases":["id","url"]},{"name":"days","type":"integer","required":false,"description":"Only the chart's last N days (counted back from today, Japan time) for the summary and the series. Default: everything the page shows.","on_invalid":"reject","example":90,"minimum":1,"maximum":3650}],"returns":"product{product_id, name, rarity, pack_name, model_number, game, url}, series[]{date, price_jpy} (newest first), summary{points, first_date, last_date, first_price_jpy, last_price_jpy, change_jpy, change_percent, min_jpy, max_jpy, median_jpy, mean_jpy}, trades[]{age, days_ago, date, price_jpy, quantity}, trade_count, range_12m_min_jpy, range_12m_max_jpy, average_all_time_jpy, days, currency","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"422598"}},{"name":"catalog","description":"magi's card database lookup: card products matching a name or number with their rarity, card number (型番), set / pack (封入パック), game and sub-category — 96 a page. Turns a card name into the product_id that `product` and `price_history` take.","required_params":["query"],"optional_params":["series_id","page"],"params":[{"name":"query","type":"string","required":true,"description":"Card name, card number or set name (Japanese works best).","on_invalid":"reject","example":"リザードン","aliases":["q","keyword"]},{"name":"series_id","type":"string","required":false,"description":"Sub-category of a game from `categories` with game=… (e.g. Pokémon 31 singles, 100058 unopened boxes, 100562 unopened packs, 100002 old-back cards, 100007 overseas versions).","on_invalid":"reject","example":"100058","value_pattern":"\\d{1,9}","aliases":["series"]},{"name":"page","type":"integer","required":false,"description":"Page number, 96 products a page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"rows[]: product_id, name, full_name, rarity, model_number, pack_name, grade, game{game_id, name, alias}, series{series_id, name}, image_url, url. meta: page, per_page (96), has_more.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"リザードン"}},{"name":"categories","description":"magi's category tree: the top categories (cards, sneakers …) and every card game with its id (200+: Pokémon, One Piece, Yu-Gi-Oh!, Duel Masters, MTG, Weiß Schwarz, Lorcana, sports …); with game=… also that game's sub-categories (singles, unopened boxes, packs, old-back, overseas …) and the conditions each allows. Ids go to search as game / series_id.","required_params":[],"optional_params":["game"],"params":[{"name":"game","type":"enum","required":false,"description":"List this game's sub-categories (series).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム"},{"value":"one_piece","label":"ワンピースカードゲーム"},{"value":"yugioh","label":"遊戯王"},{"value":"duel_masters","label":"デュエル・マスターズ"},{"value":"mtg","label":"マジック：ザ・ギャザリング"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ"},{"value":"weiss_schwarz_blau","label":"ヴァイスシュヴァルツブラウ"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ"},{"value":"union_arena","label":"ユニオンアリーナ"},{"value":"digimon","label":"デジモンカードゲーム"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"dragon_ball_fusion_world","label":"ドラゴンボール フュージョンワールド"},{"value":"dragon_ball_heroes","label":"ドラゴンボールヒーローズ"},{"value":"battle_spirits","label":"バトルスピリッツ"},{"value":"vanguard","label":"ヴァンガード"},{"value":"lorcana","label":"ディズニーロルカナ"},{"value":"gundam","label":"ガンダムカードゲーム"},{"value":"hololive","label":"ホロライブ"},{"value":"flesh_and_blood","label":"Flesh and Blood"},{"value":"wixoss","label":"WIXOSS"},{"value":"naruto","label":"NARUTOカードゲーム"},{"value":"love_live","label":"ラブライブ！シリーズ オフィシャルカードゲーム"},{"value":"godzilla","label":"ゴジラ カードゲーム"},{"value":"ultraman","label":"ウルトラマンカードゲーム"},{"value":"rebirth","label":"Reバース for you"},{"value":"zx","label":"Z/X"},{"value":"buddyfight","label":"バディファイト"},{"value":"detective_conan","label":"名探偵コナン"},{"value":"sports","label":"スポーツ"},{"value":"bikkuriman","label":"ビックリマン"},{"value":"mushiking","label":"ムシキング"},{"value":"supplies","label":"サプライ・梱包材"}],"example":"pokemon","value_pattern":"\\d{1,6}"}],"returns":"goods[]{goods_id, name, alias}, games[]{game_id, name, alias}, game{game_id, name, alias}, series[]{series_id, name, conditions[]} (with game), aliases{games{alias: id}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon"}},{"name":"trending","description":"What magi users are searching for right now (the site's trending keywords).","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: rank, keyword, search_url","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"magiceden","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Magic Eden API — Solana NFT marketplace scraper: browse collections; collection detail, floor price, listed count and total volume stats; active NFT listings with price, rarity rank and traits; all collection tokens; single NFT / token detail and its activity history; collection activity (sales, listings, offers); per-trait floor prices; wallet holdings; popular / trending collections; and Launchpad mints — from Magic Eden (magiceden.io), no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/magiceden/v1","spec_available":true,"actions":[{"name":"collections","description":"Browse Magic Eden collections (paginated). Each: symbol, name, description, image, categories and social links. Use the returned symbol with the other actions. Offset pagination via the `page` param.","required_params":[],"optional_params":["page","limit"],"params":[{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Pages of `limit` items each; pass page=2 for the next page. Use meta.has_more to know when to stop.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Items per page (snapped to a multiple of 20; 20-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":20,"maximum":100}],"returns":"collections[]{symbol, name, description, image_url, categories[], twitter, discord, website, is_badged, magiceden_url} + meta{page, has_more}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":20}},{"name":"collection","description":"Full collection detail by symbol: metadata (name, description, image, categories, social links) merged with live market stats — floor price (SOL), listed count, 24h average sale price and all-time volume.","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Magic Eden collection symbol — the last path segment of a Magic Eden collection URL (magiceden.io/marketplace/<symbol>), e.g. 'okay_bears', 'famous_fox_federation', 'degods'. Use the search or collections action to resolve a name to its symbol.","on_invalid":"reject","example":"okay_bears","aliases":["collection","collection_symbol","slug"]}],"returns":"collection{symbol, name, description, image_url, categories[], twitter, discord, website, floor_price_sol, listed_count, avg_price_24hr_sol, volume_all_sol, magiceden_url}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"okay_bears"}},{"name":"stats","description":"Live market stats for a collection: floor price (SOL), number of NFTs currently listed, 24-hour average sale price and all-time trading volume.","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Magic Eden collection symbol — the last path segment of a Magic Eden collection URL (magiceden.io/marketplace/<symbol>), e.g. 'okay_bears', 'famous_fox_federation', 'degods'. Use the search or collections action to resolve a name to its symbol.","on_invalid":"reject","example":"okay_bears","aliases":["collection","collection_symbol","slug"]}],"returns":"stats{symbol, floor_price_sol, listed_count, avg_price_24hr_sol, volume_all_sol, magiceden_url}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"okay_bears"}},{"name":"listings","description":"Active NFT listings in a collection (NFTs currently for sale), cheapest first. Each: token mint, name, price (SOL), seller, rarity rank (Moonrank + HowRare), image and traits. Optional min/max price filter (SOL). Offset pagination via `page`.","required_params":["symbol"],"optional_params":["page","limit","min_price","max_price"],"params":[{"name":"symbol","type":"string","required":true,"description":"Magic Eden collection symbol — the last path segment of a Magic Eden collection URL (magiceden.io/marketplace/<symbol>), e.g. 'okay_bears', 'famous_fox_federation', 'degods'. Use the search or collections action to resolve a name to its symbol.","on_invalid":"reject","example":"okay_bears","aliases":["collection","collection_symbol","slug"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Pages of `limit` items each; pass page=2 for the next page. Use meta.has_more to know when to stop.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Items per page (snapped to a multiple of 20; 20-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":20,"maximum":100},{"name":"min_price","type":"number","required":false,"description":"Only listings priced at or above this many SOL (must be > 0).","on_invalid":"ignore","example":1,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Only listings priced at or below this many SOL.","on_invalid":"ignore","example":100,"minimum":0}],"returns":"listings[]{token_mint, name, price_sol, seller, rarity_rank_moonrank, rarity_rank_howrare, image_url, attributes[]{trait_type,value}, magiceden_url} + meta{page, has_more}","cacheable":true,"cache_ttl_seconds":30,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"okay_bears","limit":20}},{"name":"tokens","description":"All tokens (NFTs) in a collection (listed or not), paginated. Each: mint address, name, owner, image, list status, price if listed, and traits. Offset pagination via `page`.","required_params":["symbol"],"optional_params":["page","limit"],"params":[{"name":"symbol","type":"string","required":true,"description":"Magic Eden collection symbol — the last path segment of a Magic Eden collection URL (magiceden.io/marketplace/<symbol>), e.g. 'okay_bears', 'famous_fox_federation', 'degods'. Use the search or collections action to resolve a name to its symbol.","on_invalid":"reject","example":"okay_bears","aliases":["collection","collection_symbol","slug"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Pages of `limit` items each; pass page=2 for the next page. Use meta.has_more to know when to stop.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Items per page (snapped to a multiple of 20; 20-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":20,"maximum":100}],"returns":"tokens[]{mint_address, name, owner, image_url, list_status, price_sol, attributes[]{trait_type,value}, magiceden_url} + meta{page, has_more}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"okay_bears"}},{"name":"token","description":"Single NFT / token detail by its Solana mint address: name, collection, current owner, image, all traits, list status and price if listed. Get a mint address from a listings[], tokens[] or activity[] row.","required_params":["mint_address"],"optional_params":[],"params":[{"name":"mint_address","type":"string","required":true,"description":"The NFT's Solana mint address. From a listings[]/tokens[]/activity[] row (token_mint / mint_address).","on_invalid":"reject","example":"9RpvZMKf1qcTsnCPRjGJ8tddzxNusGiYZc9tkS8UhZTA","aliases":["mint","token_mint","token"]}],"returns":"token{mint_address, name, collection_symbol, collection_name, owner, image_url, external_url, list_status, price_sol, attributes[]{trait_type,value}, magiceden_url}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"mint_address":"9RpvZMKf1qcTsnCPRjGJ8tddzxNusGiYZc9tkS8UhZTA"}},{"name":"token_activity","description":"On-chain activity history for a single NFT by mint address: every sale, listing, delisting and bid with type, price (SOL), buyer / seller and block time. Offset pagination via `page`.","required_params":["mint_address"],"optional_params":["page","limit"],"params":[{"name":"mint_address","type":"string","required":true,"description":"The NFT's Solana mint address.","on_invalid":"reject","example":"9RpvZMKf1qcTsnCPRjGJ8tddzxNusGiYZc9tkS8UhZTA","aliases":["mint","token_mint","token"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Pages of `limit` items each; pass page=2 for the next page. Use meta.has_more to know when to stop.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Items per page (snapped to a multiple of 20; 20-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":20,"maximum":100}],"returns":"activity[]{signature, type, source, token_mint, price_sol, buyer, seller, block_time, slot} + meta{page, has_more}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"mint_address":"9RpvZMKf1qcTsnCPRjGJ8tddzxNusGiYZc9tkS8UhZTA"}},{"name":"activity","description":"Recent on-chain activity for a collection: sales, listings, delistings and bids. Each event: type, price (SOL), buyer / seller, token mint and block time. Filter by event type (default: all). Offset pagination via `page`.","required_params":["symbol"],"optional_params":["page","limit","event_type"],"params":[{"name":"symbol","type":"string","required":true,"description":"Magic Eden collection symbol — the last path segment of a Magic Eden collection URL (magiceden.io/marketplace/<symbol>), e.g. 'okay_bears', 'famous_fox_federation', 'degods'. Use the search or collections action to resolve a name to its symbol.","on_invalid":"reject","example":"okay_bears","aliases":["collection","collection_symbol","slug"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Pages of `limit` items each; pass page=2 for the next page. Use meta.has_more to know when to stop.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Items per page (snapped to a multiple of 20; 20-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":20,"maximum":100},{"name":"event_type","type":"enum","required":false,"description":"Filter to one activity type (omit for all).","on_invalid":"ignore","allowed_values":[{"value":"buyNow","label":"Sales (buy now)"},{"value":"list","label":"Listings"},{"value":"delist","label":"Delistings"},{"value":"bid","label":"Bids / offers"},{"value":"cancelBid","label":"Cancelled bids"},{"value":"auctionUpdate","label":"Auction updates"},{"value":"placeBid","label":"Place bid"}],"example":"buyNow","aliases":["type"]}],"returns":"activity[]{signature, type, source, token_mint, collection_symbol, price_sol, buyer, seller, block_time, image_url} + meta{page, has_more}","cacheable":true,"cache_ttl_seconds":30,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"okay_bears","limit":20}},{"name":"attributes","description":"Trait floor prices for a collection — for every trait value (e.g. Background = Yellow), the floor price (SOL) and how many NFTs carry it. Useful for trait-based valuation.","required_params":["symbol"],"optional_params":[],"params":[{"name":"symbol","type":"string","required":true,"description":"Magic Eden collection symbol — the last path segment of a Magic Eden collection URL (magiceden.io/marketplace/<symbol>), e.g. 'okay_bears', 'famous_fox_federation', 'degods'. Use the search or collections action to resolve a name to its symbol.","on_invalid":"reject","example":"okay_bears","aliases":["collection","collection_symbol","slug"]}],"returns":"attributes[]{trait_type, value, count, floor_sol, image_url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"symbol":"okay_bears"}},{"name":"wallet","description":"NFTs held by a Solana wallet address: each token's mint, name, collection, image, list status and price if listed. Offset pagination via `page`.","required_params":["address"],"optional_params":["page","limit"],"params":[{"name":"address","type":"string","required":true,"description":"The Solana wallet address to list NFT holdings for.","on_invalid":"reject","example":"2ZCQ18QjibZZCPfcCesdZ1y2WMmZKd5rKZLyc2sjYGir","aliases":["wallet","wallet_address","owner"]},{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Pages of `limit` items each; pass page=2 for the next page. Use meta.has_more to know when to stop.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Items per page (snapped to a multiple of 20; 20-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":20,"maximum":100}],"returns":"tokens[]{mint_address, name, collection_symbol, collection_name, image_url, list_status, price_sol, attributes[]} + meta{page, has_more}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"address":"2ZCQ18QjibZZCPfcCesdZ1y2WMmZKd5rKZLyc2sjYGir"}},{"name":"popular","description":"Popular / trending Magic Eden collections over a time window — the marketplace leaderboard. Each: symbol, name, floor price (SOL) and all-time volume. Choose a window (1h / 1d / 7d / 30d).","required_params":[],"optional_params":["time_range","limit"],"params":[{"name":"time_range","type":"enum","required":false,"description":"Ranking window (1h / 1d / 7d / 30d).","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"1 hour"},{"value":"1d","label":"1 day"},{"value":"7d","label":"7 days"},{"value":"30d","label":"30 days"}],"default":"1d","example":"1d","aliases":["window","timeRange"]},{"name":"limit","type":"integer","required":false,"description":"Number of collections (Magic Eden allows 50 or 100).","on_invalid":"ignore","allowed_values":[{"value":50,"label":"50"},{"value":100,"label":"100"}],"default":50,"example":50}],"returns":"collections[]{symbol, name, image_url, floor_price_sol, volume_all_sol, magiceden_url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"time_range":"1d"}},{"name":"launchpad","description":"Magic Eden Launchpad collections — upcoming and live primary mints. Each: symbol, name, mint price (SOL), supply size, launch datetime, chain and contract. Offset pagination via `page`.","required_params":[],"optional_params":["page","limit"],"params":[{"name":"page","type":"integer","required":false,"description":"Page number (1-based). Pages of `limit` items each; pass page=2 for the next page. Use meta.has_more to know when to stop.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Items per page (snapped to a multiple of 20; 20-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":20,"maximum":100}],"returns":"collections[]{symbol, name, description, image_url, mint_price_sol, size, launch_datetime, chain_id, contract_address, magiceden_url} + meta{page, has_more}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"search","description":"Search Magic Eden collections by free-text name. Resolves a name to its collection symbol(s): first tries an exact symbol match, then scans popular collections and collection pages for a name/symbol substring match. Returns matching collections (symbol, name, image, categories) — use the returned symbol with the other actions.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Collection name or keyword to search for (e.g. 'bears', 'fox', 'degods').","on_invalid":"reject","example":"bears","aliases":["q","name"]},{"name":"limit","type":"integer","required":false,"description":"Max collections to return (1-50, default 10).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"collections[]{symbol, name, description, image_url, categories[], magiceden_url}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"bears"}}]},{"name":"manomano","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ManoMano — European DIY & home-improvement marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/manomano/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search across a ManoMano storefront. Returns the product rows with price (with and without VAT), reference price, seller, EAN, rating, delivery flags and the technical attribute ids.","required_params":["query"],"optional_params":["country","page","limit","sort","brand","seller","category_id","min_price","max_price","min_rating","free_delivery","relay_delivery","manomano_fulfilment","eco_responsible","in_promo","attributes","resolve_attributes"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in the storefront's own language.","on_invalid":"reject","example":"perceuse sans fil"},{"name":"country","type":"enum","required":false,"description":"Which storefront to search. They are different shops: different catalogue, sellers, prices and currency.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"France"},{"value":"de","label":"Germany"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"gb","label":"United Kingdom"}],"default":"fr","example":"fr","aliases":["storefront","market"]},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Rows per page (max 100).","on_invalid":"ignore","default":24,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Sort order. Non-relevance sorts use the source's own replica indexes and report their own totals.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"rating_desc","label":"Customer rating"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Exact brand name as the source spells it.","on_invalid":"ignore","example":"MAKITA"},{"name":"seller","type":"string","required":false,"description":"Exact merchant display name.","on_invalid":"ignore","example":"Maxoutil"},{"name":"category_id","type":"integer","required":false,"description":"Restrict to a category id at any depth (ids from category/tree).","on_invalid":"ignore","example":1146},{"name":"min_price","type":"number","required":false,"description":"Minimum price, VAT included, storefront currency.","on_invalid":"ignore","example":50},{"name":"max_price","type":"number","required":false,"description":"Maximum price, VAT included.","on_invalid":"ignore","example":200},{"name":"min_rating","type":"number","required":false,"description":"Minimum customer rating. Note ~46 % of rows carry a rating at all, and that varies sharply by category.","on_invalid":"ignore","example":4,"minimum":0,"maximum":5},{"name":"free_delivery","type":"boolean","required":false,"description":"Only offers with free delivery.","on_invalid":"ignore"},{"name":"relay_delivery","type":"boolean","required":false,"description":"Only offers deliverable to a pickup point.","on_invalid":"ignore"},{"name":"manomano_fulfilment","type":"boolean","required":false,"description":"Only offers shipped by ManoMano Fulfilment.","on_invalid":"ignore"},{"name":"eco_responsible","type":"boolean","required":false,"description":"Only offers the source flags as eco-responsible.","on_invalid":"ignore"},{"name":"in_promo","type":"boolean","required":false,"description":"Only offers currently running a promotion.","on_invalid":"ignore"},{"name":"attributes","type":"array","required":false,"description":"Technical attribute filters as '<attribute_id>:<value>'. Ids and their labels come from search/filters.","on_invalid":"reject","example":["84:Sans fil"]},{"name":"resolve_attributes","type":"boolean","required":false,"description":"Attach human-readable names to each row's attribute ids. Costs one extra upstream request.","on_invalid":"ignore","default":false}],"returns":"{results: [...], total_estimated, total_is_exact, page, per_page, query, country, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"perceuse","country":"fr"}},{"name":"product/detail","description":"Full product record: price with and without VAT, reference price, eco-participation, EAN, brand, seller, live stock, delivery promise, the technical attribute table, images, documents and the Q&A. Pass model_id to pin the exact variant a search row referred to.","required_params":[],"optional_params":["model_id","product_id","article_id","url","country","postal_code","with_delivery"],"params":[{"name":"model_id","type":"string","required":false,"description":"The variant key, and the one to prefer: search returns it as model_id and it identifies exactly one variant.","on_invalid":"reject","example":"58497788"},{"name":"product_id","type":"string","required":false,"description":"Offer/product id from search. Resolved upstream to its variant; never pasted into a URL.","on_invalid":"reject","example":"165183914"},{"name":"article_id","type":"integer","required":false,"description":"The article id a product URL ends with. An article can group several variants (up to 7 seen), so on its own it returns the article's DEFAULT variant — check variants_count and pass model_id to pin one.","on_invalid":"reject","example":91537520,"aliases":["id"]},{"name":"url","type":"string","required":false,"description":"A ManoMano product URL; the trailing id is used.","on_invalid":"ignore","example":"https://www.manomano.fr/p/x-91537520","aliases":["product_url"]},{"name":"country","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"fr","label":"France"},{"value":"de","label":"Germany"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"gb","label":"United Kingdom"}],"default":"fr","aliases":["storefront","market"]},{"name":"postal_code","type":"string","required":false,"description":"Compute the delivery promise for this postcode. Without it the source uses its own default.","on_invalid":"ignore","example":"75001"},{"name":"with_delivery","type":"boolean","required":false,"description":"Include the delivery promise (carriers and date windows). One extra upstream request.","on_invalid":"ignore","default":true}],"returns":"{product: {...}} — a single product record","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"article_id":91537520,"country":"fr"}},{"name":"product/offers","description":"Every competing merchant selling one product, with that merchant's own price, VAT split, eco-participation, live stock, minimum quantity and delivery window. This is the marketplace view.","required_params":[],"optional_params":["product_id","article_id","model_id","url","country"],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id from search (`product_id`).","on_invalid":"reject","example":"165183914","aliases":["id"]},{"name":"article_id","type":"integer","required":false,"description":"Article id; resolved to the product id upstream.","on_invalid":"reject","example":91537520},{"name":"model_id","type":"string","required":false,"description":"Model id; resolved to the product id upstream.","on_invalid":"reject","example":"58497788"},{"name":"url","type":"string","required":false,"description":"A ManoMano product URL.","on_invalid":"ignore","aliases":["product_url"]},{"name":"country","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"fr","label":"France"},{"value":"de","label":"Germany"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"gb","label":"United Kingdom"}],"default":"fr","aliases":["storefront","market"]}],"returns":"{product_id, competing_offers_count, offers: [...]} sorted cheapest first","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"165183914","country":"fr"}},{"name":"product/reviews","description":"Customer reviews for a product: rating, text, date, reviewer display name and country, votes and photos.","required_params":[],"optional_params":["article_id","url","country","page","limit","sort","b2b_only"],"params":[{"name":"article_id","type":"integer","required":false,"description":"Article id (from search or product/detail).","on_invalid":"reject","example":91537520,"aliases":["id"]},{"name":"url","type":"string","required":false,"description":"A ManoMano product URL; the trailing id is used.","on_invalid":"ignore","aliases":["product_url"]},{"name":"country","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"fr","label":"France"},{"value":"de","label":"Germany"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"gb","label":"United Kingdom"}],"default":"fr","aliases":["storefront","market"]},{"name":"page","type":"integer","required":false,"description":"","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"rating_desc","label":"Highest rating first"},{"value":"rating_asc","label":"Lowest rating first"},{"value":"most_voted","label":"Most upvoted first"}],"default":"newest"},{"name":"b2b_only","type":"boolean","required":false,"description":"Only reviews left by trade customers.","on_invalid":"ignore","default":false}],"returns":"{reviews: [...], total, offset, limit, has_next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"article_id":91537520}},{"name":"category/browse","description":"Browse a category's product grid as the storefront renders it, with price, seller, rating and stock per row. Paid placements are dropped and counted unless you ask for them.","required_params":["category_id"],"optional_params":["country","category_slug","page","include_sponsored"],"params":[{"name":"category_id","type":"integer","required":true,"description":"Category id from category/tree or a search row.","on_invalid":"reject","example":1146,"aliases":["id"]},{"name":"category_slug","type":"string","required":false,"description":"Optional slug; the id is what resolves.","on_invalid":"ignore","example":"perceuse"},{"name":"country","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"fr","label":"France"},{"value":"de","label":"Germany"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"gb","label":"United Kingdom"}],"default":"fr","aliases":["storefront","market"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The source caps a category at 6 000 products (100 pages of 56).","on_invalid":"ignore","default":1,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Return paid placements too, each flagged is_sponsored.","on_invalid":"ignore","default":false}],"returns":"{category, results: [...], page, per_page, total_estimated, total_reachable, sponsored_dropped}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":1146}},{"name":"category/tree","description":"The storefront's category tree with ids and slugs, up to three levels.","required_params":[],"optional_params":["country","depth"],"params":[{"name":"country","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"fr","label":"France"},{"value":"de","label":"Germany"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"gb","label":"United Kingdom"}],"default":"fr","aliases":["storefront","market"]},{"name":"depth","type":"integer","required":false,"description":"How many levels to return.","on_invalid":"ignore","default":2,"minimum":1,"maximum":3}],"returns":"{categories: [{id, name, slug, children: [...]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"fr"}},{"name":"search/filters","description":"The filters the storefront itself offers for a query, including the technical attribute id -> name table (with units) that turns a search row's numeric attribute ids into readable specs.","required_params":["query"],"optional_params":["country","limit"],"params":[{"name":"query","type":"string","required":true,"description":"The query whose filter set you want.","on_invalid":"reject","example":"perceuse"},{"name":"country","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"fr","label":"France"},{"value":"de","label":"Germany"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"gb","label":"United Kingdom"}],"default":"fr","aliases":["storefront","market"]},{"name":"limit","type":"integer","required":false,"description":"How many attribute filters to return.","on_invalid":"ignore","default":40,"minimum":1,"maximum":100}],"returns":"{attribute_filters: [...], general_filters: [...]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"perceuse"}},{"name":"search/suggest","description":"Autocomplete straight from the storefront: query suggestions, brands, categories and advice articles for a prefix.","required_params":["query"],"optional_params":["country","limit"],"params":[{"name":"query","type":"string","required":true,"description":"A prefix, as typed in the search box.","on_invalid":"reject","example":"perce"},{"name":"country","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"fr","label":"France"},{"value":"de","label":"Germany"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"gb","label":"United Kingdom"}],"default":"fr","aliases":["storefront","market"]},{"name":"limit","type":"integer","required":false,"description":"","on_invalid":"ignore","default":8,"minimum":1,"maximum":20}],"returns":"{suggestions: {query: [...], brand: [...], category: [...], ...}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"perceuse"}}]},{"name":"market-kz","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Market.kz Kazakhstan classifieds","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/market-kz/v1","spec_available":true,"actions":[{"name":"search","description":"Search public Kazakhstan classifieds on market.kz’s current canonical source. Cards contain excerpts; use listing for complete detail.","required_params":[],"optional_params":["category","query","region","price_from","price_to","free","bargain","has_photo","exchange","sort","page","limit"],"params":[{"name":"category","type":"string","required":false,"description":"Published category path, e.g. elektronika or uslugi/stroitelstvo-remont. Omit for all categories.","on_invalid":"reject","example":"elektronika"},{"name":"query","type":"string","required":false,"description":"Source keyword search; omit for an unfiltered category.","on_invalid":"reject","example":"Samsung"},{"name":"region","type":"string","required":false,"description":"Published source region key, e.g. kz/alm/almaty.","on_invalid":"reject","example":"kz/alm/almaty"},{"name":"price_from","type":"integer","required":false,"description":"Source lower price bound in KZT. Ranges match by overlap; not a minimum of every returned range. Excludes free/negotiable mode.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_to","type":"integer","required":false,"description":"Source upper price bound in KZT. Ranges match by overlap.","on_invalid":"reject","example":100000,"minimum":0},{"name":"free","type":"boolean","required":false,"description":"Only source free listings; incompatible with bargain or price bounds.","on_invalid":"reject","default":false},{"name":"bargain","type":"boolean","required":false,"description":"Only source negotiable listings; incompatible with free or price bounds.","on_invalid":"reject","default":false},{"name":"has_photo","type":"boolean","required":false,"description":"Require a source listing photo.","on_invalid":"reject","default":false},{"name":"exchange","type":"boolean","required":false,"description":"Only source listings accepting exchange.","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Source relevance, date or price order.","on_invalid":"reject","allowed_values":[{"value":"relevant","label":"relevant"},{"value":"newest","label":"newest"},{"value":"oldest","label":"oldest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevant"},{"name":"page","type":"integer","required":false,"description":"One-based page; rows past the source total are empty. The maximum is a local safety cap.","on_invalid":"reject","default":1,"minimum":1,"maximum":100000},{"name":"limit","type":"integer","required":false,"description":"Requested organic page window. Services/rentals use a fixed window of 24; requested_limit and effective limit are returned. Maximum 50 is a local cap.","on_invalid":"reject","default":24,"minimum":1,"maximum":50}],"returns":"Main listings, actual source category IDs, asking-price states, public sellers, total and pagination; similar recommendations are not mixed into main matches.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"elektronika","limit":3}},{"name":"listing","description":"Full public listing by source ID or canonical URL; one of id or url is required.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Numeric source listing ID from search.","on_invalid":"reject","example":"123621961"},{"name":"url","type":"string","required":false,"description":"Public market.kz or obyavleniya.kaspi.kz /a/ listing URL. Identity is resolved on the canonical source.","on_invalid":"reject"}],"returns":"Complete description, actual category and parameters, condition when published, asking-price state, media, location, source dates, seller IDs and listing storage status.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"123621961"}}]},{"name":"marktde","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"markt.de API scraper — search Germany's general classifieds (markt.de): ads with price, photos, location and category, full ad detail with the seller's own attribute table, the live category tree with result counts, and German place autocomplete. No account needed; every filter is verified against markt.de's own echo before results are returned; seller contact data is never collected.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/marktde/v1","spec_available":true,"actions":[{"name":"search","description":"Search markt.de classifieds by keyword and/or category, restricted by place + radius, price range, ad type (private / commercial / wanted), price type (fixed / negotiable / free / swap) and sort order. Returns the ads on one page with markt.de's true total. Every filter is confirmed against markt.de's own canonical URL first: a place or category markt.de does not know is REFUSED instead of being silently dropped (which would return the whole catalogue). A search with no matches returns zero rows and ok:true — that is an answer; one with fewer than 20 matches returns exactly those, never markt.de's unrelated fill-up ads.","required_params":[],"optional_params":["query","category","location","radius","price_min","price_max","ad_type","price_type","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, e.g. a product, model or job title. search needs query OR category (or both).","on_invalid":"reject","example":"fahrrad","aliases":["q","keywords"]},{"name":"category","type":"string","required":false,"description":"markt.de category id, from the categories action (e.g. 2000000000 = Fahrzeuge, 2200000000 = Haus & Garten, 2220110000 = Tische). An id markt.de does not know is rejected, not silently ignored.","on_invalid":"reject","example":"2000000000","value_pattern":"\\d{4,12}","aliases":["category_id"]},{"name":"location","type":"string","required":false,"description":"German place name exactly as markt.de spells it — city, district, Landkreis or Bundesland (use the locations action to resolve free text). A place markt.de does not know is rejected, not ignored.","on_invalid":"reject","example":"Berlin","aliases":["geo","city"]},{"name":"radius","type":"integer","required":false,"description":"Search radius in km around location (requires location). 0 = the place itself.","on_invalid":"reject","example":25,"minimum":0,"maximum":300},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR.","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR.","on_invalid":"reject","example":500,"minimum":0},{"name":"ad_type","type":"enum","required":false,"description":"Who placed the ad / what kind of ad it is.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Privatangebot — private seller"},{"value":"commercial","label":"Gewerbliches Angebot — commercial seller"},{"value":"wanted","label":"Gesuch — a wanted ad (someone looking to buy)"}],"example":"private"},{"name":"price_type","type":"enum","required":false,"description":"How the price is meant — markt.de's own Preistyp.","on_invalid":"reject","allowed_values":[{"value":"fixed","label":"Festpreis — fixed price"},{"value":"negotiable","label":"VB — open to offers"},{"value":"best_offer","label":"Bestes Angebot — best offer"},{"value":"free","label":"Zu verschenken — free to collect"},{"value":"swap","label":"Tausch — swap wanted"},{"value":"hourly","label":"Stundensatz — hourly rate (services/jobs)"}],"example":"negotiable"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Neueste Anzeigen — newest first (markt.de default)"},{"value":"price_asc","label":"Preis aufsteigend — cheapest first"},{"value":"price_desc","label":"Preis absteigend — most expensive first"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based result page; 20 ads per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"listings[] — {id, url, title, description, price{amount_eur, currency, formatted, label, negotiable}, location{postal_code, city}, posted, category, image_url, image_count, seller{member_tier, online}, promoted} plus total, page, has_more, next_page, filters_applied, canonical_url","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"fahrrad"}},{"name":"detail","description":"One markt.de ad in full, by ad id or ad URL: title, price (with markt.de's own machine price as a cross-check), full description, the seller's attribute table (e.g. Hersteller / Farbe / Zimmer), category breadcrumb, place, posting time and every photo. A removed or unknown ad returns NOT_FOUND.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"The 8-character ad id — the /a/<id>/ part of an ad URL, and the `id` of every search result. detail needs id OR url.","on_invalid":"reject","example":"62f2411d","aliases":["ad_id","listing_id"]},{"name":"url","type":"string","required":false,"description":"Full markt.de ad URL.","on_invalid":"reject","example":"https://www.markt.de/mifa-klappfahrrad/a/62f2411d/","aliases":["link"]}],"returns":"listing{} — id, url, title, price{amount_eur, formatted, label, machine_eur}, description, location, posted, category_path[], attributes{}, images[], seller{member_tier, member_since, online}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.markt.de/mifa-klappfahrrad/a/62f2411d/"}},{"name":"categories","description":"markt.de's category tree one level at a time, WITH a live ad count per child — so you can pick a `category` id for search and see how many ads it holds. Called with no parent it returns the ten top-level categories; with a parent id it returns that category's children; with a query it returns how the matches for that keyword split across categories.","required_params":[],"optional_params":["parent","query"],"params":[{"name":"parent","type":"string","required":false,"description":"Category id whose children to list (from a previous categories call). Omit for the top level.","on_invalid":"reject","example":"2200000000","value_pattern":"\\d{4,12}","aliases":["category","category_id"]},{"name":"query","type":"string","required":false,"description":"Optional keyword — the counts then describe how that keyword's matches are distributed over the categories.","on_invalid":"reject","example":"fahrrad","aliases":["q"]}],"returns":"categories[] — {id, name, ad_count} plus parent and total","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"parent":"2200000000"}},{"name":"locations","description":"German place autocomplete straight from markt.de: free text in, markt.de's own spellings out (cities, districts, Landkreise, Bundesländer). Feed a returned name to search's `location` — search only accepts places markt.de knows.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Partial or full place name.","on_invalid":"reject","example":"muenchen","aliases":["q","term","location"]}],"returns":"locations[] — {name} in markt.de's ranking order, plus query","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"muenchen"}}]},{"name":"marktplaats","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Marktplaats API — search Dutch and Belgian classifieds (Marktplaats, 2dehands, 2ememain): listings, listing detail, categories and seller inventory","version":"0.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/marktplaats/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword or category search with filters, sort, location, offset pagination (limit=30).","required_params":[],"optional_params":["query","site","l1_category_id","l2_category_id","sort_by","sort_order","price_from","price_to","postcode","distance_meters","offset"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword. (search needs query OR l1/l2_category_id.)","on_invalid":"reject","example":"iphone 13"},{"name":"site","type":"enum","required":false,"description":"Marketplace edition — each is a separate site/country.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands (marktplaats.nl)"},{"value":"be_nl","label":"Belgium - Dutch (2dehands.be)"},{"value":"be_fr","label":"Belgium - French (2ememain.be)"}],"default":"nl","example":"nl"},{"name":"l1_category_id","type":"integer","required":false,"description":"Top-level category id (discover via the categories action).","on_invalid":"ignore","example":91},{"name":"l2_category_id","type":"integer","required":false,"description":"Sub-category id under l1 (discover via the categories action).","on_invalid":"ignore"},{"name":"sort_by","type":"enum","required":false,"description":"Sort field. Common Adevinta keys shown; others accepted.","on_invalid":"ignore","allowed_values":[{"value":"OPTIMIZED","label":"Relevance (default)"},{"value":"PRICE","label":"Price"},{"value":"DATE","label":"Date posted"}],"example":"PRICE"},{"name":"sort_order","type":"enum","required":false,"description":"Sort direction.","on_invalid":"ignore","allowed_values":[{"value":"INCREASING","label":"Ascending"},{"value":"DECREASING","label":"Descending"}],"example":"INCREASING"},{"name":"price_from","type":"integer","required":false,"description":"Minimum price IN CENTS (Marktplaats uses cents: 1000 = EUR 10).","on_invalid":"ignore","example":1000},{"name":"price_to","type":"integer","required":false,"description":"Maximum price IN CENTS (5000 = EUR 50).","on_invalid":"ignore","example":50000},{"name":"postcode","type":"string","required":false,"description":"Postal code center for a distance search.","on_invalid":"reject","example":"1011"},{"name":"distance_meters","type":"integer","required":false,"description":"Search radius in METERS around postcode (10000 = 10 km).","on_invalid":"ignore","example":10000},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N, page size 30). Page with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"listings[] (price, condition, location, seller, images), facets, total, offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone","site":"nl"}},{"name":"listing","description":"Listing detail by item_id and/or vip_url; enriched with full product details (price, availability, specs).","required_params":[],"optional_params":["item_id","vip_url","site"],"params":[{"name":"item_id","type":"string","required":false,"description":"Marktplaats item id (e.g. m2435372360) — take a CURRENT one from the search action's item_id; ids expire when the ad closes. (listing needs item_id OR vip_url; vip_url wins if both are given.)","on_invalid":"reject"},{"name":"vip_url","type":"string","required":false,"description":"Site-relative VIP page path (from search's vip_url) — the stable locator, and the one to prefer.","on_invalid":"reject","example":"/v/telecommunicatie/mobiele-telefoons-apple-iphone/a1517165634-apple-iphone-14-128gb-4-gratis-accessoires-accu-tot-100"},{"name":"site","type":"enum","required":false,"description":"Marketplace edition — each is a separate site/country.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands (marktplaats.nl)"},{"value":"be_nl","label":"Belgium - Dutch (2dehands.be)"},{"value":"be_fr","label":"Belgium - French (2ememain.be)"}],"default":"nl","example":"nl"}],"returns":"listing{} — search row merged with full product details (price, availability, images)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"vip_url":"/v/telecommunicatie/mobiele-telefoons-apple-iphone/a1517165634-apple-iphone-14-128gb-4-gratis-accessoires-accu-tot-100","site":"nl"}},{"name":"categories","description":"Category tree from search facets, or browse a category (l1/l2) with listings.","required_params":[],"optional_params":["query","site","l1_category_id","l2_category_id","offset"],"params":[{"name":"query","type":"string","required":false,"description":"Optional keyword to scope the category tree.","on_invalid":"reject","example":"telefoon"},{"name":"site","type":"enum","required":false,"description":"Marketplace edition — each is a separate site/country.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands (marktplaats.nl)"},{"value":"be_nl","label":"Belgium - Dutch (2dehands.be)"},{"value":"be_fr","label":"Belgium - French (2ememain.be)"}],"default":"nl","example":"nl"},{"name":"l1_category_id","type":"integer","required":false,"description":"Browse this top-level category's listings.","on_invalid":"ignore","example":91},{"name":"l2_category_id","type":"integer","required":false,"description":"Browse this sub-category's listings.","on_invalid":"ignore"},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N, page size 30). Page with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"search_category_options, categories_by_id, facet_categories, listings[], sort_options","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"nl"}},{"name":"seller_listings","description":"Active listings for a seller; offset pagination via seller-name LRP search (name auto-resolved from profile when omitted).","required_params":["seller_id"],"optional_params":["seller_name","site","offset"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"Marktplaats seller id — take it from any search result's seller.seller_id (search rows carry seller.seller_name too).","on_invalid":"ignore","example":57429132},{"name":"seller_name","type":"string","required":false,"description":"Seller display name from search's seller.seller_name. Auto-resolved when omitted, but that costs a ~13s category scan — pass it and the call returns in ~1s.","on_invalid":"reject","example":"Mobisite.nl"},{"name":"site","type":"enum","required":false,"description":"Marketplace edition — each is a separate site/country.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"Netherlands (marktplaats.nl)"},{"value":"be_nl","label":"Belgium - Dutch (2dehands.be)"},{"value":"be_fr","label":"Belgium - French (2ememain.be)"}],"default":"nl","example":"nl"},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N, page size 30). Page with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"listings[] for this seller, seller_id, seller_name, total, has_more, next_offset","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":57429132,"seller_name":"Mobisite.nl","site":"nl"}}]},{"name":"marocannonces","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"MarocAnnonces Morocco Classifieds","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/marocannonces/v1","spec_available":true,"actions":[{"name":"search","description":"Search MarocAnnonces.com, Morocco's general classifieds site: job offers and CVs, used cars, apartments and villas for sale or rent, phones, computers, household goods and services. Free text plus the site's own filters: category, city, price range, photos only; for used cars make, year, mileage and fuel; for apartments bedrooms, bathrooms and surface. Nothing is required: no parameters browses the whole site newest first.","required_params":[],"optional_params":["query","category","city","min_price","max_price","with_photos","make","year_min","year_max","mileage_min","mileage_max","fuel","bedrooms","bathrooms","surface_min","surface_max","page","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keywords as a Moroccan buyer types them (French, Arabic or Darija), e.g. `comptable`, `dacia logan`, `appartement agdal`.","on_invalid":"reject","example":"dacia logan","aliases":["q","keyword","kw"]},{"name":"category","type":"string","required":false,"description":"Category id or French name, e.g. `309` / `Offres emploi`, `314` / `Voitures occasion`, `315` (apartments for sale), `321` (apartments for rent), `359` (mobile phones). Top-level ids (304 Emploi, 15 Auto-Moto, 16 Vente immobilier, 305 Location immobilier, 307 Multi Services, 308 Ventes diverses, 306 Multimédia) cover all their subcategories. Full list: the `categories` action.","on_invalid":"reject","example":"314","aliases":["cat","category_id"]},{"name":"city","type":"string","required":false,"description":"City id or name as MarocAnnonces spells it (Casablanca, Rabat, Marrakech, Tanger, Fès, Agadir …; accents optional). Full list: the `cities` action.","on_invalid":"reject","example":"Casablanca","aliases":["ville","city_id"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in Moroccan dirhams (MAD).","on_invalid":"reject","example":50000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in Moroccan dirhams (MAD).","on_invalid":"reject","example":150000,"minimum":0},{"name":"with_photos","type":"boolean","required":false,"description":"Only listings that have at least one photo.","on_invalid":"reject","default":false,"example":true},{"name":"make","type":"string","required":false,"description":"Cars only (category 314): make as the site lists it, e.g. `Dacia`, `Renault`, `Volkswagen`, `Mercedes-Benz`. Full list: the `cities`/`categories` actions do not carry it; the error message for an unknown make lists all 55.","on_invalid":"reject","example":"Dacia","aliases":["brand","marque"]},{"name":"year_min","type":"integer","required":false,"description":"Cars only (314): model year from.","on_invalid":"reject","example":2015},{"name":"year_max","type":"integer","required":false,"description":"Cars only (314): model year up to.","on_invalid":"reject","example":2022},{"name":"mileage_min","type":"integer","required":false,"description":"Cars only (314): kilometres from.","on_invalid":"reject","example":0},{"name":"mileage_max","type":"integer","required":false,"description":"Cars only (314): kilometres up to.","on_invalid":"reject","example":150000},{"name":"fuel","type":"enum","required":false,"description":"Cars only (314): fuel type.","on_invalid":"reject","allowed_values":[{"value":"Diesel","label":"Diesel"},{"value":"Essence","label":"Petrol (Essence)"}],"example":"Diesel"},{"name":"bedrooms","type":"string","required":false,"description":"Apartments only (315 sale / 321 rent): number of bedrooms, 1-5, or `+5`.","on_invalid":"reject","example":"3","aliases":["rooms"]},{"name":"bathrooms","type":"string","required":false,"description":"Apartments only (315 / 321): number of bathrooms, 1-4, or `+4`.","on_invalid":"reject","example":"2"},{"name":"surface_min","type":"integer","required":false,"description":"Apartments only (315 / 321): surface from, m².","on_invalid":"reject","example":60},{"name":"surface_max","type":"integer","required":false,"description":"Apartments only (315 / 321): surface up to, m².","on_invalid":"reject","example":150},{"name":"page","type":"integer","required":false,"description":"1-based page, 20 listings per page. MarocAnnonces serves at most 100 pages (2,000 rows) of any search; `has_more` says whether a next page exists.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. Seller names and phone numbers are returned exactly as the page publishes them.","on_invalid":"reject","default":true,"example":true}],"returns":"{page, has_more, page_ceiling_reached, filters_applied, listings[]}. The site does not publish a result count on search pages, so no total is returned. Each listing: id, url, title, price_mad (null when the ad shows no price), price_text, currency, city, district, category_id, category_name, parent_category_id, parent_category_name, image, published_text, published_at (Moroccan local time; null on paid placements, which show no date), is_premium (paid placement shown above the results).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"dacia","category":"314"}},{"name":"listing","description":"One MarocAnnonces ad in full: title, full description, price, every photo, city and district, publication date, view count, all structured attributes (make, model, year, mileage, fuel, bedrooms, surface, job sector, contract, education level …), the advertiser's name and phone number, the recruiter or shop page when there is one, and for job offers the posting's validity date.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"MarocAnnonces listing number, as `search` returns it in `id`.","on_invalid":"reject","example":"10464958","aliases":["listing_id","ad_id"]},{"name":"url","type":"string","required":false,"description":"Or the listing URL (marocannonces.com/categorie/…/annonce/<id>/….html).","on_invalid":"reject","example":"https://www.marocannonces.com/categorie/314/Voitures-occasion/annonce/10464958/Dacia-logan.html"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. Seller names and phone numbers are returned exactly as the page publishes them.","on_invalid":"reject","default":true,"example":true}],"returns":"{id, url, title, price_mad, price_text, currency, category_id, category_name, parent_category_id, parent_category_name, city, city_id, district, published_text, published_at, views, description, attributes[{label, value}], attributes_map, images[], images_count, seller{name, phone, phone_masked, shop{name, url, logo, description}}, job{date_posted, valid_through, employment_type, industry, hiring_organization, salary_text, salary_unit, region}}. Either `id` or `url` is required.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"7675527"}},{"name":"categories","description":"MarocAnnonces' category tree: 7 top-level categories and 53 subcategories with the ids `search` accepts.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"string","required":false,"description":"Only this top-level category and its subcategories (id or name).","on_invalid":"reject","example":"304"}],"returns":"{category_count, categories[{id, name, subcategories[{id, name}]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"304"}},{"name":"cities","description":"The 81 Moroccan cities MarocAnnonces filters on, with their ids.","required_params":[],"optional_params":[],"params":[],"returns":"{city_count, cities[{id, name}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"maschinensucher","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Maschinensucher / Machineseeker API — live used-industrial-machinery marketplace data from Europe's largest second-hand machine marketplace (maschinensucher.de, machineseeker.com): 200,000 listings from 8,100+ dealers across metalworking and machine tools, construction plant, forklifts, woodworking, agricultural, food-processing, packaging, printing, plastics and recycling machinery. Search and filter on the fields a pricing or sourcing desk actually needs — machine type, manufacturer, model, year of construction, operating hours, price band, seller country and region — then pull one listing in full: price with its VAT treatment and incoterm, condition, every technical property the seller typed, delivery and payment terms, auction buyer's premium, the seller's town, country and trust seal, and the full description. Plus the category tree, live facet counts, autocomplete and the dealer directory. No login, no API key.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/maschinensucher/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse the marketplace. Combine a keyword with any of the typed filters the source supports natively — category, manufacturer, machine type, condition, price band, year of construction, operating hours, seller country and region, rental-only, price-published-only — and sort by price, year, listing date or update. Returns up to 25 rows a page with the price (and its VAT and incoterm wording), year, operating hours, condition, seller country and every property the result card prints. 🔴 Depth is capped by the source at 8 pages = 200 rows per query, so narrow rather than page; the filters are measured to bite hard (1,157 rows → 123 by manufacturer, → 269 by a 6-year window, → 178 by an operating-hour band).","required_params":[],"optional_params":["market","query","category_id","manufacturer","machine_type","condition","year_min","year_max","operating_hours_min","operating_hours_max","price_min","price_max","with_price_only","country","region","rental_only","description_contains","listing_id","reference_number","sort","page","include_facets","include_description"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Machineseeker host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 22811490 is EUR 49,900 on all six, machineseeker.co.uk included — the site does not convert currency). Use 'de' for German wording and 'com' for English wording. The wider Machineseeker network has 50+ further hosts; only these six have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — maschinensucher.de, German labels (the main site)"},{"value":"at","label":"Austria — maschinensucher.at, German labels"},{"value":"ch","label":"Switzerland — maschinensucher.ch, German labels"},{"value":"com","label":"International — machineseeker.com, English labels"},{"value":"gb","label":"United Kingdom — machineseeker.co.uk, English labels"},{"value":"ie","label":"Ireland — machineseeker.ie, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as typed into the site's own search box: a machine type ('bagger', 'drehmaschine', 'excavator'), a manufacturer, a model, or several words. Either `query` or `category_id` is the normal starting point; calling with neither walks the whole catalogue, and `meta.total` will say so. 🔴 A MULTI-WORD QUERY WIDENS, IT DOES NOT NARROW: the source splits on spaces and hyphens and matches any token, so adding words adds results. Measured on one run: 'machine' 64,678 · 'anywhere' 142 · 'zzz' 4 · and 'zzz-no-such-machine-anywhere-xyz' 67,890, roughly their union. A single unmatched word is an honest empty answer ('xyzzyplughfoo' → total 0, zero rows). To narrow, use `category_id`, `machine_type`, `manufacturer` or `description_contains` rather than a longer phrase.","on_invalid":"reject","example":"bagger","aliases":["q","keyword","search_word"]},{"name":"category_id","type":"integer","required":false,"description":"Browse one category instead of searching, using the site's own numeric category id (105 = excavators, 43 = lathes, 42 = forklifts, 13 = packaging machines, 2 = metalworking & machine tools). Works for leaf categories too, not only the 40-odd top ones. Get the ids from the `categories` action or from any `ci-<id>` URL. Can be combined with `query` and every filter.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]},{"name":"manufacturer","type":"string","required":false,"description":"Manufacturer, spelled exactly as the source's own facet spells it ('Caterpillar', 'Liebherr', 'Komatsu', 'Wacker Neuson', 'DOOSAN' — the case is the source's). Pass a comma-separated list or a JSON array for several. Read the available spellings out of `facets.manufacturers` on an unfiltered call. Measured to bite: query=bagger 1,157 rows → 123 for Caterpillar.","on_invalid":"reject","example":"Caterpillar","aliases":["brand","manufacturers"]},{"name":"machine_type","type":"string","required":false,"description":"The machine-type name in that market's language, as printed on the first line of every result ('Kettenbagger', 'Abbruchbagger', 'CNC-Drehmaschine'). This is a narrower filter than `query` because it matches the typed field rather than the whole listing. Measured to bite: 1,157 → 158 for 'Kettenbagger'. The `suggest` action returns valid values for a prefix.","on_invalid":"reject","example":"Kettenbagger"},{"name":"condition","type":"enum","required":false,"description":"Condition class. Pass a comma-separated list for several. 🔴 An unknown value is NOT an error on this source — it is silently dropped and you get the unfiltered catalogue with a '0 matches' headline, so this engine validates the value instead of forwarding it. Measured to bite: 1,157 → 895 used, 256 new.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used — the bulk of the catalogue (895 of 1,157 on a measured query)"},{"value":"new","label":"New / unused (256 of 1,157)"},{"value":"ex-display machine","label":"Ex-display or demonstration machine"},{"value":"defective","label":"Defective / for parts"}],"example":"used","aliases":["conditions"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. Plain year — this engine converts it to the unix timestamp the site's own select carries, which is why the filter actually bites here: sending the bare year to the site answers HTTP 200 with a '0 matches' headline and 25 rows that have no year at all. Measured: year_min=2024 → 219 of 1,157 and every row on page 1 is 2024-2026.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100,"aliases":["manufactured_from","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive (measured: year_max=2000 returns rows up to and including 2000). Same timestamp conversion as `year_min`.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["manufactured_to","year_to"]},{"name":"operating_hours_min","type":"integer","required":false,"description":"Lowest operating-hour reading to include, in hours. This is the field a used-plant buyer prices on, and the source filters on it natively. Measured to bite: query=bagger 1,157 → 178 for 0-2,000 h and every returned reading was under 2,000 h.","on_invalid":"reject","example":0,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Highest operating-hour reading to include, in hours. Measured to bite: 1,157 → 119 for 10,000-99,999 h. Listings that publish no reading are excluded by the source when either bound is set.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["hours_max"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, in EUR (every price on this marketplace is EUR, on every host). Measured to bite: 1,157 → 430 for 10,000-50,000.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, in EUR. Combine with `price_min` for a band; the source excludes the price-on-request listings from a price-filtered result, so pair this with `with_price_only=false` only when you want them back in an unfiltered call.","on_invalid":"reject","example":50000,"minimum":0},{"name":"with_price_only","type":"boolean","required":false,"description":"Only listings that publish a price. Worth knowing why it exists: 122 of 313 cards in a 12-category sweep carry no price at all but a 'price on request' button, and those come back with price=null and price_on_request=true. Measured to bite: 1,157 → 855.","on_invalid":"reject","default":false,"example":true,"aliases":["has_price"]},{"name":"country","type":"string","required":false,"description":"Seller country as an ISO-3166 alpha-2 code, UPPER CASE ('DE', 'NL', 'ES', 'TR', 'AT', 'PL', 'BE', 'FR', 'IT', 'CH', 'GB'). Comma-separated for several. 🔴 The source is case-sensitive and silently drops 'de' — this engine upper-cases it for you and rejects anything that is not two letters. Measured to bite: 1,157 → 646 for DE, 117 for NL. `facets.countries` lists the codes that actually have stock for your query.","on_invalid":"reject","example":"DE","value_pattern":"[A-Za-z]{2}(?:\\s*,\\s*[A-Za-z]{2})*","aliases":["countries"]},{"name":"region","type":"string","required":false,"description":"Sub-national region, spelled with the source's own NAME, not a code: 'Bayern', 'Nordrhein-Westfalen', 'Baden-Württemberg'. 🔴 Sending 'BY' is silently dropped by the source. Requires `country` (the source nests regions under a country), and `facets.regions` lists the valid names with counts for your query.","on_invalid":"reject","example":"Bayern"},{"name":"rental_only","type":"boolean","required":false,"description":"Only machines offered for rent rather than for sale. Measured to bite: query=bagger 1,157 → 38.","on_invalid":"reject","default":false,"example":true,"aliases":["is_rental"]},{"name":"description_contains","type":"string","required":false,"description":"Extra keyword matched against the listing's free-text description only, on top of `query`. This is how you find equipment detail the typed fields do not carry ('hydraulik', 'klimaanlage', 'CE'). Measured to bite: 1,157 → 64.","on_invalid":"reject","example":"hydraulik"},{"name":"listing_id","type":"string","required":false,"description":"Look one listing up by its id through the search surface (the `detail` action is the fuller answer). 🔴 The result page then reports '(1)' and still renders 25 cards — 24 of them unrelated filler under a 'further results' heading. This engine cuts them, so you get exactly the one row.","on_invalid":"reject","example":"22811490","value_pattern":"A?\\d{1,12}"},{"name":"reference_number","type":"string","required":false,"description":"The seller's or auction's own reference number, as printed in a listing's offer details. Measured: 'AUC-2609172' returns exactly its one listing.","on_invalid":"reject","example":"AUC-2609172"},{"name":"sort","type":"enum","required":false,"description":"Result order; each value maps to the source's own sort field, so the order is the site's and is not re-sorted here. 🔴 The site also offers a distance sort; it is deliberately NOT exposed, because it sorts by distance from the exit IP the request happened to leave through, which would make two identical calls return different orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's own relevance order (its default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Newest listing first (by the date it was put online)"},{"value":"oldest","label":"Oldest listing first"},{"value":"year_desc","label":"Newest year of construction first"},{"value":"year_asc","label":"Oldest year of construction first"},{"value":"updated_desc","label":"Most recently updated listing first"},{"value":"updated_asc","label":"Least recently updated first"},{"value":"manufacturer_asc","label":"Manufacturer A→Z"},{"value":"manufacturer_desc","label":"Manufacturer Z→A"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number, 25 rows a page. 🔴 Only 8 pages = 200 rows are retrievable per query however large `total` is: page 9 answers HTTP 404 for a 1,157-row query and for a 31,884-row one alike (it does not silently repeat the last page). To go deeper, narrow — category, manufacturer, year, country, price and operating hours all bite. `meta.pagination` publishes last_page, retrievable_max and has_more.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":8},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the source's own live facet counts for this query (categories, manufacturers, countries, regions, conditions, radius bands), which is how you find the exact spelling a filter wants and how much stock each value has. The source publishes its top 15 per group.","on_invalid":"reject","default":false,"example":true},{"name":"include_description","type":"boolean","required":false,"description":"Include each row's description preview. It is the seller's own prose and often carries equipment detail the typed fields do not. One machine-generated decoy line is injected by the source on every render and is removed here; the count removed is reported per row as description_decoy_lines_removed.","on_invalid":"reject","default":true,"example":true}],"returns":"listings[]: listing_id, url, listing_type (classified | auction | auction_external), machine_type, manufacturer, model, year, condition, functionality, operating_hours, operating_hours_unit, price, currency, price_display, price_on_request, price_previous, discount_pct, price_terms, price_type (fixed | negotiable), vat (excluded | included | not_applicable), incoterm, location_city, location_country, location_country_code, image, image_count, seller_has_trust_seal, specs[] (every property the card prints, with the source's own label plus a parsed number and unit) and description_preview. Note on country: `location_country_code` is always present (it comes from the flag the card always renders), while `location_country` is the source's own localized country NAME and is empty on the rows where the source leaves its own title attribute blank — measured 29 of 150 rows. Filter and group on the code. meta carries total, total_is_rounded, pagination (page, page_size, last_page, retrievable_max, has_more), filters_applied, facets and any warnings.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"bagger","market":"de","page":1}},{"name":"detail","description":"One listing in full, by id. Returns the machine (type, manufacturer, model, year, condition, functionality, operating hours), the price with its previous price, VAT treatment and incoterm, every technical property the seller typed — grouped the way the source groups them, each with a parsed number and unit — the boolean equipment badges, the delivery block (availability, delivery terms, dismantling, pickup and shipping costs), the payment block (an auction's buyer's premium, payment terms and methods), the offer block (listing code, reference number, last update), the seller's town, country, member-since year, listings online and trust seal, the geo coordinates the page's own map uses, the category breadcrumb and every gallery image. The price is cross-checked against the page's own schema.org product data and any disagreement is reported, not hidden.","required_params":["listing_id"],"optional_params":["market"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The listing id, as returned in `listing_id` on every search row, as the last path segment of a listing URL (…/sany-sy265c/i-22811490) or as the 'Inserat-ID / Listing ID' the page prints with an A in front (A22811490). All three forms and a full URL are accepted. A dead id answers NOT_FOUND, never an empty success.","on_invalid":"reject","example":"22811490","value_pattern":"(?:A|a)?\\d{1,12}|https?://\\S+","aliases":["id","ad_id"]},{"name":"market","type":"enum","required":false,"description":"Which Machineseeker host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 22811490 is EUR 49,900 on all six, machineseeker.co.uk included — the site does not convert currency). Use 'de' for German wording and 'com' for English wording. The wider Machineseeker network has 50+ further hosts; only these six have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — maschinensucher.de, German labels (the main site)"},{"value":"at","label":"Austria — maschinensucher.at, German labels"},{"value":"ch","label":"Switzerland — maschinensucher.ch, German labels"},{"value":"com","label":"International — machineseeker.com, English labels"},{"value":"gb","label":"United Kingdom — machineseeker.co.uk, English labels"},{"value":"ie","label":"Ireland — machineseeker.ie, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]}],"returns":"listing{} with machine, price, specs[], spec_groups{}, features[], delivery{}, payment{}, offer{}, seller{}, location{}, category{}, images[], description and price_witness{} (the schema.org price beside the printed one, with agreed=true/false).","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"22811490","market":"de"}},{"name":"categories","description":"The marketplace's own category tree with live per-category listing counts: the 45 top-level sectors (metalworking & machine tools, woodworking, construction plant, forklifts, food technology, packaging, agricultural…) with the numeric ids every other action's `category_id` takes. Pass a `category_id` to drill into that sector's sub-categories, which is how you get from 7,593 construction machines to the 803 excavators or the 2,049 access platforms. Every count is the source's own live figure, not an estimate.","required_params":[],"optional_params":["market","category_id"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Machineseeker host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 22811490 is EUR 49,900 on all six, machineseeker.co.uk included — the site does not convert currency). Use 'de' for German wording and 'com' for English wording. The wider Machineseeker network has 50+ further hosts; only these six have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — maschinensucher.de, German labels (the main site)"},{"value":"at","label":"Austria — maschinensucher.at, German labels"},{"value":"ch","label":"Switzerland — maschinensucher.ch, German labels"},{"value":"com","label":"International — machineseeker.com, English labels"},{"value":"gb","label":"United Kingdom — machineseeker.co.uk, English labels"},{"value":"ie","label":"Ireland — machineseeker.ie, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"category_id","type":"integer","required":false,"description":"Browse one category instead of searching, using the site's own numeric category id (105 = excavators, 43 = lathes, 42 = forklifts, 13 = packaging machines, 2 = metalworking & machine tools). Works for leaf categories too, not only the 40-odd top ones. Get the ids from the `categories` action or from any `ci-<id>` URL. Can be combined with `query` and every filter.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]}],"returns":"categories[]: category_id, name, url, count, parent_id. meta.level says whether these are the top sectors or one sector's children, and meta.listings_total is their counts added up.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"de"}},{"name":"facets","description":"The source's own live filter counts for a query: which categories, manufacturers, countries, regions and conditions have stock and how much, plus the distance bands. This is how you learn the exact spelling a filter wants (the source is case-sensitive and wants region NAMES, not codes) and how to narrow a query that is deeper than the 200-row retrievable ceiling. The source publishes its top 15 per group.","required_params":[],"optional_params":["market","query","category_id","manufacturer","machine_type","condition","year_min","year_max","operating_hours_min","operating_hours_max","price_min","price_max","with_price_only","country","region","rental_only","description_contains","sort"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Machineseeker host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 22811490 is EUR 49,900 on all six, machineseeker.co.uk included — the site does not convert currency). Use 'de' for German wording and 'com' for English wording. The wider Machineseeker network has 50+ further hosts; only these six have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — maschinensucher.de, German labels (the main site)"},{"value":"at","label":"Austria — maschinensucher.at, German labels"},{"value":"ch","label":"Switzerland — maschinensucher.ch, German labels"},{"value":"com","label":"International — machineseeker.com, English labels"},{"value":"gb","label":"United Kingdom — machineseeker.co.uk, English labels"},{"value":"ie","label":"Ireland — machineseeker.ie, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as typed into the site's own search box: a machine type ('bagger', 'drehmaschine', 'excavator'), a manufacturer, a model, or several words. Either `query` or `category_id` is the normal starting point; calling with neither walks the whole catalogue, and `meta.total` will say so. 🔴 A MULTI-WORD QUERY WIDENS, IT DOES NOT NARROW: the source splits on spaces and hyphens and matches any token, so adding words adds results. Measured on one run: 'machine' 64,678 · 'anywhere' 142 · 'zzz' 4 · and 'zzz-no-such-machine-anywhere-xyz' 67,890, roughly their union. A single unmatched word is an honest empty answer ('xyzzyplughfoo' → total 0, zero rows). To narrow, use `category_id`, `machine_type`, `manufacturer` or `description_contains` rather than a longer phrase.","on_invalid":"reject","example":"bagger","aliases":["q","keyword","search_word"]},{"name":"category_id","type":"integer","required":false,"description":"Browse one category instead of searching, using the site's own numeric category id (105 = excavators, 43 = lathes, 42 = forklifts, 13 = packaging machines, 2 = metalworking & machine tools). Works for leaf categories too, not only the 40-odd top ones. Get the ids from the `categories` action or from any `ci-<id>` URL. Can be combined with `query` and every filter.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]},{"name":"manufacturer","type":"string","required":false,"description":"Manufacturer, spelled exactly as the source's own facet spells it ('Caterpillar', 'Liebherr', 'Komatsu', 'Wacker Neuson', 'DOOSAN' — the case is the source's). Pass a comma-separated list or a JSON array for several. Read the available spellings out of `facets.manufacturers` on an unfiltered call. Measured to bite: query=bagger 1,157 rows → 123 for Caterpillar.","on_invalid":"reject","example":"Caterpillar","aliases":["brand","manufacturers"]},{"name":"machine_type","type":"string","required":false,"description":"The machine-type name in that market's language, as printed on the first line of every result ('Kettenbagger', 'Abbruchbagger', 'CNC-Drehmaschine'). This is a narrower filter than `query` because it matches the typed field rather than the whole listing. Measured to bite: 1,157 → 158 for 'Kettenbagger'. The `suggest` action returns valid values for a prefix.","on_invalid":"reject","example":"Kettenbagger"},{"name":"condition","type":"enum","required":false,"description":"Condition class. Pass a comma-separated list for several. 🔴 An unknown value is NOT an error on this source — it is silently dropped and you get the unfiltered catalogue with a '0 matches' headline, so this engine validates the value instead of forwarding it. Measured to bite: 1,157 → 895 used, 256 new.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used — the bulk of the catalogue (895 of 1,157 on a measured query)"},{"value":"new","label":"New / unused (256 of 1,157)"},{"value":"ex-display machine","label":"Ex-display or demonstration machine"},{"value":"defective","label":"Defective / for parts"}],"example":"used","aliases":["conditions"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. Plain year — this engine converts it to the unix timestamp the site's own select carries, which is why the filter actually bites here: sending the bare year to the site answers HTTP 200 with a '0 matches' headline and 25 rows that have no year at all. Measured: year_min=2024 → 219 of 1,157 and every row on page 1 is 2024-2026.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100,"aliases":["manufactured_from","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive (measured: year_max=2000 returns rows up to and including 2000). Same timestamp conversion as `year_min`.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["manufactured_to","year_to"]},{"name":"operating_hours_min","type":"integer","required":false,"description":"Lowest operating-hour reading to include, in hours. This is the field a used-plant buyer prices on, and the source filters on it natively. Measured to bite: query=bagger 1,157 → 178 for 0-2,000 h and every returned reading was under 2,000 h.","on_invalid":"reject","example":0,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Highest operating-hour reading to include, in hours. Measured to bite: 1,157 → 119 for 10,000-99,999 h. Listings that publish no reading are excluded by the source when either bound is set.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["hours_max"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, in EUR (every price on this marketplace is EUR, on every host). Measured to bite: 1,157 → 430 for 10,000-50,000.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, in EUR. Combine with `price_min` for a band; the source excludes the price-on-request listings from a price-filtered result, so pair this with `with_price_only=false` only when you want them back in an unfiltered call.","on_invalid":"reject","example":50000,"minimum":0},{"name":"with_price_only","type":"boolean","required":false,"description":"Only listings that publish a price. Worth knowing why it exists: 122 of 313 cards in a 12-category sweep carry no price at all but a 'price on request' button, and those come back with price=null and price_on_request=true. Measured to bite: 1,157 → 855.","on_invalid":"reject","default":false,"example":true,"aliases":["has_price"]},{"name":"country","type":"string","required":false,"description":"Seller country as an ISO-3166 alpha-2 code, UPPER CASE ('DE', 'NL', 'ES', 'TR', 'AT', 'PL', 'BE', 'FR', 'IT', 'CH', 'GB'). Comma-separated for several. 🔴 The source is case-sensitive and silently drops 'de' — this engine upper-cases it for you and rejects anything that is not two letters. Measured to bite: 1,157 → 646 for DE, 117 for NL. `facets.countries` lists the codes that actually have stock for your query.","on_invalid":"reject","example":"DE","value_pattern":"[A-Za-z]{2}(?:\\s*,\\s*[A-Za-z]{2})*","aliases":["countries"]},{"name":"region","type":"string","required":false,"description":"Sub-national region, spelled with the source's own NAME, not a code: 'Bayern', 'Nordrhein-Westfalen', 'Baden-Württemberg'. 🔴 Sending 'BY' is silently dropped by the source. Requires `country` (the source nests regions under a country), and `facets.regions` lists the valid names with counts for your query.","on_invalid":"reject","example":"Bayern"},{"name":"rental_only","type":"boolean","required":false,"description":"Only machines offered for rent rather than for sale. Measured to bite: query=bagger 1,157 → 38.","on_invalid":"reject","default":false,"example":true,"aliases":["is_rental"]},{"name":"description_contains","type":"string","required":false,"description":"Extra keyword matched against the listing's free-text description only, on top of `query`. This is how you find equipment detail the typed fields do not carry ('hydraulik', 'klimaanlage', 'CE'). Measured to bite: 1,157 → 64.","on_invalid":"reject","example":"hydraulik"},{"name":"sort","type":"enum","required":false,"description":"Result order; each value maps to the source's own sort field, so the order is the site's and is not re-sorted here. 🔴 The site also offers a distance sort; it is deliberately NOT exposed, because it sorts by distance from the exit IP the request happened to leave through, which would make two identical calls return different orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's own relevance order (its default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Newest listing first (by the date it was put online)"},{"value":"oldest","label":"Oldest listing first"},{"value":"year_desc","label":"Newest year of construction first"},{"value":"year_asc","label":"Oldest year of construction first"},{"value":"updated_desc","label":"Most recently updated listing first"},{"value":"updated_asc","label":"Least recently updated first"},{"value":"manufacturer_asc","label":"Manufacturer A→Z"},{"value":"manufacturer_desc","label":"Manufacturer Z→A"}],"default":"relevance","example":"price_asc"}],"returns":"facets{categories[], manufacturers[], countries[], regions[], conditions[]} each value with its label and count, plus radius_bands[] and meta.total.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"bagger","market":"de"}},{"name":"suggest","description":"The site's own autocomplete for a typed prefix, in four buckets: machine types, manufacturers, categories (with their numeric ids) and products. Use it to turn whatever a user typed into values the `machine_type`, `manufacturer` and `category_id` filters accept, instead of guessing a spelling the source would silently drop.","required_params":["query"],"optional_params":["market","category_id"],"params":[{"name":"query","type":"string","required":true,"description":"At least two characters of what a user is typing. The source answers with its own vocabulary in four buckets, which is exactly what the other actions' filters want: machine types (feed to `machine_type`), manufacturers (feed to `manufacturer`), categories (feed the id to `category_id`) and products.","on_invalid":"reject","example":"kettenbag","aliases":["q","prefix"]},{"name":"market","type":"enum","required":false,"description":"Which Machineseeker host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 22811490 is EUR 49,900 on all six, machineseeker.co.uk included — the site does not convert currency). Use 'de' for German wording and 'com' for English wording. The wider Machineseeker network has 50+ further hosts; only these six have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — maschinensucher.de, German labels (the main site)"},{"value":"at","label":"Austria — maschinensucher.at, German labels"},{"value":"ch","label":"Switzerland — maschinensucher.ch, German labels"},{"value":"com","label":"International — machineseeker.com, English labels"},{"value":"gb","label":"United Kingdom — machineseeker.co.uk, English labels"},{"value":"ie","label":"Ireland — machineseeker.ie, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"category_id","type":"integer","required":false,"description":"Browse one category instead of searching, using the site's own numeric category id (105 = excavators, 43 = lathes, 42 = forklifts, 13 = packaging machines, 2 = metalworking & machine tools). Works for leaf categories too, not only the 40-odd top ones. Get the ids from the `categories` action or from any `ci-<id>` URL. Can be combined with `query` and every filter.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]}],"returns":"suggestions{machine_types[], manufacturers[], categories[] (with category_id), products[]} each with name and url.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kettenbag","market":"de"}},{"name":"dealers","description":"The dealer directory for one category: the machinery dealers themselves, 100 a page, each with company name, street, postcode, town, country and region, plus the dealer id the `seller` action takes. This is the supplier-side view of the marketplace — the site's own figure is over 8,100 dealers.","required_params":["category_id"],"optional_params":["market","page","sort"],"params":[{"name":"category_id","type":"integer","required":true,"description":"The category whose dealers to list, using the site's own numeric category id (105 = excavators, 43 = lathes, 2 = metalworking & machine tools). The site's dealer directory is organised per category and has no 'all dealers' page, so this is required.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]},{"name":"market","type":"enum","required":false,"description":"Which Machineseeker host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 22811490 is EUR 49,900 on all six, machineseeker.co.uk included — the site does not convert currency). Use 'de' for German wording and 'com' for English wording. The wider Machineseeker network has 50+ further hosts; only these six have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — maschinensucher.de, German labels (the main site)"},{"value":"at","label":"Austria — maschinensucher.at, German labels"},{"value":"ch","label":"Switzerland — maschinensucher.ch, German labels"},{"value":"com","label":"International — machineseeker.com, English labels"},{"value":"gb","label":"United Kingdom — machineseeker.co.uk, English labels"},{"value":"ie","label":"Ireland — machineseeker.ie, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"page","type":"integer","required":false,"description":"1-based page number, 100 dealers a page. Past the last page the source answers HTTP 404 and this engine reports NOT_FOUND rather than an empty success.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Order of the directory. 🔴 The site's OWN default is distance from the visitor, which for an API means distance from whichever exit the request happened to leave through — two identical calls would return different dealers on page 1 and paging would never be complete. This engine therefore defaults to the company name and does not expose the distance order at all.","on_invalid":"reject","allowed_values":[{"value":"name","label":"Company name A→Z — the default here, because it is the only stable order"},{"value":"country","label":"Country and region"},{"value":"postcode","label":"Postcode"}],"default":"name","example":"name"}],"returns":"dealers[]: dealer_id, name, url, street, postcode_city (the source's own line), postcode, city, country, region.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":105,"market":"de","page":1}},{"name":"seller","description":"One dealer's public profile by id: company name, contact address (street, postcode, town, region, country), their own description of the business, the machine categories and manufacturer ranges they deal in, and the site's trust seal, and the named contact person at the top of the address block (`contact_name`). 🔴 The listing list on a dealer's page is login-walled placeholder markup — every card there carries the dealer's own name as its title and no price — so it is deliberately not returned; use `search` for real listings.","required_params":["dealer_id"],"optional_params":["market"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"The dealer's numeric id, as returned by the `dealers` action and as the first path segment of a dealer URL (…/Haendler/10186640/schlueter-baumaschinen-gmbh-erwitte). A full dealer URL is also accepted.","on_invalid":"reject","example":"10186640","value_pattern":"\\d{3,12}|https?://\\S+","aliases":["seller_id","id"]},{"name":"market","type":"enum","required":false,"description":"Which Machineseeker host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 22811490 is EUR 49,900 on all six, machineseeker.co.uk included — the site does not convert currency). Use 'de' for German wording and 'com' for English wording. The wider Machineseeker network has 50+ further hosts; only these six have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — maschinensucher.de, German labels (the main site)"},{"value":"at","label":"Austria — maschinensucher.at, German labels"},{"value":"ch","label":"Switzerland — maschinensucher.ch, German labels"},{"value":"com","label":"International — machineseeker.com, English labels"},{"value":"gb","label":"United Kingdom — machineseeker.co.uk, English labels"},{"value":"ie","label":"Ireland — machineseeker.ie, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]}],"returns":"seller{dealer_id, name, url, street, postcode, city, region, country, contact_name, about, categories[], related_searches[] (the manufacturer-and-model phrases the site itself cross-links from this dealer's page — the source does not claim these are brands the dealer is authorised for), trust_seal}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"dealer_id":"10186640","market":"de"}}]},{"name":"mascus","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Mascus API — live used heavy-machinery marketplace data from the global Mascus network (Volvo CE / Ritchie Bros.): ~497,000 live listings of second-hand construction plant, trucks and trailers, agricultural and forestry machines, forklifts and groundcare equipment from dealers in 80 countries, across 39 country front-ends and one shared catalogue. Filter on what a pricing or sourcing desk works with — make, model, year, hour meter, odometer, engine output, gross weight, condition, seller country and region, price band, auction-only or rental-only — then pull one listing in full: the seller's own asking price in the seller's own currency, VAT rate, every technical property they typed with its parsed number and unit, the description, the auction event with its bidding deadline, the rental day/week/month rates, the coordinates, the gallery and the dealer's business address. Plus the live category tree with per-node counts, facet counts, the site's own autocomplete, popular makes per sector, and one dealer's profile and full stock. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mascus/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse the whole marketplace. Combine a keyword with any of the typed filters the source supports natively — sector, category, sub-category, make, model, condition, advert type, year window, price band, hour-meter band, odometer band, engine output, gross weight, seller country and region, has-a-price, has-a-photo, has-a-video, listed-in-the-last-N-days — and sort by price, year, listing date, hours, odometer, make or country. Up to 200 rows a page. 🔴 Two things worth knowing before you build a loop: only the first 10,000 rows of any query are retrievable (past that the source silently re-serves page 1, so this endpoint refuses the call instead), and `price`/`currency` are the seller's own asking price — NOT the number the country front-end displays, which is a live conversion and differs by up to 326x between front-ends for the same machine.","required_params":[],"optional_params":["market","currency","query","catalog","category","subcategory","brand","model","country","region","condition","ad_type","year_min","year_max","price_min","price_max","operating_hours_min","operating_hours_max","mileage_km_min","mileage_km_max","engine_output_min","engine_output_max","weight_min","weight_max","with_price","with_image","with_video","listed_within_days","dealer_id","sort","page","page_size","include_facets"],"params":[{"name":"market","type":"enum","required":false,"description":"Which country front-end to read. All 39 share ONE catalogue, so this does NOT pick a different inventory: it picks the language of the labels on `detail`, `categories` and `suggest`, and 🔴 the UNITS — the international front-end ('com') reports the odometer in MILES, the other 38 in kilometres. `mileage_km` is normalised on every market and `mileage_km_min/max` is always in kilometres, so you never have to care. Three front-ends the marketplace itself links (mascus.fr, mascus.es, mascus.com.br) answer HTTP 404 for every listing and return MARKET_UNAVAILABLE rather than a half-filled answer.","on_invalid":"reject","allowed_values":[{"value":"com","label":"International — mascus.com, English labels. 🔴 The ONLY front-end that reports the odometer in MILES; the other 38 report kilometres (`mileage_km` is normalised on all)"},{"value":"uk","label":"United Kingdom — mascus.co.uk, English"},{"value":"ie","label":"Ireland — mascus.ie, English"},{"value":"au","label":"Australia — mascus.com.au, English"},{"value":"nz","label":"New Zealand — mascus.co.nz, English"},{"value":"za","label":"South Africa — mascus.co.za, English"},{"value":"de","label":"Germany — mascus.de, German"},{"value":"at","label":"Austria — mascus.at, German"},{"value":"lu","label":"Luxembourg — mascus.lu, German"},{"value":"nl","label":"Netherlands — mascus.nl, Dutch"},{"value":"be","label":"Belgium — mascus.be, Dutch"},{"value":"it","label":"Italy — mascus.it, Italian"},{"value":"pt","label":"Portugal — mascus.pt, Portuguese"},{"value":"mx","label":"Latin America — es.mascus.com, Spanish"},{"value":"pl","label":"Poland — mascus.pl, Polish"},{"value":"cz","label":"Czechia — mascus.cz, Czech"},{"value":"sk","label":"Slovakia — mascus.sk, Slovak"},{"value":"hu","label":"Hungary — mascus.hu, Hungarian"},{"value":"ro","label":"Romania — mascus.ro, Romanian"},{"value":"bg","label":"Bulgaria — mascus.bg, Bulgarian"},{"value":"hr","label":"Croatia — mascus.hr, Croatian"},{"value":"si","label":"Slovenia — mascus.si, Slovenian"},{"value":"rs","label":"Serbia — mascus.rs, Serbian"},{"value":"me","label":"Montenegro — mascus.me, Serbian"},{"value":"gr","label":"Greece — mascus.gr, Greek"},{"value":"se","label":"Sweden — mascus.se, Swedish"},{"value":"no","label":"Norway — mascus.no, Norwegian"},{"value":"dk","label":"Denmark — mascus.dk, Danish"},{"value":"fi","label":"Finland — mascus.fi, Finnish"},{"value":"ee","label":"Estonia — mascus.ee, Estonian"},{"value":"lt","label":"Lithuania — mascus.lt, Lithuanian"},{"value":"lv","label":"Latvia — mascus.lv, Latvian"},{"value":"ua","label":"Ukraine — mascus.ua, Ukrainian"},{"value":"ua_ru","label":"Ukraine — mascus.com.ua, Russian"},{"value":"tr","label":"Türkiye — mascus.com.tr, Turkish"},{"value":"jp","label":"Japan — mascus.jp, Japanese"},{"value":"kr","label":"South Korea — mascus.co.kr, Korean"},{"value":"tw","label":"Taiwan — mascus.com.tw, Chinese"},{"value":"ar","label":"Middle East — ar.mascus.com, Arabic"}],"default":"com","example":"com","aliases":["site","country_site"]},{"name":"currency","type":"string","required":false,"description":"The currency to convert into, one of the 131 the source supports (EUR, USD, GBP, PLN, SEK, CZK, HUF, TRY, JPY, ZAR…). 🔴 Two measured consequences. (1) `price_min`/`price_max` are bands IN THIS CURRENCY: the same 10,000-50,000 band answers 19,366 rows in EUR and 18,583 in USD. (2) The conversion appears as `price_converted` + `price_converted_currency`, never as `price` — `price` and `currency` are always the seller's own asking price and do not move with this parameter.","on_invalid":"reject","default":"EUR","example":"EUR","value_pattern":"[A-Za-z]{3}","aliases":["usercurrency"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into the marketplace's own search box: a machine type ('excavator', 'bagger'), a make, a model, or several words. Extra words NARROW here rather than widen — measured: 'excavator' 46,033 rows, 'caterpillar 320' 2,273 — and an unmatched word gives an honest empty answer. 🔴 FREE TEXT IS SCORED IN THE CHOSEN FRONT-END'S OWN LANGUAGE, so the same word is a different query per market: 'excavator' answered 46,041 rows on the international front-end and 46,118 on the German one, and the first 40 rows of the two had NOT ONE listing in common (a make-and-model query such as 'Kubota M5-111D' does match identically on both). A result set that must be reproducible across markets has to be pinned with the typed filters or a dealer, not with free text.","on_invalid":"reject","example":"caterpillar 320","aliases":["q","keyword"]},{"name":"catalog","type":"enum","required":false,"description":"One of the marketplace's six sectors. Comma-separate for several. 🔴 The value is the sector CODE, which differs from the URL slug on three of the six ('cargo-transport' not 'transportation', 'materialhandling' not 'material-handling', 'groundscare' not 'groundcare') — a value guessed off a URL returns zero rows, so the codes are published and validated here.","on_invalid":"reject","allowed_values":[{"value":"construction","label":"Construction plant — 252,476 listings (excavators, loaders, dumpers, cranes, compaction, concrete, drilling). URL slug: /construction"},{"value":"cargo-transport","label":"Trucks, trailers, vans and buses — 96,956 listings. URL slug: /transportation (the filter value is 'cargo-transport', not the slug)"},{"value":"agriculture","label":"Agricultural machinery — 83,644 listings (tractors, harvesters, forage, tillage, sowing, sprayers). URL slug: /agriculture"},{"value":"materialhandling","label":"Material handling — 27,455 listings (forklifts, telehandlers, access platforms, warehouse equipment). URL slug: /material-handling"},{"value":"forestry","label":"Forestry machinery — 25,707 listings (harvesters, forwarders, chippers, cranes). URL slug: /forestry"},{"value":"groundscare","label":"Groundcare — 10,840 listings (mowers, turf care, utility vehicles). URL slug: /groundcare (note the source's own spelling of the code: 'groundscare')"}],"example":"construction","aliases":["catalogs","sector"]},{"name":"category","type":"array","required":false,"description":"Category code inside a sector, as the `categories` action returns it ('excavators', 'tractors', 'trucks', 'forklifts'). Comma-separate for several. An unknown code is answered honestly with zero rows rather than ignored, but reading the code out of `categories` or `suggest` is the way to be sure.","on_invalid":"reject","example":"excavators","aliases":["categories"]},{"name":"subcategory","type":"array","required":false,"description":"The third taxonomy level ('crawlerexcavators', 'miniexcavators', 'wheelexcavators'), from the `categories` action with a `category_code` set. This is how you get from 40,068 excavators to the 20,806 crawler excavators.","on_invalid":"reject","example":"crawlerexcavators","aliases":["subcategories"]},{"name":"brand","type":"array","required":false,"description":"Make, spelled the way the source's own facet spells it ('CAT' not 'Caterpillar', 'John Deere', 'Volvo', 'Mercedes-Benz'). Case does not matter, the spelling does — read it from `facets` or let `suggest` map what a user typed. Measured to bite: 46,035 rows for 'excavator' → 9,913 for CAT.","on_invalid":"reject","example":"CAT","aliases":["brands","make"]},{"name":"model","type":"array","required":false,"description":"Model name, as the source's own type-ahead spells it. Only works with `brand` — a bare model name is ambiguous across makes, so it is rejected rather than returning an answer that looks filtered. Measured: brand=CAT + model=320 → 1,553 rows.","on_invalid":"reject","example":"320","aliases":["models"]},{"name":"country","type":"array","required":false,"description":"Seller country, 2-letter ISO code. Comma-separate for several. 80 countries have stock on a typical query; the `facets` action lists them with counts. Measured to bite: 46,035 → 3,494 for DE.","on_invalid":"reject","example":"DE","aliases":["countries"]},{"name":"region","type":"array","required":false,"description":"Seller region or province, by the NAME the source prints ('Bayern', 'Tennessee', 'Västernorrlands län') — not a code; `facets` returns the names that have stock. Measured to bite: 'Bayern' → 132 rows.","on_invalid":"reject","example":"Bayern","aliases":["regions"]},{"name":"condition","type":"enum","required":false,"description":"Condition class. Comma-separate for several. The source stores these as numeric property ids; this takes the words and sends the ids. Measured: 46,035 → 4,458 for 'new'.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used — the default state of this marketplace"},{"value":"new","label":"New / unused"},{"value":"reconditioned","label":"Reconditioned"},{"value":"remanufactured","label":"Remanufactured"},{"value":"demo","label":"Demonstration machine"},{"value":"vintage","label":"Vintage / collector"},{"value":"damaged","label":"Damaged"},{"value":"dismantled","label":"Dismantled / for parts"},{"value":"operates_with_deficiencies","label":"Operates with deficiencies"},{"value":"rental_possibility","label":"Offered with a rental option"}],"example":"new","aliases":["conditions"]},{"name":"ad_type","type":"enum","required":false,"description":"The structural kind of advert. 🔴 An unknown value is NOT an error on this source: it is dropped and you get the whole unfiltered catalogue with HTTP 200, so this endpoint validates it instead of forwarding it. Measured to bite: 46,035 → 5,116 auction lots, → 333 rental machines.","on_invalid":"reject","allowed_values":[{"value":"usedad","label":"An ordinary dealer advert with an asking price or 'price on request'"},{"value":"auctionad","label":"An auction lot — carries an event name, start/end time and the auction house's own listing link; its price is 0 because bidding happens off this marketplace"},{"value":"rentalad","label":"A machine offered for rent — carries daily / weekly / monthly rates and the regions it can be hired in. May ALSO carry a sale price (measured: a Yanmar mini-excavator was listed at EUR 15,900 and at EUR 85/day at the same time)"}],"example":"auctionad","aliases":["ad_types"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. 🔴 The source's own name for this filter is not the obvious one and the obvious one is accepted with HTTP 200 and then ignored, so a naive year window returns the unfiltered catalogue looking filtered. Here it bites: 46,035 → 11,205 for 2015-2020.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100,"aliases":["year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive. Note the source carries seller-entered years as far ahead as 2027, so an open-ended upper bound is not the same as 'up to this year'.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["year_to"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, 🔴 IN THE `currency` YOU ASKED FOR (default EUR), not in the seller's currency. Measured: the same 10,000-50,000 band answers 19,366 rows in EUR and 18,583 in USD. Any price bound also excludes the listings that publish no price at all and the source's own 0 and 1 placeholder prices.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, 🔴 in the `currency` you asked for (default EUR), not in the seller's currency. Setting it also excludes every listing that publishes no price at all.","on_invalid":"reject","example":50000,"minimum":0},{"name":"operating_hours_min","type":"integer","required":false,"description":"Lowest hour-meter reading to include, in hours — the field a used-plant buyer prices on. Verified front-end independent, unlike the odometer: the 0-2,000 h band answers the same 412 rows on the international and the German front-end.","on_invalid":"reject","example":0,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Highest hour-meter reading to include, in hours. Measured to bite: 46,035 → 412 for 0-2,000 h on the transport sector.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["hours_max"]},{"name":"mileage_km_min","type":"integer","required":false,"description":"Lowest odometer reading to include, 🔴 ALWAYS IN KILOMETRES. The source filters in the front-end's own unit — the same 0-100,000 band answers 9,811 rows on the international front-end (miles) and 7,051 on the German one — so the unit is fixed at kilometres here and converted before the request leaves. Separate from `operating_hours_*` on purpose: the source publishes only one of the two per machine and they are not comparable.","on_invalid":"reject","example":0,"minimum":0},{"name":"mileage_km_max","type":"integer","required":false,"description":"Highest odometer reading to include, 🔴 always in kilometres whatever `market` is set to — the source filters in the front-end's own unit and this endpoint converts before the request leaves.","on_invalid":"reject","example":200000,"minimum":0},{"name":"engine_output_min","type":"integer","required":false,"description":"Lowest engine output to include, in the source's own unit for the sector (hp on agricultural machines, kW on construction plant — the `facets` action's `engineoutput` group states which). Measured to bite: 46,035 → 8,604 for 100-300.","on_invalid":"reject","example":100,"minimum":0},{"name":"engine_output_max","type":"integer","required":false,"description":"Highest engine output to include, in the same unit the minimum uses — the source's own unit for that sector, which the `facets` action's `engineoutput` group states.","on_invalid":"reject","example":300,"minimum":0},{"name":"weight_min","type":"integer","required":false,"description":"Lowest gross weight to include, in kilogrammes. The source publishes a gross weight on most construction plant and most trucks; a listing without one is excluded by the source when either bound is set.","on_invalid":"reject","example":1000,"minimum":0},{"name":"weight_max","type":"integer","required":false,"description":"Highest gross weight to include, in kilogrammes. Measured to bite: 46,035 rows for 'excavator' narrow to 9,217 for 1,000-20,000 kg.","on_invalid":"reject","example":20000,"minimum":0},{"name":"with_price","type":"boolean","required":false,"description":"Only listings that publish a price. Most of this marketplace does not — auction lots carry none at all and many dealers list 'price on request' — so this is the most useful narrowing filter for a pricing job. Measured: 46,035 → 32,305.","on_invalid":"reject","default":false,"example":true},{"name":"with_image","type":"boolean","required":false,"description":"Only listings with at least one photograph. Measured: 46,035 → 45,396, so this marketplace is almost entirely illustrated.","on_invalid":"reject","default":false,"example":true},{"name":"with_video","type":"boolean","required":false,"description":"Only listings with a video. Measured: 46,035 → 3,892.","on_invalid":"reject","default":false,"example":true},{"name":"listed_within_days","type":"enum","required":false,"description":"Only listings put online within the last N days, using the source's own shortcut. Pair it with `sort=newest` to poll a narrow query for new stock. Measured: 46,035 → 2,690 for the last 7 days.","on_invalid":"reject","allowed_values":[{"value":1,"label":"Listed in the last 24 hours"},{"value":3,"label":"Last 3 days"},{"value":7,"label":"Last 7 days"},{"value":14,"label":"Last 14 days"},{"value":30,"label":"Last 30 days"}],"example":7},{"name":"dealer_id","type":"string","required":false,"description":"Restrict to one dealer's stock, by the 8-character id the source's own dealer links use (also on every row as `seller.dealer_id`). 🔴 The full GUID is accepted by the source and answers 125 rows from FOUR different companies because its middle segment is shared, so a full GUID passed here is shortened for you and the answer is checked to contain exactly one company before it is returned.","on_invalid":"reject","example":"427244D9","value_pattern":"[0-9A-Fa-f]{8}"},{"name":"sort","type":"enum","required":false,"description":"Result order. Every value was checked to change the DATA, not merely be accepted; 🔴 a value outside this list is accepted with HTTP 200 and then ignored, so it is validated here. Read the notes on `price_asc` and `hours_asc` first: both change WHICH rows you get, not only their order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The source's own relevance order (its default)"},{"value":"price_asc","label":"Cheapest first. 🔴 Two caveats, both measured: this drops every unpriced listing (46,035 → 32,305), and the source's own first page is full of 0 and 1 placeholder prices — pair it with `price_min` to get a usable cheap-end list"},{"value":"price_desc","label":"Most expensive first"},{"value":"year_desc","label":"Newest year of construction first. The source carries seller-entered years up to 2027, so the first page can be ahead of today"},{"value":"year_asc","label":"Oldest year of construction first"},{"value":"newest","label":"Most recently listed first — this is the one to poll for new stock"},{"value":"oldest","label":"Longest-listed first"},{"value":"hours_asc","label":"Fewest operating hours first. Listings with NO reading sort first, so pair it with `operating_hours_min` if you want readings only"},{"value":"hours_desc","label":"Most operating hours first"},{"value":"mileage_asc","label":"Lowest odometer first"},{"value":"mileage_desc","label":"Highest odometer first"},{"value":"brand_asc","label":"Make A→Z"},{"value":"brand_desc","label":"Make Z→A"},{"value":"model_asc","label":"Model A→Z"},{"value":"model_desc","label":"Model Z→A"},{"value":"country_asc","label":"Seller country A→Z"},{"value":"country_desc","label":"Seller country Z→A"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. 🔴 `page x page_size` must stay at or below 10,000: past that the source answers HTTP 200 and serves PAGE 1'S ROWS under the page number you asked for (measured at four page sizes), so the combination is refused rather than letting a paging loop re-ingest the first page for ever. `meta.pagination` publishes `last_page`, `retrievable_max` and an honest `has_more`.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-200 (the source's own default is 40). A large page is the cheap way to the 10,000-row ceiling: at 200 it takes 50 calls instead of 250.","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":200,"aliases":["pagesize"]},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the source's own live filter counts for this exact query, in the same call. Same content as the `facets` action; set it here when you want rows and counts together.","on_invalid":"reject","default":false,"example":true}],"returns":"listings[]: listing_id, asset_id (the id the `detail` action takes), url, listing_type (classified | auction | rental | marketplace_external), brand, model, year, catalog, category, operating_hours + operating_hours_unit, mileage + mileage_unit, mileage_km (ALWAYS kilometres, normalised — the international front-end reports miles) + mileage_km_exact (false only on that one front-end, where the back conversion is +/-1 km), price + currency (the SELLER'S OWN asking price and currency, verified invariant across 10 country front-ends), price_on_request, price_eur, price_converted + price_converted_currency (only when you asked for a currency the seller did not price in), rental{daily, weekly, monthly, currency, vat_rate}, auction{event_name, starts_at, ends_at, country, city, lot_url, auction_house_listing_id}, location_city, location_country_code, seller{dealer_id, name, country, url}, image, image_count, video_count, featured, highlighted, listed_last_24h, listed_at. meta carries total, pagination (page, page_size, last_page, retrievable_max, has_more), price_filter_currency, filters_applied (what actually went to the source), facets when asked for, and any warnings.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"excavator","market":"com","currency":"EUR","page":1,"page_size":40}},{"name":"detail","description":"One listing in full, by id or URL. Returns the machine (make, model, model group, year, category path, hour meter, odometer normalised to kilometres), the price block (the seller's own asking price and currency, the EUR equivalent, the VAT rate, whether a price is published at all, and the source's own printed price rows), every technical property the seller typed — each with the source's own label in your chosen language, a language-free field name, and a parsed number and unit where there is one — the accessories list, the seller's free-text description in each language they wrote it in, the auction event with its bidding deadline and the auction house's own lot id, the rental day/week/month rates with and without VAT and the regions it can be hired in, the machine's own town, region, postcode, country and map coordinates, the dealer's business address and years on the marketplace, the finance/insurance/transport services offered, the full-size gallery and any videos, and the category breadcrumb.","required_params":[],"optional_params":["asset_id","url","market"],"params":[{"name":"asset_id","type":"string","required":false,"description":"The listing id, as every search row returns it in `asset_id` and as the last segment of any listing URL (a full URL is accepted and the id taken out of it; the source ignores every other path segment, so the slug need not be right). 🔴 An id here is not always valid on every front-end: measured, the id the international front-end prints resolves on three front-ends while the id the German one prints for the SAME machine answers HTTP 404 on the other two. Prefer the row's `url`; an id that does not resolve on the `market` asked for is tried on the two widest front-ends and `meta` says which one answered.","on_invalid":"reject","example":"gu7q6jaj","value_pattern":"[0-9a-zA-Z]{4,16}","aliases":["listing_id","id"]},{"name":"url","type":"string","required":false,"description":"A listing URL instead of an id — whichever you happen to have. Either `asset_id` or `url` is required.","on_invalid":"reject","example":"https://www.mascus.com/agriculture/tractors/john-deere-s240/gu7q6jaj.html"},{"name":"market","type":"enum","required":false,"description":"Which country front-end to read. All 39 share ONE catalogue, so this does NOT pick a different inventory: it picks the language of the labels on `detail`, `categories` and `suggest`, and 🔴 the UNITS — the international front-end ('com') reports the odometer in MILES, the other 38 in kilometres. `mileage_km` is normalised on every market and `mileage_km_min/max` is always in kilometres, so you never have to care. Three front-ends the marketplace itself links (mascus.fr, mascus.es, mascus.com.br) answer HTTP 404 for every listing and return MARKET_UNAVAILABLE rather than a half-filled answer.","on_invalid":"reject","allowed_values":[{"value":"com","label":"International — mascus.com, English labels. 🔴 The ONLY front-end that reports the odometer in MILES; the other 38 report kilometres (`mileage_km` is normalised on all)"},{"value":"uk","label":"United Kingdom — mascus.co.uk, English"},{"value":"ie","label":"Ireland — mascus.ie, English"},{"value":"au","label":"Australia — mascus.com.au, English"},{"value":"nz","label":"New Zealand — mascus.co.nz, English"},{"value":"za","label":"South Africa — mascus.co.za, English"},{"value":"de","label":"Germany — mascus.de, German"},{"value":"at","label":"Austria — mascus.at, German"},{"value":"lu","label":"Luxembourg — mascus.lu, German"},{"value":"nl","label":"Netherlands — mascus.nl, Dutch"},{"value":"be","label":"Belgium — mascus.be, Dutch"},{"value":"it","label":"Italy — mascus.it, Italian"},{"value":"pt","label":"Portugal — mascus.pt, Portuguese"},{"value":"mx","label":"Latin America — es.mascus.com, Spanish"},{"value":"pl","label":"Poland — mascus.pl, Polish"},{"value":"cz","label":"Czechia — mascus.cz, Czech"},{"value":"sk","label":"Slovakia — mascus.sk, Slovak"},{"value":"hu","label":"Hungary — mascus.hu, Hungarian"},{"value":"ro","label":"Romania — mascus.ro, Romanian"},{"value":"bg","label":"Bulgaria — mascus.bg, Bulgarian"},{"value":"hr","label":"Croatia — mascus.hr, Croatian"},{"value":"si","label":"Slovenia — mascus.si, Slovenian"},{"value":"rs","label":"Serbia — mascus.rs, Serbian"},{"value":"me","label":"Montenegro — mascus.me, Serbian"},{"value":"gr","label":"Greece — mascus.gr, Greek"},{"value":"se","label":"Sweden — mascus.se, Swedish"},{"value":"no","label":"Norway — mascus.no, Norwegian"},{"value":"dk","label":"Denmark — mascus.dk, Danish"},{"value":"fi","label":"Finland — mascus.fi, Finnish"},{"value":"ee","label":"Estonia — mascus.ee, Estonian"},{"value":"lt","label":"Lithuania — mascus.lt, Lithuanian"},{"value":"lv","label":"Latvia — mascus.lv, Latvian"},{"value":"ua","label":"Ukraine — mascus.ua, Ukrainian"},{"value":"ua_ru","label":"Ukraine — mascus.com.ua, Russian"},{"value":"tr","label":"Türkiye — mascus.com.tr, Turkish"},{"value":"jp","label":"Japan — mascus.jp, Japanese"},{"value":"kr","label":"South Korea — mascus.co.kr, Korean"},{"value":"tw","label":"Taiwan — mascus.com.tw, Chinese"},{"value":"ar","label":"Middle East — ar.mascus.com, Arabic"}],"default":"com","example":"com","aliases":["site","country_site"]}],"returns":"listing{listing_id, asset_id, url, listing_type, status_active, machine{}, price{price, currency, price_on_request, price_eur, vat_rate, has_price, rows[]}, location{}, seller{}, basics[], specs[] (field, label, value, number, unit, items[]), descriptions[], description, auction{}, rental{}, images[], thumbnails[], videos[], breadcrumb[], listed_at, updated_at, services{}}. No contact name, phone number or e-mail address is returned on any action of this endpoint.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"asset_id":"gu7q6jaj","market":"com"}},{"name":"categories","description":"The marketplace's own taxonomy with live per-node listing counts: six sectors (construction 252,476 · transport 96,956 · agriculture 83,644 · material handling 27,455 · forestry 25,707 · groundcare 10,840) and, under each, the categories and sub-categories with the exact codes every other action's `category` and `subcategory` filters take. Pass a `category_code` to get one sector's sub-tree. Every count is the source's own live figure. 🔴 The filter code and the source's URL slug differ on three of the six sectors, so this is the action to read codes from rather than lifting them out of a URL.","required_params":[],"optional_params":["market","category_code"],"params":[{"name":"market","type":"enum","required":false,"description":"Which country front-end to read. All 39 share ONE catalogue, so this picks the LANGUAGE this action answers in, not a different inventory. Three front-ends the marketplace itself links (mascus.fr, mascus.es, mascus.com.br) answer HTTP 404 for every listing and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"com","label":"International — mascus.com, English labels. 🔴 The ONLY front-end that reports the odometer in MILES; the other 38 report kilometres (`mileage_km` is normalised on all)"},{"value":"uk","label":"United Kingdom — mascus.co.uk, English"},{"value":"ie","label":"Ireland — mascus.ie, English"},{"value":"au","label":"Australia — mascus.com.au, English"},{"value":"nz","label":"New Zealand — mascus.co.nz, English"},{"value":"za","label":"South Africa — mascus.co.za, English"},{"value":"de","label":"Germany — mascus.de, German"},{"value":"at","label":"Austria — mascus.at, German"},{"value":"lu","label":"Luxembourg — mascus.lu, German"},{"value":"nl","label":"Netherlands — mascus.nl, Dutch"},{"value":"be","label":"Belgium — mascus.be, Dutch"},{"value":"it","label":"Italy — mascus.it, Italian"},{"value":"pt","label":"Portugal — mascus.pt, Portuguese"},{"value":"mx","label":"Latin America — es.mascus.com, Spanish"},{"value":"pl","label":"Poland — mascus.pl, Polish"},{"value":"cz","label":"Czechia — mascus.cz, Czech"},{"value":"sk","label":"Slovakia — mascus.sk, Slovak"},{"value":"hu","label":"Hungary — mascus.hu, Hungarian"},{"value":"ro","label":"Romania — mascus.ro, Romanian"},{"value":"bg","label":"Bulgaria — mascus.bg, Bulgarian"},{"value":"hr","label":"Croatia — mascus.hr, Croatian"},{"value":"si","label":"Slovenia — mascus.si, Slovenian"},{"value":"rs","label":"Serbia — mascus.rs, Serbian"},{"value":"me","label":"Montenegro — mascus.me, Serbian"},{"value":"gr","label":"Greece — mascus.gr, Greek"},{"value":"se","label":"Sweden — mascus.se, Swedish"},{"value":"no","label":"Norway — mascus.no, Norwegian"},{"value":"dk","label":"Denmark — mascus.dk, Danish"},{"value":"fi","label":"Finland — mascus.fi, Finnish"},{"value":"ee","label":"Estonia — mascus.ee, Estonian"},{"value":"lt","label":"Lithuania — mascus.lt, Lithuanian"},{"value":"lv","label":"Latvia — mascus.lv, Latvian"},{"value":"ua","label":"Ukraine — mascus.ua, Ukrainian"},{"value":"ua_ru","label":"Ukraine — mascus.com.ua, Russian"},{"value":"tr","label":"Türkiye — mascus.com.tr, Turkish"},{"value":"jp","label":"Japan — mascus.jp, Japanese"},{"value":"kr","label":"South Korea — mascus.co.kr, Korean"},{"value":"tw","label":"Taiwan — mascus.com.tw, Chinese"},{"value":"ar","label":"Middle East — ar.mascus.com, Arabic"}],"default":"com","example":"com","aliases":["site","country_site"]},{"name":"category_code","type":"string","required":false,"description":"Return this node's sub-tree instead of the whole taxonomy. Takes a sector code ('construction', 'agriculture') and narrows the answer to that sector's categories and sub-categories with their live counts.","on_invalid":"reject","example":"construction","aliases":["catalog","code"]}],"returns":"categories[]: code (what the filters take), name_from_slug, url, count, parent_code, level, has_children — flattened depth-first so the tree can be walked. meta.listings_total is the top-level counts added up.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"com"}},{"name":"facets","description":"The source's own live filter counts for a query: which makes, countries, regions, categories, conditions, advert types, accessories and emission levels have stock and how much of it. This is how you learn the exact spelling a filter wants (the source wants 'CAT', not 'Caterpillar', and region NAMES rather than codes) and how to split a query that is deeper than the 10,000-row retrievable ceiling. Every group says in `value_kind` whether its values are names, ISO codes or the source's own numeric property ids — the ids are what the filter takes, so they are published as they are rather than guessed at.","required_params":[],"optional_params":["market","currency","query","catalog","category","subcategory","brand","model","country","region","condition","ad_type","year_min","year_max","price_min","price_max","operating_hours_min","operating_hours_max","mileage_km_min","mileage_km_max","with_price","dealer_id"],"params":[{"name":"market","type":"enum","required":false,"description":"Which country front-end to read. All 39 share ONE catalogue, so this does NOT pick a different inventory: it picks the language of the labels on `detail`, `categories` and `suggest`, and 🔴 the UNITS — the international front-end ('com') reports the odometer in MILES, the other 38 in kilometres. `mileage_km` is normalised on every market and `mileage_km_min/max` is always in kilometres, so you never have to care. Three front-ends the marketplace itself links (mascus.fr, mascus.es, mascus.com.br) answer HTTP 404 for every listing and return MARKET_UNAVAILABLE rather than a half-filled answer.","on_invalid":"reject","allowed_values":[{"value":"com","label":"International — mascus.com, English labels. 🔴 The ONLY front-end that reports the odometer in MILES; the other 38 report kilometres (`mileage_km` is normalised on all)"},{"value":"uk","label":"United Kingdom — mascus.co.uk, English"},{"value":"ie","label":"Ireland — mascus.ie, English"},{"value":"au","label":"Australia — mascus.com.au, English"},{"value":"nz","label":"New Zealand — mascus.co.nz, English"},{"value":"za","label":"South Africa — mascus.co.za, English"},{"value":"de","label":"Germany — mascus.de, German"},{"value":"at","label":"Austria — mascus.at, German"},{"value":"lu","label":"Luxembourg — mascus.lu, German"},{"value":"nl","label":"Netherlands — mascus.nl, Dutch"},{"value":"be","label":"Belgium — mascus.be, Dutch"},{"value":"it","label":"Italy — mascus.it, Italian"},{"value":"pt","label":"Portugal — mascus.pt, Portuguese"},{"value":"mx","label":"Latin America — es.mascus.com, Spanish"},{"value":"pl","label":"Poland — mascus.pl, Polish"},{"value":"cz","label":"Czechia — mascus.cz, Czech"},{"value":"sk","label":"Slovakia — mascus.sk, Slovak"},{"value":"hu","label":"Hungary — mascus.hu, Hungarian"},{"value":"ro","label":"Romania — mascus.ro, Romanian"},{"value":"bg","label":"Bulgaria — mascus.bg, Bulgarian"},{"value":"hr","label":"Croatia — mascus.hr, Croatian"},{"value":"si","label":"Slovenia — mascus.si, Slovenian"},{"value":"rs","label":"Serbia — mascus.rs, Serbian"},{"value":"me","label":"Montenegro — mascus.me, Serbian"},{"value":"gr","label":"Greece — mascus.gr, Greek"},{"value":"se","label":"Sweden — mascus.se, Swedish"},{"value":"no","label":"Norway — mascus.no, Norwegian"},{"value":"dk","label":"Denmark — mascus.dk, Danish"},{"value":"fi","label":"Finland — mascus.fi, Finnish"},{"value":"ee","label":"Estonia — mascus.ee, Estonian"},{"value":"lt","label":"Lithuania — mascus.lt, Lithuanian"},{"value":"lv","label":"Latvia — mascus.lv, Latvian"},{"value":"ua","label":"Ukraine — mascus.ua, Ukrainian"},{"value":"ua_ru","label":"Ukraine — mascus.com.ua, Russian"},{"value":"tr","label":"Türkiye — mascus.com.tr, Turkish"},{"value":"jp","label":"Japan — mascus.jp, Japanese"},{"value":"kr","label":"South Korea — mascus.co.kr, Korean"},{"value":"tw","label":"Taiwan — mascus.com.tw, Chinese"},{"value":"ar","label":"Middle East — ar.mascus.com, Arabic"}],"default":"com","example":"com","aliases":["site","country_site"]},{"name":"currency","type":"string","required":false,"description":"The currency to convert into, one of the 131 the source supports (EUR, USD, GBP, PLN, SEK, CZK, HUF, TRY, JPY, ZAR…). 🔴 Two measured consequences. (1) `price_min`/`price_max` are bands IN THIS CURRENCY: the same 10,000-50,000 band answers 19,366 rows in EUR and 18,583 in USD. (2) The conversion appears as `price_converted` + `price_converted_currency`, never as `price` — `price` and `currency` are always the seller's own asking price and do not move with this parameter.","on_invalid":"reject","default":"EUR","example":"EUR","value_pattern":"[A-Za-z]{3}","aliases":["usercurrency"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into the marketplace's own search box: a machine type ('excavator', 'bagger'), a make, a model, or several words. Extra words NARROW here rather than widen — measured: 'excavator' 46,033 rows, 'caterpillar 320' 2,273 — and an unmatched word gives an honest empty answer. 🔴 FREE TEXT IS SCORED IN THE CHOSEN FRONT-END'S OWN LANGUAGE, so the same word is a different query per market: 'excavator' answered 46,041 rows on the international front-end and 46,118 on the German one, and the first 40 rows of the two had NOT ONE listing in common (a make-and-model query such as 'Kubota M5-111D' does match identically on both). A result set that must be reproducible across markets has to be pinned with the typed filters or a dealer, not with free text.","on_invalid":"reject","example":"caterpillar 320","aliases":["q","keyword"]},{"name":"catalog","type":"enum","required":false,"description":"One of the marketplace's six sectors. Comma-separate for several. 🔴 The value is the sector CODE, which differs from the URL slug on three of the six ('cargo-transport' not 'transportation', 'materialhandling' not 'material-handling', 'groundscare' not 'groundcare') — a value guessed off a URL returns zero rows, so the codes are published and validated here.","on_invalid":"reject","allowed_values":[{"value":"construction","label":"Construction plant — 252,476 listings (excavators, loaders, dumpers, cranes, compaction, concrete, drilling). URL slug: /construction"},{"value":"cargo-transport","label":"Trucks, trailers, vans and buses — 96,956 listings. URL slug: /transportation (the filter value is 'cargo-transport', not the slug)"},{"value":"agriculture","label":"Agricultural machinery — 83,644 listings (tractors, harvesters, forage, tillage, sowing, sprayers). URL slug: /agriculture"},{"value":"materialhandling","label":"Material handling — 27,455 listings (forklifts, telehandlers, access platforms, warehouse equipment). URL slug: /material-handling"},{"value":"forestry","label":"Forestry machinery — 25,707 listings (harvesters, forwarders, chippers, cranes). URL slug: /forestry"},{"value":"groundscare","label":"Groundcare — 10,840 listings (mowers, turf care, utility vehicles). URL slug: /groundcare (note the source's own spelling of the code: 'groundscare')"}],"example":"construction","aliases":["catalogs","sector"]},{"name":"category","type":"array","required":false,"description":"Category code inside a sector, as the `categories` action returns it ('excavators', 'tractors', 'trucks', 'forklifts'). Comma-separate for several. An unknown code is answered honestly with zero rows rather than ignored, but reading the code out of `categories` or `suggest` is the way to be sure.","on_invalid":"reject","example":"excavators","aliases":["categories"]},{"name":"subcategory","type":"array","required":false,"description":"The third taxonomy level ('crawlerexcavators', 'miniexcavators', 'wheelexcavators'), from the `categories` action with a `category_code` set. This is how you get from 40,068 excavators to the 20,806 crawler excavators.","on_invalid":"reject","example":"crawlerexcavators","aliases":["subcategories"]},{"name":"brand","type":"array","required":false,"description":"Make, spelled the way the source's own facet spells it ('CAT' not 'Caterpillar', 'John Deere', 'Volvo', 'Mercedes-Benz'). Case does not matter, the spelling does — read it from `facets` or let `suggest` map what a user typed. Measured to bite: 46,035 rows for 'excavator' → 9,913 for CAT.","on_invalid":"reject","example":"CAT","aliases":["brands","make"]},{"name":"model","type":"array","required":false,"description":"Model name, as the source's own type-ahead spells it. Only works with `brand` — a bare model name is ambiguous across makes, so it is rejected rather than returning an answer that looks filtered. Measured: brand=CAT + model=320 → 1,553 rows.","on_invalid":"reject","example":"320","aliases":["models"]},{"name":"country","type":"array","required":false,"description":"Seller country, 2-letter ISO code. Comma-separate for several. 80 countries have stock on a typical query; the `facets` action lists them with counts. Measured to bite: 46,035 → 3,494 for DE.","on_invalid":"reject","example":"DE","aliases":["countries"]},{"name":"region","type":"array","required":false,"description":"Seller region or province, by the NAME the source prints ('Bayern', 'Tennessee', 'Västernorrlands län') — not a code; `facets` returns the names that have stock. Measured to bite: 'Bayern' → 132 rows.","on_invalid":"reject","example":"Bayern","aliases":["regions"]},{"name":"condition","type":"enum","required":false,"description":"Condition class. Comma-separate for several. The source stores these as numeric property ids; this takes the words and sends the ids. Measured: 46,035 → 4,458 for 'new'.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used — the default state of this marketplace"},{"value":"new","label":"New / unused"},{"value":"reconditioned","label":"Reconditioned"},{"value":"remanufactured","label":"Remanufactured"},{"value":"demo","label":"Demonstration machine"},{"value":"vintage","label":"Vintage / collector"},{"value":"damaged","label":"Damaged"},{"value":"dismantled","label":"Dismantled / for parts"},{"value":"operates_with_deficiencies","label":"Operates with deficiencies"},{"value":"rental_possibility","label":"Offered with a rental option"}],"example":"new","aliases":["conditions"]},{"name":"ad_type","type":"enum","required":false,"description":"The structural kind of advert. 🔴 An unknown value is NOT an error on this source: it is dropped and you get the whole unfiltered catalogue with HTTP 200, so this endpoint validates it instead of forwarding it. Measured to bite: 46,035 → 5,116 auction lots, → 333 rental machines.","on_invalid":"reject","allowed_values":[{"value":"usedad","label":"An ordinary dealer advert with an asking price or 'price on request'"},{"value":"auctionad","label":"An auction lot — carries an event name, start/end time and the auction house's own listing link; its price is 0 because bidding happens off this marketplace"},{"value":"rentalad","label":"A machine offered for rent — carries daily / weekly / monthly rates and the regions it can be hired in. May ALSO carry a sale price (measured: a Yanmar mini-excavator was listed at EUR 15,900 and at EUR 85/day at the same time)"}],"example":"auctionad","aliases":["ad_types"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. 🔴 The source's own name for this filter is not the obvious one and the obvious one is accepted with HTTP 200 and then ignored, so a naive year window returns the unfiltered catalogue looking filtered. Here it bites: 46,035 → 11,205 for 2015-2020.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100,"aliases":["year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive. Note the source carries seller-entered years as far ahead as 2027, so an open-ended upper bound is not the same as 'up to this year'.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["year_to"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, 🔴 IN THE `currency` YOU ASKED FOR (default EUR), not in the seller's currency. Measured: the same 10,000-50,000 band answers 19,366 rows in EUR and 18,583 in USD. Any price bound also excludes the listings that publish no price at all and the source's own 0 and 1 placeholder prices.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, 🔴 in the `currency` you asked for (default EUR), not in the seller's currency. Setting it also excludes every listing that publishes no price at all.","on_invalid":"reject","example":50000,"minimum":0},{"name":"operating_hours_min","type":"integer","required":false,"description":"Lowest hour-meter reading to include, in hours — the field a used-plant buyer prices on. Verified front-end independent, unlike the odometer: the 0-2,000 h band answers the same 412 rows on the international and the German front-end.","on_invalid":"reject","example":0,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Highest hour-meter reading to include, in hours. Measured to bite: 46,035 → 412 for 0-2,000 h on the transport sector.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["hours_max"]},{"name":"mileage_km_min","type":"integer","required":false,"description":"Lowest odometer reading to include, 🔴 ALWAYS IN KILOMETRES. The source filters in the front-end's own unit — the same 0-100,000 band answers 9,811 rows on the international front-end (miles) and 7,051 on the German one — so the unit is fixed at kilometres here and converted before the request leaves. Separate from `operating_hours_*` on purpose: the source publishes only one of the two per machine and they are not comparable.","on_invalid":"reject","example":0,"minimum":0},{"name":"mileage_km_max","type":"integer","required":false,"description":"Highest odometer reading to include, 🔴 always in kilometres whatever `market` is set to — the source filters in the front-end's own unit and this endpoint converts before the request leaves.","on_invalid":"reject","example":200000,"minimum":0},{"name":"with_price","type":"boolean","required":false,"description":"Only listings that publish a price. Most of this marketplace does not — auction lots carry none at all and many dealers list 'price on request' — so this is the most useful narrowing filter for a pricing job. Measured: 46,035 → 32,305.","on_invalid":"reject","default":false,"example":true},{"name":"dealer_id","type":"string","required":false,"description":"Restrict to one dealer's stock, by the 8-character id the source's own dealer links use (also on every row as `seller.dealer_id`). 🔴 The full GUID is accepted by the source and answers 125 rows from FOUR different companies because its middle segment is shared, so a full GUID passed here is shortened for you and the answer is checked to contain exactly one company before it is returned.","on_invalid":"reject","example":"427244D9","value_pattern":"[0-9A-Fa-f]{8}"}],"returns":"facets[]: name, value_kind (name | iso_country_code | code | condition_id | property_id | un_region_code), values[] each with value, count, optional from/to for a range band and optional children[] for a nested group. meta.total is the query's own row count.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"catalog":"construction","category":"excavators","market":"com"}},{"name":"suggest","description":"The marketplace's own type-ahead for whatever a user has typed, in one list where every entry is tagged with its kind: make, model, model group, category (with the code the `category`/`subcategory` filters take) and dealer (with the id the `seller` action takes). Use it to turn free text into values the filters will actually match, instead of guessing a spelling the source answers with zero rows.","required_params":["query"],"optional_params":["market"],"params":[{"name":"query","type":"string","required":true,"description":"What the user has typed so far, from 2 characters up. The answer mixes makes, models, model groups, categories and dealers, each tagged with its kind and carrying the value the matching filter wants — so a UI never has to guess a spelling the source would answer with zero rows.","on_invalid":"reject","example":"cat 3","aliases":["q","term","prefix"]},{"name":"market","type":"enum","required":false,"description":"Which country front-end to read. All 39 share ONE catalogue, so this picks the LANGUAGE this action answers in, not a different inventory. Three front-ends the marketplace itself links (mascus.fr, mascus.es, mascus.com.br) answer HTTP 404 for every listing and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"com","label":"International — mascus.com, English labels. 🔴 The ONLY front-end that reports the odometer in MILES; the other 38 report kilometres (`mileage_km` is normalised on all)"},{"value":"uk","label":"United Kingdom — mascus.co.uk, English"},{"value":"ie","label":"Ireland — mascus.ie, English"},{"value":"au","label":"Australia — mascus.com.au, English"},{"value":"nz","label":"New Zealand — mascus.co.nz, English"},{"value":"za","label":"South Africa — mascus.co.za, English"},{"value":"de","label":"Germany — mascus.de, German"},{"value":"at","label":"Austria — mascus.at, German"},{"value":"lu","label":"Luxembourg — mascus.lu, German"},{"value":"nl","label":"Netherlands — mascus.nl, Dutch"},{"value":"be","label":"Belgium — mascus.be, Dutch"},{"value":"it","label":"Italy — mascus.it, Italian"},{"value":"pt","label":"Portugal — mascus.pt, Portuguese"},{"value":"mx","label":"Latin America — es.mascus.com, Spanish"},{"value":"pl","label":"Poland — mascus.pl, Polish"},{"value":"cz","label":"Czechia — mascus.cz, Czech"},{"value":"sk","label":"Slovakia — mascus.sk, Slovak"},{"value":"hu","label":"Hungary — mascus.hu, Hungarian"},{"value":"ro","label":"Romania — mascus.ro, Romanian"},{"value":"bg","label":"Bulgaria — mascus.bg, Bulgarian"},{"value":"hr","label":"Croatia — mascus.hr, Croatian"},{"value":"si","label":"Slovenia — mascus.si, Slovenian"},{"value":"rs","label":"Serbia — mascus.rs, Serbian"},{"value":"me","label":"Montenegro — mascus.me, Serbian"},{"value":"gr","label":"Greece — mascus.gr, Greek"},{"value":"se","label":"Sweden — mascus.se, Swedish"},{"value":"no","label":"Norway — mascus.no, Norwegian"},{"value":"dk","label":"Denmark — mascus.dk, Danish"},{"value":"fi","label":"Finland — mascus.fi, Finnish"},{"value":"ee","label":"Estonia — mascus.ee, Estonian"},{"value":"lt","label":"Lithuania — mascus.lt, Lithuanian"},{"value":"lv","label":"Latvia — mascus.lv, Latvian"},{"value":"ua","label":"Ukraine — mascus.ua, Ukrainian"},{"value":"ua_ru","label":"Ukraine — mascus.com.ua, Russian"},{"value":"tr","label":"Türkiye — mascus.com.tr, Turkish"},{"value":"jp","label":"Japan — mascus.jp, Japanese"},{"value":"kr","label":"South Korea — mascus.co.kr, Korean"},{"value":"tw","label":"Taiwan — mascus.com.tw, Chinese"},{"value":"ar","label":"Middle East — ar.mascus.com, Arabic"}],"default":"com","example":"com","aliases":["site","country_site"]}],"returns":"suggestions[]: kind (brand | model | model_group | category | dealer | other), name, and, depending on the kind, url, category_code_hint, brand or dealer_id.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"cat 3","market":"com"}},{"name":"brands","description":"The makes the marketplace itself promotes per sector, with a live listing count each — the source's own shortlist of the biggest manufacturers in construction, transport, agriculture, material handling, forestry and groundcare. A cheap, single-call answer to 'what is actually traded here and in what volume'. For the COMPLETE make list of a specific query, including the long tail, use `facets` and read its `brand` group.","required_params":[],"optional_params":["market"],"params":[{"name":"market","type":"enum","required":false,"description":"Which country front-end to read. All 39 share ONE catalogue, so this picks the LANGUAGE this action answers in, not a different inventory. Three front-ends the marketplace itself links (mascus.fr, mascus.es, mascus.com.br) answer HTTP 404 for every listing and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"com","label":"International — mascus.com, English labels. 🔴 The ONLY front-end that reports the odometer in MILES; the other 38 report kilometres (`mileage_km` is normalised on all)"},{"value":"uk","label":"United Kingdom — mascus.co.uk, English"},{"value":"ie","label":"Ireland — mascus.ie, English"},{"value":"au","label":"Australia — mascus.com.au, English"},{"value":"nz","label":"New Zealand — mascus.co.nz, English"},{"value":"za","label":"South Africa — mascus.co.za, English"},{"value":"de","label":"Germany — mascus.de, German"},{"value":"at","label":"Austria — mascus.at, German"},{"value":"lu","label":"Luxembourg — mascus.lu, German"},{"value":"nl","label":"Netherlands — mascus.nl, Dutch"},{"value":"be","label":"Belgium — mascus.be, Dutch"},{"value":"it","label":"Italy — mascus.it, Italian"},{"value":"pt","label":"Portugal — mascus.pt, Portuguese"},{"value":"mx","label":"Latin America — es.mascus.com, Spanish"},{"value":"pl","label":"Poland — mascus.pl, Polish"},{"value":"cz","label":"Czechia — mascus.cz, Czech"},{"value":"sk","label":"Slovakia — mascus.sk, Slovak"},{"value":"hu","label":"Hungary — mascus.hu, Hungarian"},{"value":"ro","label":"Romania — mascus.ro, Romanian"},{"value":"bg","label":"Bulgaria — mascus.bg, Bulgarian"},{"value":"hr","label":"Croatia — mascus.hr, Croatian"},{"value":"si","label":"Slovenia — mascus.si, Slovenian"},{"value":"rs","label":"Serbia — mascus.rs, Serbian"},{"value":"me","label":"Montenegro — mascus.me, Serbian"},{"value":"gr","label":"Greece — mascus.gr, Greek"},{"value":"se","label":"Sweden — mascus.se, Swedish"},{"value":"no","label":"Norway — mascus.no, Norwegian"},{"value":"dk","label":"Denmark — mascus.dk, Danish"},{"value":"fi","label":"Finland — mascus.fi, Finnish"},{"value":"ee","label":"Estonia — mascus.ee, Estonian"},{"value":"lt","label":"Lithuania — mascus.lt, Lithuanian"},{"value":"lv","label":"Latvia — mascus.lv, Latvian"},{"value":"ua","label":"Ukraine — mascus.ua, Ukrainian"},{"value":"ua_ru","label":"Ukraine — mascus.com.ua, Russian"},{"value":"tr","label":"Türkiye — mascus.com.tr, Turkish"},{"value":"jp","label":"Japan — mascus.jp, Japanese"},{"value":"kr","label":"South Korea — mascus.co.kr, Korean"},{"value":"tw","label":"Taiwan — mascus.com.tw, Chinese"},{"value":"ar","label":"Middle East — ar.mascus.com, Arabic"}],"default":"com","example":"com","aliases":["site","country_site"]}],"returns":"sectors[]: catalog, brands[] (name, count). meta.record_count is the number of make entries across all sectors.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"com"}},{"name":"seller","description":"One dealer's public business profile by id: company name, postal address (street, postcode, town, region, country), visiting address where they publish one, website, logo, their own description of the business, the makes they list themselves under, their branch outlets, map coordinates, and how long they have traded on this marketplace with the date that count runs from. 🔴 The source also returns a named salesperson, a direct e-mail, a mobile and a switchboard number on this object; none of it is returned here on any action. Use `seller_listings` for this dealer's stock.","required_params":["dealer_id"],"optional_params":["market"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"The dealer's 8-character id, as every search row returns it in `seller.dealer_id`, as `suggest` returns it for a dealer match, and as the source's own dealer links carry it. A full GUID is shortened for you.","on_invalid":"reject","example":"427244D9","value_pattern":"[0-9A-Fa-f]{8}","aliases":["company_id","organization_id"]},{"name":"market","type":"enum","required":false,"description":"Which country front-end to read. All 39 share ONE catalogue, so this picks the LANGUAGE this action answers in, not a different inventory. Three front-ends the marketplace itself links (mascus.fr, mascus.es, mascus.com.br) answer HTTP 404 for every listing and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"com","label":"International — mascus.com, English labels. 🔴 The ONLY front-end that reports the odometer in MILES; the other 38 report kilometres (`mileage_km` is normalised on all)"},{"value":"uk","label":"United Kingdom — mascus.co.uk, English"},{"value":"ie","label":"Ireland — mascus.ie, English"},{"value":"au","label":"Australia — mascus.com.au, English"},{"value":"nz","label":"New Zealand — mascus.co.nz, English"},{"value":"za","label":"South Africa — mascus.co.za, English"},{"value":"de","label":"Germany — mascus.de, German"},{"value":"at","label":"Austria — mascus.at, German"},{"value":"lu","label":"Luxembourg — mascus.lu, German"},{"value":"nl","label":"Netherlands — mascus.nl, Dutch"},{"value":"be","label":"Belgium — mascus.be, Dutch"},{"value":"it","label":"Italy — mascus.it, Italian"},{"value":"pt","label":"Portugal — mascus.pt, Portuguese"},{"value":"mx","label":"Latin America — es.mascus.com, Spanish"},{"value":"pl","label":"Poland — mascus.pl, Polish"},{"value":"cz","label":"Czechia — mascus.cz, Czech"},{"value":"sk","label":"Slovakia — mascus.sk, Slovak"},{"value":"hu","label":"Hungary — mascus.hu, Hungarian"},{"value":"ro","label":"Romania — mascus.ro, Romanian"},{"value":"bg","label":"Bulgaria — mascus.bg, Bulgarian"},{"value":"hr","label":"Croatia — mascus.hr, Croatian"},{"value":"si","label":"Slovenia — mascus.si, Slovenian"},{"value":"rs","label":"Serbia — mascus.rs, Serbian"},{"value":"me","label":"Montenegro — mascus.me, Serbian"},{"value":"gr","label":"Greece — mascus.gr, Greek"},{"value":"se","label":"Sweden — mascus.se, Swedish"},{"value":"no","label":"Norway — mascus.no, Norwegian"},{"value":"dk","label":"Denmark — mascus.dk, Danish"},{"value":"fi","label":"Finland — mascus.fi, Finnish"},{"value":"ee","label":"Estonia — mascus.ee, Estonian"},{"value":"lt","label":"Lithuania — mascus.lt, Lithuanian"},{"value":"lv","label":"Latvia — mascus.lv, Latvian"},{"value":"ua","label":"Ukraine — mascus.ua, Ukrainian"},{"value":"ua_ru","label":"Ukraine — mascus.com.ua, Russian"},{"value":"tr","label":"Türkiye — mascus.com.tr, Turkish"},{"value":"jp","label":"Japan — mascus.jp, Japanese"},{"value":"kr","label":"South Korea — mascus.co.kr, Korean"},{"value":"tw","label":"Taiwan — mascus.com.tw, Chinese"},{"value":"ar","label":"Middle East — ar.mascus.com, Arabic"}],"default":"com","example":"com","aliases":["site","country_site"]}],"returns":"seller{dealer_id, name, url, street, postcode, city, region, country_code, visiting_street, visiting_city, website, logo, about, brands[], outlets[], member_since, years_on_marketplace, latitude, longitude}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"dealer_id":"427244D9","market":"com"}},{"name":"seller_listings","description":"One dealer's full stock, as rows identical to `search`, with every `search` filter and sort available on top. 🔴 This is the action the source makes easiest to get wrong: handing its dealer filter the complete GUID answers HTTP 200 with 125 rows from FOUR different companies, because the GUID's middle segment is shared. This endpoint sends only the short id the source's own dealer links use, and then checks that what came back really belongs to one company before returning it — if it does not, you get an error rather than four dealers' machines labelled as one.","required_params":["dealer_id"],"optional_params":["market","currency","query","catalog","category","subcategory","brand","model","country","condition","ad_type","year_min","year_max","price_min","price_max","operating_hours_min","operating_hours_max","with_price","sort","page","page_size"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"The dealer's 8-character id, as every search row returns it in `seller.dealer_id`, as `suggest` returns it for a dealer match, and as the source's own dealer links carry it. A full GUID is shortened for you.","on_invalid":"reject","example":"427244D9","value_pattern":"[0-9A-Fa-f]{8}","aliases":["company_id","organization_id"]},{"name":"market","type":"enum","required":false,"description":"Which country front-end to read. All 39 share ONE catalogue, so this does NOT pick a different inventory: it picks the language of the labels on `detail`, `categories` and `suggest`, and 🔴 the UNITS — the international front-end ('com') reports the odometer in MILES, the other 38 in kilometres. `mileage_km` is normalised on every market and `mileage_km_min/max` is always in kilometres, so you never have to care. Three front-ends the marketplace itself links (mascus.fr, mascus.es, mascus.com.br) answer HTTP 404 for every listing and return MARKET_UNAVAILABLE rather than a half-filled answer.","on_invalid":"reject","allowed_values":[{"value":"com","label":"International — mascus.com, English labels. 🔴 The ONLY front-end that reports the odometer in MILES; the other 38 report kilometres (`mileage_km` is normalised on all)"},{"value":"uk","label":"United Kingdom — mascus.co.uk, English"},{"value":"ie","label":"Ireland — mascus.ie, English"},{"value":"au","label":"Australia — mascus.com.au, English"},{"value":"nz","label":"New Zealand — mascus.co.nz, English"},{"value":"za","label":"South Africa — mascus.co.za, English"},{"value":"de","label":"Germany — mascus.de, German"},{"value":"at","label":"Austria — mascus.at, German"},{"value":"lu","label":"Luxembourg — mascus.lu, German"},{"value":"nl","label":"Netherlands — mascus.nl, Dutch"},{"value":"be","label":"Belgium — mascus.be, Dutch"},{"value":"it","label":"Italy — mascus.it, Italian"},{"value":"pt","label":"Portugal — mascus.pt, Portuguese"},{"value":"mx","label":"Latin America — es.mascus.com, Spanish"},{"value":"pl","label":"Poland — mascus.pl, Polish"},{"value":"cz","label":"Czechia — mascus.cz, Czech"},{"value":"sk","label":"Slovakia — mascus.sk, Slovak"},{"value":"hu","label":"Hungary — mascus.hu, Hungarian"},{"value":"ro","label":"Romania — mascus.ro, Romanian"},{"value":"bg","label":"Bulgaria — mascus.bg, Bulgarian"},{"value":"hr","label":"Croatia — mascus.hr, Croatian"},{"value":"si","label":"Slovenia — mascus.si, Slovenian"},{"value":"rs","label":"Serbia — mascus.rs, Serbian"},{"value":"me","label":"Montenegro — mascus.me, Serbian"},{"value":"gr","label":"Greece — mascus.gr, Greek"},{"value":"se","label":"Sweden — mascus.se, Swedish"},{"value":"no","label":"Norway — mascus.no, Norwegian"},{"value":"dk","label":"Denmark — mascus.dk, Danish"},{"value":"fi","label":"Finland — mascus.fi, Finnish"},{"value":"ee","label":"Estonia — mascus.ee, Estonian"},{"value":"lt","label":"Lithuania — mascus.lt, Lithuanian"},{"value":"lv","label":"Latvia — mascus.lv, Latvian"},{"value":"ua","label":"Ukraine — mascus.ua, Ukrainian"},{"value":"ua_ru","label":"Ukraine — mascus.com.ua, Russian"},{"value":"tr","label":"Türkiye — mascus.com.tr, Turkish"},{"value":"jp","label":"Japan — mascus.jp, Japanese"},{"value":"kr","label":"South Korea — mascus.co.kr, Korean"},{"value":"tw","label":"Taiwan — mascus.com.tw, Chinese"},{"value":"ar","label":"Middle East — ar.mascus.com, Arabic"}],"default":"com","example":"com","aliases":["site","country_site"]},{"name":"currency","type":"string","required":false,"description":"The currency to convert into, one of the 131 the source supports (EUR, USD, GBP, PLN, SEK, CZK, HUF, TRY, JPY, ZAR…). 🔴 Two measured consequences. (1) `price_min`/`price_max` are bands IN THIS CURRENCY: the same 10,000-50,000 band answers 19,366 rows in EUR and 18,583 in USD. (2) The conversion appears as `price_converted` + `price_converted_currency`, never as `price` — `price` and `currency` are always the seller's own asking price and do not move with this parameter.","on_invalid":"reject","default":"EUR","example":"EUR","value_pattern":"[A-Za-z]{3}","aliases":["usercurrency"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into the marketplace's own search box: a machine type ('excavator', 'bagger'), a make, a model, or several words. Extra words NARROW here rather than widen — measured: 'excavator' 46,033 rows, 'caterpillar 320' 2,273 — and an unmatched word gives an honest empty answer. 🔴 FREE TEXT IS SCORED IN THE CHOSEN FRONT-END'S OWN LANGUAGE, so the same word is a different query per market: 'excavator' answered 46,041 rows on the international front-end and 46,118 on the German one, and the first 40 rows of the two had NOT ONE listing in common (a make-and-model query such as 'Kubota M5-111D' does match identically on both). A result set that must be reproducible across markets has to be pinned with the typed filters or a dealer, not with free text.","on_invalid":"reject","example":"caterpillar 320","aliases":["q","keyword"]},{"name":"catalog","type":"enum","required":false,"description":"One of the marketplace's six sectors. Comma-separate for several. 🔴 The value is the sector CODE, which differs from the URL slug on three of the six ('cargo-transport' not 'transportation', 'materialhandling' not 'material-handling', 'groundscare' not 'groundcare') — a value guessed off a URL returns zero rows, so the codes are published and validated here.","on_invalid":"reject","allowed_values":[{"value":"construction","label":"Construction plant — 252,476 listings (excavators, loaders, dumpers, cranes, compaction, concrete, drilling). URL slug: /construction"},{"value":"cargo-transport","label":"Trucks, trailers, vans and buses — 96,956 listings. URL slug: /transportation (the filter value is 'cargo-transport', not the slug)"},{"value":"agriculture","label":"Agricultural machinery — 83,644 listings (tractors, harvesters, forage, tillage, sowing, sprayers). URL slug: /agriculture"},{"value":"materialhandling","label":"Material handling — 27,455 listings (forklifts, telehandlers, access platforms, warehouse equipment). URL slug: /material-handling"},{"value":"forestry","label":"Forestry machinery — 25,707 listings (harvesters, forwarders, chippers, cranes). URL slug: /forestry"},{"value":"groundscare","label":"Groundcare — 10,840 listings (mowers, turf care, utility vehicles). URL slug: /groundcare (note the source's own spelling of the code: 'groundscare')"}],"example":"construction","aliases":["catalogs","sector"]},{"name":"category","type":"array","required":false,"description":"Category code inside a sector, as the `categories` action returns it ('excavators', 'tractors', 'trucks', 'forklifts'). Comma-separate for several. An unknown code is answered honestly with zero rows rather than ignored, but reading the code out of `categories` or `suggest` is the way to be sure.","on_invalid":"reject","example":"excavators","aliases":["categories"]},{"name":"subcategory","type":"array","required":false,"description":"The third taxonomy level ('crawlerexcavators', 'miniexcavators', 'wheelexcavators'), from the `categories` action with a `category_code` set. This is how you get from 40,068 excavators to the 20,806 crawler excavators.","on_invalid":"reject","example":"crawlerexcavators","aliases":["subcategories"]},{"name":"brand","type":"array","required":false,"description":"Make, spelled the way the source's own facet spells it ('CAT' not 'Caterpillar', 'John Deere', 'Volvo', 'Mercedes-Benz'). Case does not matter, the spelling does — read it from `facets` or let `suggest` map what a user typed. Measured to bite: 46,035 rows for 'excavator' → 9,913 for CAT.","on_invalid":"reject","example":"CAT","aliases":["brands","make"]},{"name":"model","type":"array","required":false,"description":"Model name, as the source's own type-ahead spells it. Only works with `brand` — a bare model name is ambiguous across makes, so it is rejected rather than returning an answer that looks filtered. Measured: brand=CAT + model=320 → 1,553 rows.","on_invalid":"reject","example":"320","aliases":["models"]},{"name":"country","type":"array","required":false,"description":"Seller country, 2-letter ISO code. Comma-separate for several. 80 countries have stock on a typical query; the `facets` action lists them with counts. Measured to bite: 46,035 → 3,494 for DE.","on_invalid":"reject","example":"DE","aliases":["countries"]},{"name":"condition","type":"enum","required":false,"description":"Condition class. Comma-separate for several. The source stores these as numeric property ids; this takes the words and sends the ids. Measured: 46,035 → 4,458 for 'new'.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used — the default state of this marketplace"},{"value":"new","label":"New / unused"},{"value":"reconditioned","label":"Reconditioned"},{"value":"remanufactured","label":"Remanufactured"},{"value":"demo","label":"Demonstration machine"},{"value":"vintage","label":"Vintage / collector"},{"value":"damaged","label":"Damaged"},{"value":"dismantled","label":"Dismantled / for parts"},{"value":"operates_with_deficiencies","label":"Operates with deficiencies"},{"value":"rental_possibility","label":"Offered with a rental option"}],"example":"new","aliases":["conditions"]},{"name":"ad_type","type":"enum","required":false,"description":"The structural kind of advert. 🔴 An unknown value is NOT an error on this source: it is dropped and you get the whole unfiltered catalogue with HTTP 200, so this endpoint validates it instead of forwarding it. Measured to bite: 46,035 → 5,116 auction lots, → 333 rental machines.","on_invalid":"reject","allowed_values":[{"value":"usedad","label":"An ordinary dealer advert with an asking price or 'price on request'"},{"value":"auctionad","label":"An auction lot — carries an event name, start/end time and the auction house's own listing link; its price is 0 because bidding happens off this marketplace"},{"value":"rentalad","label":"A machine offered for rent — carries daily / weekly / monthly rates and the regions it can be hired in. May ALSO carry a sale price (measured: a Yanmar mini-excavator was listed at EUR 15,900 and at EUR 85/day at the same time)"}],"example":"auctionad","aliases":["ad_types"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. 🔴 The source's own name for this filter is not the obvious one and the obvious one is accepted with HTTP 200 and then ignored, so a naive year window returns the unfiltered catalogue looking filtered. Here it bites: 46,035 → 11,205 for 2015-2020.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100,"aliases":["year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive. Note the source carries seller-entered years as far ahead as 2027, so an open-ended upper bound is not the same as 'up to this year'.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["year_to"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, 🔴 IN THE `currency` YOU ASKED FOR (default EUR), not in the seller's currency. Measured: the same 10,000-50,000 band answers 19,366 rows in EUR and 18,583 in USD. Any price bound also excludes the listings that publish no price at all and the source's own 0 and 1 placeholder prices.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, 🔴 in the `currency` you asked for (default EUR), not in the seller's currency. Setting it also excludes every listing that publishes no price at all.","on_invalid":"reject","example":50000,"minimum":0},{"name":"operating_hours_min","type":"integer","required":false,"description":"Lowest hour-meter reading to include, in hours — the field a used-plant buyer prices on. Verified front-end independent, unlike the odometer: the 0-2,000 h band answers the same 412 rows on the international and the German front-end.","on_invalid":"reject","example":0,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Highest hour-meter reading to include, in hours. Measured to bite: 46,035 → 412 for 0-2,000 h on the transport sector.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["hours_max"]},{"name":"with_price","type":"boolean","required":false,"description":"Only listings that publish a price. Most of this marketplace does not — auction lots carry none at all and many dealers list 'price on request' — so this is the most useful narrowing filter for a pricing job. Measured: 46,035 → 32,305.","on_invalid":"reject","default":false,"example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. Every value was checked to change the DATA, not merely be accepted; 🔴 a value outside this list is accepted with HTTP 200 and then ignored, so it is validated here. Read the notes on `price_asc` and `hours_asc` first: both change WHICH rows you get, not only their order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The source's own relevance order (its default)"},{"value":"price_asc","label":"Cheapest first. 🔴 Two caveats, both measured: this drops every unpriced listing (46,035 → 32,305), and the source's own first page is full of 0 and 1 placeholder prices — pair it with `price_min` to get a usable cheap-end list"},{"value":"price_desc","label":"Most expensive first"},{"value":"year_desc","label":"Newest year of construction first. The source carries seller-entered years up to 2027, so the first page can be ahead of today"},{"value":"year_asc","label":"Oldest year of construction first"},{"value":"newest","label":"Most recently listed first — this is the one to poll for new stock"},{"value":"oldest","label":"Longest-listed first"},{"value":"hours_asc","label":"Fewest operating hours first. Listings with NO reading sort first, so pair it with `operating_hours_min` if you want readings only"},{"value":"hours_desc","label":"Most operating hours first"},{"value":"mileage_asc","label":"Lowest odometer first"},{"value":"mileage_desc","label":"Highest odometer first"},{"value":"brand_asc","label":"Make A→Z"},{"value":"brand_desc","label":"Make Z→A"},{"value":"model_asc","label":"Model A→Z"},{"value":"model_desc","label":"Model Z→A"},{"value":"country_asc","label":"Seller country A→Z"},{"value":"country_desc","label":"Seller country Z→A"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. 🔴 `page x page_size` must stay at or below 10,000: past that the source answers HTTP 200 and serves PAGE 1'S ROWS under the page number you asked for (measured at four page sizes), so the combination is refused rather than letting a paging loop re-ingest the first page for ever. `meta.pagination` publishes `last_page`, `retrievable_max` and an honest `has_more`.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-200 (the source's own default is 40). A large page is the cheap way to the 10,000-row ceiling: at 200 it takes 50 calls instead of 250.","on_invalid":"reject","default":40,"example":40,"minimum":1,"maximum":200,"aliases":["pagesize"]}],"returns":"listings[]: listing_id, asset_id (the id the `detail` action takes), url, listing_type (classified | auction | rental | marketplace_external), brand, model, year, catalog, category, operating_hours + operating_hours_unit, mileage + mileage_unit, mileage_km (ALWAYS kilometres, normalised — the international front-end reports miles) + mileage_km_exact (false only on that one front-end, where the back conversion is +/-1 km), price + currency (the SELLER'S OWN asking price and currency, verified invariant across 10 country front-ends), price_on_request, price_eur, price_converted + price_converted_currency (only when you asked for a currency the seller did not price in), rental{daily, weekly, monthly, currency, vat_rate}, auction{event_name, starts_at, ends_at, country, city, lot_url, auction_house_listing_id}, location_city, location_country_code, seller{dealer_id, name, country, url}, image, image_count, video_count, featured, highlighted, listed_last_24h, listed_at. meta carries total, pagination (page, page_size, last_page, retrievable_max, has_more), price_filter_currency, filters_applied (what actually went to the source), facets when asked for, and any warnings. meta.dealer_id echoes the id the rows were verified against.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"dealer_id":"427244D9","market":"com","page_size":40}}]},{"name":"mcp-registry","category":{"id":"developer-tools","title":"Developer Tools"},"title":"MCP Server & Agent-Skill Registry API — discover, search and inspect Model Context Protocol (MCP) servers and agent skills across the Official MCP Registry, Glama and Smithery, with risk signals and trending","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mcp-registry/v1","spec_available":true,"actions":[{"name":"search","description":"Normalized cross-registry search over the Official MCP Registry, Glama and Smithery (and skills via GitHub). Dedups the same server across registries by canonical GitHub repo and returns cross-registry presence.","required_params":["query"],"optional_params":["type","source","sort","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search (server name, capability, keyword).","on_invalid":"reject","example":"filesystem","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"Which ecosystem to search.","on_invalid":"reject","allowed_values":[{"value":"mcp","label":"MCP servers"},{"value":"skill","label":"Agent skills (GitHub)"},{"value":"all","label":"Both"}],"default":"mcp","example":"mcp"},{"name":"source","type":"enum","required":false,"description":"Restrict to a single source (default: all reachable).","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All reachable"},{"value":"official","label":"Official MCP Registry"},{"value":"glama","label":"Glama"},{"value":"smithery","label":"Smithery"}],"default":"all","example":"all"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Source relevance"},{"value":"popularity","label":"Most used / most stars"},{"value":"recent","label":"Recently updated/created"}],"default":"relevance","example":"relevance"},{"name":"limit","type":"integer","required":false,"description":"Max merged results (1-100).","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"{ results: [{id,name,title,type,description,github_url,license,version,transport[],status,updated_at,sources[],cross_registry_count,source_urls,metrics{use_count,stars,verified,score}}], source_health{}, total }","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"filesystem","limit":10}},{"name":"server_detail","description":"Full merged profile for one MCP server across every registry it appears in: manifest (tools/capabilities/transport), install paths (packages/remotes/connections), license, GitHub repo health, and cross-registry presence (how many registries list it = trust signal).","required_params":["id"],"optional_params":["repo_health"],"params":[{"name":"id","type":"string","required":true,"description":"A GitHub URL/slug (owner/repo), a Smithery qualifiedName, a Glama id, or an Official registry name. github_url is the most reliable (it joins all registries).","on_invalid":"reject","example":"github.com/modelcontextprotocol/servers","aliases":["github_url","server_id","qualified_name"]},{"name":"repo_health","type":"boolean","required":false,"description":"Include GitHub repo-health enrichment (stars/issues/archived/license). Default true.","on_invalid":"reject","default":true,"example":true}],"returns":"{ id, name, description, github_url, license, version, transport[], status, sources[], cross_registry_count, tools[], install[], env_vars[], repo_health{}, source_urls{} }","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"github.com/modelcontextprotocol/servers"}},{"name":"skill_detail","description":"Metadata for one agent-skill repo (GitHub-backed). Fetches the repo + its SKILL.md frontmatter (name/description/license) + repo health.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"GitHub URL or owner/repo slug of the skill repository.","on_invalid":"reject","example":"anthropics/skills","aliases":["github_url","repo"]}],"returns":"{ id, name, description, license, skill_md{found,frontmatter}, repo_health{}, github_url }","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"github.com/modelcontextprotocol/servers"}},{"name":"security_signals","description":"HEURISTIC risk signals for an MCP server (NOT a safe/unsafe certification). Flags permission breadth (fs/network/exec), credential/env-var requests, repo health (archived/low-adoption), prompt-injection patterns in description/manifest, and corroboration (cross-registry presence). Always returns a disclaimer.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"GitHub URL/slug or Smithery qualifiedName of the server to scan.","on_invalid":"reject","example":"github.com/modelcontextprotocol/servers","aliases":["github_url","server_id","qualified_name"]}],"returns":"{ id, github_url, risk_signals:[{signal,severity,detail}], signal_count, highest_severity, corroboration{sources,cross_registry_count}, disclaimer }","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"github.com/modelcontextprotocol/servers"}},{"name":"trending","description":"New / rising entries. MCP: most-used servers on Smithery + latest on the Official registry. Skills: recently-created GitHub skill repos.","required_params":[],"optional_params":["type","limit"],"params":[{"name":"type","type":"enum","required":false,"description":"Ecosystem.","on_invalid":"reject","allowed_values":[{"value":"mcp","label":"MCP servers"},{"value":"skill","label":"Agent skills"}],"default":"mcp","example":"mcp"},{"name":"limit","type":"integer","required":false,"description":"Max results (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50}],"returns":"{ results:[normalized records w/ metrics], basis, source_health{} }","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"mcp","limit":10}},{"name":"list_sources","description":"The registries this engine aggregates, their roles, auth status and live reachability. Free.","required_params":[],"optional_params":[],"params":[],"returns":"{ sources:[{key,name,role,auth,reachable,note}] }","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"mediaexpert","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Media Expert API — search Poland's largest electronics retailer and read products with PLN shelf, Omnibus, promo-code, app and club prices, stock, seller, EAN and specs","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mediaexpert/v1","spec_available":true,"actions":[{"name":"search","description":"Search mediaexpert.pl by keyword with the site's own price range (PLN), discounted-only switch and sort. Each row: product id, EAN, erp id, model, brand, title, URL, image, the shelf price, crossed-out price, EU Omnibus lowest-30-day price, promo-code price with its code and dates, app-only price, club price, seller (Media Expert or a marketplace seller), availability with online and store stock, store pickup, rating and review count, category. When Media Expert answers a keyword with a category page (e.g. 'pralka' → washing machines) the engine lists that category and says so in `redirected_to`.","required_params":["query"],"optional_params":["price_min","price_max","only_discounted","sort","page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed into Media Expert's search box (Polish or brand/model names, e.g. 'iphone 17', 'odkurzacz dyson').","on_invalid":"reject","example":"iphone 17","aliases":["q","phrase","keyword","keywords"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in whole PLN (złoty, not grosze). Media Expert applies the price range to the price after an active promo code (the `filter_price` of each row), so a product shelf-priced above the range can appear when its code price is inside it.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in whole PLN, applied like price_min (to the price after an active promo code).","on_invalid":"reject","example":2000,"minimum":0,"aliases":["max_price"]},{"name":"only_discounted","type":"boolean","required":false,"description":"Only products currently on promotion (the site's own 'Promocje' switch).","on_invalid":"reject","default":false,"aliases":["discounted","on_sale"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the orders that measurably change the result are offered.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (the site's default order)"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"rating_desc","label":"Best rated first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Results page, 1-based. The source pages at most 100 pages deep; a page past the end returns no rows with page_clamped true.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Products per page: 5, 10, 15, 20, 30 or 50 — the page sizes Media Expert's search accepts (any other value is silently answered with 30, so it is refused here).","on_invalid":"reject","default":30,"example":30,"minimum":5,"maximum":50,"aliases":["page_size","per_page"]}],"returns":"results[]{product_id, offer_id, parent_id, erp_id, ean, model, brand, title, url, image, currency (PLN), price (shelf price), price_net, was_price (crossed-out), discount_amount, discount_percent, omnibus_lowest_30d_price (EU Omnibus: lowest price of the last 30 days), code_price, promo_code, promo_valid_from, promo_valid_to, promo_active, promo_discount[]{type, value}, hot_deal, app_price, app_promo_code, app_promo_valid_to, app_promo_active, member_price (club), filter_price, seller{type: retailer|marketplace, id, name, url, min_shipping_price, delivery_info, rating_count, recommended_percent}, availability{status, label, description, available_in_store, stock_online, stock_store, stock_capped}, rating, review_count, rating_scale, category{id, name, url}, category_ids[], outlet, refurbished} + total, total_reachable, pages, page, limit, has_more, page_clamped, search_mode (keyword | category_redirect | product_redirect), redirected_to{url, category_id | product_id}, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 17","limit":10}},{"name":"category","description":"List one Media Expert category (e.g. washing machines, smartphones) with the same price, discount and sort options and the same rows as search. Give the category id or the category URL from mediaexpert.pl. An id that is not a real category is refused (Media Expert itself would answer it with the whole 2.2-million-product catalogue).","required_params":[],"optional_params":["category_id","url","price_min","price_max","only_discounted","sort","page","limit"],"params":[{"name":"category_id","type":"integer","required":false,"description":"Media Expert category id (e.g. 13720 = Pralki, washing machines). Either category_id or url is required.","on_invalid":"reject","example":13720,"minimum":1,"aliases":["category","id"]},{"name":"url","type":"string","required":false,"description":"A mediaexpert.pl category URL; resolved to its category id. Filter segments in the URL are not applied — use the parameters. Either category_id or url is required.","on_invalid":"reject","example":"https://www.mediaexpert.pl/agd/pralki-i-suszarki/pralki","aliases":["category_url","link"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in whole PLN (złoty, not grosze). Media Expert applies the price range to the price after an active promo code (the `filter_price` of each row), so a product shelf-priced above the range can appear when its code price is inside it.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in whole PLN, applied like price_min (to the price after an active promo code).","on_invalid":"reject","example":2000,"minimum":0,"aliases":["max_price"]},{"name":"only_discounted","type":"boolean","required":false,"description":"Only products currently on promotion (the site's own 'Promocje' switch).","on_invalid":"reject","default":false,"aliases":["discounted","on_sale"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the orders that measurably change the result are offered.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (the site's default order)"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"rating_desc","label":"Best rated first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Results page, 1-based. The source pages at most 100 pages deep; a page past the end returns no rows with page_clamped true.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-50 (the site itself shows 30).","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":50,"aliases":["page_size","per_page"]}],"returns":"results[]{product_id, offer_id, parent_id, erp_id, ean, model, brand, title, url, image, currency (PLN), price (shelf price), price_net, was_price (crossed-out), discount_amount, discount_percent, omnibus_lowest_30d_price (EU Omnibus: lowest price of the last 30 days), code_price, promo_code, promo_valid_from, promo_valid_to, promo_active, promo_discount[]{type, value}, hot_deal, app_price, app_promo_code, app_promo_valid_to, app_promo_active, member_price (club), filter_price, seller{type: retailer|marketplace, id, name, url, min_shipping_price, delivery_info, rating_count, recommended_percent}, availability{status, label, description, available_in_store, stock_online, stock_store, stock_capped}, rating, review_count, rating_scale, category{id, name, url}, category_ids[], outlet, refurbished} + total, total_reachable, pages, page, limit, has_more, page_clamped, category{id, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":13720,"sort":"price_asc","limit":10}},{"name":"product","description":"The full Media Expert product record by product id, URL or erp id: every price type (shelf, crossed-out, Omnibus lowest-30-day, promo code with dates, app, club), EAN, model, brand, seller, online and store stock, store pickup, delivery options, instalment offer when published, grouped specifications, all images, breadcrumb, rating and review count. The long marketing description is a separate action (`description`) because Media Expert ships it with embedded images (up to 1.8 MB).","required_params":[],"optional_params":["product_id","url","erp_id"],"params":[{"name":"product_id","type":"string","required":false,"description":"Media Expert product id exactly as a search row's `product_id` returns it (e.g. 7872945), or a mediaexpert.pl product URL. Use erp_id instead for the shop's item number (the 'Kod produktu' / ld+json productID). One of product_id, url, erp_id.","on_invalid":"reject","example":7872945,"aliases":["productId","pid"]},{"name":"url","type":"string","required":false,"description":"A mediaexpert.pl product page URL.","on_invalid":"reject","example":"https://www.mediaexpert.pl/telewizory-i-rtv/sluchawki/wszystkie-sluchawki/sluchawki-nauszne-philips-tah2209bk-czarny","aliases":["product_url","link"]},{"name":"erp_id","type":"string","required":false,"description":"Media Expert item number ('Kod produktu', the productID/sku in the page's structured data, e.g. 2083775).","on_invalid":"reject","example":"2083775","aliases":["sku","item_number","kod_produktu"]}],"returns":"product{product_id, offer_id, parent_id, erp_id, ean, model, brand, title, url, image, currency (PLN), price (shelf price), price_net, was_price (crossed-out), discount_amount, discount_percent, omnibus_lowest_30d_price (EU Omnibus: lowest price of the last 30 days), code_price, promo_code, promo_valid_from, promo_valid_to, promo_active, promo_discount[]{type, value}, hot_deal, app_price, app_promo_code, app_promo_valid_to, app_promo_active, member_price (club), filter_price, seller{type: retailer|marketplace, id, name, url, min_shipping_price, delivery_info, rating_count, recommended_percent}, availability{status, label, description, available_in_store, stock_online, stock_store, stock_capped}, rating, review_count, rating_scale, category{id, name, url}, category_ids[], outlet, refurbished, images[], specs[]{group, attributes{name: value}}, breadcrumb[]{id, name, url}, installment, bank_installment_offer, delivery_options[]{name, price}, flags[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":7872945}},{"name":"description","description":"The long product description Media Expert shows under 'Opis', as plain text (HTML and the embedded images removed), by product id, URL or erp id. Separate from `product` because the source sends it with base64 images inside (measured up to 1.8 MB per product).","required_params":[],"optional_params":["product_id","url","erp_id"],"params":[{"name":"product_id","type":"string","required":false,"description":"Media Expert product id exactly as a search row's `product_id` returns it (e.g. 7872945), or a mediaexpert.pl product URL. Use erp_id instead for the shop's item number (the 'Kod produktu' / ld+json productID). One of product_id, url, erp_id.","on_invalid":"reject","example":7872945,"aliases":["productId","pid"]},{"name":"url","type":"string","required":false,"description":"A mediaexpert.pl product page URL.","on_invalid":"reject","example":"https://www.mediaexpert.pl/telewizory-i-rtv/sluchawki/wszystkie-sluchawki/sluchawki-nauszne-philips-tah2209bk-czarny","aliases":["product_url","link"]},{"name":"erp_id","type":"string","required":false,"description":"Media Expert item number ('Kod produktu', the productID/sku in the page's structured data, e.g. 2083775).","on_invalid":"reject","example":"2083775","aliases":["sku","item_number","kod_produktu"]}],"returns":"product_id, offer_id, title, url, description (plain text), description_chars, embedded_images (count of images inlined in the source HTML)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":7872945}}]},{"name":"mediamarkt","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"MediaMarkt API scraper — search products, browse categories and read full product records (price, strike price, stock status, delivery window, marketplace sellers, specs, EAN, ratings, reviews) from MediaMarkt in 10 countries (DE, TR, AT, CH, NL, BE, ES, IT/MediaWorld, PL, HU) and Saturn Germany. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mediamarkt/v1","spec_available":true,"actions":[{"name":"search","description":"Search one national MediaMarkt storefront by keyword and get 12 products per page with the price a shopper pays now, the struck-through price and its type, discount, financing offer, who sells it (MediaMarkt or a marketplace seller), online and delivery status with the delivery window, customer rating on a 5-star scale, EAN, category path, energy class and key features. Sort by price, rating, bestseller or newest; filter by brand and minimum rating.","required_params":["query"],"optional_params":["country","store","language","page","sort","brand","min_rating","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, as a shopper would type it on the storefront.","on_invalid":"reject","example":"iphone 17","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which national MediaMarkt storefront to read. Currency and language follow the country (TRY for tr, CHF for ch, PLN for pl, HUF for hu, EUR elsewhere). `it` is MediaWorld, MediaMarkt's Italian brand. Unknown values are rejected.","on_invalid":"reject","allowed_values":[{"value":"tr","label":"Türkiye — mediamarkt.com.tr (TRY)"},{"value":"de","label":"Germany — mediamarkt.de (EUR)"},{"value":"at","label":"Austria — mediamarkt.at (EUR)"},{"value":"ch","label":"Switzerland — mediamarkt.ch (CHF; de/fr/it)"},{"value":"nl","label":"Netherlands — mediamarkt.nl (EUR)"},{"value":"be","label":"Belgium — mediamarkt.be (EUR; nl/fr)"},{"value":"es","label":"Spain — mediamarkt.es (EUR)"},{"value":"it","label":"Italy — mediaworld.it (EUR)"},{"value":"pl","label":"Poland — mediamarkt.pl (PLN)"},{"value":"hu","label":"Hungary — mediamarkt.hu (HUF)"}],"default":"de","example":"tr","aliases":["market"]},{"name":"store","type":"enum","required":false,"description":"Retail brand. `saturn` reads saturn.de, the sister chain on the same platform, and is only valid with country=de.","on_invalid":"reject","allowed_values":[{"value":"mediamarkt","label":"MediaMarkt (MediaWorld in Italy)"},{"value":"saturn","label":"Saturn — Germany only (saturn.de)"}],"default":"mediamarkt"},{"name":"language","type":"enum","required":false,"description":"Only for multilingual storefronts: Switzerland (de, fr, it) and Belgium (nl, fr). Defaults to the storefront's first language (de for ch, nl for be). Titles, specs and category names come back in this language; prices and ids are identical.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"nl","label":"Dutch"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. 12 products per page; the storefront itself stops at page 30 (360 products), whatever `total_results` says.","on_invalid":"reject","default":1,"minimum":1,"maximum":30},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orderings the storefront itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (site default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Best customer rating first"},{"value":"bestseller","label":"Best selling first"},{"value":"newest","label":"Newest first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Keep only one brand, spelled as the storefront spells it (brands are upper-case on MediaMarkt: APPLE, SAMSUNG, SIEMENS). One brand per call.","on_invalid":"reject","example":"APPLE"},{"name":"min_rating","type":"integer","required":false,"description":"Keep only products whose customer rating is at least this many stars (1-5).","on_invalid":"reject","minimum":1,"maximum":5},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{position, product_id, title, brand, url, image, ean, currency, price (number, what a web shopper pays now), was_price (struck-through price) + was_price_type (e.g. RRP = manufacturer list price), discount_amount, discount_percent, app_price (only when the app-only price differs), member_price (only when the club price differs), installment{months, monthly_amount, total_amount, interest_effective_percent}, vat_rate, seller{type: retailer|marketplace, id, name, rating, rating_scale}, rating, review_count, rating_scale (5), category, breadcrumb[], availability{online_status, buyable_online, delivery_available, pickup_available, delivery_status, delivery_earliest, delivery_latest, shipped_from_store, shipping_cost, pickup_status, release_date}, energy_efficiency{class, label_url, datasheet_url}, badges[], key_features[{name, value}], refurbished, sponsored}, count, total_results, page, page_count, max_page, search_mode ('keyword' | 'resolved' when the storefront answered with a category or brand page | 'phrase' when it answered with an editorial page and the keyword was re-asked as an exact phrase), resolved_url, category, country, store, language, currency","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"kaffeevollautomat","country":"de","store":"saturn"}},{"name":"category","description":"List the products of one MediaMarkt category page (from the site navigation or a product breadcrumb), 12 per page, with the same product fields as search. Sort and brand/rating filters work the same way.","required_params":["category"],"optional_params":["page","sort","brand","min_rating","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A category page URL from the storefront (…/category/<name>-<id>.html) or its path. Its host sets the country. Category URLs appear in the site navigation and in every product's breadcrumb.","on_invalid":"reject","example":"https://www.mediamarkt.com.tr/tr/category/telefon-465595.html","aliases":["category_url","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. 12 products per page; the storefront itself stops at page 30 (360 products), whatever `total_results` says.","on_invalid":"reject","default":1,"minimum":1,"maximum":30},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orderings the storefront itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (site default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Best customer rating first"},{"value":"bestseller","label":"Best selling first"},{"value":"newest","label":"Newest first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Keep only one brand, spelled as the storefront spells it (brands are upper-case on MediaMarkt: APPLE, SAMSUNG, SIEMENS). One brand per call.","on_invalid":"reject","example":"APPLE"},{"name":"min_rating","type":"integer","required":false,"description":"Keep only products whose customer rating is at least this many stars (1-5).","on_invalid":"reject","minimum":1,"maximum":5},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{position, product_id, title, brand, url, image, ean, currency, price (number, what a web shopper pays now), was_price (struck-through price) + was_price_type (e.g. RRP = manufacturer list price), discount_amount, discount_percent, app_price (only when the app-only price differs), member_price (only when the club price differs), installment{months, monthly_amount, total_amount, interest_effective_percent}, vat_rate, seller{type: retailer|marketplace, id, name, rating, rating_scale}, rating, review_count, rating_scale (5), category, breadcrumb[], availability{online_status, buyable_online, delivery_available, pickup_available, delivery_status, delivery_earliest, delivery_latest, shipped_from_store, shipping_cost, pickup_status, release_date}, energy_efficiency{class, label_url, datasheet_url}, badges[], key_features[{name, value}], refurbished, sponsored}, count, total_results, page, page_count, max_page, category, breadcrumb[], category_url, country, store, language, currency","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"https://www.mediamarkt.com.tr/tr/category/telefon-465595.html"}},{"name":"product/detail","description":"The full MediaMarkt product record by id or URL: title, brand, EAN, price with strike price, discount, app-only and club prices when they differ, financing, seller, online / delivery / pickup status with the delivery window and shipping cost, image gallery, complete technical specification grouped as on the site, description, colour and size variants with their own price and status, other marketplace sellers' offers, rating with its 5-star distribution, and the first page of customer reviews.","required_params":["product_id"],"optional_params":["country","store","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"MediaMarkt product id — the number at the end of a product URL (…/product/_apple-iphone-17-pro-max-…-1249245.html → 1249245). A full product URL is also accepted, and its host sets the country. Every `search` row returns `product_id`.","on_invalid":"reject","example":"1249245","aliases":["id","url"]},{"name":"country","type":"enum","required":false,"description":"Which national MediaMarkt storefront to read. Currency and language follow the country (TRY for tr, CHF for ch, PLN for pl, HUF for hu, EUR elsewhere). `it` is MediaWorld, MediaMarkt's Italian brand. Unknown values are rejected.","on_invalid":"reject","allowed_values":[{"value":"tr","label":"Türkiye — mediamarkt.com.tr (TRY)"},{"value":"de","label":"Germany — mediamarkt.de (EUR)"},{"value":"at","label":"Austria — mediamarkt.at (EUR)"},{"value":"ch","label":"Switzerland — mediamarkt.ch (CHF; de/fr/it)"},{"value":"nl","label":"Netherlands — mediamarkt.nl (EUR)"},{"value":"be","label":"Belgium — mediamarkt.be (EUR; nl/fr)"},{"value":"es","label":"Spain — mediamarkt.es (EUR)"},{"value":"it","label":"Italy — mediaworld.it (EUR)"},{"value":"pl","label":"Poland — mediamarkt.pl (PLN)"},{"value":"hu","label":"Hungary — mediamarkt.hu (HUF)"}],"default":"de","example":"tr","aliases":["market"]},{"name":"store","type":"enum","required":false,"description":"Retail brand. `saturn` reads saturn.de, the sister chain on the same platform, and is only valid with country=de.","on_invalid":"reject","allowed_values":[{"value":"mediamarkt","label":"MediaMarkt (MediaWorld in Italy)"},{"value":"saturn","label":"Saturn — Germany only (saturn.de)"}],"default":"mediamarkt"},{"name":"language","type":"enum","required":false,"description":"Only for multilingual storefronts: Switzerland (de, fr, it) and Belgium (nl, fr). Defaults to the storefront's first language (de for ch, nl for be). Titles, specs and category names come back in this language; prices and ids are identical.","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"},{"value":"nl","label":"Dutch"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, title, brand, url, image, ean, currency, price (number, what a web shopper pays now), was_price (struck-through price) + was_price_type (e.g. RRP = manufacturer list price), discount_amount, discount_percent, app_price (only when the app-only price differs), member_price (only when the club price differs), installment{months, monthly_amount, total_amount, interest_effective_percent}, vat_rate, seller{type: retailer|marketplace, id, name, rating, rating_scale}, rating, review_count, rating_scale (5), category, breadcrumb[], availability{online_status, buyable_online, delivery_available, pickup_available, delivery_status, delivery_earliest, delivery_latest, shipped_from_store, shipping_cost, pickup_status, release_date}, energy_efficiency{class, label_url, datasheet_url}, badges[], key_features[{name, value}], refurbished, title_raw, product_type, description (plain text), images[], specs[]{group, attributes{name: value}}, variants[]{name, is_color, options[]{product_id, value, title, image, price, online_status}}, marketplace_offers[]{offer_id, seller{type, id, name, rating, rating_scale, review_count}, price, was_price, was_price_type, currency, condition, shipping_cost, delivery_earliest, delivery_latest}, rating_distribution{'5'..'1'}, reviews[]{review_id, rating, title, text, pros[], cons[], date, author, verified_purchase, syndicated_from, reviewed_variant_id, helpful_votes}, reviews_summary (the site's own review summary text where it publishes one), manufacturer_id, online_since, category_ids[]}, country, store, language","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"1249245","country":"tr"}}]},{"name":"medium","category":{"id":"social","title":"Social Media"},"title":"Medium API scraper — Medium.com articles (full text, HTML & markdown), author profiles, publications, responses, tags and search, no account needed","version":"0.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/medium/v1","spec_available":true,"actions":[{"name":"user","description":"Public Medium user profile by username.","required_params":["user"],"optional_params":[],"params":[{"name":"user","type":"string","required":true,"description":"Medium username, with or without the leading @ (the name in medium.com/@<user>).","on_invalid":"reject","example":"dhh"}],"returns":"user{} — user_id, username, name, bio, followers_count, following_count, posts_published_count, author_tags[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dhh"}},{"name":"user_id","description":"Resolve username to Medium userId.","required_params":["user"],"optional_params":[],"params":[{"name":"user","type":"string","required":true,"description":"Medium username, with or without the leading @ (the name in medium.com/@<user>).","on_invalid":"reject","example":"dhh"}],"returns":"user_id, username","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dhh"}},{"name":"user_articles","description":"An author's published articles, newest first, with deep pagination.","required_params":["user"],"optional_params":["limit","cursor"],"params":[{"name":"user","type":"string","required":true,"description":"Medium username, with or without the leading @ (the name in medium.com/@<user>).","on_invalid":"reject","example":"dhh"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"articles[] (id, title, claps, reading_time, url, tags), next_cursor, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dhh"}},{"name":"user_top_articles","description":"User articles sorted by clap count from profile references.","required_params":["user"],"optional_params":["limit"],"params":[{"name":"user","type":"string","required":true,"description":"Medium username, with or without the leading @ (the name in medium.com/@<user>).","on_invalid":"reject","example":"dhh"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":50}],"returns":"articles[] — the user's articles sorted by clap count (descending)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dhh"}},{"name":"article","description":"Article metadata by url or id.","required_params":[],"optional_params":["url","id"],"params":[{"name":"url","type":"string","required":false,"description":"Full article URL (alternative to id).","on_invalid":"ignore","example":"https://medium.com/@dhh/some-article-0123456789ab"},{"name":"id","type":"string","required":false,"description":"Article post id — the 12-char hex at the end of an article URL. Provide id OR url.","on_invalid":"ignore","example":"0123456789ab"}],"returns":"article{} — id, title, subtitle, claps, reading_time, word_count, published_at, url, tags, creator_id, responses_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://medium.com/signal-v-noise/reconsider-41adf356857f"}},{"name":"article_content","description":"Article plain-text body from bodyModel paragraphs.","required_params":[],"optional_params":["url","id"],"params":[{"name":"url","type":"string","required":false,"description":"Full article URL (alternative to id).","on_invalid":"ignore","example":"https://medium.com/@dhh/some-article-0123456789ab"},{"name":"id","type":"string","required":false,"description":"Article post id — the 12-char hex at the end of an article URL. Provide id OR url.","on_invalid":"ignore","example":"0123456789ab"}],"returns":"article{}, body (plain text), paragraph_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://medium.com/signal-v-noise/reconsider-41adf356857f"}},{"name":"article_html","description":"Article HTML body from bodyModel paragraphs.","required_params":[],"optional_params":["url","id"],"params":[{"name":"url","type":"string","required":false,"description":"Full article URL (alternative to id).","on_invalid":"ignore","example":"https://medium.com/@dhh/some-article-0123456789ab"},{"name":"id","type":"string","required":false,"description":"Article post id — the 12-char hex at the end of an article URL. Provide id OR url.","on_invalid":"ignore","example":"0123456789ab"}],"returns":"article{}, body (HTML), paragraph_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://medium.com/signal-v-noise/reconsider-41adf356857f"}},{"name":"article_markdown","description":"Article markdown body from bodyModel paragraphs.","required_params":[],"optional_params":["url","id"],"params":[{"name":"url","type":"string","required":false,"description":"Full article URL (alternative to id).","on_invalid":"ignore","example":"https://medium.com/@dhh/some-article-0123456789ab"},{"name":"id","type":"string","required":false,"description":"Article post id — the 12-char hex at the end of an article URL. Provide id OR url.","on_invalid":"ignore","example":"0123456789ab"}],"returns":"article{}, body (markdown), paragraph_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://medium.com/signal-v-noise/reconsider-41adf356857f"}},{"name":"article_responses","description":"Public responses/comments for an article.","required_params":[],"optional_params":["url","id","limit","cursor"],"params":[{"name":"url","type":"string","required":false,"description":"Full article URL (alternative to id).","on_invalid":"ignore","example":"https://medium.com/@dhh/some-article-0123456789ab"},{"name":"id","type":"string","required":false,"description":"Article post id — the 12-char hex at the end of an article URL. Provide id OR url.","on_invalid":"ignore","example":"0123456789ab"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"responses[] (id, title, text, claps, author_username, created_at, url), next_cursor, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://medium.com/signal-v-noise/reconsider-41adf356857f","limit":10}},{"name":"publication","description":"Publication/collection metadata by slug.","required_params":["slug"],"optional_params":[],"params":[{"name":"slug","type":"string","required":true,"description":"Publication slug — the path segment in medium.com/<slug> (or its custom-domain handle).","on_invalid":"reject","example":"better-programming"}],"returns":"publication{} — id, name, slug, description, url, subscriber_count, created_at","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"towards-data-science"}},{"name":"publication_id","description":"Resolve publication slug to collection id.","required_params":["slug"],"optional_params":[],"params":[{"name":"slug","type":"string","required":true,"description":"Publication slug — the path segment in medium.com/<slug> (or its custom-domain handle).","on_invalid":"reject","example":"better-programming"}],"returns":"publication_id, slug","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"towards-data-science"}},{"name":"publication_articles","description":"A publication's articles, newest first, with deep pagination.","required_params":["slug"],"optional_params":["limit","cursor"],"params":[{"name":"slug","type":"string","required":true,"description":"Publication slug — the path segment in medium.com/<slug> (or its custom-domain handle).","on_invalid":"reject","example":"better-programming"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"articles[] (id, title, claps, url, tags), next_cursor, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"towards-data-science","limit":10}},{"name":"tag","description":"Latest posts for a topic tag (the tag/topic feed).","required_params":["tag"],"optional_params":["limit"],"params":[{"name":"tag","type":"string","required":true,"description":"Medium topic tag slug (e.g. python, machine-learning).","on_invalid":"reject","example":"python"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-25). Larger values are clamped to 25.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":25}],"returns":"tag, posts[] (id, title, url, published_at, creator, description)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"tag":"python"}},{"name":"search_users","description":"Look up an author by exact username. (Medium gates fuzzy people-search behind a logged-in JS app, so this resolves q as a username and returns that profile.)","required_params":["q"],"optional_params":[],"params":[{"name":"q","type":"string","required":true,"description":"Search term.","on_invalid":"reject","example":"python"}],"returns":"users[] — the profile whose username equals q (id, name, bio, follower counts)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"dhh"}},{"name":"search_publications","description":"Look up a publication by exact slug. (Fuzzy publication search is login/JS-gated on Medium, so this resolves q as a publication slug and returns that publication.)","required_params":["q"],"optional_params":[],"params":[{"name":"q","type":"string","required":true,"description":"Search term.","on_invalid":"reject","example":"python"}],"returns":"publications[] — the publication whose slug equals q","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"towards-data-science"}},{"name":"search_tags","description":"Check whether a topic tag exists and is active on Medium (resolves q as a tag slug).","required_params":["q"],"optional_params":[],"params":[{"name":"q","type":"string","required":true,"description":"Search term.","on_invalid":"reject","example":"python"}],"returns":"tags[] — [{slug, sample_posts}] (sample_posts > 0 means the tag is live)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"python"}},{"name":"followers","description":"An author's followers (paginated). Identify the author by 'user' or 'user_id'.","required_params":[],"optional_params":["user","user_id","limit","cursor"],"params":[{"name":"user","type":"string","required":false,"description":"Medium username (with/without @). Provide user OR user_id.","on_invalid":"ignore","example":"dhh"},{"name":"user_id","type":"string","required":false,"description":"Medium numeric/hash user id (a profile's user_id). Provide user_id OR user.","on_invalid":"ignore","example":"abc123def456"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"followers[] (user_id, username, name, bio), next_cursor, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dhh","limit":10}},{"name":"following","description":"The authors a user follows (paginated). Identify the user by 'user' or 'user_id'.","required_params":[],"optional_params":["user","user_id","limit","cursor"],"params":[{"name":"user","type":"string","required":false,"description":"Medium username (with/without @). Provide user OR user_id.","on_invalid":"ignore","example":"dhh"},{"name":"user_id","type":"string","required":false,"description":"Medium numeric/hash user id (a profile's user_id). Provide user_id OR user.","on_invalid":"ignore","example":"abc123def456"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"following[] (user_id, username, name, bio), next_cursor, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"user":"dhh","limit":10}},{"name":"list","description":"Reading list metadata and articles from public list page HTML. Provide the full list 'url', or 'id' together with 'user'.","required_params":[],"optional_params":["id","url","user","username","slug","limit"],"params":[{"name":"id","type":"string","required":false,"description":"Reading-list id (the trailing id in a list URL). Provide with 'user', or instead pass the full list 'url'.","on_invalid":"ignore","example":"38f9e0f9bea6"},{"name":"url","type":"string","required":false,"description":"Full reading-list URL (alternative to user + id).","on_invalid":"ignore","example":"https://medium.com/@dhh/list/my-list-abcdef012345"},{"name":"user","type":"string","required":false,"description":"List owner's username (with/without @; also accepted as 'username'). Combine with id, or pass the full url.","on_invalid":"ignore","example":"dhh","aliases":["username"]},{"name":"slug","type":"string","required":false,"description":"Optional list slug (the human-readable part of a list URL).","on_invalid":"ignore","example":"my-reading-list"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":50}],"returns":"list{id, url, name, article_count}, articles[] (id, url)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://medium.com/@dhh/list/my-list-abcdef012345"}},{"name":"search_articles","description":"Search Medium articles by keyword — returns matching articles with title, URL and publication details from medium.com.","required_params":["q"],"optional_params":["limit","cursor"],"params":[{"name":"q","type":"string","required":true,"description":"Search term.","on_invalid":"reject","example":"python"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"articles[] (id, title, slug, url), query, next_cursor, has_more","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"dhh"}}]},{"name":"meesho","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Meesho API scraper — search meesho.com (India's largest value marketplace) and read full product records: INR price with Meesho's own MRP and discount, the reseller shop behind each listing with its rating, per-size variants and their stock, images, attributes, delivery and return terms, ratings and reviews, plus the category tree and the site's own filter catalogue. Logged out, no account.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/meesho/v1","spec_available":true,"actions":[{"name":"search","description":"Search meesho.com by keyword, up to 100 products per call: product code, title, INR price with Meesho's own struck price and discount where it publishes them, the offer line, rating and rating count, images, the product attributes and size/fabric text, free-delivery and express flags, the supplier's state, Meesho Mall status and listing date. Narrow with meesho.com's own filters (colour, price band, rating, discount, fabric, size, category, gender) and sort the way the site does. A no-result query is reported as one instead of returning the unrelated products meesho.com pads it with.","required_params":["query"],"optional_params":["limit","page","cursor","sort","filters","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for on meesho.com, in English (e.g. 'kurti', 'bluetooth earbuds', 'bedsheet double bed').","on_invalid":"reject","example":"kurti","aliases":["q","keyword","term"]},{"name":"limit","type":"integer","required":false,"description":"Rows per call, 1-100. meesho.com honours every value up to 100 in ONE request.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100},{"name":"page","type":"integer","required":false,"description":"Result page, 1-10. meesho.com pages by cursor, not by number, so a page above 1 is reached by walking the pages here (one upstream call each). Pass the `cursor` from the previous response instead and any depth costs one call.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10},{"name":"cursor","type":"string","required":false,"description":"`pagination.cursor` from the previous response — the cheap way to page. Without it a page number re-serves page one.","on_invalid":"reject"},{"name":"sort","type":"string","required":false,"description":"Sort order, taken from `sort_options` in `search/filters` for the same query. meesho.com publishes 'relevance' and 'newest' on web search; there is no price sort.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (Meesho's default)"},{"value":"newest","label":"New arrivals first"}],"default":"relevance","example":"newest"},{"name":"filters","type":"array","required":false,"description":"Filters from meesho.com's own list — 'Color=Beige', 'Price=Under ₹ 199', 'Rating=4.0 And Above', 'Discount=30% And Above', 'Fabric=Cotton', 'Size=M', or a bare value id such as '2322'. Call `search/filters` with the same query for everything that exists for it. A value meesho.com does not know is refused, because it answers one by returning the UNFILTERED set.","on_invalid":"reject","example":["Price=Under ₹ 199"]},{"name":"include_fallback_results","type":"boolean","required":false,"description":"meesho.com fills a no-result search with unrelated products. Off (default) those rows are withheld and `fallback_results` says so; on, they are returned, still flagged.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh Indian exits one upstream call may try before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, catalog_id, slug, url, title, hero_product_name, price, currency, original_price, discount_percent, discount_amount, discount_text, offer_text, category_id, category_name, rating, rating_count, review_count, designs_count, supplier_count, image, images[], attributes[], details_text, free_delivery, shipping_charges, express_delivery, supplier_state, meesho_mall, tags[], is_ad, listed_at}, count, total_results (always null — meesho.com publishes no total), fallback_results, pagination{cursor, has_more, page}, query, applied_filters[]{group, value, label}, sort","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kurti","limit":20}},{"name":"product/detail","description":"The full Meesho product record by product code or URL: title, INR price with the MRP meesho.com publishes and the discount against it, the special-offer breakdown, stock, every size variant with its own price and availability, the reseller shop (name, handle, shop URL, its own rating, rating count and products sold), rating breakdown, image gallery, the structured attribute table, description, category breadcrumb, delivery estimate and cash-on-delivery flag, and the return options with their prices.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"The Meesho product code — the short code in the URL (meesho.com/<slug>/p/**hs4ysq**), which every search row returns as `product_id`. A full product URL is accepted too.","on_invalid":"reject","example":"hs4ysq","aliases":["id","url","product","sku"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh Indian exits one upstream call may try before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id, product_numeric_id, catalog_id, slug, url, title, catalog_name, price, currency, original_price, discount_percent, discount_amount, price_note, offer_text, offers[]{type, title, description, amount}, in_stock, variants[]{variant_id, name, price, currency, in_stock, is_default}, shop{shop_id, name, handle, url, rating, rating_count, products_listed, products_sold, image, is_manufacturer, meesho_mall_verified}, rating, rating_count, review_count, rating_breakdown, images[], description, attributes[]{group, field, name, value}, category_id, category_name, breadcrumb[]{name, url}, delivery{free, charges, serviceable, express, estimated_date, dispatch, cash_on_delivery}, return_options[]{option, price, note}, meesho_mall, meesho_assured, supplier_count}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"hs4ysq"}},{"name":"product/reviews","description":"A product's ratings and reviews as meesho.com serves them: the 1-5 star breakdown, the average, the rating and review counts, and the review rows with star rating, text, date, helpful count, the reviewer display name meesho.com shows and any photos attached. Pages with the cursor the response returns.","required_params":["product_id"],"optional_params":["cursor","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"The Meesho product code — the short code in the URL (meesho.com/<slug>/p/**hs4ysq**), which every search row returns as `product_id`. A full product URL is accepted too.","on_invalid":"reject","example":"hs4ysq","aliases":["id","url","product","sku"]},{"name":"cursor","type":"string","required":false,"description":"`pagination.cursor` from the previous response — the cheap way to page. Without it a page number re-serves page one.","on_invalid":"reject"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh Indian exits one upstream call may try before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":6}],"returns":"product_id, rating, rating_scale, rating_count, review_count, rating_breakdown, image_count, media_count, reviews[]{review_id, rating, text, created_at, helpful_count, author_name, media[], product_name}, count, pagination{cursor, has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"hs4ysq"}},{"name":"category/browse","description":"Browse a meesho.com category page: the same product rows as search plus the struck price, which this listing publishes somewhat more often, together with the category's own title, description, breadcrumb and lowest price. Take the category from `categories`.","required_params":["category"],"optional_params":["limit","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A category page from `categories` — its `url` (https://www.meesho.com/sarees/pl/3iy) or the 'slug/pl/page_id' pair. The slug and the page id must be the pair meesho.com publishes; a mismatched slug is redirected and refused.","on_invalid":"reject","example":"https://www.meesho.com/sarees/pl/3iy","aliases":["url","page","category_url"]},{"name":"limit","type":"integer","required":false,"description":"Rows to return, 1-20. A meesho.com category page server-renders ONE page of about 20 products; this trims that page, it does not fetch more.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":20},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh Indian exits one upstream call may try before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id, catalog_id, slug, url, title, hero_product_name, price, currency, original_price, discount_percent, discount_amount, discount_text, offer_text, category_id, category_name, rating, rating_count, review_count, designs_count, supplier_count, image, images[], attributes[], details_text, free_delivery, shipping_charges, express_delivery, supplier_state, meesho_mall, tags[], is_ad, listed_at}, count, total_results (always null — meesho.com publishes no total), fallback_results, pagination{cursor, has_more, page}, category{page_id, page_type, title, description, breadcrumb[]{name, url}, lowest_price, url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"https://www.meesho.com/sarees/pl/3iy","limit":20}},{"name":"categories","description":"Meesho's whole browsable taxonomy, three levels deep, each node carrying the slug and page id that `category/browse` takes, plus the shortcut links the site puts in its own navigation.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh Indian exits one upstream call may try before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":6}],"returns":"categories[]{id, name, page_id, slug, url, children[]{…}}, shortcuts[]{name, url, slug, page_id}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"search/filters","description":"The filters and sort orders meesho.com itself offers for a query — colour, price band, rating, discount, fabric, size, category, gender and whatever else that query exposes, with every value it accepts. These are the only values `search` will send: meesho.com answers an unknown filter by returning the unfiltered set.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for on meesho.com, in English (e.g. 'kurti', 'bluetooth earbuds', 'bedsheet double bed').","on_invalid":"reject","example":"kurti","aliases":["q","keyword","term"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh Indian exits one upstream call may try before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":6}],"returns":"query, filters[]{group, group_id, values[]{value, label}}, sort_options[]{value, label, order, default}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kurti"}},{"name":"search/suggest","description":"Meesho's own search-box completions for a partial keyword, plus the searches it is currently promoting as popular.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"A partial keyword to complete, as typed into Meesho's search box.","on_invalid":"reject","example":"sare","aliases":["q","prefix","term"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh Indian exits one upstream call may try before giving up.","on_invalid":"reject","default":3,"minimum":1,"maximum":6}],"returns":"query, suggestions[], popular_searches[], count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"sare"}}]},{"name":"meetup","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Meetup API scraper — discover upcoming events near any city (filter by in-person vs online and by date, paginated), pull full event detail (name, description, date, venue, fee, RSVP count, group), get a group's full profile (members, rating, topics, location, description) and list a group's upcoming and past events from Meetup.com — no login, no API key","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/meetup/v1","spec_available":true,"actions":[{"name":"search","description":"Discover upcoming events near a city. Filter by event type (in-person or online) and by date window, paginated. Returns each event's name, date, venue with coordinates, RSVP count, fee, image and the hosting group. (Meetup's logged-out discovery feed is location-based — pass a city; for a specific topic, browse a relevant group's events.)","required_params":[],"optional_params":["location","event_type","date","radius","cursor"],"params":[{"name":"location","type":"string","required":false,"description":"City to find events near — a plain place name ('Chicago', 'London', 'Austin, TX', 'Berlin'). We geocode it for you (US and international). Defaults to New York, NY.","on_invalid":"ignore","example":"Chicago","aliases":["city","place"]},{"name":"event_type","type":"enum","required":false,"description":"Restrict to in-person (PHYSICAL) or ONLINE events. Omit for both.","on_invalid":"ignore","allowed_values":[{"value":"PHYSICAL","label":"In-person events only"},{"value":"ONLINE","label":"Online events only"}],"example":"PHYSICAL"},{"name":"date","type":"enum","required":false,"description":"Optional date window for upcoming events.","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Today"},{"value":"tomorrow","label":"Tomorrow"},{"value":"this-week","label":"Next 7 days"},{"value":"this-weekend","label":"Next 3 days"},{"value":"this-month","label":"Next 30 days"}],"example":"this-weekend"},{"name":"radius","type":"number","required":false,"description":"Search radius in miles around the city (1-100, default 25).","on_invalid":"ignore","default":25.0,"example":25,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor. Pass meta.next_cursor from the previous response to fetch the next page. Page until meta.has_more is false.","on_invalid":"ignore"}],"returns":"events[]{event_id, name, url, start_date, end_date, is_online, event_type, going_count, fee{amount,currency,is_free}, image, venue{name,address,city,state,country,postal_code,latitude,longitude}, group{group_id,name,urlname,city,state,country}} + meta{total_count, has_more, next_cursor, resolved_location}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"New York"}},{"name":"event","description":"Full detail for one event by id or url: name, description, start/end datetime, venue with full address and coordinates, hosting group, fee, RSVP/going count, topics, event type and status.","required_params":[],"optional_params":["event_id","url"],"params":[{"name":"event_id","type":"string","required":false,"description":"Meetup event id (the number in /<group>/events/<id>/). From a search result's event_id. Requires `url` too if the group urlname is unknown (the id alone needs its group path).","on_invalid":"reject","example":"315094325"},{"name":"url","type":"string","required":false,"description":"Full Meetup event URL (preferred — carries the group path).","on_invalid":"ignore","example":"https://www.meetup.com/code-for-boston/events/315094325/"}],"returns":"event{event_id, name, description, start_date, end_date, status, is_online, event_type, going_count, max_tickets, fee, image, venue{...}, topics, host_count, group{group_id,name,urlname}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.meetup.com/code-for-boston/events/315094325/"}},{"name":"group","description":"Full profile for a Meetup group by urlname or url: name, member count, average event rating, topics, city/coordinates, description, join mode, founded date and social links.","required_params":[],"optional_params":["group","urlname","url"],"params":[{"name":"group","type":"string","required":false,"description":"Meetup group urlname (the slug in meetup.com/<urlname>/). From a search result's group.urlname.","on_invalid":"reject","example":"code-for-boston","aliases":["urlname"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full Meetup group URL.","on_invalid":"ignore","example":"https://www.meetup.com/code-for-boston/"}],"returns":"group{group_id, name, urlname, url, description, member_count, leadership_count, rating, rating_count, topics, city, state, country, latitude, longitude, join_mode, founded_date, photo, social_links}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"group":"code-for-boston"}},{"name":"group_events","description":"A group's events by urlname or url. Choose upcoming (default) or past. Returns each event with name, datetime, venue, fee, RSVP count and link.","required_params":[],"optional_params":["group","urlname","url","type"],"params":[{"name":"group","type":"string","required":false,"description":"Meetup group urlname to list events for.","on_invalid":"reject","example":"code-for-boston","aliases":["urlname"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full Meetup group URL.","on_invalid":"ignore","example":"https://www.meetup.com/code-for-boston/"},{"name":"type","type":"enum","required":false,"description":"'upcoming' (default) or 'past' events.","on_invalid":"ignore","allowed_values":[{"value":"upcoming","label":"Upcoming events"},{"value":"past","label":"Past events"}],"default":"upcoming","example":"upcoming"}],"returns":"events[]{event_id, name, url, start_date, end_date, status, is_online, event_type, going_count, fee, image, venue{...}, group{...}} + meta{type, group_urlname}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"group":"code-for-boston"}}]},{"name":"mercadolibre","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"MercadoLibre API — product search, prices, deals, reviews and category browse across MercadoLibre's Latin American marketplaces (Argentina, Mexico, Brazil, Chile, Colombia and more); no API key, multi-country.","version":"2.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/mercadolibre/v1","spec_available":true,"actions":[{"name":"vertical_search","description":"Public vehicle classified search. Original advertised USD/ARS/COP and financing displays stay separate. Unrelated keyword padding is locally excluded with the original source total preserved.","required_params":[],"optional_params":["market","query","brand","page","max_results"],"params":[{"name":"market","type":"enum","required":false,"description":"Qualified vehicle market; other countries and real estate are not implied.","on_invalid":"reject","allowed_values":[{"value":"ar_autos","label":"ar_autos"},{"value":"ar_motos","label":"ar_motos"},{"value":"co_autos","label":"co_autos"}],"default":"ar_autos"},{"name":"query","type":"string","required":false,"description":"Source keyword path, e.g. toyota hilux. Use query or brand, not both.","on_invalid":"reject","example":"toyota hilux"},{"name":"brand","type":"enum","required":false,"description":"Validated brand route for the selected market.","on_invalid":"reject","allowed_values":[{"value":"toyota","label":"Toyota: autos markets"},{"value":"yamaha","label":"Yamaha: ar_motos"}],"example":"toyota"},{"name":"page","type":"integer","required":false,"description":"Source page selected through its published links; outside the available window is rejected.","on_invalid":"reject","default":1,"minimum":1,"maximum":10},{"name":"max_results","type":"integer","required":false,"description":"Local cap on one page; does not change source totals.","on_invalid":"reject","default":12,"minimum":1,"maximum":48}],"returns":"items with source ID/URL/title, original advertised price/currency, year/mileage/location and financing display; source total, source page/ceiling and next link.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"ar_autos","brand":"toyota","max_results":6}},{"name":"vertical_listing","description":"Full public Vehicle detail from its exact source URL: original advertised price, source characteristics, description, gallery, seller flags and availability.","required_params":["url"],"optional_params":["market"],"params":[{"name":"url","type":"string","required":true,"description":"Exact supported URL returned by vertical_search.","on_invalid":"reject","example":"https://moto.mercadolibre.com.ar/MLA-3922293226-ducati-hyperstrada-2015-_JM"},{"name":"market","type":"enum","required":false,"description":"Qualified vehicle market; other countries and real estate are not implied.","on_invalid":"reject","allowed_values":[{"value":"ar_autos","label":"ar_autos"},{"value":"ar_motos","label":"ar_motos"},{"value":"co_autos","label":"co_autos"}],"default":"ar_autos"}],"returns":"Full identity and source/canonical URL, primary price plus independent price witness, vehicle attributes/description/media, seller and source status.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://moto.mercadolibre.com.ar/MLA-3922293226-ducati-hyperstrada-2015-_JM"}},{"name":"search","description":"Keyword product search across a MercadoLibre country site — the ranked results a shopper sees, with title, item and catalog ids, permalink, current and strike-through price in the local currency, discount, star rating, seller and official-store flag, shipping line and the listing image. Paginated (50 per page) and filterable by price, with client-side sorting. When MercadoLibre has no match for your keywords it answers with unrelated products rather than an empty page; those are detected and dropped, so an empty result here means the site genuinely has nothing for the query (meta.query_match_pct reports how well the returned rows match it).","required_params":["query"],"optional_params":["site_id","page","max_pages","limit","min_price","max_price","sort"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (product keywords). Spanish/Portuguese match best on the local site, but English brand terms work too.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"site_id","type":"enum","required":false,"description":"MercadoLibre country site. MLA=Argentina, MLM=Mexico, MLB=Brazil, MLC=Chile, MCO=Colombia, MLU=Uruguay, MPE=Peru, MEC=Ecuador, MRD=Dominican Republic, etc. Prices and currency are per-country.","on_invalid":"ignore","allowed_values":[{"value":"MLA","label":"Argentina"},{"value":"MLM","label":"Mexico"},{"value":"MLB","label":"Brazil"},{"value":"MLC","label":"Chile"},{"value":"MCO","label":"Colombia"},{"value":"MLU","label":"Uruguay"},{"value":"MPE","label":"Peru"},{"value":"MLV","label":"Venezuela"},{"value":"MBO","label":"Bolivia"},{"value":"MPY","label":"Paraguay"},{"value":"MEC","label":"Ecuador"},{"value":"MRD","label":"Dominican Republic"},{"value":"MCR","label":"Costa Rica"},{"value":"MGT","label":"Guatemala"},{"value":"MPA","label":"Panama"},{"value":"MHN","label":"Honduras"},{"value":"MNI","label":"Nicaragua"},{"value":"MSV","label":"El Salvador"}],"default":"MLA","example":"MLA","aliases":["country","site"]},{"name":"page","type":"integer","required":false,"description":"Result page to start from (1, 2, 3 …; 50 per page).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch and merge in one call (1–10, deduplicated by item id).","on_invalid":"ignore","default":1,"example":2,"minimum":1,"maximum":10},{"name":"limit","type":"integer","required":false,"description":"Trim the merged list to at most this many products.","on_invalid":"ignore","example":20,"minimum":1,"maximum":500},{"name":"min_price","type":"number","required":false,"description":"Keep only products at or above this price, in the site's own currency (ARS for MLA, BRL for MLB, MXN for MLM …). Applied after fetching.","on_invalid":"ignore","example":100000,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Keep only products at or below this price, in the site's own currency. Applied after fetching.","on_invalid":"ignore","example":900000,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Order the returned products. Applied to the rows this call fetched, not to the whole catalogue.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"MercadoLibre's own ranking (default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating","label":"Highest star rating first"}],"example":"price_asc"}],"returns":"query, site_id, total_results, count, items[]{item_id, product_id, position, title, permalink, price{current, previous, currency, discount_label}, reviews_summary{rating_average, total}, seller, is_official_store, is_advertising (sponsored card, in the site's own position), shipping_text, picture}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone"}},{"name":"product_detail","description":"Full record for one MercadoLibre product, from its item id, catalog product id or URL — title, price and currency, availability and stock line, condition, units sold, brand and colour, description, every gallery image, the full specification table, seller name and id, shipping cost, rating summary and the category path.","required_params":["item_id"],"optional_params":["site_id"],"params":[{"name":"item_id","type":"string","required":true,"description":"A MercadoLibre item id (MLA2396564888), a catalog product id (MLA27172667) or a full product URL. The ids returned by `search` work directly.","on_invalid":"reject","example":"MLA2396564888","aliases":["product_id","url","id"]},{"name":"site_id","type":"enum","required":false,"description":"MercadoLibre country site. MLA=Argentina, MLM=Mexico, MLB=Brazil, MLC=Chile, MCO=Colombia, MLU=Uruguay, MPE=Peru, MEC=Ecuador, MRD=Dominican Republic, etc. Prices and currency are per-country.","on_invalid":"ignore","allowed_values":[{"value":"MLA","label":"Argentina"},{"value":"MLM","label":"Mexico"},{"value":"MLB","label":"Brazil"},{"value":"MLC","label":"Chile"},{"value":"MCO","label":"Colombia"},{"value":"MLU","label":"Uruguay"},{"value":"MPE","label":"Peru"},{"value":"MLV","label":"Venezuela"},{"value":"MBO","label":"Bolivia"},{"value":"MPY","label":"Paraguay"},{"value":"MEC","label":"Ecuador"},{"value":"MRD","label":"Dominican Republic"},{"value":"MCR","label":"Costa Rica"},{"value":"MGT","label":"Guatemala"},{"value":"MPA","label":"Panama"},{"value":"MHN","label":"Honduras"},{"value":"MNI","label":"Nicaragua"},{"value":"MSV","label":"El Salvador"}],"default":"MLA","example":"MLA","aliases":["country","site"]}],"returns":"item_id, product_id, title, permalink, price{current, currency, valid_until}, availability, in_stock, stock_text, condition, sold_quantity, brand, color, description, images[], attributes{}, seller{name, id}, shipping{free, cost, currency}, reviews_summary{rating_average, total}, category_path[], weight","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"MLA2396564888"}},{"name":"deals","description":"MercadoLibre's live deals feed (Ofertas del día) — discounted listing cards with current and previous price, discount %, star rating + review count, seller (+official-store flag), shipping and brand. Multi-country, paginated, optional minimum-discount filter. Note: this is the site-wide daily-deals browse — it is NOT keyword-filtered.","required_params":[],"optional_params":["site_id","page","max_pages","min_discount","sort"],"params":[{"name":"site_id","type":"enum","required":false,"description":"MercadoLibre country site. MLA=Argentina, MLM=Mexico, MLB=Brazil, MLC=Chile, MCO=Colombia, MLU=Uruguay, MPE=Peru, MEC=Ecuador, MRD=Dominican Republic, etc. Prices and currency are per-country.","on_invalid":"ignore","allowed_values":[{"value":"MLA","label":"Argentina"},{"value":"MLM","label":"Mexico"},{"value":"MLB","label":"Brazil"},{"value":"MLC","label":"Chile"},{"value":"MCO","label":"Colombia"},{"value":"MLU","label":"Uruguay"},{"value":"MPE","label":"Peru"},{"value":"MLV","label":"Venezuela"},{"value":"MBO","label":"Bolivia"},{"value":"MPY","label":"Paraguay"},{"value":"MEC","label":"Ecuador"},{"value":"MRD","label":"Dominican Republic"},{"value":"MCR","label":"Costa Rica"},{"value":"MGT","label":"Guatemala"},{"value":"MPA","label":"Panama"},{"value":"MHN","label":"Honduras"},{"value":"MNI","label":"Nicaragua"},{"value":"MSV","label":"El Salvador"}],"default":"MLA","example":"MLA","aliases":["country","site"]},{"name":"page","type":"integer","required":false,"description":"Page to start from (1, 2, 3 …; ~48 deals/page).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch + merge in one call (1–10, ~48 items/page; deduped).","on_invalid":"ignore","default":1,"example":2,"minimum":1,"maximum":10},{"name":"min_discount","type":"integer","required":false,"description":"Only items discounted at least this % off the previous price.","on_invalid":"ignore","default":0,"example":20,"minimum":0,"maximum":99},{"name":"sort","type":"enum","required":false,"description":"Order the returned deals.","on_invalid":"ignore","allowed_values":[{"value":"discount","label":"Biggest discount first"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"rating","label":"Highest rated first"}],"default":"discount","example":"discount"}],"returns":"items[]{item_id, product_id, title, permalink, price{current, previous, currency, discount_label, installments_text}, discount_pct, reviews_summary{rating_average, total}, seller, is_official_store, shipping_text, brand, deal_label} + total_results (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"site_id":"MLA"}},{"name":"category_items","description":"Products listed in a MercadoLibre category — title, price (current/previous/discount), rating, product link and picture. Pass a category_id (it's resolved to the category's /c/ landing page). MercadoLibre puts keyword search behind a login, so browsing by category is the way to list real products for it.","required_params":["category_id"],"optional_params":["site_id","sort","min_price","max_price"],"params":[{"name":"category_id","type":"string","required":true,"description":"MercadoLibre category ID (e.g. MLA1051 = Celulares y Teléfonos in Argentina). Discover IDs with the `category` action.","on_invalid":"reject","example":"MLA1051","aliases":["category","id"]},{"name":"site_id","type":"enum","required":false,"description":"MercadoLibre country site. MLA=Argentina, MLM=Mexico, MLB=Brazil, MLC=Chile, MCO=Colombia, MLU=Uruguay, MPE=Peru, MEC=Ecuador, MRD=Dominican Republic, etc. Prices and currency are per-country.","on_invalid":"ignore","allowed_values":[{"value":"MLA","label":"Argentina"},{"value":"MLM","label":"Mexico"},{"value":"MLB","label":"Brazil"},{"value":"MLC","label":"Chile"},{"value":"MCO","label":"Colombia"},{"value":"MLU","label":"Uruguay"},{"value":"MPE","label":"Peru"},{"value":"MLV","label":"Venezuela"},{"value":"MBO","label":"Bolivia"},{"value":"MPY","label":"Paraguay"},{"value":"MEC","label":"Ecuador"},{"value":"MRD","label":"Dominican Republic"},{"value":"MCR","label":"Costa Rica"},{"value":"MGT","label":"Guatemala"},{"value":"MPA","label":"Panama"},{"value":"MHN","label":"Honduras"},{"value":"MNI","label":"Nicaragua"},{"value":"MSV","label":"El Salvador"}],"default":"MLA","example":"MLA","aliases":["country","site"]},{"name":"sort","type":"enum","required":false,"description":"Order the returned items.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Site default order"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"rating","label":"Highest rated first"}],"default":"relevance","example":"price_asc"},{"name":"min_price","type":"number","required":false,"description":"Only items at or above this price (site currency).","on_invalid":"ignore","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Only items at or below this price (site currency).","on_invalid":"ignore","example":500,"minimum":0}],"returns":"items[]{item_id, product_id, title, permalink, price{current, previous, currency, discount_label}, reviews_summary{rating_average, total}, picture} + category{id, name}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"MLA1051"}},{"name":"reviews","description":"Buyer reviews for a catalog product — full review text, rating and date, paginated to gather ALL reviews in one call + a derived star distribution and average. Works across countries.","required_params":["product_id"],"optional_params":["site_id","page","max_pages"],"params":[{"name":"product_id","type":"string","required":true,"description":"MercadoLibre catalog product ID (the ML…id in a /p/<id> URL — e.g. MLA1027172677). Get it from a search item's product_id.","on_invalid":"reject","example":"MLA1027172677","aliases":["id","catalog_id"]},{"name":"site_id","type":"enum","required":false,"description":"MercadoLibre country site. MLA=Argentina, MLM=Mexico, MLB=Brazil, MLC=Chile, MCO=Colombia, MLU=Uruguay, MPE=Peru, MEC=Ecuador, MRD=Dominican Republic, etc. Prices and currency are per-country.","on_invalid":"ignore","allowed_values":[{"value":"MLA","label":"Argentina"},{"value":"MLM","label":"Mexico"},{"value":"MLB","label":"Brazil"},{"value":"MLC","label":"Chile"},{"value":"MCO","label":"Colombia"},{"value":"MLU","label":"Uruguay"},{"value":"MPE","label":"Peru"},{"value":"MLV","label":"Venezuela"},{"value":"MBO","label":"Bolivia"},{"value":"MPY","label":"Paraguay"},{"value":"MEC","label":"Ecuador"},{"value":"MRD","label":"Dominican Republic"},{"value":"MCR","label":"Costa Rica"},{"value":"MGT","label":"Guatemala"},{"value":"MPA","label":"Panama"},{"value":"MHN","label":"Honduras"},{"value":"MNI","label":"Nicaragua"},{"value":"MSV","label":"El Salvador"}],"default":"MLA","example":"MLA","aliases":["country","site"]},{"name":"page","type":"integer","required":false,"description":"Review page to start from (20 reviews/page).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"How many review pages to gather in one call (1–25, 20/page → up to 500 reviews). Stops early when reviews run out.","on_invalid":"ignore","default":5,"example":5,"minimum":1,"maximum":25}],"returns":"reviews[]{id, rating, text, date, variant} + summary{count, average_rating, distribution{1..5}} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"MLA1027172677"}},{"name":"suggest","description":"Search-term autocomplete — what MercadoLibre suggests as a shopper types.","required_params":["query"],"optional_params":["site_id"],"params":[{"name":"query","type":"string","required":true,"description":"Partial search text to complete.","on_invalid":"reject","example":"note","aliases":["q","keyword"]},{"name":"site_id","type":"enum","required":false,"description":"MercadoLibre country site. MLA=Argentina, MLM=Mexico, MLB=Brazil, MLC=Chile, MCO=Colombia, MLU=Uruguay, MPE=Peru, MEC=Ecuador, MRD=Dominican Republic, etc. Prices and currency are per-country.","on_invalid":"ignore","allowed_values":[{"value":"MLA","label":"Argentina"},{"value":"MLM","label":"Mexico"},{"value":"MLB","label":"Brazil"},{"value":"MLC","label":"Chile"},{"value":"MCO","label":"Colombia"},{"value":"MLU","label":"Uruguay"},{"value":"MPE","label":"Peru"},{"value":"MLV","label":"Venezuela"},{"value":"MBO","label":"Bolivia"},{"value":"MPY","label":"Paraguay"},{"value":"MEC","label":"Ecuador"},{"value":"MRD","label":"Dominican Republic"},{"value":"MCR","label":"Costa Rica"},{"value":"MGT","label":"Guatemala"},{"value":"MPA","label":"Panama"},{"value":"MHN","label":"Honduras"},{"value":"MNI","label":"Nicaragua"},{"value":"MSV","label":"El Salvador"}],"default":"MLA","example":"MLA","aliases":["country","site"]}],"returns":"suggestions[]{query, match_start, match_end}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"note"}},{"name":"category","description":"Browse the MercadoLibre category tree — a category's name, total item count, full path from root and its direct child subcategories. Drill down via children[].id; use `category_items` to retrieve the products within a category.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"MercadoLibre category ID (starts with the site prefix, e.g. MLA1051 = Celulares y Teléfonos in Argentina, MLB1051 in Brazil). Drill down via this action's children[].id.","on_invalid":"reject","example":"MLA1051","aliases":["category","id"]}],"returns":"category{id, name, total_items, permalink, path_from_root[], children[]{id, name, total_items}}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"MLA1051"}}]},{"name":"mercadona","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Mercadona API scraper — Spain's largest supermarket online shop (tienda.mercadona.es): search products, read the full product record with shelf price, price drops, unit price, VAT, EAN, ingredients and allergens, browse every category and the price-drop list, priced for any Spanish postal code. Prices in EUR. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mercadona/v1","spec_available":true,"actions":[{"name":"search","description":"Search Mercadona's online shop by keyword, priced for a Spanish postal code. Each product comes with its shelf price, the previous price when it just dropped, the unit price per kg / litre / unit, the pack size, VAT rate, EAN, brand, category path and availability. Filter by brand or category and sort by price, unit price or price drop. Mercadona returns at most 60 products per query.","required_params":["query"],"optional_params":["postal_code","warehouse","lang","page","page_size","sort","brands","category_id","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it on tienda.mercadona.es ('leche', 'aceite de oliva', 'Hacendado'). Search in the language you pass in `lang` ('milk' with lang=en). Typos are tolerated.","on_invalid":"reject","example":"leche","aliases":["q","keyword"]},{"name":"postal_code","type":"string","required":false,"description":"Spanish postal code of the delivery address. Prices and assortment depend on the warehouse that serves it (Canary Islands prices differ). A postal code Mercadona does not deliver to is rejected. Takes precedence over `warehouse`. Default: Mercadona's own default area (Valencia, warehouse vlc1).","on_invalid":"reject","example":"28001","aliases":["zip","cp"]},{"name":"warehouse","type":"string","required":false,"description":"Advanced: a Mercadona warehouse id ('vlc1', 'mad3', 'bcn1', '4701') instead of a postal code. Every answer reports the warehouse used; `warehouse/lookup` maps a postal code to it.","on_invalid":"reject","example":"mad3","aliases":["wh"]},{"name":"lang","type":"enum","required":false,"description":"Language of product names and categories.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spanish (default)"},{"value":"en","label":"English"},{"value":"ca","label":"Catalan"},{"value":"vai","label":"Valencian"},{"value":"eu","label":"Basque (only category names are translated by Mercadona)"}],"default":"es"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"ignore","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-200, default 50).","on_invalid":"ignore","default":50,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Order of the rows. Leave empty for Mercadona's own order (relevance for search, shelf order for categories). Applied over the complete list Mercadona returns.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"unit_price_asc","label":"Lowest price per kg / L / unit first"},{"value":"unit_price_desc","label":"Highest price per kg / L / unit first"},{"value":"discount_desc","label":"Biggest price drop first"},{"value":"name_asc","label":"Alphabetical"}]},{"name":"brands","type":"array","required":false,"description":"Only these brands (exact names, case-insensitive; see `filters_available.brands`). Several brands are OR-ed. Comma-separated text works too.","on_invalid":"reject","example":["Hacendado"],"aliases":["brand"]},{"name":"category_id","type":"string","required":false,"description":"Only products inside this Mercadona category (any level; ids from `categories` or `filters_available.categories`).","on_invalid":"reject","example":"72","aliases":["category"]},{"name":"include_fallback_results","type":"boolean","required":false,"description":"For things Mercadona does not sell, its search returns loosely related products (e.g. perfumes for 'zapatillas nike'). false (default) drops them: `results` stays empty and `fallback_results_dropped` counts them; true returns them separately in `fallback_results`, never in `results`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string; can contain a dot, e.g. '81661.2'), title, brand (null on category/deals rows — Mercadona omits it there), ean (search rows and detail), packaging, main_feature, category{id,name,level}, breadcrumb[], category_paths[][], url, slug, image, price (number, EUR, the shelf price; for weighed counter items the price of the minimum quantity), price_display ('5,04 €'), currency, original_price (the previous price when Mercadona shows a price drop, else null), original_price_display, discount_percent, save_amount, price_dropped, member_price / member_price_display / member_discount_percent / member_program / member_unit_price (always null — Mercadona has no loyalty price), unit_price, unit_price_unit ('L' | 'kg' | '100 g' | '100 ml' | 'ud' | 'dz' | 'dc' | 'lv' | 'm'), unit_price_measure ('litre', 'kg', 'unit', 'dozen', 'wash', 'metre' …), unit_price_display ('0,84 €/L'), sold_by ('unit' | 'weight'), price_per_quantity + price_per_quantity_unit (weighed items: 0.15 kg), order_increment, price_is_estimate (true = piece of approximate weight), size ('6 briks x 1 L'), size_value, size_unit, pack_units, pack_unit_name, drained_weight, tax_percent (VAT/IGIC included in the price), is_new_price, availability ('in_stock' | 'out_of_stock' | 'unavailable_in_warehouse' | 'unavailable'), in_stock, status, unavailable_from, unavailable_weekdays[], max_order_quantity, age_restricted, is_water, is_new_arrival, rating/review_count/rating_scale (null — not published), sponsored (always false)}, count, total_results, page, page_size, page_count, filters_available{brands[]{name,count}, categories[]{id,name,level,count}}, sort_applied, area{postal_code, warehouse, source ('postal_code' | 'warehouse' | 'default')}, lang, query, search_provider ('mercadona' | 'algolia'), fallback_results_dropped, fallback_results[], keyword_index_hits (set only when no row contained a query word: the shop's keyword index was asked whether the rows are genuine synonyms)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"leche"}},{"name":"product/detail","description":"The full Mercadona product record by `product_id` (or product URL), priced for a postal code: title, brand, EAN, every image, shelf price, previous price and saving, unit price, pack size, VAT rate, availability and order limit, legal name, ingredients, allergens, storage and usage instructions, origin, suppliers, alcohol by volume, hazard statements and colour variants.","required_params":["product_id"],"optional_params":["postal_code","warehouse","lang","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Mercadona product id (the value every search row returns as `product_id`, e.g. '10381' or '81661.2'), or a tienda.mercadona.es/product/… URL.","on_invalid":"reject","example":"10381","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"Spanish postal code of the delivery address. Prices and assortment depend on the warehouse that serves it (Canary Islands prices differ). A postal code Mercadona does not deliver to is rejected. Takes precedence over `warehouse`. Default: Mercadona's own default area (Valencia, warehouse vlc1).","on_invalid":"reject","example":"28001","aliases":["zip","cp"]},{"name":"warehouse","type":"string","required":false,"description":"Advanced: a Mercadona warehouse id ('vlc1', 'mad3', 'bcn1', '4701') instead of a postal code. Every answer reports the warehouse used; `warehouse/lookup` maps a postal code to it.","on_invalid":"reject","example":"mad3","aliases":["wh"]},{"name":"lang","type":"enum","required":false,"description":"Language of product names and categories.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spanish (default)"},{"value":"en","label":"English"},{"value":"ca","label":"Catalan"},{"value":"vai","label":"Valencian"},{"value":"eu","label":"Basque (only category names are translated by Mercadona)"}],"default":"es"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id (string; can contain a dot, e.g. '81661.2'), title, brand (null on category/deals rows — Mercadona omits it there), ean (search rows and detail), packaging, main_feature, category{id,name,level}, breadcrumb[], category_paths[][], url, slug, image, price (number, EUR, the shelf price; for weighed counter items the price of the minimum quantity), price_display ('5,04 €'), currency, original_price (the previous price when Mercadona shows a price drop, else null), original_price_display, discount_percent, save_amount, price_dropped, member_price / member_price_display / member_discount_percent / member_program / member_unit_price (always null — Mercadona has no loyalty price), unit_price, unit_price_unit ('L' | 'kg' | '100 g' | '100 ml' | 'ud' | 'dz' | 'dc' | 'lv' | 'm'), unit_price_measure ('litre', 'kg', 'unit', 'dozen', 'wash', 'metre' …), unit_price_display ('0,84 €/L'), sold_by ('unit' | 'weight'), price_per_quantity + price_per_quantity_unit (weighed items: 0.15 kg), order_increment, price_is_estimate (true = piece of approximate weight), size ('6 briks x 1 L'), size_value, size_unit, pack_units, pack_unit_name, drained_weight, tax_percent (VAT/IGIC included in the price), is_new_price, availability ('in_stock' | 'out_of_stock' | 'unavailable_in_warehouse' | 'unavailable'), in_stock, status, unavailable_from, unavailable_weekdays[], max_order_quantity, age_restricted, is_water, is_new_arrival, rating/review_count/rating_scale (null — not published), sponsored (always false), images[], image_set[]{zoom,regular,thumbnail,perspective}, legal_name, description, origin, suppliers[], ingredients, allergens, storage, usage, mandatory_mentions, danger_mentions, counter_info, production_variant, alcohol_by_volume, alcohol_by_volume_text, prepared_by_mercadona, extra_info[], is_bulk, is_variable_weight, variant_count, variants[]{product_id, variant_type ('color'), name, color_hex, status, in_stock, url}, nutrition (null — Mercadona publishes no nutrition table)}, area{postal_code, warehouse, source ('postal_code' | 'warehouse' | 'default')}, lang","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"10381"}},{"name":"category","description":"Every product of one Mercadona category (ids from `categories`), with its sub-categories, priced for a postal code. Same rows as search; filter by sub-category, sort by price or unit price.","required_params":["category_id"],"optional_params":["subcategory_id","postal_code","warehouse","lang","page","page_size","sort","max_rotations"],"params":[{"name":"category_id","type":"string","required":true,"description":"A category id from `categories` (the second level, e.g. 112 = Aceite, vinagre y sal), or a tienda.mercadona.es/categories/… URL.","on_invalid":"reject","example":"112","aliases":["id","category","url"]},{"name":"subcategory_id","type":"string","required":false,"description":"Optional: only this sub-category of the category (ids in `subcategories`).","on_invalid":"reject","example":"420"},{"name":"postal_code","type":"string","required":false,"description":"Spanish postal code of the delivery address. Prices and assortment depend on the warehouse that serves it (Canary Islands prices differ). A postal code Mercadona does not deliver to is rejected. Takes precedence over `warehouse`. Default: Mercadona's own default area (Valencia, warehouse vlc1).","on_invalid":"reject","example":"28001","aliases":["zip","cp"]},{"name":"warehouse","type":"string","required":false,"description":"Advanced: a Mercadona warehouse id ('vlc1', 'mad3', 'bcn1', '4701') instead of a postal code. Every answer reports the warehouse used; `warehouse/lookup` maps a postal code to it.","on_invalid":"reject","example":"mad3","aliases":["wh"]},{"name":"lang","type":"enum","required":false,"description":"Language of product names and categories.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spanish (default)"},{"value":"en","label":"English"},{"value":"ca","label":"Catalan"},{"value":"vai","label":"Valencian"},{"value":"eu","label":"Basque (only category names are translated by Mercadona)"}],"default":"es"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"ignore","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-200, default 50).","on_invalid":"ignore","default":50,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Order of the rows. Leave empty for Mercadona's own order (relevance for search, shelf order for categories). Applied over the complete list Mercadona returns.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"unit_price_asc","label":"Lowest price per kg / L / unit first"},{"value":"unit_price_desc","label":"Highest price per kg / L / unit first"},{"value":"discount_desc","label":"Biggest price drop first"},{"value":"name_asc","label":"Alphabetical"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string; can contain a dot, e.g. '81661.2'), title, brand (null on category/deals rows — Mercadona omits it there), ean (search rows and detail), packaging, main_feature, category{id,name,level}, breadcrumb[], category_paths[][], url, slug, image, price (number, EUR, the shelf price; for weighed counter items the price of the minimum quantity), price_display ('5,04 €'), currency, original_price (the previous price when Mercadona shows a price drop, else null), original_price_display, discount_percent, save_amount, price_dropped, member_price / member_price_display / member_discount_percent / member_program / member_unit_price (always null — Mercadona has no loyalty price), unit_price, unit_price_unit ('L' | 'kg' | '100 g' | '100 ml' | 'ud' | 'dz' | 'dc' | 'lv' | 'm'), unit_price_measure ('litre', 'kg', 'unit', 'dozen', 'wash', 'metre' …), unit_price_display ('0,84 €/L'), sold_by ('unit' | 'weight'), price_per_quantity + price_per_quantity_unit (weighed items: 0.15 kg), order_increment, price_is_estimate (true = piece of approximate weight), size ('6 briks x 1 L'), size_value, size_unit, pack_units, pack_unit_name, drained_weight, tax_percent (VAT/IGIC included in the price), is_new_price, availability ('in_stock' | 'out_of_stock' | 'unavailable_in_warehouse' | 'unavailable'), in_stock, status, unavailable_from, unavailable_weekdays[], max_order_quantity, age_restricted, is_water, is_new_arrival, rating/review_count/rating_scale (null — not published), sponsored (always false)}, count, total_results, page, page_size, page_count, filters_available{brands[]{name,count}, categories[]{id,name,level,count}}, sort_applied, area{postal_code, warehouse, source ('postal_code' | 'warehouse' | 'default')}, lang, category{id,name}, subcategories[]{id,name,count}, next_category{id,name}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"112"}},{"name":"categories","description":"Mercadona's full online category tree — every department and its categories with ids to pass to `category`.","required_params":[],"optional_params":["postal_code","warehouse","lang","max_rotations"],"params":[{"name":"postal_code","type":"string","required":false,"description":"Spanish postal code of the delivery address. Prices and assortment depend on the warehouse that serves it (Canary Islands prices differ). A postal code Mercadona does not deliver to is rejected. Takes precedence over `warehouse`. Default: Mercadona's own default area (Valencia, warehouse vlc1).","on_invalid":"reject","example":"28001","aliases":["zip","cp"]},{"name":"warehouse","type":"string","required":false,"description":"Advanced: a Mercadona warehouse id ('vlc1', 'mad3', 'bcn1', '4701') instead of a postal code. Every answer reports the warehouse used; `warehouse/lookup` maps a postal code to it.","on_invalid":"reject","example":"mad3","aliases":["wh"]},{"name":"lang","type":"enum","required":false,"description":"Language of product names and categories.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spanish (default)"},{"value":"en","label":"English"},{"value":"ca","label":"Catalan"},{"value":"vai","label":"Valencian"},{"value":"eu","label":"Basque (only category names are translated by Mercadona)"}],"default":"es"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"categories[]{id, name, level (0), children[]{id, name, level (1), url}}, count, category_count, area{postal_code, warehouse, source ('postal_code' | 'warehouse' | 'default')}, lang","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"28001"}},{"name":"deals","description":"Mercadona's complete price-drop list ('Bajadas de precio': every product whose price just went down, with the previous price) or its new-products list ('Novedades'), for a postal code. Filter by department, sort by price or by the size of the drop.","required_params":[],"optional_params":["type","category_id","postal_code","warehouse","lang","page","page_size","sort","max_rotations"],"params":[{"name":"type","type":"enum","required":false,"description":"Which of Mercadona's lists to read.","on_invalid":"reject","allowed_values":[{"value":"price_drops","label":"Products whose price just went down ('Bajadas de precio')"},{"value":"new_arrivals","label":"New products ('Novedades')"}],"default":"price_drops"},{"name":"category_id","type":"string","required":false,"description":"Only products of this department (a first-level id from `categories`, e.g. 19 = Bodega). Mercadona's list rows name only the department.","on_invalid":"reject","example":"19","aliases":["category"]},{"name":"postal_code","type":"string","required":false,"description":"Spanish postal code of the delivery address. Prices and assortment depend on the warehouse that serves it (Canary Islands prices differ). A postal code Mercadona does not deliver to is rejected. Takes precedence over `warehouse`. Default: Mercadona's own default area (Valencia, warehouse vlc1).","on_invalid":"reject","example":"28001","aliases":["zip","cp"]},{"name":"warehouse","type":"string","required":false,"description":"Advanced: a Mercadona warehouse id ('vlc1', 'mad3', 'bcn1', '4701') instead of a postal code. Every answer reports the warehouse used; `warehouse/lookup` maps a postal code to it.","on_invalid":"reject","example":"mad3","aliases":["wh"]},{"name":"lang","type":"enum","required":false,"description":"Language of product names and categories.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spanish (default)"},{"value":"en","label":"English"},{"value":"ca","label":"Catalan"},{"value":"vai","label":"Valencian"},{"value":"eu","label":"Basque (only category names are translated by Mercadona)"}],"default":"es"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"ignore","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-200, default 50).","on_invalid":"ignore","default":50,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Order of the rows. Leave empty for Mercadona's own order (relevance for search, shelf order for categories). Applied over the complete list Mercadona returns.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"unit_price_asc","label":"Lowest price per kg / L / unit first"},{"value":"unit_price_desc","label":"Highest price per kg / L / unit first"},{"value":"discount_desc","label":"Biggest price drop first"},{"value":"name_asc","label":"Alphabetical"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string; can contain a dot, e.g. '81661.2'), title, brand (null on category/deals rows — Mercadona omits it there), ean (search rows and detail), packaging, main_feature, category{id,name,level}, breadcrumb[], category_paths[][], url, slug, image, price (number, EUR, the shelf price; for weighed counter items the price of the minimum quantity), price_display ('5,04 €'), currency, original_price (the previous price when Mercadona shows a price drop, else null), original_price_display, discount_percent, save_amount, price_dropped, member_price / member_price_display / member_discount_percent / member_program / member_unit_price (always null — Mercadona has no loyalty price), unit_price, unit_price_unit ('L' | 'kg' | '100 g' | '100 ml' | 'ud' | 'dz' | 'dc' | 'lv' | 'm'), unit_price_measure ('litre', 'kg', 'unit', 'dozen', 'wash', 'metre' …), unit_price_display ('0,84 €/L'), sold_by ('unit' | 'weight'), price_per_quantity + price_per_quantity_unit (weighed items: 0.15 kg), order_increment, price_is_estimate (true = piece of approximate weight), size ('6 briks x 1 L'), size_value, size_unit, pack_units, pack_unit_name, drained_weight, tax_percent (VAT/IGIC included in the price), is_new_price, availability ('in_stock' | 'out_of_stock' | 'unavailable_in_warehouse' | 'unavailable'), in_stock, status, unavailable_from, unavailable_weekdays[], max_order_quantity, age_restricted, is_water, is_new_arrival, rating/review_count/rating_scale (null — not published), sponsored (always false)}, count, total_results, page, page_size, page_count, filters_available{brands[]{name,count}, categories[]{id,name,level,count}}, sort_applied, area{postal_code, warehouse, source ('postal_code' | 'warehouse' | 'default')}, lang, type, title","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"price_drops"}},{"name":"warehouse/lookup","description":"Check whether Mercadona's online shop delivers to a Spanish postal code and which warehouse (price area) serves it.","required_params":["postal_code"],"optional_params":["max_rotations"],"params":[{"name":"postal_code","type":"string","required":true,"description":"Spanish 5-digit postal code.","on_invalid":"reject","example":"28001","aliases":["zip","cp"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"postal_code, delivers (bool), warehouse (null when not served), message","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"28001"}}]},{"name":"mercari","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Mercari API - Japan and US listing search and full item detail. Select country=jp (default, JPY) or country=us (USD). Seller reputation, listing condition and photos; advanced search filters in Japan.","version":"0.3.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mercari/v1","spec_available":true,"actions":[{"name":"search","description":"Search Mercari in Japan (default) or the United States. US requires query and supports status (sold listings: `status: sold_out,trading`, the site's own \"Sold\" filter; rows carry the price each item sold at), price range in whole dollars, condition, category_id (778 = Cell phones & smartphones), brand_id (319 = Apple), sort (newest, price_asc, price_desc, recently_sold), page_size 2-100 and page_token; returns US listings only, USD prices, source condition labels and seller ids. Sold iPhone prices on Mercari US: query iphone, category_id 778, brand_id 319, status sold_out,trading. Search Mercari Japan by keyword and by any combination of category, brand, seller, price range, condition, colour, shipping terms and shipping prefecture, paginated. Every row carries the item id and url, the title, the price as a number in JPY, whether it is still on sale or already sold, the condition grade, the category id, the seller's id and profile url, the image, and when it was listed and last touched. Filter on `status: sold_out` to get the prices items actually sold at - the comparables a resale valuation is built from. Paginate by passing back the `next_page_token` from the previous response.","required_params":[],"optional_params":["country","query","exclude","category_id","brand_id","seller_id","price_min","price_max","condition","status","shipping_payer","color","shipping_from","listing_type","sort","page_size","page_token","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Marketplace country: jp (default, prices in JPY) or us (USD). US search requires query and supports status, price_min/price_max (whole US dollars), condition, category_id, brand_id, sort, page_size 2-100 and page_token. exclude, seller_id, shipping_payer, color, shipping_from and listing_type are Japan-only and rejected for US. Use the country that supplied the listing id; ids are not globally unique.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan"},{"value":"us","label":"United States"}],"default":"jp","example":"us","value_pattern":"(?i:jp|us)"},{"name":"query","type":"string","required":false,"description":"Search keyword. Required for country=us (for example iphone). The following optional browse behavior applies only to country=jp. Mercari Japan's catalogue is Japanese, so Japanese terms return far more than English ones - though brand and model names in Latin script (iphone, nike, seiko) work well. Optional: a search with no keyword is valid as long as at least one of category_id, brand_id, seller_id or price_min is set, which is how you browse a category or a seller.","on_invalid":"reject","example":"ポケモンカード","aliases":["q","keyword","search"]},{"name":"exclude","type":"string","required":false,"description":"Japan only; rejected for country=us. Drop results matching this term. Mercari matches WORDS, not substrings: excluding 'Pro' removes 'iPhone 13 Pro' but keeps '(PRODUCT)RED'.","on_invalid":"reject","example":"ジャンク","aliases":["exclude_keyword","not"]},{"name":"category_id","type":"string","required":false,"description":"Mercari category id, or several separated by commas. Japan and the US have SEPARATE id spaces. US (mercari.com): 778 = Cell phones & smartphones, 82 = Cell phones & accessories, 7 = Electronics; a parent id includes its children, and every US row carries its leaf `category_id`. Japan: the id space is hierarchical and any LEVEL works: a leaf id (1731 = quartz wristwatches) returns just that leaf, while an ancestor id (39 = watches) returns everything beneath it. Every search row carries the leaf id of its own category under `category_id`, and `product/detail` returns the whole named path, which is how you discover ids - Mercari publishes no category directory endpoint.","on_invalid":"reject","example":"1731","aliases":["category","categories"]},{"name":"brand_id","type":"string","required":false,"description":"Mercari brand id, or several separated by commas. Japan and the US have separate id spaces: Japan 3272 = Apple, US 319 = Apple. Ids come from `product/detail`, which returns `brand{id, name}` for any listing the seller tagged with a brand.","on_invalid":"reject","example":"3272","aliases":["brand","brands"]},{"name":"seller_id","type":"string","required":false,"description":"Japan only; rejected for country=us. Return only this seller's listings. The id is on every search row under `seller.id`. Works with no keyword, which makes it a seller-inventory feed.","on_invalid":"reject","example":"395288647","aliases":["seller","user_id"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price to include, in the country's currency: whole Japanese yen for Japan, whole US dollars for the US (no decimals). On a sold search this bounds the price the item sold at.","on_invalid":"reject","example":5000,"minimum":0,"maximum":99999999},{"name":"price_max","type":"integer","required":false,"description":"Highest price to include: whole yen for Japan, whole US dollars for the US. A range with no listings in it returns an empty result, not an error.","on_invalid":"reject","example":50000,"minimum":0,"maximum":99999999},{"name":"condition","type":"array","required":false,"description":"Item condition, Mercari's own grades. Several may be given separated by commas. Japan has six; the US has five - `worn` is Japan-only and rejected for country=us.","on_invalid":"reject","allowed_values":[{"value":"new","label":"新品、未使用 — new, never used"},{"value":"like_new","label":"未使用に近い — used a few times, barely any wear"},{"value":"good","label":"目立った傷や汚れなし — minor wear, nothing noticeable"},{"value":"fair","label":"やや傷や汚れあり — visible scratches or marks"},{"value":"worn","label":"傷や汚れあり — scratches or marks anyone would see"},{"value":"poor","label":"全体的に状態が悪い — damage or dirt over the whole item"}],"example":"like_new","aliases":["item_condition"]},{"name":"status","type":"array","required":false,"description":"Listing state, in Japan and the US. `sold_out` is the useful one for pricing research: those rows carry the price the item ACTUALLY SOLD at, which is what a resale comparable is. `trading` = sold, handover still in progress; its price is the sold price too. Every row carries its own `status`. US: Mercari's own \"Sold\" filter is `sold_out,trading` - the most recent sales are mostly still `trading`, so pass both for the latest sold prices; the sale date of a US item is `sold_at` in `product/detail`. Several may be given separated by commas; the default is Mercari's own mix of everything. For US paging, pass the same status with the `page_token`.","on_invalid":"reject","allowed_values":[{"value":"on_sale","label":"Still for sale"},{"value":"sold_out","label":"Sold — the price is the price it SOLD at"},{"value":"trading","label":"Sold and in the middle of the handover"}],"example":"on_sale"},{"name":"shipping_payer","type":"array","required":false,"description":"Japan only; rejected for country=us. Who pays for shipping. `seller` means the listed price is the delivered price, which is the norm on Mercari. 🔴 Mercari Shops listings carry no shipping-payer value at all and are NOT removed by this filter - a `shipping_payer: buyer` page comes back part private listings that really do match and part Shops rows whose `shipping_payer` is null. Add `listing_type: c2c` for a strictly filtered set (measured 20/20 rather than 9/20).","on_invalid":"reject","allowed_values":[{"value":"seller","label":"送料込み(出品者負担) — shipping included in the price"},{"value":"buyer","label":"着払い(購入者負担) — buyer pays shipping on delivery"}],"example":"seller"},{"name":"color","type":"array","required":false,"description":"Japan only; rejected for country=us. Colour family the seller tagged the item with. Several may be given separated by commas. Only listings the seller actually tagged are matched.","on_invalid":"reject","allowed_values":[{"value":"black","label":"ブラック系"},{"value":"white","label":"ホワイト系"},{"value":"grey","label":"グレイ系"},{"value":"brown","label":"ブラウン系"},{"value":"red","label":"レッド系"},{"value":"pink","label":"ピンク系"},{"value":"purple","label":"パープル系"},{"value":"blue","label":"ブルー系"},{"value":"beige","label":"ベージュ系"},{"value":"green","label":"グリーン系"},{"value":"yellow","label":"イエロー系"},{"value":"orange","label":"オレンジ系"}],"example":"black","aliases":["colour","color_id"]},{"name":"shipping_from","type":"integer","required":false,"description":"Japan only; rejected for country=us. Ship only from this Japanese prefecture, by its standard JIS number (1 Hokkaido, 13 Tokyo, 23 Aichi, 27 Osaka, 40 Fukuoka, 47 Okinawa). `product/detail` returns the prefecture name alongside its number.","on_invalid":"reject","example":13,"minimum":1,"maximum":47,"aliases":["prefecture","from_area"]},{"name":"listing_type","type":"enum","required":false,"description":"Japan only; rejected for country=us. Restrict to private-individual listings (`c2c`) or to Mercari Shops business sellers (`shops`). The default mixes both, as Mercari does - measured 0-3 Shops rows in 60.","on_invalid":"reject","allowed_values":[{"value":"c2c","label":"Listings by private individuals — the bulk of Mercari"},{"value":"shops","label":"Mercari Shops — registered business sellers"}],"example":"c2c","aliases":["item_type"]},{"name":"sort","type":"enum","required":false,"description":"US: relevance, newest, price_asc, price_desc and recently_sold (most recently sold first; it returns sold listings only, and a sold search is already in this order by default); most_liked is Japan-only. Japan: recently_sold is rejected; only these five are published because only these five were measured to actually re-order Mercari's results - the site's remaining sort/direction combinations return the identical row order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Mercari's own relevance order (default)"},{"value":"newest","label":"Most recently listed first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"most_liked","label":"Most-favourited first"},{"value":"recently_sold","label":"US only: most recently sold first"}],"default":"relevance","example":"newest","aliases":["order","order_by"]},{"name":"page_size","type":"integer","required":false,"description":"Rows per call: Japan 1-120, US 2-100 (default 20). Mercari treats this as a hint and can return one or two either side of it, so read `count` rather than assuming. Above 120 its own answer stops making sense, which is why the ceiling is here.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":120,"aliases":["limit","per_page"]},{"name":"page_token","type":"string","required":false,"description":"Continue a previous search in the same country: pass the `next_page_token` the last response returned. For US keep query, page_size and every filter unchanged. Tokens are opaque and are not page numbers - do not construct one. A response with `next_page_token: null` is the end of the stream.","on_invalid":"reject","example":"v1:1","aliases":["cursor","next_page_token"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a request that did not get through (1-8, default 3). Leave unchanged for typical use.","on_invalid":"ignore","default":3,"minimum":1,"maximum":8}],"returns":"Country controls currency: JP=JPY, US=USD. US additionally returns original_price, named category paths and source condition labels; search seller names/ratings and listing timestamps are null when absent. Both countries: a row with status sold_out or trading is sold and its price is the price it sold at; filters.status echoes a status filter. Total results are source estimates, not an exact inventory count. The following field notes describe JP: items[]{item_id, title, url, price (number, JPY), price_display (null - Mercari publishes no formatted price), currency, status, condition, condition_id, listing_type, category_id, category (null on a search row - use product/detail for the named path), brand{id, name}, size, seller{id, name (null on a search row), url, rating (null), rating_count (null), rating_scale (null)}, shop{id, name}, shipping_payer, rating (null - Mercari does not rate individual listings), review_count (null), rating_scale (null), image, thumbnail, listed_at, updated_at}, count, next_page_token, total_results, total_results_is_estimate (always true), total_results_capped_at, filters{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"us","query":"iphone"}},{"name":"product/detail","description":"One listing in the selected country, by id or url. US returns title, description, USD listing price (excluding additional fees), original price, status, source condition, category path, brand, images, shipping terms and seller ratings, and for a sold item `sold_at`, when it sold. Unpublished fields are null. Japan: title, description, the price as a number in JPY, sale status, the condition grade with Mercari's own wording for it, the named category path, brand, colours, hashtags, the full photo gallery, the shipping terms (who pays, the method, the prefecture it ships from and the seller's stated handling days), the like and comment counts, and the SELLER - name, profile url, how many items they have listed, and their rating with the good/normal/bad breakdown behind it. Mercari Shops products are accepted too and return the smaller set of fields Mercari publishes for them, with everything else null.","required_params":["item_id"],"optional_params":["country","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Marketplace country: jp (default, prices in JPY) or us (USD). US search requires query and supports status, price_min/price_max (whole US dollars), condition, category_id, brand_id, sort, page_size 2-100 and page_token. exclude, seller_id, shipping_payer, color, shipping_from and listing_type are Japan-only and rejected for US. Use the country that supplied the listing id; ids are not globally unique.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan"},{"value":"us","label":"United States"}],"default":"jp","example":"us","value_pattern":"(?i:jp|us)"},{"name":"item_id","type":"string","required":true,"description":"Mercari item id, or the full listing url, in the selected country. US: m followed by exactly 11 digits, or https://www.mercari.com/us/item/<id>/. Japan: two kinds exist and both are accepted: a private listing (`m` followed by 11 digits, jp.mercari.com/item/m48713153498) and a Mercari Shops product (22 letters and digits, jp.mercari.com/shops/product/<id>). Every search row carries its own id and url.","on_invalid":"reject","example":"m48713153498","aliases":["id","url","item_url","product_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a request that did not get through (1-8, default 3). Leave unchanged for typical use.","on_invalid":"ignore","default":3,"minimum":1,"maximum":8}],"returns":"US uses USD, adds original_price, and publishes its own condition labels. US adds sold_at (ISO time the item sold; null unless status is sold_out or trading). US comment count, rating scale, seller profile URL and handling-day bounds are null when absent. The following field notes describe JP: item{item_id, title, url, price (number, JPY), price_display (null), currency, status, condition, condition_id, condition_label, condition_description, listing_type, description, category_id, category{id, name, path[]}, brand{id, name}, colors[]{id, name}, hashtags[], seller{id, name, url, rating (number - Mercari's star score), rating_count, rating_scale (null - Mercari publishes no scale), rating_breakdown{good, normal, bad}, listings_count, is_official, quick_shipper, photo, member_since}, shop{}, shipping{payer, payer_label, method, from_area_id, from_area, handling_days_min, handling_days_max, anonymous}, rating (null - Mercari does not rate individual listings), review_count (null), rating_scale (null), like_count, comment_count, is_offerable, images[], image, thumbnail, listed_at, updated_at}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"us","item_id":"m97213769212"}}]},{"name":"metro-ca","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Metro & Super C API — Quebec / Ontario grocery prices per store from metro.ca and superc.ca: price, regular price, sale end date, per-kg and unit prices, stores","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/metro-ca/v1","spec_available":true,"actions":[{"name":"stores","description":"The stores of one banner with their store_id (for every other action): name, address, postal code, phone, today's hours, coordinates, whether it sells online. Narrow by postal code prefix, city, or sort by distance from lat+lon.","required_params":[],"optional_params":["banner","store_id","postal_code","city","lat","lon","limit"],"params":[{"name":"banner","type":"enum","required":false,"description":"Which banner: metro (metro.ca) or superc (superc.ca). Store numbers are per banner.","on_invalid":"reject","allowed_values":[{"value":"metro","label":"Metro (metro.ca)"},{"value":"superc","label":"Super C (superc.ca)"}],"default":"metro","aliases":["chain","site"]},{"name":"store_id","type":"string","required":false,"description":"Only this store.","on_invalid":"reject","example":"82","aliases":["store"]},{"name":"postal_code","type":"string","required":false,"description":"Postal code or its first 3 characters.","on_invalid":"reject","example":"G6W","aliases":["postal","zip"]},{"name":"city","type":"string","required":false,"description":"City (accents and case ignored).","on_invalid":"reject","example":"Lévis"},{"name":"lat","type":"number","required":false,"description":"Latitude, with `lon`: nearest first, with distance_km.","on_invalid":"reject","example":"46.73"},{"name":"lon","type":"number","required":false,"description":"Longitude, with `lat`.","on_invalid":"reject","example":"-71.25","aliases":["lng"]},{"name":"limit","type":"integer","required":false,"description":"At most this many stores.","on_invalid":"reject","default":50,"minimum":1,"maximum":500}],"returns":"banner, total, matched, returned, stores[]{store_id, name, sells_online, address, city, province, postal_code, phone, lat, lon, hours_today, distance_km}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"banner":"superc","postal_code":"G6W"}},{"name":"search","description":"Search one Metro or Super C store's shelf: price and its quantity, regular price, sale flag, per-kg / per-lb / unit prices, pack size, average weight of weighed produce, sponsored flag. The store header the site printed is echoed (store_confirmed).","required_params":["query","store_id"],"optional_params":["banner","page"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (words, a brand, a product code or UPC).","on_invalid":"reject","example":"grapes","aliases":["q","keyword","term"]},{"name":"banner","type":"enum","required":false,"description":"Which banner: metro (metro.ca) or superc (superc.ca). Store numbers are per banner.","on_invalid":"reject","allowed_values":[{"value":"metro","label":"Metro (metro.ca)"},{"value":"superc","label":"Super C (superc.ca)"}],"default":"metro","aliases":["chain","site"]},{"name":"store_id","type":"string","required":true,"description":"The store whose shelf you read (prices and sales differ store by store). Metro 82 = Alimentation Maxime Faucher, Lévis; Super C 6131 = St-Romuald. List them with `stores`.","on_invalid":"reject","example":"82","aliases":["store","storeId","store_number"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-50).","on_invalid":"reject","default":1,"minimum":1,"maximum":50}],"returns":"query, banner, store_id, store_name, store_confirmed, page, total, returned, sponsored_rows, has_next, fetched_at, results[]{product_id (Metro product code / PLU / UPC), title, brand, package_size, unit_details, average_weight_g, price (what you pay now, for price_quantity), price_quantity (e.g. 'ea.', '1000 g'), regular_price, sale_price, on_sale, sale_valid_to (product only), sale_text, price_per_kg, price_per_lb, regular_price_per_kg, unit_prices[]{price, per_quantity, per_unit}, regular_unit_prices[], price_basis ('per_item' | 'per_kg' | 'estimated_item'), currency, estimated_item_price (the 'avg. ea.' estimate when the site prints one, else null), average_item_weight_g, taxable (+tx), discount_amount, discount_percent, price_tag ('reg' | 'promo'), sold_by_weight, inactive, stock_status ('unavailable' when the site marks the item inactive, else null: the site publishes no stock level), category, sponsored, image, url, rank}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","banner":"metro","store_id":"82"}},{"name":"product","description":"One product at one store by its product code (4023, 4688, 061328801366 …) or its page URL: price and quantity, regular price, the sale end date the page prints, unit prices, average weight, description, image, page URL.","required_params":["product_id","store_id"],"optional_params":["banner"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product code a search row returns (a produce PLU such as 4023, or a UPC such as 061328801366; a 12-digit UPC typed without its leading zero is found too), or a product page URL.","on_invalid":"reject","example":"4023","aliases":["id","code","upc","url"]},{"name":"banner","type":"enum","required":false,"description":"Which banner: metro (metro.ca) or superc (superc.ca). Store numbers are per banner.","on_invalid":"reject","allowed_values":[{"value":"metro","label":"Metro (metro.ca)"},{"value":"superc","label":"Super C (superc.ca)"}],"default":"metro","aliases":["chain","site"]},{"name":"store_id","type":"string","required":true,"description":"The store whose shelf you read (prices and sales differ store by store). Metro 82 = Alimentation Maxime Faucher, Lévis; Super C 6131 = St-Romuald. List them with `stores`.","on_invalid":"reject","example":"82","aliases":["store","storeId","store_number"]}],"returns":"banner, store_id, store_name, store_confirmed, fetched_at, product{product_id (Metro product code / PLU / UPC), title, brand, package_size, unit_details, average_weight_g, price (what you pay now, for price_quantity), price_quantity (e.g. 'ea.', '1000 g'), regular_price, sale_price, on_sale, sale_valid_to (product only), sale_text, price_per_kg, price_per_lb, regular_price_per_kg, unit_prices[]{price, per_quantity, per_unit}, regular_unit_prices[], price_basis ('per_item' | 'per_kg' | 'estimated_item'), currency, estimated_item_price (the 'avg. ea.' estimate when the site prints one, else null), average_item_weight_g, taxable (+tx), discount_amount, discount_percent, price_tag ('reg' | 'promo'), sold_by_weight, inactive, stock_status ('unavailable' when the site marks the item inactive, else null: the site publishes no stock level), category, sponsored, image, url, rank} + product_number, description, availability_note","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"4023","banner":"superc","store_id":"6131"}},{"name":"category","description":"Every product of one aisle at one store, paged, with the same rows as search. `category` is the aisle path of the site (e.g. fruits-vegetables/fruits/grapes) or an aisle URL.","required_params":["category","store_id"],"optional_params":["banner","page"],"params":[{"name":"category","type":"string","required":true,"description":"Aisle path after /aisles/ in the site's URLs, or the full aisle URL.","on_invalid":"reject","example":"fruits-vegetables/fruits/grapes","aliases":["aisle","category_path","url"]},{"name":"banner","type":"enum","required":false,"description":"Which banner: metro (metro.ca) or superc (superc.ca). Store numbers are per banner.","on_invalid":"reject","allowed_values":[{"value":"metro","label":"Metro (metro.ca)"},{"value":"superc","label":"Super C (superc.ca)"}],"default":"metro","aliases":["chain","site"]},{"name":"store_id","type":"string","required":true,"description":"The store whose shelf you read (prices and sales differ store by store). Metro 82 = Alimentation Maxime Faucher, Lévis; Super C 6131 = St-Romuald. List them with `stores`.","on_invalid":"reject","example":"82","aliases":["store","storeId","store_number"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-50).","on_invalid":"reject","default":1,"minimum":1,"maximum":50}],"returns":"category, banner, store_id, store_name, store_confirmed, page, total, returned, has_next, results[]{product_id (Metro product code / PLU / UPC), title, brand, package_size, unit_details, average_weight_g, price (what you pay now, for price_quantity), price_quantity (e.g. 'ea.', '1000 g'), regular_price, sale_price, on_sale, sale_valid_to (product only), sale_text, price_per_kg, price_per_lb, regular_price_per_kg, unit_prices[]{price, per_quantity, per_unit}, regular_unit_prices[], price_basis ('per_item' | 'per_kg' | 'estimated_item'), currency, estimated_item_price (the 'avg. ea.' estimate when the site prints one, else null), average_item_weight_g, taxable (+tx), discount_amount, discount_percent, price_tag ('reg' | 'promo'), sold_by_weight, inactive, stock_status ('unavailable' when the site marks the item inactive, else null: the site publishes no stock level), category, sponsored, image, url, rank}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"fruits-vegetables/fruits/grapes","banner":"metro","store_id":"82"}}]},{"name":"micolet","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Micolet API — live data from micolet.com, Spain's managed second-hand fashion marketplace (women, men, kids), across its eight storefronts: Spain, France, Belgium, Portugal, the UK, Italy, Germany and Poland. Every row is ONE physical garment that Micolet itself inspected, graded and priced: brand, type, size, colours, condition grade, season, the current price with the original retail price and markdowns, and whether it is still available or already SOLD (sold items stay listed with their last price — 1,047,186 sold vs 102,329 available dresses on one day). Each storefront has its OWN price list, so `detail` takes a `market` and states which storefront and currency it read. Search with 11 measured filters, read the full item page with every photo and the seller's closet, browse any seller's closet, resolve brand ids. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/micolet/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse one storefront and department, 48 rows per page as the site pages them. Every row is a unique garment with its own size, condition grade and price in the storefront's currency, plus the euro list price and the original retail price. Rows come in the site's own order (no sort exists): available garments first, then sold ones, each flagged `is_sold`. The meta reports the site's own three counts (total / available / sold). Every filter here was measured biting against the unfiltered control in the same run; the ones the site silently ignores are not offered. Paging stops at the site's 100-page ceiling.","required_params":[],"optional_params":["market","department","page","exclude_sold","query","category","tag_id","brand_id","color","size","numeric_size","condition","season","min_price","max_price"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Micolet storefront to read. It picks the PRICE LIST, not just the language: each storefront prices the same garment differently (item 8417448: ES 9.49 · PT 9.99 · FR 9.99 · BE 10.49 · DE 10.99 · UK 10.99 EUR · IT 12.49 · PL 12.49 EUR; median markup over Spain on 12 dresses: PT +5.1%, FR +8.8%, BE +14.3%, DE/UK +18.9%, IT/PL +33.9%). The UK shows pounds and Poland zloty, converted from that storefront's euro price at one rate. Measured to depend on the storefront only, not on where the request comes from. Default ES (micolet.com).","on_invalid":"reject","allowed_values":[{"value":"ES","label":"Spain · www.micolet.com · EUR"},{"value":"FR","label":"France · www.micolet.fr · EUR"},{"value":"BE","label":"Belgium · www.micolet.be · EUR"},{"value":"PT","label":"Portugal · www.micolet.pt · EUR"},{"value":"GB","label":"United Kingdom · www.micolet.co.uk · GBP"},{"value":"IT","label":"Italy · www.micolet.it · EUR"},{"value":"DE","label":"Germany · www.micolet.de · EUR"},{"value":"PL","label":"Poland · www.micolet.pl · PLN"}],"default":"ES","example":"ES","aliases":["country","site","storefront","region"]},{"name":"department","type":"enum","required":false,"description":"Which department to search. The site keeps them on separate roots and silently IGNORES a gender/age query parameter (measured: same 7,334,815 total), so this is a real switch, not a filter. Measured totals on ES: women 7,334,817, men 576,039, kids 411,459 (sold included).","on_invalid":"reject","allowed_values":[{"value":"women","label":"Women (micolet's main catalogue)"},{"value":"men","label":"Men"},{"value":"kids","label":"Kids & baby"}],"default":"women","example":"women","aliases":["gender","section"]},{"name":"query","type":"string","required":false,"description":"Free-text search, matched in the STOREFRONT'S language: 'jeans' on the UK men's root returned 62,790 rows, the Spanish 'vaqueros' on the UK women's root 14. Brand names work everywhere ('levis' 20,728 vs brand id 19 20,725 on ES).","on_invalid":"reject","example":"vestido","aliases":["q","search","keyword","keywords"]},{"name":"category","type":"enum","required":false,"description":"Micolet's own category id. Ids are shared by the three departments (`54` = jackets: 440,746 for women, 50,583 for men). Use `categories` for the local names and the sub-type tags. An id the site does not know is HTTP 404 at the source and is rejected here.","on_invalid":"reject","allowed_values":[{"value":"1","label":"Tops, shirts & T-shirts"},{"value":"3","label":"Dresses"},{"value":"4","label":"Trousers"},{"value":"8","label":"Coats"},{"value":"46","label":"Skirts"},{"value":"47","label":"Shoes"},{"value":"48","label":"Bags"},{"value":"49","label":"Accessories"},{"value":"50","label":"Jumpsuits & dungarees"},{"value":"51","label":"Suits & sets"},{"value":"52","label":"Jeans"},{"value":"53","label":"Knitwear & sweatshirts"},{"value":"54","label":"Jackets"},{"value":"55","label":"Swimwear"},{"value":"56","label":"Underwear & nightwear"}],"example":"3","aliases":["category_id"]},{"name":"tag_id","type":"array","required":false,"description":"Sub-type tag ids from `categories` (216 = casual dress: 774,960 of 1,149,513 dresses). Several ids are OR-ed. An unknown id returns 0 rows (measured).","on_invalid":"reject","example":["216"],"aliases":["tag_ids","tags","subtype"]},{"name":"brand_id","type":"array","required":false,"description":"Brand ids from the `brands` action (Levi's = 19, Zara = 3, Mango = 15). Several ids are OR-ed (Zara+Mango dresses: 199,571). Unknown id -> 0 rows.","on_invalid":"reject","example":["19"],"aliases":["brand_ids","brands"]},{"name":"color","type":"array","required":false,"description":"Colour codes, OR-ed (red 88,921 + blue 80,980 -> red,blue 168,884 dresses). Closed list on purpose: the site does NOT ignore an unknown colour, it matches the items with no colour recorded (`nonsense` -> 494 rows), which would look like a real answer.","on_invalid":"reject","allowed_values":[{"value":"beige","label":"beige"},{"value":"black","label":"black"},{"value":"blue","label":"blue"},{"value":"brown","label":"brown"},{"value":"gold","label":"gold"},{"value":"green","label":"green"},{"value":"grey","label":"grey"},{"value":"multicolor","label":"multicolor"},{"value":"navy_blue","label":"navy blue"},{"value":"orange","label":"orange"},{"value":"pink","label":"pink"},{"value":"purple","label":"purple"},{"value":"red","label":"red"},{"value":"silver","label":"silver"},{"value":"white","label":"white"},{"value":"yellow","label":"yellow"}],"example":["red"],"aliases":["colors","colour","colours"]},{"name":"size","type":"array","required":false,"description":"Letter sizes, OR-ed (s 312,911 · s,m 656,489 dresses).","on_invalid":"reject","allowed_values":[{"value":"xs","label":"XS"},{"value":"s","label":"S"},{"value":"m","label":"M"},{"value":"l","label":"L"},{"value":"xl","label":"XL"},{"value":"xxl","label":"XXL"},{"value":"3xl","label":"3XL"},{"value":"4xl","label":"4XL"},{"value":"5xl","label":"5XL"},{"value":"6xl","label":"6XL"},{"value":"7xl","label":"7XL"}],"example":["m"],"aliases":["sizes","letter_size"]},{"name":"numeric_size","type":"array","required":false,"description":"Numeric sizes as the site writes them: EU clothing 32-70 and shoe sizes (38 -> 49,691 dresses). A size the category does not use returns 0 rows (`37` on dresses), it is not ignored.","on_invalid":"reject","example":["38"],"value_pattern":"\\d{1,2}","aliases":["numeric_sizes","size_number"]},{"name":"condition","type":"enum","required":false,"description":"Only the two grades the site can filter on: `new` (new with tags, 146,370 dresses) and `flaw` (small defect). 'Good' is the default grade and the site IGNORES `condition=good` (returned the unfiltered total), so it is not offered.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New with tags"},{"value":"flaw","label":"Small defect"}],"example":"new"},{"name":"season","type":"enum","required":false,"description":"Season. Both values INCLUDE all-season garments: spring-summer matched 1,073,824 of 1,149,515 dresses.","on_invalid":"reject","allowed_values":[{"value":"autumn-winter","label":"Autumn-winter (includes all-season items)"},{"value":"spring-summer","label":"Spring-summer (includes all-season items)"}],"example":"spring-summer"},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in the STOREFRONT'S display currency (EUR, GBP on GB, PLN on PL) — the site applies it that way: `20-50` on dresses gave ES 44,876, UK 43,515 and PL 375,365.","on_invalid":"reject","example":20,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price, in the storefront's display currency. Either bound may be used alone.","on_invalid":"reject","example":50,"minimum":0},{"name":"page","type":"integer","required":false,"description":"1-based page of 48 rows (fixed by the site). The source stops at page 100 (4,800 rows): page 101, 500, 2000 and 99999 all came back EMPTY, so paging past 100 is rejected here — narrow the filters instead.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100,"aliases":["p","page_number"]},{"name":"exclude_sold","type":"boolean","required":false,"description":"Drop SOLD rows from the page. The site lists sold garments after the available ones (POMPOM dresses: 8 available, then 22 sold) and its headline count is mostly sold (dresses: 102,329 available of 1,149,515). Default false returns what the storefront shows, each row flagged `is_sold`, because the sold rows carry their last price.","on_invalid":"reject","default":false,"example":true,"aliases":["available_only","in_stock_only"]}],"returns":"items[]{item_id, url, title, name, brand, category, colors[], size, size_number, size_label, condition, condition_label_en, season, price{amount,currency,display}, price_from_attribute, price_eur_list, original_price{}, pre_markdown_price{}, is_marked_down, discount_pct, is_sold, image, market, detail_params{}} + meta{market, currency, host, department, page, per_page, page_cap, total, total_available, total_sold, rows_on_page, sold_rows_dropped, filters_applied{}, source_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"ES","category":"3","condition":"new"}},{"name":"detail","description":"The full item page of one garment on one storefront: title, brand, type, the breadcrumb, colour codes, letter and numeric size, condition grade, season, the localized detail list exactly as printed, the current price in the storefront's currency with the euro list price, the original retail price and the pre-markdown price, the discount (computed AND the site's own figure), availability (available / sold / reserved), every photo in standard and zoom size, and the SELLER: the closet id and name the page shows, with the parameters to open that closet. A dead id is NOT_FOUND. Each storefront prices the same garment separately (DE/UK +18.9%, IT/PL +33.9% median over Spain), so to compare countries call `detail` once per `market`; the response states the market, currency and host it was read on.","required_params":["item_id"],"optional_params":["market"],"params":[{"name":"item_id","type":"string","required":true,"description":"The garment's numeric id — the `item_id` of any search row, or the last number of a micolet URL (/vestidos/pompom/8417448). Ids are shared by all eight storefronts.","on_invalid":"reject","example":"8417448","value_pattern":"\\d{3,10}","aliases":["id","itemid"]},{"name":"market","type":"enum","required":false,"description":"Which Micolet storefront to read. It picks the PRICE LIST, not just the language: each storefront prices the same garment differently (item 8417448: ES 9.49 · PT 9.99 · FR 9.99 · BE 10.49 · DE 10.99 · UK 10.99 EUR · IT 12.49 · PL 12.49 EUR; median markup over Spain on 12 dresses: PT +5.1%, FR +8.8%, BE +14.3%, DE/UK +18.9%, IT/PL +33.9%). The UK shows pounds and Poland zloty, converted from that storefront's euro price at one rate. Measured to depend on the storefront only, not on where the request comes from. Default ES (micolet.com).","on_invalid":"reject","allowed_values":[{"value":"ES","label":"Spain · www.micolet.com · EUR"},{"value":"FR","label":"France · www.micolet.fr · EUR"},{"value":"BE","label":"Belgium · www.micolet.be · EUR"},{"value":"PT","label":"Portugal · www.micolet.pt · EUR"},{"value":"GB","label":"United Kingdom · www.micolet.co.uk · GBP"},{"value":"IT","label":"Italy · www.micolet.it · EUR"},{"value":"DE","label":"Germany · www.micolet.de · EUR"},{"value":"PL","label":"Poland · www.micolet.pl · PLN"}],"default":"ES","example":"ES","aliases":["country","site","storefront","region"]}],"returns":"item{item_id, url, title, name, brand, category, colors[], size, size_number, size_label, condition, condition_label_en, season, price{amount,currency,display}, price_from_attribute, price_eur_list, original_price{}, pre_markdown_price{}, is_marked_down, discount_pct, is_sold, image, market, detail_params{}, brand_display, breadcrumb[]{name,url}, facts[]{label,value}, discount_pct_source, availability, ld_availability, ld_item_condition, ld_price, ld_currency, description, photos[]{url,zoom_url}, photo_count, seller{kind,seller_id,name,closet_url,seller_params}} + meta{market, currency, host, price_witness_agrees}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"market":"ES","item_id":"2390405"}},{"name":"seller","description":"A seller's public closet ('El armario de ...'): the closet name, the site's own counts (total / available / sold — one measured closet: 1,146 garments, 128 available) and its garments 48 per page, filterable with the same measured filters as `search` (colour pink -> 37 of 1,146). An unknown closet id is NOT_FOUND.","required_params":["seller_id"],"optional_params":["market","page","exclude_sold","query","category","tag_id","brand_id","color","size","numeric_size","condition","season","min_price","max_price"],"params":[{"name":"seller_id","type":"string","required":true,"description":"The seller's closet id: `seller.seller_id` of a `detail` record, or the number in a /armario/<id> URL.","on_invalid":"reject","example":"111823","value_pattern":"\\d{1,10}","aliases":["closet_id","armario","seller"]},{"name":"market","type":"enum","required":false,"description":"Which Micolet storefront to read. It picks the PRICE LIST, not just the language: each storefront prices the same garment differently (item 8417448: ES 9.49 · PT 9.99 · FR 9.99 · BE 10.49 · DE 10.99 · UK 10.99 EUR · IT 12.49 · PL 12.49 EUR; median markup over Spain on 12 dresses: PT +5.1%, FR +8.8%, BE +14.3%, DE/UK +18.9%, IT/PL +33.9%). The UK shows pounds and Poland zloty, converted from that storefront's euro price at one rate. Measured to depend on the storefront only, not on where the request comes from. Default ES (micolet.com).","on_invalid":"reject","allowed_values":[{"value":"ES","label":"Spain · www.micolet.com · EUR"},{"value":"FR","label":"France · www.micolet.fr · EUR"},{"value":"BE","label":"Belgium · www.micolet.be · EUR"},{"value":"PT","label":"Portugal · www.micolet.pt · EUR"},{"value":"GB","label":"United Kingdom · www.micolet.co.uk · GBP"},{"value":"IT","label":"Italy · www.micolet.it · EUR"},{"value":"DE","label":"Germany · www.micolet.de · EUR"},{"value":"PL","label":"Poland · www.micolet.pl · PLN"}],"default":"ES","example":"ES","aliases":["country","site","storefront","region"]},{"name":"query","type":"string","required":false,"description":"Free-text search, matched in the STOREFRONT'S language: 'jeans' on the UK men's root returned 62,790 rows, the Spanish 'vaqueros' on the UK women's root 14. Brand names work everywhere ('levis' 20,728 vs brand id 19 20,725 on ES).","on_invalid":"reject","example":"vestido","aliases":["q","search","keyword","keywords"]},{"name":"category","type":"enum","required":false,"description":"Micolet's own category id. Ids are shared by the three departments (`54` = jackets: 440,746 for women, 50,583 for men). Use `categories` for the local names and the sub-type tags. An id the site does not know is HTTP 404 at the source and is rejected here.","on_invalid":"reject","allowed_values":[{"value":"1","label":"Tops, shirts & T-shirts"},{"value":"3","label":"Dresses"},{"value":"4","label":"Trousers"},{"value":"8","label":"Coats"},{"value":"46","label":"Skirts"},{"value":"47","label":"Shoes"},{"value":"48","label":"Bags"},{"value":"49","label":"Accessories"},{"value":"50","label":"Jumpsuits & dungarees"},{"value":"51","label":"Suits & sets"},{"value":"52","label":"Jeans"},{"value":"53","label":"Knitwear & sweatshirts"},{"value":"54","label":"Jackets"},{"value":"55","label":"Swimwear"},{"value":"56","label":"Underwear & nightwear"}],"example":"3","aliases":["category_id"]},{"name":"tag_id","type":"array","required":false,"description":"Sub-type tag ids from `categories` (216 = casual dress: 774,960 of 1,149,513 dresses). Several ids are OR-ed. An unknown id returns 0 rows (measured).","on_invalid":"reject","example":["216"],"aliases":["tag_ids","tags","subtype"]},{"name":"brand_id","type":"array","required":false,"description":"Brand ids from the `brands` action (Levi's = 19, Zara = 3, Mango = 15). Several ids are OR-ed (Zara+Mango dresses: 199,571). Unknown id -> 0 rows.","on_invalid":"reject","example":["19"],"aliases":["brand_ids","brands"]},{"name":"color","type":"array","required":false,"description":"Colour codes, OR-ed (red 88,921 + blue 80,980 -> red,blue 168,884 dresses). Closed list on purpose: the site does NOT ignore an unknown colour, it matches the items with no colour recorded (`nonsense` -> 494 rows), which would look like a real answer.","on_invalid":"reject","allowed_values":[{"value":"beige","label":"beige"},{"value":"black","label":"black"},{"value":"blue","label":"blue"},{"value":"brown","label":"brown"},{"value":"gold","label":"gold"},{"value":"green","label":"green"},{"value":"grey","label":"grey"},{"value":"multicolor","label":"multicolor"},{"value":"navy_blue","label":"navy blue"},{"value":"orange","label":"orange"},{"value":"pink","label":"pink"},{"value":"purple","label":"purple"},{"value":"red","label":"red"},{"value":"silver","label":"silver"},{"value":"white","label":"white"},{"value":"yellow","label":"yellow"}],"example":["red"],"aliases":["colors","colour","colours"]},{"name":"size","type":"array","required":false,"description":"Letter sizes, OR-ed (s 312,911 · s,m 656,489 dresses).","on_invalid":"reject","allowed_values":[{"value":"xs","label":"XS"},{"value":"s","label":"S"},{"value":"m","label":"M"},{"value":"l","label":"L"},{"value":"xl","label":"XL"},{"value":"xxl","label":"XXL"},{"value":"3xl","label":"3XL"},{"value":"4xl","label":"4XL"},{"value":"5xl","label":"5XL"},{"value":"6xl","label":"6XL"},{"value":"7xl","label":"7XL"}],"example":["m"],"aliases":["sizes","letter_size"]},{"name":"numeric_size","type":"array","required":false,"description":"Numeric sizes as the site writes them: EU clothing 32-70 and shoe sizes (38 -> 49,691 dresses). A size the category does not use returns 0 rows (`37` on dresses), it is not ignored.","on_invalid":"reject","example":["38"],"value_pattern":"\\d{1,2}","aliases":["numeric_sizes","size_number"]},{"name":"condition","type":"enum","required":false,"description":"Only the two grades the site can filter on: `new` (new with tags, 146,370 dresses) and `flaw` (small defect). 'Good' is the default grade and the site IGNORES `condition=good` (returned the unfiltered total), so it is not offered.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New with tags"},{"value":"flaw","label":"Small defect"}],"example":"new"},{"name":"season","type":"enum","required":false,"description":"Season. Both values INCLUDE all-season garments: spring-summer matched 1,073,824 of 1,149,515 dresses.","on_invalid":"reject","allowed_values":[{"value":"autumn-winter","label":"Autumn-winter (includes all-season items)"},{"value":"spring-summer","label":"Spring-summer (includes all-season items)"}],"example":"spring-summer"},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in the STOREFRONT'S display currency (EUR, GBP on GB, PLN on PL) — the site applies it that way: `20-50` on dresses gave ES 44,876, UK 43,515 and PL 375,365.","on_invalid":"reject","example":20,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price, in the storefront's display currency. Either bound may be used alone.","on_invalid":"reject","example":50,"minimum":0},{"name":"page","type":"integer","required":false,"description":"1-based page of 48 rows (fixed by the site). The source stops at page 100 (4,800 rows): page 101, 500, 2000 and 99999 all came back EMPTY, so paging past 100 is rejected here — narrow the filters instead.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100,"aliases":["p","page_number"]},{"name":"exclude_sold","type":"boolean","required":false,"description":"Drop SOLD rows from the page. The site lists sold garments after the available ones (POMPOM dresses: 8 available, then 22 sold) and its headline count is mostly sold (dresses: 102,329 available of 1,149,515). Default false returns what the storefront shows, each row flagged `is_sold`, because the sold rows carry their last price.","on_invalid":"reject","default":false,"example":true,"aliases":["available_only","in_stock_only"]}],"returns":"seller{seller_id, name, closet_title, closet_url} + items[]{item_id, url, title, name, brand, category, colors[], size, size_number, size_label, condition, condition_label_en, season, price{amount,currency,display}, price_from_attribute, price_eur_list, original_price{}, pre_markdown_price{}, is_marked_down, discount_pct, is_sold, image, market, detail_params{}} + meta{market, currency, host, department, page, per_page, page_cap, total, total_available, total_sold, rows_on_page, sold_rows_dropped, filters_applied{}, source_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"ES","seller_id":"111823"}},{"name":"brands","description":"Resolve a brand name to the id `search` filters on, straight from the site's own brand autocomplete (10 rows for 'levi', 14 for 'zara' in the measured run). Brand ids are the same on every storefront.","required_params":["query"],"optional_params":["market"],"params":[{"name":"query","type":"string","required":true,"description":"Start of a brand name. The site returns its own match list, alphabetically (measured: 10 rows for 'levi' -> levi & fiona, Levi's (19), LEVIATHAN ...; 14 for 'zara').","on_invalid":"reject","example":"levi","aliases":["q","name","brand"]},{"name":"market","type":"enum","required":false,"description":"Which Micolet storefront to read. It picks the PRICE LIST, not just the language: each storefront prices the same garment differently (item 8417448: ES 9.49 · PT 9.99 · FR 9.99 · BE 10.49 · DE 10.99 · UK 10.99 EUR · IT 12.49 · PL 12.49 EUR; median markup over Spain on 12 dresses: PT +5.1%, FR +8.8%, BE +14.3%, DE/UK +18.9%, IT/PL +33.9%). The UK shows pounds and Poland zloty, converted from that storefront's euro price at one rate. Measured to depend on the storefront only, not on where the request comes from. Default ES (micolet.com).","on_invalid":"reject","allowed_values":[{"value":"ES","label":"Spain · www.micolet.com · EUR"},{"value":"FR","label":"France · www.micolet.fr · EUR"},{"value":"BE","label":"Belgium · www.micolet.be · EUR"},{"value":"PT","label":"Portugal · www.micolet.pt · EUR"},{"value":"GB","label":"United Kingdom · www.micolet.co.uk · GBP"},{"value":"IT","label":"Italy · www.micolet.it · EUR"},{"value":"DE","label":"Germany · www.micolet.de · EUR"},{"value":"PL","label":"Poland · www.micolet.pl · PLN"}],"default":"ES","example":"ES","aliases":["country","site","storefront","region"]}],"returns":"brands[]{brand_id, name, search_params{}} + meta{market, query}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"levi"}},{"name":"categories","description":"The 15 category ids `search` accepts, with their English names, the storefront's own local sub-type tags (tag ids + local labels, read live from the storefront's menu) and which departments list each category.","required_params":[],"optional_params":["market"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Micolet storefront to read. It picks the PRICE LIST, not just the language: each storefront prices the same garment differently (item 8417448: ES 9.49 · PT 9.99 · FR 9.99 · BE 10.49 · DE 10.99 · UK 10.99 EUR · IT 12.49 · PL 12.49 EUR; median markup over Spain on 12 dresses: PT +5.1%, FR +8.8%, BE +14.3%, DE/UK +18.9%, IT/PL +33.9%). The UK shows pounds and Poland zloty, converted from that storefront's euro price at one rate. Measured to depend on the storefront only, not on where the request comes from. Default ES (micolet.com).","on_invalid":"reject","allowed_values":[{"value":"ES","label":"Spain · www.micolet.com · EUR"},{"value":"FR","label":"France · www.micolet.fr · EUR"},{"value":"BE","label":"Belgium · www.micolet.be · EUR"},{"value":"PT","label":"Portugal · www.micolet.pt · EUR"},{"value":"GB","label":"United Kingdom · www.micolet.co.uk · GBP"},{"value":"IT","label":"Italy · www.micolet.it · EUR"},{"value":"DE","label":"Germany · www.micolet.de · EUR"},{"value":"PL","label":"Poland · www.micolet.pl · PLN"}],"default":"ES","example":"ES","aliases":["country","site","storefront","region"]}],"returns":"categories[]{category_id, name_en, departments[], tags[]{tag_id,label}} + meta{market, tag_count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"market":"ES"}}]},{"name":"migros","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Migros API scraper — Migros Sanalmarket (Turkey) online grocery: search products, read the full product record with shelf price, Money-card member price, per-kg unit price, campaign flags and the label sheet (ingredients, allergens, origin), browse categories and the site's discount pages, look products up by barcode. Prices in TRY. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/migros/v1","spec_available":true,"actions":[{"name":"search","description":"Search migros.com.tr by keyword. Each product comes with its shelf price and, separately, the Money-card member price when Migros runs one, the per-kg or per-litre unit price, availability, campaign badges (multi-buy, clearance, basket discount), brand and category. Sort by price, discount or best sellers, and filter by brand, category, discount type or lifestyle facet. Paid placements are removed unless you ask for them.","required_params":["query"],"optional_params":["page","sort","brand_ids","category_ids","discount","lifestyle_ids","include_sponsored","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it on migros.com.tr. Turkish keywords match best ('peynir', 'zeytinyağı', 'bebek bezi'); brand names work too.","on_invalid":"reject","example":"peynir","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Migros returns about 30 products per page; read `count`, `total_results` and `page_count` rather than assuming a size.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orderings migros.com.tr honours without an account; `sort_applied` in the response is Migros's own confirmation.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Migros's own smart ordering (default)"},{"value":"best_selling","label":"Weekly best sellers first"},{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"discount_percent","label":"Biggest discount percentage first"},{"value":"discount_amount","label":"Biggest discount amount first"}],"default":"relevance"},{"name":"brand_ids","type":"array","required":false,"description":"Only these brands (Migros brand ids — every result row and `filters_available.brands` carries them). Several ids are OR-ed.","on_invalid":"reject","example":[729],"aliases":["brand_id"]},{"name":"category_ids","type":"array","required":false,"description":"Only these categories (ids from `filters_available.categories` or a row's `category.id` / `breadcrumb[].id`). Several ids are OR-ed.","on_invalid":"reject","example":[70651],"aliases":["category_id"]},{"name":"discount","type":"enum","required":false,"description":"Only discounted products of this kind.","on_invalid":"reject","allowed_values":[{"value":"money","label":"Money-card member discounts only"},{"value":"multi_buy","label":"Multi-buy campaigns and gift-with-purchase only"}]},{"name":"lifestyle_ids","type":"array","required":false,"description":"Lifestyle/diet facets (e.g. gluten-free, lactose-free, organic, vegan) — ids from `filters_available.lifestyle`.","on_invalid":"reject","example":[116]},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid placements. Migros injects them on the first page regardless of your filters and sort, so they would break both; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (8-digit sku, string), store_product_id, title, brand{id,name,url}, category{id,name,url}, breadcrumb[], url, image, price (number — the shelf price WITHOUT a Money card), price_display, currency=TRY, original_price (struck-through price when a non-member discount runs, else null), discount_percent, member_price (the Money-card price when Migros runs a member discount, else null), member_price_display, member_discount_percent, member_program ('Money' | null), unit_price (per unit_price_unit, for the non-member price), unit_price_unit ('Kg', 'Lt', …), member_unit_price, sold_by ('piece' | 'weight'), price_per ('piece' | 'kg'), availability ('in_stock' | 'out_of_stock' | 'delisted'), in_stock, max_order_quantity (an order cap, not stock), max_order_grams, order_step_grams, min_order_grams, badges[]{type,text}, multi_buy_offer (e.g. '2.si %80'), clearance, basket_discounts[] (applied in the basket, NOT in price), best_seller{rank,category,text}, rating/review_count/rating_scale (null — Migros publishes no product ratings), sponsored}, count, total_results, page, page_count, sponsored_dropped, sort_applied (Migros's own confirmation of the order used), filters_available{categories[], brands[], discounts[], lifestyle[]}{id,name,count}, title, breadcrumb[], query","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"peynir"}},{"name":"product/detail","description":"The full Migros product record by `product_id` (or product URL): title, brand, breadcrumb, every image, the shelf price, the struck-through price and discount, the Money-card member price kept separate, unit price, availability and order limits, campaign badges, the label sheet (ingredients, allergen warning, net quantity, origin, storage and every other labelled line as `specs`), the supplier details Migros is legally required to show, and the store the prices belong to.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Migros product id (the 8-digit sku every search row returns as `product_id`, leading zeros included), or a migros.com.tr product URL.","on_invalid":"reject","example":"10101938","aliases":["id","sku","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id (8-digit sku, string), store_product_id, title, brand{id,name,url}, category{id,name,url}, breadcrumb[], url, image, price (number — the shelf price WITHOUT a Money card), price_display, currency=TRY, original_price (struck-through price when a non-member discount runs, else null), discount_percent, member_price (the Money-card price when Migros runs a member discount, else null), member_price_display, member_discount_percent, member_program ('Money' | null), unit_price (per unit_price_unit, for the non-member price), unit_price_unit ('Kg', 'Lt', …), member_unit_price, sold_by ('piece' | 'weight'), price_per ('piece' | 'kg'), availability ('in_stock' | 'out_of_stock' | 'delisted'), in_stock, max_order_quantity (an order cap, not stock), max_order_grams, order_step_grams, min_order_grams, badges[]{type,text}, multi_buy_offer (e.g. '2.si %80'), clearance, basket_discounts[] (applied in the basket, NOT in price), best_seller{rank,category,text}, rating/review_count/rating_scale (null — Migros publishes no product ratings), sponsored, images[], barcode (null — Migros does not publish it on the product; use product/barcode to look a product up by EAN), discount_descriptions[], description (label sheet as plain text), specs{label: value}, ingredients, allergen_warning, net_quantity, origin, nutrition (null unless Migros labels nutrition lines), supplier[]{name,value}, variants[], store{store_id, warehouse_id, portfolio}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"10101938"}},{"name":"product/barcode","description":"Look a product up by the EAN/GTIN barcode on its pack and get the same full record as product/detail — the quickest way to match your own catalogue to Migros prices.","required_params":["barcode"],"optional_params":["max_rotations"],"params":[{"name":"barcode","type":"string","required":true,"description":"The product's EAN/GTIN barcode as printed on the pack (8-14 digits).","on_invalid":"reject","example":"5449000000439","aliases":["ean","gtin"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{… same as product/detail, with barcode = the EAN you asked for}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"barcode":"5449000000439"}},{"name":"deals","description":"Migros's own discount pages: all discounted products, Money-card member discounts, multi-buy campaigns, Migroskop and 'Gördüğünüze İnanın'. Same rows, sorting and filters as search.","required_params":[],"optional_params":["type","page","sort","brand_ids","category_ids","include_sponsored","max_rotations"],"params":[{"name":"type","type":"enum","required":false,"description":"Which of migros.com.tr's own campaign pages to read.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All discounted products"},{"value":"money","label":"Money-card member discounts"},{"value":"multi_buy","label":"Multi-buy campaigns and gift-with-purchase"},{"value":"migroskop","label":"Migroskop campaign products"},{"value":"gordugunuze_inanin","label":"'Gördüğünüze İnanın' price campaign (often empty between campaigns)"}],"default":"all"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Migros returns about 30 products per page; read `count`, `total_results` and `page_count` rather than assuming a size.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orderings migros.com.tr honours without an account; `sort_applied` in the response is Migros's own confirmation.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Migros's own smart ordering (default)"},{"value":"best_selling","label":"Weekly best sellers first"},{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"discount_percent","label":"Biggest discount percentage first"},{"value":"discount_amount","label":"Biggest discount amount first"}],"default":"relevance"},{"name":"brand_ids","type":"array","required":false,"description":"Only these brands (Migros brand ids — every result row and `filters_available.brands` carries them). Several ids are OR-ed.","on_invalid":"reject","example":[729],"aliases":["brand_id"]},{"name":"category_ids","type":"array","required":false,"description":"Only these categories (ids from `filters_available.categories` or a row's `category.id` / `breadcrumb[].id`). Several ids are OR-ed.","on_invalid":"reject","example":[70651],"aliases":["category_id"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid placements. Migros injects them on the first page regardless of your filters and sort, so they would break both; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (8-digit sku, string), store_product_id, title, brand{id,name,url}, category{id,name,url}, breadcrumb[], url, image, price (number — the shelf price WITHOUT a Money card), price_display, currency=TRY, original_price (struck-through price when a non-member discount runs, else null), discount_percent, member_price (the Money-card price when Migros runs a member discount, else null), member_price_display, member_discount_percent, member_program ('Money' | null), unit_price (per unit_price_unit, for the non-member price), unit_price_unit ('Kg', 'Lt', …), member_unit_price, sold_by ('piece' | 'weight'), price_per ('piece' | 'kg'), availability ('in_stock' | 'out_of_stock' | 'delisted'), in_stock, max_order_quantity (an order cap, not stock), max_order_grams, order_step_grams, min_order_grams, badges[]{type,text}, multi_buy_offer (e.g. '2.si %80'), clearance, basket_discounts[] (applied in the basket, NOT in price), best_seller{rank,category,text}, rating/review_count/rating_scale (null — Migros publishes no product ratings), sponsored}, count, total_results, page, page_count, sponsored_dropped, sort_applied (Migros's own confirmation of the order used), filters_available{categories[], brands[], discounts[], lifestyle[]}{id,name,count}, title, breadcrumb[], type","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"money"}},{"name":"category","description":"Every product in one Migros category, paged, with the same rows, sorting and filters as search. Category ids come from `categories`, from search filters or from any row's breadcrumb.","required_params":["category"],"optional_params":["page","sort","brand_ids","discount","lifestyle_ids","include_sponsored","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A category: its Migros id (from `categories`, a row's `breadcrumb[].id` or `filters_available.categories`), its slug ('peynir-c-6d') or its migros.com.tr URL.","on_invalid":"reject","example":"109","aliases":["category_id","slug","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Migros returns about 30 products per page; read `count`, `total_results` and `page_count` rather than assuming a size.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order. Only orderings migros.com.tr honours without an account; `sort_applied` in the response is Migros's own confirmation.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Migros's own smart ordering (default)"},{"value":"best_selling","label":"Weekly best sellers first"},{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"discount_percent","label":"Biggest discount percentage first"},{"value":"discount_amount","label":"Biggest discount amount first"}],"default":"relevance"},{"name":"brand_ids","type":"array","required":false,"description":"Only these brands (Migros brand ids — every result row and `filters_available.brands` carries them). Several ids are OR-ed.","on_invalid":"reject","example":[729],"aliases":["brand_id"]},{"name":"discount","type":"enum","required":false,"description":"Only discounted products of this kind.","on_invalid":"reject","allowed_values":[{"value":"money","label":"Money-card member discounts only"},{"value":"multi_buy","label":"Multi-buy campaigns and gift-with-purchase only"}]},{"name":"lifestyle_ids","type":"array","required":false,"description":"Lifestyle/diet facets (e.g. gluten-free, lactose-free, organic, vegan) — ids from `filters_available.lifestyle`.","on_invalid":"reject","example":[116]},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid placements. Migros injects them on the first page regardless of your filters and sort, so they would break both; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (8-digit sku, string), store_product_id, title, brand{id,name,url}, category{id,name,url}, breadcrumb[], url, image, price (number — the shelf price WITHOUT a Money card), price_display, currency=TRY, original_price (struck-through price when a non-member discount runs, else null), discount_percent, member_price (the Money-card price when Migros runs a member discount, else null), member_price_display, member_discount_percent, member_program ('Money' | null), unit_price (per unit_price_unit, for the non-member price), unit_price_unit ('Kg', 'Lt', …), member_unit_price, sold_by ('piece' | 'weight'), price_per ('piece' | 'kg'), availability ('in_stock' | 'out_of_stock' | 'delisted'), in_stock, max_order_quantity (an order cap, not stock), max_order_grams, order_step_grams, min_order_grams, badges[]{type,text}, multi_buy_offer (e.g. '2.si %80'), clearance, basket_discounts[] (applied in the basket, NOT in price), best_seller{rank,category,text}, rating/review_count/rating_scale (null — Migros publishes no product ratings), sponsored}, count, total_results, page, page_count, sponsored_dropped, sort_applied (Migros's own confirmation of the order used), filters_available{categories[], brands[], discounts[], lifestyle[]}{id,name,count}, title, breadcrumb[], category_slug","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"109"}},{"name":"categories","description":"Migros Sanalmarket's top-level shelf: every main category with its id and URL, plus the site's campaign pages (mapped to the `deals` type that reads them).","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"categories[]{id, name, slug, url, kind ('category' | 'deals' | 'collection' | 'other'), deals_type}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"suggest","description":"Autocomplete as a Migros shopper types: suggested search phrases, matching brands and categories, and the top matching products with prices.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it on migros.com.tr. Turkish keywords match best ('peynir', 'zeytinyağı', 'bebek bezi'); brand names work too.","on_invalid":"reject","example":"peynir","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"suggestions[]{type ('keyword' | 'brand' | 'category'), text, id}, products[]{product_id (8-digit sku, string), store_product_id, title, brand{id,name,url}, category{id,name,url}, breadcrumb[], url, image, price (number — the shelf price WITHOUT a Money card), price_display, currency=TRY, original_price (struck-through price when a non-member discount runs, else null), discount_percent, member_price (the Money-card price when Migros runs a member discount, else null), member_price_display, member_discount_percent, member_program ('Money' | null), unit_price (per unit_price_unit, for the non-member price), unit_price_unit ('Kg', 'Lt', …), member_unit_price, sold_by ('piece' | 'weight'), price_per ('piece' | 'kg'), availability ('in_stock' | 'out_of_stock' | 'delisted'), in_stock, max_order_quantity (an order cap, not stock), max_order_grams, order_step_grams, min_order_grams, badges[]{type,text}, multi_buy_offer (e.g. '2.si %80'), clearance, basket_discounts[] (applied in the basket, NOT in price), best_seller{rank,category,text}, rating/review_count/rating_scale (null — Migros publishes no product ratings), sponsored}, total_products, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"peynir"}}]},{"name":"milanuncios","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"milanuncios API scraper — Spain's largest classifieds site: marketplace search with price, condition, shipping and private/professional filters, cars and motorbikes (make, model, year, km, fuel, gearbox, power), real estate for sale and rent (bedrooms, bathrooms, m²), and the full ad record with shipping options and seller rating. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/milanuncios/v1","spec_available":true,"actions":[{"name":"search","description":"Search milanuncios, Spain's largest classifieds site, by keyword and/or category: price (unpublished prices labelled, price drops with the earlier price), region, province and city, private or professional seller, condition, shipping, highlighted (destacado) flag, reserved flag, first publication and last renewal dates, attributes, images and description. Filter by category, price, location, seller type, condition, shipping available, price dropped, offers or wanted ads.","required_params":[],"optional_params":["query","category","transaction","condition","shippable","price_dropped","price_min","price_max","seller_type","region","province","city","page","limit","include_sponsored","include_pii","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword (Spanish), matched in titles and descriptions; every word must match (also in cars/search, e.g. make volkswagen + model golf + query gti).","on_invalid":"reject","example":"bicicleta"},{"name":"category","type":"string","required":false,"description":"milanuncios category id at any level, e.g. 31 = Deportes y náutica, 679 = Bicicletas, 83 = Telefonía, 30 = Casa y jardín, 1 = Motor, 32 = Inmobiliaria; category_path on a row gives the ids.","on_invalid":"reject","example":"679"},{"name":"transaction","type":"enum","required":false,"description":"offer (default) or wanted ads.","on_invalid":"reject","allowed_values":[{"value":"offer","label":"Ads offering something"},{"value":"wanted","label":"Wanted ads (se busca / compro)"}],"default":"offer"},{"name":"condition","type":"enum","required":false,"description":"new, like_new, good, acceptable or poor.","on_invalid":"reject","allowed_values":[{"value":"new","label":"new"},{"value":"like_new","label":"like_new"},{"value":"good","label":"good"},{"value":"acceptable","label":"acceptable"},{"value":"poor","label":"poor"}]},{"name":"shippable","type":"boolean","required":false,"description":"Only ads the seller ships (envío).","on_invalid":"reject"},{"name":"price_dropped","type":"boolean","required":false,"description":"Only ads whose price was lowered.","on_invalid":"reject"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"seller_type","type":"enum","required":false,"description":"Only private (particular) or only professional sellers.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Particular"},{"value":"professional","label":"Profesional"}]},{"name":"region","type":"string","required":false,"description":"Region (comunidad autónoma) by name, accents and case ignored (andalucía, cataluña, comunidad valenciana, galicia…), or its id from location.region_id (53 = Galicia).","on_invalid":"reject","example":"galicia"},{"name":"province","type":"string","required":false,"description":"Province by name, accents and case ignored — any of Spain's 52 incl. Ceuta and Melilla (madrid, barcelona, valencia, a coruña, las palmas…) — or its id from location.province_id (28 = Madrid).","on_invalid":"reject","example":"madrid"},{"name":"city","type":"string","required":false,"description":"City id from location.city_id on a result row (13 = Barcelona, 44 = Madrid). For a name, use province.","on_invalid":"reject","example":"13"},{"name":"page","type":"integer","required":false,"description":"Result page. milanuncios serves results up to offset 8,200.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the separate paid top-ad list, apart, under sponsored[].","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Compatibility flag; nothing is hidden either way. Private sellers' names, the listing's avatar and postcode, and real-estate row coordinates come back wherever milanuncios publishes them.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, category_id, category, category_path[]{id, name}, transaction, price, currency, price_not_published, price_includes_taxes, financed_price, previous_price, price_drop_pct, price_suspect, price_suspect_reason, published_at, renewed_at, updated_at, is_renewed (all dates true UTC), location{region_id, region, province_id, province, city_id, city, latitude, longitude, extra_provinces[]}, seller{type, seller_id, name}, is_highlighted, is_reserved, condition, condition_label, shipping{shippable, type, package_weight}, contact_methods, syndicated_from, attributes[]{key, label, value, value_label}, image_count, images[], thumbnail, description, vehicle{…} | property{…} | features[]}, count, total, total_is_lower_bound, page, limit, has_more, sort_applied, highlighted_count, duplicates_dropped, dropped_outside_price_range, sponsored_dropped, sponsored[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bicicleta"}},{"name":"cars/search","description":"Search milanuncios motor ads — cars, off-roaders, classic cars, motorcycles, vans, trucks, caravans, campervans and quads: cash price (taxes included or not), financed price, make, model, year, mileage, fuel, gearbox, horsepower, doors, seats, colour, environmental label, warranty, dealer or private seller, province and city, images. Filter by vehicle type, make, model, year, mileage, fuel, gearbox, power, price, seller type and location.","required_params":[],"optional_params":["vehicle_type","query","make","model","year_min","year_max","mileage_min","mileage_max","fuel","gearbox","power_min","power_max","price_min","price_max","seller_type","region","province","city","page","limit","include_sponsored","include_pii","max_rotations"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"car (default), offroad, classic_car, motorcycle, van, truck, caravan, campervan or quad.","on_invalid":"reject","allowed_values":[{"value":"car","label":"car"},{"value":"offroad","label":"offroad"},{"value":"classic_car","label":"classic_car"},{"value":"motorcycle","label":"motorcycle"},{"value":"van","label":"van"},{"value":"truck","label":"truck"},{"value":"caravan","label":"caravan"},{"value":"campervan","label":"campervan"},{"value":"quad","label":"quad"}],"default":"car"},{"name":"query","type":"string","required":false,"description":"Free-text keyword (Spanish), matched in titles and descriptions; every word must match (also in cars/search, e.g. make volkswagen + model golf + query gti).","on_invalid":"reject","example":"bicicleta"},{"name":"make","type":"string","required":false,"description":"Make, e.g. seat, volkswagen, mercedes-benz (cars, off-roaders, classic cars, vans).","on_invalid":"reject","example":"seat"},{"name":"model","type":"string","required":false,"description":"Model words, with make, e.g. ibiza, golf, serie 3, clase c (spaces, not hyphens).","on_invalid":"reject","example":"ibiza"},{"name":"year_min","type":"integer","required":false,"description":"Earliest year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_min","type":"number","required":false,"description":"Lowest mileage, km.","on_invalid":"reject","minimum":0},{"name":"mileage_max","type":"number","required":false,"description":"Highest mileage, km.","on_invalid":"reject","minimum":0},{"name":"fuel","type":"enum","required":false,"description":"diesel, gasoline, electric, hybrid, plug_in_hybrid or glp (LPG).","on_invalid":"reject","allowed_values":[{"value":"diesel","label":"diesel"},{"value":"gasoline","label":"gasoline"},{"value":"electric","label":"electric"},{"value":"hybrid","label":"hybrid"},{"value":"plug_in_hybrid","label":"plug_in_hybrid"},{"value":"glp","label":"glp"}]},{"name":"gearbox","type":"enum","required":false,"description":"manual or automatic.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic"}]},{"name":"power_min","type":"number","required":false,"description":"Lowest power, hp.","on_invalid":"reject","minimum":0},{"name":"power_max","type":"number","required":false,"description":"Highest power, hp.","on_invalid":"reject","minimum":0},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"seller_type","type":"enum","required":false,"description":"Only private (particular) or only professional sellers.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Particular"},{"value":"professional","label":"Profesional"}]},{"name":"region","type":"string","required":false,"description":"Region (comunidad autónoma) by name, accents and case ignored (andalucía, cataluña, comunidad valenciana, galicia…), or its id from location.region_id (53 = Galicia).","on_invalid":"reject","example":"galicia"},{"name":"province","type":"string","required":false,"description":"Province by name, accents and case ignored — any of Spain's 52 incl. Ceuta and Melilla (madrid, barcelona, valencia, a coruña, las palmas…) — or its id from location.province_id (28 = Madrid).","on_invalid":"reject","example":"madrid"},{"name":"city","type":"string","required":false,"description":"City id from location.city_id on a result row (13 = Barcelona, 44 = Madrid). For a name, use province.","on_invalid":"reject","example":"13"},{"name":"page","type":"integer","required":false,"description":"Result page. milanuncios serves results up to offset 8,200.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the separate paid top-ad list, apart, under sponsored[].","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Compatibility flag; nothing is hidden either way. Private sellers' names, the listing's avatar and postcode, and real-estate row coordinates come back wherever milanuncios publishes them.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, category_id, category, category_path[]{id, name}, transaction, price, currency, price_not_published, price_includes_taxes, financed_price, previous_price, price_drop_pct, price_suspect, price_suspect_reason, published_at, renewed_at, updated_at, is_renewed (all dates true UTC), location{region_id, region, province_id, province, city_id, city, latitude, longitude, extra_provinces[]}, seller{type, seller_id, name}, is_highlighted, is_reserved, condition, condition_label, shipping{shippable, type, package_weight}, contact_methods, syndicated_from, attributes[]{key, label, value, value_label}, image_count, images[], thumbnail, description, vehicle{make, model, model_source, year, mileage_km, fuel, gearbox, power_hp, doors, seats, seats_raw, colour, environmental_label (0 | ECO | C | B | NONE), environmental_label_raw, warranty, warranty_months}}, count, total, total_is_lower_bound, page, limit, has_more, sort_applied, highlighted_count, duplicates_dropped, dropped_outside_price_range, sponsored_dropped, sponsored[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"seat","model":"ibiza"}},{"name":"real_estate/search","description":"Search milanuncios real estate for sale, rent, flat-share or holiday rent — flats, apartments, houses, chalets, penthouses, studios, lofts, commercial premises, offices, warehouses, rural estates, garages, storage rooms and buildings: price or monthly rent, bedrooms, bathrooms, m², price per m², floor, energy certificate, heating, features (lift, terrace, pool…), agency or private owner, region, province and city, images. Filter by transaction, property type, price, bedrooms, bathrooms, surface, seller type and location.","required_params":["transaction"],"optional_params":["property_type","query","bedrooms_min","bedrooms_max","bathrooms_min","surface_min","surface_max","price_min","price_max","seller_type","region","province","city","page","limit","include_sponsored","include_pii","max_rotations"],"params":[{"name":"transaction","type":"enum","required":true,"description":"sale, rent, share (flat-share; flats only) or holiday_rent.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"sale"},{"value":"rent","label":"rent"},{"value":"share","label":"share"},{"value":"holiday_rent","label":"holiday_rent"}],"example":"rent"},{"name":"property_type","type":"enum","required":false,"description":"flat (default), apartment, house, chalet, penthouse, studio, loft, commercial, office, warehouse, rural_estate, garage, storage_room, building.","on_invalid":"reject","allowed_values":[{"value":"flat","label":"flat"},{"value":"apartment","label":"apartment"},{"value":"chalet","label":"chalet"},{"value":"penthouse","label":"penthouse"},{"value":"studio","label":"studio"},{"value":"loft","label":"loft"},{"value":"house","label":"house"},{"value":"commercial","label":"commercial"},{"value":"office","label":"office"},{"value":"warehouse","label":"warehouse"},{"value":"rural_estate","label":"rural_estate"},{"value":"garage","label":"garage"},{"value":"storage_room","label":"storage_room"},{"value":"building","label":"building"}],"default":"flat"},{"name":"query","type":"string","required":false,"description":"Free-text keyword (Spanish), matched in titles and descriptions; every word must match (also in cars/search, e.g. make volkswagen + model golf + query gti).","on_invalid":"reject","example":"bicicleta"},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bedrooms_max","type":"integer","required":false,"description":"Most bedrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bathrooms_min","type":"integer","required":false,"description":"Fewest bathrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"surface_min","type":"number","required":false,"description":"Smallest surface, m².","on_invalid":"reject","minimum":0},{"name":"surface_max","type":"number","required":false,"description":"Largest surface, m².","on_invalid":"reject","minimum":0},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"seller_type","type":"enum","required":false,"description":"Only private (particular) or only professional sellers.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Particular"},{"value":"professional","label":"Profesional"}]},{"name":"region","type":"string","required":false,"description":"Region (comunidad autónoma) by name, accents and case ignored (andalucía, cataluña, comunidad valenciana, galicia…), or its id from location.region_id (53 = Galicia).","on_invalid":"reject","example":"galicia"},{"name":"province","type":"string","required":false,"description":"Province by name, accents and case ignored — any of Spain's 52 incl. Ceuta and Melilla (madrid, barcelona, valencia, a coruña, las palmas…) — or its id from location.province_id (28 = Madrid).","on_invalid":"reject","example":"madrid"},{"name":"city","type":"string","required":false,"description":"City id from location.city_id on a result row (13 = Barcelona, 44 = Madrid). For a name, use province.","on_invalid":"reject","example":"13"},{"name":"page","type":"integer","required":false,"description":"Result page. milanuncios serves results up to offset 8,200.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the separate paid top-ad list, apart, under sponsored[].","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Compatibility flag; nothing is hidden either way. Private sellers' names, the listing's avatar and postcode, and real-estate row coordinates come back wherever milanuncios publishes them.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, category_id, category, category_path[]{id, name}, transaction, price, currency, price_not_published, price_includes_taxes, financed_price, previous_price, price_drop_pct, price_suspect, price_suspect_reason, published_at, renewed_at, updated_at, is_renewed (all dates true UTC), location{region_id, region, province_id, province, city_id, city, latitude, longitude, extra_provinces[]}, seller{type, seller_id, name}, is_highlighted, is_reserved, condition, condition_label, shipping{shippable, type, package_weight}, contact_methods, syndicated_from, attributes[]{key, label, value, value_label}, image_count, images[], thumbnail, description, property{transaction, bedrooms, bathrooms, surface_m2, surface_suspect, price_per_m2, floor, energy_certificate, heating, hot_water, features[]}}, count, total, total_is_lower_bound, page, limit, has_more, sort_applied, highlighted_count, duplicates_dropped, dropped_outside_price_range, sponsored_dropped, sponsored[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"transaction":"rent","province":"8"}},{"name":"listing","description":"The full milanuncios ad by id or URL, in any category: title, price (unpublished prices labelled; cars: taxes included or not and financed price), description, all images, category path, condition, reserved flag, first publication and last renewal, attributes, vehicle or property details, shipping (envío) with carriers and their prices, contact methods, and the seller — type, name, member since, rating and review count, city.","required_params":["ad_id"],"optional_params":["include_pii","max_rotations"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The milanuncios ad id (the digits before .htm in an ad URL) or the full URL.","on_invalid":"reject","example":"513743047"},{"name":"include_pii","type":"boolean","required":false,"description":"Compatibility flag; nothing is hidden either way. Private sellers' names, the listing's avatar and postcode, and real-estate row coordinates come back wherever milanuncios publishes them.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{ad_id, title, url, category_id, category, category_path[], transaction, price, currency, price_not_published, price_includes_taxes, financed_price, price_suspect, price_suspect_reason, published_at, renewed_at, is_renewed (dates true UTC), location{region, province, city, zone, street}, seller{type, account_type, seller_id, name, avatar, member_since, email_verified, city, province, postcode, rating, rating_scale, rating_count}, is_highlighted, is_reserved, condition, shipping{shippable, type, package_weight, carriers[]{carrier, service, price, price_before_discount, currency}}, contact_methods, syndicated_from, attributes[]{key, value}, image_count, images[], description, vehicle{} | property{} | features[]}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"ad_id":"513743047"}}]},{"name":"mobile-bg","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Mobile.bg Bulgaria vehicle listings","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mobile-bg/v1","spec_available":true,"actions":[{"name":"search","description":"Search qualified vehicle makes on Mobile.bg","required_params":[],"optional_params":[],"params":[{"name":"query","type":"enum","required":true,"description":"Qualified make slug; BMW, Audi or Toyota. This is not free-text search.","on_invalid":"reject","allowed_values":[{"value":"bmw","label":"BMW"},{"value":"audi","label":"Audi"},{"value":"toyota","label":"Toyota"}],"example":"bmw","aliases":["make"]},{"name":"page","type":"integer","required":false,"description":"Native page, qualified from 1 to 3","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":3},{"name":"limit","type":"integer","required":false,"description":"Maximum returned rows from this native 20-row page; use 20 to traverse without skipping rows","on_invalid":"reject","default":20,"example":3,"minimum":1,"maximum":20}],"returns":"items with IDs, asking price/display and source currency, query, page, lower-bound total, source page size and next_page","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"bmw","page":1,"limit":3}},{"name":"listing","description":"Published vehicle detail by the full ID returned by search","required_params":[],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Full 17-digit Mobile.bg listing ID, not the shorter printed title ID","on_invalid":"reject","example":"11776162427166028"}],"returns":"Identity, title, asking price/display/currency, description, technical attributes, vehicle, features, gallery, location and available public seller; GTIN null","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"11776162427166028"}}]},{"name":"mobile-de","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"mobile.de API scraper — Germany's largest vehicle marketplace: search cars, motorbikes, vans and trucks with make/model, price, year, mileage, power, fuel, gearbox, body, seller type, damage, VAT, price rating and radius filters, and read the full listing: price and net price, mobile.de price rating, every attribute, features, images and dealer. No account, no browser.","version":"0.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/mobile-de/v1","spec_available":true,"actions":[{"name":"search","description":"Search mobile.de listings. Filters narrow the result exactly as on mobile.de. Sponsored rows are kept in mobile.de's order and flagged (placement: top_ad stays on top under any sort, eyecatcher is a paid highlight at its organic position, page1_ad is mobile.de's sponsored block on page 1). price is the gross consumer price; financing is a monthly example and never the price; a 1 EUR negotiable price is flagged price_is_symbolic. total_results is mobile.de's own count.","required_params":[],"optional_params":["vehicle_type","query","make","model","price_min","price_max","year_min","year_max","mileage_min","mileage_max","power_kw_min","power_kw_max","fuel","transmission","body_type","seller_type","condition","damaged","vat_deductible","price_rating","latitude","longitude","radius_km","sort","page","page_size","language","include_pii"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"Which mobile.de vehicle class to search, one per call. car by default, so leaving it out searches cars only. The classes match the site's own categories.","on_invalid":"reject","allowed_values":[{"value":"car","label":"Cars"},{"value":"motorbike","label":"Motorbikes"},{"value":"van","label":"Vans and trucks up to 7.5 t"},{"value":"truck","label":"Trucks over 7.5 t"},{"value":"tractor_unit","label":"Tractor units (Sattelzugmaschinen)"},{"value":"trailer","label":"Trailers (Anhänger)"},{"value":"semi_trailer","label":"Semi-trailers (Auflieger)"},{"value":"bus","label":"Buses"},{"value":"agricultural","label":"Agricultural vehicles"},{"value":"construction","label":"Construction machinery"},{"value":"forklift","label":"Forklifts (Stapler)"},{"value":"motorhome","label":"Motorhomes and caravans"},{"value":"ebike","label":"E-bikes"}],"default":"car"},{"name":"query","type":"string","required":false,"description":"Free text, as typed into mobile.de's search box (model names, trims).","on_invalid":"reject","example":"golf"},{"name":"make","type":"string","required":false,"description":"Make name (BMW, Volkswagen, Mercedes-Benz) or mobile.de make id (3500 = BMW). The makes action lists both.","on_invalid":"reject","example":"BMW"},{"name":"model","type":"string","required":false,"description":"Model name or id for the make (cars only; the models action lists them, including whole series such as '3er Reihe'). Requires make.","on_invalid":"reject","example":"3er Reihe"},{"name":"price_min","type":"number","required":false,"description":"Lowest gross price, EUR.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest gross price, EUR.","on_invalid":"reject","example":20000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of first registration.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest year of first registration.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest mileage, km.","on_invalid":"reject","minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Highest mileage, km.","on_invalid":"reject","example":100000,"minimum":0},{"name":"power_kw_min","type":"integer","required":false,"description":"Lowest power, kW.","on_invalid":"reject","minimum":0},{"name":"power_kw_max","type":"integer","required":false,"description":"Highest power, kW.","on_invalid":"reject","minimum":0},{"name":"fuel","type":"enum","required":false,"description":"Fuel type.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"diesel","label":"diesel"},{"value":"electric","label":"electric"},{"value":"hybrid_petrol","label":"hybrid_petrol"},{"value":"hybrid_diesel","label":"hybrid_diesel"},{"value":"lpg","label":"lpg"},{"value":"cng","label":"cng"},{"value":"hydrogen","label":"hydrogen"},{"value":"ethanol","label":"ethanol"},{"value":"other","label":"other"}]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"automatic"},{"value":"semi_automatic","label":"semi_automatic"},{"value":"manual","label":"manual"}]},{"name":"body_type","type":"enum","required":false,"description":"Body type. Cars: suv, cabrio, estate, van, sports_car, small_car, saloon, other. Motorbikes: see allowed values. Not available for vans and trucks.","on_invalid":"reject","allowed_values":[{"value":"suv","label":"suv"},{"value":"cabrio","label":"cabrio"},{"value":"estate","label":"estate"},{"value":"van","label":"van"},{"value":"sports_car","label":"sports_car"},{"value":"small_car","label":"small_car"},{"value":"saloon","label":"saloon"},{"value":"other","label":"other"},{"value":"chopper_cruiser","label":"chopper_cruiser"},{"value":"dirt_bike","label":"dirt_bike"},{"value":"enduro","label":"enduro"},{"value":"sidecar","label":"sidecar"},{"value":"lightweight","label":"lightweight"},{"value":"moped","label":"moped"},{"value":"motorcycle","label":"motorcycle"},{"value":"naked_bike","label":"naked_bike"},{"value":"pocket_bike","label":"pocket_bike"},{"value":"quad","label":"quad"},{"value":"rally_cross","label":"rally_cross"},{"value":"racing","label":"racing"},{"value":"roadster","label":"roadster"},{"value":"scooter","label":"scooter"},{"value":"sports_touring","label":"sports_touring"},{"value":"super_moto","label":"super_moto"},{"value":"tourer","label":"tourer"},{"value":"trike","label":"trike"},{"value":"sport","label":"sport"}]},{"name":"seller_type","type":"enum","required":false,"description":"Who sells.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealer"},{"value":"private","label":"Private seller"},{"value":"company","label":"Company vehicles"}]},{"name":"condition","type":"enum","required":false,"description":"New or used vehicles.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used","label":"Used"}]},{"name":"damaged","type":"enum","required":false,"description":"Damaged vehicles are included when omitted, as on mobile.de.","on_invalid":"reject","allowed_values":[{"value":"exclude","label":"Hide damaged vehicles"},{"value":"only","label":"Only damaged vehicles"}]},{"name":"vat_deductible","type":"boolean","required":false,"description":"Only vehicles sold with deductible VAT (a net price is published).","on_invalid":"reject"},{"name":"price_rating","type":"enum","required":false,"description":"Only listings mobile.de rates at this price level.","on_invalid":"reject","allowed_values":[{"value":"very_good","label":"very_good"},{"value":"good","label":"good"},{"value":"reasonable","label":"reasonable"},{"value":"increased","label":"increased"},{"value":"high","label":"high"}]},{"name":"latitude","type":"number","required":false,"description":"Search centre latitude (with longitude).","on_invalid":"reject","example":52.52,"minimum":-90,"maximum":90},{"name":"longitude","type":"number","required":false,"description":"Search centre longitude (with latitude).","on_invalid":"reject","example":13.4,"minimum":-180,"maximum":180},{"name":"radius_km","type":"integer","required":false,"description":"Radius around latitude/longitude. 50 when a centre is given without it.","on_invalid":"reject","allowed_values":[{"value":10,"label":"10 km"},{"value":20,"label":"20 km"},{"value":50,"label":"50 km"},{"value":100,"label":"100 km"},{"value":200,"label":"200 km"},{"value":500,"label":"500 km"}]},{"name":"sort","type":"enum","required":false,"description":"Order. Omitted: mobile.de's relevance order. Sponsored top ads stay first under every order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"mileage_asc","label":"mileage_asc"},{"value":"mileage_desc","label":"mileage_desc"},{"value":"year_desc","label":"year_desc"},{"value":"year_asc","label":"year_asc"},{"value":"oldest_listing","label":"oldest_listing"}]},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Organic listings per page (10, 20, 50 or 100). A sponsored top ad can come on top of that count.","on_invalid":"reject","allowed_values":[{"value":10,"label":"10"},{"value":20,"label":"20"},{"value":50,"label":"50"},{"value":100,"label":"100"}],"default":20},{"name":"language","type":"enum","required":false,"description":"Language of every text label (fuel, transmission, seller type, attribute labels, price display). Numbers and ids are identical in every language.","on_invalid":"reject","allowed_values":[{"value":"de","label":"de"},{"value":"en","label":"en"},{"value":"fr","label":"fr"},{"value":"it","label":"it"},{"value":"es","label":"es"},{"value":"pl","label":"pl"},{"value":"nl","label":"nl"},{"value":"ro","label":"ro"},{"value":"ru","label":"ru"},{"value":"tr","label":"tr"},{"value":"cs","label":"cs"}],"default":"de"},{"name":"include_pii","type":"boolean","required":false,"description":"Return phone numbers, messenger links and private sellers' exact location. Off by default.","on_invalid":"reject","default":false}],"returns":"{vehicle_type, total_results, page, page_size, has_more, sort_applied, count, ad_slots_dropped, duplicates_dropped, filters_applied{}, listings[]{listing_id, url, title, short_title, sub_title, make, make_id, model, model_id, vehicle_type, category, price (gross EUR), currency, price_display, price_net, vat_rate, vat_deductible, price_before_reduction, price_negotiable, price_is_symbolic, price_rating{rating, label, thresholds[], no_rating_reason}, financing{monthly_installment, down_payment, term_months, ...} (never the price), first_registration (MM/YYYY), mileage_km, power_kw, power_hp, fuel, transmission, cubic_capacity_ccm, exterior_color, doors, seats, emission_class, previous_owners, condition_new, highlights[], deal, delivery, location{postcode, city, country, text}, seller{type dealer|private|company, seller_id, name (dealers), rating, rating_count, rating_scale, phone (include_pii)}, image, image_count, kba{hsn,tsn}, placement (organic|top_ad|eyecatcher|page1_ad), is_sponsored}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"3500"}},{"name":"listing","description":"The full mobile.de listing: gross price, net price and VAT rate when the dealer can issue a VAT invoice, the earlier price of a reduced listing, price type (fixed/negotiable), mobile.de's price rating with its band, condition and damage, first registration, mileage, power in kW and hp, fuel, gearbox, colours, every published attribute (label + value), the features list, highlights, description, all images, dates, and the seller: a dealer's name, address, rating, opening hours and homepage; a private seller's town only. A removed listing returns NOT_FOUND.","required_params":["listing_id"],"optional_params":["language","include_pii"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The mobile.de ad id (every search row returns it) or a mobile.de listing url. Listings expire; take a fresh id from search.","on_invalid":"reject","example":"461079864","aliases":["url"]},{"name":"language","type":"enum","required":false,"description":"Language of every text label (fuel, transmission, seller type, attribute labels, price display). Numbers and ids are identical in every language.","on_invalid":"reject","allowed_values":[{"value":"de","label":"de"},{"value":"en","label":"en"},{"value":"fr","label":"fr"},{"value":"it","label":"it"},{"value":"es","label":"es"},{"value":"pl","label":"pl"},{"value":"nl","label":"nl"},{"value":"ro","label":"ro"},{"value":"ru","label":"ru"},{"value":"tr","label":"tr"},{"value":"cs","label":"cs"}],"default":"de"},{"name":"include_pii","type":"boolean","required":false,"description":"Return phone numbers, messenger links and private sellers' exact location. Off by default.","on_invalid":"reject","default":false}],"returns":"{listing{listing_id, url, title, make, model, vehicle_type, category, price, currency, price_display, price_type, price_negotiable, price_is_symbolic, price_net, vat_rate, vat_deductible, price_before_reduction, price_rating, deal, condition, condition_new, is_damaged, ready_to_drive, first_registration, mileage_km, power_kw, power_hp, fuel, transmission, cubic_capacity_ccm, exterior_color, manufacturer_color, interior, doors, seats, previous_owners, emission_class, general_inspection, dealer_vehicle_number, specs{}, attributes[{tag,label,value}], features[], highlights[], description, images[], image_count, kba, created_at, modified_at, renewed_at, seller{type, seller_id, name, street, postcode, city, country, latitude, longitude, rating, rating_count, rating_scale, recommendation_rate_pct, member_since, languages, homepage_url, opening_hours[], logo, phones (include_pii), phones_withheld}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"461079864"}},{"name":"makes","description":"Every make mobile.de offers for a vehicle class, with the make id the search action accepts.","required_params":[],"optional_params":["vehicle_type"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"Which mobile.de vehicle class to search, one per call. car by default, so leaving it out searches cars only. The classes match the site's own categories.","on_invalid":"reject","allowed_values":[{"value":"car","label":"Cars"},{"value":"motorbike","label":"Motorbikes"},{"value":"van","label":"Vans and trucks up to 7.5 t"},{"value":"truck","label":"Trucks over 7.5 t"},{"value":"tractor_unit","label":"Tractor units (Sattelzugmaschinen)"},{"value":"trailer","label":"Trailers (Anhänger)"},{"value":"semi_trailer","label":"Semi-trailers (Auflieger)"},{"value":"bus","label":"Buses"},{"value":"agricultural","label":"Agricultural vehicles"},{"value":"construction","label":"Construction machinery"},{"value":"forklift","label":"Forklifts (Stapler)"},{"value":"motorhome","label":"Motorhomes and caravans"},{"value":"ebike","label":"E-bikes"}],"default":"car"}],"returns":"{vehicle_type, count, makes[{make_id, name}]}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"models","description":"Every car model mobile.de lists for a make, including series groups (is_group true, e.g. '3er Reihe (Alle)'), with the model id the search action accepts. Cars only.","required_params":["make"],"optional_params":[],"params":[{"name":"make","type":"string","required":true,"description":"Make name or mobile.de make id.","on_invalid":"reject","example":"BMW"}],"returns":"{make, make_id, count, models[{model_id, name, group, is_group}]}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"3500"}}]},{"name":"momoshop","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"momoshop API — momo購物網, Taiwan's #1 online store: search, category listings, full product records with every price and per-variant stock, and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/momoshop/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on momoshop.com.tw. Each row carries the headline price and the struck 市售價, total stock, rating and rating count, the source's sales band (總銷量>1,000), the fast-delivery mark, coupon / gift / instant-discount flags and whether momo or a third-party shop sells it; paid placements are kept apart in `ads`. Filters: search category, brand id, price range, fast delivery, coupon, in stock, 0% instalments, convenience-store pickup or payment, TV shopping, video, instant discount, cash on delivery, chilled delivery, subscription, large-appliance delivery, ship-from; seven sorts. Every filter was measured against the unfiltered total; ones the site ignores are not offered. Facets (search categories and brands with counts) come with every answer.","required_params":["query"],"optional_params":["category","brand_id","min_price","max_price","fast_delivery","has_coupon","in_stock","zero_interest","store_pickup","tv_shopping","has_video","instant_discount","cash_on_delivery","store_payment","chilled_delivery","subscription","appliance_install","appliance_fast","ship_from","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words in Traditional Chinese or English (e.g. `耳機`, `洗髮精`, `iPhone`). Full-width characters are normalised (NFKC) — the site itself does not fold them ('ＱＣＹ' 27 results vs 'QCY' 35).","on_invalid":"reject","example":"耳機","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Search-tree category code from this action's own `facets.categories` (e.g. `1100000000` 手機, `1100700000` 音訊設備) or a product's `search_category_code`. The product page's breadcrumb codes (4200000000 …) belong to a different tree and answer 0 here; use the `category` action for those. An unknown code answers an empty result.","on_invalid":"reject","example":"1100000000","aliases":["category_code","cate_code"]},{"name":"brand_id","type":"string","required":false,"description":"momo's numeric brand id from `facets.brands[].brand_id` or a product's `brand.brand_id` (e.g. `20160808155618011` Apple). The source ignores brand NAMES, so only the id is accepted.","on_invalid":"reject","example":"20160808155618011","aliases":["brand_no","brandNo"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in TWD (the headline price).","on_invalid":"reject","example":1000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in TWD.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["price_max"]},{"name":"fast_delivery","type":"boolean","required":false,"description":"`true` = only 快速到貨 (momo fast delivery) items.","on_invalid":"reject"},{"name":"has_coupon","type":"boolean","required":false,"description":"`true` = only items a coupon (折價券) applies to.","on_invalid":"reject"},{"name":"in_stock","type":"boolean","required":false,"description":"`true` = only items with stock (商品有量).","on_invalid":"reject"},{"name":"zero_interest","type":"boolean","required":false,"description":"`true` = only items with 0% instalments (0利率).","on_invalid":"reject"},{"name":"store_pickup","type":"boolean","required":false,"description":"`true` = only items deliverable to a convenience store (超商取貨).","on_invalid":"reject"},{"name":"tv_shopping","type":"boolean","required":false,"description":"`true` = only momo TV-shopping items (電視購物).","on_invalid":"reject"},{"name":"has_video","type":"boolean","required":false,"description":"`true` = only items with a product video (有影片).","on_invalid":"reject"},{"name":"instant_discount","type":"boolean","required":false,"description":"`true` = only items in an instant-discount campaign (現折活動).","on_invalid":"reject"},{"name":"cash_on_delivery","type":"boolean","required":false,"description":"`true` = only items payable on delivery (貨到付款).","on_invalid":"reject"},{"name":"store_payment","type":"boolean","required":false,"description":"`true` = only items payable at a convenience store (超商付款).","on_invalid":"reject"},{"name":"chilled_delivery","type":"boolean","required":false,"description":"`true` = only chilled / frozen home delivery items (低溫宅配).","on_invalid":"reject"},{"name":"subscription","type":"boolean","required":false,"description":"`true` = only items with scheduled / split delivery (定期配/分次配).","on_invalid":"reject"},{"name":"appliance_install","type":"boolean","required":false,"description":"`true` = only large appliances with delivery and installation (大家電安心配).","on_invalid":"reject"},{"name":"appliance_fast","type":"boolean","required":false,"description":"`true` = only large appliances with fast delivery (大家電快配).","on_invalid":"reject"},{"name":"ship_from","type":"enum","required":false,"description":"Where the item ships from (出貨來源).","on_invalid":"reject","allowed_values":[{"value":"momo_express","label":"momo速配 momo's own warehouse"},{"value":"vendor","label":"廠商出貨 shipped by the supplier"},{"value":"cross_border","label":"跨境 cross-border (the source gives no total for this one)"}]},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own sort tabs.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"綜合推薦 relevance (default)"},{"value":"monthly_sales","label":"月銷量 monthly sales"},{"value":"newest","label":"新上市 newest"},{"value":"price_asc","label":"價格 low to high"},{"value":"price_desc","label":"價格 high to low"},{"value":"rating_desc","label":"評價 highest rated first"},{"value":"rating_asc","label":"評價 lowest rated first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page. A page past the source's last page (`total_pages`) answers NOT_FOUND.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000}],"returns":"results[]{product_id, title, subtitle (the source's promotion line, e.g. 滿2000折250), url, image, title_brand, price (headline TWD), list_price (市售價 when above price), price_note, currency=TWD, stock (the card's total stock), is_sold_out, rating (0-5), rating_count, total_sales_text, total_sales_min, fast_delivery, icons[], has_coupon, has_gift, instant_discount (現折活動), adult_only, on_sale_from, seller_type (momo|third_party), is_ad} + ads[] (paid rows, same shape) + total (null when the source gives none) + total_pages + page + has_more + facets{categories[]{code, name, count}, brands[]{name, brand_id, count}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"耳機"}},{"name":"category","description":"Every product of one momo shop category (the category pages of momoshop.com.tw), 20 per page, with the same row shape as `search`, the category's breadcrumb and its brand list with counts. Takes the shop-tree code from a product's `category_path[].code` (e.g. `4201700090` 真無線 earbuds, `4200000000` 3C週邊).","required_params":["category"],"optional_params":["min_price","max_price","page"],"params":[{"name":"category","type":"string","required":true,"description":"momo shop-tree category code (10 digits) from a product's `category_path[].code`, e.g. `4201700090` (真無線), `4201700000` (耳機/藍牙耳機), `4200000000` (3C週邊). An unknown code answers NOT_FOUND.","on_invalid":"reject","example":"4201700090","aliases":["category_code","cate_code"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in TWD.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in TWD.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["price_max"]},{"name":"page","type":"integer","required":false,"description":"Result page. A page past the source's last page (`total_pages`) answers NOT_FOUND.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000}],"returns":"results[]{product_id, title, subtitle (the source's promotion line, e.g. 滿2000折250), url, image, title_brand, price (headline TWD), list_price (市售價 when above price), price_note, currency=TWD, stock (the card's total stock), is_sold_out, rating (0-5), rating_count, total_sales_text, total_sales_min, fast_delivery, icons[], has_coupon, has_gift, instant_discount (現折活動), adult_only, on_sale_from, seller_type (momo|third_party), is_ad} + total + total_pages + page + has_more + category_path[]{code, name} + brands[]{name, brand_id, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"4201700090"}},{"name":"product","description":"One momo product in full: title and subtitle, brand and brand id, images, video, the shop category path and the search category, every price the page prints (headline price and its label — 促銷價, or 限時折後價 during a time-limited discount — the promotion price and the market price), every variant with its own stock and delivery promise, delivery options with their fees and free-shipping thresholds, payment methods and the card offer, warranty, gifts, the sales band and category ranking, the spec table and description text, and for third-party listings the shop (name, rating, reply rate, defect rate, product count). One extra call adds the rating and rating count.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"momo product code, the `product_id` of any search or category row: digits for momo's own listings (e.g. `13414517`, the number in momoshop.com.tw/product/<code> or GoodsDetail.jsp?i_code=<code>) or `TP` + 14 digits for third-party shop listings (e.g. `TP00042480000305`). A product URL is accepted too. Provide product_id OR url.","on_invalid":"reject","example":"13414517","aliases":["i_code","goods_code","goodsCode","id"]},{"name":"url","type":"string","required":false,"description":"A momoshop.com.tw product URL; alternative to product_id.","on_invalid":"reject","example":"https://www.momoshop.com.tw/goods/GoodsDetail.jsp?i_code=13414517","aliases":["product_url"]}],"returns":"product{product_id, title, subtitle, url, seller_type, brand{name, brand_id}, title_brand, images[], video_url, category_path[]{code, name}, search_category_code, search_category_path[], prices{price, price_label, promo_price, list_price, price_note, time_limited, currency=TWD, prices_as_labeled[]{label, price}}, in_stock, stock_total, stock_total_is_lower_bound, variants[]{variant_id, name, option_a, option_b, price, stock, stock_capped, low_stock_tip, delivery_text, image}, variant_count, delivery_text, fast_delivery, delivery_options[]{method, code, terms, promotions[]}, payment_methods[], card_offer, warranty, max_order_quantity, on_sale_from, gifts[], has_coupon, adult_only, icons[], tags[], total_sales_text, total_sales_min, ranking{list, text, search_category_code}, specs[]{name, value}, features[], spec_text, seller{shop_id, name, rating, reply_rate, defect_rate_pct, product_count, status, cross_border, logo}, supplier_code, rating, rating_count, rating_count_text, rating_count_is_approx, witness{ldjson_prices[], analytics_price, analytics_category[]}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"13414517"}},{"name":"reviews","description":"Reviews (評價) of one momo product, 20 per page: star rating, text, date, the buyer's masked name as momo shows it, the variant bought, photos and video, likes, the seller's reply; plus the product's average rating, rating count, the count per star, and the aspect scores (商品品質 …).","required_params":[],"optional_params":["product_id","url","filter","page"],"params":[{"name":"product_id","type":"string","required":false,"description":"momo product code, the `product_id` of any search or category row: digits for momo's own listings (e.g. `13414517`, the number in momoshop.com.tw/product/<code> or GoodsDetail.jsp?i_code=<code>) or `TP` + 14 digits for third-party shop listings (e.g. `TP00042480000305`). A product URL is accepted too. Provide product_id OR url.","on_invalid":"reject","example":"13414517","aliases":["i_code","goods_code","goodsCode","id"]},{"name":"url","type":"string","required":false,"description":"A momoshop.com.tw product URL; alternative to product_id.","on_invalid":"reject","aliases":["product_url"]},{"name":"filter","type":"enum","required":false,"description":"Which reviews. The source lists nothing without a filter.","on_invalid":"reject","allowed_values":[{"value":"with_text","label":"有評論 written reviews (default)"},{"value":"with_media","label":"有圖/影片 with photos or video"},{"value":"5","label":"5 stars (every 5-star rating, text or not)"},{"value":"4","label":"4 stars"},{"value":"3","label":"3 stars"},{"value":"2","label":"2 stars"},{"value":"1","label":"1 star"}],"default":"with_text"},{"name":"page","type":"integer","required":false,"description":"Result page. A page past the source's last page (`total_pages`) answers NOT_FOUND.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000}],"returns":"reviews[]{review_id, rating, content, date, reviewer, variant, like_count, images[], video_url, seller_reply, seller_reply_date} + rating + rating_count + with_text_count + with_media_count + star_counts{5..1} + counts_are_approx + rating_count_text + score_breakdown[] + page + total_pages + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"13414517"}}]},{"name":"momox","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"momox / medimops API — live data from Europe's biggest re-commerce dealer in second-hand media. momox buys used books, CDs, DVDs, Blu-rays, games and software in bulk, grades every copy by hand and sells it from its own warehouses: medimops.de (DE) and momox-shop.fr (FR), 9.4 million live listings on the German store alone. Search or browse the catalogue, or look a title up straight by its ISBN-13 or EAN-13 barcode, and get the complete condition ladder for that one product — a price AND a unit stock count for each of momox's five grades (New, Like New, Very Good, Good, Acceptable) — plus EAN, ISBN-10/13, author, translator, publisher, binding, page count, publication date, FSK rating and the store's own review score. One seller, one price per grade, no marketplace noise. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/momox/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse one momox media storefront and get one row per product with its FULL condition ladder already attached — every grade momox has in stock with that grade's own price and unit count, so you do not need a second call to see whether the cheap copy is the acceptable one. Also the barcode lookup: hand `query` an ISBN-13 or a 13-digit EAN and the source returns exactly that one product (measured 1 row for three different barcodes across books, films and games). Every filter offered here was compared against an unfiltered control in the SAME run on two different queries and really changes the result; the two filters the source accepts and then ignores (`language`, and `category_id` as a query parameter) are not exposed at all. The response carries the source's own UNCAPPED facet counts next to its capped total, the exact-match flag, and a warning for anything the source dropped.","required_params":["market"],"optional_params":["query","category","condition","format","price_min","price_max","age_rating","author","include_unavailable","sort","page"],"params":[{"name":"market","type":"enum","required":true,"description":"Which momox media storefront to read. Prices, stock and the whole category id space are PER MARKET and really differ: on 2026-10-08 ISBN 9783551551672 read EUR 4.51 with 3,819 copies on `de` and EUR 4.49 with 3,818 copies on `fr` in the same minute. Both markets quote EUR, so nothing is converted here — a row always carries the market it was read from. `de` also publishes an FSK age-rating facet that `fr` does not have.","on_invalid":"reject","allowed_values":[{"value":"de","label":"medimops.de — the German store, EUR, 9.37 M listings"},{"value":"fr","label":"momox-shop.fr — the French store, EUR, smaller catalogue"}],"default":"de","example":"de","aliases":["storefront","site","country","locale"]},{"name":"query","type":"string","required":false,"description":"Free-text search over the whole catalogue — title, author, series, publisher. ALSO the barcode lookup: an ISBN-13 or a full 13-digit EAN returns exactly one row (measured: 9783551551672 -> 1 row, 4010324028952 -> 1 row, 0045496420468 -> 1 row). An ISBN-10 or an EAN with its leading zero stripped returns NOTHING at the source, so this engine converts an ISBN-10 to its ISBN-13 before sending and tells you in `meta.query_normalised`. ⚠️ The source DROPS the keyword on every category shelf except the whole catalogue, so `query` and `category` cannot be combined — asking for both is rejected rather than answered with a category dump. Narrow a keyword with `format`, `condition` or `price_min`/`price_max` instead.","on_invalid":"reject","example":"harry potter","aliases":["q","keyword","search","term","text"]},{"name":"category","type":"string","required":false,"description":"Browse one category shelf instead of searching. The id is the source's own numeric category id and it is PER MARKET — DE Bücher is 186606 while FR Livres is 8, so an id from the wrong market is rejected. The five top-level ids of each market are listed above; the `categories` action returns the full tree (300 shelves on `de`, 228 on `fr`) with every id, name, parent and url. The url slug is cosmetic: the id is what the source keys on. An unknown id is answered honestly by the source with 0 results. Cannot be combined with `query` (see `query`).","on_invalid":"reject","allowed_values":[{"value":"186606","label":"de · Bücher — 6,973,323 listings"},{"value":"255882","label":"de · Musik — 497,483"},{"value":"284266","label":"de · Filme — 270,513"},{"value":"300992","label":"de · Spiele — 39,186"},{"value":"301927","label":"de · Software — 7,133"},{"value":"8","label":"fr · Livres"},{"value":"9","label":"fr · Films"},{"value":"7","label":"fr · Jeux vidéo"},{"value":"11","label":"fr · Musique"},{"value":"10","label":"fr · Logiciels"}],"example":"186606","value_pattern":"[0-9]{1,14}","aliases":["category_id","shelf","cat"]},{"name":"condition","type":"array","required":false,"description":"Keep only products that have a copy in these condition grades — momox's own five tiers. Several allowed and the source really unions them: measured on `q=harry potter`, New alone 653, UsedGood alone 1,264 and ['New','UsedGood'] 1,820 against an unfiltered 2,378. Catalogue-wide on `de`: New 4,918,650 · UsedVeryGood 1,953,408 · UsedGood 1,868,315 · UsedAcceptable 399,668 · UsedLikeNew 231,173. A grade the source does not know (e.g. 'Mint') is silently ignored by it and returns the UNFILTERED catalogue, so unknown grades are rejected here instead. Snake-case spellings (`used_good`, `like_new`) are accepted.","on_invalid":"reject","allowed_values":[{"value":"New","label":"Neu / Neuf — a brand-new copy"},{"value":"UsedLikeNew","label":"Gebraucht - Wie Neu / Comme neuf — as new"},{"value":"UsedVeryGood","label":"Gebraucht - Sehr gut / Très bon état — very good"},{"value":"UsedGood","label":"Gebraucht - Gut / Bon état — good, the biggest used tier"},{"value":"UsedAcceptable","label":"Gebraucht - Akzeptabel / Acceptable — the cheapest tier"}],"example":["UsedGood"],"aliases":["conditions","grade","grades","variant_type","state"]},{"name":"format","type":"string","required":false,"description":"Keep only this physical format, the source's own `medium` token. Measured on `q=harry potter`: 2,378 unfiltered -> 754 Taschenbuch -> 207 DVD -> 96 Audio CD. ⚠️ TWO THINGS THE SOURCE DOES THAT COST YOU ROWS IF NOBODY TELLS YOU. (1) It accepts exactly ONE value: repeating the parameter, comma-joining and pipe-joining were all swallowed and returned the unfiltered total. (2) It carries two parallel vocabularies, so the SAME human label appears under two different tokens — 'Taschenbuch' is both `Taschenbuch` (4,134,492) and `paperback` (1,010,506), and 'Gebundene Ausgabe' is both `Gebundene Ausgabe` (1,114,271) and `hardcover` (272,613). When your value has such a sibling the engine names it in `meta.format_sibling_value` so you can run the second call. An unknown format is answered honestly by the source with 0 results.","on_invalid":"reject","allowed_values":[{"value":"Taschenbuch","label":"Taschenbuch — 4 134 492 listings"},{"value":"Gebundene Ausgabe","label":"Gebundene Ausgabe — 1 114 271 listings"},{"value":"paperback","label":"paperback — 1 010 506 listings"},{"value":"Audio CD","label":"Audio CD — 499 839 listings"},{"value":"hardcover","label":"hardcover — 272 613 listings"},{"value":"Broschiert","label":"Broschiert — 225 733 listings"},{"value":"DVD","label":"DVD — 216 061 listings"},{"value":"Sonstige Einbände","label":"Sonstige Einbände — 112 866 listings"},{"value":"Blu-ray","label":"Blu-ray — 35 562 listings"},{"value":"Videospiel","label":"Videospiel — 18 970 listings"},{"value":"audioCD","label":"audioCD — 12 583 listings"},{"value":"Computerspiel","label":"Computerspiel — 11 051 listings"},{"value":"CD-ROM","label":"CD-ROM — 9 418 listings"},{"value":"pocket_book","label":"pocket_book — 9 162 listings"},{"value":"perfect","label":"perfect — 8 523 listings"},{"value":"Paperback","label":"Paperback — 4 201 listings"},{"value":"blu_ray","label":"blu_ray — 2 841 listings"},{"value":"Comic","label":"Comic — 1 795 listings"},{"value":"spiral_bound","label":"spiral_bound — 1 431 listings"},{"value":"Hardcover","label":"Hardcover — 998 listings"}],"example":"Taschenbuch","aliases":["medium","binding","edition_format"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR, major units (2 = EUR 2.00). The source's price filter works in whole-euro bands: it is sent as `price=<min>,<max>` and the bands it publishes are 1-2, 2-5, 5-10, 10-20 and 20-max. Measured on `q=harry potter`: 2,378 unfiltered -> 50 in the 1-2 band -> 558 at 20 and above. Use with `price_max`; giving only `price_min` sets the upper end to the source's own `max` keyword.","on_invalid":"reject","example":1,"minimum":0,"aliases":["minPrice","min_price","price_from"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR, major units, same whole-euro banding as `price_min`. Given alone it is sent as `price=0,<max>`. The band applies to the price the storefront shows for the product, which is the price of its best available condition — see `best_price` vs `lowest_price` in the returned rows.","on_invalid":"reject","example":5,"minimum":0,"aliases":["maxPrice","max_price","price_to"]},{"name":"age_rating","type":"string","required":false,"description":"German age rating (FSK) and its international equivalents, the source's own label verbatim. `de` ONLY — momox-shop.fr publishes no rating facet and asking for one there is rejected rather than silently ignored. Measured on `q=harry potter` / `de`: 2,378 unfiltered -> 2 at 'Freigegeben ab 16 Jahren'; on `q=star wars` the same filter gave 48. Only 193,223 listings carry a rating at all, so this filter cuts hard by design.","on_invalid":"reject","allowed_values":[{"value":"Freigegeben ohne Altersbeschränkung","label":"Freigegeben ohne Altersbeschränkung — 61 179 listings"},{"value":"Freigegeben ab 6 Jahren","label":"Freigegeben ab 6 Jahren — 17 272 listings"},{"value":"Freigegeben ab 12 Jahren","label":"Freigegeben ab 12 Jahren — 39 100 listings"},{"value":"Freigegeben ab 16 Jahren","label":"Freigegeben ab 16 Jahren — 36 657 listings"},{"value":"Freigegeben ab 18 Jahren","label":"Freigegeben ab 18 Jahren — 12 386 listings"},{"value":"Nicht geprüft","label":"Nicht geprüft — 12 781 listings"},{"value":"Unbekannt","label":"Unbekannt — 4 551 listings"},{"value":"Unrated","label":"Unrated — 3 961 listings"},{"value":"Infoprogramm","label":"Infoprogramm — 1 815 listings"},{"value":"Lehrprogramm","label":"Lehrprogramm — 442 listings"},{"value":"Indiziert","label":"Indiziert — 23 listings"},{"value":"G (General Audience)","label":"G (General Audience) — 1 856 listings"},{"value":"NR (Not Rated)","label":"NR (Not Rated) — 390 listings"},{"value":"R (Restricted)","label":"R (Restricted) — 72 listings"},{"value":"PG-13 (Parental Guidance Suggested)","label":"PG-13 (Parental Guidance Suggested) — 75 listings"},{"value":"X (Mature Audiences Only)","label":"X (Mature Audiences Only) — 240 listings"},{"value":"FSK 0","label":"FSK 0 — 314 listings"},{"value":"FSK 12","label":"FSK 12 — 45 listings"},{"value":"FSK 16","label":"FSK 16 — 47 listings"},{"value":"FSK 18","label":"FSK 18 — 17 listings"}],"example":"Freigegeben ab 16 Jahren","aliases":["rating","fsk","audience_rating"]},{"name":"author","type":"string","required":false,"description":"Browse one contributor's shelf by the source's own slug — `j-k-rowling`, `coelho-paulo`, `lucinda-riley`. Measured: 409 rows for `j-k-rowling`, 660 for `coelho-paulo`, 0 for a slug that does not exist. ⚠️ TWO measured limits, both enforced rather than hidden. (1) It REPLACES the keyword, it does not narrow it: `from=j-k-rowling` returned the same 409 Rowling rows whether the query was 'harry potter' or 'star wars', so `query` + `author` is rejected. (2) The shelf is ONE FIXED PAGE: page 0, page 1 and page 2 of it, the same shelf with condition=New and the same shelf with sorting=-price all returned the byte-identical 28 rows, so `page`, `condition`, `format`, `price_min`/`price_max`, `age_rating`, `include_unavailable` and `sort` are rejected here instead of being silently dropped — the total still tells you how many the contributor has. Every `search` response lists the top contributor slugs of the current result set under `facets.manufacturer`.","on_invalid":"reject","example":"j-k-rowling","value_pattern":"[a-z0-9][a-z0-9-]{0,80}","aliases":["from","contributor","artist","author_slug"]},{"name":"include_unavailable","type":"boolean","required":false,"description":"Include products momox currently has NO copy of. Off by default, exactly like the storefront. It opens the result up a lot and the counts prove the source really applies it: `q=harry potter` 2,378 -> 5,759 and `q=star wars` 4,184 -> 10,000 (the latter hits the source's own 10,000 total ceiling — see `total_is_capped`).","on_invalid":"reject","default":false,"example":true,"aliases":["only_available","include_out_of_stock","all_products"]},{"name":"sort","type":"enum","required":false,"description":"Row order. Verified to really reorder on `q=harry potter` in one run: `price_desc` opened at EUR 316.00, 313.50, 259.60, 250.50, 249.40 and `date_desc` at four 2026-09-01 titles while `date_asc` opened at 1854-01-01 and 1900-01-01. One honest caveat about `price_asc`: the source sorts it on the CHEAPEST variant, not on the price it shows, and it is not strictly monotonic at every page boundary (measured page 1 max 1.54 <= page 2 min 1.54, but page 2 max 4.79 > page 3 min 1.99). Any word outside this list is silently ignored by the source, so it is rejected here.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the source's own relevance order (default; no sort sent)"},{"value":"popularity","label":"the storefront's popularity order"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"date_asc","label":"oldest publication date first"},{"value":"date_desc","label":"newest publication date first"}],"default":"relevance","example":"price_asc","aliases":["sorting","order","order_by"]},{"name":"page","type":"integer","required":false,"description":"Which page of results, 1-based. ⚠️ The source is 0-indexed and answers `page=0`, `page=-1`, `page=abc` and no page at all with the FIRST page, which makes its own `page=1` the SECOND page — this engine does the translation so page 1 really is the first page and nothing is skipped. Page size is VARIABLE: 29, 28, 30, 29, 30, 27, 26 and 8 rows were measured on consecutive pages of one query, so read `page_rows` and `last_page` instead of multiplying. One page past the end the source silently switches to a broader query and reports a different total, so and far past the end it answers with neither rows nor a page count, so a page beyond `last_page` is REFUSED here rather than answered with another query's rows.","on_invalid":"reject","default":1,"example":2,"minimum":1,"aliases":["p","page_number"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility and it changes nothing here. There is no personal data on this source: the only seller is momox SE, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"products[]{product_id, mpid, ean, isbn13, isbn10, title, media_type, format, authors[], translators[], narrators[], artists[], contributor_name, contributor_url, contributor_slug, publisher, label, brand, edition, publication_date, release_date, page_count, weight_grams, item_count, language, age_rating, is_adult_content, best_price, best_price_display, best_price_condition, lowest_price, lowest_price_display, lowest_price_condition, best_price_is_lowest, new_price, saving_vs_new_pct, saving_vs_new_amount, on_sale, currency, stock, in_stock, stock_from_variants, stock_agrees_with_variants, conditions_available[], offer_count, offers[]{variant_id, condition, price, price_display, currency, stock, in_stock, on_sale, saving_pct, saving_amount}, is_active, image_url, url, market, storefront, country, amazon_url, rating_average, rating_count, rating_breakdown{}, category_path[], detail_params{}} + meta{market, storefront, country, currency, total_results, total_is_capped, catalogue_count_hint, pages, last_page, page, page_rows, page_size, has_more, exact_match, fallback_search, query_normalised, resolved_filters{}, format_sibling_value, price_range{min,max}, facets{}, seller{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"de","query":"harry potter","condition":["UsedGood"],"sort":"price_desc"}},{"name":"detail","description":"Everything one momox product page publishes, by momox article id, by ISBN or by EAN barcode. The complete condition ladder (a price, a unit stock count, a discount-versus-new figure and a sale flag for each grade momox holds), the bibliographic record (EAN, ISBN-10 and ISBN-13, author, translator, publisher, label, binding, page count, publication date, language, weight, FSK rating), the full description, the store's own review score and star breakdown, the category breadcrumb, the price momox quotes for a NEW copy for comparison, and optionally the other titles it links to the same author. Both of the page's price witnesses are read and reconciled: the headline `best_price` is the price of the best CONDITION in stock, not the cheapest copy — those two differed on 95 of 145 rows measured — so `lowest_price`, `lowest_price_condition` and `best_price_is_lowest` are published next to it, and `price_matches_page_schema` says whether the page's own schema.org block agrees. An id or barcode the store does not carry is NOT_FOUND, not an empty success.","required_params":["market"],"optional_params":["product_id","isbn","ean","include_related"],"params":[{"name":"market","type":"enum","required":true,"description":"Which momox media storefront to read. Prices, stock and the whole category id space are PER MARKET and really differ: on 2026-10-08 ISBN 9783551551672 read EUR 4.51 with 3,819 copies on `de` and EUR 4.49 with 3,818 copies on `fr` in the same minute. Both markets quote EUR, so nothing is converted here — a row always carries the market it was read from. `de` also publishes an FSK age-rating facet that `fr` does not have.","on_invalid":"reject","allowed_values":[{"value":"de","label":"medimops.de — the German store, EUR, 9.37 M listings"},{"value":"fr","label":"momox-shop.fr — the French store, EUR, smaller catalogue"}],"default":"de","example":"de","aliases":["storefront","site","country","locale"]},{"name":"product_id","type":"string","required":false,"description":"The momox article id, exactly as it appears at the end of every product url and in every `search` row (`M03551551677`). It is `M0` + the item's Amazon ASIN, and for a book that ASIN is the ISBN-10 — which is why `isbn` below is answered in a single request. Give this, or `isbn`, or `ean`. An id the store does not carry is NOT_FOUND.","on_invalid":"reject","example":"M03551551677","value_pattern":"M[0-9A-Z]{2,20}","aliases":["id","article_id","momox_id","asin"]},{"name":"isbn","type":"string","required":false,"description":"Look a BOOK up by its barcode. ISBN-13 and ISBN-10 are both accepted, with or without hyphens and spaces, and the check digit is verified before anything is requested. An ISBN-13 that starts with 978 is turned into the momox article id directly, so the lookup costs ONE request; `meta.resolved_by` says which route was used. (The source's own search answers a bare ISBN-10 with zero hits, so handing it one is not an option — this engine converts it.)","on_invalid":"reject","example":"9783551551672","value_pattern":"[0-9Xx -]{10,17}","aliases":["isbn13","isbn10","book_id"]},{"name":"ean","type":"string","required":false,"description":"Look a CD, DVD, Blu-ray, game or piece of software up by its barcode. The full 13-digit EAN is required including leading zeros — the source answers `711719833857` with nothing and `0711719833857` with the right product, which is a 12-vs-13-digit trap worth knowing. A 12-digit UPC is padded to 13 here. Unlike a book ISBN, a non-book EAN is not inside the article id, so this route costs two requests (the source's own exact-match search, then the product page) and `meta.resolved_by` says so.","on_invalid":"reject","example":"4010324028952","value_pattern":"[0-9 -]{12,17}","aliases":["ean13","gtin","barcode","upc"]},{"name":"include_related","type":"boolean","required":false,"description":"Also return the other titles the source links to the same contributor on that page (up to a dozen rows with their own price, stock and url). Off by default because it roughly doubles the response for callers who only want the one product; it costs no extra request either way.","on_invalid":"reject","default":false,"example":true,"aliases":["related","same_author","more_by"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility and it changes nothing here. There is no personal data on this source: the only seller is momox SE, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"product{product_id, mpid, ean, isbn13, isbn10, title, media_type, format, authors[], translators[], narrators[], artists[], contributor_name, contributor_url, contributor_slug, publisher, label, brand, edition, publication_date, release_date, page_count, weight_grams, item_count, language, age_rating, is_adult_content, best_price, best_price_display, best_price_condition, lowest_price, lowest_price_display, lowest_price_condition, best_price_is_lowest, new_price, saving_vs_new_pct, saving_vs_new_amount, on_sale, currency, stock, in_stock, stock_from_variants, stock_agrees_with_variants, conditions_available[], offer_count, offers[]{variant_id, condition, price, price_display, currency, stock, in_stock, on_sale, saving_pct, saving_amount}, is_active, image_url, url, market, storefront, country, amazon_url, rating_average, rating_count, rating_breakdown{}, category_path[], detail_params{}, description} + offers[]{…the same condition ladder, flat…} + summary{offer_count, in_stock_offer_count, units_in_stock, min_price, max_price, price_by_condition{}, stock_by_condition{}, price_matches_page_schema, page_schema_price, page_schema_availability} + related[]{product_id, ean, title, authors[], best_price, currency, stock, url} + meta{market, storefront, currency, resolved_by, requested_key, seller{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"de","isbn":"9783551551672","include_related":true}},{"name":"categories","description":"The category tree of one storefront, straight from its own category sitemap: every shelf with the numeric id that `search` takes, its name, its depth, its parent and its url — 300 shelves on `de` and 228 on `fr` on 2026-10-08. This is the resolver for `search`'s `category`, which matters because the ids are NOT shared between markets: Bücher is 186606 on `de` while Livres is 8 on `fr`. One request, ~48 KB, and the five top-level shelves come back with the catalogue counts the storefront itself publishes for them.","required_params":["market"],"optional_params":["max_depth"],"params":[{"name":"market","type":"enum","required":true,"description":"Which momox media storefront to read. Prices, stock and the whole category id space are PER MARKET and really differ: on 2026-10-08 ISBN 9783551551672 read EUR 4.51 with 3,819 copies on `de` and EUR 4.49 with 3,818 copies on `fr` in the same minute. Both markets quote EUR, so nothing is converted here — a row always carries the market it was read from. `de` also publishes an FSK age-rating facet that `fr` does not have.","on_invalid":"reject","allowed_values":[{"value":"de","label":"medimops.de — the German store, EUR, 9.37 M listings"},{"value":"fr","label":"momox-shop.fr — the French store, EUR, smaller catalogue"}],"default":"de","example":"de","aliases":["storefront","site","country","locale"]},{"name":"max_depth","type":"integer","required":false,"description":"How deep into the category tree to return. 1 = the five top-level shelves only, 2 = those plus their children, 9 = everything the source publishes (the deepest DE shelf measured sits 6 levels down). Depth is derived from the shelf's own url path, which is how the source itself nests them.","on_invalid":"reject","default":9,"example":2,"minimum":1,"maximum":9,"aliases":["depth","levels"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility and it changes nothing here. There is no personal data on this source: the only seller is momox SE, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"categories[]{category_id, name, slug, depth, parent_path[], url, search_params{market, category}} + top_level[]{category_id, name, listing_count} + meta{market, storefront, total_categories, returned_categories, max_depth}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"de","max_depth":2}}]},{"name":"momoxfashion","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"momox second-hand API — live data from the momox group's two Shopify storefronts: momoxfashion.com, managed second-hand fashion where every garment is ONE physical item that momox bought, graded, measured and photographed itself (1.85 million items indexed), and momoxbooks.com, second-hand books, CDs, DVDs, video games and software keyed on ISBN-13/EAN with one priced offer per condition grade (12.1 million items indexed). Search momox's own engine with its real facets — size, brand, colour family, condition grade, material, length, fit, neckline, sleeve, pattern, closure and fabric texture on fashion; condition, author, format, platform, language and medium on books — each with the shop's OWN item count beside it, then open one item for its complete offer table, its price at every grade and, on fashion, momox's own centimetre measurements of that exact garment. Also returns the full category tree with counts, the Shopify collection list and the newest-first live feed. EUR, one seller, no login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/momoxfashion/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse either storefront with momox's own search engine. One row per item: price, condition grade, brand and — on fashion — size, exact colour and colour family, material, length and the garment's own feature list, plus its shelf parsed into gender / category / subcategory. Free-text `q` and `category` can be combined, which the group's media storefronts refuse to do, and every filter is applied BY THE SOURCE, so the counts that come back are momox's own: `jacke` 170,726 items, narrowed to 13,135 inside men's jackets, to 475 for Nike and to 151 for Nike in size INT M. Two totals are always returned because the source publishes two: `total_matched`, the real match count, and `total_window`, the 10,000 rows actually reachable by paging. Filter values are case-sensitive at the source and a mis-cased one comes back as 0 rows with HTTP 200, so each value is folded to the storefront's own spelling and then checked against the source's own echo of what it applied; anything it did not apply is reported rather than passed off as a narrowing.","required_params":[],"optional_params":["storefront","q","category","filters","brand","size","color","condition","material","medium","language","creator","in_stock_only","min_price","max_price","sort","limit","page"],"params":[{"name":"storefront","type":"enum","required":false,"description":"Which momox storefront to read. The two shops run the same platform (Shopify plus a Constructor.io search index) but hold different things and spell their own filter values differently — `fashion` grades an item `very good` and `books` grades it `Very good`, and the source answers the wrong spelling with 0 results and HTTP 200 rather than an error. Every value sent here is therefore folded to the storefront's own spelling and checked against the source's own echo. Filters that one shop does not offer are rejected with the list it does offer, never silently ignored.","on_invalid":"reject","allowed_values":[{"value":"fashion","label":"www.momoxfashion.com — managed second-hand fashion, every garment one physical item that momox graded and measured itself (1,854,875 items indexed on 2026-10-08)"},{"value":"books","label":"www.momoxbooks.com — second-hand books, CDs, DVDs, video games and software keyed on ISBN-13/EAN, one offer per condition grade (12,130,377 items indexed on 2026-10-08)"}],"default":"fashion","example":"fashion","aliases":["shop","store","site","market"]},{"name":"q","type":"string","required":false,"description":"Free-text search, run by momox's own search engine — not by this API. On `fashion` it matches brand, garment type, colour and material: `nike jacke` returned 25,989 items and `jacke` alone 170,726 on 2026-10-08. On `books` it matches title, author and performer: `harry potter` returned 4,403. Leave it out to browse a shelf instead, with `category`. A keyword and a `category` can be combined — unlike the group's media storefronts, this source really does honour both at once (measured: `jacke` 170,726 -> 33,641 inside men's clothing -> 13,135 inside men's jackets).","on_invalid":"reject","example":"nike jacke","aliases":["query","keyword","search","text","term"]},{"name":"category","type":"string","required":false,"description":"Browse one shelf of momox's own taxonomy, by the id the `categories` action lists. On `fashion` the id IS the structured token the shop puts in every product's `product_type` — `gender_female`, `gender_female.titlecat_clothing`, `gender_female.titlecat_clothing.maincat_outerwear.subcat_jacket_coat` — so every search row hands back its own shelf, parsed into gender / category / subcategory, ready to pass straight back in. On `books` the ids are hyphenated instead (`books`, `books-fiction`, `books-english-books`) and a product can sit in several at once. An id that does not exist returns 0 items with HTTP 200 at the source, so the id is checked against the live tree and a typo comes back as NOT_FOUND.","on_invalid":"reject","example":"gender_female.titlecat_clothing.maincat_outerwear","aliases":["group","group_id","shelf","taxonomy"]},{"name":"filters","type":"object","required":false,"description":"Narrow the result with momox's own facets, as {filter: value} or {filter: [values]}. `fashion` offers size, brand, color, condition, material, length, fit, neckline, sleeve_length, pattern, closure, fabric_texture, details and heel_height; `books` offers condition, creator, format, platform, language, medium and in_stock. Several values of one filter are a UNION (size [INT M, INT L] returned 77,358 against 55,466 and 77,358 is not their sum) and two different filters are an INTERSECTION (size INT M + brand Nike = 151). Use `facets` to see every value the source offers with its own item count, because the vocabulary is the source's own: sizes are spelled `INT M`, `EU 38`, `W35`, colours as a family (`Black`, `Multi`), materials in English (`Cotton`, `No label`). Values are matched CASE-SENSITIVELY at the source (`nike` returned 0 items and `Nike` 475, both HTTP 200), so each one sent is checked against the source's own echo of what it applied and anything it did not apply is reported in `meta.filters_not_applied` instead of passing as a successful narrowing.","on_invalid":"reject","example":{"size":"INT M","brand":"Nike","condition":"like_new"},"aliases":["filter","facets","narrow"]},{"name":"brand","type":"array","required":false,"description":"Shortcut for the `brand` facet (fashion) or the publisher/label `creator` search (books). momox's own counts for the keyword `jacke` on 2026-10-08: Nike 475 out of 170,726, chosen from the 1,848 brand values the source offered for that one keyword. Case-sensitive at the source and checked against its echo.","on_invalid":"reject","example":["Nike"],"aliases":["brands","vendor","label","marke"]},{"name":"size","type":"array","required":false,"description":"Shortcut for the `size` facet — fashion only. The source's own vocabulary has 187 values for the keyword `jacke` and 137 for `nike`, and it mixes alphabets on purpose: `INT XS`…`INT 7XL` and `INT uni` for letter sizes, `EU 104`…`EU 122/128` for children's and continental sizes, `W35` with a separate `length` for jeans. momox's own counts over the keyword `jacke`: INT S 5,410, INT M 5,102, INT XS 2,509, INT L 2,276, INT XL 1,103. Note that a search ROW publishes the garment's own label (`L`, `EU 38`, `W35`) while the FILTER takes the prefixed form — two alphabets for the same thing, which is why `facets` is the place to read the filter values from.","on_invalid":"reject","example":["INT M"],"aliases":["sizes","groesse","größe"]},{"name":"color","type":"array","required":false,"description":"Shortcut for the `color` facet — fashion only, and it is the colour FAMILY, momox's own grouping: Black, Multi, Gray, Blue, Brown, White, Green, Red, Beige, Pink, Purple, Yellow, Orange, Gold, Silver, Turquoise. Each row also returns the garment's exact shade in `color` (`Navy blue`, `Cream white`) beside the family.","on_invalid":"reject","example":["Black"],"aliases":["colors","colour","colours","farbe"]},{"name":"condition","type":"array","required":false,"description":"Keep only these condition grades, momox's own grading of the item it bought. `fashion` has three (like_new, very_good, good) and `books` four (like_new, very_good, good, acceptable). The two shops spell them differently in their own index — `very good` against `Very good` — so the grade is written here in one stable form and translated to the storefront's spelling before it is sent. momox's own counts for `jacke`: very good 100,895, like new 68,528, good 27; for `harry potter` on books: Good 1,192, Very good 962, Acceptable 446, Like new 95.","on_invalid":"reject","example":["like_new"],"aliases":["conditions","grade","grades","zustand"]},{"name":"material","type":"array","required":false,"description":"Shortcut for the `material` facet — fashion only, in the source's English spelling (Cotton, Synthetic, Spandex, Viscose, Wool, Leather, Linen, Silk, Down, and `No label` for a garment whose care label is missing, which momox publishes honestly rather than guessing). momox's own counts for `jacke`: Synthetic 11,848, No label 11,580, Cotton 6,237, Spandex 4,438.","on_invalid":"reject","example":["Cotton"],"aliases":["materials","fabric","stoff"]},{"name":"medium","type":"array","required":false,"description":"Shortcut for the `medium` facet — books only. The shop is not books alone: momox's own counts for `harry potter` were Video Game 416, DVD 358, Blu-ray 258, CD 194 beside the books, and the live feed over 1,000 products was 161 book / 50 cd / 28 dvd / 9 game / 2 software per 250. Combine with `platform` for a console shelf.","on_invalid":"reject","example":["DVD"],"aliases":["media","physical_medium","medientyp"]},{"name":"language","type":"array","required":false,"description":"Shortcut for the `language` facet — books only, in the source's own English names. momox's own counts for `harry potter`: English 1,519, German 798, French 572, Italian 355.","on_invalid":"reject","example":["English"],"aliases":["languages","lang","sprache"]},{"name":"creator","type":"array","required":false,"description":"Shortcut for the `creator` facet — books only. One shelf covers every role: author, artist, director, narrator and developer all land in it, and each row returns the full cast with its role in `creators[]`. The source's own spelling is surname-first (`Rowling, J. K.`, 1,417 items) and it is case-sensitive, so read the exact value from `facets` first.","on_invalid":"reject","example":["Rowling, J. K."],"aliases":["creators","author","authors","artist","director"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"Keep only items momox can ship today. This is a real filter on `books`, where the index publishes an in-stock flag and 1,762 of the 4,403 `harry potter` matches were in stock. On `fashion` the index publishes no such flag at all: every garment is one of one and a sold one appears to leave the index (12 of 12 rows cross-checked against the live shop were buyable), so the flag is not claimed there — asking for it on `fashion` is reported in `meta.warnings` rather than pretended.","on_invalid":"reject","default":false,"example":true,"aliases":["in_stock","available_only","availability"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in EUR MAJOR units (10 = EUR 10.00, not 1000). Sent to the source as its own price-range filter, so the narrowing is momox's, not ours (measured: 10-20 EUR cut the keyword `jacke` from 170,726 to 25,274). Live fashion prices ran EUR 5.99 to 740.90.","on_invalid":"reject","example":10,"minimum":0,"aliases":["minPrice","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price, same units as `min_price`. Combine the two for a band. The source takes a bounded range, so giving only one side still works — the other end is left open.","on_invalid":"reject","example":20,"minimum":0,"aliases":["maxPrice","price_max"]},{"name":"sort","type":"enum","required":false,"description":"Row order, applied by the source itself. Measured on fashion: `price_asc` opened at 5.99 and `price_desc` at 740.90, 726.90, 522.90. Each storefront offers a different set and the source SWALLOWS a sort it does not know — `sort_by=zzz` answered HTTP 200 with the unchanged relevance order — so a sort the chosen storefront does not offer is rejected here with the list it does offer instead of being sent and quietly ignored.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the storefront's own order (the default)"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"newest","label":"newest in the shop first — fashion only"},{"value":"on_sale","label":"reduced items first — fashion only"},{"value":"title_asc","label":"A-Z by title — books only"},{"value":"title_desc","label":"Z-A by title — books only"}],"default":"relevance","example":"price_asc","aliases":["sort_by","order","sorting"]},{"name":"limit","type":"integer","required":false,"description":"How many rows to return, 1-200. 200 is the source's own ceiling, not ours: it answers 250 with HTTP 400 and the reason. One call is one upstream request at any size.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":200,"aliases":["per_page","page_size","count","num"]},{"name":"page","type":"integer","required":false,"description":"Which page of `limit` rows to return, 1-based. The source's reachable window is 10,000 rows however many items matched: at 24 rows a page, page 417 returned its last 16 rows, page 418 returned 0 and an offset of 10,000 returned 0 — it ends honestly instead of repeating the last page. `meta.total_matched` is the real match count (uncapped) and `meta.total_window` is what is reachable, so narrow with `filters` or `category` rather than paging past the window.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000,"aliases":["p","pageNumber"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on either storefront: momox is the only seller, it owns every item it lists, and no customer, reviewer or third-party seller is published anywhere.","on_invalid":"reject","default":false}],"returns":"items[]{fashion: handle, title, url, garment_id (the item's own UUID), product_id, variant_id, brand, gender, category{token, gender, title_category, main_category, sub_category, ancestors[]}, size, length[], color[], color_family[], material[], material_localised[], condition, condition_rank, features[], currency, price, price_minor, in_stock, image_url, detail_params{storefront, handle} | books: handle, title, url, barcode, isbn13, offer_id, product_id, variant_id, condition, condition_rank, condition_label, binding, media_type, creators[]{name, role, primary}, creators_flat[], group_ids[], in_stock, currency, price, price_minor, reference_price, discount_vs_reference_pct, image_url, detail_params{storefront, handle}} + facets[]{filter, source_facet, label, type, value_count, values[]{value, label, item_count, selected}} + seller{} + meta{storefront, q, category, total_matched, total_window, returned, page, limit, has_more, price_range{min,max}, filters_applied{}, filters_not_applied[], sort, source}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"storefront":"fashion","q":"jacke","brand":["Nike"],"sort":"price_asc","limit":25}},{"name":"detail","description":"Everything one item publishes. The complete offer table straight from the shop's own product endpoint: on books one offer per condition grade with its own price and its own stock (ISBN 9782070584925 publishes four — like new 7.49 sold out, very good 5.79, good 4.01, acceptable 3.99 — and all 12 titles measured published more than one), on fashion the single offer behind the single garment, which is all there is: 12 of 12 garments measured carried exactly one. `price_min`, `price_min_available` and a per-grade price table are all returned, because the cheapest grade is sometimes the sold-out one. On fashion the item's page is read as well for the things only it carries — momox's OWN measurements of that garment in centimetres, its exact colour, its material list, its feature list, its condition grade in momox's words and its article number. The page's schema.org block is read as an independent price witness on both storefronts and any disagreement is reported in `meta.schema_org_cross_check` rather than hidden: it agreed with the live price on 12 of 12 garments, and on books it quotes the storefront's DEFAULT grade, which was the cheapest published offer on only 3 of 12 titles — a third number with a third meaning, explained instead of flattened. Reachable by handle, by a full product URL, or on books by ISBN-13, ISBN-10 or EAN. An unknown handle is NOT_FOUND.","required_params":[],"optional_params":["storefront","handle","isbn","include_attributes"],"params":[{"name":"storefront","type":"enum","required":false,"description":"Which momox storefront to read. The two shops run the same platform (Shopify plus a Constructor.io search index) but hold different things and spell their own filter values differently — `fashion` grades an item `very good` and `books` grades it `Very good`, and the source answers the wrong spelling with 0 results and HTTP 200 rather than an error. Every value sent here is therefore folded to the storefront's own spelling and checked against the source's own echo. Filters that one shop does not offer are rejected with the list it does offer, never silently ignored.","on_invalid":"reject","allowed_values":[{"value":"fashion","label":"www.momoxfashion.com — managed second-hand fashion, every garment one physical item that momox graded and measured itself (1,854,875 items indexed on 2026-10-08)"},{"value":"books","label":"www.momoxbooks.com — second-hand books, CDs, DVDs, video games and software keyed on ISBN-13/EAN, one offer per condition grade (12,130,377 items indexed on 2026-10-08)"}],"default":"fashion","example":"fashion","aliases":["shop","store","site","market"]},{"name":"handle","type":"string","required":false,"description":"Which item to open, by the storefront's own handle — the part of the URL after /products/. A full momoxfashion.com or momoxbooks.com product URL is also accepted and the handle is taken out of it. Every `search`, `suggest` and `latest` row returns it as `handle` and as ready-made `detail_params`. The handle is self-describing: on `fashion` it ends with the garment's own UUID and on `books` with the ISBN-13 or EAN, so `isbn` is an alternative way in. An unknown handle is NOT_FOUND (the source answers HTTP 404 for one).","on_invalid":"reject","example":"nike-madchen-jacke-oder-mantel-mehrfarbig-82c551ac-f7eb-462d-920e-b4ec26427a24","aliases":["product","product_handle","slug","url","id"]},{"name":"isbn","type":"string","required":false,"description":"Open a books item by its ISBN-13 or EAN instead of its handle — books only. The shop's own handle ends with exactly this number, but the slug in front of it is not derivable, so the code is resolved through momox's own index first and then read from the product itself (two requests). An ISBN-10 is converted to ISBN-13 before the lookup, and a code the shop has never carried is NOT_FOUND.","on_invalid":"reject","example":"9780747549550","aliases":["ean","barcode","isbn13","gtin"]},{"name":"include_attributes","type":"boolean","required":false,"description":"Also read the item's own page for the things only it publishes: on `fashion` momox's OWN MEASUREMENTS of the garment in centimetres (chest, shoulder, total length, waist, inseam — whichever apply to the garment class), its exact colour, its material list, its feature list and its condition grade in momox's words; on both storefronts the page's schema.org block, which is read as an independent price witness and reported in `meta.schema_org_cross_check`. It costs one extra request. Switch it off for the price and stock table alone.","on_invalid":"reject","default":true,"example":true,"aliases":["attributes","with_attributes","include_page"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on either storefront: momox is the only seller, it owns every item it lists, and no customer, reviewer or third-party seller is published anywhere.","on_invalid":"reject","default":false}],"returns":"product{storefront, handle, product_id, title, url, brand (fashion) / publisher (books), currency, price_min, price_max, price_min_available, price_max_available, compare_at_price, in_stock, offer_count, available_offer_count, option_names[], offers[]{variant_id, sku, barcode, price, price_minor, currency, compare_at_price, available, offer_status (buyable | sold_out | no_copy_in_stock | unpriced), requires_shipping, url + on books condition, condition_rank, condition_label}, image_url, image_count, images[], published_at, created_at, tags[], description + on fashion category{}, garment_id, unit_note, attributes{size, length, fit, color, condition, condition_rank, condition_label, material[], features[], item_number, measurements_cm{}, source_labels{}} + on books media_type, barcode, isbn13, grades_offered[], grades_available[], price_by_grade{}, price_by_grade_available{}} + seller{} + meta{storefront, handle, resolved_from, offer_count, available_offer_count, price_semantics, schema_org_cross_check{}, attributes_source}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"storefront":"books","isbn":"9780747549550"}},{"name":"facets","description":"momox's own inventory census: every value its search engine offers for a query or a shelf, with ITS OWN item count beside each one. This is how you learn the vocabulary before filtering, and it is the only honest source of it, because the source matches filter values case-sensitively and answers a mis-spelled one with 0 items and HTTP 200. Fashion publishes 14 facets plus price — 187 size values for the keyword `jacke`, 1,848 brands, colour family, condition, material, length, fit, neckline, sleeve length, pattern, closure, fabric texture, details, heel height — and books 7: condition, author/artist, format, platform, language, medium and in-stock. It is also a census in its own right: `jacke` reports like new 68,528 against very good 100,895 and good 27, which is momox's grading mix for jackets in one number.","required_params":[],"optional_params":["storefront","q","category","filters","min_price","max_price"],"params":[{"name":"storefront","type":"enum","required":false,"description":"Which momox storefront to read. The two shops run the same platform (Shopify plus a Constructor.io search index) but hold different things and spell their own filter values differently — `fashion` grades an item `very good` and `books` grades it `Very good`, and the source answers the wrong spelling with 0 results and HTTP 200 rather than an error. Every value sent here is therefore folded to the storefront's own spelling and checked against the source's own echo. Filters that one shop does not offer are rejected with the list it does offer, never silently ignored.","on_invalid":"reject","allowed_values":[{"value":"fashion","label":"www.momoxfashion.com — managed second-hand fashion, every garment one physical item that momox graded and measured itself (1,854,875 items indexed on 2026-10-08)"},{"value":"books","label":"www.momoxbooks.com — second-hand books, CDs, DVDs, video games and software keyed on ISBN-13/EAN, one offer per condition grade (12,130,377 items indexed on 2026-10-08)"}],"default":"fashion","example":"fashion","aliases":["shop","store","site","market"]},{"name":"q","type":"string","required":false,"description":"Free-text search, run by momox's own search engine — not by this API. On `fashion` it matches brand, garment type, colour and material: `nike jacke` returned 25,989 items and `jacke` alone 170,726 on 2026-10-08. On `books` it matches title, author and performer: `harry potter` returned 4,403. Leave it out to browse a shelf instead, with `category`. A keyword and a `category` can be combined — unlike the group's media storefronts, this source really does honour both at once (measured: `jacke` 170,726 -> 33,641 inside men's clothing -> 13,135 inside men's jackets).","on_invalid":"reject","example":"nike jacke","aliases":["query","keyword","search","text","term"]},{"name":"category","type":"string","required":false,"description":"Browse one shelf of momox's own taxonomy, by the id the `categories` action lists. On `fashion` the id IS the structured token the shop puts in every product's `product_type` — `gender_female`, `gender_female.titlecat_clothing`, `gender_female.titlecat_clothing.maincat_outerwear.subcat_jacket_coat` — so every search row hands back its own shelf, parsed into gender / category / subcategory, ready to pass straight back in. On `books` the ids are hyphenated instead (`books`, `books-fiction`, `books-english-books`) and a product can sit in several at once. An id that does not exist returns 0 items with HTTP 200 at the source, so the id is checked against the live tree and a typo comes back as NOT_FOUND.","on_invalid":"reject","example":"gender_female.titlecat_clothing.maincat_outerwear","aliases":["group","group_id","shelf","taxonomy"]},{"name":"filters","type":"object","required":false,"description":"Narrow the result with momox's own facets, as {filter: value} or {filter: [values]}. `fashion` offers size, brand, color, condition, material, length, fit, neckline, sleeve_length, pattern, closure, fabric_texture, details and heel_height; `books` offers condition, creator, format, platform, language, medium and in_stock. Several values of one filter are a UNION (size [INT M, INT L] returned 77,358 against 55,466 and 77,358 is not their sum) and two different filters are an INTERSECTION (size INT M + brand Nike = 151). Use `facets` to see every value the source offers with its own item count, because the vocabulary is the source's own: sizes are spelled `INT M`, `EU 38`, `W35`, colours as a family (`Black`, `Multi`), materials in English (`Cotton`, `No label`). Values are matched CASE-SENSITIVELY at the source (`nike` returned 0 items and `Nike` 475, both HTTP 200), so each one sent is checked against the source's own echo of what it applied and anything it did not apply is reported in `meta.filters_not_applied` instead of passing as a successful narrowing.","on_invalid":"reject","example":{"size":"INT M","brand":"Nike","condition":"like_new"},"aliases":["filter","facets","narrow"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in EUR MAJOR units (10 = EUR 10.00, not 1000). Sent to the source as its own price-range filter, so the narrowing is momox's, not ours (measured: 10-20 EUR cut the keyword `jacke` from 170,726 to 25,274). Live fashion prices ran EUR 5.99 to 740.90.","on_invalid":"reject","example":10,"minimum":0,"aliases":["minPrice","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price, same units as `min_price`. Combine the two for a band. The source takes a bounded range, so giving only one side still works — the other end is left open.","on_invalid":"reject","example":20,"minimum":0,"aliases":["maxPrice","price_max"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on either storefront: momox is the only seller, it owns every item it lists, and no customer, reviewer or third-party seller is published anywhere.","on_invalid":"reject","default":false}],"returns":"facets[]{filter, source_facet, label, type, value_count, values[]{value, label, item_count, selected}} + sorts[]{sort, source_sort, description} + seller{} + meta{storefront, q, category, total_matched, total_window, facet_count, value_count, filters_applied{}, filters_not_applied[], counts_are}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"storefront":"fashion","q":"jacke"}},{"name":"categories","description":"momox's whole category tree with its own item count on every node and the Shopify collection handle that serves it. On fashion the node id IS the structured token the shop stamps on every product, so the tree, the search filter and each row's own `category` field are one and the same vocabulary: All 1,854,875 -> Damen 1,515,748 -> Bekleidung 1,377,790 -> and down to Handtaschen 8,724. On books it is All 12,130,377 -> Books 10,460,867 -> Professional & Reference 4,385,001 and so on. Walk from any node with `root` and control the depth; depth 1 is the cheapest way to see the shape of the catalogue. These counts are the source's own index counts, not a live buyable count — the `collections` action's numbers are a different and less reliable thing, and both are labelled as what they are.","required_params":[],"optional_params":["storefront","root","depth"],"params":[{"name":"storefront","type":"enum","required":false,"description":"Which momox storefront to read. The two shops run the same platform (Shopify plus a Constructor.io search index) but hold different things and spell their own filter values differently — `fashion` grades an item `very good` and `books` grades it `Very good`, and the source answers the wrong spelling with 0 results and HTTP 200 rather than an error. Every value sent here is therefore folded to the storefront's own spelling and checked against the source's own echo. Filters that one shop does not offer are rejected with the list it does offer, never silently ignored.","on_invalid":"reject","allowed_values":[{"value":"fashion","label":"www.momoxfashion.com — managed second-hand fashion, every garment one physical item that momox graded and measured itself (1,854,875 items indexed on 2026-10-08)"},{"value":"books","label":"www.momoxbooks.com — second-hand books, CDs, DVDs, video games and software keyed on ISBN-13/EAN, one offer per condition grade (12,130,377 items indexed on 2026-10-08)"}],"default":"fashion","example":"fashion","aliases":["shop","store","site","market"]},{"name":"root","type":"string","required":false,"description":"Which node to walk from, by its id. The default `all` is the whole catalogue. Pass a gender (`gender_female`, 1,515,748 items) or any node the tree returns to get just that branch with its own counts.","on_invalid":"reject","default":"all","example":"gender_female","aliases":["from","parent","under","group"]},{"name":"depth","type":"integer","required":false,"description":"How deep into the category tree to walk, 1-4. The fashion tree is 4 levels (All -> gender -> clothing/accessories/shoes -> main category -> subcategory) and the books tree 3. Depth 1 is the top shelves alone with their item counts, which is the cheapest way to see the shape of the catalogue.","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":4,"aliases":["levels","max_depth"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on either storefront: momox is the only seller, it owns every item it lists, and no customer, reviewer or third-party seller is published anywhere.","on_invalid":"reject","default":false}],"returns":"tree{id, name, item_count, depth, collection_handle, position, child_count, children[]{same shape}, search_params{category}} + nodes[]{flattened, no children} + seller{} + meta{storefront, root, depth, node_count, total_items, counts_are}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"storefront":"fashion","depth":2}},{"name":"collections","description":"Every collection the Shopify storefront publishes, with handle, title, description, image and ready-made `feed_params`. This is the list of shelves the shop's own navigation uses, and the handles are what `latest` reads a feed from. The count the source attaches to each one is published as `products_count_claimed` and nothing else, because it is not a live number: momoxbooks publishes hundreds of `by-<artist>` collections whose count is 0, and the Shopify count includes products that can no longer be bought. Use `categories` for a count you can rely on, or `search` for the live match count.","required_params":[],"optional_params":["storefront","q","limit","page"],"params":[{"name":"storefront","type":"enum","required":false,"description":"Which momox storefront to read. The two shops run the same platform (Shopify plus a Constructor.io search index) but hold different things and spell their own filter values differently — `fashion` grades an item `very good` and `books` grades it `Very good`, and the source answers the wrong spelling with 0 results and HTTP 200 rather than an error. Every value sent here is therefore folded to the storefront's own spelling and checked against the source's own echo. Filters that one shop does not offer are rejected with the list it does offer, never silently ignored.","on_invalid":"reject","allowed_values":[{"value":"fashion","label":"www.momoxfashion.com — managed second-hand fashion, every garment one physical item that momox graded and measured itself (1,854,875 items indexed on 2026-10-08)"},{"value":"books","label":"www.momoxbooks.com — second-hand books, CDs, DVDs, video games and software keyed on ISBN-13/EAN, one offer per condition grade (12,130,377 items indexed on 2026-10-08)"}],"default":"fashion","example":"fashion","aliases":["shop","store","site","market"]},{"name":"q","type":"string","required":false,"description":"Keep only collections whose handle, title or description contains this text (case-insensitive). Applied by this API over the list the source returned.","on_invalid":"reject","example":"damen","aliases":["query","keyword","search"]},{"name":"limit","type":"integer","required":false,"description":"How many collections to return, 1-250 — the source's own page size.","on_invalid":"reject","default":250,"example":250,"minimum":1,"maximum":250,"aliases":["per_page","count"]},{"name":"page","type":"integer","required":false,"description":"Which page of the collection list to read. momoxbooks publishes hundreds of `by-<artist>` collections, so paging matters there.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":40,"aliases":["p"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on either storefront: momox is the only seller, it owns every item it lists, and no customer, reviewer or third-party seller is published anywhere.","on_invalid":"reject","default":false}],"returns":"collections[]{handle, title, collection_id, url, description, products_count_claimed, published_at, updated_at, image_url, feed_params{}} + seller{} + meta{storefront, returned, matched, source_page_size, has_more, products_count_claimed_warning}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"storefront":"fashion","q":"damen","limit":250}},{"name":"latest","description":"The shop's live product feed, newest first, straight from its own catalogue endpoint — 250 items per request with the authoritative price, the crossed-out price where there is a real one, the stock flag and every image. This is the surface that settles the price question: 2,000 of 2,000 fashion rows measured carried a real price, while 1,992 of them carried `compare_at_price` as the string \"0.00\" (dropped to null here), and on books the 105 of 1,017 variants whose price is \"0.00\" are exactly the ones with no copy in stock, published as `offer_status: no_copy_in_stock` and a null price rather than as a free book. Use it to watch what momox listed today — page 1 was published the same morning it was measured — or to read one Shopify collection's feed. Note that this endpoint honours only `limit` and `page`: every filter and sort parameter it advertises was measured returning the identical 50 product ids in the identical order, so all real searching belongs in `search`.","required_params":[],"optional_params":["storefront","collection","limit","page"],"params":[{"name":"storefront","type":"enum","required":false,"description":"Which momox storefront to read. The two shops run the same platform (Shopify plus a Constructor.io search index) but hold different things and spell their own filter values differently — `fashion` grades an item `very good` and `books` grades it `Very good`, and the source answers the wrong spelling with 0 results and HTTP 200 rather than an error. Every value sent here is therefore folded to the storefront's own spelling and checked against the source's own echo. Filters that one shop does not offer are rejected with the list it does offer, never silently ignored.","on_invalid":"reject","allowed_values":[{"value":"fashion","label":"www.momoxfashion.com — managed second-hand fashion, every garment one physical item that momox graded and measured itself (1,854,875 items indexed on 2026-10-08)"},{"value":"books","label":"www.momoxbooks.com — second-hand books, CDs, DVDs, video games and software keyed on ISBN-13/EAN, one offer per condition grade (12,130,377 items indexed on 2026-10-08)"}],"default":"fashion","example":"fashion","aliases":["shop","store","site","market"]},{"name":"collection","type":"string","required":false,"description":"Read one Shopify collection's feed instead of the whole shop. The `collections` action lists the handles and every `categories` node carries the handle of the collection that serves it. A handle that does not exist is NOT_FOUND — the catalogue endpoint answers one with an empty list and HTTP 200, exactly like a real but empty collection, so it is checked against /collections/<handle>.json separately.","on_invalid":"reject","example":"damen-jacken-maentel","aliases":["collection_handle","shelf","category"]},{"name":"limit","type":"integer","required":false,"description":"How many products to return, 1-250 — 250 is the source's own clamp (it answers limit=300 with the same 250 rows).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["per_page","page_size","count"]},{"name":"page","type":"integer","required":false,"description":"Which page of the feed, 1-based, passed straight to the source. The feed is newest first: on 2026-10-08 page 1 was published that same morning and pages 2-8 the previous day, so a few pages are a precise 'what arrived today'.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000,"aliases":["p"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on either storefront: momox is the only seller, it owns every item it lists, and no customer, reviewer or third-party seller is published anywhere.","on_invalid":"reject","default":false}],"returns":"products[]{handle, product_id, title, url, brand (fashion) / publisher (books), currency, price_min, price_max, price_min_available, compare_at_price, in_stock, offer_count, available_offer_count, offers[], image_url, image_count, tags[], published_at, updated_at, detail_params{} + fashion: category{}, garment_id + books: media_type, barcode, isbn13, description, grades_offered[]} + seller{} + meta{storefront, collection, returned, page, limit, has_more, price_range{min,max}, zero_price_rows, compare_at_zero_rows, filtering}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"storefront":"fashion","limit":50}},{"name":"suggest","description":"The storefront's own autocomplete: what momox suggests as you type. Returns both the suggested SEARCH TERMS (`nike` -> `nike damen`), each with ready-made `search_params`, and the matching ITEMS in full — on fashion already carrying price, condition, exact colour, material, size and the taxonomy token, so a single cheap request answers 'what does momox have for this phrase' without a full search. One upstream request, no wall in front of it.","required_params":["q"],"optional_params":["storefront","limit"],"params":[{"name":"storefront","type":"enum","required":false,"description":"Which momox storefront to read. The two shops run the same platform (Shopify plus a Constructor.io search index) but hold different things and spell their own filter values differently — `fashion` grades an item `very good` and `books` grades it `Very good`, and the source answers the wrong spelling with 0 results and HTTP 200 rather than an error. Every value sent here is therefore folded to the storefront's own spelling and checked against the source's own echo. Filters that one shop does not offer are rejected with the list it does offer, never silently ignored.","on_invalid":"reject","allowed_values":[{"value":"fashion","label":"www.momoxfashion.com — managed second-hand fashion, every garment one physical item that momox graded and measured itself (1,854,875 items indexed on 2026-10-08)"},{"value":"books","label":"www.momoxbooks.com — second-hand books, CDs, DVDs, video games and software keyed on ISBN-13/EAN, one offer per condition grade (12,130,377 items indexed on 2026-10-08)"}],"default":"fashion","example":"fashion","aliases":["shop","store","site","market"]},{"name":"q","type":"string","required":false,"description":"Free-text search, run by momox's own search engine — not by this API. On `fashion` it matches brand, garment type, colour and material: `nike jacke` returned 25,989 items and `jacke` alone 170,726 on 2026-10-08. On `books` it matches title, author and performer: `harry potter` returned 4,403. Leave it out to browse a shelf instead, with `category`. A keyword and a `category` can be combined — unlike the group's media storefronts, this source really does honour both at once (measured: `jacke` 170,726 -> 33,641 inside men's clothing -> 13,135 inside men's jackets).","on_invalid":"reject","example":"nike jacke","aliases":["query","keyword","search","text","term"]},{"name":"limit","type":"integer","required":false,"description":"How many items per section, 1-20.","on_invalid":"reject","default":8,"example":8,"minimum":1,"maximum":20,"aliases":["num_results","count","per_section"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on either storefront: momox is the only seller, it owns every item it lists, and no customer, reviewer or third-party seller is published anywhere.","on_invalid":"reject","default":false}],"returns":"sections[]{section, count, items[]{a search-term row {term, matched_terms[], search_params{q}} or a full item row as `search` returns}} + seller{} + meta{storefront, q, section_count, item_count, term_count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"storefront":"fashion","q":"nike","limit":6}}]},{"name":"monoprix","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Monoprix groceries","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/monoprix/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Monoprix online grocery catalogue (EUR). Monoprix courses en ligne, France.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search text, up to 100 characters.","on_invalid":"reject","example":"lait","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Products requested per page, 1-48. The source can return fewer (duplicate rows across its groups are dropped).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page of the same call (same query, filters and location).","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the facets[id=brands] list of a previous answer.","on_invalid":"reject","example":"Monoprix"},{"name":"on_offer","type":"boolean","required":false,"description":"Only products with a source promotion when true.","on_invalid":"reject","default":false},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Monoprix follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (France) and says store_defaulted=true.","on_invalid":"reject","example":48.8566},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":2.3522},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"75001"}],"returns":"Products with EUR shelf price, unit price, promotions, availability, brand, pack size, image and url; facets; next_cursor; location (region used, store_defaulted).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"lait","limit":24}},{"name":"category","description":"Browse one Monoprix category by its id from categories.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"Category UUID from the categories action.","on_invalid":"reject","example":"40f80e30-17a8-4c14-8786-cd8905a60f04"},{"name":"limit","type":"integer","required":false,"description":"Products requested per page, 1-48. The source can return fewer (duplicate rows across its groups are dropped).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page of the same call (same query, filters and location).","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the facets[id=brands] list of a previous answer.","on_invalid":"reject","example":"Monoprix"},{"name":"on_offer","type":"boolean","required":false,"description":"Only products with a source promotion when true.","on_invalid":"reject","default":false},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Monoprix follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (France) and says store_defaulted=true.","on_invalid":"reject","example":48.8566},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":2.3522},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"75001"}],"returns":"Same product rows as search, plus the source category product count.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"40f80e30-17a8-4c14-8786-cd8905a60f04"}},{"name":"product","description":"Full Monoprix product sheet: description, ingredients, allergens, nutrition table, every label field, all images, promotions with terms.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Product id from search (`id`), or a courses.monoprix.fr product URL.","on_invalid":"reject","example":"MPX_6600978","aliases":["product_id","url"]},{"name":"latitude","type":"number","required":false,"description":"Delivery location latitude. Prices and assortment on Monoprix follow the region that serves this point; give latitude and longitude together. Without them the answer uses the site default region (France) and says store_defaulted=true.","on_invalid":"reject","example":48.8566},{"name":"longitude","type":"number","required":false,"description":"Delivery location longitude (with latitude).","on_invalid":"reject","example":2.3522},{"name":"postal_code","type":"string","required":false,"description":"Postal code of that location (optional, passed to the site with the coordinates).","on_invalid":"reject","example":"75001"}],"returns":"The search row fields plus description, fields, ingredients, allergens, nutrition, breadcrumbs, images and gtin (only when the label prints an EAN).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"MPX_6600978"}},{"name":"categories","description":"Monoprix category tree (top level and one child level) with the ids the category action takes.","required_params":[],"optional_params":[],"params":[],"returns":"Category tree: id, name, retailer_category_id, children.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"morrisons","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Morrisons UK Groceries","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/morrisons/v1","spec_available":true,"actions":[{"name":"search","description":"Search the anonymous UK online grocery assortment. No location-specific stock; GTIN/EAN is unavailable on the measured source.","required_params":["query"],"optional_params":["limit","cursor"],"params":[{"name":"query","type":"string","required":true,"description":"Product search text, at most 50 characters.","on_invalid":"reject","example":"cheese","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Products per source page, clamped to 1–48. Featured groups are preserved.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"Opaque next_cursor from the same query or category, valid for up to five minutes. Omit for the first page.","on_invalid":"reject"}],"returns":"products with current GBP shelf price, unit price, availability, More Card offers and member price when a single-item amount is published; next_cursor, has_more; total is null because the search source does not publish a total.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"cheese","limit":24}},{"name":"product/detail","description":"Resolve a retailer product id to full public grocery detail.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Retailer id returned by search, or its groceries.morrisons.com product URL. This is not a barcode.","on_invalid":"reject","example":"111052591","aliases":["product_id","url"]}],"returns":"Product plus description, all named label fields, nutrition rows, images, breadcrumbs and promotion terms. Member multibuy is text rather than a single-item price. No GTIN/EAN.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"111052591"}},{"name":"category","description":"List a category from categories; follow next_cursor for subsequent pages.","required_params":["category_id"],"optional_params":["limit","cursor"],"params":[{"name":"category_id","type":"string","required":true,"description":"UUID from categories. Use that UUID rather than retailer_category_id.","on_invalid":"reject","example":"5998e059-ce69-48d4-b0db-2f773459dcdf"},{"name":"limit","type":"integer","required":false,"description":"Products per source page, clamped to 1–48. Featured groups are preserved.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"Opaque next_cursor from the same query or category, valid for up to five minutes. Omit for the first page.","on_invalid":"reject"}],"returns":"products, category, source category productCount as total, next_cursor and has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"5998e059-ce69-48d4-b0db-2f773459dcdf"}},{"name":"categories","description":"Read the source top-level categories and one child level.","required_params":[],"optional_params":[],"params":[],"returns":"Category tree with UUID id, retailer_category_id, name and children. Undecorated zero product counts are omitted.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"moteur-ma","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Moteur.ma Morocco Cars","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/moteur-ma/v1","spec_available":true,"actions":[{"name":"search","description":"Search used cars for sale in Morocco on Moteur.ma (≈123,000 live ads): make, model, city, fuel, gearbox, body type, colour, price, year and mileage filters, 30 ads per page, newest first as the site orders them. Nothing is required: no parameters browses the whole used-car catalogue.","required_params":[],"optional_params":["brand","model","city","fuel","gearbox","body_type","color","price_min","price_max","year_min","year_max","mileage_max","page","include_pii"],"params":[{"name":"brand","type":"string","required":false,"description":"Make slug as Moteur.ma writes it: `dacia`, `renault`, `mercedes-benz`, `land-rover`. Full list with model slugs: the `makes` action.","on_invalid":"reject","example":"dacia","aliases":["make"]},{"name":"model","type":"string","required":false,"description":"Model slug inside `brand`, e.g. `logan`, `clio`, `classe-c`. Requires brand.","on_invalid":"reject","example":"logan"},{"name":"city","type":"string","required":false,"description":"Moroccan city as the site lists it (Casablanca, Rabat, Marrakech, Tanger, Fes, Agadir …, 111 values including `Autre`). Case and accents are optional.","on_invalid":"reject","example":"Casablanca","aliases":["ville"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel (Carburant).","on_invalid":"reject","allowed_values":[{"value":"Essence","label":"Essence"},{"value":"Diesel","label":"Diesel"},{"value":"Électrique","label":"Électrique"},{"value":"Hybride","label":"Hybride"},{"value":"Hybride rechargeable","label":"Hybride rechargeable"}],"example":"Diesel"},{"name":"gearbox","type":"enum","required":false,"description":"Gearbox (Boîte).","on_invalid":"reject","allowed_values":[{"value":"Manuelle","label":"Manuelle"},{"value":"Automatique","label":"Automatique"},{"value":"Semi-automatique","label":"Semi-automatique"}],"example":"Automatique","aliases":["transmission"]},{"name":"body_type","type":"enum","required":false,"description":"Body type (Carrosserie).","on_invalid":"reject","allowed_values":[{"value":"Cabriolet","label":"Cabriolet"},{"value":"SUV et 4x4","label":"SUV et 4x4"},{"value":"Coupé","label":"Coupé"},{"value":"Citadine","label":"Citadine"},{"value":"Break","label":"Break"},{"value":"Monospace","label":"Monospace"},{"value":"Berline","label":"Berline"},{"value":"CC","label":"CC"},{"value":"Micro-citadine","label":"Micro-citadine"},{"value":"Compact","label":"Compact"},{"value":"Crossover","label":"Crossover"},{"value":"Pick up","label":"Pick up"},{"value":"Utilitaire (Minivan)","label":"Utilitaire (Minivan)"},{"value":"Utilitaire (Van)","label":"Utilitaire (Van)"}],"example":"SUV et 4x4"},{"name":"color","type":"enum","required":false,"description":"Colour (Couleur).","on_invalid":"reject","allowed_values":[{"value":"Argent","label":"Argent"},{"value":"Beige","label":"Beige"},{"value":"Blanc","label":"Blanc"},{"value":"Blanc cassé","label":"Blanc cassé"},{"value":"Bleu","label":"Bleu"},{"value":"Bleu clair","label":"Bleu clair"},{"value":"Bleu marine","label":"Bleu marine"},{"value":"Bordeaux","label":"Bordeaux"},{"value":"Gris","label":"Gris"},{"value":"Gris clair","label":"Gris clair"},{"value":"Gris fonce","label":"Gris fonce"},{"value":"Gris anthracite","label":"Gris anthracite"},{"value":"Ivoire","label":"Ivoire"},{"value":"Jaune","label":"Jaune"},{"value":"Marron","label":"Marron"},{"value":"Marron clair","label":"Marron clair"},{"value":"Noir","label":"Noir"},{"value":"Or","label":"Or"},{"value":"Orange","label":"Orange"},{"value":"Rouge","label":"Rouge"},{"value":"Rouge fonce","label":"Rouge fonce"},{"value":"Rose","label":"Rose"},{"value":"Tuning","label":"Tuning"},{"value":"Vert","label":"Vert"},{"value":"Vert fonce","label":"Vert fonce"},{"value":"Violet","label":"Violet"},{"value":"Autre","label":"Autre"}],"example":"Noir"},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in Moroccan dirhams (MAD).","on_invalid":"reject","example":100000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in MAD. The site also keeps ads with no published price (\"Appeler pour le prix\") under a price ceiling.","on_invalid":"reject","example":150000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Model year from.","on_invalid":"reject","example":2018,"minimum":1900},{"name":"year_max","type":"integer","required":false,"description":"Model year up to.","on_invalid":"reject","example":2023,"minimum":1900},{"name":"mileage_max","type":"integer","required":false,"description":"Maximum mileage in km.","on_invalid":"reject","example":100000,"minimum":0},{"name":"page","type":"integer","required":false,"description":"1-based page, 30 ads per page. Every page up to `last_page` is reachable (measured: page 4,102 of the full 123,059-ad catalogue).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. The ad's contact phone and the seller name are returned exactly as the page publishes them.","on_invalid":"reject","default":true,"example":true}],"returns":"{total, page, page_size, last_page, has_more, filters_applied, listings[]}. Each listing: id, url, title, price_mad (null when the ad says \"Appeler pour le prix\"), price_label, currency MAD, city, published_at (site local time), year, gearbox, fuel, mileage_km, description_snippet, image.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"dacia","model":"logan","fuel":"Diesel"}},{"name":"listing","description":"One used-car ad in full: price, make, model, year, mileage, fuel, gearbox, body, colour, doors, fiscal power, the seller's description, history flags (first owner, accident history, imported new, customs), equipment options, every photo, view count, the contact phone / WhatsApp link and the seller block (private or dealer name, logo, member since, city). Either `id` or `url`.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"Numeric Moteur.ma ad id, as returned by `search`.","on_invalid":"reject","example":"491804","aliases":["ad_id","listing_id"]},{"name":"url","type":"string","required":false,"description":"Or the ad URL (…/detail-annonce/<id>/<slug>.html).","on_invalid":"reject","example":"https://www.moteur.ma/fr/voiture/achat-voiture-occasion/detail-annonce/491804/fiat-500-c.html"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. The ad's contact phone and the seller name are returned exactly as the page publishes them.","on_invalid":"reject","default":true,"example":true}],"returns":"{id, url, title, price_mad, price_label, currency, category, city, published_date, views, brand, model, year, mileage_km, fuel, gearbox, body_type, color, doors, fiscal_power_cv, other_attributes, description, features{first_owner, tuned, accident_history, imported_new, customs_status}, options[], images[], images_count, is_boosted, phone, whatsapp_url, seller{name, type, member_since, avatar, city}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.moteur.ma/fr/voiture/achat-voiture-occasion/detail-annonce/491804/fiat-500-c.html"}},{"name":"makes","description":"Every make and model slug the used-car `search` accepts, straight from the site's own filter data.","required_params":[],"optional_params":["brand"],"params":[{"name":"brand","type":"string","required":false,"description":"Only this make slug and its models.","on_invalid":"reject","example":"dacia","aliases":["make"]}],"returns":"{make_count, makes[{id, name, slug, models[{id, name, slug}]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"renault"}},{"name":"new_catalog","description":"The new-car catalogue tree sold in Morocco: every make, its current models and every version id (feed them to `new_version`).","required_params":[],"optional_params":["brand"],"params":[{"name":"brand","type":"string","required":false,"description":"Only this make slug.","on_invalid":"reject","example":"toyota","aliases":["make"]}],"returns":"{brand_count, brands[{id, name, slug, models[{id, name, slug, image, versions[{id, name, slug}]}]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"dacia"}},{"name":"new_models","description":"A make's current new-car range in Morocco with the official \"from\" price (MAD) and number of versions of each model.","required_params":["brand"],"optional_params":[],"params":[{"name":"brand","type":"string","required":true,"description":"New-car make slug, e.g. `dacia`, `toyota`, `byd`, `mercedes-benz` (see `new_catalog`).","on_invalid":"reject","example":"dacia","aliases":["make"]}],"returns":"{brand, model_count, models[{slug, name, url, from_price_mad, versions_count, image}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"toyota"}},{"name":"new_versions","description":"Every version of one new model with its fuel, gearbox, fiscal power, horsepower and price — current price, list price and the promotion discount when one runs.","required_params":["brand","model"],"optional_params":[],"params":[{"name":"brand","type":"string","required":true,"description":"New-car make slug, e.g. `citroen`.","on_invalid":"reject","example":"citroen","aliases":["make"]},{"name":"model","type":"string","required":true,"description":"Model slug inside that make, e.g. `c3-aircross`.","on_invalid":"reject","example":"c3-aircross"}],"returns":"{brand, model, price_range_mad{min, max}, version_count, versions[{id, name, brand, brand_slug, model, model_slug, url, fuel, gearbox, fiscal_power_cv, power_hp, price_mad, list_price_mad, discount_mad, is_promo, image}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"dacia","model":"logan"}},{"name":"new_version","description":"One new-car version in full: showroom price, promotion discount and promo price, registration and other fees, on-the-road price, promo end date, and the whole technical sheet — power, torque, 0-100, top speed, consumption, dimensions, boot, weight, battery and range — plus every equipment line. Either `id` or `url`.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"Numeric version id, as returned by `new_versions` or `new_catalog`.","on_invalid":"reject","example":"4616","aliases":["version_id"]},{"name":"url","type":"string","required":false,"description":"Or the version page URL (…/<brand>/<model>/<slug>-<id>.html).","on_invalid":"reject","example":"https://www.moteur.ma/fr/neuf/voiture/citroen/c3-aircross/citroen-c3-aircross-12-puretech-110-max-bvm-4616.html"}],"returns":"{id, url, name, brand, model, version, year, body_type, fuel, gearbox, propulsion, doors, seats, power_hp, fiscal_power_cv, currency, showroom_price_mad, discount_mad, promo_price_mad, registration_fee_mad, other_fees_mad, on_the_road_price_mad, price_ld_json, price_mismatch, is_promo, promo_valid_until, image, photos_count, specs{section: {label: value|true|false}}, fiche_technique}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"4455"}}]},{"name":"motorist-sg","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Motorist.sg — Singapore used cars with COE, OMV, ARF, PARF and depreciation","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/motorist-sg/v1","spec_available":true,"actions":[{"name":"search","description":"Search Motorist.sg's used-vehicle listings in Singapore by keyword, category (PARF, COE-renewed, OPC, almost new…), vehicle type, asking price, annual depreciation, registration year, remaining COE, gearbox and fuel, with ten sort orders. Returns the source's own total and 50 rows per page with price, depreciation per year, COE left, owners, mileage and the selling dealer.","required_params":[],"optional_params":["query","category","vehicle_type","price_min","price_max","depreciation_min","depreciation_max","year_min","year_max","coe_left_months_min","coe_left_months_max","transmission","fuel","availability","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword matched by Motorist's own search (make, model or variant). Measured: `toyota` cuts the listing from 7,472 to 1,173 vehicles (sold included), `toyota corolla` to 127.","on_invalid":"reject","example":"toyota corolla","aliases":["q","keyword","keywords"]},{"name":"category","type":"enum","required":false,"description":"Singapore listing category: PARF cars, COE-renewed cars, almost-new, low mileage, first owner, continental makes, scrap/COE-renewable, or off-peak cars (OPC).","on_invalid":"reject","allowed_values":[{"value":"all","label":"All cars"},{"value":"parf","label":"PARF cars"},{"value":"coe_renewed","label":"COE-renewed cars"},{"value":"almost_new","label":"Almost new"},{"value":"low_mileage","label":"Low mileage"},{"value":"first_owner","label":"First owner"},{"value":"continental","label":"Continental makes"},{"value":"scrap_coe_renewable","label":"Scrap / COE renewable"},{"value":"opc","label":"Off-peak cars (OPC)"}],"default":"all","example":"parf"},{"name":"vehicle_type","type":"enum","required":false,"description":"Body or vehicle type. Several may be passed comma-separated.","on_invalid":"reject","allowed_values":[{"value":"luxury","label":"Luxury car"},{"value":"sedan","label":"Sedan"},{"value":"hatchback","label":"Hatchback"},{"value":"mpv","label":"MPV"},{"value":"suv","label":"SUV"},{"value":"sports","label":"Sports car"},{"value":"stationwagon","label":"Stationwagon"},{"value":"diesel","label":"Diesel car"},{"value":"hybrid","label":"Hybrid car"},{"value":"electric","label":"Electric car"},{"value":"truck","label":"Truck"},{"value":"pickup","label":"Pickup"},{"value":"van","label":"Van"},{"value":"bus","label":"Bus / mini bus"},{"value":"vintage","label":"Vintage car"}],"example":"suv","aliases":["body_type","type"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, SGD.","on_invalid":"reject","example":30000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price, SGD.","on_invalid":"reject","example":80000,"minimum":0},{"name":"depreciation_min","type":"integer","required":false,"description":"Lowest annual depreciation, SGD per year.","on_invalid":"reject","example":5000,"minimum":0},{"name":"depreciation_max","type":"integer","required":false,"description":"Highest annual depreciation, SGD per year.","on_invalid":"reject","example":12000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Lowest registration year, 4-digit year.","on_invalid":"reject","example":2018,"minimum":0},{"name":"year_max","type":"integer","required":false,"description":"Highest registration year, 4-digit year.","on_invalid":"reject","example":2024,"minimum":0},{"name":"coe_left_months_min","type":"integer","required":false,"description":"Lowest remaining COE, months.","on_invalid":"reject","example":36,"minimum":0},{"name":"coe_left_months_max","type":"integer","required":false,"description":"Highest remaining COE, months.","on_invalid":"reject","example":120,"minimum":0},{"name":"transmission","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Automatic"},{"value":"manual","label":"Manual"}],"example":"auto"},{"name":"fuel","type":"enum","required":false,"description":"Fuel type.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol"},{"value":"diesel","label":"Diesel"},{"value":"hybrid","label":"Hybrid"},{"value":"electric","label":"Electric"}],"example":"hybrid"},{"name":"availability","type":"enum","required":false,"description":"`available` (default) = cars still for sale; `sold` = sold listings (no price printed); `any` = both, which is what the website shows by default (7,472 = 2,692 available + 4,780 sold, measured).","on_invalid":"reject","allowed_values":[{"value":"available","label":"Still for sale"},{"value":"sold","label":"Sold"},{"value":"any","label":"Both"}],"default":"available","example":"available","aliases":["status"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"oldest","label":"oldest"},{"value":"reg_date_desc","label":"reg date desc"},{"value":"reg_date_asc","label":"reg date asc"},{"value":"price_desc","label":"price desc"},{"value":"price_asc","label":"price asc"},{"value":"depreciation_desc","label":"depreciation desc"},{"value":"depreciation_asc","label":"depreciation asc"},{"value":"mileage_desc","label":"mileage desc"},{"value":"mileage_asc","label":"mileage asc"}],"default":"newest","example":"price_asc","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Page number; 50 rows per page. `summary.has_more` says whether another page exists. A page past the last returns no rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"`{rows[], summary{total_results, page, rows_per_page, last_page, has_more, filters_applied, ads_dropped}}`. Each row: listing_id (the id `detail` takes), position (the source's own rank), url, title, status (available/sold), price_sgd, price_display, last_asking_price_sgd (sold rows), monthly_installment_sgd, depreciation_sgd_per_year, registration_date, coe_left + coe_left_months, manufacturing_year, owners, mileage_km, posted_on, ad_label (SPOTLIGHT AD / PREMIUM AD), featured, dealer {name, merchant_id, url}, description_snippet, photo_url.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"toyota","vehicle_type":"suv","sort":"price_asc"}},{"name":"detail","description":"The full listing of one vehicle by its `listing_id` (or URL): asking price, monthly instalment and its loan assumptions, depreciation per year, COE, OMV, ARF, minimum PARF, paper value, road tax, COE / PARF / road-tax expiry dates, registration date, owners, mileage, vehicle scheme, colour, gearbox, fuel, engine cc, power, the seller's notes (features, accessories, description), photos, view counts and the seller block (dealer name, address, phone and named sales contacts).","required_params":["listing_id"],"optional_params":["url"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Motorist listing id from a search row (`listing_id`), e.g. 57847. Digits only.","on_invalid":"reject","example":"57847","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Alternative to listing_id: the listing URL, e.g. https://www.motorist.sg/used-car/57847/audi-a3-sedan-1-0-tfsi-s-tronic-led","on_invalid":"reject","example":"https://www.motorist.sg/used-car/57847/audi-a3-sedan-1-0-tfsi-s-tronic-led","aliases":["listing_url","link"]}],"returns":"One vehicle: listing_id, url, title, make, model, status, price_sgd, price_display, ld_price_sgd, price_mismatch, monthly_installment_sgd, loan_assumptions{down_payment_pct, loan_pct, interest_rate_pct, tenure_months}, depreciation_sgd_per_year, coe_sgd, omv_sgd, arf_sgd, min_parf_sgd, paper_value_sgd, paper_value_as_of, road_tax_sgd_per_year, registration_date, coe_expiry_date, coe_left, coe_left_months, parf_expiry_date, road_tax_expiry_date, manufacturing_year, owners, mileage_km, vehicle_scheme, colour, transmission, fuel_type, engine_cc, power_kw, power_bhp, vehicle_attachment, specs{}, features, accessories, description, posted_on, updated_on, ad_label, views_total, views_last_24h, saved_by_others, photos[], seller{name, merchant_id, url, listings_url, address, sold_last_3_months, phone, contacts[]{name, phone}, star_dealer}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"57847"}}]},{"name":"movies-tv","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Movies & TV API — unified movie and TV metadata plus streaming availability: search, full details, cast and crew, seasons and episodes, discover/browse with filters, reviews, images, trailers, where-to-watch by region, charts and recommendations (TMDB, TVmaze, JustWatch)","version":"1.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/movies-tv/v1","spec_available":true,"actions":[{"name":"search","description":"search titles (type=multi|movie|tv|streaming)","required_params":["query"],"optional_params":["type","limit","year","country","page","language"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text title/person search keywords.","on_invalid":"reject","example":"breaking bad","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"Which catalog to search. tv also accepts 'show'/'series'.","on_invalid":"ignore","allowed_values":[{"value":"multi","label":"Movies + TV + people (default; TMDB or JustWatch)"},{"value":"movie","label":"Movies only (TMDB)"},{"value":"tv","label":"TV shows only (TVmaze)"},{"value":"streaming","label":"Where-to-watch results (JustWatch)"}],"default":"multi","example":"tv","aliases":["media_type"]},{"name":"limit","type":"integer","required":false,"description":"Max results to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"aliases":["first"]},{"name":"year","type":"integer","required":false,"description":"Release-year filter (movie search / streaming match).","on_invalid":"ignore","example":2010},{"name":"country","type":"string","required":false,"description":"JustWatch market — ISO-3166-1 alpha-2 (~140 supported). Controls streaming offers / services / new-titles region.","on_invalid":"ignore","default":"US","example":"US"},{"name":"page","type":"integer","required":false,"description":"TMDB result page (movie/multi search only).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"language","type":"string","required":false,"description":"Display locale for TMDB movie/multi search (e.g. de-DE, es-ES, ja-JP).","on_invalid":"ignore","example":"de-DE"}],"returns":"results[] (shape depends on type: title rows with ids {imdb,tmdb,tvmaze} + year/overview; streaming rows carry offers), query, type","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"breaking bad","type":"tv"}},{"name":"detail","description":"unified title detail (tv→TVmaze, movie→TMDB depth + JustWatch offers)","required_params":["id"],"optional_params":["type","id_type","country","include_streaming","language"],"params":[{"name":"id","type":"string","required":true,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"type","type":"enum","required":false,"description":"Whether the id/query is a movie or a TV show. Defaults to TV unless the id is a tmdb id or looks like a movie.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Treat the id as a movie (TMDB)"},{"value":"tv","label":"Treat the id as a TV show (TVmaze)"}],"example":"movie","aliases":["media_type"]},{"name":"id_type","type":"enum","required":false,"description":"How to interpret `id`. Auto-detected (imdb if it starts with 'tt', else tvmaze for TV / tmdb for movie) when omitted.","on_invalid":"ignore","allowed_values":[{"value":"tvmaze","label":"TVmaze numeric id"},{"value":"tmdb","label":"TMDB numeric id"},{"value":"imdb","label":"IMDb id (tt…)"}],"example":"imdb"},{"name":"country","type":"string","required":false,"description":"JustWatch market — ISO-3166-1 alpha-2 (~140 supported). Controls streaming offers / services / new-titles region.","on_invalid":"ignore","default":"US","example":"US"},{"name":"include_streaming","type":"boolean","required":false,"description":"Merge JustWatch where-to-watch offers into the detail record.","on_invalid":"ignore","default":true,"example":true},{"name":"language","type":"string","required":false,"description":"Display locale for movie titles/overview (TMDB; e.g. de-DE, fr-FR, ja-JP).","on_invalid":"ignore","example":"de-DE"}],"returns":"full title record: title, genres, overview, ids, ratings, cast/crew; movie adds runtime/budget/revenue; +streaming_offers when include_streaming","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"id":169,"type":"tv"}},{"name":"episodes","description":"TV episodes (optionally one season)","required_params":["id"],"optional_params":["id_type","season","specials"],"params":[{"name":"id","type":"string","required":true,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"id_type","type":"enum","required":false,"description":"How to interpret `id`. Auto-detected (imdb if it starts with 'tt', else tvmaze for TV / tmdb for movie) when omitted.","on_invalid":"ignore","allowed_values":[{"value":"tvmaze","label":"TVmaze numeric id"},{"value":"tmdb","label":"TMDB numeric id"},{"value":"imdb","label":"IMDb id (tt…)"}],"example":"imdb"},{"name":"season","type":"integer","required":false,"description":"Limit to one season number (omit for all).","on_invalid":"ignore","example":1},{"name":"specials","type":"boolean","required":false,"description":"Include special (non-numbered) episodes.","on_invalid":"ignore","default":false,"example":false}],"returns":"tvmaze_id, season, episodes[]{name, season, number, airdate, runtime}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":169,"type":"tv"}},{"name":"cast","description":"cast (tv→TVmaze, movie→TMDB)","required_params":["id"],"optional_params":["type","id_type"],"params":[{"name":"id","type":"string","required":true,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"type","type":"enum","required":false,"description":"Whether the id/query is a movie or a TV show. Defaults to TV unless the id is a tmdb id or looks like a movie.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Treat the id as a movie (TMDB)"},{"value":"tv","label":"Treat the id as a TV show (TVmaze)"}],"example":"movie","aliases":["media_type"]},{"name":"id_type","type":"enum","required":false,"description":"How to interpret `id`. Auto-detected (imdb if it starts with 'tt', else tvmaze for TV / tmdb for movie) when omitted.","on_invalid":"ignore","allowed_values":[{"value":"tvmaze","label":"TVmaze numeric id"},{"value":"tmdb","label":"TMDB numeric id"},{"value":"imdb","label":"IMDb id (tt…)"}],"example":"imdb"}],"returns":"cast[]{person, character, ...}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":169,"type":"tv"}},{"name":"crew","description":"crew (tv→TVmaze, movie→TMDB)","required_params":["id"],"optional_params":["type","id_type"],"params":[{"name":"id","type":"string","required":true,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"type","type":"enum","required":false,"description":"Whether the id/query is a movie or a TV show. Defaults to TV unless the id is a tmdb id or looks like a movie.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Treat the id as a movie (TMDB)"},{"value":"tv","label":"Treat the id as a TV show (TVmaze)"}],"example":"movie","aliases":["media_type"]},{"name":"id_type","type":"enum","required":false,"description":"How to interpret `id`. Auto-detected (imdb if it starts with 'tt', else tvmaze for TV / tmdb for movie) when omitted.","on_invalid":"ignore","allowed_values":[{"value":"tvmaze","label":"TVmaze numeric id"},{"value":"tmdb","label":"TMDB numeric id"},{"value":"imdb","label":"IMDb id (tt…)"}],"example":"imdb"}],"returns":"crew[]{person, department, job/type}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":169}},{"name":"akas","description":"alternative titles (tv→TVmaze, movie→TMDB)","required_params":["id"],"optional_params":["type","id_type"],"params":[{"name":"id","type":"string","required":true,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"type","type":"enum","required":false,"description":"Whether the id/query is a movie or a TV show. Defaults to TV unless the id is a tmdb id or looks like a movie.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Treat the id as a movie (TMDB)"},{"value":"tv","label":"Treat the id as a TV show (TVmaze)"}],"example":"movie","aliases":["media_type"]},{"name":"id_type","type":"enum","required":false,"description":"How to interpret `id`. Auto-detected (imdb if it starts with 'tt', else tvmaze for TV / tmdb for movie) when omitted.","on_invalid":"ignore","allowed_values":[{"value":"tvmaze","label":"TVmaze numeric id"},{"value":"tmdb","label":"TMDB numeric id"},{"value":"imdb","label":"IMDb id (tt…)"}],"example":"imdb"}],"returns":"akas[]{name, country/language}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"id":169,"type":"tv"}},{"name":"schedule","description":"TV broadcast (kind=tv) or streaming-premiere (kind=web) calendar","required_params":[],"optional_params":["country","date","kind"],"params":[{"name":"country","type":"string","required":false,"description":"JustWatch market — ISO-3166-1 alpha-2 (~140 supported). Controls streaming offers / services / new-titles region.","on_invalid":"ignore","default":"US","example":"US"},{"name":"date","type":"string","required":false,"description":"Date as YYYY-MM-DD.","on_invalid":"ignore","example":"2026-06-01"},{"name":"kind","type":"enum","required":false,"description":"Which calendar. Any non-web value is treated as the TV broadcast schedule.","on_invalid":"ignore","allowed_values":[{"value":"tv","label":"TV broadcast schedule (by country)"},{"value":"web","label":"Streaming-premiere calendar"},{"value":"streaming","label":"Alias of web"}],"default":"tv","example":"tv"}],"returns":"kind, date, airings[]{show.title, airdate/time, network}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","date":"2024-01-01"}},{"name":"streaming","description":"where-to-watch offers via JustWatch (query/node_id/imdb/tmdb)","required_params":[],"optional_params":["query","id","id_type","node_id","country","object_types","title","year"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text title/person search keywords.","on_invalid":"reject","example":"breaking bad","aliases":["q"]},{"name":"id","type":"string","required":false,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"id_type","type":"enum","required":false,"description":"How to interpret `id`. Auto-detected (imdb if it starts with 'tt', else tvmaze for TV / tmdb for movie) when omitted.","on_invalid":"ignore","allowed_values":[{"value":"tvmaze","label":"TVmaze numeric id"},{"value":"tmdb","label":"TMDB numeric id"},{"value":"imdb","label":"IMDb id (tt…)"}],"example":"imdb"},{"name":"node_id","type":"string","required":false,"description":"JustWatch node id (tm…/ts…) — fetches offers directly without a search.","on_invalid":"ignore","example":"tm12345"},{"name":"country","type":"string","required":false,"description":"JustWatch market — ISO-3166-1 alpha-2 (~140 supported). Controls streaming offers / services / new-titles region.","on_invalid":"ignore","default":"US","example":"US"},{"name":"object_types","type":"array","required":false,"description":"Restrict JustWatch results to these node types (MOVIE / SHOW).","on_invalid":"ignore","allowed_values":[{"value":"MOVIE","label":"Movies"},{"value":"SHOW","label":"TV shows"}],"example":["MOVIE","SHOW"]},{"name":"title","type":"string","required":false,"description":"Exact title to match when resolving by imdb/tmdb id.","on_invalid":"ignore","example":"Inception"},{"name":"year","type":"integer","required":false,"description":"Release-year filter (movie search / streaming match).","on_invalid":"ignore","example":2010}],"returns":"results[] (query path) OR one title with offers[]{provider, type, quality, price, url} (node/id path)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"inception","country":"US"}},{"name":"people","description":"person search or detail (tv→TVmaze, movie→TMDB)","required_params":[],"optional_params":["query","id","type"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text title/person search keywords.","on_invalid":"reject","example":"breaking bad","aliases":["q"]},{"name":"id","type":"string","required":false,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"type","type":"enum","required":false,"description":"Whether the id/query is a movie or a TV show. Defaults to TV unless the id is a tmdb id or looks like a movie.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Treat the id as a movie (TMDB)"},{"value":"tv","label":"Treat the id as a TV show (TVmaze)"}],"example":"movie","aliases":["media_type"]}],"returns":"people[] (search; needs query) OR one person record (needs id)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"breaking bad"}},{"name":"lookup","description":"cross-resolve imdb↔tmdb↔tvmaze ids","required_params":[],"optional_params":["imdb_id","tmdb_id","tvmaze_id","id","id_type","type"],"params":[{"name":"imdb_id","type":"string","required":false,"description":"IMDb id to resolve (tt…). Provide any ONE id.","on_invalid":"ignore","example":"tt0903747"},{"name":"tmdb_id","type":"integer","required":false,"description":"TMDB id to resolve.","on_invalid":"ignore","example":27205},{"name":"tvmaze_id","type":"integer","required":false,"description":"TVmaze id to resolve.","on_invalid":"ignore","example":169},{"name":"id","type":"string","required":false,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"id_type","type":"enum","required":false,"description":"How to interpret `id`. Auto-detected (imdb if it starts with 'tt', else tvmaze for TV / tmdb for movie) when omitted.","on_invalid":"ignore","allowed_values":[{"value":"tvmaze","label":"TVmaze numeric id"},{"value":"tmdb","label":"TMDB numeric id"},{"value":"imdb","label":"IMDb id (tt…)"}],"example":"imdb"},{"name":"type","type":"enum","required":false,"description":"Whether the id/query is a movie or a TV show. Defaults to TV unless the id is a tmdb id or looks like a movie.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Treat the id as a movie (TMDB)"},{"value":"tv","label":"Treat the id as a TV show (TVmaze)"}],"example":"movie","aliases":["media_type"]}],"returns":"ids{imdb, tmdb, tvmaze} (whichever resolve), title, type","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"imdb_id":"tt0903747"}},{"name":"genres","description":"TMDB genre reference (movie|tv)","required_params":[],"optional_params":["type"],"params":[{"name":"type","type":"enum","required":false,"description":"Whether the id/query is a movie or a TV show. Defaults to TV unless the id is a tmdb id or looks like a movie.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Treat the id as a movie (TMDB)"},{"value":"tv","label":"Treat the id as a TV show (TVmaze)"}],"example":"movie","aliases":["media_type"]}],"returns":"media, genres[]{id, name}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"movie"}},{"name":"countries","description":"streaming services available in a country (JustWatch)","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"string","required":false,"description":"JustWatch market — ISO-3166-1 alpha-2 (~140 supported). Controls streaming offers / services / new-titles region.","on_invalid":"ignore","default":"US","example":"US"}],"returns":"country, services[]{provider, ...}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US"}},{"name":"new_titles","description":"recently added/changed on streaming (≈ catalog changes)","required_params":["date"],"optional_params":["country","limit","object_types","packages"],"params":[{"name":"date","type":"string","required":true,"description":"Date as YYYY-MM-DD (required — the catalog-change day to report).","on_invalid":"reject","example":"2026-06-01"},{"name":"country","type":"string","required":false,"description":"JustWatch market — ISO-3166-1 alpha-2 (~140 supported). Controls streaming offers / services / new-titles region.","on_invalid":"ignore","default":"US","example":"US"},{"name":"limit","type":"integer","required":false,"description":"Max results to return.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"aliases":["first"]},{"name":"object_types","type":"array","required":false,"description":"Restrict JustWatch results to these node types (MOVIE / SHOW).","on_invalid":"ignore","allowed_values":[{"value":"MOVIE","label":"Movies"},{"value":"SHOW","label":"TV shows"}],"example":["MOVIE","SHOW"]},{"name":"packages","type":"array","required":false,"description":"Restrict to these JustWatch provider technical names (e.g. nfx=Netflix).","on_invalid":"ignore","example":["nfx","amp"]}],"returns":"titles[]{title, ids{imdb,...}, new_offer}, total","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","date":"2026-06-01"}},{"name":"charts","description":"Ranked title charts: most-popular / top-rated / upcoming / now-playing / on-the-air / trending — for movies, TV or both. A `language` filter turns top-rated/popular into the per-language charts (e.g. top-rated Tamil/Telugu/Hindi); `region` localises upcoming/now-playing.","required_params":["chart"],"optional_params":["language","region","page","limit"],"params":[{"name":"chart","type":"enum","required":false,"description":"Which chart to return.","on_invalid":"reject","allowed_values":[{"value":"popular_movies","label":"Most popular movies"},{"value":"popular_tv","label":"Most popular TV shows"},{"value":"top_rated_movies","label":"Top rated movies"},{"value":"top_rated_tv","label":"Top rated TV shows"},{"value":"upcoming_movies","label":"Upcoming movie releases"},{"value":"now_playing_movies","label":"Movies now in theatres"},{"value":"on_the_air_tv","label":"TV shows currently airing"},{"value":"trending_movies","label":"Trending movies (this week)"},{"value":"trending_tv","label":"Trending TV (this week)"},{"value":"trending_all","label":"Trending movies + TV + people"}],"example":"top_rated_movies"},{"name":"language","type":"string","required":false,"description":"ISO 639-1 original-language filter (e.g. ta=Tamil, te=Telugu, hi=Hindi, en=English). Turns popular/top-rated into per-language charts.","on_invalid":"ignore","example":"ta"},{"name":"region","type":"string","required":false,"description":"ISO 3166-1 region to localise upcoming/now-playing.","on_invalid":"ignore","example":"US"},{"name":"page","type":"integer","required":false,"description":"TMDB result page (movie/multi search only).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Max results to return.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"aliases":["first"]}],"returns":"chart, language, region, page, total_pages, total_results, results[]{ids{tmdb,imdb}, type, title, year, genres, rating, ...}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"chart":"top_rated_movies"}},{"name":"similar","description":"Titles similar to / recommended for a given movie or TV show (TMDB recommendations, falling back to similar). Accepts a TMDB id or an IMDb tt… id.","required_params":["id"],"optional_params":["type","limit"],"params":[{"name":"id","type":"string","required":true,"description":"Title id. By default a TVmaze id (TV) or TMDB id (movie); an imdb id (tt0903747) is auto-detected. Set id_type to be explicit.","on_invalid":"reject","example":"169"},{"name":"type","type":"enum","required":false,"description":"Whether the id/query is a movie or a TV show. Defaults to TV unless the id is a tmdb id or looks like a movie.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Treat the id as a movie (TMDB)"},{"value":"tv","label":"Treat the id as a TV show (TVmaze)"}],"example":"movie","aliases":["media_type"]},{"name":"limit","type":"integer","required":false,"description":"Max results to return.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"aliases":["first"]}],"returns":"id, tmdb_id, type, results[]{ids, title, year, genres, rating, ...}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"id":27205,"type":"movie"}},{"name":"credits","description":"A person's full filmography (combined movie + TV credits) by TMDB person id or by name — every title they were cast or crew on, newest first, with their character/job.","required_params":[],"optional_params":["person_id","name","limit"],"params":[{"name":"person_id","type":"integer","required":false,"description":"TMDB person id (omit if passing `name`).","on_invalid":"ignore","example":287},{"name":"name","type":"string","required":false,"description":"Person name to search (used when `person_id` is omitted).","on_invalid":"ignore","example":"Brad Pitt"},{"name":"limit","type":"integer","required":false,"description":"Max results to return.","on_invalid":"ignore","default":40,"example":40,"minimum":1,"aliases":["first"]}],"returns":"person_id, name, cast[]{title, year, character, ...}, crew[]{title, year, job, ...}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"person_id":287}},{"name":"discover","description":"Browse the catalog with filters — find movies or TV by genre, year range, minimum rating, runtime, original language, cast/crew, keyword and where-to-stream provider, sorted however you like. The 'explore like a real user' surface.","required_params":[],"optional_params":["type","genres","year","year_gte","year_lte","rating_gte","runtime_gte","runtime_lte","language","region","with_cast","sort_by","page","locale"],"params":[{"name":"type","type":"enum","required":false,"description":"Whether to browse/return movies or TV shows.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Movies"},{"value":"tv","label":"TV shows"}],"default":"movie","example":"movie","aliases":["media_type"]},{"name":"genres","type":"string","required":false,"description":"Genre filter — names ('Action','Comedy') or TMDB ids (28,878), comma-separated. See the `genres` action for the full list.","on_invalid":"ignore","example":"Action,Science Fiction"},{"name":"year","type":"integer","required":false,"description":"Exact release/first-air year.","on_invalid":"ignore","example":2023},{"name":"year_gte","type":"integer","required":false,"description":"Earliest year (inclusive).","on_invalid":"ignore","example":2010,"aliases":["year_from"]},{"name":"year_lte","type":"integer","required":false,"description":"Latest year (inclusive).","on_invalid":"ignore","example":2020,"aliases":["year_to"]},{"name":"rating_gte","type":"number","required":false,"description":"Minimum TMDB rating 0-10 (auto-applies a 50-vote floor to drop 1-vote outliers).","on_invalid":"ignore","example":7.5,"aliases":["min_rating"]},{"name":"runtime_gte","type":"integer","required":false,"description":"Minimum runtime in minutes.","on_invalid":"ignore","example":90},{"name":"runtime_lte","type":"integer","required":false,"description":"Maximum runtime in minutes.","on_invalid":"ignore","example":180},{"name":"language","type":"string","required":false,"description":"Original-language filter, ISO 639-1 (e.g. ko=Korean, ja=Japanese, hi=Hindi, en=English).","on_invalid":"ignore","example":"ko","aliases":["original_language"]},{"name":"region","type":"string","required":false,"description":"ISO 3166-1 region for release-window localisation.","on_invalid":"ignore","example":"US"},{"name":"with_cast","type":"string","required":false,"description":"TMDB person id(s) who must appear in the cast (comma-separated).","on_invalid":"ignore","example":"287","aliases":["cast_id"]},{"name":"sort_by","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"popularity.desc","label":"Most popular first"},{"value":"popularity.asc","label":"Least popular first"},{"value":"vote_average.desc","label":"Highest rated first"},{"value":"vote_average.asc","label":"Lowest rated first"},{"value":"primary_release_date.desc","label":"Newest first (movies)"},{"value":"primary_release_date.asc","label":"Oldest first (movies)"},{"value":"revenue.desc","label":"Highest grossing first (movies)"}],"default":"popularity.desc","example":"vote_average.desc"},{"name":"page","type":"integer","required":false,"description":"TMDB result page (movie/multi search only).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"locale","type":"string","required":false,"description":"Display language for titles/overviews (e.g. de-DE, ja-JP).","on_invalid":"ignore","example":"de-DE"}],"returns":"media, page, total_pages, total_results, results[]{ids, title, year, genres, rating}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"movie","genres":"Science Fiction","year_gte":2010,"rating_gte":7.5,"sort_by":"vote_average.desc"}},{"name":"reviews","description":"User reviews for a movie or TV show (author, star rating, full text), paginated.","required_params":["id"],"optional_params":["type","page"],"params":[{"name":"id","type":"string","required":true,"description":"TMDB id (e.g. 27205) OR an IMDb id (tt1375666) — auto-resolved.","on_invalid":"reject","example":"27205","aliases":["tmdb_id"]},{"name":"type","type":"enum","required":false,"description":"Whether to browse/return movies or TV shows.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Movies"},{"value":"tv","label":"TV shows"}],"default":"movie","example":"movie","aliases":["media_type"]},{"name":"page","type":"integer","required":false,"description":"TMDB result page (movie/multi search only).","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"tmdb_id, type, page, total_pages, total_results, reviews[]{author, rating, content, created_at, url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":27205,"type":"movie"}},{"name":"images","description":"All artwork for a title — posters, backdrops and (TV) episode stills with resolutions and language tags.","required_params":["id"],"optional_params":["type","limit"],"params":[{"name":"id","type":"string","required":true,"description":"TMDB id (e.g. 27205) OR an IMDb id (tt1375666) — auto-resolved.","on_invalid":"reject","example":"27205","aliases":["tmdb_id"]},{"name":"type","type":"enum","required":false,"description":"Whether to browse/return movies or TV shows.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Movies"},{"value":"tv","label":"TV shows"}],"default":"movie","example":"movie","aliases":["media_type"]},{"name":"limit","type":"integer","required":false,"description":"Max results to return.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"aliases":["first"]}],"returns":"tmdb_id, type, results[] (flat), posters[], backdrops[], logos[], stills[] {url, width, height, language}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"id":27205,"type":"movie"}},{"name":"videos","description":"Trailers, teasers and clips for a movie or TV show (YouTube keys + ready-to-play URLs).","required_params":["id"],"optional_params":["type"],"params":[{"name":"id","type":"string","required":true,"description":"TMDB id (e.g. 27205) OR an IMDb id (tt1375666) — auto-resolved.","on_invalid":"reject","example":"27205","aliases":["tmdb_id"]},{"name":"type","type":"enum","required":false,"description":"Whether to browse/return movies or TV shows.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Movies"},{"value":"tv","label":"TV shows"}],"default":"movie","example":"movie","aliases":["media_type"]}],"returns":"tmdb_id, type, results[]{name, type, site, key, url, official, published_at}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":27205,"type":"movie"}},{"name":"watch_providers","description":"Where to stream/rent/buy a title (TMDB/JustWatch data) — pass a country for that region's offers, or omit it to get every region.","required_params":["id"],"optional_params":["type","country"],"params":[{"name":"id","type":"string","required":true,"description":"TMDB id (e.g. 27205) OR an IMDb id (tt1375666) — auto-resolved.","on_invalid":"reject","example":"27205","aliases":["tmdb_id"]},{"name":"type","type":"enum","required":false,"description":"Whether to browse/return movies or TV shows.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Movies"},{"value":"tv","label":"TV shows"}],"default":"movie","example":"movie","aliases":["media_type"]},{"name":"country","type":"string","required":false,"description":"JustWatch market — ISO-3166-1 alpha-2 (~140 supported). Controls streaming offers / services / new-titles region.","on_invalid":"ignore","default":"US","example":"US"}],"returns":"tmdb_id, type, region, offers[]{provider, type, provider_id} (one region) OR by_region{cc:{offers}} (all regions)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":27205,"type":"movie","country":"US"}},{"name":"season","description":"Full episode list for one season of a TV show — episode titles, overviews, air dates, ratings and stills (TMDB).","required_params":["id","season"],"optional_params":["type"],"params":[{"name":"id","type":"string","required":true,"description":"TMDB id (e.g. 27205) OR an IMDb id (tt1375666) — auto-resolved.","on_invalid":"reject","example":"27205","aliases":["tmdb_id"]},{"name":"season","type":"integer","required":true,"description":"Season number.","on_invalid":"reject","example":1},{"name":"type","type":"enum","required":false,"description":"Always tv.","on_invalid":"ignore","allowed_values":[{"value":"tv","label":"TV show"}],"default":"tv","example":"tv"}],"returns":"tmdb_id, season_number, name, episode_count, episodes[]{episode, name, overview, air_date, runtime, rating, still}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":1396,"season":1}},{"name":"episode","description":"One TV episode in depth — overview, air date, rating, guest stars and crew (TMDB).","required_params":["id","season","episode"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"TMDB id (e.g. 27205) OR an IMDb id (tt1375666) — auto-resolved.","on_invalid":"reject","example":"27205","aliases":["tmdb_id"]},{"name":"season","type":"integer","required":true,"description":"Season number.","on_invalid":"reject","example":1},{"name":"episode","type":"integer","required":true,"description":"Episode number within the season.","on_invalid":"reject","example":1}],"returns":"tmdb_id, season, episode, name, overview, air_date, rating, guest_stars[]{person, character}, crew[]{person, job}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":1396,"season":1,"episode":1}}]},{"name":"mpb","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"MPB API — live used photo and video gear from mpb.com, the managed second-hand marketplace for cameras, lenses and cine kit in the UK, the US and Europe. MPB buys, inspects, grades and warranties every item itself, so each listing is one physical camera with one cosmetic grade, one shutter / hour / battery-charge count, its own list of what is in the box and its own price. Search or browse ~20,000 live UK, ~34,000 US and ~35,000 EU items by brand, category, gear type, lens mount, MPB's own condition grade and price, roll them up per model with a live price band, or pull one item's full record: MPB's written definition of its grade, the per-item inspection notes, the full spec sheet, every photo and the other graded copies of the same model that are in stock. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mpb/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse one MPB storefront at ITEM level - every row is a specific physical camera, lens or accessory MPB has in stock, with MPB's own cosmetic grade, that item's shutter / hour / battery-charge count, what is in the box with it, its price and the direct product URL. Pass `query`, or any combination of `brand` / `category` / `product_type` / `lens_mount` / `condition` / `price_min` / `price_max`, or nothing at all to walk the whole catalogue. `meta.total_results` is MPB's own exact match count for the request, so a filter that bites and a filter that is ignored are told apart without guessing. NOTE the price in a search row comes from MPB's search index: on 24 items checked against the product page on 2026-10-07, 23 agreed and one was 250.00 EUR stale - call `product` when the exact live price matters.","required_params":[],"optional_params":["query","market","brand","category","product_type","lens_mount","condition","price_min","price_max","sort","page","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword over MPB's catalogue (model, brand, lens, accessory). MPB's matching is exact enough to report a miss: the nonsense keyword 'zzqqxxnotathingqq' returned 0 results on 2026-10-07, so an empty answer here means empty, not broken. Combine it with the filters below to narrow further.","on_invalid":"ignore","example":"canon eos r6","aliases":["q","keyword","search","term"]},{"name":"market","type":"enum","required":false,"description":"Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency.","on_invalid":"reject","allowed_values":[{"value":"UK","label":"United Kingdom (en-uk, GBP, UK catalogue)"},{"value":"US","label":"United States (en-us, USD, US catalogue)"},{"value":"EU","label":"Europe (English) (en-eu, EUR, EU catalogue)"},{"value":"DE","label":"Germany (de-de, EUR, EU catalogue)"},{"value":"AT","label":"Austria (de-at, EUR, EU catalogue)"},{"value":"FR","label":"France (fr-fr, EUR, EU catalogue)"},{"value":"FR-BE","label":"Belgium (French) (fr-be, EUR, EU catalogue)"},{"value":"NL","label":"Netherlands (nl-nl, EUR, EU catalogue)"},{"value":"NL-BE","label":"Belgium (Dutch) (nl-be, EUR, EU catalogue)"},{"value":"IT","label":"Italy (it-it, EUR, EU catalogue)"},{"value":"ES","label":"Spain (es-es, EUR, EU catalogue)"},{"value":"PT","label":"Portugal (pt-pt, EUR, EU catalogue)"},{"value":"IE","label":"Ireland (en-ie, EUR, EU catalogue)"}],"default":"UK","example":"UK","aliases":["country","cc","storefront","locale"]},{"name":"brand","type":"array","required":false,"description":"One or more brands as MPB spells them (Canon, Nikon, Sony, Fujifilm, Leica, Panasonic, Sigma, DJI, Hasselblad, Zeiss, MPB...). Several values are OR-ed. Measured on the UK catalogue 2026-10-07: unfiltered 19,839 items, brand=Canon 4,872, brand=Canon,Nikon 7,753. The live list with counts is the `facets` action. Values are the English ones in every market.","on_invalid":"ignore","example":"Canon","aliases":["make","manufacturer","brands"]},{"name":"category","type":"array","required":false,"description":"One or more of MPB's own categories ('DSLR lenses', 'Mirrorless cameras', 'Canon RF fit lenses', 'Batteries & chargers', 'Tripods & supports'...). 132 of them were live in the UK catalogue on 2026-10-07; call `facets` for the list with counts. Measured: unfiltered 19,839 -> category='DSLR lenses' 4,949.","on_invalid":"ignore","example":"DSLR lenses","aliases":["cat","categories"]},{"name":"product_type","type":"array","required":false,"description":"MPB's own gear class, a finer cut than `category`: 'Pro DSLR', 'Prosumer Mirrorless', 'Prime Lens', 'Telephoto Zoom', 'Cine Lens', 'Drone', 'Flashgun', 'Camcorder - Hour Count'... 58 were live in the UK catalogue on 2026-10-07. Measured: unfiltered 19,839 -> product_type='Prime Lens' 1,784.","on_invalid":"ignore","example":"Prime Lens","aliases":["type","product_types"]},{"name":"lens_mount","type":"array","required":false,"description":"The lens bayonet, as MPB names it: Canon EF, Canon EF-S, Canon EF-M, Canon RF, Canon FD, Nikon FX, Nikon DX, Nikon Z, Nikon 1, Sony E, Sony A, Fujifilm X, Fujifilm G, Micro Four Thirds, Leica L, Leica M, Leica S, Pentax K, Sigma SA, PL, Hasselblad X, Hasselblad H, Phase One / Mamiya 645. Measured: unfiltered 19,839 -> lens_mount='Canon EF' 2,641, and inside Prosumer Mirrorless (920) it correctly collapses to 0 because no mirrorless BODY carries an EF mount.","on_invalid":"ignore","example":"Canon EF","aliases":["mount","lens_mounts","fit"]},{"name":"condition","type":"array","required":false,"description":"MPB's own cosmetic grade. MPB inspects and grades every item itself, so this is the field that makes the listing: like_new (its star rating 5), excellent (4), good (3), well_used (2), heavily_used (1), new (6) and spares_or_repairs (0). Several values are OR-ed. Spares-and-repairs stock is EXCLUDED unless you ask for it by name - that is what MPB's own storefront does. Measured on the UK catalogue 2026-10-07: like_new 3,454, excellent 9,495, good 5,936, well_used 728, heavily_used 56, new 170.","on_invalid":"reject","allowed_values":[{"value":"like_new","label":"Like new (MPB star rating 5)"},{"value":"excellent","label":"Excellent (4)"},{"value":"good","label":"Good (3)"},{"value":"well_used","label":"Well used (2)"},{"value":"heavily_used","label":"Heavily used (1)"},{"value":"new","label":"Brand new (6)"},{"value":"spares_or_repairs","label":"Spares and repairs (0) — excluded unless you ask for it"}],"example":"excellent","aliases":["grade","conditions","cosmetic_condition"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to return, in the market's own currency (GBP for UK, USD for US, EUR for every European storefront) as a decimal, e.g. 249.99. Measured on the UK catalogue: unfiltered 19,839 -> price_max=200 9,237, price_min=1000 2,327.","on_invalid":"ignore","example":200,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"number","required":false,"description":"Highest price to return, same currency rule as `price_min`.","on_invalid":"ignore","example":1500,"minimum":0,"aliases":["max_price","price_to"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Left out, MPB returns its own relevance order. Measured: price_asc first row 1.00 GBP, price_desc first row 14,119.00 GBP on the same UK catalogue, so the ends are real.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Most recently online first"},{"value":"first_listed","label":"Most recently added to the catalogue first"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Deep paging is honest here: asking past the end returns an empty page rather than repeating the last one (measured at start=19,840 on a 19,839-item catalogue). `meta.total_results` is MPB's own exact match count and `meta.pagination.has_more` says whether another page exists.","on_invalid":"ignore","default":1,"minimum":1,"maximum":2000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (default 24). MPB's service itself accepts far more but each row carries images and accessory lists, so this engine caps it to keep one call predictable.","on_invalid":"ignore","default":24,"minimum":1,"maximum":100,"aliases":["limit","per_page","rows"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"products[]{product_id, sku, url, model_id, model_name, model_name_localized, model_slug, brand, category, category_localized, product_type, product_type_localized, lens_mount[], condition, condition_label, condition_rank, price, price_was, price_reduction, currency, market, shutter_count, hour_count, battery_charge_count, included_accessories[], images[], first_listed, last_seen, year_of_release, weight_grams, model_available_new, model_new_price} + meta{total_results, market, catalog, currency, page, page_size, pagination, filters_applied}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"canon eos r6","market":"UK","sort":"price_asc"}},{"name":"models","description":"The same search, rolled up ONE ROW PER MODEL instead of one row per item: how many graded copies MPB currently holds and the live price band (cheapest to dearest) for that model in that market. This is the question a flat listing cannot answer - 'which Canon RF primes does MPB have in stock right now and from what price'. Takes every filter `search` takes. Measured 2026-10-07: the UK catalogue's 19,839 live items roll up to 3,866 models.","required_params":[],"optional_params":["query","market","brand","category","product_type","lens_mount","condition","price_min","price_max","page","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword over MPB's catalogue (model, brand, lens, accessory). MPB's matching is exact enough to report a miss: the nonsense keyword 'zzqqxxnotathingqq' returned 0 results on 2026-10-07, so an empty answer here means empty, not broken. Combine it with the filters below to narrow further.","on_invalid":"ignore","example":"canon eos r6","aliases":["q","keyword","search","term"]},{"name":"market","type":"enum","required":false,"description":"Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency.","on_invalid":"reject","allowed_values":[{"value":"UK","label":"United Kingdom (en-uk, GBP, UK catalogue)"},{"value":"US","label":"United States (en-us, USD, US catalogue)"},{"value":"EU","label":"Europe (English) (en-eu, EUR, EU catalogue)"},{"value":"DE","label":"Germany (de-de, EUR, EU catalogue)"},{"value":"AT","label":"Austria (de-at, EUR, EU catalogue)"},{"value":"FR","label":"France (fr-fr, EUR, EU catalogue)"},{"value":"FR-BE","label":"Belgium (French) (fr-be, EUR, EU catalogue)"},{"value":"NL","label":"Netherlands (nl-nl, EUR, EU catalogue)"},{"value":"NL-BE","label":"Belgium (Dutch) (nl-be, EUR, EU catalogue)"},{"value":"IT","label":"Italy (it-it, EUR, EU catalogue)"},{"value":"ES","label":"Spain (es-es, EUR, EU catalogue)"},{"value":"PT","label":"Portugal (pt-pt, EUR, EU catalogue)"},{"value":"IE","label":"Ireland (en-ie, EUR, EU catalogue)"}],"default":"UK","example":"UK","aliases":["country","cc","storefront","locale"]},{"name":"brand","type":"array","required":false,"description":"One or more brands as MPB spells them (Canon, Nikon, Sony, Fujifilm, Leica, Panasonic, Sigma, DJI, Hasselblad, Zeiss, MPB...). Several values are OR-ed. Measured on the UK catalogue 2026-10-07: unfiltered 19,839 items, brand=Canon 4,872, brand=Canon,Nikon 7,753. The live list with counts is the `facets` action. Values are the English ones in every market.","on_invalid":"ignore","example":"Canon","aliases":["make","manufacturer","brands"]},{"name":"category","type":"array","required":false,"description":"One or more of MPB's own categories ('DSLR lenses', 'Mirrorless cameras', 'Canon RF fit lenses', 'Batteries & chargers', 'Tripods & supports'...). 132 of them were live in the UK catalogue on 2026-10-07; call `facets` for the list with counts. Measured: unfiltered 19,839 -> category='DSLR lenses' 4,949.","on_invalid":"ignore","example":"DSLR lenses","aliases":["cat","categories"]},{"name":"product_type","type":"array","required":false,"description":"MPB's own gear class, a finer cut than `category`: 'Pro DSLR', 'Prosumer Mirrorless', 'Prime Lens', 'Telephoto Zoom', 'Cine Lens', 'Drone', 'Flashgun', 'Camcorder - Hour Count'... 58 were live in the UK catalogue on 2026-10-07. Measured: unfiltered 19,839 -> product_type='Prime Lens' 1,784.","on_invalid":"ignore","example":"Prime Lens","aliases":["type","product_types"]},{"name":"lens_mount","type":"array","required":false,"description":"The lens bayonet, as MPB names it: Canon EF, Canon EF-S, Canon EF-M, Canon RF, Canon FD, Nikon FX, Nikon DX, Nikon Z, Nikon 1, Sony E, Sony A, Fujifilm X, Fujifilm G, Micro Four Thirds, Leica L, Leica M, Leica S, Pentax K, Sigma SA, PL, Hasselblad X, Hasselblad H, Phase One / Mamiya 645. Measured: unfiltered 19,839 -> lens_mount='Canon EF' 2,641, and inside Prosumer Mirrorless (920) it correctly collapses to 0 because no mirrorless BODY carries an EF mount.","on_invalid":"ignore","example":"Canon EF","aliases":["mount","lens_mounts","fit"]},{"name":"condition","type":"array","required":false,"description":"MPB's own cosmetic grade. MPB inspects and grades every item itself, so this is the field that makes the listing: like_new (its star rating 5), excellent (4), good (3), well_used (2), heavily_used (1), new (6) and spares_or_repairs (0). Several values are OR-ed. Spares-and-repairs stock is EXCLUDED unless you ask for it by name - that is what MPB's own storefront does. Measured on the UK catalogue 2026-10-07: like_new 3,454, excellent 9,495, good 5,936, well_used 728, heavily_used 56, new 170.","on_invalid":"reject","allowed_values":[{"value":"like_new","label":"Like new (MPB star rating 5)"},{"value":"excellent","label":"Excellent (4)"},{"value":"good","label":"Good (3)"},{"value":"well_used","label":"Well used (2)"},{"value":"heavily_used","label":"Heavily used (1)"},{"value":"new","label":"Brand new (6)"},{"value":"spares_or_repairs","label":"Spares and repairs (0) — excluded unless you ask for it"}],"example":"excellent","aliases":["grade","conditions","cosmetic_condition"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to return, in the market's own currency (GBP for UK, USD for US, EUR for every European storefront) as a decimal, e.g. 249.99. Measured on the UK catalogue: unfiltered 19,839 -> price_max=200 9,237, price_min=1000 2,327.","on_invalid":"ignore","example":200,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"number","required":false,"description":"Highest price to return, same currency rule as `price_min`.","on_invalid":"ignore","example":1500,"minimum":0,"aliases":["max_price","price_to"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Deep paging is honest here: asking past the end returns an empty page rather than repeating the last one (measured at start=19,840 on a 19,839-item catalogue). `meta.total_results` is MPB's own exact match count and `meta.pagination.has_more` says whether another page exists.","on_invalid":"ignore","default":1,"minimum":1,"maximum":2000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (default 24). MPB's service itself accepts far more but each row carries images and accessory lists, so this engine caps it to keep one call predictable.","on_invalid":"ignore","default":24,"minimum":1,"maximum":100,"aliases":["limit","per_page","rows"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"models[]{model_id, model_name, model_name_localized, model_slug, url, brand, category, category_localized, product_type, lens_mount[], in_stock_count, price_min, price_max, currency, images[], model_available_new} + meta{total_results, market, catalog, currency, pagination}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"US","brand":"Nikon","product_type":"Prime Lens"}},{"name":"product","description":"The complete record of ONE item by its `sku`, read off the product page a buyer sees. Adds everything a search row cannot carry: MPB's written definition of the grade this item carries, the per-item inspection notes MPB publishes when it found something (a worn grip, corrosion on the hot shoe, a mark on the sensor filter - each with MPB's own code, title and explanation), the full accessory checklist with a present/absent flag per accessory, the shutter / hour / battery-charge count and firmware, the model's full spec sheet, every photo, and the other graded copies of the same model in stock with their prices. Pass `slug` alongside `sku` (both come from one `search` row) to answer in a single upstream request. A sku that is not live in this market answers NOT_FOUND - MPB's own URL quietly falls back to the model page there, and this engine does not pass that off as a result.","required_params":["sku"],"optional_params":["slug","market","include_pii"],"params":[{"name":"sku","type":"string","required":true,"description":"MPB's own stock number for ONE physical item - the number printed at the end of a product URL (/product/<model>/sku-4168605) and returned as `sku` by `search`. A sku that is no longer live answers NOT_FOUND, never an empty success.","on_invalid":"reject","example":"4168605","aliases":["product_sku","item","id"]},{"name":"slug","type":"string","required":false,"description":"The model segment of the product URL, e.g. `canon-eos-r6`. Optional: pass it together with `sku` (both come from the same `search` row) and the engine reads the product page directly; leave it out and the engine resolves it first, which costs one extra upstream request.","on_invalid":"ignore","example":"canon-eos-r6","aliases":["model_slug","url_segment"]},{"name":"market","type":"enum","required":false,"description":"Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency.","on_invalid":"reject","allowed_values":[{"value":"UK","label":"United Kingdom (en-uk, GBP, UK catalogue)"},{"value":"US","label":"United States (en-us, USD, US catalogue)"},{"value":"EU","label":"Europe (English) (en-eu, EUR, EU catalogue)"},{"value":"DE","label":"Germany (de-de, EUR, EU catalogue)"},{"value":"AT","label":"Austria (de-at, EUR, EU catalogue)"},{"value":"FR","label":"France (fr-fr, EUR, EU catalogue)"},{"value":"FR-BE","label":"Belgium (French) (fr-be, EUR, EU catalogue)"},{"value":"NL","label":"Netherlands (nl-nl, EUR, EU catalogue)"},{"value":"NL-BE","label":"Belgium (Dutch) (nl-be, EUR, EU catalogue)"},{"value":"IT","label":"Italy (it-it, EUR, EU catalogue)"},{"value":"ES","label":"Spain (es-es, EUR, EU catalogue)"},{"value":"PT","label":"Portugal (pt-pt, EUR, EU catalogue)"},{"value":"IE","label":"Ireland (en-ie, EUR, EU catalogue)"}],"default":"UK","example":"UK","aliases":["country","cc","storefront","locale"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"product{product_id, sku, url, model_id, model_name, model_slug, model_url, brand, brand_id, product_type, condition, condition_label, condition_rank, condition_description, observations[]{code, tier_code, area, title, summary, detail}, price, price_was, discount, discount_is_percentage, currency, market, is_sold, state, shutter_count, hour_count, battery_charge_count, firmware, attributes{}, included_accessories[]{id, name, present, essential, core}, included_accessories_present, images[], description, custom_description, specs[]{name, value, type}, breadcrumbs[], model_stock{in_stock_count, price_min, price_max}, other_stock[]{product_id, sku, price, condition, condition_label, condition_rank, is_this_item, url, image}, price_printed, price_second_witness, price_mismatch} + meta{market, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"sku":"4168605"}},{"name":"model","description":"One MODEL and everything MPB has of it: the model record with its full spec sheet, the accessories MPB expects in the box for that model, and every live graded copy in that market with its sku, grade, usage count and price - sorted cheapest first, so the grade-to-price ladder for that camera is one call. Pass `model_id` or `slug`.","required_params":[],"optional_params":["model_id","slug","market","condition","include_pii"],"params":[{"name":"model_id","type":"integer","required":false,"description":"MPB's own model id, returned by `search`, `models` and `product`. Pass this OR `slug` - one of the two is required by `model`.","on_invalid":"reject","example":69474,"aliases":["model"]},{"name":"slug","type":"string","required":false,"description":"The model segment of the product URL, e.g. `canon-eos-r6`. Optional: pass it together with `sku` (both come from the same `search` row) and the engine reads the product page directly; leave it out and the engine resolves it first, which costs one extra upstream request.","on_invalid":"ignore","example":"canon-eos-r6","aliases":["model_slug","url_segment"]},{"name":"market","type":"enum","required":false,"description":"Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency.","on_invalid":"reject","allowed_values":[{"value":"UK","label":"United Kingdom (en-uk, GBP, UK catalogue)"},{"value":"US","label":"United States (en-us, USD, US catalogue)"},{"value":"EU","label":"Europe (English) (en-eu, EUR, EU catalogue)"},{"value":"DE","label":"Germany (de-de, EUR, EU catalogue)"},{"value":"AT","label":"Austria (de-at, EUR, EU catalogue)"},{"value":"FR","label":"France (fr-fr, EUR, EU catalogue)"},{"value":"FR-BE","label":"Belgium (French) (fr-be, EUR, EU catalogue)"},{"value":"NL","label":"Netherlands (nl-nl, EUR, EU catalogue)"},{"value":"NL-BE","label":"Belgium (Dutch) (nl-be, EUR, EU catalogue)"},{"value":"IT","label":"Italy (it-it, EUR, EU catalogue)"},{"value":"ES","label":"Spain (es-es, EUR, EU catalogue)"},{"value":"PT","label":"Portugal (pt-pt, EUR, EU catalogue)"},{"value":"IE","label":"Ireland (en-ie, EUR, EU catalogue)"}],"default":"UK","example":"UK","aliases":["country","cc","storefront","locale"]},{"name":"condition","type":"array","required":false,"description":"MPB's own cosmetic grade. MPB inspects and grades every item itself, so this is the field that makes the listing: like_new (its star rating 5), excellent (4), good (3), well_used (2), heavily_used (1), new (6) and spares_or_repairs (0). Several values are OR-ed. Spares-and-repairs stock is EXCLUDED unless you ask for it by name - that is what MPB's own storefront does. Measured on the UK catalogue 2026-10-07: like_new 3,454, excellent 9,495, good 5,936, well_used 728, heavily_used 56, new 170.","on_invalid":"reject","allowed_values":[{"value":"like_new","label":"Like new (MPB star rating 5)"},{"value":"excellent","label":"Excellent (4)"},{"value":"good","label":"Good (3)"},{"value":"well_used","label":"Well used (2)"},{"value":"heavily_used","label":"Heavily used (1)"},{"value":"new","label":"Brand new (6)"},{"value":"spares_or_repairs","label":"Spares and repairs (0) — excluded unless you ask for it"}],"example":"excellent","aliases":["grade","conditions","cosmetic_condition"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"model{model_id, model_name, model_slug, url, brand, brand_id, product_type, description, legend, key_features[], specs[]{name, value, type}, images[], min_online_price, new_price, expected_accessories[], bonus_accessories[], slugs_by_market{}} + stock[]{product_id, sku, url, model_id, model_name, model_name_localized, model_slug, brand, category, category_localized, product_type, product_type_localized, lens_mount[], condition, condition_label, condition_rank, price, price_was, price_reduction, currency, market, shutter_count, hour_count, battery_charge_count, included_accessories[], images[], first_listed, last_seen, year_of_release, weight_grams, model_available_new, model_new_price} + meta{in_stock_count, price_min, price_max, market, catalog, currency}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"slug":"canon-eos-r6","market":"UK"}},{"name":"facets","description":"The live filter taxonomy of one MPB market: every brand, category, gear type, lens mount and condition grade that actually has stock right now, each with MPB's own count. This is how you discover the exact value to pass to `search` instead of guessing it - and the counts alone answer 'how much Canon glass does MPB hold in the US today'. Accepts the same filters as `search`, so you can ask for the taxonomy INSIDE a scope (the lens mounts available under Fujifilm, say).","required_params":[],"optional_params":["market","facets","query","brand","category","product_type","lens_mount","condition","price_min","price_max","include_pii"],"params":[{"name":"market","type":"enum","required":false,"description":"Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency.","on_invalid":"reject","allowed_values":[{"value":"UK","label":"United Kingdom (en-uk, GBP, UK catalogue)"},{"value":"US","label":"United States (en-us, USD, US catalogue)"},{"value":"EU","label":"Europe (English) (en-eu, EUR, EU catalogue)"},{"value":"DE","label":"Germany (de-de, EUR, EU catalogue)"},{"value":"AT","label":"Austria (de-at, EUR, EU catalogue)"},{"value":"FR","label":"France (fr-fr, EUR, EU catalogue)"},{"value":"FR-BE","label":"Belgium (French) (fr-be, EUR, EU catalogue)"},{"value":"NL","label":"Netherlands (nl-nl, EUR, EU catalogue)"},{"value":"NL-BE","label":"Belgium (Dutch) (nl-be, EUR, EU catalogue)"},{"value":"IT","label":"Italy (it-it, EUR, EU catalogue)"},{"value":"ES","label":"Spain (es-es, EUR, EU catalogue)"},{"value":"PT","label":"Portugal (pt-pt, EUR, EU catalogue)"},{"value":"IE","label":"Ireland (en-ie, EUR, EU catalogue)"}],"default":"UK","example":"UK","aliases":["country","cc","storefront","locale"]},{"name":"facets","type":"array","required":false,"description":"Which filter taxonomies to return with their live counts. Default: brand, category, product_type, lens_mount, condition. Every value here is a filter you can then pass to `search`.","on_invalid":"reject","allowed_values":[{"value":"brand","label":"Brand"},{"value":"category","label":"Category"},{"value":"product_type","label":"Product type"},{"value":"lens_mount","label":"Lens mount"},{"value":"condition","label":"Cosmetic condition"},{"value":"sensor_format","label":"Sensor format"},{"value":"camera_type","label":"Camera type"},{"value":"year_of_release","label":"Year of release"}],"example":"brand,category"},{"name":"query","type":"string","required":false,"description":"Free-text keyword over MPB's catalogue (model, brand, lens, accessory). MPB's matching is exact enough to report a miss: the nonsense keyword 'zzqqxxnotathingqq' returned 0 results on 2026-10-07, so an empty answer here means empty, not broken. Combine it with the filters below to narrow further.","on_invalid":"ignore","example":"canon eos r6","aliases":["q","keyword","search","term"]},{"name":"brand","type":"array","required":false,"description":"One or more brands as MPB spells them (Canon, Nikon, Sony, Fujifilm, Leica, Panasonic, Sigma, DJI, Hasselblad, Zeiss, MPB...). Several values are OR-ed. Measured on the UK catalogue 2026-10-07: unfiltered 19,839 items, brand=Canon 4,872, brand=Canon,Nikon 7,753. The live list with counts is the `facets` action. Values are the English ones in every market.","on_invalid":"ignore","example":"Canon","aliases":["make","manufacturer","brands"]},{"name":"category","type":"array","required":false,"description":"One or more of MPB's own categories ('DSLR lenses', 'Mirrorless cameras', 'Canon RF fit lenses', 'Batteries & chargers', 'Tripods & supports'...). 132 of them were live in the UK catalogue on 2026-10-07; call `facets` for the list with counts. Measured: unfiltered 19,839 -> category='DSLR lenses' 4,949.","on_invalid":"ignore","example":"DSLR lenses","aliases":["cat","categories"]},{"name":"product_type","type":"array","required":false,"description":"MPB's own gear class, a finer cut than `category`: 'Pro DSLR', 'Prosumer Mirrorless', 'Prime Lens', 'Telephoto Zoom', 'Cine Lens', 'Drone', 'Flashgun', 'Camcorder - Hour Count'... 58 were live in the UK catalogue on 2026-10-07. Measured: unfiltered 19,839 -> product_type='Prime Lens' 1,784.","on_invalid":"ignore","example":"Prime Lens","aliases":["type","product_types"]},{"name":"lens_mount","type":"array","required":false,"description":"The lens bayonet, as MPB names it: Canon EF, Canon EF-S, Canon EF-M, Canon RF, Canon FD, Nikon FX, Nikon DX, Nikon Z, Nikon 1, Sony E, Sony A, Fujifilm X, Fujifilm G, Micro Four Thirds, Leica L, Leica M, Leica S, Pentax K, Sigma SA, PL, Hasselblad X, Hasselblad H, Phase One / Mamiya 645. Measured: unfiltered 19,839 -> lens_mount='Canon EF' 2,641, and inside Prosumer Mirrorless (920) it correctly collapses to 0 because no mirrorless BODY carries an EF mount.","on_invalid":"ignore","example":"Canon EF","aliases":["mount","lens_mounts","fit"]},{"name":"condition","type":"array","required":false,"description":"MPB's own cosmetic grade. MPB inspects and grades every item itself, so this is the field that makes the listing: like_new (its star rating 5), excellent (4), good (3), well_used (2), heavily_used (1), new (6) and spares_or_repairs (0). Several values are OR-ed. Spares-and-repairs stock is EXCLUDED unless you ask for it by name - that is what MPB's own storefront does. Measured on the UK catalogue 2026-10-07: like_new 3,454, excellent 9,495, good 5,936, well_used 728, heavily_used 56, new 170.","on_invalid":"reject","allowed_values":[{"value":"like_new","label":"Like new (MPB star rating 5)"},{"value":"excellent","label":"Excellent (4)"},{"value":"good","label":"Good (3)"},{"value":"well_used","label":"Well used (2)"},{"value":"heavily_used","label":"Heavily used (1)"},{"value":"new","label":"Brand new (6)"},{"value":"spares_or_repairs","label":"Spares and repairs (0) — excluded unless you ask for it"}],"example":"excellent","aliases":["grade","conditions","cosmetic_condition"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to return, in the market's own currency (GBP for UK, USD for US, EUR for every European storefront) as a decimal, e.g. 249.99. Measured on the UK catalogue: unfiltered 19,839 -> price_max=200 9,237, price_min=1000 2,327.","on_invalid":"ignore","example":200,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"number","required":false,"description":"Highest price to return, same currency rule as `price_min`.","on_invalid":"ignore","example":1500,"minimum":0,"aliases":["max_price","price_to"]},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"facets[]{filter, index_field, label, value_count, values[]{value, label, rank, count}} + meta{total_results, market, catalog, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"UK","facets":"brand,category,condition"}},{"name":"suggest","description":"MPB's own model autocomplete: turn a half-typed camera or lens name into the model names MPB actually carries. One tiny request (under 1 KB measured), meant to be called before `search` so a keyword lands on a real model.","required_params":["query"],"optional_params":["market","count","include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"A partial model name. Returns MPB's own fuzzy model suggestions, which is how its own search box resolves a half-typed camera name into a model MPB stocks.","on_invalid":"reject","example":"canon eos","aliases":["q","term","prefix"]},{"name":"market","type":"enum","required":false,"description":"Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency.","on_invalid":"reject","allowed_values":[{"value":"UK","label":"United Kingdom (en-uk, GBP, UK catalogue)"},{"value":"US","label":"United States (en-us, USD, US catalogue)"},{"value":"EU","label":"Europe (English) (en-eu, EUR, EU catalogue)"},{"value":"DE","label":"Germany (de-de, EUR, EU catalogue)"},{"value":"AT","label":"Austria (de-at, EUR, EU catalogue)"},{"value":"FR","label":"France (fr-fr, EUR, EU catalogue)"},{"value":"FR-BE","label":"Belgium (French) (fr-be, EUR, EU catalogue)"},{"value":"NL","label":"Netherlands (nl-nl, EUR, EU catalogue)"},{"value":"NL-BE","label":"Belgium (Dutch) (nl-be, EUR, EU catalogue)"},{"value":"IT","label":"Italy (it-it, EUR, EU catalogue)"},{"value":"ES","label":"Spain (es-es, EUR, EU catalogue)"},{"value":"PT","label":"Portugal (pt-pt, EUR, EU catalogue)"},{"value":"IE","label":"Ireland (en-ie, EUR, EU catalogue)"}],"default":"UK","example":"UK","aliases":["country","cc","storefront","locale"]},{"name":"count","type":"integer","required":false,"description":"How many suggestions to return (1-50, default 10).","on_invalid":"ignore","default":10,"minimum":1,"maximum":50},{"name":"include_pii","type":"boolean","required":false,"description":"Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.","on_invalid":"ignore","default":false}],"returns":"suggestions[]{term, weight} + meta{market, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"canon eos","market":"UK","count":10}}]},{"name":"mtggoldfish","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"MTGGoldfish API — Magic: The Gathering prices in USD (tabletop) and tix (MTGO), daily price history since release, movers, set price lists, metagame shares, tournament results and full decklists. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mtggoldfish/v1","spec_available":true,"actions":[{"name":"search","description":"Cards whose name matches: one row per card name (the site's default printing) with tabletop USD and MTGO tix prices, rarity, set and url. `card` then gives every printing.","required_params":["query"],"optional_params":["set","sort","sort_direction","page"],"params":[{"name":"query","type":"string","required":true,"description":"Text to look for in card names.","on_invalid":"reject","example":"dragon","aliases":["q","name","keyword"]},{"name":"set","type":"string","required":false,"description":"Only cards from this set (code from `sets`).","on_invalid":"reject","example":"MH2","aliases":["set_code"]},{"name":"sort","type":"enum","required":false,"description":"Sort column on the site.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's relevance order"},{"value":"name","label":"Card name"},{"value":"set","label":"Set"},{"value":"rarity","label":"Rarity"}],"default":"relevance","example":"rarity"},{"name":"sort_direction","type":"enum","required":false,"description":"Sort direction.","on_invalid":"reject","allowed_values":[{"value":"asc","label":"Ascending"},{"value":"desc","label":"Descending"}],"default":"asc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"Page number. meta.extra.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000}],"returns":"rows[]: name, card_id, set, set_code, collector_number, finish, foil, variant, rarity, paper_price_usd, online_price_tix, image, url; null = the site shows no price in that market. meta.extra: total (the site's count), page, per_page=20, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dragon"}},{"name":"autocomplete","description":"The site's type-ahead: up to 30 card printings (with exact card_id, set code, finish and url), card names, archetypes or tournaments for what has been typed so far.","required_params":["term"],"optional_params":["kind"],"params":[{"name":"term","type":"string","required":true,"description":"Text typed so far.","on_invalid":"reject","example":"ragav","aliases":["q","query"]},{"name":"kind","type":"enum","required":false,"description":"What to complete.","on_invalid":"reject","allowed_values":[{"value":"cards","label":"Card printings (id, set, url)"},{"value":"card_names","label":"Card names only"},{"value":"decks","label":"Archetypes"},{"value":"tournaments","label":"Tournaments"}],"default":"cards","example":"decks"}],"returns":"rows[]: name, card_id, card_uuid, set, set_code, collector_number, finish, foil, url (cards); name (card_names); name, format, colors, url (decks); name, date, format, url (tournaments).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"term":"ragav"}},{"name":"card","description":"One Magic printing in full: tabletop price in USD and MTGO price in tix, daily and weekly change, all-time high and low, spread, highest buylist, foil multiplier, vendor sell and buylist prices, every other printing, oracle text, legalities and images.","required_params":[],"optional_params":["name","set","foil","card_id","url","include_history","days"],"params":[{"name":"name","type":"string","required":false,"description":"Card name. With `set` it picks that printing; without, the site's default printing, which can be an MTGO-only one (Sol Ring: Masters Edition IV).","on_invalid":"reject","example":"Ragavan, Nimble Pilferer","aliases":["card","query","q"]},{"name":"set","type":"string","required":false,"description":"Set code as the site writes it, e.g. MH2 (the `sets` action lists them all).","on_invalid":"reject","example":"MH2","aliases":["set_code"]},{"name":"foil","type":"boolean","required":false,"description":"Pick the foil (true) or non-foil (false) printing when set is given.","on_invalid":"reject","example":false},{"name":"card_id","type":"string","required":false,"description":"The exact printing, as returned by search/autocomplete/card, e.g. 'Ragavan, Nimble Pilferer [MH2] (F)'. Takes priority over name.","on_invalid":"reject","example":"Ragavan, Nimble Pilferer [MH2]"},{"name":"url","type":"string","required":false,"description":"An mtggoldfish.com card page URL (or its path).","on_invalid":"reject","example":"https://www.mtggoldfish.com/price/modern-horizons-2/138/ragavan-nimble-pilferer"},{"name":"include_history","type":"boolean","required":false,"description":"Also return the daily series (paper and online) in this call.","on_invalid":"reject","default":false,"example":true},{"name":"days","type":"integer","required":false,"description":"Only the most recent N daily points. Omit for the full history since the card's release.","on_invalid":"reject","example":90,"minimum":1,"maximum":20000}],"returns":"card{name, card_id (exact printing key), card_uuid, set, set_code, collector_number, finish (regular/foil/foil_etched), foil, variant, rarity, mana_cost ({1}{R}), mana_cost_text, type_line, oracle_text, power_toughness, illustrator, tags, legalities{format: legal/banned/not_legal/restricted}, paper_price_usd, online_price_tix, paper{market, currency:'USD', daily_change_usd, weekly_change_usd, all_time_high_usd, all_time_low_usd, spread_percent, highest_buylist_usd, foil_multiplier}, online{market, currency:'TIX', daily_change_tix, weekly_change_tix, all_time_high_tix, all_time_low_tix, foil_multiplier}, sell_prices[]{vendor, market, price_usd or price_tix, url}, buylist_prices[], printings[]{card_id, name, set_code, collector_number, finish, foil, variant, paper_price_usd, online_price_tix, url}, image, url}, history (with include_history): paper{}, online{} as in price_history. Headline prices are the site's own (asking prices, not sales); a null means the site shows none in that market.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"name":"Ragavan, Nimble Pilferer","set":"MH2"}},{"name":"price_history","description":"Every daily price of one printing since it was released, tabletop in USD and MTGO in tix, as two separate named series, with the site's own all-time high and low.","required_params":[],"optional_params":["name","set","foil","card_id","url","market","days"],"params":[{"name":"name","type":"string","required":false,"description":"Card name. With `set` it picks that printing; without, the site's default printing, which can be an MTGO-only one (Sol Ring: Masters Edition IV).","on_invalid":"reject","example":"Ragavan, Nimble Pilferer","aliases":["card","query","q"]},{"name":"set","type":"string","required":false,"description":"Set code as the site writes it, e.g. MH2 (the `sets` action lists them all).","on_invalid":"reject","example":"MH2","aliases":["set_code"]},{"name":"foil","type":"boolean","required":false,"description":"Pick the foil (true) or non-foil (false) printing when set is given.","on_invalid":"reject","example":false},{"name":"card_id","type":"string","required":false,"description":"The exact printing, as returned by search/autocomplete/card, e.g. 'Ragavan, Nimble Pilferer [MH2] (F)'. Takes priority over name.","on_invalid":"reject","example":"Ragavan, Nimble Pilferer [MH2]"},{"name":"url","type":"string","required":false,"description":"An mtggoldfish.com card page URL (or its path).","on_invalid":"reject","example":"https://www.mtggoldfish.com/price/modern-horizons-2/138/ragavan-nimble-pilferer"},{"name":"market","type":"enum","required":false,"description":"Which price series to return.","on_invalid":"reject","allowed_values":[{"value":"both","label":"Tabletop and MTGO, as two named series"},{"value":"paper","label":"Tabletop prices in USD"},{"value":"online","label":"Magic Online prices in tix"}],"default":"both","example":"paper"},{"name":"days","type":"integer","required":false,"description":"Only the most recent N daily points. Omit for the full history since the card's release.","on_invalid":"reject","example":90,"minimum":1,"maximum":20000}],"returns":"card_id, card (name, set, finish), paper{market, currency:'USD', points, first_date, last_date, latest, min, max, history[]{date, price}}, online{market, currency:'TIX', ...}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"card_id":"Ragavan, Nimble Pilferer [MH2]","days":30}},{"name":"sets","description":"Every Magic set the site tracks: code, name, parent set and page url.","required_params":[],"optional_params":["query"],"params":[{"name":"query","type":"string","required":false,"description":"Keep only sets whose name or code contains this.","on_invalid":"reject","example":"horizons","aliases":["q"]}],"returns":"rows[]: id, code, name, label, parent_set_code, url.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"horizons"}},{"name":"set","description":"All cards of one set with tabletop USD and MTGO tix prices, daily and weekly change in each market, rarity, collector number and finish; the set's sections and its total value.","required_params":["set"],"optional_params":["subset","limit","offset"],"params":[{"name":"set","type":"string","required":true,"description":"A set code from the `sets` action (MH2) or a set's full name (Modern Horizons 2).","on_invalid":"reject","example":"MH2","aliases":["set_code","set_name"]},{"name":"subset","type":"string","required":false,"description":"One of the set's sections as named in the set's subsets list, e.g. 'Main Set Foils', 'Showcase', 'Sealed', 'All Cards'. Omit for the main set.","on_invalid":"reject","example":"Main Set Foils"},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (the whole set is read either way).","on_invalid":"reject","example":100,"minimum":1,"maximum":2000},{"name":"offset","type":"integer","required":false,"description":"Skip this many rows first.","on_invalid":"reject","default":0,"example":100,"minimum":0,"maximum":100000}],"returns":"set, subset, set_value_paper_usd, set_value_online_tix, subsets[]{name, cards, url}, rows[]: name, card_id, card_uuid, set_code, collector_number, rarity, foil, finish, subset, paper_price_usd, paper_daily_change_usd, paper_daily_change_percent, paper_weekly_change_usd, paper_weekly_change_percent, online_price_tix, online_daily_change_tix, online_daily_change_percent, online_weekly_change_tix, online_weekly_change_percent, image, url. meta.extra: total, offset, limit.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"set":"MH2"}},{"name":"set_history","description":"Daily history of a whole set's total value, tabletop in USD and MTGO in tix: the same chart the set's page draws.","required_params":["set"],"optional_params":["subset_id","market","days"],"params":[{"name":"set","type":"string","required":true,"description":"A set code from `sets` (e.g. MH2).","on_invalid":"reject","example":"MH2","aliases":["set_code"]},{"name":"subset_id","type":"string","required":false,"description":"The subset key, as in `set` row.subset (main_set by default).","on_invalid":"reject","default":"main_set","example":"main_set"},{"name":"market","type":"enum","required":false,"description":"Which price series to return.","on_invalid":"reject","allowed_values":[{"value":"both","label":"Tabletop and MTGO, as two named series"},{"value":"paper","label":"Tabletop prices in USD"},{"value":"online","label":"Magic Online prices in tix"}],"default":"both","example":"paper"},{"name":"days","type":"integer","required":false,"description":"Only the most recent N daily points. Omit for the full history since the card's release.","on_invalid":"reject","example":90,"minimum":1,"maximum":20000}],"returns":"set_code, subset_id, paper{market, currency:'USD', points, first_date, last_date, latest, min, max, history[]{date, price}}, online{...}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"set":"MH2"}},{"name":"movers","description":"Today's and this week's biggest price risers and fallers for a format or a set, in tabletop USD or MTGO tix.","required_params":[],"optional_params":["market","format","direction","period","limit"],"params":[{"name":"market","type":"enum","required":false,"description":"paper = tabletop prices in USD; online = Magic Online prices in tix (also accepted: tabletop, mtgo, tix).","on_invalid":"reject","allowed_values":[{"value":"paper","label":"Tabletop prices in USD"},{"value":"online","label":"Magic Online prices in tix"}],"default":"paper","example":"online"},{"name":"format","type":"string","required":false,"description":"A format (standard, modern, pioneer, pauper, legacy, vintage, all) or a recent set code (mh3).","on_invalid":"reject","default":"all","example":"modern"},{"name":"direction","type":"enum","required":false,"description":"Pick one side and get up to 50 rows. Omit for the site's top 10 winners and losers of the day and week.","on_invalid":"reject","allowed_values":[{"value":"winners","label":"Biggest risers"},{"value":"losers","label":"Biggest fallers"}],"example":"winners"},{"name":"period","type":"enum","required":false,"description":"Change window: daily or weekly. Used together with direction.","on_invalid":"reject","allowed_values":[{"value":"daily","label":"Change over one day"},{"value":"weekly","label":"Change over one week"}],"default":"daily","example":"weekly"},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (the whole set is read either way).","on_invalid":"reject","example":100,"minimum":1,"maximum":2000}],"returns":"tables[]{title, direction, period, rows[]{rank, name, card_id, set_code, collector_number, finish, foil, variant, market, currency, price_usd or price_tix, change_usd or change_tix, change_percent, url}}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"format":"modern"}},{"name":"staples","description":"The most played cards in a format: rank, percent of decks and average copies played, overall or by card type.","required_params":["format"],"optional_params":["category","limit"],"params":[{"name":"format","type":"string","required":true,"description":"A format name (see `formats`).","on_invalid":"reject","example":"modern"},{"name":"category","type":"enum","required":false,"description":"Which staples table.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All cards"},{"value":"creatures","label":"Creatures"},{"value":"spells","label":"Spells"},{"value":"lands","label":"Lands"}],"default":"all","example":"creatures"},{"name":"limit","type":"integer","required":false,"description":"Return at most this many rows (the whole set is read either way).","on_invalid":"reject","example":100,"minimum":1,"maximum":2000}],"returns":"rows[]: rank, name, card_id, set_code, mana_cost, mana_cost_text, percent_of_decks, avg_copies, url.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"format":"modern"}},{"name":"metagame","description":"The metagame of a format: each archetype's share of the field, number of decks counted, tabletop and MTGO deck price and key cards, over 7 to 365 days, for tabletop or MTGO results.","required_params":["format"],"optional_params":["market","period","page"],"params":[{"name":"format","type":"string","required":true,"description":"Format, e.g. standard, modern, pioneer, historic, explorer, timeless, alchemy, pauper, legacy, vintage, penny_dreadful, premodern, duel_commander, commander, brawl.","on_invalid":"reject","example":"modern"},{"name":"market","type":"enum","required":false,"description":"paper = tabletop prices in USD; online = Magic Online prices in tix (also accepted: tabletop, mtgo, tix).","on_invalid":"reject","allowed_values":[{"value":"paper","label":"Tabletop prices in USD"},{"value":"online","label":"Magic Online prices in tix"}],"default":"paper","example":"online"},{"name":"period","type":"enum","required":false,"description":"Metagame window in days: 7, 14, 30, 90 or 365.","on_invalid":"reject","allowed_values":[{"value":"7","label":"Last 7 days"},{"value":"14","label":"Last 14 days"},{"value":"30","label":"Last 30 days (site default)"},{"value":"90","label":"Last 90 days"},{"value":"365","label":"Last 365 days"}],"default":"30","example":"90"},{"name":"page","type":"integer","required":false,"description":"Page number. meta.extra.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000}],"returns":"rows[]: archetype_id, name, slug, url, colors, meta_share_percent, decks_counted, paper_price_usd, online_price_tix, key_cards[], image. meta.extra: market, period_days, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"format":"modern"}},{"name":"archetype","description":"One archetype's representative deck (cards, totals, event, date and source) and the most recent similar decks that made tournament results.","required_params":["archetype"],"optional_params":[],"params":[{"name":"archetype","type":"string","required":true,"description":"An archetype slug from metagame rows, or an mtggoldfish.com/archetype/<slug> URL.","on_invalid":"reject","example":"modern-eldrazi-ramp","aliases":["slug","url"]}],"returns":"deck{archetype, deck_id, name, author, format, event, event_url, place, record, source, source_url, date, rarity_counts, paper_price_usd, online_price_tix, commander, decklist{maindeck[]{quantity, name}, sideboard[]}, similar_decks[]{event{name, url, date}, place, deck_name, deck_id, pilot, paper_price_usd, online_price_tix}}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"archetype":"modern-eldrazi-ramp"}},{"name":"deck","description":"A full decklist: name, author, event and placing, date, total price in USD and tix, card list with quantity and each card's unit price in both markets.","required_params":["deck_id"],"optional_params":["include_prices"],"params":[{"name":"deck_id","type":"integer","required":true,"description":"A deck id from deck_search, tournament or archetype rows, or an mtggoldfish.com/deck/<id> URL.","on_invalid":"reject","example":8035155,"aliases":["id","url"]},{"name":"include_prices","type":"boolean","required":false,"description":"Add each card's unit price in USD and tix (two more upstream reads). false = list and totals only.","on_invalid":"reject","default":true,"example":false}],"returns":"deck{deck_id, name, author, format, event, event_url, place, record, source, source_url, date, date_iso, rarity_counts, paper_price_usd, online_price_tix, commander, decklist{maindeck[]{quantity, name}, sideboard[]} (the site's plain list; a commander deck lists its commander in maindeck here), cards[]{section (maindeck, sideboard, commander, companion), category, quantity, name, card_id, set_code, foil, variant, card_uuid, mana_cost, line_price_usd, unit_price_usd, line_price_tix, unit_price_tix, url, image}} — line_price = the site's price for the whole line (quantity x unit); unit_price = line / quantity","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"deck_id":8035155}},{"name":"deck_search","description":"Find decks by name, format, player, a card they contain (in the main deck, sideboard or as commander) and date range, among tournament results and user-submitted decks.","required_params":[],"optional_params":["name","format","types","player","card","card_quantity","card_section","date_from","date_to","page"],"params":[{"name":"name","type":"string","required":false,"description":"Text in the deck's name.","on_invalid":"reject","example":"Murktide","aliases":["deck_name","query"]},{"name":"format","type":"string","required":false,"description":"Filter to one format.","on_invalid":"reject","example":"modern"},{"name":"types","type":"enum","required":false,"description":"Which decks to search.","on_invalid":"reject","allowed_values":[{"value":"tournament","label":"Tournament decks"},{"value":"user","label":"User-submitted decks"},{"value":"both","label":"Both"}],"default":"tournament","example":"both"},{"name":"player","type":"string","required":false,"description":"Exact pilot / author name.","on_invalid":"reject","example":"nahuel10"},{"name":"card","type":"string","required":false,"description":"Only decks containing this card.","on_invalid":"reject","example":"Ragavan, Nimble Pilferer","aliases":["card_name"]},{"name":"card_quantity","type":"integer","required":false,"description":"At least this many copies of `card`.","on_invalid":"reject","default":1,"example":4,"minimum":1,"maximum":99},{"name":"card_section","type":"enum","required":false,"description":"Where `card` has to be.","on_invalid":"reject","allowed_values":[{"value":"maindeck","label":"Main deck"},{"value":"sideboard","label":"Sideboard"},{"value":"commander","label":"Commander"}],"default":"maindeck","example":"sideboard"},{"name":"date_from","type":"string","required":false,"description":"Earliest date (YYYY-MM-DD). Default: 30 days before date_to.","on_invalid":"reject","example":"2026-10-01"},{"name":"date_to","type":"string","required":false,"description":"Latest date (YYYY-MM-DD). Default: today.","on_invalid":"reject","example":"2026-11-08"},{"name":"page","type":"integer","required":false,"description":"Page number. meta.extra.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000}],"returns":"rows[]: date, deck_name, deck_id, format, author, source{type: tournament/user, name, url}, url. meta.extra: page, last_page, has_more, date_from, date_to.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"Murktide"}},{"name":"tournaments","description":"Tournaments (MTGO challenges, leagues, paper events) by name, format and date range, with the number of published decklists.","required_params":[],"optional_params":["name","format","date_from","date_to","page"],"params":[{"name":"name","type":"string","required":false,"description":"Text in the tournament name.","on_invalid":"reject","example":"Challenge","aliases":["query"]},{"name":"format","type":"string","required":false,"description":"Filter to one format.","on_invalid":"reject","example":"modern"},{"name":"date_from","type":"string","required":false,"description":"Earliest date (YYYY-MM-DD). Default: 30 days before date_to.","on_invalid":"reject","example":"2026-10-01"},{"name":"date_to","type":"string","required":false,"description":"Latest date (YYYY-MM-DD). Default: today.","on_invalid":"reject","example":"2026-11-08"},{"name":"page","type":"integer","required":false,"description":"Page number. meta.extra.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10000}],"returns":"rows[]: date, name, tournament_id, format, decklists, url. meta.extra: page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"Challenge"}},{"name":"tournament","description":"A tournament's standings: place, deck name and id, colors, pilot, and each deck's price in USD and tix.","required_params":["tournament"],"optional_params":[],"params":[{"name":"tournament","type":"string","required":true,"description":"A numeric tournament id from the tournaments action, a tournament slug, or an mtggoldfish.com/tournament/<id> URL.","on_invalid":"reject","example":"67879","aliases":["tournament_id","id","url"]}],"returns":"tournament{name, format, date, source, source_url, url}, rows[]: place, deck_name, deck_id, pilot, colors, paper_price_usd, online_price_tix, url.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"tournament":"67879"}},{"name":"formats","description":"The format names this API accepts.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: id, name, group.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"mtgmate","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"MTG Mate API scraper - Australian Magic: The Gathering singles: AUD prices, per-SKU stock, foil and non-foil listed separately, every printing of a card, full set lists, the store's buylist in cash and credit, deck pricing, newest stock and format staples.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mtgmate/v1","spec_available":true,"actions":[{"name":"search","description":"Find cards by name across the store: every matching SKU with set, card number, rarity, finish, AUD price, units in stock and image. Foil and non-foil are separate rows. Needs at least 3 characters. The store caps one search at 1000 SKUs; truncated says when that was reached. Filter, sort and page the answer with the parameters below.","required_params":["query"],"optional_params":["set_code","finish","rarity","color","type","language","min_price","max_price","in_stock_only","sort","page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Part of a card name, 3 characters or more.","on_invalid":"reject","example":"lightning bolt","aliases":["q","keyword"]},{"name":"set_code","type":"string","required":false,"description":"Keep these sets only (comma list of codes from the sets action).","on_invalid":"reject","example":"sos","aliases":["set"]},{"name":"finish","type":"string","required":false,"description":"Comma list of nonfoil, foil, etched, glossy. Each finish is its own row, so foil and non-foil never share a price.","on_invalid":"reject","example":"foil"},{"name":"rarity","type":"string","required":false,"description":"Comma list: common, uncommon, rare, mythic, special, timeshifted.","on_invalid":"reject","example":"mythic,rare"},{"name":"color","type":"string","required":false,"description":"Comma list of W, U, B, R, G, C (colorless). A card matches if it has any of them.","on_invalid":"reject","example":"R,G","aliases":["colour"]},{"name":"type","type":"string","required":false,"description":"Part of the type line (Creature, Instant, Legendary, Dragon...).","on_invalid":"reject","example":"Creature"},{"name":"language","type":"string","required":false,"description":"ja (Japanese) or ph (Phyrexian) printings, en for the ordinary ones. Rows return language null for ordinary printings: the store marks only the others.","on_invalid":"reject","example":"ja"},{"name":"min_price","type":"number","required":false,"description":"Minimum price in AUD.","on_invalid":"reject","example":5,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Maximum price in AUD.","on_invalid":"reject","example":50,"minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only SKUs with units for sale. Off by default, so sold-out printings and their prices are included.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. relevance is the store's own order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"stock_desc","label":"stock_desc"},{"value":"stock_asc","label":"stock_asc"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 2000.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":2000}],"returns":"results[]{sku, name, set, set_code, card_number, rarity, finish, foil, language, condition, price_aud, stock, in_stock, colors[], type_line, preorder, is_unique_item, unique_item_note, image_url, url}, count, total, site_total, truncated, page, pages, limit, has_more, sort","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"lightning bolt"}},{"name":"printings","description":"Every printing of one exact card name, including sold-out ones with their last price: set, number, rarity, finish, AUD price and stock per SKU. Use it to find the cheapest copy of a card in Australia or to watch every version of one card.","required_params":["name"],"optional_params":["set_code","finish","rarity","color","type","language","min_price","max_price","in_stock_only","sort","page","limit"],"params":[{"name":"name","type":"string","required":true,"description":"Exact card name.","on_invalid":"reject","example":"Lightning Bolt","aliases":["card"]},{"name":"set_code","type":"string","required":false,"description":"Keep these sets only (comma list of codes from the sets action).","on_invalid":"reject","example":"sos","aliases":["set"]},{"name":"finish","type":"string","required":false,"description":"Comma list of nonfoil, foil, etched, glossy. Each finish is its own row, so foil and non-foil never share a price.","on_invalid":"reject","example":"foil"},{"name":"rarity","type":"string","required":false,"description":"Comma list: common, uncommon, rare, mythic, special, timeshifted.","on_invalid":"reject","example":"mythic,rare"},{"name":"color","type":"string","required":false,"description":"Comma list of W, U, B, R, G, C (colorless). A card matches if it has any of them.","on_invalid":"reject","example":"R,G","aliases":["colour"]},{"name":"type","type":"string","required":false,"description":"Part of the type line (Creature, Instant, Legendary, Dragon...).","on_invalid":"reject","example":"Creature"},{"name":"language","type":"string","required":false,"description":"ja (Japanese) or ph (Phyrexian) printings, en for the ordinary ones. Rows return language null for ordinary printings: the store marks only the others.","on_invalid":"reject","example":"ja"},{"name":"min_price","type":"number","required":false,"description":"Minimum price in AUD.","on_invalid":"reject","example":5,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Maximum price in AUD.","on_invalid":"reject","example":50,"minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only SKUs with units for sale. Off by default, so sold-out printings and their prices are included.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. relevance is the store's own order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"stock_desc","label":"stock_desc"},{"value":"stock_asc","label":"stock_asc"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 2000.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":2000}],"returns":"name, results[]{sku, name, set, set_code, card_number, rarity, finish, foil, language, condition, price_aud, stock, in_stock, colors[], type_line, preorder, is_unique_item, unique_item_note, image_url, url}, count, total, site_total, page, pages, limit, has_more, sort","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"name":"Lightning Bolt"}},{"name":"set","description":"One whole Magic set as the store lists it: every card in every finish with AUD price and stock. Filter, sort and page the answer, or ask up to 2000 rows at once.","required_params":["set_code"],"optional_params":["finish","rarity","color","type","language","min_price","max_price","in_stock_only","sort","page","limit"],"params":[{"name":"set_code","type":"string","required":true,"description":"Set code from the sets action.","on_invalid":"reject","example":"sos","aliases":["set"]},{"name":"finish","type":"string","required":false,"description":"Comma list of nonfoil, foil, etched, glossy. Each finish is its own row, so foil and non-foil never share a price.","on_invalid":"reject","example":"foil"},{"name":"rarity","type":"string","required":false,"description":"Comma list: common, uncommon, rare, mythic, special, timeshifted.","on_invalid":"reject","example":"mythic,rare"},{"name":"color","type":"string","required":false,"description":"Comma list of W, U, B, R, G, C (colorless). A card matches if it has any of them.","on_invalid":"reject","example":"R,G","aliases":["colour"]},{"name":"type","type":"string","required":false,"description":"Part of the type line (Creature, Instant, Legendary, Dragon...).","on_invalid":"reject","example":"Creature"},{"name":"language","type":"string","required":false,"description":"ja (Japanese) or ph (Phyrexian) printings, en for the ordinary ones. Rows return language null for ordinary printings: the store marks only the others.","on_invalid":"reject","example":"ja"},{"name":"min_price","type":"number","required":false,"description":"Minimum price in AUD.","on_invalid":"reject","example":5,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Maximum price in AUD.","on_invalid":"reject","example":50,"minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only SKUs with units for sale. Off by default, so sold-out printings and their prices are included.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Result order. relevance is the store's own order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"stock_desc","label":"stock_desc"},{"value":"stock_asc","label":"stock_asc"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 2000.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":2000}],"returns":"set_code, set, results[]{sku, name, set, set_code, card_number, rarity, finish, foil, language, condition, price_aud, stock, in_stock, colors[], type_line, preorder, is_unique_item, unique_item_note, image_url, url}, count, total, site_total, page, pages, limit, has_more, sort","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"set_code":"sos","limit":20}},{"name":"sets","description":"The store's set directory, newest first: name, code, number of SKUs listed, release date and parent set for commander decks, tokens and bonus sheets.","required_params":[],"optional_params":["query"],"params":[{"name":"query","type":"string","required":false,"description":"Keep sets whose name or code contains this.","on_invalid":"reject","example":"commander","aliases":["q"]}],"returns":"sets[]{name, set_code, card_count, release_date, parent_set_code, url}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"commander"}},{"name":"card","description":"One printing in full: AUD price, units in stock, finish, rarity, mana cost, rules text, set and number, plus the other printings in stock with their prices and what buyers of this card also bought. Give url, or name + set_code + card_number.","required_params":[],"optional_params":["url","name","set_code","card_number","finish","language"],"params":[{"name":"url","type":"string","required":false,"description":"The card's page, from any row's url.","on_invalid":"reject","example":"https://www.mtgmate.com.au/cards/Sword_of_Feast_and_Famine/2XM/296"},{"name":"name","type":"string","required":false,"description":"Card name, with set_code and card_number.","on_invalid":"reject","example":"Sword of Feast and Famine","aliases":["card"]},{"name":"set_code","type":"string","required":false,"description":"Set code.","on_invalid":"reject","example":"2xm","aliases":["set"]},{"name":"card_number","type":"string","required":false,"description":"Collector number from search.","on_invalid":"reject","example":"296","aliases":["number"]},{"name":"finish","type":"string","required":false,"description":"nonfoil (default), foil, etched or glossy.","on_invalid":"reject","example":"foil"},{"name":"language","type":"string","required":false,"description":"ja or ph for that printing; leave out otherwise.","on_invalid":"reject","example":"ja"}],"returns":"card{sku, name, printing_name, set, set_code, card_number, rarity, finish, foil, language, condition, price_aud, price_source, availability, in_stock, stock, oracle_text, mana_cost, image_url, url}, other_printings[]{set, set_code, card_number, rarity, finish, foil, language, price_aud, stock, in_stock, url}, also_bought[]{name, set_code, card_number, finish, language, image_url, url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.mtgmate.com.au/cards/Sword_of_Feast_and_Famine/2XM/296"}},{"name":"stock","description":"Live AUD price and units in stock for one SKU (the sku on any row). The cheapest way to watch a card you already know.","required_params":["sku"],"optional_params":[],"params":[{"name":"sku","type":"string","required":true,"description":"The sku from search, printings or set.","on_invalid":"reject","example":"5acb7f4a-5e71-51e7-89f5-1aae02f79c32","aliases":["id"]}],"returns":"sku, price_aud, stock, in_stock","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"5acb7f4a-5e71-51e7-89f5-1aae02f79c32"}},{"name":"buylist","description":"What MTG Mate pays for cards: cash and store-credit price in AUD and how many it wants, for Near Mint copies. Without set_code it returns the store's hot list; with set_code, the cards it is buying from that set.","required_params":[],"optional_params":["set_code","min_cash","limit"],"params":[{"name":"set_code","type":"string","required":false,"description":"Set code; leave out for the hot list.","on_invalid":"reject","example":"sos","aliases":["set"]},{"name":"min_cash","type":"number","required":false,"description":"Keep offers paying at least this cash price (AUD).","on_invalid":"reject","example":2,"minimum":0},{"name":"limit","type":"integer","required":false,"description":"Maximum rows.","on_invalid":"reject","default":500,"example":100,"minimum":1,"maximum":1000}],"returns":"results[]{name, set, finish, foil, cash_aud, credit_aud, wanted, condition, image_url}, count, total, source","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"set_code":"sos"}},{"name":"decklist","description":"Price a whole deck at MTG Mate. Paste one card per line (4 Lightning Bolt); the answer lists up to 10 in-stock printings per card with price and stock, the store's suggested pick, the deck total at that pick, and the cards it cannot fill.","required_params":["decklist"],"optional_params":[],"params":[{"name":"decklist","type":"string","required":true,"description":"One card per line, exact names, up to 5000 characters.","on_invalid":"reject","example":"4 Lightning Bolt\n2 Sol Ring","aliases":["deck"]}],"returns":"cards[]{name, quantity_filled, cheapest_aud, printings[]{sku, printing_name, set, set_code, card_number, rarity, finish, foil, language, price_aud, stock, in_stock, suggested_quantity, url}}, not_available[], short_supply[], suggested_total_aud","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"decklist":"4 Lightning Bolt\n2 Sol Ring"}},{"name":"recently_added","description":"The newest stock added to the store, with the day it was added: name, set, number, finish and link. The store's feed carries no price; use card or stock for one. Last 100 or last 1000.","required_params":[],"optional_params":["count"],"params":[{"name":"count","type":"enum","required":false,"description":"How many of the latest additions.","on_invalid":"reject","allowed_values":[{"value":"100","label":"Last 100"},{"value":"1000","label":"Last 1000"}],"default":"100","example":"100"}],"returns":"results[]{name, set_code, card_number, finish, foil, language, added_on, image_url, url}, count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"count":"100"}},{"name":"staples","description":"The cards MTG Mate lists as staples for a format, grouped by card type, with the store's last update date. Use printings for prices.","required_params":["format"],"optional_params":[],"params":[{"name":"format","type":"enum","required":true,"description":"The format.","on_invalid":"reject","allowed_values":[{"value":"standard","label":"standard"},{"value":"premodern","label":"premodern"},{"value":"pioneer","label":"pioneer"},{"value":"modern","label":"modern"},{"value":"legacy","label":"legacy"},{"value":"game_changers","label":"game_changers"},{"value":"cedh","label":"cedh"}],"example":"modern"}],"returns":"format, title, last_updated, sections[]{category, cards[]{name, image_url, url}}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"format":"modern"}}]},{"name":"mtgstocks","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"MTGStocks API scraper - Magic: The Gathering print-level price history back to 2012 per store (TCGplayer USD, Card Kingdom USD, Star City Games USD, Cardmarket EUR), daily and weekly price movers (interests), store offers, set value, sealed product and expected value, market indices, Reserved List, metagame. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mtgstocks/v1","spec_available":true,"actions":[{"name":"search","description":"Find Magic: The Gathering prints by card name: every printing across all sets with the print id, set, rarity and image. 25 rows a page, with the total number of matches.","required_params":["query"],"optional_params":["page","limit","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Card name or part of it.","on_invalid":"reject","example":"lightning bolt","aliases":["q","name","keyword"]},{"name":"page","type":"integer","required":false,"description":"Page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-25).","on_invalid":"reject","default":25,"minimum":1,"maximum":25},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, results[]{print_id, card_id, name, url, rarity, image_url, set{set_id, name, code, set_type}}, count, total_results, page, per_page, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"lightning bolt"}},{"name":"suggest","description":"Search-as-you-type: the closest prints for a partial card name, with set, foil availability and similarity score, plus plain matching card names. The quickest way to turn a name into a print_id.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Start of a card name.","on_invalid":"reject","example":"ragavan","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, results[]{print_id, name, slug, url, rarity, collector_number, foil, reserved_list, image_url, set{set_id, name, code, slug, set_type}, has_foil, has_nonfoil, similarity}, card_names[]{print_id, name, slug}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"lightning bolt"}},{"name":"print","description":"One print in full: the latest low / average / high / market / foil prices at every store MTGStocks tracks (TCGplayer, Card Kingdom, Star City Games, ManaPool in USD; Cardmarket, CardTrader in EUR) with previous-day, week-ago and month-ago prices and percent changes, the all-time high and low, buylist prices, oracle text and format legality, ids for Scryfall and Gatherer, every other printing of the card with its price, and the sealed products that contain it.","required_params":["print_id"],"optional_params":["also_viewed","max_rotations"],"params":[{"name":"print_id","type":"string","required":true,"description":"MTGStocks print id from search, the id-slug (88425-black-lotus) or the print's URL on mtgstocks.com. A print is one printing of a card in one set.","on_invalid":"reject","example":"88425","aliases":["id","url","print"]},{"name":"also_viewed","type":"boolean","required":false,"description":"Also return the prints other users viewed with this one.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"print{print_id, name, slug, url, rarity, collector_number, foil, reserved_list, image_url, set{set_id, name, code, slug, set_type}, extended_rarity, has_foil, has_nonfoil, flip_card, tournament_legal, multiverse_id, scryfall_id, scryfall_url, edhrec_url, card{card_id, name, mana_cost, mana_value, supertype, subtype, oracle_text, power, toughness, loyalty, reserved_list, lowest_print_id, legality{format:legal|not_legal|banned|restricted}}, all_time_high_tcgplayer{average, date, currency}, all_time_low_tcgplayer{...}, buylist{nm, lp, nm_foil, lp_foil, currency (null: the site states none; use sellers for store buy prices)}, stores{tcgplayer|cardkingdom|starcitygames|manapool|cardmarket|cardtrader: {store, currency, url, url_foil, product_id, price_date, low, average, high, market, foil, foil_low, market_foil, average_previous_day, average_week_ago, average_month_ago, foil_previous_day, foil_week_ago, foil_month_ago, average_change_day_percent, average_change_week_percent, average_change_month_percent, foil_change_*_percent}}, found_in_sealed[], other_printings[], also_viewed[]}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"print_id":"1"}},{"name":"price_history","description":"A print's daily price history for one store: TCGplayer back to 2012 (USD: low, average, market, foil, market foil), Cardmarket back to 2017 (EUR), Card Kingdom and Star City Games (USD retail: average and foil). One series per price type with min, max and change over the window; cut it by days or dates.","required_params":["print_id"],"optional_params":["store","series","days","date_from","date_to","max_rotations"],"params":[{"name":"print_id","type":"string","required":true,"description":"MTGStocks print id from search, the id-slug (88425-black-lotus) or the print's URL on mtgstocks.com. A print is one printing of a card in one set.","on_invalid":"reject","example":"88425","aliases":["id","url","print"]},{"name":"store","type":"enum","required":false,"description":"Whose prices. Each store has one currency, stated in the response.","on_invalid":"reject","allowed_values":[{"value":"tcgplayer","label":"TCGplayer (USD)"},{"value":"cardmarket","label":"Cardmarket (EUR)"},{"value":"cardkingdom","label":"Card Kingdom (USD)"},{"value":"starcitygames","label":"Star City Games (USD)"}],"default":"tcgplayer"},{"name":"series","type":"string","required":false,"description":"Comma-separated series to return: low, average, high, market, foil, market_foil. Default: every series the store publishes.","on_invalid":"reject","example":"average,foil"},{"name":"days","type":"integer","required":false,"description":"Only the last N days (default: the whole history MTGStocks has).","on_invalid":"reject","example":365,"minimum":1,"maximum":20000},{"name":"date_from","type":"string","required":false,"description":"Only points on or after this date (YYYY-MM-DD).","on_invalid":"reject","example":"2024-01-01"},{"name":"date_to","type":"string","required":false,"description":"Only points on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2025-12-31"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"print_id, store, currency, series[]{series (low|average|high|market|foil|market_foil), points_count, first_date, last_date, first_price, latest_price, min_price, max_price, change_percent, points[]{date, price}}, series_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"print_id":"1","days":30}},{"name":"sellers","description":"Current offers for a print across the stores MTGStocks tracks (Card Kingdom, Star City Games, ABU Games, ManaPool, CardTrader, Hareruya and more): condition, foil, sell price, buy price, buying quantity, stock and the store's own link. Each row states its own currency (USD, EUR, GBP, CAD, JPY).","required_params":["print_id"],"optional_params":["store","condition","foil","currency","max_rotations"],"params":[{"name":"print_id","type":"string","required":true,"description":"MTGStocks print id from search, the id-slug (88425-black-lotus) or the print's URL on mtgstocks.com. A print is one printing of a card in one set.","on_invalid":"reject","example":"88425","aliases":["id","url","print"]},{"name":"store","type":"string","required":false,"description":"Only this store.","on_invalid":"reject","example":"cardkingdom"},{"name":"condition","type":"string","required":false,"description":"Only this condition (NM, LP, MP, HP, DMG).","on_invalid":"reject","example":"NM"},{"name":"foil","type":"boolean","required":false,"description":"true = foil only, false = non-foil only.","on_invalid":"reject"},{"name":"currency","type":"string","required":false,"description":"Only offers in this currency.","on_invalid":"reject","example":"USD"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"print_id, offers[]{store, condition, foil, sell_price, buy_price, buying_quantity, inventory_stock, currency, url}, count, stores[]{store, offers}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"print_id":"1"}},{"name":"interests","description":"The price-movers table MTGStocks publishes each day: every print whose price moved today or this week (about 7,000 rows), with the current and past price and the percent change. Choose average or market price, regular or foil, USD (TCGplayer) or EUR (Cardmarket, average only); filter by direction, percent and amount, price, set, set type, format legality, Reserved List and release state.","required_params":[],"optional_params":["price_type","card_type","currency","period","direction","min_percent","min_difference","price_min","price_max","set_code","set_type","format","reserved","released","tournament_legal","include_hidden","sort","page","limit","max_rotations"],"params":[{"name":"price_type","type":"enum","required":false,"description":"Which price moved.","on_invalid":"reject","allowed_values":[{"value":"average","label":"Average price"},{"value":"market","label":"Market price"}],"default":"average"},{"name":"card_type","type":"enum","required":false,"description":"Finish.","on_invalid":"reject","allowed_values":[{"value":"regular","label":"Non-foil"},{"value":"foil","label":"Foil"}],"default":"regular"},{"name":"currency","type":"enum","required":false,"description":"Which market's table.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"TCGplayer prices, USD"},{"value":"EUR","label":"Cardmarket prices, EUR (average only)"}],"default":"USD"},{"name":"period","type":"enum","required":false,"description":"Comparison window.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Day and week rows"},{"value":"day","label":"Moved today"},{"value":"week","label":"Moved this week"}],"default":"all"},{"name":"direction","type":"enum","required":false,"description":"Direction of the move.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Rises and falls"},{"value":"gainers","label":"Rises only"},{"value":"losers","label":"Falls only"}],"default":"all"},{"name":"min_percent","type":"number","required":false,"description":"Smallest absolute percent change.","on_invalid":"reject","example":20,"minimum":0},{"name":"min_difference","type":"number","required":false,"description":"Smallest absolute price change, in the table's currency.","on_invalid":"reject","example":1,"minimum":0},{"name":"price_min","type":"number","required":false,"description":"Lowest current price. Use it to drop near-zero prints whose percentages are huge.","on_invalid":"reject","example":2,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest current price.","on_invalid":"reject","example":100,"minimum":0},{"name":"set_code","type":"string","required":false,"description":"Only this set (code, e.g. MH3).","on_invalid":"reject","example":"MH3"},{"name":"set_type","type":"string","required":false,"description":"Only this set type (expansion, masters, commander, ...).","on_invalid":"reject","example":"expansion"},{"name":"format","type":"enum","required":false,"description":"Only cards legal (or restricted) in this format.","on_invalid":"reject","allowed_values":[{"value":"standard","label":"standard"},{"value":"pioneer","label":"pioneer"},{"value":"modern","label":"modern"},{"value":"legacy","label":"legacy"},{"value":"vintage","label":"vintage"},{"value":"commander","label":"commander"},{"value":"pauper","label":"pauper"},{"value":"premodern","label":"premodern"},{"value":"oldschool","label":"oldschool"},{"value":"alchemy","label":"alchemy"},{"value":"historic","label":"historic"},{"value":"explorer","label":"explorer"},{"value":"timeless","label":"timeless"},{"value":"brawl","label":"brawl"},{"value":"standardbrawl","label":"standardbrawl"},{"value":"competitivebrawl","label":"competitivebrawl"},{"value":"penny","label":"penny"},{"value":"duel","label":"duel"},{"value":"oathbreaker","label":"oathbreaker"},{"value":"paupercommander","label":"paupercommander"},{"value":"predh","label":"predh"},{"value":"future","label":"future"},{"value":"gladiator","label":"gladiator"},{"value":"tlr","label":"tlr"}],"example":"modern"},{"name":"reserved","type":"enum","required":false,"description":"Reserved List filter.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any"},{"value":"only","label":"Reserved List only"},{"value":"exclude","label":"Exclude Reserved List"}],"default":"all"},{"name":"released","type":"enum","required":false,"description":"Release state.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any"},{"value":"only","label":"Released only"},{"value":"exclude_recent","label":"Exclude recent releases"}],"default":"all"},{"name":"tournament_legal","type":"enum","required":false,"description":"Tournament-legal printings.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any"},{"value":"legal","label":"Tournament legal"},{"value":"not_legal","label":"Not tournament legal"}],"default":"all"},{"name":"include_hidden","type":"boolean","required":false,"description":"Include prints the site hides from its default view (promos, oddities).","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Order of rows.","on_invalid":"reject","allowed_values":[{"value":"site","label":"The site's order"},{"value":"percent_desc","label":"Largest % rise first"},{"value":"percent_asc","label":"Largest % fall first"},{"value":"amount_desc","label":"Largest amount rise first"},{"value":"amount_asc","label":"Largest amount fall first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"}],"default":"site"},{"name":"page","type":"integer","required":false,"description":"Page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-500).","on_invalid":"reject","default":50,"minimum":1,"maximum":500},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"date, price_type, card_type, currency, period, results[]{print_id, name, slug, url, rarity, collector_number, foil, reserved_list, image_url, set{set_id, name, code, slug, set_type}, foil, period, present_price, past_price, change_percent, change_amount, released, recent_release, tournament_legal, promo, legality{}, shown_by_default}, count, total, page, limit, has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"limit":10}},{"name":"sets","description":"Every Magic set MTGStocks tracks (about 450): id, code, type, release date, and whether it has sealed product and expected value. Newest first; filter by name or type.","required_params":[],"optional_params":["query","set_type","has_sealed","has_expected_value","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Part of a set name or code.","on_invalid":"reject","example":"modern horizons","aliases":["q","name"]},{"name":"set_type","type":"string","required":false,"description":"Only this set type.","on_invalid":"reject","example":"expansion"},{"name":"has_sealed","type":"boolean","required":false,"description":"Only sets with sealed product.","on_invalid":"reject"},{"name":"has_expected_value","type":"boolean","required":false,"description":"Only sets with expected-value data.","on_invalid":"reject"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"sets[]{set_id, name, slug, code, set_type, release_date, url, has_sealed, has_expected_value, has_compass}, count, set_types[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"modern horizons"}},{"name":"set","description":"One set's card list with each print's latest prices at TCGplayer (USD), Cardmarket (EUR) and Card Kingdom (USD), plus the set's biggest 7-day gainers and losers. Filter by rarity, name, foil or Reserved List; sort by price.","required_params":["set_id"],"optional_params":["query","rarity","reserved","sort","page","limit","max_rotations"],"params":[{"name":"set_id","type":"string","required":true,"description":"Set id from `sets`, id-slug (4-innistrad) or the set's URL.","on_invalid":"reject","example":"4","aliases":["id","set","url"]},{"name":"query","type":"string","required":false,"description":"Part of a card name.","on_invalid":"reject","example":"garruk","aliases":["q","name"]},{"name":"rarity","type":"enum","required":false,"description":"Only this rarity.","on_invalid":"reject","allowed_values":[{"value":"C","label":"common"},{"value":"U","label":"uncommon"},{"value":"R","label":"rare"},{"value":"M","label":"mythic"},{"value":"L","label":"land"},{"value":"S","label":"special"}]},{"name":"reserved","type":"boolean","required":false,"description":"Only Reserved List cards.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Order of rows.","on_invalid":"reject","allowed_values":[{"value":"site","label":"The site's order"},{"value":"price_desc","label":"Highest TCGplayer average first"},{"value":"price_asc","label":"Lowest TCGplayer average first"},{"value":"name_asc","label":"Name A to Z"}],"default":"site"},{"name":"page","type":"integer","required":false,"description":"Page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"set{set_id, name, slug, code, set_type, release_date, url, has_sealed, has_expected_value, expected_value_note}, results[]{print_id, name, url, rarity, collector_number, foil, reserved_list, reprint, filter_tags, image_url, tcgplayer_usd{average, market, foil, market_foil, average_previous_day, average_week_ago}, cardmarket_eur{average, market, foil}, cardkingdom_usd{...}}, count, total, page, has_more, gainers_7d[]{print_id, name, foil, price, change_percent}, losers_7d[]","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"set_id":"4"}},{"name":"set_market","description":"The total market value of every set today, with its 7-day and 30-day change: what the whole set is worth at TCGplayer prices (USD), on the site's own daily snapshot. Regular or foil.","required_params":[],"optional_params":["foil","set_type","sort","limit","max_rotations"],"params":[{"name":"foil","type":"boolean","required":false,"description":"true = the foil value table.","on_invalid":"reject","default":false},{"name":"set_type","type":"string","required":false,"description":"Only this set type.","on_invalid":"reject","example":"expansion"},{"name":"sort","type":"enum","required":false,"description":"Order of rows.","on_invalid":"reject","allowed_values":[{"value":"value_desc","label":"Highest total value first"},{"value":"change_7d_desc","label":"Largest 7-day rise first"},{"value":"change_7d_asc","label":"Largest 7-day fall first"},{"value":"change_30d_desc","label":"Largest 30-day rise first"},{"value":"change_30d_asc","label":"Largest 30-day fall first"}],"default":"value_desc"},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"date, foil, currency (USD), market_total, sets[]{set_id, name, slug, code, set_type, release_date, prints, total_value, change_7d_percent, change_30d_percent}, count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"set_type":"expansion"}},{"name":"set_market_history","description":"The last 30 days of the whole-market value of Magic singles at TCGplayer prices (USD), and optionally one set's value on each of those days.","required_params":[],"optional_params":["set_id","max_rotations"],"params":[{"name":"set_id","type":"integer","required":false,"description":"Also return this set's value on each day.","on_invalid":"reject","example":4},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"currency, days[]{date, market_total, set{set_id, total_value, change_7d_percent, change_30d_percent}}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"set_id":4}},{"name":"sealed","description":"Sealed product (booster boxes, packs, bundles, Commander decks) with its latest TCGplayer price. Search the whole catalogue by name or list one set.","required_params":[],"optional_params":["query","set_id","page","limit","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Part of a product or set name.","on_invalid":"reject","example":"booster box","aliases":["q","name"]},{"name":"set_id","type":"string","required":false,"description":"Only this set's products.","on_invalid":"reject","example":"4"},{"name":"page","type":"integer","required":false,"description":"Page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-500).","on_invalid":"reject","default":100,"minimum":1,"maximum":500},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{sealed_id, name, slug, url, type, release_date, image_url, tcgplayer_usd{low, average, market}, cardkingdom_retail_usd, set{}}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"booster box"}},{"name":"sealed_product","description":"One sealed product: latest prices at TCGplayer (USD), Cardmarket (EUR), Card Kingdom, Star City Games, ManaPool and CardTrader where published, all-time high and low, and the percent change over a day, week and month.","required_params":["sealed_id"],"optional_params":["max_rotations"],"params":[{"name":"sealed_id","type":"string","required":true,"description":"Sealed product id from `sealed`, id-slug or the product's URL.","on_invalid":"reject","example":"915","aliases":["id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{sealed_id, name, slug, url, type, image_url, set{}, contains[], all_time_high_tcgplayer{}, all_time_low_tcgplayer{}, tcgplayer_usd{}, stores{}, change_previous_day{average_percent, market_percent}, change_week{}, change_month{}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"sealed_id":"915"}},{"name":"sealed_history","description":"A sealed product's daily price history at TCGplayer (USD) or Cardmarket (EUR), or the daily history of its expected value: what the contents were worth at singles prices (USD), with averages by rarity.","required_params":["sealed_id"],"optional_params":["store","kind","series","days","date_from","date_to","max_rotations"],"params":[{"name":"sealed_id","type":"string","required":true,"description":"Sealed product id, id-slug or URL.","on_invalid":"reject","example":"915","aliases":["id","url"]},{"name":"kind","type":"enum","required":false,"description":"Price, or expected value.","on_invalid":"reject","allowed_values":[{"value":"price","label":"Market price"},{"value":"expected_value","label":"Expected value of the contents (USD)"}],"default":"price"},{"name":"store","type":"enum","required":false,"description":"Store, for kind=price.","on_invalid":"reject","allowed_values":[{"value":"tcgplayer","label":"TCGplayer (USD)"},{"value":"cardmarket","label":"Cardmarket (EUR)"}],"default":"tcgplayer"},{"name":"series","type":"string","required":false,"description":"Comma-separated series to return: low, average, high, market, foil, market_foil. Default: every series the store publishes.","on_invalid":"reject","example":"average,foil"},{"name":"days","type":"integer","required":false,"description":"Only the last N days (default: the whole history MTGStocks has).","on_invalid":"reject","example":365,"minimum":1,"maximum":20000},{"name":"date_from","type":"string","required":false,"description":"Only points on or after this date (YYYY-MM-DD).","on_invalid":"reject","example":"2024-01-01"},{"name":"date_to","type":"string","required":false,"description":"Only points on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2025-12-31"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"sealed_id, kind, store, currency, series[]{series (low|average|high|market|foil|market_foil), points_count, first_date, last_date, first_price, latest_price, min_price, max_price, change_percent, points[]{date, price}}, series_count, rarity_summaries{rarity:{low, market, average}}, rarity_sums{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"sealed_id":"915"}},{"name":"expected_value","description":"Expected value of sealed product against its market price: how much the cards inside are worth versus what the box sells for. One row per set, or a set's full product tree (case, box, pack). USD.","required_params":[],"optional_params":["set_id","query","max_rotations"],"params":[{"name":"set_id","type":"string","required":false,"description":"Return this set's full product tree instead of the summary.","on_invalid":"reject","example":"4"},{"name":"query","type":"string","required":false,"description":"Filter the summary by set name.","on_invalid":"reject","example":"modern horizons","aliases":["q","name"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"currency, results[]{set{set_id, name, slug, release_date, set_type}, products[]{sealed_id, name, slug, expected_value_usd{low, average, high, market}, market_price_usd{...}}}, count; with set_id: set{}, products[]{sealed_id, name, quantity, expected_value_usd, market_price_usd, children[]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"set_id":"4"}},{"name":"all_time","description":"Prints that have just hit an all-time high or all-time low at TCGplayer average price (USD), with the price and the date.","required_params":[],"optional_params":["kind","foil","page","limit","max_rotations"],"params":[{"name":"kind","type":"enum","required":false,"description":"High or low.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Highs and lows"},{"value":"high","label":"All-time highs"},{"value":"low","label":"All-time lows"}],"default":"all"},{"name":"foil","type":"boolean","required":false,"description":"true = foil prints only, false = non-foil only.","on_invalid":"reject"},{"name":"page","type":"integer","required":false,"description":"Page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-500).","on_invalid":"reject","default":100,"minimum":1,"maximum":500},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{kind, price, date, currency (USD), print_id, name, slug, url, rarity, collector_number, foil, reserved_list, image_url, set{set_id, name, code, slug, set_type}}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{}},{"name":"indices","description":"MTGStocks market indices (Reserved List, Power Nine, formats, sets, Commander and more) with value, 1-day, 7-day, 30-day and 1-year change, equal-weight and price-weight, separately in USD and EUR.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"date, indices[]{slug, name, description, tier, kind, parent, usd{date, value_equal_weight, value_price_weight, change_percent_equal_weight{d1,d7,d30,y1}, change_percent_price_weight{...}, constituents, priced, sparkline[]{date, equal_weight, price_weight}}, eur{...}}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"index","description":"One index with its full daily history since 2021 (USD and EUR separately), its children, and the cards in it with price, 30-day change and weight in each currency.","required_params":["slug"],"optional_params":["include_constituents","days","max_rotations"],"params":[{"name":"slug","type":"string","required":true,"description":"Index slug from `indices`.","on_invalid":"reject","example":"reserved-list","aliases":["index","id"]},{"name":"include_constituents","type":"boolean","required":false,"description":"Include the cards in the index.","on_invalid":"reject","default":true},{"name":"days","type":"integer","required":false,"description":"Only the last N days (default: the whole history MTGStocks has).","on_invalid":"reject","example":365,"minimum":1,"maximum":20000},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"index{slug, name, ..., usd{}, eur{}}, base_date, history{usd[]{date, equal_weight, price_weight}, eur[]}, children[], constituents[]{card_id, name, print{}, usd{price, change_30d_percent, weight}, eur{...}, since}, constituents_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"reserved-list"}},{"name":"lists","description":"MTGStocks' curated card lists: Reserved List, Commander Game Changers, cycling lands and others.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"lists[]{list_id, name, slug, description, image_url, url}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"list","description":"One curated list with every print's latest TCGplayer (USD), Cardmarket (EUR) and Card Kingdom (USD) price.","required_params":["list_id"],"optional_params":["query","sort","page","limit","max_rotations"],"params":[{"name":"list_id","type":"string","required":true,"description":"List id from `lists`, id-slug or URL.","on_invalid":"reject","example":"1","aliases":["id","url"]},{"name":"query","type":"string","required":false,"description":"Part of a card name.","on_invalid":"reject","example":"dual","aliases":["q","name"]},{"name":"sort","type":"enum","required":false,"description":"Order of rows.","on_invalid":"reject","allowed_values":[{"value":"site","label":"The site's order"},{"value":"price_desc","label":"Highest TCGplayer average first"},{"value":"price_asc","label":"Lowest TCGplayer average first"},{"value":"name_asc","label":"Name A to Z"}],"default":"site"},{"name":"page","type":"integer","required":false,"description":"Page number.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-1000).","on_invalid":"reject","default":100,"minimum":1,"maximum":1000},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"list{list_id, name, slug, description, image_url}, results[]{print_id, name, slug, url, rarity, collector_number, foil, reserved_list, image_url, set{set_id, name, code, slug, set_type}, tcgplayer_usd{average, market, foil}, cardmarket_eur{...}, cardkingdom_usd{...}}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"list_id":"1"}},{"name":"popular","description":"The five prints most viewed or most bought on MTGStocks right now, with each store's price.","required_params":[],"optional_params":["kind","max_rotations"],"params":[{"name":"kind","type":"enum","required":false,"description":"List.","on_invalid":"reject","allowed_values":[{"value":"viewed","label":"Most viewed"},{"value":"bought","label":"Most bought"}],"default":"viewed"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"kind, results[]{print_id, name, slug, url, image_url, stores{tcgplayer|cardmarket|cardkingdom|starcitygames: {store, currency, average, url}}}, count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"premium_preview","description":"The free teaser rows MTGStocks shows for its Premium screens (trends, penny stocks, underpriced cards, price compare, Secret Lair value and others). About five rows each: the complete screens need a paid MTGStocks account and are not available here.","required_params":["name"],"optional_params":["max_rotations"],"params":[{"name":"name","type":"enum","required":true,"description":"Which teaser.","on_invalid":"reject","allowed_values":[{"value":"trends","label":"trends"},{"value":"penny_stocks","label":"penny stocks"},{"value":"higher_market","label":"higher market"},{"value":"direct_low_differential","label":"direct low differential"},{"value":"secret_lair_value","label":"secret lair value"},{"value":"price_compare","label":"price compare"},{"value":"cardkingdom_rapid_riches","label":"cardkingdom rapid riches"}],"example":"trends"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"name, results[] (the row shape of that screen; `print` objects normalised), count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"trends"}},{"name":"formats","description":"The tournament formats MTGStocks tracks, with the id that metagame, most_played and archetypes accept.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"formats[]{format_id, name, filter}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"metagame","description":"The current metagame of a tournament format: each archetype's share of top placings.","required_params":["format"],"optional_params":["max_rotations"],"params":[{"name":"format","type":"string","required":true,"description":"Tournament format by name (modern, legacy, pioneer, standard, pauper, ...) or id from `formats`.","on_invalid":"reject","example":"modern","aliases":["format_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"format, date, results[]{archetype_id, archetype, colors, placings, total, share_percent, image_url}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"format":"modern"}},{"name":"most_played","description":"The most played cards of a tournament format, with share of decks and the current price of their cheapest print.","required_params":["format"],"optional_params":["max_rotations"],"params":[{"name":"format","type":"string","required":true,"description":"Tournament format by name (modern, legacy, pioneer, standard, pauper, ...) or id from `formats`.","on_invalid":"reject","example":"modern","aliases":["format_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"format, results[]{card_name, quantity, percentage, print{print_id, slug, image_url, url}, tcgplayer_usd{average}, cardmarket_eur{average}}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"format":"modern"}},{"name":"archetypes","description":"The named deck archetypes of a tournament format.","required_params":["format"],"optional_params":["max_rotations"],"params":[{"name":"format","type":"string","required":true,"description":"Tournament format by name (modern, legacy, pioneer, standard, pauper, ...) or id from `formats`.","on_invalid":"reject","example":"modern","aliases":["format_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"format, results[]{archetype_id, name, old}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"format":"modern"}}]},{"name":"mubawab","category":{"id":"real-estate","title":"Real Estate"},"title":"Mubawab API scraper — Morocco and Tunisia real-estate listings (mubawab.ma, mubawab.tn): apartments, houses, villas, riads, land, shops, offices and farms for sale, for rent and as holiday rentals, filtered by city, neighbourhood, price, surface, rooms, bathrooms, amenities and keyword, with price, m², rooms, bedrooms, bathrooms, location, photos and the full listing record: description, characteristics, GPS coordinates and the advertising agency or developer.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mubawab/v1","spec_available":true,"actions":[{"name":"search","description":"Search Mubawab listings in Morocco (default) or Tunisia. Pick the deal (sale, rent, holiday rental), the property type and optionally a city and neighbourhood, then narrow with price, m², rooms, bathrooms, amenities and a keyword. Every filter was measured against the unfiltered count in the same run. `total` is Mubawab's own count. When fewer listings match than a page holds, Mubawab fills the page with unrelated listings from the wider area — this action removes them and says how many in `dropped_padding`.","required_params":[],"optional_params":["country","deal","property_type","city","district","price_min","price_max","area_min","area_max","bedrooms_min","bathrooms_min","keyword","amenities","sort","page","search_url"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Mubawab site to read. Both serve the same page layout; measured on 2026-10-07: 16 199 apartments for sale in Morocco, 5 133 in Tunisia.","on_invalid":"reject","allowed_values":[{"value":"ma","label":"Morocco — mubawab.ma, prices in MAD (DH)"},{"value":"tn","label":"Tunisia — mubawab.tn, prices in TND (DT)"}],"default":"ma","example":"ma","aliases":["market","site"]},{"name":"deal","type":"enum","required":false,"description":"Sale, long-term rent or holiday rental.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale (à vendre)"},{"value":"rent","label":"For rent (à louer)"},{"value":"vacation","label":"Holiday rental (apartment or villa only)"}],"default":"sale","example":"sale","aliases":["transaction","trade_type"]},{"name":"property_type","type":"enum","required":false,"description":"Kind of property, in Mubawab's own categories.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"Apartments (appartements)"},{"value":"house","label":"Houses (maisons)"},{"value":"villa","label":"Villas and luxury houses"},{"value":"riad","label":"Riads"},{"value":"land","label":"Land / plots (terrains)"},{"value":"commercial","label":"Shops and commercial premises (locaux)"},{"value":"office","label":"Offices and business premises (bureaux et commerces)"},{"value":"farm","label":"Farms (fermes)"},{"value":"room","label":"Rooms to rent (chambres) — deal=rent only"}],"default":"apartment","example":"apartment","aliases":["type","category"]},{"name":"city","type":"string","required":false,"description":"City as Mubawab spells it, e.g. 'casablanca', 'Rabat', 'Fès', 'Dar Bouazza', 'tunis'. Accents matter on this site ('fès', 'salé'); for the cities Mubawab links from its home page an unaccented spelling is also accepted. Leave empty for the whole country. An unknown city is an INVALID_PARAM, not an empty list.","on_invalid":"reject","example":"casablanca","aliases":["location","ville"]},{"name":"district","type":"string","required":false,"description":"Neighbourhood inside `city`, as the site prints it on a listing (e.g. 'Maârif', 'Aïn Sebaâ', 'Centre Ville'). Needs `city`. Measured: Casablanca apartments for sale 5 301 → Maârif 191-192.","on_invalid":"reject","example":"Maârif","aliases":["neighbourhood","neighborhood","quartier"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in the site's currency (MAD on .ma, TND on .tn). Measured with price_max: Casablanca apartments for sale 5 301 → 2 324 between 1 000 000 and 2 000 000 MAD; price_min 2 000 000 alone → 1 873.","on_invalid":"ignore","example":1000000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in the site's currency.","on_invalid":"ignore","example":2000000,"minimum":0,"aliases":["max_price"]},{"name":"area_min","type":"integer","required":false,"description":"Smallest surface in m².","on_invalid":"ignore","example":80,"minimum":0,"aliases":["min_area","surface_min"]},{"name":"area_max","type":"integer","required":false,"description":"Largest surface in m².","on_invalid":"ignore","example":150,"minimum":0,"aliases":["max_area","surface_max"]},{"name":"bedrooms_min","type":"integer","required":false,"description":"Minimum number of BEDROOMS (chambres). Measured: the site's own 'rooms' filter counts bedrooms, not pièces — Casablanca apartments for sale 5 301 → 354 at 4+, and every returned row had 4+ bedrooms while some printed fewer pièces.","on_invalid":"ignore","example":3,"minimum":0,"aliases":["min_bedrooms","chambres_min"]},{"name":"bathrooms_min","type":"integer","required":false,"description":"Minimum number of bathrooms.","on_invalid":"ignore","example":2,"minimum":0,"aliases":["min_bathrooms","baths_min"]},{"name":"keyword","type":"string","required":false,"description":"Free-text word searched in the listing text (French works best, e.g. 'piscine', 'vue mer').","on_invalid":"reject","example":"piscine","aliases":["q","query"]},{"name":"amenities","type":"array","required":false,"description":"Listings must have ALL of these: new_development, resale, elevator, storage_room, central_heating, air_conditioning, double_glazing, garage, garden, furnished, pool, security, terrace. 'new_development' = units in new-build projects, 'resale' = second-hand. Unknown values are reported in `warnings`.","on_invalid":"ignore","allowed_values":[{"value":"new_development","label":"new development"},{"value":"resale","label":"resale"},{"value":"elevator","label":"elevator"},{"value":"storage_room","label":"storage room"},{"value":"central_heating","label":"central heating"},{"value":"air_conditioning","label":"air conditioning"},{"value":"double_glazing","label":"double glazing"},{"value":"garage","label":"garage"},{"value":"garden","label":"garden"},{"value":"furnished","label":"furnished"},{"value":"pool","label":"pool"},{"value":"security","label":"security"},{"value":"terrace","label":"terrace"}],"example":["elevator","garage"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Mubawab's default order (paid tiers first)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page. 32 listings per page (31 when the site places a promoted project box on the page). A page past the end returns no rows, `has_more: false`.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"search_url","type":"string","required":false,"description":"Alternative to the parameters above: any Mubawab result-page URL copied from the site (mubawab.ma or mubawab.tn). `page` still applies.","on_invalid":"reject","example":"https://www.mubawab.ma/fr/sd/casablanca/ma%C3%A2rif/appartements-a-vendre","aliases":["url"]}],"returns":"results[]{id, listing_id, url, listing_kind, deal (always null: the card publishes none), title_deal, title, price{amount, currency, display, on_request, is_starting_price, period}, area_m2, rooms, bedrooms, bathrooms, location, district, city, amenities[], description_snippet, images[], image_count, listing_tier, has_whatsapp} + total + count + page + page_size + last_page + has_more + dropped_padding + promoted_boxes_dropped + search_url + query + warnings[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"ma","deal":"sale","property_type":"apartment","city":"casablanca","price_min":1000000,"price_max":2000000}},{"name":"detail","description":"The full record of one Mubawab listing: description, price, m², rooms, bedrooms, bathrooms, every characteristic the page lists (condition, age, floor, orientation, standing, delivery date for new builds…), amenities, all photos, video, GPS coordinates, and the advertiser — agency or developer name, kind and profile link. The page's own schema.org data is returned beside it as an independent second witness, with any disagreement listed in `witness_mismatch`. `deal` (sale / rent / vacation) is the category the page itself files the ad under; when the advertiser's title names the other deal — Mubawab does file sale ads in rent results — `deal_conflict` is true.","required_params":["id"],"optional_params":["country"],"params":[{"name":"id","type":"string","required":true,"description":"The `id` of a search row, passed exactly as returned (e.g. 8429675), or the full listing URL. Moroccan and Tunisian listings share one id space, so a bare id from either market resolves without `country` (measured: a Tunisian id opened on mubawab.ma lands on the mubawab.tn page). Ordinary ads (/a/) and new-build project units (/pa/) are both accepted.","on_invalid":"reject","example":"8429675","value_pattern":"\\d{4,10}|https?://www\\.mubawab\\.(ma|tn)/.*","aliases":["listing_id","url","listing_url"]},{"name":"country","type":"enum","required":false,"description":"Which Mubawab site to read. Both serve the same page layout; measured on 2026-10-07: 16 199 apartments for sale in Morocco, 5 133 in Tunisia.","on_invalid":"reject","allowed_values":[{"value":"ma","label":"Morocco — mubawab.ma, prices in MAD (DH)"},{"value":"tn","label":"Tunisia — mubawab.tn, prices in TND (DT)"}],"default":"ma","example":"ma","aliases":["market","site"]}],"returns":"listing{id, listing_id, url, listing_kind, deal, deal_source, listed_category, listed_property_type, title_deal, deal_conflict, title, description, price{...}, area_m2, rooms, bedrooms, bathrooms, property_type, characteristics{}, amenities[], location{label, district, city, latitude, longitude, location_id, address_locality, country}, seller{id, name, kind, profile_url, logo_url}, images[], image_count, video_url, project_units[], structured_data{}, witness_mismatch[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"8429675"}}]},{"name":"mudah","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Mudah.my API — Malaysia's largest classifieds marketplace: search cars, property, phones, appliances, fashion, jobs, services and pets with the site's own filters, read the full ad with every attribute and photo, and browse a seller's other ads. Prices in MYR. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mudah/v1","spec_available":true,"actions":[{"name":"search","description":"Search Mudah.my across every vertical — cars, motorcycles, property for sale and to rent, phones and electronics, home appliances, furniture, fashion, sports, pets, food, jobs and services — by keyword and/or category, up to 200 ads per call. Each row carries the listing id and URL, title, price in MYR, condition, state and town, when it was posted and last bumped, the cover photo, whether the seller is a private person or a business, and every vertical-specific field mudah publishes (car make/model/mileage/transmission/year, property bedrooms/bathrooms/size, phone brand/model/storage…). Filter by price range, condition, state, town, ad type and seller type, plus any filter the category itself publishes — those are validated against mudah's own schema, so a filter that mudah would quietly ignore is rejected instead.","required_params":[],"optional_params":["query","category","region","area","price_min","price_max","condition","ad_type","seller_type","sort","search_in","filters","limit","offset","include_description","include_images","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. Optional when `category` is given — a bare category browses everything in it.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Category id, slug or name — 1020 / 'cars' / 'Cars'. Parent ids include their children (4100 covers clothes, shoes, watches, health & beauty). The free `categories` action lists every one.","on_invalid":"reject","example":"1020","aliases":["category_id","cat"]},{"name":"region","type":"string","required":false,"description":"Malaysian state or federal territory — id, slug or name ('8', 'selangor', 'Kuala Lumpur'). Free `locations` action lists them.","on_invalid":"reject","example":"8","aliases":["state","region_id"]},{"name":"area","type":"string","required":false,"description":"Town / district inside the region — id, slug or name, and a comma list is allowed ('petaling-jaya,shah-alam'). Free `locations` lists them.","on_invalid":"reject","example":"","aliases":["subarea","area_id","town"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in MYR. (Sent to mudah as its own `price=min-max` range — mudah's raw `price_min` key returns zero rows.)","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in MYR.","on_invalid":"reject","minimum":0},{"name":"condition","type":"string","required":false,"description":"Item condition, as the category publishes it: 'new', 'used', 'like-new', 'refurbished' (electronics) or 'used', 'new', 'recon' (cars). Validated against the category's own list.","on_invalid":"reject","example":""},{"name":"ad_type","type":"enum","required":false,"description":"Which side of the market. Property carries sell, let, auction and newprop; jobs carry sell (vacancies) and buy (CVs).","on_invalid":"reject","allowed_values":[{"value":"sell","label":"For sale (the site default)"},{"value":"let","label":"For rent"},{"value":"buy","label":"Wanted / CVs (jobs)"},{"value":"auction","label":"For auction (property)"},{"value":"newprop","label":"New property launches"}],"aliases":["type"]},{"name":"seller_type","type":"enum","required":false,"description":"Restrict to private sellers or to businesses. Omit for both.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private individuals only"},{"value":"company","label":"Dealers, agencies and shops only"}],"aliases":["adsby"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Most recently posted or bumped first (site default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"},{"value":"relevance","label":"Best match — keyword searches only"}],"default":"newest"},{"name":"search_in","type":"enum","required":false,"description":"Where the keyword is matched.","on_invalid":"reject","allowed_values":[{"value":"title","label":"Match the ad title only (site default)"},{"value":"title_and_description","label":"Match the description too — a wider net"}],"default":"title"},{"name":"filters","type":"string","required":false,"description":"Any other filter the category publishes, as a JSON object {\"make\":\"Toyota\",\"transmission\":\"Auto\"} or a string 'make=Toyota;mileage=0-50000'. Keys and values are checked against mudah's own filter schema and an unknown one is REJECTED — mudah itself would ignore it and return the unfiltered set. Call the free `filters` action for the list.","on_invalid":"reject","example":""},{"name":"limit","type":"integer","required":false,"description":"Rows per call, 1-200. Above 200 mudah silently returns 24, so 200 is the enforced ceiling.","on_invalid":"reject","default":40,"minimum":1,"maximum":200},{"name":"offset","type":"integer","required":false,"description":"Rows to skip. offset + limit must stay within 10 000 — mudah's search window. Past it the service answers 'zero results' rather than an error, so narrow the query instead of paging deeper.","on_invalid":"reject","default":0,"minimum":0,"maximum":9999},{"name":"include_description","type":"boolean","required":false,"description":"Add each row's full description text (bigger response).","on_invalid":"reject","default":false},{"name":"include_images","type":"boolean","required":false,"description":"Add every photo of each row, not just the cover image.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return the contact details of PRIVATE sellers (name, phone, WhatsApp link, and phone/e-mail typed into the description). Off by default: those belong to private individuals. Dealer, agency and shop details are business facts and are always returned.","on_invalid":"reject","default":false}],"returns":"results[]{listing_id, ad_id, title, url, price (MYR number; null when the ad publishes none — price_not_published says so), price_label (mudah's own display line, e.g. 'RM 3,300' or 'Negotiable'), price_kind (price|rent|salary — mudah puts a monthly rent and a job salary in the same field as a sale price), price_not_published, original_price, currency, condition, ad_type (sell|let|…), category{id, name, group_id, group_name}, location{region_id, region, area_id, area}, posted_at, bumped_at, updated_at, expires_at, description (with include_description), image, images[], image_grid, image_count, seller{user_id, name (withheld for private sellers unless include_pii), type (private|pro|company), is_business, business_evidence[], store_id, store_verified, pii_withheld}, details{…every vertical-specific field mudah publishes on the row: make/model/mileage/transmission/manufactured_year for cars, rooms/bathroom/size for property, brand/model/storage/warranty for phones…}}, count, total_results, total_is_capped, offset, limit, has_more, next_offset, filters_applied{}, sort_applied, query, category, count_by_seller_type{private, company}, corrected_keyword, empty_confirmed (only when the search returned nothing: true = mudah answered empty twice from two different exits, so it really is a no-match rather than a throttle)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"1020","limit":20}},{"name":"listing","description":"One ad in full, by its list id or URL: title, complete description, price and the seller's earlier price, condition, category, state and town, every photo in standard and high resolution, every attribute the category defines (car make, model, variant, engine, mileage, transmission and manufactured year; property type, tenure, bedrooms, bathrooms, floor size, facilities, carpark; phone brand, model, storage and warranty; job salary, contract type, experience, education, languages and company details), the dealer's registration number where one is published, shop identity and verification, and how buyers can reach the seller.","required_params":["listing_id"],"optional_params":["include_pii"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The ad's list id — the number at the end of a mudah ad URL (…/tong-sampah-leach-bin-1100l-1500l-98625990.htm → 98625990) — or the full URL. Every search row returns it as listing_id.","on_invalid":"reject","example":"98625990","aliases":["list_id","id","url"]},{"name":"include_pii","type":"boolean","required":false,"description":"Return the contact details of PRIVATE sellers (name, phone, WhatsApp link, and phone/e-mail typed into the description). Off by default: those belong to private individuals. Dealer, agency and shop details are business facts and are always returned.","on_invalid":"reject","default":false}],"returns":"listing{listing_id, ad_id, title, url, price, price_label, price_kind (price|rent|salary), price_not_published, price_note, original_price, currency, description, condition, ad_type, category{id, name, label}, location{region_id, region, area_id, area, label}, posted_at_label, attributes[]{id, label, value, raw_value}, specifications[]{group, id, label, value, verified}, images[], images_hd[], image_count, video_urls[], certified, inspection, seller{user_id, name, type, is_business, business_evidence[], phone, phone_masked, profile_url, avatar_url, chat_enabled, registration_no, store{id, name, verified, logo_url, category_id, since, url_path}, pii_withheld}, contacts[]{type, primary, url, phones[], message}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"98625990"}},{"name":"seller_listings","description":"Every live ad of one seller — a private account by user id, or a dealer / agency / shop by store id — with the same row shape as search, so a dealer's whole stock or a shop's whole catalogue comes back in pages of up to 200.","required_params":[],"optional_params":["store_id","user_id","query","category","region","sort","limit","offset","include_description","include_images","include_pii"],"params":[{"name":"store_id","type":"string","required":false,"description":"The shop's mudah store id (search rows: seller.store_id). One of `store_id` or `user_id` is required.","on_invalid":"reject","example":"1370561","aliases":["store","shop_id"]},{"name":"user_id","type":"string","required":false,"description":"The seller's mudah user id (search rows: seller.user_id).","on_invalid":"reject","example":"","aliases":["seller_id"]},{"name":"query","type":"string","required":false,"description":"Keyword. Optional when `category` is given — a bare category browses everything in it.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Category id, slug or name — 1020 / 'cars' / 'Cars'. Parent ids include their children (4100 covers clothes, shoes, watches, health & beauty). The free `categories` action lists every one.","on_invalid":"reject","example":"1020","aliases":["category_id","cat"]},{"name":"region","type":"string","required":false,"description":"Malaysian state or federal territory — id, slug or name ('8', 'selangor', 'Kuala Lumpur'). Free `locations` action lists them.","on_invalid":"reject","example":"8","aliases":["state","region_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Most recently posted or bumped first (site default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"},{"value":"relevance","label":"Best match — keyword searches only"}],"default":"newest"},{"name":"limit","type":"integer","required":false,"description":"Rows per call, 1-200. Above 200 mudah silently returns 24, so 200 is the enforced ceiling.","on_invalid":"reject","default":40,"minimum":1,"maximum":200},{"name":"offset","type":"integer","required":false,"description":"Rows to skip. offset + limit must stay within 10 000 — mudah's search window. Past it the service answers 'zero results' rather than an error, so narrow the query instead of paging deeper.","on_invalid":"reject","default":0,"minimum":0,"maximum":9999},{"name":"include_description","type":"boolean","required":false,"description":"Add each row's full description text (bigger response).","on_invalid":"reject","default":false},{"name":"include_images","type":"boolean","required":false,"description":"Add every photo of each row, not just the cover image.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return the contact details of PRIVATE sellers (name, phone, WhatsApp link, and phone/e-mail typed into the description). Off by default: those belong to private individuals. Dealer, agency and shop details are business facts and are always returned.","on_invalid":"reject","default":false}],"returns":"results[] (same row shape as search), count, total_results, offset, limit, has_more, next_offset, user_id, store_id","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"store_id":"1370561","limit":20}},{"name":"similar","description":"Mudah's own 'similar ads' for one listing — the comparable live ads it shows next to it, with price, condition highlights, location and photo. Useful for pricing a used item against what the same market is asking right now.","required_params":["listing_id"],"optional_params":["include_pii"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The ad's list id — the number at the end of a mudah ad URL (…/tong-sampah-leach-bin-1100l-1500l-98625990.htm → 98625990) — or the full URL. Every search row returns it as listing_id.","on_invalid":"reject","example":"98625990","aliases":["list_id","id","url"]},{"name":"include_pii","type":"boolean","required":false,"description":"Return the contact details of PRIVATE sellers (name, phone, WhatsApp link, and phone/e-mail typed into the description). Off by default: those belong to private individuals. Dealer, agency and shop details are business facts and are always returned.","on_invalid":"reject","default":false}],"returns":"results[]{listing_id, ad_id, title, url, price, price_label, currency, category{id, name, group_id, group_name}, location{region_id, region, area_id, area}, ad_type, brand, highlights[]{label, value}, image, image_count, seller{is_business, …}}, count, listing_id","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"98625990"}},{"name":"suggest","description":"Mudah's keyword autocomplete: what real buyers type, each suggestion carrying the category it belongs to and the ready-made filter values for it — so a half-typed word becomes a valid search without guessing a category id.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"What the user has typed so far.","on_invalid":"reject","example":"iphone","aliases":["q"]}],"returns":"suggestions[]{suggestion, category_id, category_hint, filters{}, query_params}, count, query","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}},{"name":"categories","description":"Mudah's whole category tree — every group, category and sub-category with its id, name and slug. Free: these ids are what `search` and `filters` take, so nobody has to guess one.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{id, name, slug, children[]{id, name, slug, children[]}}, count, flat[]{id, name, slug, parent_id, parent_name}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"locations","description":"Every Malaysian state and federal territory mudah lists, each with its towns and districts, ids and slugs. Free: these are the values `region` and `area` take.","required_params":[],"optional_params":[],"params":[],"returns":"regions[]{id, name, slug, abbr, areas[]{id, name, slug}}, count, area_count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"filters","description":"Every filter one category publishes, with its key, label, kind (single, multi or range) and the complete list of allowed values — car makes and models, property types and facilities, phone brands, models and storage sizes, job categories and contract types, conditions, sort orders. Free, and the authoritative input for `search`'s `filters` parameter.","required_params":["category"],"optional_params":[],"params":[{"name":"category","type":"string","required":true,"description":"Category id, slug or name whose filters you want.","on_invalid":"reject","example":"1020","aliases":["category_id","cat"]}],"returns":"category{id, name, slug}, filters[]{key, name, label, kind, min, max, values[]{id, name, slug}, value_count}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"1020"}}]},{"name":"music-metadata","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Music Metadata API — search artists, albums, tracks, labels and works; get artist bios & profiles, discographies, top charts, similar artists, song lyrics, cover art and ISRC lookups, powered by MusicBrainz, Cover Art Archive, iTunes, Apple Music charts, TheAudioDB, ListenBrainz and lrclib","version":"2.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/music-metadata/v1","spec_available":true,"actions":[{"name":"search","description":"search artist/album/release/recording/track/label/work (advanced field search supported)","required_params":["query"],"optional_params":["type","limit","offset"],"params":[{"name":"query","type":"string","required":true,"description":"Search text (advanced field search is supported).","on_invalid":"reject","example":"radiohead","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"Which MusicBrainz entity to search.","on_invalid":"reject","allowed_values":[{"value":"artist","label":"Artist / band"},{"value":"release-group","label":"Album (release-group)"},{"value":"album","label":"Album (alias of release-group)"},{"value":"release","label":"Specific release / edition"},{"value":"recording","label":"Recording (a track)"},{"value":"track","label":"Track (alias of recording)"},{"value":"song","label":"Song (alias of recording)"},{"value":"label","label":"Record label"},{"value":"work","label":"Work / composition"}],"default":"artist","example":"artist"},{"name":"limit","type":"integer","required":false,"description":"How many results to return (1-100). Clamped to range.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N results).","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"<plural-entity>[] (e.g. artists[]/recordings[]) each w/ id+name(+artist_credit), count (total), offset, type","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"radiohead","type":"artist"}},{"name":"artist_detail","description":"artist + relationships (members/collaborations), discography, aliases, tags","required_params":["mbid"],"optional_params":["inc"],"params":[{"name":"mbid","type":"string","required":true,"description":"MusicBrainz id (UUID) of the artist. Find it via the search action (`type=artist`) — mbids are entity-specific, an artist id will not resolve here.","on_invalid":"reject","example":"a74b1b7f-71a5-4011-9441-d0b5e4122711","aliases":["id"]},{"name":"inc","type":"string","required":false,"description":"Advanced: override the MusicBrainz 'inc' sub-query (relations/sub-resources to embed, '+'-separated). A tuned default is used when omitted.","on_invalid":"ignore","example":"aliases+tags+genres"}],"returns":"artist record + members[], external_urls{}, release-groups[], aliases, tags, ratings","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"mbid":"a74b1b7f-71a5-4011-9441-d0b5e4122711"}},{"name":"album_detail","description":"release (tracklist+labels+ISRCs+discids) or release-group","required_params":["mbid"],"optional_params":["entity","inc"],"params":[{"name":"mbid","type":"string","required":true,"description":"MusicBrainz id (UUID) of the release. Find it via the search action (`type=release`) — mbids are entity-specific, an artist id will not resolve here.","on_invalid":"reject","example":"4b3d18cc-8937-36f4-8de0-481088be58e6","aliases":["id"]},{"name":"entity","type":"enum","required":false,"description":"Whether the MBID is a single release or a release-group.","on_invalid":"reject","allowed_values":[{"value":"release","label":"A specific release / edition"},{"value":"release-group","label":"The album as a whole (release-group)"}],"default":"release","example":"release"},{"name":"inc","type":"string","required":false,"description":"Advanced: override the MusicBrainz 'inc' sub-query (relations/sub-resources to embed, '+'-separated). A tuned default is used when omitted.","on_invalid":"ignore","example":"aliases+tags+genres"}],"returns":"release: title + tracks[]{title, recording_mbid, isrcs} + labels[] + barcode; release-group: title + primary-type + releases[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"mbid":"4b3d18cc-8937-36f4-8de0-481088be58e6","entity":"release"}},{"name":"track_detail","description":"recording + ISRCs + work-relations + artist credits","required_params":["mbid"],"optional_params":["inc"],"params":[{"name":"mbid","type":"string","required":true,"description":"MusicBrainz id (UUID) of the recording. Find it via the search action (`type=recording`) — mbids are entity-specific, an artist id will not resolve here.","on_invalid":"reject","example":"2321576e-141e-4a00-b403-bfd8da62b17c","aliases":["id"]},{"name":"inc","type":"string","required":false,"description":"Advanced: override the MusicBrainz 'inc' sub-query (relations/sub-resources to embed, '+'-separated). A tuned default is used when omitted.","on_invalid":"ignore","example":"aliases+tags+genres"}],"returns":"recording: title, artist_credit, isrcs[], works[]{title, mbid}, releases[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"mbid":"7c0e3d7c-3944-4b64-87bb-62dba67bea83"}},{"name":"label","description":"label detail (country, label-code, aliases, url-rels)","required_params":["mbid"],"optional_params":["inc"],"params":[{"name":"mbid","type":"string","required":true,"description":"MusicBrainz id (UUID) of the label. Find it via the search action (`type=label`) — mbids are entity-specific, an artist id will not resolve here.","on_invalid":"reject","example":"df7d1c7f-ef95-425f-8eef-445b3d7bcbd9","aliases":["id"]},{"name":"inc","type":"string","required":false,"description":"Advanced: override the MusicBrainz 'inc' sub-query (relations/sub-resources to embed, '+'-separated). A tuned default is used when omitted.","on_invalid":"ignore","example":"aliases+tags+genres"}],"returns":"label: name, type, country, label-code, aliases, external_urls{}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"mbid":"14221f01-8939-4ea0-b8f1-b5a21beae80a"}},{"name":"work_detail","description":"work/composition + ISWC + writer relations","required_params":["mbid"],"optional_params":["inc"],"params":[{"name":"mbid","type":"string","required":true,"description":"MusicBrainz id (UUID) of the work. Find it via the search action (`type=work`) — mbids are entity-specific, an artist id will not resolve here.","on_invalid":"reject","example":"1b4ff597-f43f-3dac-9f76-0e7b7f38d0d2","aliases":["id"]},{"name":"inc","type":"string","required":false,"description":"Advanced: override the MusicBrainz 'inc' sub-query (relations/sub-resources to embed, '+'-separated). A tuned default is used when omitted.","on_invalid":"ignore","example":"aliases+tags+genres"}],"returns":"work: title, iswcs[], writers[]{name, mbid, role}, external_urls{}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"mbid":"1b4ff597-f43f-3dac-9f76-0e7b7f38d0d2"}},{"name":"isrc_lookup","description":"reverse ISRC -> recordings (cross-catalog key)","required_params":["isrc"],"optional_params":["inc"],"params":[{"name":"isrc","type":"string","required":true,"description":"International Standard Recording Code (2 letters, 3 alphanumerics, 7 digits) — e.g. GBAYE9701274.","on_invalid":"reject","example":"GBAYE9701274"},{"name":"inc","type":"string","required":false,"description":"Advanced: override the MusicBrainz 'inc' sub-query (relations/sub-resources to embed, '+'-separated). A tuned default is used when omitted.","on_invalid":"ignore","example":"artist-credits"}],"returns":"isrc, recordings[]{title, artist_credit}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"isrc":"GBAYE9701274"}},{"name":"cover_art","description":"Cover-Art-Archive images (multi-resolution) for a release/release-group","required_params":["mbid"],"optional_params":["entity"],"params":[{"name":"mbid","type":"string","required":true,"description":"MusicBrainz id (UUID) of the release. Find it via the search action (`type=release`) — mbids are entity-specific, an artist id will not resolve here.","on_invalid":"reject","example":"4b3d18cc-8937-36f4-8de0-481088be58e6","aliases":["id"]},{"name":"entity","type":"enum","required":false,"description":"Whether the MBID is a single release or a release-group.","on_invalid":"reject","allowed_values":[{"value":"release","label":"A specific release / edition"},{"value":"release-group","label":"The album as a whole (release-group)"}],"default":"release","example":"release"}],"returns":"mbid, entity, images[]{image, thumbnails, front/back}, front_url, has_art, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"mbid":"4b3d18cc-8937-36f4-8de0-481088be58e6","entity":"release"}},{"name":"itunes_search","description":"iTunes / Apple Music search for artists, albums or songs — returns genre, high-res artwork, a 30s preview URL, price and store link (country-aware)","required_params":["query"],"optional_params":["type","limit","country"],"params":[{"name":"query","type":"string","required":true,"description":"Artist, album or song to search.","on_invalid":"reject","example":"Daft Punk","aliases":["q","term"]},{"name":"type","type":"enum","required":false,"description":"What to search for on the iTunes catalog.","on_invalid":"reject","allowed_values":[{"value":"artist","label":"Artist"},{"value":"album","label":"Album"},{"value":"song","label":"Song / track"},{"value":"track","label":"Song (alias)"},{"value":"music_video","label":"Music video"}],"default":"artist","example":"artist"},{"name":"limit","type":"integer","required":false,"description":"How many results (1-200). Clamped to range.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":200},{"name":"country","type":"enum","required":false,"description":"ISO-3166 alpha-2 storefront/market for the chart or search (common set listed; others fall back to 'us').","on_invalid":"ignore","allowed_values":[{"value":"us","label":"United States"},{"value":"gb","label":"United Kingdom"},{"value":"de","label":"Germany"},{"value":"fr","label":"France"},{"value":"tr","label":"Türkiye"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"jp","label":"Japan"},{"value":"br","label":"Brazil"},{"value":"mx","label":"Mexico"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"nl","label":"Netherlands"},{"value":"se","label":"Sweden"},{"value":"ru","label":"Russia"},{"value":"in","label":"India"},{"value":"kr","label":"South Korea"},{"value":"pl","label":"Poland"},{"value":"ae","label":"UAE"},{"value":"sa","label":"Saudi Arabia"}],"default":"us","example":"us"}],"returns":"results[]{kind, artist_name, collection_name, track_name, genre, release_date, duration_ms, price, preview_url, artwork, url}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Daft Punk","type":"artist"}},{"name":"charts","description":"Apple Music top charts — the most-played songs or albums in a country (updated through the day)","required_params":[],"optional_params":["type","country","limit"],"params":[{"name":"type","type":"enum","required":false,"description":"Which chart to return.","on_invalid":"reject","allowed_values":[{"value":"songs","label":"Top songs"},{"value":"albums","label":"Top albums"}],"default":"songs","example":"songs"},{"name":"country","type":"enum","required":false,"description":"ISO-3166 alpha-2 storefront/market for the chart or search (common set listed; others fall back to 'us').","on_invalid":"ignore","allowed_values":[{"value":"us","label":"United States"},{"value":"gb","label":"United Kingdom"},{"value":"de","label":"Germany"},{"value":"fr","label":"France"},{"value":"tr","label":"Türkiye"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"jp","label":"Japan"},{"value":"br","label":"Brazil"},{"value":"mx","label":"Mexico"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"nl","label":"Netherlands"},{"value":"se","label":"Sweden"},{"value":"ru","label":"Russia"},{"value":"in","label":"India"},{"value":"kr","label":"South Korea"},{"value":"pl","label":"Poland"},{"value":"ae","label":"UAE"},{"value":"sa","label":"Saudi Arabia"}],"default":"us","example":"us"},{"name":"limit","type":"integer","required":false,"description":"Chart depth (1-100). Clamped to range.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"chart[]{rank, name, artist_name, artist_id, genres[], release_date, artwork, url}, country, type, updated, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"songs","country":"us","limit":10}},{"name":"artist_profile","description":"Rich artist profile: biography, genre/style/mood, formed year, label, follower/popularity counts, social links and images (TheAudioDB). Pass the MusicBrainz mbid (from search/artist_detail) for an exact match, or an artist name","required_params":[],"optional_params":["mbid","name"],"params":[{"name":"mbid","type":"string","required":false,"description":"Artist MusicBrainz id (preferred — exact match).","on_invalid":"reject","example":"cc197bad-dc9c-440d-a5b5-d52ba2e14234","aliases":["id"]},{"name":"name","type":"string","required":false,"description":"Artist name (used when no mbid is given).","on_invalid":"reject","example":"Coldplay","aliases":["query","q"]}],"returns":"artist{name, biography, genre, style, mood, formed_year, country, label, popularity, followers, social{}, images{}}, found","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"mbid":"cc197bad-dc9c-440d-a5b5-d52ba2e14234"}},{"name":"artist_top_tracks","description":"An artist's most popular tracks (top 10) with album, duration, genre and music-video link (TheAudioDB)","required_params":["name"],"optional_params":[],"params":[{"name":"name","type":"string","required":true,"description":"Artist name.","on_invalid":"reject","example":"Coldplay","aliases":["query","q"]}],"returns":"artist, tracks[]{rank, track, album, duration_ms, genre, video}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"Coldplay"}},{"name":"similar_artists","description":"Artists similar to a given artist, ranked by a collaborative listening model (ListenBrainz, CC0). Pass the artist's MusicBrainz mbid","required_params":["mbid"],"optional_params":["limit"],"params":[{"name":"mbid","type":"string","required":true,"description":"Artist MusicBrainz id (from search/artist_detail).","on_invalid":"reject","example":"cc197bad-dc9c-440d-a5b5-d52ba2e14234","aliases":["id"]},{"name":"limit","type":"integer","required":false,"description":"How many similar artists (1-100). Clamped.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"mbid, similar_artists[]{name, mbid, type, comment, score}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"mbid":"cc197bad-dc9c-440d-a5b5-d52ba2e14234"}},{"name":"lyrics","description":"Song lyrics — both plain text and time-synced (LRC) when available — for an artist + track (lrclib, open). Optionally pass album+duration for an exact match","required_params":["artist","track"],"optional_params":["album","duration"],"params":[{"name":"artist","type":"string","required":true,"description":"Artist name.","on_invalid":"reject","example":"Daft Punk"},{"name":"track","type":"string","required":true,"description":"Track / song title.","on_invalid":"reject","example":"Get Lucky","aliases":["title"]},{"name":"album","type":"string","required":false,"description":"Album name (improves exact-match precision).","on_invalid":"reject","example":"Random Access Memories"},{"name":"duration","type":"integer","required":false,"description":"Track length in seconds (exact-match key).","on_invalid":"ignore","example":369,"minimum":1}],"returns":"found, artist, track, album, duration, instrumental, plain_lyrics, synced_lyrics","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"artist":"Daft Punk","track":"Get Lucky"}}]},{"name":"musinsa","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Musinsa API — Korea's #1 fashion store: search, brand and category listings, full product records with per-size stock, reviews and the live sales ranking","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/musinsa/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on musinsa.com (무신사 스토어). Each row carries four named prices (normal, sale, coupon, final), the discount, review count and score, sold-out flag and brand. Filters: gender, category, brand, price range, on-sale, minimum discount, colour, size, sold-out inclusion, exclusives, coupon, outlet/boutique store, used listings; ten sort orders. Every filter was measured against the unfiltered total; filters the site silently ignores are not offered.","required_params":["query"],"optional_params":["category","brand","min_price","max_price","on_sale","min_discount","color","size","include_sold_out","exclusive","coupon","store","used","gender","sort","page","page_size"],"params":[{"name":"query","type":"string","required":true,"description":"Search words in Korean or English (e.g. `맨투맨`, `nike`, `패딩`). Full-width / compatibility characters are normalised (NFKC).","on_invalid":"reject","example":"맨투맨","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Musinsa category code: 3 digits per level (e.g. `001` 상의 tops, `001005` 맨투맨/스웨트셔츠, `002` 아우터 outerwear, `003` 바지 trousers, `103` 신발 shoes, `104` 뷰티 beauty). A product's `category_path[].code` is accepted as-is. An unknown code answers an empty result (total 0).","on_invalid":"reject","example":"001005","aliases":["category_code"]},{"name":"brand","type":"string","required":false,"description":"Brand slug as Musinsa writes it in the brand URL musinsa.com/brand/<slug> and in every row's `brand` (e.g. `musinsastandard`, `nike`, `covernat`).","on_invalid":"reject","example":"musinsastandard","aliases":["brand_id"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in KRW, applied by the source to `final_price` (the price shown, after the product coupon and any extra discount).","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in KRW, applied to `final_price` like `min_price`.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"`true` = only discounted products (세일). `false` is the same as leaving it out.","on_invalid":"reject","example":true},{"name":"min_discount","type":"enum","required":false,"description":"Only products whose total discount (`final_discount_rate`, coupon included) is at least this many percent.","on_invalid":"reject","allowed_values":[{"value":"10","label":"10% or more"},{"value":"20","label":"20% or more"},{"value":"30","label":"30% or more"},{"value":"40","label":"40% or more"},{"value":"50","label":"50% or more"},{"value":"60","label":"60% or more"},{"value":"70","label":"70% or more"},{"value":"80","label":"80% or more"}]},{"name":"color","type":"string","required":false,"description":"Musinsa colour code in capitals, as in the site's colour facet (e.g. `BLACK`, `WHITE`, `GRAY`, `NAVY`, `BEIGE`, `IVORY`, `KHAKI`, `SKYBLUE`). An unknown code answers an empty result.","on_invalid":"reject","example":"BLACK"},{"name":"size","type":"enum","required":false,"description":"Standard clothing size (the site's 사이즈 facet).","on_invalid":"reject","allowed_values":[{"value":"XS","label":"XS"},{"value":"S","label":"S"},{"value":"M","label":"M"},{"value":"L","label":"L"},{"value":"XL","label":"XL"},{"value":"XXL","label":"XXL"}]},{"name":"include_sold_out","type":"boolean","required":false,"description":"`true` also returns sold-out (품절) products; by default the site hides them.","on_invalid":"reject","default":false},{"name":"exclusive","type":"boolean","required":false,"description":"`true` = only Musinsa exclusives (단독).","on_invalid":"reject"},{"name":"coupon","type":"boolean","required":false,"description":"`true` = only products with a coupon (쿠폰).","on_invalid":"reject"},{"name":"store","type":"enum","required":false,"description":"Only one Musinsa sub-store.","on_invalid":"reject","allowed_values":[{"value":"outlet","label":"아울렛 outlet"},{"value":"boutique","label":"부티크 boutique / luxury"}]},{"name":"used","type":"boolean","required":false,"description":"`true` = the second-hand (USED 중고) listings instead of new products; rows then carry `used_condition`.","on_invalid":"reject"},{"name":"gender","type":"enum","required":false,"description":"Musinsa's gender filter (the site's 전체 / 남성 / 여성 switch).","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체 all"},{"value":"men","label":"남성 men"},{"value":"women","label":"여성 women"}],"default":"all","aliases":["gf"]},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own sort codes.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"무신사 추천순 popularity (default)"},{"value":"newest","label":"신상품순 newest"},{"value":"discount","label":"할인율순 biggest discount"},{"value":"price_asc","label":"낮은 가격순 final price low to high"},{"value":"price_desc","label":"높은 가격순 final price high to low"},{"value":"reviews","label":"후기순 most reviews"},{"value":"sales_1d","label":"판매순 best-selling, last day"},{"value":"sales_1w","label":"판매순 best-selling, last week"},{"value":"sales_1m","label":"판매순 best-selling, last month"},{"value":"sales_3m","label":"판매순 best-selling, last 3 months"}],"default":"popular"},{"name":"page","type":"integer","required":false,"description":"Result page. The source stops at page 1000 and at its own last page (`total_pages`).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (the site uses 60).","on_invalid":"reject","default":60,"example":60,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"results[]{product_id, title, url, image, brand, brand_name, gender, normal_price (정상가), sale_price (판매가), coupon_price (쿠폰적용가), final_price (the price shown), currency=KRW, discount_rate, final_discount_rate, coupon_discount_rate, extra_discount_amount, option_price_varies, is_sold_out, review_count, review_score_pct (0-100), is_lowest_price, plus_delivery, used_condition, labels[]} + ads[] (sponsored rows, kept apart) + total (the source's count) + total_pages + page + page_size + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"맨투맨"}},{"name":"brand","description":"Every product of one brand on Musinsa (the brand store grid), with the same row shape, filters and sorts as `search`.","required_params":["brand"],"optional_params":["category","min_price","max_price","on_sale","min_discount","color","size","include_sold_out","exclusive","coupon","store","used","gender","sort","page","page_size"],"params":[{"name":"category","type":"string","required":false,"description":"Musinsa category code: 3 digits per level (e.g. `001` 상의 tops, `001005` 맨투맨/스웨트셔츠, `002` 아우터 outerwear, `003` 바지 trousers, `103` 신발 shoes, `104` 뷰티 beauty). A product's `category_path[].code` is accepted as-is. An unknown code answers an empty result (total 0).","on_invalid":"reject","example":"001005","aliases":["category_code"]},{"name":"brand","type":"string","required":true,"description":"Brand slug as Musinsa writes it in the brand URL musinsa.com/brand/<slug> and in every row's `brand` (e.g. `musinsastandard`, `nike`, `covernat`).","on_invalid":"reject","example":"musinsastandard","aliases":["brand_id"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in KRW, applied by the source to `final_price` (the price shown, after the product coupon and any extra discount).","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in KRW, applied to `final_price` like `min_price`.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"`true` = only discounted products (세일). `false` is the same as leaving it out.","on_invalid":"reject","example":true},{"name":"min_discount","type":"enum","required":false,"description":"Only products whose total discount (`final_discount_rate`, coupon included) is at least this many percent.","on_invalid":"reject","allowed_values":[{"value":"10","label":"10% or more"},{"value":"20","label":"20% or more"},{"value":"30","label":"30% or more"},{"value":"40","label":"40% or more"},{"value":"50","label":"50% or more"},{"value":"60","label":"60% or more"},{"value":"70","label":"70% or more"},{"value":"80","label":"80% or more"}]},{"name":"color","type":"string","required":false,"description":"Musinsa colour code in capitals, as in the site's colour facet (e.g. `BLACK`, `WHITE`, `GRAY`, `NAVY`, `BEIGE`, `IVORY`, `KHAKI`, `SKYBLUE`). An unknown code answers an empty result.","on_invalid":"reject","example":"BLACK"},{"name":"size","type":"enum","required":false,"description":"Standard clothing size (the site's 사이즈 facet).","on_invalid":"reject","allowed_values":[{"value":"XS","label":"XS"},{"value":"S","label":"S"},{"value":"M","label":"M"},{"value":"L","label":"L"},{"value":"XL","label":"XL"},{"value":"XXL","label":"XXL"}]},{"name":"include_sold_out","type":"boolean","required":false,"description":"`true` also returns sold-out (품절) products; by default the site hides them.","on_invalid":"reject","default":false},{"name":"exclusive","type":"boolean","required":false,"description":"`true` = only Musinsa exclusives (단독).","on_invalid":"reject"},{"name":"coupon","type":"boolean","required":false,"description":"`true` = only products with a coupon (쿠폰).","on_invalid":"reject"},{"name":"store","type":"enum","required":false,"description":"Only one Musinsa sub-store.","on_invalid":"reject","allowed_values":[{"value":"outlet","label":"아울렛 outlet"},{"value":"boutique","label":"부티크 boutique / luxury"}]},{"name":"used","type":"boolean","required":false,"description":"`true` = the second-hand (USED 중고) listings instead of new products; rows then carry `used_condition`.","on_invalid":"reject"},{"name":"gender","type":"enum","required":false,"description":"Musinsa's gender filter (the site's 전체 / 남성 / 여성 switch).","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체 all"},{"value":"men","label":"남성 men"},{"value":"women","label":"여성 women"}],"default":"all","aliases":["gf"]},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own sort codes.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"무신사 추천순 popularity (default)"},{"value":"newest","label":"신상품순 newest"},{"value":"discount","label":"할인율순 biggest discount"},{"value":"price_asc","label":"낮은 가격순 final price low to high"},{"value":"price_desc","label":"높은 가격순 final price high to low"},{"value":"reviews","label":"후기순 most reviews"},{"value":"sales_1d","label":"판매순 best-selling, last day"},{"value":"sales_1w","label":"판매순 best-selling, last week"},{"value":"sales_1m","label":"판매순 best-selling, last month"},{"value":"sales_3m","label":"판매순 best-selling, last 3 months"}],"default":"popular"},{"name":"page","type":"integer","required":false,"description":"Result page. The source stops at page 1000 and at its own last page (`total_pages`).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (the site uses 60).","on_invalid":"reject","default":60,"example":60,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"results[]{product_id, title, url, image, brand, brand_name, gender, normal_price (정상가), sale_price (판매가), coupon_price (쿠폰적용가), final_price (the price shown), currency=KRW, discount_rate, final_discount_rate, coupon_discount_rate, extra_discount_amount, option_price_varies, is_sold_out, review_count, review_score_pct (0-100), is_lowest_price, plus_delivery, used_condition, labels[]} + ads[] (sponsored rows, kept apart) + total (the source's count) + total_pages + page + page_size + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"musinsastandard"}},{"name":"category","description":"Every product of one Musinsa category (e.g. `001005` 맨투맨/스웨트셔츠, `002` outerwear), with the same row shape, filters and sorts as `search`.","required_params":["category"],"optional_params":["brand","min_price","max_price","on_sale","min_discount","color","size","include_sold_out","exclusive","coupon","store","used","gender","sort","page","page_size"],"params":[{"name":"category","type":"string","required":true,"description":"Musinsa category code: 3 digits per level (e.g. `001` 상의 tops, `001005` 맨투맨/스웨트셔츠, `002` 아우터 outerwear, `003` 바지 trousers, `103` 신발 shoes, `104` 뷰티 beauty). A product's `category_path[].code` is accepted as-is. An unknown code answers an empty result (total 0).","on_invalid":"reject","example":"001005","aliases":["category_code"]},{"name":"brand","type":"string","required":false,"description":"Brand slug as Musinsa writes it in the brand URL musinsa.com/brand/<slug> and in every row's `brand` (e.g. `musinsastandard`, `nike`, `covernat`).","on_invalid":"reject","example":"musinsastandard","aliases":["brand_id"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in KRW, applied by the source to `final_price` (the price shown, after the product coupon and any extra discount).","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in KRW, applied to `final_price` like `min_price`.","on_invalid":"reject","example":30000,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"`true` = only discounted products (세일). `false` is the same as leaving it out.","on_invalid":"reject","example":true},{"name":"min_discount","type":"enum","required":false,"description":"Only products whose total discount (`final_discount_rate`, coupon included) is at least this many percent.","on_invalid":"reject","allowed_values":[{"value":"10","label":"10% or more"},{"value":"20","label":"20% or more"},{"value":"30","label":"30% or more"},{"value":"40","label":"40% or more"},{"value":"50","label":"50% or more"},{"value":"60","label":"60% or more"},{"value":"70","label":"70% or more"},{"value":"80","label":"80% or more"}]},{"name":"color","type":"string","required":false,"description":"Musinsa colour code in capitals, as in the site's colour facet (e.g. `BLACK`, `WHITE`, `GRAY`, `NAVY`, `BEIGE`, `IVORY`, `KHAKI`, `SKYBLUE`). An unknown code answers an empty result.","on_invalid":"reject","example":"BLACK"},{"name":"size","type":"enum","required":false,"description":"Standard clothing size (the site's 사이즈 facet).","on_invalid":"reject","allowed_values":[{"value":"XS","label":"XS"},{"value":"S","label":"S"},{"value":"M","label":"M"},{"value":"L","label":"L"},{"value":"XL","label":"XL"},{"value":"XXL","label":"XXL"}]},{"name":"include_sold_out","type":"boolean","required":false,"description":"`true` also returns sold-out (품절) products; by default the site hides them.","on_invalid":"reject","default":false},{"name":"exclusive","type":"boolean","required":false,"description":"`true` = only Musinsa exclusives (단독).","on_invalid":"reject"},{"name":"coupon","type":"boolean","required":false,"description":"`true` = only products with a coupon (쿠폰).","on_invalid":"reject"},{"name":"store","type":"enum","required":false,"description":"Only one Musinsa sub-store.","on_invalid":"reject","allowed_values":[{"value":"outlet","label":"아울렛 outlet"},{"value":"boutique","label":"부티크 boutique / luxury"}]},{"name":"used","type":"boolean","required":false,"description":"`true` = the second-hand (USED 중고) listings instead of new products; rows then carry `used_condition`.","on_invalid":"reject"},{"name":"gender","type":"enum","required":false,"description":"Musinsa's gender filter (the site's 전체 / 남성 / 여성 switch).","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체 all"},{"value":"men","label":"남성 men"},{"value":"women","label":"여성 women"}],"default":"all","aliases":["gf"]},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own sort codes.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"무신사 추천순 popularity (default)"},{"value":"newest","label":"신상품순 newest"},{"value":"discount","label":"할인율순 biggest discount"},{"value":"price_asc","label":"낮은 가격순 final price low to high"},{"value":"price_desc","label":"높은 가격순 final price high to low"},{"value":"reviews","label":"후기순 most reviews"},{"value":"sales_1d","label":"판매순 best-selling, last day"},{"value":"sales_1w","label":"판매순 best-selling, last week"},{"value":"sales_1m","label":"판매순 best-selling, last month"},{"value":"sales_3m","label":"판매순 best-selling, last 3 months"}],"default":"popular"},{"name":"page","type":"integer","required":false,"description":"Result page. The source stops at page 1000 and at its own last page (`total_pages`).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (the site uses 60).","on_invalid":"reject","default":60,"example":60,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"results[]{product_id, title, url, image, brand, brand_name, gender, normal_price (정상가), sale_price (판매가), coupon_price (쿠폰적용가), final_price (the price shown), currency=KRW, discount_rate, final_discount_rate, coupon_discount_rate, extra_discount_amount, option_price_varies, is_sold_out, review_count, review_score_pct (0-100), is_lowest_price, plus_delivery, used_condition, labels[]} + ads[] (sponsored rows, kept apart) + total (the source's count) + total_pages + page + page_size + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"001005"}},{"name":"product","description":"One Musinsa product in full: title (Korean and English), brand, style number, season, gender, category path, images; the four prices (normal / sale / coupon / final) and discount; every size/colour variant with its own in-stock flag, price delta and expected delivery date; the measured size chart (cm per size); the product facts table (material, colour, maker, country of manufacture, care); rating out of 5, review count, like count, page views and purchases; delivery and return fee; ranking badges; the seller's published business details.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Musinsa product number (goodsNo), the `product_id` of any search, brand, category or ranking row (also the number in musinsa.com/products/<id>). Provide product_id OR url.","on_invalid":"reject","example":3758308,"aliases":["goods_no","id","goodsNo"]},{"name":"url","type":"string","required":false,"description":"A musinsa.com product URL; alternative to product_id.","on_invalid":"reject","example":"https://www.musinsa.com/products/3758308","aliases":["product_url"]}],"returns":"product{product_id, title, title_en, url, style_no, brand{slug, name, name_en, country, since_year, url}, gender[], season, category_path[]{code, name}, store, images[], prices{normal_price, sale_price, coupon_price, final_price, currency, discount_rate, final_discount_rate, coupon_applied, extra_discount_amount, member_discount_rate, is_lowest_price, option_price_varies}, sale_status, is_sold_out, rating (0-5), review_count, like_count, page_view_total, purchase_total, labels[], flags{…}, delivery{expected_arrival_date, expected_release_date, release_period_days, courier, overseas, return_shipping_fee}, order_limits, ranking_badges[], used{condition, original_product_id}, seller{store_id, company, ceo, business_number, mail_order_number, phone, email, address}, options{axes[]{name, values[]}, variants[]{variant_id, options[], code, price_delta, active, in_stock, remain_quantity, expected_release_date, expected_arrival_date}, variant_count, in_stock_count}, size_chart{type, unit=cm, note, sizes[]{size, measurements{}}}, product_info[]{name, value}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":3758308}},{"name":"reviews","description":"Reviews (후기) of one Musinsa product, 20 per page: rating 1-5, text, date, the size or option the reviewer bought, their height / weight / gender when they shared it, the fit survey answers (size, colour, quality …), photos, likes and comments.","required_params":[],"optional_params":["product_id","url","sort","photo_only","page","page_size"],"params":[{"name":"product_id","type":"string","required":false,"description":"Musinsa product number (goodsNo), the `product_id` of any search, brand, category or ranking row (also the number in musinsa.com/products/<id>). Provide product_id OR url.","on_invalid":"reject","example":3758308,"aliases":["goods_no","id","goodsNo"]},{"name":"url","type":"string","required":false,"description":"A musinsa.com product URL; alternative to product_id.","on_invalid":"reject","example":"https://www.musinsa.com/products/3758308","aliases":["product_url"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"helpful","label":"유용한순 most helpful (default)"},{"value":"newest","label":"최신순 newest"},{"value":"rating_high","label":"평점 높은순 highest rating"},{"value":"rating_low","label":"평점 낮은순 lowest rating"},{"value":"most_comments","label":"댓글 많은순 most comments"}],"default":"helpful"},{"name":"photo_only","type":"boolean","required":false,"description":"`true` = only reviews with photos.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"Review page. A page past the last one answers NOT_FOUND.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page, 1-20 (the source refuses more).","on_invalid":"reject","default":20,"minimum":1,"maximum":20}],"returns":"reviews[]{review_id, type, rating, content, created_at, chosen_option, like_count, comment_count, images[], reviewer{nickname, level, gender, height_cm, weight_kg, skin_type, is_staff}, survey[]{question, answer}, is_first_review, country, product_id} + total + page + page_size + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":3758308}},{"name":"ranking","description":"Musinsa's live sales ranking (랭킹), the list the site's ranking tab shows: rank, product, brand, price shown and normal price, discount, sold-out flag, the rising (급상승) label, the source's sales count ('판매 3.2천개' → ~3,200), how many people are viewing / buying now, review count and score. 100 products per answer (the `used` section returns 300). Choose the section, category, period, gender and age band.","required_params":[],"optional_params":["section","category","period","gender","age_band"],"params":[{"name":"section","type":"enum","required":false,"description":"Ranking list (the site's ranking tabs).","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체 overall"},{"value":"new","label":"신상 new arrivals (last 6 months)"},{"value":"rising","label":"급상승 rising"},{"value":"offline","label":"오프라인 offline stores"},{"value":"used","label":"USED second-hand"},{"value":"boutique","label":"부티크 boutique"},{"value":"outlet","label":"아울렛 outlet"},{"value":"kids","label":"키즈 kids"},{"value":"street","label":"스트리트 street style"},{"value":"minimal","label":"미니멀 minimal"},{"value":"preppy","label":"프레피 preppy"},{"value":"romantic","label":"로맨틱 romantic"},{"value":"girlcore","label":"걸코어 girlcore"},{"value":"casual","label":"캐주얼 casual"},{"value":"workwear","label":"워크웨어 workwear"},{"value":"retro","label":"레트로 retro"},{"value":"chic","label":"시크 chic"}],"default":"all"},{"name":"category","type":"string","required":false,"description":"Category inside the section, as the site's sub-tabs list it. all/new/rising/offline: `000` all, `104` beauty, `103` shoes, `001` tops, `002` outerwear, `003` trousers, `100` dresses & skirts, `004` bags, `120` hats, `101` accessories, `026` underwear, `017` sports, `102` digital/life, `122` food/health, `106` kids. Style sections: `000`, `001`, `002`, `003`, `100`, `004`. used: `109000` all, `109001` tops, `109002` outerwear, `109003` trousers, `109004` dresses, `109005` kids, `109006` sports. boutique: 25884 all, 25898 clothing, 25899 shoes, 25900 bags, 25901 accessories, 25902 lifestyle, 25903 beauty. outlet: 29279 all, 29280 clothing, 29281 shoes, 29282 accessories, 29283 kids, 29284 sports. kids: 29285 all … 29299. Default: the section's 'all'.","on_invalid":"reject","example":"001"},{"name":"period","type":"enum","required":false,"description":"Ranking window.","on_invalid":"reject","allowed_values":[{"value":"realtime","label":"실시간 real time"},{"value":"daily","label":"1일 last day"},{"value":"weekly","label":"1주 last week"},{"value":"monthly","label":"1개월 last month"}],"default":"realtime"},{"name":"gender","type":"enum","required":false,"description":"Musinsa's gender filter (the site's 전체 / 남성 / 여성 switch).","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체 all"},{"value":"men","label":"남성 men"},{"value":"women","label":"여성 women"}],"default":"all","aliases":["gf"]},{"name":"age_band","type":"enum","required":false,"description":"Shopper age band the ranking is computed for.","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체 연령"},{"value":"under_19","label":"19세 이하"},{"value":"20_24","label":"20-24세"},{"value":"25_29","label":"25-29세"},{"value":"30_34","label":"30-34세"},{"value":"35_39","label":"35-39세"},{"value":"40_plus","label":"40세 이상"}],"default":"all"}],"returns":"results[]{rank, product_id, title, url, image, brand, brand_name, final_price, normal_price, currency=KRW, discount_rate, option_price_varies, is_sold_out, is_rising, sales_text, sales_count_approx, viewing_now_text, viewing_now_approx, buying_now_text, buying_now_approx, review_count, review_score_pct, labels[]} + section, category, period, gender, age_band, updated_at, applied_filters (the source's own echo), note","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"section":"all","period":"daily"}}]},{"name":"mydealz","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"mydealz API — deals from www.mydealz.de (Germany) as JSON: search the community's deals by keyword with sort (relevance, newest, hottest, price, discussed), temperature, price, date and category filters; the trending, new, hottest and discussion feeds; every deal in full (price, comparison price, discount, merchant, voucher code, shipping, temperature, comments, expiry, description); the comments of a deal; and the category list. Prices in EUR. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mydealz/v1","spec_available":true,"actions":[{"name":"search","description":"Search mydealz deals by keyword. Sort by relevance, newest, hottest, price or latest comment; filter by temperature, price, posting date, category, expired and local deals. 30 deals a page.","required_params":["query"],"optional_params":["sort","time_frame","min_temperature","max_temperature","min_price","max_price","group_id","hide_expired","hide_local","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search mydealz deal titles and voucher codes for.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default for a search)"},{"value":"new","label":"Newest first"},{"value":"hot","label":"Hottest first (highest temperature)"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"discussed","label":"Most recently commented"}],"default":"relevance","example":"hot","aliases":["sort_by","order"]},{"name":"time_frame","type":"enum","required":false,"description":"How far back to search by posting date. The site searches the last 365 days unless told otherwise.","on_invalid":"reject","allowed_values":[{"value":"last_year","label":"Posted in the last 365 days (the site's default)"},{"value":"last_30_days","label":"Last 30 days"},{"value":"last_7_days","label":"Last 7 days"},{"value":"all_time","label":"No date limit"}],"default":"last_year","example":"last_30_days","aliases":["period","posted_within"]},{"name":"min_temperature","type":"integer","required":false,"description":"Only deals at or above this temperature (degrees; the site's own steps are 20, 100 and 500, any whole number works).","on_invalid":"reject","example":100,"minimum":-100000,"maximum":100000,"aliases":["temperature_from","min_temp"]},{"name":"max_temperature","type":"integer","required":false,"description":"Only deals at or below this temperature.","on_invalid":"reject","example":600,"minimum":-100000,"maximum":100000,"aliases":["temperature_to","max_temp"]},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price, in EUR.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price, in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max","price_to"]},{"name":"group_id","type":"string","required":false,"description":"Only one category: a categories row's group_id (or a row's group.group_id).","on_invalid":"reject","example":"2","value_pattern":"\\d{1,12}","aliases":["category_id"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked as expired.","on_invalid":"reject","default":false,"example":true},{"name":"hide_local","type":"boolean","required":false,"description":"Leave out in-store-only (local) deals.","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: total, page, last_page, has_more, filters_applied, suggestions_dropped (a search with no result: the site's filler deals are not returned).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","sort":"new"}},{"name":"deals","description":"The mydealz feeds: trending (heating up now), new (every new post), hottest (the hottest of the period) and community discussions. 30 a page.","required_params":[],"optional_params":["list","page"],"params":[{"name":"list","type":"enum","required":false,"description":"Which mydealz feed.","on_invalid":"reject","allowed_values":[{"value":"trending","label":"What is heating up now (the site's 'hot' tab)"},{"value":"new","label":"Newest posts first"},{"value":"hottest","label":"The hottest deals of the current period"},{"value":"discussions","label":"Community discussion threads"}],"default":"trending","example":"new","aliases":["feed","tab"]},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: list, total, total_capped (the feeds report 10000 = a cap), page, last_page, has_more, pinned_rows.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"list":"new"}},{"name":"category_deals","description":"The deals of one mydealz category, hottest or newest first. The category page's own view hides expired deals and starts at a temperature floor (100° or 180° depending on the site); hide_expired / min_temperature change that and meta.applied_view shows what the page applied.","required_params":["group_slug"],"optional_params":["sort","min_temperature","hide_expired","page"],"params":[{"name":"group_slug","type":"string","required":true,"description":"Category slug: a categories row's group_slug (or a row's group.group_slug), e.g. elektronik, gaming, food, reisen.","on_invalid":"reject","example":"elektronik","value_pattern":"[a-z0-9][a-z0-9\\-]{0,100}","aliases":["category","group"]},{"name":"sort","type":"enum","required":false,"description":"Order of the category's deals.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hottest first (the category page's default)"},{"value":"new","label":"Newest first"},{"value":"discussed","label":"Most recently commented"}],"default":"hot","example":"new","aliases":["sort_by"]},{"name":"min_temperature","type":"integer","required":false,"description":"Temperature floor. The category page has its own default floor (100° on most sites); meta.applied_view shows what the page applied.","on_invalid":"reject","example":0,"minimum":-100000,"maximum":100000,"aliases":["temperature_from"]},{"name":"hide_expired","type":"boolean","required":false,"description":"The category page hides expired deals by default; false shows them.","on_invalid":"reject","example":false},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: group_slug, sort, applied_view{sort, min_temperature, hide_expired}, total, total_capped, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group_slug":"elektronik"}},{"name":"deal","description":"One deal in full by its id: price (0 = free, null = no price), the price as the site prints it, comparison price and discount, merchant, voucher code, shipping, temperature, status and expiry, every category it is in, the poster, the outbound link, images and the full description.","required_params":["deal_id"],"optional_params":[],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (2697622); a www.mydealz.de deal URL also works.","on_invalid":"reject","example":"2697622","aliases":["id","thread_id","url"]}],"returns":"deal{deal_id, type, title, url, share_url, visit_url, status, is_expired, is_hot, is_new, is_local, is_exclusive, nsfw, temperature, temperature_level, price, is_free, price_display, next_best_price, discount_pct, source_discount_pct, price_discount, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant, link_host, group, groups[], comment_count, posted_by, published_at, created_at, updated_at, starts_at, expires_at, dispatched_from{name, country}, is_national, regions, locations, image_url, images[], description, description_html}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"2697622"}},{"name":"comments","description":"The comments of one deal, in the site's own order (most helpful first), with author, time, reactions and reply links.","required_params":["deal_id"],"optional_params":["limit","page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (2697622); a www.mydealz.de deal URL also works.","on_invalid":"reject","example":"2697622","aliases":["id","thread_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Comments per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Comment page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"rows[]: comment_id, deal_id, url, text, html, user{user_id, username}, created_at, reactions{like, funny, helpful…}, is_reply, main_comment_id, parent_comment_id, is_pinned, popular, was_edited, status. meta: total, page, last_page, has_more, order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"2697622"}},{"name":"categories","description":"The mydealz category list: every main category with its id, slug, deal count and its community-favourite subcategories. group_id goes to search, group_slug to category_deals.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: group_id, name, group_slug, url, deal_count, subcategories[{group_id, name, group_slug}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"myntra","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Myntra API scraper — India's fashion marketplace (myntra.com): search products with filters, the full product record with per-size and per-seller price and stock, the coupon price kept apart, reviews, similar products and search suggestions, in INR. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/myntra/v1","spec_available":true,"actions":[{"name":"search","description":"Search Myntra by keyword or category slug and get the matching products: Myntra product id, title, brand, images, the price paid with the MRP and discount, any coupon price kept separate, rating and rating count, gender, category, colour, sizes, the buy-box size's stock and seller id, and colour variant ids. Filter by brand, gender, category, colour, size, price and minimum discount; sort by popularity, newest, price, discount or rating. Returns the facet values Myntra offers for the result set.","required_params":["query"],"optional_params":["page","limit","sort","brand","gender","category","color","size","price_min","price_max","min_discount","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for on Myntra: a keyword (\"black kurta\") or a Myntra category slug (\"men-tshirts\"). Hindi script works too.","on_invalid":"reject","example":"nike running shoes","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Myntra serves only the first 500 results of a search (page × limit); a page beyond that is rejected, a page past the last result returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100 (Myntra's own is 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results. Anything else is rejected (Myntra itself silently ignores unknown sorts).","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Myntra's default ranking"},{"value":"new","label":"What's new"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"discount","label":"Biggest discount first"},{"value":"rating","label":"Customer rating"}],"default":"popularity"},{"name":"brand","type":"array","required":false,"description":"One or more brand names exactly as Myntra lists them (`available_filters.brand` on any search returns them).","on_invalid":"reject","example":["Nike","Puma"]},{"name":"gender","type":"array","required":false,"description":"One or more of men, women, boys, girls. Myntra also returns unisex products for men / women.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Men"},{"value":"women","label":"Women"},{"value":"boys","label":"Boys"},{"value":"girls","label":"Girls"}],"example":["men"]},{"name":"category","type":"array","required":false,"description":"One or more Myntra categories as listed in `available_filters.category` (e.g. Sports Shoes, Tshirts, Kurtas).","on_invalid":"reject","example":["Sports Shoes"]},{"name":"color","type":"array","required":false,"description":"One or more colours (Black, Navy Blue, …) as in `available_filters.color`.","on_invalid":"reject","example":["Black"]},{"name":"size","type":"array","required":false,"description":"One or more sizes as in `available_filters.size` (UK8, M, 32, …).","on_invalid":"reject","example":["UK8"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price paid, in Indian rupees.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price paid, in Indian rupees.","on_invalid":"reject","minimum":0},{"name":"min_discount","type":"integer","required":false,"description":"Only products discounted at least this much off MRP (Myntra's steps: 10, 20, … 90).","on_invalid":"reject","allowed_values":[{"value":10,"label":"10% and above"},{"value":20,"label":"20% and above"},{"value":30,"label":"30% and above"},{"value":40,"label":"40% and above"},{"value":50,"label":"50% and above"},{"value":60,"label":"60% and above"},{"value":70,"label":"70% and above"},{"value":80,"label":"80% and above"},{"value":90,"label":"90% and above"}],"example":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, title, brand, url, image, images[], price (number — what the shopper pays), mrp (India's printed Maximum Retail Price), price_before_discount (the MRP when above price, else null), discount_amount, discount_percent, currency (INR), discount_label, coupon{code, best_price} (a code the shopper enters — NOT subtracted from price), rating, rating_count, rating_scale (5), gender, category, sub_category, master_category, colour, short_description, sizes[], featured_sku{sku_id, size, stock, available} (the buy-box size only), seller_id, colour_variant_ids[], season, year, catalog_date}, count, total_results, reachable_results (min(total, 500)), page, limit, has_more, sponsored_dropped, available_filters{brand[], gender[], category[], color[], size[] {value, count}, price_ranges[], discount_ranges[] {from, to, count}}, filters_applied, currency","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"shoes"}},{"name":"product/detail","description":"The full Myntra product record by `product_id` (or product URL): title, brand, description, material and care, specification table, images and videos, the buy-box price with MRP, discount and when the discount ends, the cheapest and dearest in-stock price across sizes and sellers, the coupon best price kept separate, availability, every size with its stock, equivalent UK/US/EU sizes, measurements and each seller's price and stock, the buy-box seller, rating with count, review count and 1-5 histogram, category path, colour variants, country of origin, manufacturer / importer / packer, return window, cash on delivery and bank offers.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Myntra product id — the number before /buy in a product URL (…/HM-Trainers/40301489/buy → 40301489). A full product URL is accepted.","on_invalid":"reject","example":"34718633","aliases":["id","style_id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, title, brand, url, price (buy-box offer), mrp, price_before_discount, discount_amount, discount_percent, currency, discount_label, discount_ends_at, price_min, price_max, coupon{code, best_price, discount, minimum_order, applicable_on, new_customers_only, ends_at, other_coupons[]} (never subtracted from price), availability (in_stock|out_of_stock), featured_size, featured_seller{id, name, city, state}, seller_count, sellers[]{id, name, city, state, has_stock}, sizes[]{size, sku_id, available, stock, size_type, equivalent_sizes{uk, us, euro, brand, age}, measurements[]{name, value, unit}, offers[]{seller_id, seller_name, price, mrp, price_before_discount, discount_amount, discount_percent, currency, stock, supply_type, buy_box_rank}}, rating, rating_count, review_count, rating_scale, rating_distribution{1..5}, images[], videos[], description, material_care, details[]{title, text}, specifications[]{name, value}, gender, breadcrumb[], category, colour, colour_variants[]{product_id, label, url, image}, country_of_origin, manufacturer, importer, packer, return_period_days, returnable, exchangeable, cash_on_delivery, emi_available, try_and_buy, policy_notes[], bank_offers[]{type, title, description}, size_chart_image, season, year, catalog_date, gtin (null — Myntra publishes none)}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"34718633"}},{"name":"product/reviews","description":"Customer reviews of one Myntra product, a page at a time: star rating, text, reviewer display name, date, helpful votes, photos and videos, and the size bought, with the product's rating histogram, review count and average. Myntra pools reviews across colour variants of the same design; every review carries the product id it was written on. Filter by star rating; default or newest order.","required_params":["product_id"],"optional_params":["page","limit","sort","rating","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Myntra product id — the number before /buy in a product URL (…/HM-Trainers/40301489/buy → 40301489). A full product URL is accepted.","on_invalid":"reject","example":"34718633","aliases":["id","style_id","url"]},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-20.","on_invalid":"reject","default":12,"minimum":1,"maximum":20},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Myntra's default order"},{"value":"recent","label":"Newest first"}],"default":"default"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with exactly this star rating (1-5).","on_invalid":"reject","minimum":1,"maximum":5},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"reviews[]{review_id, product_id, rating, text, author, date, upvotes, downvotes, images[], videos[], attributes{Size bought, …}}, count, page, limit, has_more, review_count, average_rating, rating_count, rating_scale, rating_distribution{1..5}, image_count, recommended_percent, pooled_product_ids[], product_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"34718633"}},{"name":"product/similar","description":"Products Myntra shows next to one product, in Myntra's own groups (Similar, ColourVariants and the others it returns), each with id, title, brand, image, price paid with MRP and discount, rating, category, gender and colour.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Myntra product id — the number before /buy in a product URL (…/HM-Trainers/40301489/buy → 40301489). A full product URL is accepted.","on_invalid":"reject","example":"34718633","aliases":["id","style_id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"groups[]{type, count, products[]{product_id, title, brand, url, image, price, mrp, price_before_discount, discount_amount, discount_percent, currency, discount_label, rating, rating_scale, category, gender, colour, only_few_left}}, count, product_id, currency","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"34718633"}},{"name":"suggest","description":"Myntra's search suggestions for the text typed so far, with the number of products behind each suggestion.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The text typed so far.","on_invalid":"reject","example":"nike","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{text, result_count, search_query, url, category, group}, count, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"shoes"}}]},{"name":"mypcards","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"MYP Cards API scraper - the Brazilian trading card marketplace (Magic, Pokémon, Yu-Gi-Oh!, Lorcana, One Piece and 19 more games): search with filters, card prices in BRL, every seller offer with stock, condition and language, graded slabs with certificate, sets, promotions and seller reputation.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/mypcards/v1","spec_available":true,"actions":[{"name":"search","description":"Search a game's catalog or list a set: name (Portuguese and original), set, card number, lowest price in BRL, units for sale, product id and url; with graded_only also the lowest graded price. 30 per page, sortable. With no query it returns the newest listings of the game. Filters by condition, language, seller state and price narrow it on the site's own search.","required_params":[],"optional_params":["game","query","edition","category","subcategory","condition","language","state","finish","rarity","color","type","min_price","max_price","in_stock_only","graded_only","sort","page"],"params":[{"name":"game","type":"enum","required":false,"description":"Which game (or outros for sealed product, accessories and other non-card items).","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"onepiece","label":"One Piece"},{"value":"riftbound","label":"Riftbound"},{"value":"digimon","label":"Digimon"},{"value":"battlescenes","label":"Battle Scenes"},{"value":"dbsfusion","label":"Dragon Ball Super: Fusion World"},{"value":"dbsmasters","label":"Dragon Ball Super: Masters"},{"value":"fab","label":"Flesh and Blood"},{"value":"gundam","label":"Gundam"},{"value":"hp","label":"Harry Potter"},{"value":"lotr","label":"Lord of the Rings"},{"value":"sorcery","label":"Sorcery: Contested Realm"},{"value":"swdestiny","label":"Star Wars: Destiny"},{"value":"swunlimited","label":"Star Wars: Unlimited"},{"value":"vanguard","label":"Vanguard"},{"value":"grandarchive","label":"Grand Archive"},{"value":"unionarena","label":"Union Arena"},{"value":"weissschwarz","label":"Weiss Schwarz"},{"value":"warlord","label":"Warlord"},{"value":"cyberpunk","label":"Cyberpunk"},{"value":"copadomundo2026","label":"World Cup 2026 stickers and cards"},{"value":"outros","label":"Other products (sealed, accessories, boards)"}],"default":"magic","example":"pokemon","aliases":["marca","tcg"]},{"name":"query","type":"string","required":false,"description":"Name, in Portuguese or the original language.","on_invalid":"reject","example":"charizard","aliases":["q","keyword"]},{"name":"edition","type":"string","required":false,"description":"A set: slug or edition_id, both from the editions action.","on_invalid":"reject","example":"tarkir-dragonstorm","aliases":["set","edition_id"]},{"name":"category","type":"enum","required":false,"description":"For sealed product, accessories and so on: combine with game to get that game's items.","on_invalid":"reject","allowed_values":[{"value":"acessorios","label":"acessorios"},{"value":"action-figure","label":"action-figure"},{"value":"artigos-geek","label":"artigos-geek"},{"value":"deck-lote-set","label":"deck-lote-set"},{"value":"hq-livros","label":"hq-livros"},{"value":"inscricao","label":"inscricao"},{"value":"jogos-de-tabuleiro","label":"jogos-de-tabuleiro"},{"value":"online","label":"online"},{"value":"outros","label":"outros"},{"value":"selados","label":"selados"}],"example":"selados"},{"name":"subcategory","type":"string","required":false,"description":"Inside category, e.g. booster, caixa-de-booster, deck-box, playmat.","on_invalid":"reject","example":"booster"},{"name":"condition","type":"string","required":false,"description":"Comma list of conditions: NM, SP, MP, HP, DM (exact match, any of them).","on_invalid":"reject","example":"NM,SP"},{"name":"language","type":"string","required":false,"description":"Comma list: PT, EN, ES, FR, DE, IT, JP, KO, RU, ZH, PT-EN (printed in both), TH.","on_invalid":"reject","example":"EN,PT"},{"name":"state","type":"string","required":false,"description":"Comma list of seller Brazilian states (UF).","on_invalid":"reject","example":"SP,RJ"},{"name":"min_price","type":"number","required":false,"description":"Minimum price in BRL.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Maximum price in BRL.","on_invalid":"reject","example":200,"minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only products currently for sale.","on_invalid":"reject","example":true},{"name":"graded_only","type":"boolean","required":false,"description":"Only products with graded slabs for sale.","on_invalid":"reject","example":false},{"name":"finish","type":"string","required":false,"description":"Comma list of finish ids (1 Normal, 2 Foil, 5 Full-Art, 6 Promo, 30 Etched, 31 Etched Foil, varies by game).","on_invalid":"reject","example":"2"},{"name":"rarity","type":"string","required":false,"description":"Comma list of rarity ids (Magic: 1 Common, 2 Uncommon, 3 Rare, 4 Mythic; ids vary by game).","on_invalid":"reject","example":"4"},{"name":"color","type":"string","required":false,"description":"Magic: comma list of color ids (1 White, 2 Blue, 3 Black, 4 Red, 5 Green, 6 Colorless).","on_invalid":"reject","example":"5"},{"name":"type","type":"string","required":false,"description":"Comma list of type ids (Magic: 1 Creature, 2 Enchantment, 4 Instant, 3 Sorcery, 5 Artifact, 6 Planeswalker, 7 Land).","on_invalid":"reject","example":"1"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"name_en_asc","label":"name_en_asc"},{"value":"name_en_desc","label":"name_en_desc"},{"value":"code_asc","label":"code_asc"},{"value":"code_desc","label":"code_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000}],"returns":"results[]{product_id, code, name, name_original, game, set, set_code, card_number, rarity, price_brl, price_is_from, original_price_brl, discount_pct, promotion_ends, stock, in_stock, condition, condition_label, language, language_label, finish, printing, graded_from_brl, high_demand, offer_id, image_url, url}, count, total, page, pages, has_more","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon","query":"charizard"}},{"name":"card","description":"One product: name, code, set, card number, rarity, type, illustrator, release date and description; lowest and average price, TCGplayer reference and the 30-day median change; every seller offer with BRL price, pre-discount price, units, condition, language, finish, photos, notes and seller; graded offers with grader, grade and certificate link.","required_params":[],"optional_params":["url","product_id","game","offers_limit","condition","language","finish_name","seller","include_graded"],"params":[{"name":"url","type":"string","required":false,"description":"A product page URL.","on_invalid":"reject","example":"https://mypcards.com/magic/produto/269563/cori-steel-cutter-borderless"},{"name":"product_id","type":"string","required":false,"description":"The product_id from search. The game does not matter.","on_invalid":"reject","example":269563,"aliases":["id"]},{"name":"game","type":"enum","required":false,"description":"Which game (or outros for sealed product, accessories and other non-card items).","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"onepiece","label":"One Piece"},{"value":"riftbound","label":"Riftbound"},{"value":"digimon","label":"Digimon"},{"value":"battlescenes","label":"Battle Scenes"},{"value":"dbsfusion","label":"Dragon Ball Super: Fusion World"},{"value":"dbsmasters","label":"Dragon Ball Super: Masters"},{"value":"fab","label":"Flesh and Blood"},{"value":"gundam","label":"Gundam"},{"value":"hp","label":"Harry Potter"},{"value":"lotr","label":"Lord of the Rings"},{"value":"sorcery","label":"Sorcery: Contested Realm"},{"value":"swdestiny","label":"Star Wars: Destiny"},{"value":"swunlimited","label":"Star Wars: Unlimited"},{"value":"vanguard","label":"Vanguard"},{"value":"grandarchive","label":"Grand Archive"},{"value":"unionarena","label":"Union Arena"},{"value":"weissschwarz","label":"Weiss Schwarz"},{"value":"warlord","label":"Warlord"},{"value":"cyberpunk","label":"Cyberpunk"},{"value":"copadomundo2026","label":"World Cup 2026 stickers and cards"},{"value":"outros","label":"Other products (sealed, accessories, boards)"}],"default":"magic","example":"pokemon","aliases":["marca","tcg"]},{"name":"offers_limit","type":"integer","required":false,"description":"How many offers to return, cheapest first. 0 = details and prices only.","on_invalid":"reject","default":100,"example":50,"minimum":0,"maximum":500,"aliases":["limit"]},{"name":"condition","type":"string","required":false,"description":"Keep offers in these conditions (NM, SP, MP, HP, DM, comma list).","on_invalid":"reject","example":"NM"},{"name":"language","type":"string","required":false,"description":"Keep offers in these languages (PT, EN, JP...).","on_invalid":"reject","example":"EN"},{"name":"finish_name","type":"string","required":false,"description":"Keep offers whose finish contains this word (Foil, Normal, Quarter Century...).","on_invalid":"reject","example":"Foil"},{"name":"seller","type":"string","required":false,"description":"Keep one seller's offers.","on_invalid":"reject","example":"MagoNengue"},{"name":"include_graded","type":"boolean","required":false,"description":"Include graded slab offers.","on_invalid":"reject","default":true,"example":true}],"returns":"product{product_id, code, name, game, game_name, set, set_code, set_slug, card_number, rarity, category, type_line, color, mana_cost, illustrator, release_date, description, details[], price_brl, price_avg_brl, price_tcgplayer_brl, median_change_30d_pct, offers_count, graded_offers_count, availability, image_url, url}, offers[]{offer_id, section, seller, seller_url, seller_role, price_brl, original_price_brl, stock, in_stock, condition, condition_label, language, language_label, finish, printing, version, note, photos[], graded{}}, graded_offers[], stock_total, offers_returned, offers_total","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":269563,"offers_limit":20}},{"name":"editions","description":"A game's sets, newest first: name, alternate name, code, release date, slug and id. Feed slug to search's edition. 48 per page.","required_params":[],"optional_params":["game","query","page"],"params":[{"name":"game","type":"enum","required":false,"description":"Which game (or outros for sealed product, accessories and other non-card items).","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"onepiece","label":"One Piece"},{"value":"riftbound","label":"Riftbound"},{"value":"digimon","label":"Digimon"},{"value":"battlescenes","label":"Battle Scenes"},{"value":"dbsfusion","label":"Dragon Ball Super: Fusion World"},{"value":"dbsmasters","label":"Dragon Ball Super: Masters"},{"value":"fab","label":"Flesh and Blood"},{"value":"gundam","label":"Gundam"},{"value":"hp","label":"Harry Potter"},{"value":"lotr","label":"Lord of the Rings"},{"value":"sorcery","label":"Sorcery: Contested Realm"},{"value":"swdestiny","label":"Star Wars: Destiny"},{"value":"swunlimited","label":"Star Wars: Unlimited"},{"value":"vanguard","label":"Vanguard"},{"value":"grandarchive","label":"Grand Archive"},{"value":"unionarena","label":"Union Arena"},{"value":"weissschwarz","label":"Weiss Schwarz"},{"value":"warlord","label":"Warlord"},{"value":"cyberpunk","label":"Cyberpunk"},{"value":"copadomundo2026","label":"World Cup 2026 stickers and cards"},{"value":"outros","label":"Other products (sealed, accessories, boards)"}],"default":"magic","example":"pokemon","aliases":["marca","tcg"]},{"name":"query","type":"string","required":false,"description":"Sets whose name contains this.","on_invalid":"reject","example":"Mega","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000}],"returns":"editions[]{edition_id, name, name_alt, set_code, slug, release_date, image_url, url}, count, page, pages, has_more","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"lorcana"}},{"name":"deals","description":"Current promotions of a game: product, BRL price, price before the discount, discount percent, time left, stock and condition. Sort by biggest discount, end date, price or stock.","required_params":[],"optional_params":["game","sort","page"],"params":[{"name":"game","type":"enum","required":false,"description":"Which game (or outros for sealed product, accessories and other non-card items).","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"onepiece","label":"One Piece"},{"value":"riftbound","label":"Riftbound"},{"value":"digimon","label":"Digimon"},{"value":"battlescenes","label":"Battle Scenes"},{"value":"dbsfusion","label":"Dragon Ball Super: Fusion World"},{"value":"dbsmasters","label":"Dragon Ball Super: Masters"},{"value":"fab","label":"Flesh and Blood"},{"value":"gundam","label":"Gundam"},{"value":"hp","label":"Harry Potter"},{"value":"lotr","label":"Lord of the Rings"},{"value":"sorcery","label":"Sorcery: Contested Realm"},{"value":"swdestiny","label":"Star Wars: Destiny"},{"value":"swunlimited","label":"Star Wars: Unlimited"},{"value":"vanguard","label":"Vanguard"},{"value":"grandarchive","label":"Grand Archive"},{"value":"unionarena","label":"Union Arena"},{"value":"weissschwarz","label":"Weiss Schwarz"},{"value":"warlord","label":"Warlord"},{"value":"cyberpunk","label":"Cyberpunk"},{"value":"copadomundo2026","label":"World Cup 2026 stickers and cards"},{"value":"outros","label":"Other products (sealed, accessories, boards)"}],"default":"magic","example":"pokemon","aliases":["marca","tcg"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"discount_desc","label":"discount_desc"},{"value":"discount_asc","label":"discount_asc"},{"value":"ends_soon","label":"ends_soon"},{"value":"ends_late","label":"ends_late"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"stock_asc","label":"stock_asc"},{"value":"stock_desc","label":"stock_desc"}],"example":"discount_desc"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000}],"returns":"results[]{product_id, name, set, price_brl, original_price_brl, discount_pct, promotion_ends, stock, condition, language, finish, url}, count, total, page, pages, has_more","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"game":"pokemon"}},{"name":"graded","description":"Graded slabs for sale, newest first: card, grader, grade, certificate number and link, language, seller and BRL price. Can be limited to one game where the site has that filter.","required_params":[],"optional_params":["game","page"],"params":[{"name":"game","type":"enum","required":false,"description":"Optional game filter.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"onepiece","label":"One Piece"},{"value":"riftbound","label":"Riftbound"},{"value":"dbsfusion","label":"Dragon Ball Super: Fusion World"},{"value":"unionarena","label":"Union Arena"}],"example":"pokemon"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000}],"returns":"results[]{offer_id, product_id, name, game, set, price_brl, language, graded{grade, grader, certificate, certificate_url}, seller, image_url, url}, count, total, page, pages, has_more","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"game":"pokemon"}},{"name":"sellers","description":"The store directory: nickname, rating, number of reviews, games sold, city and state. Filter by name, city or state.","required_params":[],"optional_params":["name","city","state","sort","page"],"params":[{"name":"name","type":"string","required":false,"description":"Part of the store nickname.","on_invalid":"reject","example":"TCG"},{"name":"city","type":"string","required":false,"description":"Part of the city name.","on_invalid":"reject","example":"São Paulo"},{"name":"state","type":"string","required":false,"description":"Part of the state name or UF.","on_invalid":"reject","example":"SP"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"city_asc","label":"city_asc"},{"value":"city_desc","label":"city_desc"},{"value":"state_asc","label":"state_asc"},{"value":"state_desc","label":"state_desc"}],"example":"name_asc"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000}],"returns":"sellers[]{seller_id, seller, seller_url, rating, reviews, games[], city, state}, count, page, pages, has_more","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"name":"TCG"}},{"name":"seller","description":"A seller's reputation: certified or store status, rating over the last 6 months and overall, orders shipped and cancelled, average shipping days, sales, location, free shipping threshold, shipping notes, social links and buyer reviews (5 per page, buyer identity withheld by the site).","required_params":["seller"],"optional_params":["reviews_page"],"params":[{"name":"seller","type":"string","required":true,"description":"Seller nickname, from card offers[].seller or sellers.","on_invalid":"reject","example":"MagoNengue","aliases":["nick"]},{"name":"reviews_page","type":"integer","required":false,"description":"Reviews page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000}],"returns":"seller{seller, seller_url, role, city, state, sales, active_since_year, average_shipping_days, free_shipping_from_brl, shipping_info, social[], rating_6m, rating_total, sent_6m, cancelled_6m, sent_total, cancelled_total, items_listed}, reviews[]{rating, date, comment}, reviews_page, reviews_pages","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"seller":"MagoNengue"}},{"name":"seller_inventory","description":"What one seller lists: the same fields as search, each with that seller's price and copies, filterable by name, sorted by name or price. 30 per page. Without game the site lists that seller's default game only; pass game to read another (each row carries its game).","required_params":["seller"],"optional_params":["query","game","sort","page"],"params":[{"name":"seller","type":"string","required":true,"description":"Seller nickname.","on_invalid":"reject","example":"MagoNengue","aliases":["nick"]},{"name":"query","type":"string","required":false,"description":"Part of the name.","on_invalid":"reject","example":"charizard","aliases":["q"]},{"name":"game","type":"enum","required":false,"description":"Which game of this seller's listings. Without it, the site's default game for the seller.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering"},{"value":"pokemon","label":"Pokémon"},{"value":"yugioh","label":"Yu-Gi-Oh!"},{"value":"lorcana","label":"Disney Lorcana"},{"value":"onepiece","label":"One Piece"},{"value":"riftbound","label":"Riftbound"},{"value":"digimon","label":"Digimon"},{"value":"battlescenes","label":"Battle Scenes"},{"value":"dbsfusion","label":"Dragon Ball Super: Fusion World"},{"value":"dbsmasters","label":"Dragon Ball Super: Masters"},{"value":"fab","label":"Flesh and Blood"},{"value":"gundam","label":"Gundam"},{"value":"hp","label":"Harry Potter"},{"value":"lotr","label":"Lord of the Rings"},{"value":"sorcery","label":"Sorcery: Contested Realm"},{"value":"swdestiny","label":"Star Wars: Destiny"},{"value":"swunlimited","label":"Star Wars: Unlimited"},{"value":"vanguard","label":"Vanguard"},{"value":"grandarchive","label":"Grand Archive"},{"value":"unionarena","label":"Union Arena"},{"value":"weissschwarz","label":"Weiss Schwarz"},{"value":"warlord","label":"Warlord"},{"value":"cyberpunk","label":"Cyberpunk"},{"value":"copadomundo2026","label":"World Cup 2026 stickers and cards"},{"value":"outros","label":"Other products (sealed, accessories, boards)"}],"example":"yugioh"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"},{"value":"name_en_asc","label":"name_en_asc"},{"value":"name_en_desc","label":"name_en_desc"},{"value":"code_asc","label":"code_asc"},{"value":"code_desc","label":"code_desc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5000}],"returns":"results[]{same as search}, count, total, page, pages, has_more, seller","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"seller":"MagoNengue"}}]},{"name":"myslabs","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"MySlabs API — graded trading-card marketplace (myslabs.com): live slab listings and auctions, the SOLD archive with realised price and sale date, and full listing detail. PSA, BGS, SGC, CGC; baseball, basketball, football, hockey, soccer, Pokémon and other TCGs. USD. No login, no key.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/myslabs/v1","spec_available":true,"actions":[{"name":"search","description":"Search live MySlabs listings: keyword (player, character, set), category (graded slabs, raw singles, lots, sealed wax), sport / game, grading company, grade, era or exact year, card attributes (rookie, auto, numbered …), raw condition, price, listing type (buy it now, auctions, private deals), live offers only, sorted newest / cheapest / dearest / most viewed / most watched, 72 a page, with the site's exact totals.","required_params":[],"optional_params":["query","category","sport","grader","grade","era","year","attributes","condition","lot_type","price_range","min_price","max_price","sort","page","listing_type","has_live_offer"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword(s) as sellers write titles: player / character, set, card number, parallel ('jordan fleer', 'charizard base set', 'ohtani rookie'). Every word must appear.","on_invalid":"reject","example":"michael jordan","aliases":["q","keyword"]},{"name":"category","type":"enum","required":false,"description":"slabbed_cards (graded: PSA, BGS, SGC, CGC …; default), raw_card_singles, raw_card_lots, wax (sealed), or all. sport / era / attributes work on every card category; grader / grade only on slabbed_cards; condition on raw singles / lots.","on_invalid":"reject","allowed_values":[{"value":"slabbed_cards","label":"Slabbed Cards"},{"value":"raw_card_singles","label":"Raw Card Singles"},{"value":"raw_card_lots","label":"Raw Card Lots"},{"value":"wax","label":"Wax (sealed boxes and packs)"},{"value":"all","label":"All Categories"}],"default":"slabbed_cards","example":"slabbed_cards"},{"name":"sport","type":"enum","required":false,"description":"Sport or game (several allowed, comma-separated): baseball, basketball, football, hockey, soccer, pokemon, formula_one, other, other_non_sport. MySlabs files most other TCGs (One Piece, MTG, Yu-Gi-Oh!) under 'other'.","on_invalid":"reject","allowed_values":[{"value":"baseball","label":"BASEBALL"},{"value":"basketball","label":"BASKETBALL"},{"value":"football","label":"FOOTBALL"},{"value":"hockey","label":"HOCKEY"},{"value":"soccer","label":"SOCCER"},{"value":"pokemon","label":"POKEMON"},{"value":"formula_one","label":"FORMULA ONE"},{"value":"other","label":"OTHER"},{"value":"other_non_sport","label":"OTHER NON-SPORT"}],"example":"pokemon","aliases":["game"]},{"name":"grader","type":"enum","required":false,"description":"Grading company the seller filed (slabbed_cards; several allowed): psa, bgs, sgc, cgc, bvg, csg, other (TAG, HGA, … are 'other').","on_invalid":"reject","allowed_values":[{"value":"psa","label":"PSA"},{"value":"bgs","label":"BGS"},{"value":"sgc","label":"SGC"},{"value":"cgc","label":"CGC"},{"value":"bvg","label":"BVG"},{"value":"csg","label":"CSG"},{"value":"other","label":"Other"}],"example":"psa","aliases":["slab_type","grading_company"]},{"name":"grade","type":"string","required":false,"description":"Grade (slabbed_cards; several allowed, comma-separated): 10, 9.5, 9 … 1 in half steps, or authentic.","on_invalid":"reject","example":"10"},{"name":"era","type":"enum","required":false,"description":"The site's year filter (several allowed): pre_war (1869-1939), vintage (1940-1986), junk (1987-1994), modern (1995-present).","on_invalid":"reject","allowed_values":[{"value":"pre_war","label":"Pre-War Era (1869 - 1939)"},{"value":"vintage","label":"Vintage Era (1940 - 1986)"},{"value":"junk","label":"Junk Era (1987 - 1994)"},{"value":"modern","label":"Modern Era (1995 - Present)"}],"example":"vintage"},{"name":"year","type":"integer","required":false,"description":"Exact card year — matched as a word of the title (MySlabs has eras only).","on_invalid":"reject","example":1986,"minimum":1869,"maximum":2035},{"name":"attributes","type":"enum","required":false,"description":"Card attributes the seller ticked (several allowed): rookie, auto, serial_numbered, one_of_one, parallel, insert, base, patch_relic, sp, ssp, prospect, hall_of_fame, in_person_auto.","on_invalid":"reject","allowed_values":[{"value":"one_of_one","label":"1/1"},{"value":"parallel","label":"Parallel"},{"value":"base","label":"Base"},{"value":"insert","label":"Insert"},{"value":"hall_of_fame","label":"Hall of Fame Inductee"},{"value":"in_person_auto","label":"In-Person Auto"},{"value":"auto","label":"Auto"},{"value":"patch_relic","label":"Patch/Relic"},{"value":"prospect","label":"Prospect Card"},{"value":"rookie","label":"Rookie Card"},{"value":"serial_numbered","label":"Serial Numbered"},{"value":"sp","label":"SP (Short Print)"},{"value":"ssp","label":"SSP (Super Short Print)"}],"example":"rookie","aliases":["attribute"]},{"name":"condition","type":"enum","required":false,"description":"Raw card condition on MySlabs' own scale (raw_card_singles; average for raw_card_lots; several allowed): a (nrmt/mt) … e (poor/fair).","on_invalid":"reject","allowed_values":[{"value":"a","label":"MySlabs A (nrmt/mt)"},{"value":"b","label":"MySlabs B (ex/nrmt)"},{"value":"c","label":"MySlabs C (vg/ex)"},{"value":"d","label":"MySlabs D (good/vg)"},{"value":"e","label":"MySlabs E (poor/fair)"}],"example":"a"},{"name":"lot_type","type":"enum","required":false,"description":"raw_card_lots only: insert_lot, player_lot, complete_set, partial_set, team_set, other.","on_invalid":"reject","allowed_values":[{"value":"insert_lot","label":"Insert Lot"},{"value":"player_lot","label":"Player Lot"},{"value":"complete_set","label":"Complete Set"},{"value":"partial_set","label":"Partial Set"},{"value":"team_set","label":"Team Set"},{"value":"other","label":"Other"}],"example":"player_lot"},{"name":"price_range","type":"string","required":false,"description":"The site's own price buckets (several allowed): 0-249, 250-499, 500-749, 750-999, 1000-2999, 3000-4999, 5000+.","on_invalid":"reject","example":"250-499"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in USD (inclusive). Picks the site buckets that overlap and drops rows outside the exact range (sold: compared with the price shown, premium included).","on_invalid":"reject","example":100,"minimum":0,"maximum":10000000},{"name":"max_price","type":"number","required":false,"description":"Highest price in USD (inclusive).","on_invalid":"reject","example":500,"minimum":0,"maximum":10000000},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest listing first (the site's default; on sold = newest LISTING first, not newest sale)"},{"value":"oldest","label":"Oldest listing first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"},{"value":"most_viewed","label":"Most viewed first"},{"value":"most_tracked","label":"Most watched (tracked) first"}],"default":"newest","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 72 rows a page. Page 1 answers in ~1-3 s; later pages can take up to a minute on a cold start (a site check is cleared first), then ~2-4 s.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500},{"name":"listing_type","type":"enum","required":false,"description":"all, buy_it_now, auction (weekly lots, with end time and current bid) or private_deal.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every listing type (the site's 'All' tab)"},{"value":"buy_it_now","label":"Fixed price (buy it now, most accept offers)"},{"value":"auction","label":"Weekly auction lots (Friday night auctions)"},{"value":"private_deal","label":"Private deals (price on request)"}],"default":"all","example":"auction"},{"name":"has_live_offer","type":"boolean","required":false,"description":"Only listings that have a live offer on them right now.","on_invalid":"reject","default":false,"example":true}],"returns":"rows[]: listing_id, auction_lot_id, url, title, price (USD; auctions = starting or current bid), price_label (Buy It Now / Starting Bid / Current Bid), price_on_request + page_data_price (private deals), listing_type (buy_it_now | auction | private_deal), auction_ends_at (UTC) + auction_ends_at_et, availability, currency, description, identity{year, season, card_number, grader, grade, grade_numeric, grade_label, auto_grade, sub_grades, serial_number, print_run, rookie, autograph, cert_number, source} (parsed from the title / description), image_url, images[]. meta: total (site count for the chosen listing type), counts{all, buy_it_now, auction, private_deal}, page, per_page (72), last_page, has_more, price_summary, filters_applied, rows_dropped_by_price, warnings.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"jordan","grader":"psa"}},{"name":"sold","description":"MySlabs' SOLD archive — what graded cards actually sold for, with the sale date: same filters as search (keyword, category, sport, grader, grade, era / year, attributes, condition, price), sorted by listing date or price, 72 a page, plus a sale-date window. meta.price_summary gives count, min, median, mean and max of the page's sold prices.","required_params":[],"optional_params":["query","category","sport","grader","grade","era","year","attributes","condition","lot_type","price_range","min_price","max_price","sort","page","sold_after","sold_before"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword(s) as sellers write titles: player / character, set, card number, parallel ('jordan fleer', 'charizard base set', 'ohtani rookie'). Every word must appear.","on_invalid":"reject","example":"michael jordan","aliases":["q","keyword"]},{"name":"category","type":"enum","required":false,"description":"slabbed_cards (graded: PSA, BGS, SGC, CGC …; default), raw_card_singles, raw_card_lots, wax (sealed), or all. sport / era / attributes work on every card category; grader / grade only on slabbed_cards; condition on raw singles / lots.","on_invalid":"reject","allowed_values":[{"value":"slabbed_cards","label":"Slabbed Cards"},{"value":"raw_card_singles","label":"Raw Card Singles"},{"value":"raw_card_lots","label":"Raw Card Lots"},{"value":"wax","label":"Wax (sealed boxes and packs)"},{"value":"all","label":"All Categories"}],"default":"slabbed_cards","example":"slabbed_cards"},{"name":"sport","type":"enum","required":false,"description":"Sport or game (several allowed, comma-separated): baseball, basketball, football, hockey, soccer, pokemon, formula_one, other, other_non_sport. MySlabs files most other TCGs (One Piece, MTG, Yu-Gi-Oh!) under 'other'.","on_invalid":"reject","allowed_values":[{"value":"baseball","label":"BASEBALL"},{"value":"basketball","label":"BASKETBALL"},{"value":"football","label":"FOOTBALL"},{"value":"hockey","label":"HOCKEY"},{"value":"soccer","label":"SOCCER"},{"value":"pokemon","label":"POKEMON"},{"value":"formula_one","label":"FORMULA ONE"},{"value":"other","label":"OTHER"},{"value":"other_non_sport","label":"OTHER NON-SPORT"}],"example":"pokemon","aliases":["game"]},{"name":"grader","type":"enum","required":false,"description":"Grading company the seller filed (slabbed_cards; several allowed): psa, bgs, sgc, cgc, bvg, csg, other (TAG, HGA, … are 'other').","on_invalid":"reject","allowed_values":[{"value":"psa","label":"PSA"},{"value":"bgs","label":"BGS"},{"value":"sgc","label":"SGC"},{"value":"cgc","label":"CGC"},{"value":"bvg","label":"BVG"},{"value":"csg","label":"CSG"},{"value":"other","label":"Other"}],"example":"psa","aliases":["slab_type","grading_company"]},{"name":"grade","type":"string","required":false,"description":"Grade (slabbed_cards; several allowed, comma-separated): 10, 9.5, 9 … 1 in half steps, or authentic.","on_invalid":"reject","example":"10"},{"name":"era","type":"enum","required":false,"description":"The site's year filter (several allowed): pre_war (1869-1939), vintage (1940-1986), junk (1987-1994), modern (1995-present).","on_invalid":"reject","allowed_values":[{"value":"pre_war","label":"Pre-War Era (1869 - 1939)"},{"value":"vintage","label":"Vintage Era (1940 - 1986)"},{"value":"junk","label":"Junk Era (1987 - 1994)"},{"value":"modern","label":"Modern Era (1995 - Present)"}],"example":"vintage"},{"name":"year","type":"integer","required":false,"description":"Exact card year — matched as a word of the title (MySlabs has eras only).","on_invalid":"reject","example":1986,"minimum":1869,"maximum":2035},{"name":"attributes","type":"enum","required":false,"description":"Card attributes the seller ticked (several allowed): rookie, auto, serial_numbered, one_of_one, parallel, insert, base, patch_relic, sp, ssp, prospect, hall_of_fame, in_person_auto.","on_invalid":"reject","allowed_values":[{"value":"one_of_one","label":"1/1"},{"value":"parallel","label":"Parallel"},{"value":"base","label":"Base"},{"value":"insert","label":"Insert"},{"value":"hall_of_fame","label":"Hall of Fame Inductee"},{"value":"in_person_auto","label":"In-Person Auto"},{"value":"auto","label":"Auto"},{"value":"patch_relic","label":"Patch/Relic"},{"value":"prospect","label":"Prospect Card"},{"value":"rookie","label":"Rookie Card"},{"value":"serial_numbered","label":"Serial Numbered"},{"value":"sp","label":"SP (Short Print)"},{"value":"ssp","label":"SSP (Super Short Print)"}],"example":"rookie","aliases":["attribute"]},{"name":"condition","type":"enum","required":false,"description":"Raw card condition on MySlabs' own scale (raw_card_singles; average for raw_card_lots; several allowed): a (nrmt/mt) … e (poor/fair).","on_invalid":"reject","allowed_values":[{"value":"a","label":"MySlabs A (nrmt/mt)"},{"value":"b","label":"MySlabs B (ex/nrmt)"},{"value":"c","label":"MySlabs C (vg/ex)"},{"value":"d","label":"MySlabs D (good/vg)"},{"value":"e","label":"MySlabs E (poor/fair)"}],"example":"a"},{"name":"lot_type","type":"enum","required":false,"description":"raw_card_lots only: insert_lot, player_lot, complete_set, partial_set, team_set, other.","on_invalid":"reject","allowed_values":[{"value":"insert_lot","label":"Insert Lot"},{"value":"player_lot","label":"Player Lot"},{"value":"complete_set","label":"Complete Set"},{"value":"partial_set","label":"Partial Set"},{"value":"team_set","label":"Team Set"},{"value":"other","label":"Other"}],"example":"player_lot"},{"name":"price_range","type":"string","required":false,"description":"The site's own price buckets (several allowed): 0-249, 250-499, 500-749, 750-999, 1000-2999, 3000-4999, 5000+.","on_invalid":"reject","example":"250-499"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in USD (inclusive). Picks the site buckets that overlap and drops rows outside the exact range (sold: compared with the price shown, premium included).","on_invalid":"reject","example":100,"minimum":0,"maximum":10000000},{"name":"max_price","type":"number","required":false,"description":"Highest price in USD (inclusive).","on_invalid":"reject","example":500,"minimum":0,"maximum":10000000},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest listing first (the site's default; on sold = newest LISTING first, not newest sale)"},{"value":"oldest","label":"Oldest listing first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"},{"value":"most_viewed","label":"Most viewed first"},{"value":"most_tracked","label":"Most watched (tracked) first"}],"default":"newest","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 72 rows a page. Page 1 answers in ~1-3 s; later pages can take up to a minute on a cold start (a site check is cleared first), then ~2-4 s.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500},{"name":"sold_after","type":"string","required":false,"description":"Only sales on/after this date (YYYY-MM-DD) — applied to the rows of the page fetched (combine with sort / pages for a longer window).","on_invalid":"reject","example":"2026-01-01"},{"name":"sold_before","type":"string","required":false,"description":"Only sales on/before this date (YYYY-MM-DD), same rule as sold_after.","on_invalid":"reject","example":"2026-12-31"}],"returns":"rows[]: listing_id, sale_id, url, title, sold_price (USD, as the archive shows it: 1% buyer premium included), sold_price_before_premium, sold_date (YYYY-MM-DD), sale_type (fixed_price | auction), shipping_charged, currency, description, identity{year, season, card_number, grader, grade, grade_numeric, grade_label, auto_grade, sub_grades, serial_number, print_run, rookie, autograph, cert_number, source} (parsed from the title / description), image_url, images[]. meta: page, per_page (72), last_page, has_more, price_summary{count, min, max, median, mean}, sold_date_range{first, last}, filters_applied, rows_dropped_by_price, rows_dropped_by_date, duplicate_sale_records (when the site repeats a listing without a sale date), warnings.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"charizard"}},{"name":"listing","description":"One MySlabs listing in full — live, sold or an auction lot: title, category, raw condition, description, price, buy-now / make-an-offer and the seller's minimum offer, shipping cost, checkout options, views and watchers, the grading company the site verifies certs against, card identity (year, grade, card number, print run, cert when the seller wrote it), all photos; sold listings add sold price and date; auction lots add auction name, current / final bid, bid count, end time, reserve status, next minimum bid and the bid history.","required_params":["listing_id"],"optional_params":["auction_lot_id","include_bids"],"params":[{"name":"listing_id","type":"string","required":true,"description":"A listing id (rows[].listing_id) or a myslabs.com/slab/view/<id>/ or /auction/view/<lot>/ URL.","on_invalid":"reject","example":"1971429","value_pattern":"\\d{1,10}","aliases":["id","url","slab_id"]},{"name":"auction_lot_id","type":"string","required":false,"description":"An auction lot id (rows[].auction_lot_id) — instead of listing_id.","on_invalid":"reject","example":"30456","value_pattern":"\\d{1,9}","aliases":["lot_id","auction_id"]},{"name":"include_bids","type":"boolean","required":false,"description":"Auction lots: also fetch the live status (reserve, next minimum bid) and the bid history (masked bidder as the site prints it, amount, time).","on_invalid":"reject","default":true,"example":true}],"returns":"listing{listing_id, auction_lot_id, url, title, category, condition, description, status (active | sold), currency, price, price_on_request, page_data_price, sold_price (before the buyer premium, as the listing page shows it), sold_price_with_premium, sold_date, buy_now_available, accepts_offers, minimum_offer, shipping_cost, shipping_text, checkout_options[], views, tracking_count, availability, grader_verified{grader, slab_type_code, cert_lookup_hint}, identity{year, season, card_number, grader, grade, grade_numeric, grade_label, auto_grade, sub_grades, serial_number, print_run, rookie, autograph, cert_number, source} (parsed from the title / description), images[], image_url, seller (null: hidden from logged-out visitors), seller_hidden, price_history (null) + price_history_note, auction{lot_id, auction_name, status, current_bid, final_bid, bid_count, ends_at, ends_at_et, reserve_met, has_reserve, next_minimum_bid, extended_bidding, bids[]{bidder, bidder_feedback, amount, time, time_et}}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"1971429"}},{"name":"filters","description":"The filter values MySlabs offers for a category right now (sports / games, grading companies, grades, eras, attributes, conditions, lot types, price buckets) with this API's names for them.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"enum","required":false,"description":"slabbed_cards (graded: PSA, BGS, SGC, CGC …; default), raw_card_singles, raw_card_lots, wax (sealed), or all. sport / era / attributes work on every card category; grader / grade only on slabbed_cards; condition on raw singles / lots.","on_invalid":"reject","allowed_values":[{"value":"slabbed_cards","label":"Slabbed Cards"},{"value":"raw_card_singles","label":"Raw Card Singles"},{"value":"raw_card_lots","label":"Raw Card Lots"},{"value":"wax","label":"Wax (sealed boxes and packs)"},{"value":"all","label":"All Categories"}],"default":"slabbed_cards","example":"slabbed_cards"}],"returns":"category, groups[]{group, label, param (this API's parameter), values[]{value (site), label, name (this API's value)}}, sorts[], listing_types[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"slabbed_cards"}}]},{"name":"n11","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"n11 API scraper — product detail, search, reviews, categories & sellers on n11.com (Turkey's marketplace); prices in TRY. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/n11/v1","spec_available":true,"actions":[{"name":"product/detail","description":"Full n11 product by `url` or `product_id`: title, brand, price, discount, campaign (Sepette indirim), rating, review_count, images, seller, gtin/barcode, category, description, attributes, variants, rating_breakdown and sample reviews. Parsed from n11's own window.model JSON (durable).","required_params":[],"optional_params":["url","product_id","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"Full n11 product URL (…/urun/<slug>-<id>). Provide url OR product_id.","on_invalid":"reject","example":"https://www.n11.com/urun/samsung-galaxy-a07-4-gb-128-gb-samsung-turkiye-garantili-106765738","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"n11 product id — the digits at the end of /urun/<slug>-<id>. Provide product_id OR url (url is most reliable).","on_invalid":"reject","example":"106765738","aliases":["id","groupId"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-12, default 6).","on_invalid":"ignore","default":6,"minimum":1,"maximum":12}],"returns":"product{product_id, title, brand, price, currency=TRY, original_price, discount_rate, campaign (str|null — n11 basket-discount campaign text, e.g. 'SEPETTE %13 İNDİRİM'), campaign_price (str|null — the in-basket price), in_stock, rating, rating_count, comment_count, rating_breakdown{}, gtin, images[], category{}, description, seller{}, attributes[], variants[], sample_reviews[]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.n11.com/urun/samsung-galaxy-a07-4-gb-128-gb-samsung-turkiye-garantili-106765738"}},{"name":"product/reviews","description":"Every customer review n11 publishes for a product, paginated and ordered. `sort=newest` (the default) puts the most recent review first and holds that order across pages, so you can poll a product for new reviews; `sort=helpful` orders by n11's helpful-vote count instead. Each page carries the honest totals — how many people rated the product, how many wrote text, the star breakdown, total_pages for your page_size, and how deep n11 actually serves — plus n11's own AI review summary. Reviewer names are returned exactly as n11 publishes them on the product page — usually masked (e.g. 'a*** s***'), but n11 does not mask all of them, so treat the field as public site content rather than as anonymised.","required_params":[],"optional_params":["url","product_id","page","page_size","sort","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"Full n11 product URL (…/urun/<slug>-<id>). Provide url OR product_id.","on_invalid":"reject","example":"https://www.n11.com/urun/samsung-galaxy-a07-4-gb-128-gb-samsung-turkiye-garantili-106765738","aliases":["product_url"]},{"name":"product_id","type":"string","required":false,"description":"n11 product id — the digits at the end of /urun/<slug>-<id>. Provide product_id OR url (url is most reliable).","on_invalid":"reject","example":"106765738","aliases":["id","groupId"]},{"name":"page","type":"integer","required":false,"description":"Review page — 1-BASED (1, 2, 3…); summary.total_pages says how many exist and summary.reachable_pages how many n11 serves.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1–100, default 20). A larger page_size also reaches further into the corpus, because n11 caps the OFFSET rather than the page number.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100,"aliases":["pageSize"]},{"name":"sort","type":"enum","required":false,"description":"Review ordering. `newest` (default) returns the most recent reviews first and keeps that order across pages. `helpful` orders by n11's helpful-vote count. n11 does not publish an oldest-first or rating-ordered view of its reviews.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (n11 'En Yeni' — the default)"},{"value":"helpful","label":"Most helpful first (n11 'En Faydalı')"}],"default":"newest"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-12, default 6).","on_invalid":"ignore","default":6,"minimum":1,"maximum":12}],"returns":"product_id, page, page_size, sort, ai_summary (n11's own AI digest of the reviews, Turkish; null if it publishes none), summary{average_rating, total_rating_count (every rating incl. star-only), total_comment_count (the written reviews this action pages through), total_pages, page_size, rating_breakdown{5..1}, reachable_reviews, reachable_pages}, reviews[]{id, author (as n11 publishes it — usually masked, not always), title (null on most products — n11 only stores a headline for some reviews), text, rating, date, date_epoch_ms, helpful_count, unhelpful_count, images[], seller, product_id}, count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.n11.com/urun/samsung-galaxy-a07-4-gb-128-gb-samsung-turkiye-garantili-106765738"}},{"name":"search","description":"Search n11 by keyword (`query`), paginated + sortable. Every card carries product_id, title, brand, price, rating, image, url.","required_params":["query"],"optional_params":["page","sort","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword.","on_invalid":"reject","example":"samsung galaxy","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"aliases":["pg"]},{"name":"sort","type":"string","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Recommended (default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"best_seller","label":"Best sellers"},{"value":"newest","label":"Newest"}],"default":"default"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-12, default 6).","on_invalid":"ignore","default":6,"minimum":1,"maximum":12}],"returns":"products[]{product_id, title, brand, price, currency, discount_rate, rating, rating_count, image, url, seller, category, in_stock}, count, total, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"telefon"}},{"name":"category","description":"Browse an n11 category by its `url` (…/<slug> or …-c-<id>), paginated + sortable.","required_params":["url"],"optional_params":["page","sort","max_rotations"],"params":[{"name":"url","type":"string","required":true,"description":"Full n11 category URL (…/<slug> or …-c-<id>).","on_invalid":"reject","example":"https://www.n11.com/telefon-ve-aksesuarlari","aliases":["category_url"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"aliases":["pg"]},{"name":"sort","type":"string","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Recommended (default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"best_seller","label":"Best sellers"},{"value":"newest","label":"Newest"}],"default":"default"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-12, default 6).","on_invalid":"ignore","default":6,"minimum":1,"maximum":12}],"returns":"products[]{...same card as search}, count, total, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.n11.com/urun/samsung-galaxy-a07-4-gb-128-gb-samsung-turkiye-garantili-106765738"}},{"name":"seller","description":"Seller (mağaza) profile + its products by nickname or store `url`.","required_params":["seller"],"optional_params":["page","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Seller nickname (nickName) or full store URL (…/magaza/<nick>).","on_invalid":"reject","example":"tepeiletişim","aliases":["nick","nickname","store","url"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"aliases":["pg"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-12, default 6).","on_invalid":"ignore","default":6,"minimum":1,"maximum":12}],"returns":"seller{nickname, business_name, company_name, follower_count, grade, id}, products[]{...card}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"seller":"tepeiletişim"}},{"name":"resolve","description":"Resolve an n11 short-link (`token` or `url`, e.g. sl.n11.com/n/<token>) to its REAL n11.com URL + type, capturing the final destination — a short link opened directly dead-ends on an app-install page instead of the item. Classifies product/store/campaign/category; for products it embeds the full product detail (include_detail) so one call returns both. Deterministic per token → cacheable.","required_params":[],"optional_params":["token","url","include_detail","max_rotations"],"params":[{"name":"token","type":"string","required":false,"description":"n11 short-link token — the part after /n/ in https://sl.n11.com/n/<token> or https://www.n11.com/n/<token>. Provide token OR url.","on_invalid":"reject","example":"vnLa2le","aliases":["t"]},{"name":"url","type":"string","required":false,"description":"Full n11 short-link (sl.n11.com/n/…, www.n11.com/n/…, or an adj.st link carrying the token). Provide url OR token.","on_invalid":"reject","example":"https://sl.n11.com/n/vnLa2le","aliases":["short_url","link"]},{"name":"include_detail","type":"boolean","required":false,"description":"When the token resolves to a product, also embed the full product detail under `product` (saves a second call). Default true.","on_invalid":"ignore","default":true,"example":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry the fetch (1-12, default 6).","on_invalid":"ignore","default":6,"minimum":1,"maximum":12}],"returns":"token, final_url, kind (product|store|campaign|category|other|dead), product_id (kind=product), store_slug (kind=store), http_status, product{} (full detail when kind=product and include_detail)","cacheable":true,"cache_ttl_seconds":2592000,"pricing":{"mode":"flat","credits":2},"example_params":{"token":"vnETLtk"}}]},{"name":"nadirkitap","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Nadirkitap Turkey Second-Hand & Rare Book Marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/nadirkitap/v1","spec_available":true,"actions":[{"name":"search","description":"Search Nadirkitap, Turkey's marketplace of ~1,100 second-hand and rare booksellers (sahaf): books, magazines and ephemera. Free text, or the site's advanced filters: title, author, publisher, translator, ISBN, language (incl. Ottoman Turkish), category, publication year range, binding, price range, new only, signed, first edition, fine binding, seller. Each row is ONE copy offered by one seller. Give `query` or at least one filter.","required_params":[],"optional_params":["query","type","title","author","publisher","translator","editor","place","isbn","language","category_id","year_min","year_max","binding","new_only","min_price","max_price","signed","first_edition","fine_binding","seller_id","sort","page","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text as typed in the site's search box, matched against title AND author: `nutuk`, `sait faik`, `tutunamayanlar`. On its own it uses the site's keyword search; combined with any filter it is matched against the title only (meta.warnings says so).","on_invalid":"reject","example":"tutunamayanlar","aliases":["q","kelime","keyword"]},{"name":"type","type":"enum","required":false,"description":"What to search: book (kitap), magazine (dergi) or ephemera (Sanat & Koleksiyon: posters, postcards, photos, coins, stamps, records, documents).","on_invalid":"reject","allowed_values":[{"value":"book","label":"Books"},{"value":"magazine","label":"Magazines"},{"value":"ephemera","label":"Ephemera & collectibles"}],"default":"book","example":"book"},{"name":"title","type":"string","required":false,"description":"Words in the title (Eser adı), e.g. `tutunamayanlar`.","on_invalid":"reject","example":"tutunamayanlar","aliases":["kitap_adi"]},{"name":"author","type":"string","required":false,"description":"Author name as listed, e.g. `Oğuz Atay`.","on_invalid":"reject","example":"Oğuz Atay","aliases":["yazar"]},{"name":"publisher","type":"string","required":false,"description":"Publisher (Yayınevi), e.g. `İletişim`.","on_invalid":"reject","example":"İletişim","aliases":["yayinevi"]},{"name":"translator","type":"string","required":false,"description":"Translator (Çeviren).","on_invalid":"reject","example":"Sabahattin Eyüboğlu"},{"name":"editor","type":"string","required":false,"description":"Editor / compiler (Hazırlayan).","on_invalid":"reject","example":"Murat Kaplan"},{"name":"place","type":"string","required":false,"description":"Place of publication (Yayın Yeri), e.g. `İstanbul`.","on_invalid":"reject","example":"İstanbul"},{"name":"isbn","type":"string","required":false,"description":"ISBN-10 or ISBN-13, with or without hyphens.","on_invalid":"reject","example":"978-605-9350-97-6"},{"name":"language","type":"string","required":false,"description":"Language: a Nadirkitap language id or name — 1 Türkçe, 2 Osmanlıca (Ottoman script), 3 Almanca, 4 Arapça, 6 Fransızca, 7 İngilizce, 18 Ermenice, 49 Yunanca… (53 in all; English names like `english` work too).","on_invalid":"reject","example":"2","aliases":["dil"]},{"name":"category_id","type":"integer","required":false,"description":"Category id. Books: 77 Edebiyat, 169 Tarih, 3 Osmanlıca, 150 Sanat, 59 Çocuk… Ephemera: 247 Pul & Filateli, 249 Fotoğraf & Kartpostal, 248 Para & Madalya, 288 Plak… Sub-category ids from a listing's category_path work too. Every search answer lists category_facets with live counts.","on_invalid":"reject","example":77,"aliases":["category"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of publication.","on_invalid":"reject","example":1950,"minimum":1000,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest year of publication.","on_invalid":"reject","example":1980,"minimum":1000,"maximum":2100},{"name":"binding","type":"enum","required":false,"description":"Binding: paperback, hardcover, dust_jacket, cloth, leather.","on_invalid":"reject","allowed_values":[{"value":"paperback","label":"Karton kapaklı"},{"value":"hardcover","label":"Ciltli"},{"value":"dust_jacket","label":"Şömizli"},{"value":"cloth","label":"Bez ciltli"},{"value":"leather","label":"Deri ciltli"}],"example":"hardcover"},{"name":"new_only","type":"boolean","required":false,"description":"Only new (unused) copies.","on_invalid":"reject","default":false},{"name":"min_price","type":"number","required":false,"description":"Lowest price in Turkish lira.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in Turkish lira.","on_invalid":"reject","example":1000,"minimum":0},{"name":"signed","type":"boolean","required":false,"description":"Only signed copies (İmzalı).","on_invalid":"reject","default":false},{"name":"first_edition","type":"boolean","required":false,"description":"Only first editions (Birinci baskı).","on_invalid":"reject","default":false},{"name":"fine_binding","type":"boolean","required":false,"description":"Only fine bindings (Güzel ciltli).","on_invalid":"reject","default":false},{"name":"seller_id","type":"integer","required":false,"description":"Only this seller's listings (seller.id of any row).","on_invalid":"reject","example":1139541,"aliases":["satici"]},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own menu: price_asc, price_desc, author_az, author_za, title_az, title_za, year_asc (oldest edition first), year_desc, newest (latest listed). Unset = the site's default (keyword search: cheapest first; filtered search: newest listings first).","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"author_az","label":"author az"},{"value":"author_za","label":"author za"},{"value":"title_az","label":"title az"},{"value":"title_za","label":"title za"},{"value":"year_asc","label":"year asc"},{"value":"year_desc","label":"year desc"},{"value":"newest","label":"newest"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. A search reaches at most 10,000 results: 417 pages of 24 with filters, 358 pages of 28 for a plain keyword search.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":417},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, route, total, total_capped, page, per_page, last_page, has_more, filters_applied, category_facets[{id,name,count}], listings[]}. Each listing: {id, type, url, title, author, publisher, year, condition, condition_stars, price_try, original_price_try, discounted, price_text, currency, stock, image, seller_id, seller{id, name, url, success_rate_pct, transactions}, shipping_badges[], seller_campaigns[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"title":"tutunamayanlar","author":"Oğuz Atay","sort":"price_asc"}},{"name":"listing","description":"One Nadirkitap listing in full: title, author, translator, editor, publisher, year, place, language, pages, size, binding, ISBN, condition (stars + label), the seller's description, the price printed on the page (and the struck price when the seller runs a discount), stock, category path, images, shipping payer, carrier, dispatch estimate and shipping prices, and the seller: shop name, link, success rate and transaction count.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"integer","required":false,"description":"Listing id (Ürün Kodu), exactly the `id` of a search row.","on_invalid":"reject","example":48119869,"aliases":["listing_id","product_id"]},{"name":"url","type":"string","required":false,"description":"Or the listing URL (https://www.nadirkitap.com/<slug>-kitap<id>.html).","on_invalid":"reject","example":"https://www.nadirkitap.com/gencler-icin-nutuk-mustafa-kemal-ataturk-kitap48119869.html"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, url, title, author, translator, editor, publisher, year, place, language, pages, size, binding, isbn, isbn_normalized, features, state, condition, condition_stars, fine_binding, signed, description, price_try, original_price_try, discounted, ld_price_try, price_mismatch, currency, stock, in_stock, category_path[], images[], shipping_payer, dispatch_estimate, carrier, shipping_one_item_try, shipping_multi_item_try, seller_campaign, seller{id,name,url,success_rate_pct,transactions}, specs{}}. Either `id` or `url` is required.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.nadirkitap.com/gencler-icin-nutuk-mustafa-kemal-ataturk-kitap48119869.html"}},{"name":"offers","description":"Every live copy of one edition across all sellers, by ISBN (or by a listing id, whose ISBN is read first): price, condition, stock and seller of each copy, plus the cheapest and dearest price and the number of distinct sellers on the page. Cheapest first by default. Give `isbn` or `id`.","required_params":[],"optional_params":["isbn","id","sort","page","include_pii"],"params":[{"name":"isbn","type":"string","required":false,"description":"ISBN-10 or ISBN-13 of the edition.","on_invalid":"reject","example":"978-605-9350-97-6"},{"name":"id","type":"integer","required":false,"description":"Or a listing id: its ISBN is read from the listing, then every copy of that edition is listed (2 requests).","on_invalid":"reject","example":48119869,"aliases":["listing_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own menu: price_asc, price_desc, author_az, author_za, title_az, title_za, year_asc (oldest edition first), year_desc, newest (latest listed). Unset = the site's default (keyword search: cheapest first; filtered search: newest listings first).","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"author_az","label":"author az"},{"value":"author_za","label":"author za"},{"value":"title_az","label":"title az"},{"value":"title_za","label":"title za"},{"value":"year_asc","label":"year asc"},{"value":"year_desc","label":"year desc"},{"value":"newest","label":"newest"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. A search reaches at most 10,000 results: 417 pages of 24 with filters, 358 pages of 28 for a plain keyword search.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":417},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{isbn, source_listing_id, offer_count, page, per_page, last_page, has_more, lowest_price_try, highest_price_try, distinct_sellers, offers[]} — each offer is a search row.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"isbn":"978-605-9350-97-6"}},{"name":"seller","description":"One sahaf (seller shop) as its page shows it: name, city, avatar, success rate, transaction count, badges (contract carrier, basket discount), how many books / ephemera it lists, the running campaign, carrier, dispatch estimate, shipping prices and its showcase listings. Its full stock is `search` with `seller_id`.","required_params":["seller_id"],"optional_params":["seller_id","include_pii"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"Seller (sahaf) id: seller.id / seller_id of any search row or listing.","on_invalid":"reject","example":1139541,"aliases":["id","satici"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, url, name, city, avatar, success_rate_pct, transactions, badges[], listing_counts{book, ephemera…}, campaign, campaign_ends, carrier, dispatch_estimate, shipping_one_item_try, shipping_multi_item_try, showcase[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":1139541}}]},{"name":"namshi","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Namshi API scraper — the Gulf's leading fashion and lifestyle store (namshi.com) for the UAE, Saudi Arabia, Kuwait, Bahrain, Oman and Qatar: search clothing, shoes, bags, beauty and sportswear by keyword with namshi's own filters and sorts, browse any category, and read the full product record with its size variants — each price labelled with the market and currency it came from, in English or Arabic. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/namshi/v1","spec_available":true,"actions":[{"name":"search","description":"Search one namshi storefront by keyword and get the matching products: namshi product id, title, brand, images, the price the shopper actually pays together with the struck-through price and the discount percentage, the market and currency the price is quoted in, rating and review count where namshi publishes them, and the express / global / outlet flags. Filter by brand, colour, price band, discounted-only, new arrivals and delivery programme; sort by namshi's ranking, price, discount or newest. The response also carries namshi's whole facet catalogue with counts, so the next call can be narrowed without guessing codes.","required_params":["query"],"optional_params":["country","language","page","sort","brand","colour","price_min","price_max","discounted_only","new_arrivals_only","delivery_type"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for on namshi.com — a product, a brand, a category or a description, in English or Arabic, e.g. 'red summer dress', 'nike air force', 'abaya'. namshi matches loosely, so a keyword it does not know still returns its nearest matches rather than nothing.","on_invalid":"reject","example":"red summer dress","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which namshi storefront to read. Each one is a separate market with its OWN catalogue, availability and currency — a price is only meaningful together with the market it came from, and every row returns both. All six were measured open.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"om","label":"Oman (OMR)"},{"value":"qa","label":"Qatar (QAR)"}],"default":"ae","example":"ae","aliases":["market"]},{"name":"language","type":"enum","required":false,"description":"Language of the titles, descriptions, categories and filter names namshi returns.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]},{"name":"page","type":"integer","required":false,"description":"Result page. namshi returns 60 products per page; `total_pages` in the response says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400},{"name":"sort","type":"enum","required":false,"description":"How namshi orders the results. Anything outside this list is refused, because namshi answers an unrecognised sort by dropping the search and returning its whole catalogue.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"namshi's own ranking (default)"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"discount","label":"Biggest discount first"},{"value":"newest","label":"New arrivals first"}],"default":"recommended","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"Keep only one brand, given as namshi's brand code — lowercase with underscores, as it appears in `brand_code` on every result row and in the `brand_code` entry of `filters` (e.g. 'nike', 'tommy_hilfiger', 'h_m').","on_invalid":"reject","example":"nike","value_pattern":"[a-z0-9][a-z0-9_&.']{0,59}"},{"name":"colour","type":"string","required":false,"description":"Keep only one colour family, given as namshi's colour code. The codes available for the current result set, with counts, are returned under `filters` → `colour_family` (e.g. 'red', 'black', 'multicolour').","on_invalid":"reject","example":"red","value_pattern":"[a-z0-9][a-z0-9_&.']{0,59}","aliases":["color"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to keep, IN THE CURRENCY OF THE CHOSEN MARKET (AED for ae, SAR for sa, KWD for kw, BHD for bh, OMR for om, QAR for qa). The band namshi itself offers for the current result set is in `filters` → `current_price` → `range`.","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to keep, in the currency of the chosen market. Must not be below `price_min`.","on_invalid":"reject","example":300,"minimum":0},{"name":"discounted_only","type":"boolean","required":false,"description":"Keep only products namshi currently shows at a reduced price (those with a struck-through `price_before_discount`).","on_invalid":"reject","default":false,"example":true},{"name":"new_arrivals_only","type":"boolean","required":false,"description":"Keep only the products namshi flags as new arrivals.","on_invalid":"reject","default":false,"example":true},{"name":"delivery_type","type":"enum","required":false,"description":"Keep only products in one of namshi's delivery programmes.","on_invalid":"reject","allowed_values":[{"value":"standard","label":"Standard local delivery"},{"value":"global","label":"Global delivery (shipped from abroad)"}],"example":"standard"}],"returns":"results[]{product_id, variant_sku, title, brand, brand_code, url, image, images[], price (what the shopper pays), price_before_discount (the struck-through price, null when the product is not discounted), discount_percent, currency, market, rating, review_count, rating_scale (null on the many products namshi publishes no rating for), placement (namshi's own row label, e.g. 'organic'), express_delivery, global_delivery, outlet, has_size_variants, max_quantity (namshi's per-order cap, not stock), listing_type}, count, total_results, total_pages, page, echoed_query, department, breadcrumbs[]{name, path}, filters[]{code, name, type, options[]{code, name, count}, range{min, max}}, sorts_available[], redirected (true when namshi answered the keyword with its own canonical landing page instead of a result list), landing_path, currency, market, country, language, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"red summer dress","country":"ae"}},{"name":"category/products","description":"List one namshi category by its path — the same product rows, filters, sorts and paging as `search`, plus the category breadcrumb. Use it to walk a department (women's dresses, men's shoes, kids' clothing) rather than a keyword.","required_params":["category"],"optional_params":["country","language","page","sort","brand","colour","price_min","price_max","discounted_only","new_arrivals_only","delivery_type"],"params":[{"name":"category","type":"string","required":true,"description":"The namshi category to list, as its path or as a full category URL. Take it from `breadcrumbs[].path` or from `filters` → `category` on any result, e.g. 'women-clothing-dresses', 'men-shoes', 'women/women-clothing/women-clothing-dresses/women-clothing-dresses-midi'.","on_invalid":"reject","example":"women-clothing-dresses","aliases":["category_path","url"]},{"name":"country","type":"enum","required":false,"description":"Which namshi storefront to read. Each one is a separate market with its OWN catalogue, availability and currency — a price is only meaningful together with the market it came from, and every row returns both. All six were measured open.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"om","label":"Oman (OMR)"},{"value":"qa","label":"Qatar (QAR)"}],"default":"ae","example":"ae","aliases":["market"]},{"name":"language","type":"enum","required":false,"description":"Language of the titles, descriptions, categories and filter names namshi returns.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]},{"name":"page","type":"integer","required":false,"description":"Result page. namshi returns 60 products per page; `total_pages` in the response says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400},{"name":"sort","type":"enum","required":false,"description":"How namshi orders the results. Anything outside this list is refused, because namshi answers an unrecognised sort by dropping the search and returning its whole catalogue.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"namshi's own ranking (default)"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"},{"value":"discount","label":"Biggest discount first"},{"value":"newest","label":"New arrivals first"}],"default":"recommended","example":"price_asc"},{"name":"brand","type":"string","required":false,"description":"Keep only one brand, given as namshi's brand code — lowercase with underscores, as it appears in `brand_code` on every result row and in the `brand_code` entry of `filters` (e.g. 'nike', 'tommy_hilfiger', 'h_m').","on_invalid":"reject","example":"nike","value_pattern":"[a-z0-9][a-z0-9_&.']{0,59}"},{"name":"colour","type":"string","required":false,"description":"Keep only one colour family, given as namshi's colour code. The codes available for the current result set, with counts, are returned under `filters` → `colour_family` (e.g. 'red', 'black', 'multicolour').","on_invalid":"reject","example":"red","value_pattern":"[a-z0-9][a-z0-9_&.']{0,59}","aliases":["color"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to keep, IN THE CURRENCY OF THE CHOSEN MARKET (AED for ae, SAR for sa, KWD for kw, BHD for bh, OMR for om, QAR for qa). The band namshi itself offers for the current result set is in `filters` → `current_price` → `range`.","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price to keep, in the currency of the chosen market. Must not be below `price_min`.","on_invalid":"reject","example":300,"minimum":0},{"name":"discounted_only","type":"boolean","required":false,"description":"Keep only products namshi currently shows at a reduced price (those with a struck-through `price_before_discount`).","on_invalid":"reject","default":false,"example":true},{"name":"new_arrivals_only","type":"boolean","required":false,"description":"Keep only the products namshi flags as new arrivals.","on_invalid":"reject","default":false,"example":true},{"name":"delivery_type","type":"enum","required":false,"description":"Keep only products in one of namshi's delivery programmes.","on_invalid":"reject","allowed_values":[{"value":"standard","label":"Standard local delivery"},{"value":"global","label":"Global delivery (shipped from abroad)"}],"example":"standard"}],"returns":"results[]{product_id, variant_sku, title, brand, brand_code, url, image, images[], price (what the shopper pays), price_before_discount (the struck-through price, null when the product is not discounted), discount_percent, currency, market, rating, review_count, rating_scale (null on the many products namshi publishes no rating for), placement (namshi's own row label, e.g. 'organic'), express_delivery, global_delivery, outlet, has_size_variants, max_quantity (namshi's per-order cap, not stock), listing_type}, count, total_results, total_pages, page, echoed_query, department, breadcrumbs[]{name, path}, filters[]{code, name, type, options[]{code, name, count}, range{min, max}}, sorts_available[], redirected (true when namshi answered the keyword with its own canonical landing page instead of a result list), landing_path, currency, market, country, language, category","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"women-clothing-dresses","country":"sa"}},{"name":"product/detail","description":"The full namshi product record for one product in one market: title, brand and brand logo, description, the whole image gallery, the price paid with the struck-through price and discount, the market and currency, availability, rating and review count where namshi publishes them, the attribute table, the category breadcrumb, the returns and exchange policy flags, and every size variant with its own stock state and its own price.","required_params":["product_id"],"optional_params":["country","language"],"params":[{"name":"product_id","type":"string","required":true,"description":"Which product to read: the code before /p/ in a namshi product URL (…/Z39B32B8C27F319D6E18FZ/p/ → Z39B32B8C27F319D6E18FZ), or the full product URL itself. Every `search` and `category/products` row returns it as `product_id`; a size-specific code such as …FZ-2 is accepted and resolves to its parent product.","on_invalid":"reject","example":"Z39B32B8C27F319D6E18FZ","value_pattern":"(?:[A-Za-z0-9]{8,40}(?:-\\d+)?|https?://(?:www\\.)?namshi\\.com/\\S+)","aliases":["id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"Which namshi storefront to read. Each one is a separate market with its OWN catalogue, availability and currency — a price is only meaningful together with the market it came from, and every row returns both. All six were measured open.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"bh","label":"Bahrain (BHD)"},{"value":"om","label":"Oman (OMR)"},{"value":"qa","label":"Qatar (QAR)"}],"default":"ae","example":"ae","aliases":["market"]},{"name":"language","type":"enum","required":false,"description":"Language of the titles, descriptions, categories and filter names namshi returns.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["lang"]}],"returns":"product{product_id, variant_sku, title, brand, brand_code, brand_logo, url, description, images[], videos[], price, price_before_discount, discount_percent, currency, market, gtin (null — namshi publishes none), availability (in_stock|out_of_stock), rating, review_count, rating_scale, specifications[]{name, value}, variant_type, variants[]{variant_sku, size, size_conversions, available, stock_label, price, price_before_discount, discount_percent, currency, max_quantity, url}, breadcrumbs[]{name, path}, category_path, images_count, express_delivery, outlet, sold_by_namshi, returnable, exchangeable, final_sale, customizable, max_quantity, placement, country, language}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"Z39B32B8C27F319D6E18FZ"}}]},{"name":"naver","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Naver API (Korea) — Naver Place & Map scraper: search Korean businesses (all categories) with full profiles, ratings, visitor & blog reviews, plus Naver search autocomplete","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/naver/v1","spec_available":true,"actions":[{"name":"place/search","description":"search restaurants & food places by query (richest food data)","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Korean search text (e.g. a business name or 'area + cuisine'). Used to find places, or to resolve a place_id when one isn't given.","on_invalid":"reject","example":"강남 맛집"},{"name":"limit","type":"integer","required":false,"description":"Maximum number of places to return (1-50).","on_invalid":"ignore","default":10,"example":5,"minimum":1}],"returns":"places[]{name,address,rating,review_count,...}, total, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"강남 맛집","limit":5}},{"name":"place/search-all","description":"search ANY business type on Naver Place/Map (clinics, cafes, hotels, salons, shops…)","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Korean search text for ANY business type — clinic, cafe, hotel, salon, shop, hospital, etc. (e.g. '강남 성형외과' = Gangnam plastic surgery).","on_invalid":"reject","example":"강남 성형외과"},{"name":"limit","type":"integer","required":false,"description":"Maximum number of places to return (1-30). The first 10 come from Naver's search-box results; above 10 the rest is filled from the Naver Map result list.","on_invalid":"ignore","default":10,"example":5,"minimum":1}],"returns":"places[]{place_id,name,category,road_address,jibun_address,review_count,has_booking,latitude,longitude}, place_suggestions[], total, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"강남 성형외과","limit":5}},{"name":"place/detail","description":"full place profile (rating, phone, hours, images)","required_params":["place_id"],"optional_params":["query"],"params":[{"name":"place_id","type":"string","required":true,"description":"Naver Place numeric id (from place/search results or place/resolve).","on_invalid":"reject","example":"18485191"},{"name":"query","type":"string","required":false,"description":"Korean search text (e.g. a business name or 'area + cuisine'). Used to find places, or to resolve a place_id when one isn't given.","on_invalid":"reject","example":"강남 맛집"}],"returns":"place{} — name, category, rating, review_count, phone, hours, address, images","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"place_id":"18485191"}},{"name":"place/reviews","description":"visitor reviews (latest page, ~20 per call) with the true total","required_params":["place_id"],"optional_params":["limit","page_size","sort","query"],"params":[{"name":"place_id","type":"string","required":true,"description":"Naver Place numeric id (from place/search results or place/resolve).","on_invalid":"reject","example":"18485191"},{"name":"limit","type":"integer","required":false,"description":"Maximum reviews to collect (capped by Naver).","on_invalid":"ignore","default":50,"example":50,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Accepted for compatibility but currently has no effect — reviews come from one page. meta.page_size_supported reports this.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Accepted for compatibility but currently has no effect — reviews arrive in Naver's own page order. meta.sort_supported reports this.","on_invalid":"ignore","allowed_values":[{"value":"recent","label":"Most recent (default)"},{"value":"RECENT","label":"Most recent"},{"value":"RECOMMEND","label":"Recommended"},{"value":"RATING","label":"By rating"}],"default":"recent","example":"RECENT"},{"name":"query","type":"string","required":false,"description":"Korean search text (e.g. a business name or 'area + cuisine'). Used to find places, or to resolve a place_id when one isn't given.","on_invalid":"reject","example":"강남 맛집"}],"returns":"place_id, place_name, reviews[]{rating,body,visited,created,author}, count, total_reported, capped","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"place_id":"18485191","limit":10}},{"name":"place/blog-reviews","description":"blog reviews","required_params":["place_id"],"optional_params":["limit","page_size","query"],"params":[{"name":"place_id","type":"string","required":true,"description":"Naver Place numeric id (from place/search results or place/resolve).","on_invalid":"reject","example":"18485191"},{"name":"limit","type":"integer","required":false,"description":"Maximum blog reviews to collect.","on_invalid":"ignore","default":50,"example":50,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Accepted for compatibility but currently has no effect — reviews come from one page. meta.page_size_supported reports this.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50},{"name":"query","type":"string","required":false,"description":"Korean search text (e.g. a business name or 'area + cuisine'). Used to find places, or to resolve a place_id when one isn't given.","on_invalid":"reject","example":"강남 맛집"}],"returns":"place_id, reviews[] (blog posts: title, url, snippet, date), count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"place_id":"18485191","limit":10}},{"name":"place/resolve","description":"resolve a query → place_id (works for food AND any other business)","required_params":["query"],"optional_params":["place_id"],"params":[{"name":"query","type":"string","required":true,"description":"Korean search text (e.g. a business name or 'area + cuisine'). Used to find places, or to resolve a place_id when one isn't given.","on_invalid":"reject","example":"강남 맛집"},{"name":"place_id","type":"string","required":false,"description":"Naver Place numeric id (from place/search results or place/resolve).","on_invalid":"reject","example":"18485191"}],"returns":"place_id, name, category, address, review_count, exact_name_match, match_source, candidates[] — the resolved place plus the runner-up matches, so the caller can verify the id belongs to the right branch","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"강남 맛집"}},{"name":"search/autocomplete","description":"Naver search-box keyword suggestions for a partial term (keyword research)","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Partial Korean (or English) search term to autocomplete (e.g. '아이폰' → '아이폰17', '아이폰18'…).","on_invalid":"reject","example":"아이폰"},{"name":"limit","type":"integer","required":false,"description":"Maximum number of suggestions to return (1-30).","on_invalid":"ignore","default":10,"example":10,"minimum":1}],"returns":"query, suggestions[]{suggestion}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"아이폰","limit":5}}]},{"name":"naver-search","category":{"id":"search-seo","title":"Search & SEO"},"title":"Naver Search API — Korean search results from search.naver.com: web, news, blogs, cafes, 지식iN Q&A, images, videos, shopping cards, power-link ads, related searches and autocomplete (Naver SERP scraper, no account)","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/naver-search/v1","spec_available":true,"actions":[{"name":"search","description":"Naver's integrated results page (통합검색) for a query, every block it shows: organic results in Naver's own order (web pages, blog and cafe posts, videos, 지식iN answers), power-link ads, the news block, the image block, Naver Clip short videos, AI-generated related questions with their source documents, Naver's AI briefing when it shows one, shopping product cards, local places (Naver Place block, with the place_id the `naver` engine takes), related searches and the spelling correction Naver applied.","required_params":["query"],"optional_params":["sort","period","date_from","date_to","spell_check","include_related_searches"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"sort","type":"enum","required":false,"description":"Order of the dated blocks (relevance or newest).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (Naver's default)"},{"value":"date","label":"Newest first"}],"default":"relevance","example":"date"},{"name":"period","type":"enum","required":false,"description":"Only results published within this window. Ignored when date_from/date_to are given.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any time"},{"value":"1h","label":"Past hour"},{"value":"1d","label":"Past day"},{"value":"1w","label":"Past week"},{"value":"1m","label":"Past month"},{"value":"3m","label":"Past 3 months"},{"value":"6m","label":"Past 6 months"},{"value":"1y","label":"Past year"}],"default":"all","example":"1w"},{"name":"date_from","type":"string","required":false,"description":"Custom range start, YYYY-MM-DD (use with date_to).","on_invalid":"reject","example":"2026-01-01","aliases":["from"]},{"name":"date_to","type":"string","required":false,"description":"Custom range end, YYYY-MM-DD (use with date_from).","on_invalid":"reject","example":"2026-01-31","aliases":["to"]},{"name":"spell_check","type":"boolean","required":false,"description":"Naver silently searches a corrected spelling when it thinks you mistyped (the answer's spelling_correction says so). false = search exactly what you typed.","on_invalid":"reject","default":true,"example":false},{"name":"include_related_searches","type":"boolean","required":false,"description":"Fetch the related-searches block (one extra small request). false skips it.","on_invalid":"reject","default":true,"example":true}],"returns":"query, spelling_correction, organic_results[]{position, type (web|blog|cafe|post|video|kin), title, url, snippet, source/author, date, date_iso, thumbnail…}, ads[]{position, advertiser, displayed_url, title, description, url, sitelinks[]}, news[], images[], clips[], related_questions[]{question, answer, sources[]}, ai_overview{text, sources[]}, shopping_results[], local_results[]{place_id, name, category, address, phone, reviews, latitude, longitude, url}, related_searches[]{query}, sections[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"아이폰"}},{"name":"web","description":"Web documents (웹문서) — Naver's organic list on its own: 20 results per page with title, URL, displayed URL, snippet, site name, favicon and thumbnail. Paginate with `page`.","required_params":["query"],"optional_params":["page","sort","period","date_from","date_to","spell_check"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (20 results per page as Naver serves them; up to page 20).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":20},{"name":"sort","type":"enum","required":false,"description":"Relevance (default) or newest first.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (Naver's default)"},{"value":"date","label":"Newest first"}],"default":"relevance","example":"date"},{"name":"period","type":"enum","required":false,"description":"Only results published within this window. Ignored when date_from/date_to are given.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any time"},{"value":"1h","label":"Past hour"},{"value":"1d","label":"Past day"},{"value":"1w","label":"Past week"},{"value":"1m","label":"Past month"},{"value":"3m","label":"Past 3 months"},{"value":"6m","label":"Past 6 months"},{"value":"1y","label":"Past year"}],"default":"all","example":"1w"},{"name":"date_from","type":"string","required":false,"description":"Custom range start, YYYY-MM-DD (use with date_to).","on_invalid":"reject","example":"2026-01-01","aliases":["from"]},{"name":"date_to","type":"string","required":false,"description":"Custom range end, YYYY-MM-DD (use with date_from).","on_invalid":"reject","example":"2026-01-31","aliases":["to"]},{"name":"spell_check","type":"boolean","required":false,"description":"Naver silently searches a corrected spelling when it thinks you mistyped (the answer's spelling_correction says so). false = search exactly what you typed.","on_invalid":"reject","default":true,"example":false}],"returns":"results[]{position, type, title, url, displayed_url, domain, snippet, source, favicon, thumbnail, date, date_iso}, page, has_more, spelling_correction","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"아이폰"}},{"name":"news","description":"Naver News search: 10 articles per page with title, publisher, article URL, Naver News URL, date, snippet, thumbnail and the cluster of related articles. Sort by relevance, newest or oldest; filter by period or a custom date range.","required_params":["query"],"optional_params":["page","sort","period","date_from","date_to"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (10 results per page as Naver serves them; up to page 40).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":40},{"name":"sort","type":"enum","required":false,"description":"Article order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"date","label":"Newest first"},{"value":"oldest","label":"Oldest first"}],"default":"relevance","example":"date"},{"name":"period","type":"enum","required":false,"description":"Only results published within this window. Ignored when date_from/date_to are given.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any time"},{"value":"1h","label":"Past hour"},{"value":"1d","label":"Past day"},{"value":"1w","label":"Past week"},{"value":"1m","label":"Past month"},{"value":"3m","label":"Past 3 months"},{"value":"6m","label":"Past 6 months"},{"value":"1y","label":"Past year"}],"default":"all","example":"1w"},{"name":"date_from","type":"string","required":false,"description":"Custom range start, YYYY-MM-DD (use with date_to).","on_invalid":"reject","example":"2026-01-01","aliases":["from"]},{"name":"date_to","type":"string","required":false,"description":"Custom range end, YYYY-MM-DD (use with date_from).","on_invalid":"reject","example":"2026-01-31","aliases":["to"]}],"returns":"news[]{position, title, url, snippet, source, source_url, naver_news_url, date, date_iso, print_position, thumbnail, related_articles[], related_articles_total}, page, has_more","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"삼성전자"}},{"name":"blog","description":"Naver Blog search: 30-40 posts per page with title, URL, snippet, blogger, blog URL, date, thumbnail and image count. Power-content ads in the list are flagged is_ad. Naver repeats part of a page on the next one; those repeats are removed, so a deeper page can hold fewer new posts (repeated_from_previous_page_removed says how many).","required_params":["query"],"optional_params":["page","sort","period","date_from","date_to"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (30 results per page as Naver serves them; up to page 10).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Relevance (default) or newest first.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (Naver's default)"},{"value":"date","label":"Newest first"}],"default":"relevance","example":"date"},{"name":"period","type":"enum","required":false,"description":"Only results published within this window. Ignored when date_from/date_to are given.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any time"},{"value":"1h","label":"Past hour"},{"value":"1d","label":"Past day"},{"value":"1w","label":"Past week"},{"value":"1m","label":"Past month"},{"value":"3m","label":"Past 3 months"},{"value":"6m","label":"Past 6 months"},{"value":"1y","label":"Past year"}],"default":"all","example":"1w"},{"name":"date_from","type":"string","required":false,"description":"Custom range start, YYYY-MM-DD (use with date_to).","on_invalid":"reject","example":"2026-01-01","aliases":["from"]},{"name":"date_to","type":"string","required":false,"description":"Custom range end, YYYY-MM-DD (use with date_from).","on_invalid":"reject","example":"2026-01-31","aliases":["to"]}],"returns":"posts[]{position, type (blog|post|cafe|ad), title, url, snippet, author, author_url, date, date_iso, thumbnail, image_count, is_ad}, page, has_more, repeated_from_previous_page_removed","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"강남 맛집"}},{"name":"cafe","description":"Naver Cafe search: about 30 posts per page with title, URL, snippet, cafe name, cafe URL, date and thumbnail. Sort, period, article type (all / trade / general / cafe names), trade method and trade status filters. Pages beyond 1 follow Naver's own continuation link, so page N costs N requests (max 5).","required_params":["query"],"optional_params":["page","sort","period","article_type","trade_method","trade_status"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (30 results per page as Naver serves them; up to page 5).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5},{"name":"sort","type":"enum","required":false,"description":"Relevance (default) or newest first.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (Naver's default)"},{"value":"date","label":"Newest first"}],"default":"relevance","example":"date"},{"name":"period","type":"enum","required":false,"description":"Posting period.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any time"},{"value":"1h","label":"Past hour"},{"value":"1d","label":"Past day"},{"value":"1w","label":"Past week"},{"value":"1m","label":"Past month"},{"value":"3m","label":"Past 3 months"},{"value":"6m","label":"Past 6 months"},{"value":"1y","label":"Past year"}],"default":"all","example":"1w"},{"name":"article_type","type":"enum","required":false,"description":"Kind of cafe post.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All posts"},{"value":"trade","label":"Trade posts (거래글)"},{"value":"general","label":"General posts (일반글)"},{"value":"cafe_name","label":"Match cafe names (카페명)"}],"default":"all","example":"trade"},{"name":"trade_method","type":"enum","required":false,"description":"Trade method (trade posts).","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any"},{"value":"safe","label":"Safe trade (안전거래)"},{"value":"general","label":"General trade (일반거래)"}],"default":"all","example":"safe"},{"name":"trade_status","type":"enum","required":false,"description":"Trade status (trade posts).","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any"},{"value":"selling","label":"For sale (판매중)"},{"value":"sold","label":"Sold (판매완료)"}],"default":"all","example":"selling"}],"returns":"posts[]{position, type (cafe|ad), title, url, snippet, cafe_name, cafe_url, cafe_id, article_id, date, date_iso, thumbnail, is_ad}, page, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"아이폰"}},{"name":"kin","description":"Naver 지식iN (Knowledge iN) Q&A search: 10 questions per page with question title and text, the shown answer excerpt, answerer nickname and badge, expert flag and date.","required_params":["query"],"optional_params":["page"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (10 results per page as Naver serves them; up to page 30).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":30}],"returns":"questions[]{position, title, url, question_id, question, answer, answer_url, answerer, answerer_badge, answerer_is_expert, date, date_iso}, page, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"아이폰 배터리"}},{"name":"images","description":"Naver Image search: 50 images per page with the original image URL, a thumbnail, the page it is on, source name and domain, size and date.","required_params":["query"],"optional_params":["page","sort","period"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (50 results per page as Naver serves them; up to page 20).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":20},{"name":"sort","type":"enum","required":false,"description":"Relevance (default) or newest first.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (Naver's default)"},{"value":"date","label":"Newest first"}],"default":"relevance","example":"date"},{"name":"period","type":"enum","required":false,"description":"Only results published within this window. Ignored when date_from/date_to are given.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any time"},{"value":"1h","label":"Past hour"},{"value":"1d","label":"Past day"},{"value":"1w","label":"Past week"},{"value":"1m","label":"Past month"},{"value":"3m","label":"Past 3 months"},{"value":"6m","label":"Past 6 months"},{"value":"1y","label":"Past year"}],"default":"all","example":"1w"}],"returns":"images[]{position, title, image_url, thumbnail, source_page, source, source_domain, author, width, height, date, date_iso, image_id}, page, has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"고양이"}},{"name":"videos","description":"Naver Video search: up to 48 videos per page (YouTube, Naver TV, Chzzk and others) with title, URL, platform, channel, duration, views and date. Sort by relevance, date or views; filter by period, duration or short-form only (shorts carry no duration or view count: Naver does not print them on short-form cards). Naver repeats part of a page on the next one; repeats are removed (repeated_from_previous_page_removed).","required_params":["query"],"optional_params":["page","sort","period","duration","shorts_only"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (48 results per page as Naver serves them; up to page 10).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Video order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"date","label":"Newest first"},{"value":"views","label":"Most viewed"}],"default":"relevance","example":"date"},{"name":"period","type":"enum","required":false,"description":"Upload period.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any time"},{"value":"1d","label":"Past day"},{"value":"1w","label":"Past week"},{"value":"1m","label":"Past month"},{"value":"3m","label":"Past 3 months"},{"value":"6m","label":"Past 6 months"},{"value":"1y","label":"Past year"}],"default":"all","example":"1m"},{"name":"duration","type":"enum","required":false,"description":"Video length.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Any length"},{"value":"under_10m","label":"Up to 10 minutes"},{"value":"10m_30m","label":"10-30 minutes"},{"value":"30m_1h","label":"30-60 minutes"},{"value":"over_1h","label":"Over 1 hour"}],"default":"all","example":"under_10m"},{"name":"shorts_only","type":"boolean","required":false,"description":"Only short-form videos (숏폼: YouTube Shorts, Naver Clip, ...). Their rows have duration_seconds and views null.","on_invalid":"reject","default":false,"example":false}],"returns":"videos[]{position, title, url, platform, channel, channel_url, duration_seconds, views, views_display, date, date_iso, thumbnail, is_certified, is_short}, page, has_more, repeated_from_previous_page_removed","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"아이폰 리뷰"}},{"name":"shopping","description":"The shopping product cards Naver shows on its integrated results page for a query: price-comparison catalogue cards (lowest price across N malls) and Naver Plus Store cards, with price, original price, discount, mall, mall count, rating, review count, delivery fee and ad flag. Naver shows about 8-12 cards per query; Naver Shopping's own search site is not part of this action.","required_params":["query"],"optional_params":["spell_check"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"spell_check","type":"boolean","required":false,"description":"Naver silently searches a corrected spelling when it thinks you mistyped (the answer's spelling_correction says so). false = search exactly what you typed.","on_invalid":"reject","default":true,"example":false}],"returns":"products[]{position, block (price_compare|plus_store), product_id, title, url, price, original_price, discount_percent, currency, is_lowest_price_of_catalog, mall, mall_count, rating, reviews, purchases, delivery_fee, free_delivery, image, category_id, is_ad}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"아이폰"}},{"name":"ads","description":"Naver power-link search ads for a keyword (Naver's full ad list, 25 per page, with the total number of advertisers): advertiser, displayed URL, ad title, description, sitelinks, extensions and the advertiser's running-time band. `url` and sitelink URLs are Naver's ad click links (ader.naver.com), the only link the page carries: opening one counts as a paid click for the advertiser; `displayed_url` is the advertiser's site.","required_params":["query"],"optional_params":["page"],"params":[{"name":"query","type":"string","required":true,"description":"Search terms, in Korean or any language (e.g. 아이폰 17, 강남 맛집, python tutorial). Naver operators work as on the site (\"exact phrase\", -exclude).","on_invalid":"reject","example":"아이폰 17","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (25 results per page as Naver serves them; up to page 5).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":5}],"returns":"ads[]{position, advertiser, displayed_url, title, description, url, sitelinks[], extensions[], ad_period, ad_id, naver_pay}, total_ads, page, has_more","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"아이폰"}},{"name":"autocomplete","description":"Naver search-box suggestions for a partial query (keyword research).","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Partial search term (Korean or English).","on_invalid":"reject","example":"아이폰","aliases":["q","keyword","search"]}],"returns":"suggestions[]{position, suggestion}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"아이폰"}}]},{"name":"newegg","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Newegg US and Canada product search and detail","version":"1.0.3","pii_redact_default":false,"mint_reusable":null,"base_path":"/newegg/v1","spec_available":true,"actions":[{"name":"search","description":"Search Newegg products by keyword with page pagination, sort (price/best-selling/rating), brand/facet filter, and a price range. Return up to 360 products in one call with `max_results` (36 per page, paged for you); `page` picks where that window starts. Paid placements are flagged `sponsored: true` and can be excluded with `include_sponsored: false` Canada: keyword query, page 1-2, local limit 1-60; source CAD prices.","required_params":["query"],"optional_params":["max_results","page","sort","n_value","min_price","max_price","include_sponsored","country","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, or a Newegg item number (N82E16814987002, 14-987-002, 9SIA…), which returns that one product.","on_invalid":"reject","example":"ssd"},{"name":"max_results","type":"integer","required":false,"description":"How many products to return. MAXIMUM 300 — the published ceiling, so there is nothing to probe for. Newegg serves 36 organic products per page, so asking for more than that fetches further pages automatically (up to 14 of them, ~1 MB each — ask for what you will use). Omit it and you get exactly one page, which is what this action has always done. A large max_results is a BEST EFFORT, not a guarantee: Newegg mixes marketplace tiles this API cannot key into the grid, so many keywords yield well under 36 usable rows per page — measured 2026-08-07, 'ssd' and 'monitor' reached 301 and 283, while narrower keywords stop earlier. When fewer rows come back than you asked for, `meta.incomplete` is true, so a short list never looks like the whole catalogue. Above 300 the value is clamped, not rejected.","on_invalid":"ignore","default":36,"example":100,"minimum":1,"maximum":300,"aliases":["limit","max"]},{"name":"page","type":"integer","required":false,"description":"Result page to start from (1-based, 36 products per page). MAXIMUM 100 — Newegg's own keyword search stops there. Measured 2026-08-07 on 'laptop' (46,230 matches): pages 97-100 are all different, and 102/150/200/300/500 are byte-identical to page 100, so past 100 Newegg silently re-serves page 100. A higher value is clamped to 100 instead of pretending it worked. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Newegg mixes paid placements into its keyword-search grid. By default they are returned in their real grid position and marked `sponsored: true` so you can tell them apart. Set to false to return organic results only. Measured 2026-08-07 across 9 keyword searches: Newegg serves a fixed 36-product organic page and injects 0-8 paid tiles on top of it (mean 5.4/page), so this flag really does remove rows. Category listings carry none, which is why the flag is published on the keyword actions only.","on_invalid":"ignore","default":true,"aliases":["sponsored"]},{"name":"sort","type":"enum","required":false,"description":"Sort order: 0=Featured, 1=Lowest Price, 2=Highest Price, 3=Best Selling, 4=Best Rating, 5=Most Reviews.","on_invalid":"ignore","allowed_values":[{"value":"0","label":"Featured Items"},{"value":"1","label":"Lowest Price"},{"value":"2","label":"Highest Price"},{"value":"3","label":"Best Selling"},{"value":"4","label":"Best Rating"},{"value":"5","label":"Most Reviews"}],"default":"0","example":"1"},{"name":"n_value","type":"string","required":false,"description":"Newegg 'N' facet filter value (from the filters action) — e.g. a brand or attribute facet. Combine space-separated for multiple facets.","on_invalid":"reject"},{"name":"min_price","type":"number","required":false,"description":"Minimum price (USD).","on_invalid":"ignore","example":50},{"name":"max_price","type":"number","required":false,"description":"Maximum price (USD).","on_invalid":"ignore","example":500},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]},{"name":"limit","type":"integer","required":false,"description":"Canada only: local return cap within one source search page, default 36. Does not change the source page stride. US pagination/max_results behaviour is unchanged.","on_invalid":"reject","example":12,"minimum":1,"maximum":60}],"returns":"results[] (item_id, sponsored, title, brand, price, list_price, rating, review_count, weight, image, url, availability, in_stock), page, total, has_more, next_page, plus meta{sponsored_count, include_sponsored, requested_max}. sponsored is true when Newegg was paid for that grid position (organic rows are false, never null) — pass include_sponsored=false to drop them. Stock vocabulary (identical on every action): availability is the string \"in_stock\" | \"out_of_stock\" | null (null = Newegg publishes no stock signal for that row), and in_stock is the matching boolean true | false | null — the two always agree. weight is the shipping weight in pounds from the listing grid (null when the merchant left it unset); it usually matches the product action's weight but not always — 10 of 14 sampled items agreed — so use the product action when the exact number matters. item_id is Newegg's native N82E… code, returned verbatim. A query that is an item number returns that product as the single row, with total 1 and meta.item_number_match true.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":36,"min":1},"example_params":{"query":"ssd"}},{"name":"price","description":"Live price and stock for ONE item — the cheap way to refresh products you already hold, without paying for the whole product page Canada is not qualified for this action; US behaviour is preserved.","required_params":[],"optional_params":["item_id","url","country"],"params":[{"name":"item_id","type":"string","required":false,"description":"Newegg item id (the N82E... code in a /p/ URL).","on_invalid":"reject","example":"N82E16820156412"},{"name":"url","type":"string","required":false,"description":"Full Newegg product URL (overrides item_id when both are given).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"item_id, price, list_price, currency, in_stock, stock_flag, shipping_charge, seller (item_id or url required). Reads the same ~9KB module newegg.com's own product page calls for live pricing, against ~394KB for `product` — roughly 40x cheaper, so a daily price/stock refresh costs a fraction of a re-fetch. `in_stock` is Newegg's own boolean: a sold-out item returns false with its price still present, never a guess.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"N82E16820156412"}},{"name":"product","description":"Full product detail by item_id or url — price, list price, promotion, brand, model, MPN, GTIN/UPC barcode, shipping weight and package dimensions, specifications, bullets, images, rating, stock, and marketplace seller Canada: item_id or Newegg.ca product URL; CAD detail. US remains default.","required_params":[],"optional_params":["item_id","url","country"],"params":[{"name":"item_id","type":"string","required":false,"description":"Newegg item id (the N82E... code in a /p/ URL).","on_invalid":"reject","example":"N82E16820156412"},{"name":"url","type":"string","required":false,"description":"Full Newegg product URL (overrides item_id when both are given).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"product{} — item_id (Newegg's native N82E… code, verbatim), title, brand, price, list_price, promotion, seller, specifications[], bullets[], images[], rating{average, review_count}, model, mpn, gtin, weight, weight_unit, dimensions{length, width, height, unit}, availability, in_stock (item_id or url required). gtin is the retail barcode as a digit string (UPC-A 12 digits / EAN-13 13 digits), null when the product has no barcode on Newegg — gift cards and software downloads. It is check-digit validated, so a merchant's internal id in that field is rejected rather than returned as a barcode. weight is the product page's shipping weight in pounds and dimensions are the shipping-package size in inches (both null when the merchant left them unset); together they are what a shipping-rate quote needs. Note that items which never physically ship — gift cards and software downloads — carry Newegg's placeholder of 1 lb and 1 x 1 x 1 in (a 0.01 variant on some), so treat a 1/1x1x1 row as 'not a shipped item' rather than a real parcel. Stock vocabulary (identical on every action): availability is \"in_stock\" | \"out_of_stock\" | null and in_stock is the matching boolean true | false | null. page_match says how the page relates to the item you asked for: \"exact\" = its own listing; \"offer\" = Newegg put another seller's offer in the buy box, so price, stock and seller are that offer (the one the page sells, product_number is its 9SI… code) and own_offer{price, in_stock, availability} is the item's own listing when Newegg has one; \"unverified\" = the page carries no number to compare. offer_price_range{min, max} is Newegg's published range across offers, null when none. A number Newegg cannot show as that item returns NOT_FOUND, never another item's data.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"N82E16820156412"}},{"name":"reviews","description":"Customer reviews for a Newegg product — fully paginated through ALL reviews (20/page) with rating filter and sort, plus a rating distribution summary. Returns rating, title, body, pros/cons, author, verified-purchase, helpful votes, media, and merchant replies Canada is not qualified for this action; US behaviour is preserved.","required_params":["item_id"],"optional_params":["page","rating","sort","url","country"],"params":[{"name":"item_id","type":"string","required":true,"description":"Newegg item id (the N82E... code in a /p/ URL).","on_invalid":"reject","example":"N82E16820156412"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"rating","type":"integer","required":false,"description":"Filter to a single star rating (1-5). Omit for all.","on_invalid":"ignore","example":5,"minimum":1,"maximum":5},{"name":"sort","type":"enum","required":false,"description":"Review sort: 1=Most Recent, 2=Most Helpful, 3=Highest Rating, 4=Lowest Rating.","on_invalid":"ignore","allowed_values":[{"value":"1","label":"Most Recent"},{"value":"2","label":"Most Helpful"},{"value":"3","label":"Highest Rating"},{"value":"4","label":"Lowest Rating"}],"default":"1","example":"1"},{"name":"url","type":"string","required":false,"description":"Full Newegg product URL (overrides item_id when both are given).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"reviews[] (rating, title, text, pros, cons, author, verified_purchase, helpful_votes, media), rating_summary{total_count, average_rating, rating_distribution}, page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"N82E16820156412"}},{"name":"best_sellers","description":"Top best-selling products for a keyword or category (Newegg's Best Selling sort), paginated. Same `max_results` (up to 300, 36/page) and `include_sponsored` controls as the search action Canada is not qualified for this action; US behaviour is preserved.","required_params":[],"optional_params":["query","n_value","subcategory_id","subcategory_slug","max_results","page","min_price","max_price","include_sponsored","country"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to rank by best-sellers. Omit it and pass `n_value` instead to browse a whole category as a listing.","on_invalid":"reject","example":"gpu"},{"name":"n_value","type":"string","required":false,"description":"Newegg category node id — the `N=` value from a newegg.com category URL, also returned by `categories` and `category_tree`. Give this INSTEAD of `query` for a query-less best-seller listing (newegg.com has no site-wide grid: its own `/p/pl` with no node is a 404, so a node is required rather than optional).","on_invalid":"reject","example":"100006740"},{"name":"max_results","type":"integer","required":false,"description":"How many products to return. MAXIMUM 300 — the published ceiling, so there is nothing to probe for. Newegg serves 36 organic products per page, so asking for more than that fetches further pages automatically (up to 14 of them, ~1 MB each — ask for what you will use). Omit it and you get exactly one page, which is what this action has always done. A large max_results is a BEST EFFORT, not a guarantee: Newegg mixes marketplace tiles this API cannot key into the grid, so many keywords yield well under 36 usable rows per page — measured 2026-08-07, 'ssd' and 'monitor' reached 301 and 283, while narrower keywords stop earlier. When fewer rows come back than you asked for, `meta.incomplete` is true, so a short list never looks like the whole catalogue. Above 300 the value is clamped, not rejected.","on_invalid":"ignore","default":36,"example":100,"minimum":1,"maximum":300,"aliases":["limit","max"]},{"name":"page","type":"integer","required":false,"description":"Result page to start from (1-based, 36 products per page). MAXIMUM 100 — Newegg's own keyword search stops there. Measured 2026-08-07 on 'laptop' (46,230 matches): pages 97-100 are all different, and 102/150/200/300/500 are byte-identical to page 100, so past 100 Newegg silently re-serves page 100. A higher value is clamped to 100 instead of pretending it worked. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Newegg mixes paid placements into its keyword-search grid. By default they are returned in their real grid position and marked `sponsored: true` so you can tell them apart. Set to false to return organic results only. Measured 2026-08-07 across 9 keyword searches: Newegg serves a fixed 36-product organic page and injects 0-8 paid tiles on top of it (mean 5.4/page), so this flag really does remove rows. Category listings carry none, which is why the flag is published on the keyword actions only.","on_invalid":"ignore","default":true,"aliases":["sponsored"]},{"name":"min_price","type":"number","required":false,"description":"Minimum price (USD).","on_invalid":"ignore"},{"name":"max_price","type":"number","required":false,"description":"Maximum price (USD).","on_invalid":"ignore"},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"results[] best-selling products (item_id, sponsored, title, brand, price, rating, review_count, weight, url, availability, in_stock), page, total, has_more, next_page. Same row shape and same stock vocabulary as the search action: availability is \"in_stock\" | \"out_of_stock\" | null with in_stock as the matching boolean; weight is the shipping weight in pounds.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":36,"min":1},"example_params":{"query":"gpu"}},{"name":"qna","description":"product Q&A questions and answers from PDP initial state Canada is not qualified for this action; US behaviour is preserved.","required_params":["item_id"],"optional_params":["url","country"],"params":[{"name":"item_id","type":"string","required":true,"description":"Newegg item id (the N82E... code in a /p/ URL).","on_invalid":"reject","example":"N82E16820156412"},{"name":"url","type":"string","required":false,"description":"Full Newegg product URL (overrides item_id when both are given).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"questions[] {question, author, answers[], answer_count, upvotes}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"N82E16820156412"}},{"name":"category","description":"Browse a Newegg subcategory's product listing by subcategory_id, paginated. The slug is auto-resolved when omitted (pass subcategory_slug from category_tree to skip the lookup) Canada is not qualified for this action; US behaviour is preserved.","required_params":["subcategory_id"],"optional_params":["subcategory_slug","page","country"],"params":[{"name":"subcategory_id","type":"string","required":true,"description":"Newegg subcategory id (from the category_tree action).","on_invalid":"reject","example":"343"},{"name":"subcategory_slug","type":"string","required":false,"description":"Category slug from category_tree (e.g. 'Desktop-Memory'). Optional — auto-resolved from the id when omitted.","on_invalid":"reject","example":"Desktop-CPU-Processor"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"results[] listing cards (same row shape as search: item_id, sponsored, title, brand, price, rating, review_count, weight, url, availability, in_stock), subcategory_id, subcategory_slug, page, total, has_more, next_page. `sponsored` is false on every row here — Newegg sells placements on keyword search, not on category listings (measured: 0 paid tiles over 10 category pages / 358 products), which is why this action has no include_sponsored flag. Stock vocabulary: availability is \"in_stock\" | \"out_of_stock\" | null with in_stock as the matching boolean.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"subcategory_id":"343"}},{"name":"browse","description":"Alias of the category action — browse a subcategory's product listing, paginated Canada is not qualified for this action; US behaviour is preserved.","required_params":["subcategory_id"],"optional_params":["subcategory_slug","page","country"],"params":[{"name":"subcategory_id","type":"string","required":true,"description":"Newegg subcategory id (alias of the category action).","on_invalid":"reject","example":"343"},{"name":"subcategory_slug","type":"string","required":false,"description":"Category slug from category_tree (optional).","on_invalid":"reject"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"results[] listing cards (same as category, including availability | in_stock and weight in pounds), page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"subcategory_id":"343"}},{"name":"deals","description":"Shell Shocker daily deal items Canada is not qualified for this action; US behaviour is preserved.","required_params":[],"optional_params":["page","country"],"params":[{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"results[] today's Shell Shocker deal items (title, price, url)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"categories","description":"top-level store/category nodes from homepage RolloverMenu Canada is not qualified for this action; US behaviour is preserved.","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"categories[] {store_id, name, store_type, url} top-level stores","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ca"}},{"name":"filters","description":"search facets, department navigation, and sort options for a query Canada is not qualified for this action; US behaviour is preserved.","required_params":["query"],"optional_params":["page","country"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to get facets/sort options for.","on_invalid":"reject","example":"ssd"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"facets[], navigation[], sort_options[] {value, name}, total_products","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ssd"}},{"name":"similar","description":"related product cards from a product detail page Canada is not qualified for this action; US behaviour is preserved.","required_params":["item_id"],"optional_params":["url","limit","country"],"params":[{"name":"item_id","type":"string","required":true,"description":"Newegg item id (the N82E... code in a /p/ URL).","on_invalid":"reject","example":"N82E16820156412"},{"name":"url","type":"string","required":false,"description":"Full Newegg product URL (overrides item_id when both are given).","on_invalid":"reject"},{"name":"limit","type":"integer","required":false,"description":"Max related items (1-36, default 12).","on_invalid":"ignore","default":12,"example":12,"minimum":1,"maximum":36},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"results[] related products (item_id, product_number, title, brand, price, rating, review_count, weight, image, url, availability, in_stock, source). Stock vocabulary: availability is \"in_stock\" | \"out_of_stock\" | null with in_stock as the matching boolean; weight is the shipping weight in pounds.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"N82E16820156412"}},{"name":"category_tree","description":"nested category navigation tree from a Newegg store landing page Canada is not qualified for this action; US behaviour is preserved.","required_params":[],"optional_params":["store_id","store_slug","country"],"params":[{"name":"store_id","type":"integer","required":false,"description":"Newegg store id (default 1; from the categories action).","on_invalid":"ignore","default":1,"example":1},{"name":"store_slug","type":"string","required":false,"description":"Optional store slug for the landing page.","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"tree[] nested category nodes {name, store_id, subcategory_id, subcategory_slug, url}, store_id","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"store_id":1}},{"name":"variants","description":"Product family/variant options from the PDP — size/capacity/colour family members, package bundles, and any combo-deal promotion Canada is not qualified for this action; US behaviour is preserved.","required_params":["item_id"],"optional_params":["url","country"],"params":[{"name":"item_id","type":"string","required":true,"description":"Newegg item id (the N82E... code in a /p/ URL).","on_invalid":"reject","example":"N82E16820156412"},{"name":"url","type":"string","required":false,"description":"Full Newegg product URL (overrides item_id when both are given).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"US remains the default. Canada supports keyword search, pages 1-2 with local limit 1-60, and product by item_id or Canada URL. Other filters and actions remain US-only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States - existing actions, USD"},{"value":"ca","label":"Canada - search and product, CAD"}],"default":"us","example":"ca","aliases":["market"]}],"returns":"variants[] {product_number, parent_item, title, price, availability, in_stock, bullets, type} + combo_deal{} when present. Stock vocabulary: availability is \"in_stock\" | \"out_of_stock\" | null with in_stock as the matching boolean.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"N82E16820156412"}}]},{"name":"news-article","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Article Extraction API — extract a clean, readable article from any news or blog URL, plus news search","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/news-article/v1","spec_available":true,"actions":[{"name":"extract","description":"Extract a clean article from any news or blog URL: returns title, full text, author, publication date, top image, all images, language, site name, and canonical URL. Automatically follows Google News and Bing News redirect links to the original publisher page.","required_params":["url"],"optional_params":["render","include_markdown"],"params":[{"name":"url","type":"string","required":true,"description":"Article URL to extract. Google-News / Bing-News redirect URLs are auto-resolved to the real publisher URL first.","on_invalid":"reject","example":"https://en.wikipedia.org/wiki/Web_scraping"},{"name":"render","type":"enum","required":false,"description":"Browser-render policy. NOTE: this image ships without a browser, so render is a graceful no-op (meta.rendered=false); recon proved it recovers ~0.","on_invalid":"ignore","allowed_values":[{"value":"auto","label":"Render only if the bare fetch looks JS-hydrated (default)"},{"value":"never","label":"Never render — bare curl only"},{"value":"force","label":"Always render with a browser"}],"default":"auto","example":"auto"},{"name":"include_markdown","type":"boolean","required":false,"description":"Also return the article body as Markdown (default true).","on_invalid":"ignore","default":true,"example":true}],"returns":"article{} — title, text, author, date, top_image, images[], language, site_name, canonical (+ markdown if include_markdown); meta.rendered/resolved_from","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://en.wikipedia.org/wiki/Web_scraping"}},{"name":"news_search","description":"recent-news list from source=google|bing|gdelt|rss|all (unified schema title/url/source/published/lang); resolve=true → Google-News URLs become real publisher URLs","required_params":[],"optional_params":["query","source","lang","country","limit","rss_url","resolve"],"params":[{"name":"query","type":"string","required":false,"description":"Search keywords. Required for source=google|bing|gdelt|all (not for source=rss).","on_invalid":"reject","example":"artificial intelligence"},{"name":"source","type":"enum","required":false,"description":"News backend. Unknown values are rejected. source=rss requires rss_url.","on_invalid":"reject","allowed_values":[{"value":"google","label":"Google News RSS (default)"},{"value":"bing","label":"Bing News"},{"value":"gdelt","label":"GDELT"},{"value":"rss","label":"A custom RSS feed (needs rss_url)"},{"value":"all","label":"Merge all sources"}],"default":"google","example":"google"},{"name":"lang","type":"string","required":false,"description":"UI/content language hint (e.g. en, tr, de). Default en.","on_invalid":"reject","default":"en","example":"en"},{"name":"country","type":"string","required":false,"description":"Edition country, ISO 3166 alpha-2 (e.g. US, GB, TR). Default US.","on_invalid":"reject","default":"US","example":"US"},{"name":"limit","type":"integer","required":false,"description":"Max results (1-100, default 20); clamped.","on_invalid":"ignore","default":20,"example":10,"minimum":1,"maximum":100},{"name":"rss_url","type":"string","required":false,"description":"Custom RSS/Atom feed URL — required when source=rss.","on_invalid":"reject","example":"https://feeds.bbci.co.uk/news/rss.xml","aliases":["feed_url"]},{"name":"resolve","type":"boolean","required":false,"description":"If true, resolve Google-News result URLs to the real publisher URL (extra requests).","on_invalid":"ignore","default":false,"example":true}],"returns":"results[] (title, url, source, published, lang), count; meta.sources/resolved/errors/stop_reason","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"artificial intelligence","limit":10}}]},{"name":"news-intel","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"News Intelligence API — global real-time news and event search across GDELT (100k+ sources, 65+ languages), Google News and Hacker News, de-duplicated into one article schema: search, timeline, trending and top headlines","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/news-intel/v1","spec_available":true,"actions":[{"name":"search","description":"Global news search across GDELT (+ optionally merged Google-News-RSS), de-duplicated into one unified article shape. The core 'what's the news on X' call. Filter by timespan/language/country/sort; each article carries title, url, source_domain, published_at, language, snippet, image, duplicate_count, also_reported_by[].","required_params":["query"],"optional_params":["timespan","start","end","language","country","sort","max","merge_google_news","dedup","similarity"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search across global news. GDELT operators are passed through (e.g. 'tesla OR ford', '\"exact phrase\"', 'domainis:bbc.com', 'sourcelang:spanish', 'theme:TERROR'). Case-insensitive.","on_invalid":"reject","example":"artificial intelligence","aliases":["q","keyword","keywords"]},{"name":"timespan","type":"string","required":false,"description":"How far back to search (GDELT timespan). Accepts Nh/Nd/Nw/Nm or minute forms like '30min'. Note GDELT covers ~last 3 months; default 1d.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"12h","label":"Last 12 hours"},{"value":"1d","label":"Last 24h (default)"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"2w","label":"Last 2 weeks"},{"value":"1m","label":"Last month"}],"default":"1d","example":"1w","aliases":["period"]},{"name":"start","type":"string","required":false,"description":"Absolute window START (GDELT startdatetime). Accepts YYYYMMDD, YYYYMMDDHHMMSS, or ISO (2026-06-01 / 2026-06-01T12:00:00Z). When start AND/OR end are given they OVERRIDE the relative timespan. GDELT covers ~the last 3 months.","on_invalid":"ignore","example":"2026-06-01","aliases":["startdatetime","start_date"]},{"name":"end","type":"string","required":false,"description":"Absolute window END (GDELT enddatetime). Same formats as start. Omit for 'up to now'. Use with start for an exact date range instead of timespan.","on_invalid":"ignore","example":"2026-06-05","aliases":["enddatetime","end_date"]},{"name":"language","type":"string","required":false,"description":"Restrict to a source language (2-letter code → GDELT sourcelang). GDELT indexes 65+ languages; common ones listed. Omit for all languages.","on_invalid":"ignore","allowed_values":[{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"pt","label":"Portuguese"},{"value":"it","label":"Italian"},{"value":"ru","label":"Russian"},{"value":"ar","label":"Arabic"},{"value":"zh","label":"Chinese"},{"value":"ja","label":"Japanese"},{"value":"tr","label":"Turkish"},{"value":"hi","label":"Hindi"}],"example":"en","aliases":["lang"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering (GDELT sort). Ranking is GDELT's own — we add no AI re-rank.","on_invalid":"ignore","allowed_values":[{"value":"datedesc","label":"Newest first (default)"},{"value":"dateasc","label":"Oldest first"},{"value":"hybridrel","label":"Relevance + recency blend"},{"value":"tonedesc","label":"Most positive tone first"},{"value":"toneasc","label":"Most negative tone first"}],"default":"datedesc","example":"hybridrel","aliases":["sort_by","order"]},{"name":"max","type":"integer","required":false,"description":"Max articles to fetch per source before de-dup (1-250, default 50). Larger values are clamped to 250 (GDELT ceiling).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["maxrecords","limit","max_records"]},{"name":"merge_google_news","type":"boolean","required":false,"description":"Also fetch Google-News-RSS for this query and merge+de-dup with GDELT (near-live coverage). Default true. Set false for GDELT-only.","on_invalid":"ignore","default":true,"example":true,"aliases":["merge_rss","include_rss"]},{"name":"dedup","type":"boolean","required":false,"description":"Collapse the same story from many outlets (exact-url + host+path + near-duplicate title clustering). Default true. Survivors carry duplicate_count + also_reported_by[]. Set false for the raw firehose.","on_invalid":"ignore","default":true,"example":true},{"name":"similarity","type":"number","required":false,"description":"Title near-duplicate threshold for clustering (stemmed token-set Jaccard, 0.3-1.0). Higher = stricter (fewer merges). Default 0.6 — tuned for precision 1.0 + max recall (notes/dedup_quality.json).","on_invalid":"ignore","default":0.6,"example":0.6,"minimum":0.3,"maximum":1.0}],"returns":"articles[] (title, url, source_domain, source_country, published_at, language, snippet, image, source, duplicate_count, also_reported_by[]), total_before_dedup, removed_duplicates, sources_used[], date_range?, freshness","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"OpenAI","timespan":"2d","max":40}},{"name":"timeline","description":"How much is X in the news over time — GDELT volume-over-time (timelinevol) for a query as [{date, value}], with peak detection (max point + average + latest). SLOW BY NATURE: the analytics index behind this endpoint currently answers in about 20-25 seconds and refuses a large share of connections, so expect a ~20-25s call and an occasional honest 'source did not answer' rather than a sub-second reply. If the source misses, a reading up to 30 minutes old may be returned instead, always labelled with stale_age_seconds. For fast news use search / top_headlines / by_source (~1s).","required_params":["query"],"optional_params":["timespan","start","end","language","country"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search across global news. GDELT operators are passed through (e.g. 'tesla OR ford', '\"exact phrase\"', 'domainis:bbc.com', 'sourcelang:spanish', 'theme:TERROR'). Case-insensitive.","on_invalid":"reject","example":"artificial intelligence","aliases":["q","keyword","keywords"]},{"name":"timespan","type":"string","required":false,"description":"How far back to search (GDELT timespan). Accepts Nh/Nd/Nw/Nm or minute forms like '30min'. Note GDELT covers ~last 3 months; default 1d.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"12h","label":"Last 12 hours"},{"value":"1d","label":"Last 24h (default)"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"2w","label":"Last 2 weeks"},{"value":"1m","label":"Last month"}],"default":"1d","example":"1w","aliases":["period"]},{"name":"start","type":"string","required":false,"description":"Absolute window START (GDELT startdatetime). Accepts YYYYMMDD, YYYYMMDDHHMMSS, or ISO (2026-06-01 / 2026-06-01T12:00:00Z). When start AND/OR end are given they OVERRIDE the relative timespan. GDELT covers ~the last 3 months.","on_invalid":"ignore","example":"2026-06-01","aliases":["startdatetime","start_date"]},{"name":"end","type":"string","required":false,"description":"Absolute window END (GDELT enddatetime). Same formats as start. Omit for 'up to now'. Use with start for an exact date range instead of timespan.","on_invalid":"ignore","example":"2026-06-05","aliases":["enddatetime","end_date"]},{"name":"language","type":"string","required":false,"description":"Restrict to a source language (2-letter code → GDELT sourcelang). GDELT indexes 65+ languages; common ones listed. Omit for all languages.","on_invalid":"ignore","allowed_values":[{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"pt","label":"Portuguese"},{"value":"it","label":"Italian"},{"value":"ru","label":"Russian"},{"value":"ar","label":"Arabic"},{"value":"zh","label":"Chinese"},{"value":"ja","label":"Japanese"},{"value":"tr","label":"Turkish"},{"value":"hi","label":"Hindi"}],"example":"en","aliases":["lang"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]}],"returns":"series[] (date, value), peak{date,value}, average, latest, point_count, date_range?, query","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"earthquake","timespan":"1w"}},{"name":"sentiment","description":"Sentiment / tone analysis for a query — GDELT tonechart gives the distribution of article tone (how positive/negative coverage is) as a histogram, a count-weighted average tone, a positive/neutral/negative breakdown, and the single most-positive and most-negative representative article. Answers 'how is X being covered — favorably or critically?'. (alias: tone) SLOW BY NATURE: the analytics index behind this endpoint currently answers in about 20-25 seconds and refuses a large share of connections, so expect a ~20-25s call and an occasional honest 'source did not answer' rather than a sub-second reply. If the source misses, a reading up to 30 minutes old may be returned instead, always labelled with stale_age_seconds. For fast news use search / top_headlines / by_source (~1s).","required_params":["query"],"optional_params":["timespan","start","end","language","country"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search across global news. GDELT operators are passed through (e.g. 'tesla OR ford', '\"exact phrase\"', 'domainis:bbc.com', 'sourcelang:spanish', 'theme:TERROR'). Case-insensitive.","on_invalid":"reject","example":"artificial intelligence","aliases":["q","keyword","keywords"]},{"name":"timespan","type":"string","required":false,"description":"How far back to search (GDELT timespan). Accepts Nh/Nd/Nw/Nm or minute forms like '30min'. Note GDELT covers ~last 3 months; default 1d.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"12h","label":"Last 12 hours"},{"value":"1d","label":"Last 24h (default)"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"2w","label":"Last 2 weeks"},{"value":"1m","label":"Last month"}],"default":"1d","example":"1w","aliases":["period"]},{"name":"start","type":"string","required":false,"description":"Absolute window START (GDELT startdatetime). Accepts YYYYMMDD, YYYYMMDDHHMMSS, or ISO (2026-06-01 / 2026-06-01T12:00:00Z). When start AND/OR end are given they OVERRIDE the relative timespan. GDELT covers ~the last 3 months.","on_invalid":"ignore","example":"2026-06-01","aliases":["startdatetime","start_date"]},{"name":"end","type":"string","required":false,"description":"Absolute window END (GDELT enddatetime). Same formats as start. Omit for 'up to now'. Use with start for an exact date range instead of timespan.","on_invalid":"ignore","example":"2026-06-05","aliases":["enddatetime","end_date"]},{"name":"language","type":"string","required":false,"description":"Restrict to a source language (2-letter code → GDELT sourcelang). GDELT indexes 65+ languages; common ones listed. Omit for all languages.","on_invalid":"ignore","allowed_values":[{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"pt","label":"Portuguese"},{"value":"it","label":"Italian"},{"value":"ru","label":"Russian"},{"value":"ar","label":"Arabic"},{"value":"zh","label":"Chinese"},{"value":"ja","label":"Japanese"},{"value":"tr","label":"Turkish"},{"value":"hi","label":"Hindi"}],"example":"en","aliases":["lang"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]}],"returns":"average_tone, sentiment (label), total_articles, distribution (positive/neutral/negative count+pct), histogram[] (tone, count), most_positive, most_negative, date_range?, freshness","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"inflation","timespan":"1w"}},{"name":"entities","description":"Top entities for a query — the people/organizations and locations most mentioned in coverage of a topic, ranked by mention count. Organizations/people are mined from article titles; locations come from GDELT's source-country distribution. Metadata-only. Useful for 'who and where is this story about'. SLOW BY NATURE: the analytics index behind this endpoint currently answers in about 20-25 seconds and refuses a large share of connections, so expect a ~20-25s call and an occasional honest 'source did not answer' rather than a sub-second reply. If the source misses, a reading up to 30 minutes old may be returned instead, always labelled with stale_age_seconds. For fast news use search / top_headlines / by_source (~1s).","required_params":["query"],"optional_params":["timespan","start","end","language","country","max"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search across global news. GDELT operators are passed through (e.g. 'tesla OR ford', '\"exact phrase\"', 'domainis:bbc.com', 'sourcelang:spanish', 'theme:TERROR'). Case-insensitive.","on_invalid":"reject","example":"artificial intelligence","aliases":["q","keyword","keywords"]},{"name":"timespan","type":"string","required":false,"description":"How far back to search (GDELT timespan). Accepts Nh/Nd/Nw/Nm or minute forms like '30min'. Note GDELT covers ~last 3 months; default 1d.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"12h","label":"Last 12 hours"},{"value":"1d","label":"Last 24h (default)"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"2w","label":"Last 2 weeks"},{"value":"1m","label":"Last month"}],"default":"1d","example":"1w","aliases":["period"]},{"name":"start","type":"string","required":false,"description":"Absolute window START (GDELT startdatetime). Accepts YYYYMMDD, YYYYMMDDHHMMSS, or ISO (2026-06-01 / 2026-06-01T12:00:00Z). When start AND/OR end are given they OVERRIDE the relative timespan. GDELT covers ~the last 3 months.","on_invalid":"ignore","example":"2026-06-01","aliases":["startdatetime","start_date"]},{"name":"end","type":"string","required":false,"description":"Absolute window END (GDELT enddatetime). Same formats as start. Omit for 'up to now'. Use with start for an exact date range instead of timespan.","on_invalid":"ignore","example":"2026-06-05","aliases":["enddatetime","end_date"]},{"name":"language","type":"string","required":false,"description":"Restrict to a source language (2-letter code → GDELT sourcelang). GDELT indexes 65+ languages; common ones listed. Omit for all languages.","on_invalid":"ignore","allowed_values":[{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"pt","label":"Portuguese"},{"value":"it","label":"Italian"},{"value":"ru","label":"Russian"},{"value":"ar","label":"Arabic"},{"value":"zh","label":"Chinese"},{"value":"ja","label":"Japanese"},{"value":"tr","label":"Turkish"},{"value":"hi","label":"Hindi"}],"example":"en","aliases":["lang"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]},{"name":"max","type":"integer","required":false,"description":"Max articles to fetch per source before de-dup (1-250, default 50). Larger values are clamped to 250 (GDELT ceiling).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["maxrecords","limit","max_records"]}],"returns":"entities[] (name, mentions), locations[] (name, mentions), article_count, date_range?, freshness","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"OpenAI","timespan":"3d"}},{"name":"trending","description":"What's big in the news right now — a curated multi-bucket roll-up (breaking/world/tech/business/politics/science by default, or your own queries) ranked by recent volume, each with a few representative headlines. SLOW BY NATURE: the analytics index behind this endpoint currently answers in about 20-25 seconds and refuses a large share of connections, so expect a ~20-25s call and an occasional honest 'source did not answer' rather than a sub-second reply. If the source misses, a reading up to 30 minutes old may be returned instead, always labelled with stale_age_seconds. For fast news use search / top_headlines / by_source (~1s). PARTIAL BY DESIGN: each bucket is fetched independently, so a call can return fewer topics than requested; meta.bucket_errors names the ones that missed, and a repeat call fills them in (buckets already fetched are reused).","required_params":[],"optional_params":["queries","timespan","language","country","max"],"params":[{"name":"queries","type":"array","required":false,"description":"Optional custom topic buckets (JSON array or comma string, ≤10). Omit to use the default world roll-up (breaking/world/tech/business/politics/science).","on_invalid":"ignore","example":["technology","world","business"],"aliases":["topics","terms"]},{"name":"timespan","type":"string","required":false,"description":"How far back to search (GDELT timespan). Accepts Nh/Nd/Nw/Nm or minute forms like '30min'. Note GDELT covers ~last 3 months; default 1d.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"12h","label":"Last 12 hours"},{"value":"1d","label":"Last 24h (default)"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"2w","label":"Last 2 weeks"},{"value":"1m","label":"Last month"}],"default":"1d","example":"1w","aliases":["period"]},{"name":"language","type":"string","required":false,"description":"Restrict to a source language (2-letter code → GDELT sourcelang). GDELT indexes 65+ languages; common ones listed. Omit for all languages.","on_invalid":"ignore","allowed_values":[{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"pt","label":"Portuguese"},{"value":"it","label":"Italian"},{"value":"ru","label":"Russian"},{"value":"ar","label":"Arabic"},{"value":"zh","label":"Chinese"},{"value":"ja","label":"Japanese"},{"value":"tr","label":"Turkish"},{"value":"hi","label":"Hindi"}],"example":"en","aliases":["lang"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]},{"name":"max","type":"integer","required":false,"description":"Max articles to fetch per source before de-dup (1-250, default 50). Larger values are clamped to 250 (GDELT ceiling).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["maxrecords","limit","max_records"]}],"returns":"topics[] (topic, volume, sample_headlines[] (title, url, source_domain, published_at)), ranked_by, timespan, freshness","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"timespan":"1d"}},{"name":"top_headlines","description":"Editor-curated top headlines by Google-News topic section (WORLD/BUSINESS/TECHNOLOGY/…) and/or country edition. De-duplicated. The 'front page' call.","required_params":[],"optional_params":["topic","country","max","dedup"],"params":[{"name":"topic","type":"enum","required":false,"description":"Google-News topic section for top_headlines. Hard enum (the section feeds are a fixed set). Combine with country for a localized edition.","on_invalid":"reject","allowed_values":[{"value":"WORLD","label":"World"},{"value":"NATION","label":"National / top US"},{"value":"BUSINESS","label":"Business"},{"value":"TECHNOLOGY","label":"Technology"},{"value":"ENTERTAINMENT","label":"Entertainment"},{"value":"SPORTS","label":"Sports"},{"value":"SCIENCE","label":"Science"},{"value":"HEALTH","label":"Health"}],"example":"TECHNOLOGY","aliases":["section","category"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]},{"name":"max","type":"integer","required":false,"description":"Max articles to fetch per source before de-dup (1-250, default 50). Larger values are clamped to 250 (GDELT ceiling).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["maxrecords","limit","max_records"]},{"name":"dedup","type":"boolean","required":false,"description":"Collapse the same story from many outlets (exact-url + host+path + near-duplicate title clustering). Default true. Survivors carry duplicate_count + also_reported_by[]. Set false for the raw firehose.","on_invalid":"ignore","default":true,"example":true}],"returns":"articles[] (unified shape), topic, country, count, removed_duplicates, freshness","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"topic":"TECHNOLOGY"}},{"name":"by_source","description":"Recent articles from a specific publisher domain (reuters.com, bbc.com, …). Google-News site:<domain> is the reliable primary (near-live, ~100% on-source); GDELT domain:<domain> enriches with direct publisher URLs + tone when its 5s window is free (skipped silently otherwise — never blocks). Source-exact. merge_google_news=false → GDELT-only exact.","required_params":["source"],"optional_params":["query","timespan","language","sort","max","merge_google_news","dedup"],"params":[{"name":"source","type":"string","required":true,"description":"A publisher domain (e.g. reuters.com, bbc.com, nytimes.com), full URL, or host. Returns that outlet's recent articles — Google-News `site:` primary (reliable, near-live) + GDELT enrichment when available. Any domain works.","on_invalid":"reject","example":"bbc.com","aliases":["domain","site"]},{"name":"query","type":"string","required":false,"description":"Free-text search across global news. GDELT operators are passed through (e.g. 'tesla OR ford', '\"exact phrase\"', 'domainis:bbc.com', 'sourcelang:spanish', 'theme:TERROR'). Case-insensitive.","on_invalid":"reject","example":"artificial intelligence","aliases":["q","keyword","keywords"]},{"name":"timespan","type":"string","required":false,"description":"How far back to search (GDELT timespan). Accepts Nh/Nd/Nw/Nm or minute forms like '30min'. Note GDELT covers ~last 3 months; default 1d.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"12h","label":"Last 12 hours"},{"value":"1d","label":"Last 24h (default)"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"2w","label":"Last 2 weeks"},{"value":"1m","label":"Last month"}],"default":"1d","example":"1w","aliases":["period"]},{"name":"language","type":"string","required":false,"description":"Restrict to a source language (2-letter code → GDELT sourcelang). GDELT indexes 65+ languages; common ones listed. Omit for all languages.","on_invalid":"ignore","allowed_values":[{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"pt","label":"Portuguese"},{"value":"it","label":"Italian"},{"value":"ru","label":"Russian"},{"value":"ar","label":"Arabic"},{"value":"zh","label":"Chinese"},{"value":"ja","label":"Japanese"},{"value":"tr","label":"Turkish"},{"value":"hi","label":"Hindi"}],"example":"en","aliases":["lang"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering (GDELT sort). Ranking is GDELT's own — we add no AI re-rank.","on_invalid":"ignore","allowed_values":[{"value":"datedesc","label":"Newest first (default)"},{"value":"dateasc","label":"Oldest first"},{"value":"hybridrel","label":"Relevance + recency blend"},{"value":"tonedesc","label":"Most positive tone first"},{"value":"toneasc","label":"Most negative tone first"}],"default":"datedesc","example":"hybridrel","aliases":["sort_by","order"]},{"name":"max","type":"integer","required":false,"description":"Max articles to fetch per source before de-dup (1-250, default 50). Larger values are clamped to 250 (GDELT ceiling).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["maxrecords","limit","max_records"]},{"name":"merge_google_news","type":"boolean","required":false,"description":"Also fetch Google-News-RSS for this query and merge+de-dup with GDELT (near-live coverage). Default true. Set false for GDELT-only.","on_invalid":"ignore","default":true,"example":true,"aliases":["merge_rss","include_rss"]},{"name":"dedup","type":"boolean","required":false,"description":"Collapse the same story from many outlets (exact-url + host+path + near-duplicate title clustering). Default true. Survivors carry duplicate_count + also_reported_by[]. Set false for the raw firehose.","on_invalid":"ignore","default":true,"example":true}],"returns":"articles[] (unified shape), source_domain, count, removed_duplicates, sources_used[], freshness","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"source":"reuters.com","timespan":"3d"}},{"name":"coverage","description":"Full-story coverage — for a story or topic, discover which news outlets are covering it. Returns the most-covered stories first, each expanded to every outlet that carried it (outlet_count + outlets[]). Ideal for media monitoring and PR: see how widely a story was reported and by whom.","required_params":["query"],"optional_params":["timespan","start","end","language","country","max","similarity"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search across global news. GDELT operators are passed through (e.g. 'tesla OR ford', '\"exact phrase\"', 'domainis:bbc.com', 'sourcelang:spanish', 'theme:TERROR'). Case-insensitive.","on_invalid":"reject","example":"artificial intelligence","aliases":["q","keyword","keywords"]},{"name":"timespan","type":"string","required":false,"description":"How far back to search (GDELT timespan). Accepts Nh/Nd/Nw/Nm or minute forms like '30min'. Note GDELT covers ~last 3 months; default 1d.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"12h","label":"Last 12 hours"},{"value":"1d","label":"Last 24h (default)"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"2w","label":"Last 2 weeks"},{"value":"1m","label":"Last month"}],"default":"1d","example":"1w","aliases":["period"]},{"name":"start","type":"string","required":false,"description":"Absolute window START (GDELT startdatetime). Accepts YYYYMMDD, YYYYMMDDHHMMSS, or ISO (2026-06-01 / 2026-06-01T12:00:00Z). When start AND/OR end are given they OVERRIDE the relative timespan. GDELT covers ~the last 3 months.","on_invalid":"ignore","example":"2026-06-01","aliases":["startdatetime","start_date"]},{"name":"end","type":"string","required":false,"description":"Absolute window END (GDELT enddatetime). Same formats as start. Omit for 'up to now'. Use with start for an exact date range instead of timespan.","on_invalid":"ignore","example":"2026-06-05","aliases":["enddatetime","end_date"]},{"name":"language","type":"string","required":false,"description":"Restrict to a source language (2-letter code → GDELT sourcelang). GDELT indexes 65+ languages; common ones listed. Omit for all languages.","on_invalid":"ignore","allowed_values":[{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"pt","label":"Portuguese"},{"value":"it","label":"Italian"},{"value":"ru","label":"Russian"},{"value":"ar","label":"Arabic"},{"value":"zh","label":"Chinese"},{"value":"ja","label":"Japanese"},{"value":"tr","label":"Turkish"},{"value":"hi","label":"Hindi"}],"example":"en","aliases":["lang"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]},{"name":"max","type":"integer","required":false,"description":"Max articles to fetch per source before de-dup (1-250, default 50). Larger values are clamped to 250 (GDELT ceiling).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["maxrecords","limit","max_records"]},{"name":"similarity","type":"number","required":false,"description":"Title near-duplicate threshold for clustering (stemmed token-set Jaccard, 0.3-1.0). Higher = stricter (fewer merges). Default 0.6 — tuned for precision 1.0 + max recall (notes/dedup_quality.json).","on_invalid":"ignore","default":0.6,"example":0.6,"minimum":0.3,"maximum":1.0}],"returns":"stories[] (title, url, source_domain, published_at, snippet, image, outlet_count, outlets[] (source_domain, url, source)), story_count, total_articles, date_range?, freshness","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"OpenAI","timespan":"3d"}},{"name":"sources","description":"Reference directory of supported news outlets, filterable by category (e.g. TECHNOLOGY, SPORTS) and country. Also returns the topic, language and country reference lists accepted by other actions. Note: by_source accepts any publisher domain — this directory is a curated starting set, not a limit.","required_params":[],"optional_params":["category","country"],"params":[{"name":"category","type":"string","required":false,"description":"Optional filter for the sources directory by section (WORLD/BUSINESS/TECHNOLOGY/SPORTS/ENTERTAINMENT/SCIENCE/HEALTH/NATION).","on_invalid":"ignore","example":"TECHNOLOGY","aliases":["topic","section"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]}],"returns":"outlets[] (domain, name, category, country), count, topics[], languages[] (code, name), countries[], note","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"TECHNOLOGY"}},{"name":"tech","description":"Hacker News tech vertical — top/new/best stories, or a full-text Algolia search. Each story: title, url, points, author, num_comments, created_at, hn_url.","required_params":[],"optional_params":["query","list","max"],"params":[{"name":"query","type":"string","required":false,"description":"Optional Hacker News full-text search (Algolia). Omit to get the ranked list selected by `list` (top/new/best).","on_invalid":"reject","example":"rust","aliases":["q","keyword"]},{"name":"list","type":"enum","required":false,"description":"Hacker News story list when no query is given (top/new/best). With a query, Algolia full-text search is used instead.","on_invalid":"ignore","allowed_values":[{"value":"top","label":"Top / front-page stories"},{"value":"new","label":"Newest stories"},{"value":"best","label":"Best stories"}],"default":"top","example":"top","aliases":["kind","feed"]},{"name":"max","type":"integer","required":false,"description":"Max articles to fetch per source before de-dup (1-250, default 50). Larger values are clamped to 250 (GDELT ceiling).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["maxrecords","limit","max_records"]}],"returns":"articles[] (title, url, source_domain, published_at, snippet, points, author, num_comments, hn_url), mode, count, freshness","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"list":"top","max":20}},{"name":"batch","description":"Run up to 10 search queries in one call (shared concurrency, GDELT 5s-window paced). results[] preserves input order; each is a de-duped search result.","required_params":["queries"],"optional_params":["timespan","language","country","max","merge_google_news","dedup"],"params":[{"name":"queries","type":"array","required":true,"description":"Up to 10 search queries — a JSON array OR a comma/semicolon string. Each is run through `search` (GDELT, de-duped) under one shared call.","on_invalid":"reject","example":["openai","tesla","bitcoin"],"aliases":["q","terms"]},{"name":"timespan","type":"string","required":false,"description":"How far back to search (GDELT timespan). Accepts Nh/Nd/Nw/Nm or minute forms like '30min'. Note GDELT covers ~last 3 months; default 1d.","on_invalid":"ignore","allowed_values":[{"value":"1h","label":"Last hour"},{"value":"12h","label":"Last 12 hours"},{"value":"1d","label":"Last 24h (default)"},{"value":"3d","label":"Last 3 days"},{"value":"1w","label":"Last week"},{"value":"2w","label":"Last 2 weeks"},{"value":"1m","label":"Last month"}],"default":"1d","example":"1w","aliases":["period"]},{"name":"language","type":"string","required":false,"description":"Restrict to a source language (2-letter code → GDELT sourcelang). GDELT indexes 65+ languages; common ones listed. Omit for all languages.","on_invalid":"ignore","allowed_values":[{"value":"en","label":"English"},{"value":"es","label":"Spanish"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"pt","label":"Portuguese"},{"value":"it","label":"Italian"},{"value":"ru","label":"Russian"},{"value":"ar","label":"Arabic"},{"value":"zh","label":"Chinese"},{"value":"ja","label":"Japanese"},{"value":"tr","label":"Turkish"},{"value":"hi","label":"Hindi"}],"example":"en","aliases":["lang"]},{"name":"country","type":"string","required":false,"description":"Restrict to a source country (GDELT FIPS country code, e.g. US, UK, FR, IN, BR). Omit for global. For top_headlines this is the Google-News edition.","on_invalid":"ignore","example":"US","aliases":["source_country"]},{"name":"max","type":"integer","required":false,"description":"Max articles to fetch per source before de-dup (1-250, default 50). Larger values are clamped to 250 (GDELT ceiling).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250,"aliases":["maxrecords","limit","max_records"]},{"name":"merge_google_news","type":"boolean","required":false,"description":"Also fetch Google-News-RSS for this query and merge+de-dup with GDELT (near-live coverage). Default true. Set false for GDELT-only.","on_invalid":"ignore","default":true,"example":true,"aliases":["merge_rss","include_rss"]},{"name":"dedup","type":"boolean","required":false,"description":"Collapse the same story from many outlets (exact-url + host+path + near-duplicate title clustering). Default true. Survivors carry duplicate_count + also_reported_by[]. Set false for the raw firehose.","on_invalid":"ignore","default":true,"example":true}],"returns":"results[] (query, count, articles[], removed_duplicates), query_count, total_articles, freshness","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"queries":"openai,tesla,bitcoin","timespan":"2d","max":20}}]},{"name":"nike","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Nike API scraper — nike.com in 42 countries: search and category walls, the full product record with every size's stock level and GTIN, price and discount, colourways, customer reviews and the upcoming SNKRS launch calendar, in each country's currency. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/nike/v1","spec_available":true,"actions":[{"name":"search","description":"Search a Nike storefront by keyword, as nike.com does. One row per product card with its price, full price and discount, colour, badges ('Best Seller', 'Just In', 'Coming Soon'), promotions and every colourway on the card. Sort by newest or price; narrow with filter ids.","required_params":["query"],"optional_params":["country","language","page","page_size","sort","attribute_ids","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper types it on nike.com.","on_invalid":"reject","example":"air max","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"lu","label":"Luxembourg (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (EUR)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"ro","label":"Romania (RON)"},{"value":"gr","label":"Greece (EUR)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"za","label":"South Africa (ZAR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"cn","label":"China (nike.com.cn) (CNY)"},{"value":"tw","label":"Taiwan (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"th","label":"Thailand (THB)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us"},{"name":"language","type":"string","required":false,"description":"Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.","on_invalid":"reject","example":"fr"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"enum","required":false,"description":"Products per page: 24, 50 or 100 — the only sizes Nike's wall accepts.","on_invalid":"reject","allowed_values":[{"value":24,"label":"24 (default)"},{"value":50,"label":"50"},{"value":100,"label":"100"}],"default":24},{"name":"sort","type":"enum","required":false,"description":"Result order — the orderings nike.com offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Nike's own ranking (default)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Lowest price first (gift cards, price 0, come first)"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"attribute_ids","type":"array","required":false,"description":"Nike filter ids (gender, colour, sport, brand, size, sale …) from the `filters` action. Several ids narrow together (AND across groups).","on_invalid":"reject","example":["7baf216c-acc6-4452-9e07-39c2ca77ba32"],"aliases":["attribute_id"]},{"name":"include_fallback_results","type":"boolean","required":false,"description":"false (default): when nike.com has no product matching the query and pads the page with unrelated fallback products, results is empty and fallback_results_dropped counts them. true: those products are returned apart, in fallback_results.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_code (style-colour, or a numeric id for Nike By You), style_color, style_code, group_key, title, subtitle, product_type ('footwear'|'apparel'|'equipment'|'stored_value'), product_subtype, color, color_hex, color_description, price (the shelf price), full_price, original_price (set only on sale), discount_percent, on_sale, currency, promotion{id, message ('See Price in Bag' …), ends_at}, badge, badges[], new_until, launch, coming_soon, customizable, base_style_color, gift_card, image, image_portrait, url, global_product_id, merch_product_id, colorways[]{product_code, style_color, color_description, price, full_price, discount_percent, image, url}, colorway_count}, count, total_results, page, page_size, page_count, has_more, country, language, currency, query, sort_applied, attribute_ids, keyword_matches_on_page (cards on this page containing a query word; null for non-Latin queries), fallback_results_dropped, fallback_total (Nike's count of the fallback products, when dropped), fallback_results[] (only with include_fallback_results=true)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"air max"}},{"name":"category","description":"A Nike category wall without a keyword (for example Men + Shoes, or Sale), paged and sortable, with the same rows as search. Category ids come from `filters`.","required_params":["attribute_ids"],"optional_params":["country","language","page","page_size","sort","max_rotations"],"params":[{"name":"attribute_ids","type":"array","required":true,"description":"Nike category/filter ids from the `filters` action (e.g. Shoes + Men). Returns that wall without a keyword.","on_invalid":"reject","example":["16633190-45e5-4830-a068-232ac7aea82c","0f64ecc7-d624-4e91-b171-b83a03dd8550"],"aliases":["attribute_id","category_id"]},{"name":"country","type":"enum","required":false,"description":"Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"lu","label":"Luxembourg (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (EUR)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"ro","label":"Romania (RON)"},{"value":"gr","label":"Greece (EUR)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"za","label":"South Africa (ZAR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"cn","label":"China (nike.com.cn) (CNY)"},{"value":"tw","label":"Taiwan (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"th","label":"Thailand (THB)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us"},{"name":"language","type":"string","required":false,"description":"Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.","on_invalid":"reject","example":"fr"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"enum","required":false,"description":"Products per page: 24, 50 or 100 — the only sizes Nike's wall accepts.","on_invalid":"reject","allowed_values":[{"value":24,"label":"24 (default)"},{"value":50,"label":"50"},{"value":100,"label":"100"}],"default":24},{"name":"sort","type":"enum","required":false,"description":"Result order — the orderings nike.com offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Nike's own ranking (default)"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Lowest price first (gift cards, price 0, come first)"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_code (style-colour, or a numeric id for Nike By You), style_color, style_code, group_key, title, subtitle, product_type ('footwear'|'apparel'|'equipment'|'stored_value'), product_subtype, color, color_hex, color_description, price (the shelf price), full_price, original_price (set only on sale), discount_percent, on_sale, currency, promotion{id, message ('See Price in Bag' …), ends_at}, badge, badges[], new_until, launch, coming_soon, customizable, base_style_color, gift_card, image, image_portrait, url, global_product_id, merch_product_id, colorways[]{product_code, style_color, color_description, price, full_price, discount_percent, image, url}, colorway_count}, count, total_results, page, page_size, page_count, has_more, country, language, currency, sort_applied, attribute_ids","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"attribute_ids":["16633190-45e5-4830-a068-232ac7aea82c","0f64ecc7-d624-4e91-b171-b83a03dd8550"]}},{"name":"filters","description":"The filters nike.com shows for a search (or the whole catalogue) — gender, colour, sport, brand, size, width, best for — and the category links, each with its id and Nike's own facet count. The ids feed `attribute_ids` in search and category. A category's count is Nike's number of COLOURWAYS (style-colours), while total_results and search/category count product CARDS (one card per style with its colourways), so category counts can exceed total_results.","required_params":[],"optional_params":["query","country","language","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Optional keyword: the filters (with counts) of that search. Without it, the filters of the whole catalogue.","on_invalid":"reject","example":"running shoes","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"lu","label":"Luxembourg (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (EUR)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"ro","label":"Romania (RON)"},{"value":"gr","label":"Greece (EUR)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"za","label":"South Africa (ZAR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"cn","label":"China (nike.com.cn) (CNY)"},{"value":"tw","label":"Taiwan (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"th","label":"Thailand (THB)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us"},{"name":"language","type":"string","required":false,"description":"Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.","on_invalid":"reject","example":"fr"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"filters[]{name, group_id, options[]{name, attribute_id, attribute_ids[], count, selected}}, categories[]{name, attribute_id, attribute_ids[], count}, total_results, query, country, language. `count` is Nike's facet count as the site publishes it, not the number of results the id returns: for categories it counts colourways (style-colours) — measured US 2026-11-03: Shorts 2 186 = 2 186 colourways on 954 cards, Socks 506/169, Sports Bras 382/105, Bodysuits 47/23, Tops and T-Shirts 16 433 vs 8 096 cards; `total_results` (and a search/category wall) counts product cards. Use `total_results` of a category call for the number of rows","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"running shoes"}},{"name":"product/detail","description":"The full Nike product by style-colour or URL: price, full price and discount, every size with its localized label, GTIN and stock level, description and feature sections, all images and videos, colours, launch method and release time, member-exclusive and quantity-limit flags, star rating and review counts, and the other colourways of the style.","required_params":["style_color"],"optional_params":["country","language","include_colorways","include_rating","max_rotations"],"params":[{"name":"style_color","type":"string","required":true,"description":"Nike style-colour code ('DM0032-037', printed on the box and in every product URL, returned as `style_color` by search) or a nike.com product / launch URL. A URL also sets the country and language.","on_invalid":"reject","example":"DM0032-037","aliases":["product_id","id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"lu","label":"Luxembourg (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (EUR)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"ro","label":"Romania (RON)"},{"value":"gr","label":"Greece (EUR)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"za","label":"South Africa (ZAR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"cn","label":"China (nike.com.cn) (CNY)"},{"value":"tw","label":"Taiwan (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"th","label":"Thailand (THB)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us"},{"name":"language","type":"string","required":false,"description":"Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.","on_invalid":"reject","example":"fr"},{"name":"include_colorways","type":"boolean","required":false,"description":"true (default): also list the other colours of the same style on sale in that country (one extra small request).","on_invalid":"ignore","default":true},{"name":"include_rating","type":"boolean","required":false,"description":"true (default): add the star rating and review counts.","on_invalid":"ignore","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{style_color, style_code, color_code, content_language (the language the texts came in — the storefront's, or English when Nike has no translation), title, name, subtitle, brand, product_type, genders[], sport_tags[], color_description, colors[]{type, name, hex}, price, full_price, original_price, discount_percent, on_sale, currency, price_source ('product_feed' | 'storefront' — an inactive colourway still listed, priced as the storefront shows it | 'catalog_inactive' — no longer listed, last catalogue price), listed_on_storefront, member_price (always null — Nike publishes none), member_exclusive, status ('active'|'inactive'), available (buyable on nike.com now: false for an inactive colourway off the storefront and before the release moment, even when Nike's inventory feed holds stock — meta.not_buyable_reason says which), sizes_in_stock, sizes[]{size, localized_size, size_system, gtin, sku_id, available, stock_level ('high'|'medium'|'low'|'out_of_stock'|null — Nike's inventory record, kept as published), inventory_listed} (in the site's size order), quantity_limit, publish_type ('flow'|'launch'), launch{method, payment_method, starts_at}, release_date, hard_launch, pre_order, notify_me, promo_excluded, description_heading, description, sections[]{heading, items[]}, tech_spec, best_for[], widths[], countries_of_origin[], images[], videos[], size_chart_url, url, global_product_id, merch_product_id, pid, rating, rating_scale, review_count, related_review_count, own_review_count, colorways[]{style_color, color_description, price, full_price, discount_percent, currency, available, image, url}}, country, language","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"style_color":"CW2288-111"}},{"name":"product/reviews","description":"Customer reviews of a Nike style, newest first, paged: rating, title, text, date, reviewer country and usual size, fit / comfort / recommend answers, votes and photos — plus the rating and the review counts kept apart from reviews of related styles.","required_params":["style_color"],"optional_params":["country","page","page_size","max_rotations"],"params":[{"name":"style_color","type":"string","required":true,"description":"Nike style-colour ('CW2288-111'), style code ('CW2288') or product URL. Reviews are shared by every colour of a style.","on_invalid":"reject","example":"CW2288-111","aliases":["style_code","product_id","id","url"]},{"name":"country","type":"enum","required":false,"description":"Optional. Reviews are the same in every country; the country is only used to confirm that a style with no reviews exists.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"lu","label":"Luxembourg (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (EUR)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"ro","label":"Romania (RON)"},{"value":"gr","label":"Greece (EUR)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"za","label":"South Africa (ZAR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"cn","label":"China (nike.com.cn) (CNY)"},{"value":"tw","label":"Taiwan (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"th","label":"Thailand (THB)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us"},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-100, default 20), newest first.","on_invalid":"reject","default":20,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"style_code, product_title, reviews[]{review_id, rating, rating_scale, title, text, submitted_at, locale, reviewer_country, author, size_normally_worn, answers[]{question, value, scale_labels[]}, incentivized, up_votes, down_votes, media[], reviewed_item{title, sku}}, count, total_reviews, rating, rating_scale, review_count, related_review_count, own_review_count, page, page_size","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"style_color":"CW2288-111"}},{"name":"launches","description":"The upcoming SNKRS launch calendar of a Nike country, soonest first: style-colour, name, price, launch method (draw, first-come or a plain FLOW release) and the exact moment it opens, member-exclusive flag, quantity limit and image. Rows Nike hides from its upcoming view are left out, as on the SNKRS page.","required_params":[],"optional_params":["country","language","page","page_size","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Nike storefront. Prices come back in that country's currency and the texts in its language. Stock, prices and launches are per country.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"be","label":"Belgium (EUR)"},{"value":"lu","label":"Luxembourg (EUR)"},{"value":"at","label":"Austria (EUR)"},{"value":"ch","label":"Switzerland (CHF)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"no","label":"Norway (NOK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"cz","label":"Czechia (EUR)"},{"value":"sk","label":"Slovakia (EUR)"},{"value":"hu","label":"Hungary (EUR)"},{"value":"si","label":"Slovenia (EUR)"},{"value":"hr","label":"Croatia (EUR)"},{"value":"bg","label":"Bulgaria (EUR)"},{"value":"ro","label":"Romania (RON)"},{"value":"gr","label":"Greece (EUR)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"il","label":"Israel (ILS)"},{"value":"za","label":"South Africa (ZAR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"cn","label":"China (nike.com.cn) (CNY)"},{"value":"tw","label":"Taiwan (TWD)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"th","label":"Thailand (THB)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"au","label":"Australia (AUD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us"},{"name":"language","type":"string","required":false,"description":"Storefront language where a country has several: us en|es-419, es es-ES|ca, be nl|fr, ch de|fr|it, ca en-GB|fr, jp ja|en, kr ko|en. Default = the storefront's own default. Other countries have one language.","on_invalid":"reject","example":"fr"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Launches per page (1-50, default 24), soonest first.","on_invalid":"reject","default":24,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{style_color, style_code, title, launch_name, color_description, product_type, genders[], price, full_price, discount_percent, currency, publish_type, launch_method (Nike's launchView method as written, e.g. LEO / DAN; 'FLOW' for a plain release), payment_method, starts_at (the draw/launch start; for a FLOW release its commerce start — a past starts_at means it has opened and Nike still lists it as upcoming), member_exclusive, quantity_limit, available (false before starts_at), image, url}, count, total_results (Nike's thread count, before hidden rows are left out — meta.rows_skipped), page, page_size, has_more, country, language","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"us"}}]},{"name":"njuskalo","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Njuškalo + Bolha API — Croatia's and Slovenia's largest classifieds (cars, real estate, second-hand, jobs): keyword search, category browse with the site's own filters, category tree and full listing detail","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/njuskalo/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search across all of njuskalo.hr (site=hr) or bolha.com (site=si), with the source's own filters: category id, price range, condition, photos only, title-only matching, PayProtect (online payment) only, and 5 sort orders. Each row: listing id, title, URL, image, price (parsed + as printed), location, condition, the card's attributes (year, mileage, m², memory …), dates, promoted flag and the seller (id, name, private/business, rating). Plus the source's total, page count and the last page it actually serves.","required_params":["query"],"optional_params":["site","category_id","min_price","max_price","condition","with_images","title_only","payprotect_only","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words (Croatian / Slovenian, e.g. `bicikl`, `stolica za dijete`, `kolo`). Matched in title and description unless `title_only`.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords"]},{"name":"site","type":"enum","required":false,"description":"Which site: `hr` = njuskalo.hr (Croatia), `si` = bolha.com (Slovenia). Same platform, same fields.","on_invalid":"reject","allowed_values":[{"value":"hr","label":"njuskalo.hr — Croatia"},{"value":"si","label":"bolha.com — Slovenia"}],"default":"hr","aliases":["country","market"]},{"name":"category_id","type":"integer","required":false,"description":"Numeric category id to narrow the search (e.g. 9580 = Prodaja stanova on njuskalo). Ids come from `categories` (`category_id`) or a listing's `category`. An id the site does not know is rejected (INVALID_PARAM).","on_invalid":"reject","example":9580,"aliases":["categoryId","category"]},{"name":"min_price","type":"number","required":false,"description":"Minimum price in EUR.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum price in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max"]},{"name":"condition","type":"enum","required":false,"description":"Item condition (one value). Listings with no condition set are in none of the three classes.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New (novo)"},{"value":"used","label":"Used (rabljeno)"},{"value":"defective","label":"Damaged / defective"}],"aliases":["state"]},{"name":"with_images","type":"boolean","required":false,"description":"Only listings that have at least one photo.","on_invalid":"reject","aliases":["ads_with_images"]},{"name":"title_only","type":"boolean","required":false,"description":"Match the words in the listing TITLE only (bicikl: 31,097 → 11,195).","on_invalid":"reject","aliases":["dont_match_description"]},{"name":"payprotect_only","type":"boolean","required":false,"description":"Only listings that can be bought with the site's escrow payment (PayProtect on njuskalo, BREZ SKRBI on bolha).","on_invalid":"reject","aliases":["online_payment"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own options).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"new","label":"Newest first"},{"value":"old","label":"Oldest first"},{"value":"cheap","label":"Price low → high"},{"value":"expensive","label":"Price high → low"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page: 25 regular rows on most pages (36 measured on `mobiteli`) plus up to 6 promoted rows on page 1. The source serves at most 400 pages (10,000 rows) per query even when its own page count is higher; see `last_reachable_page`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400}],"returns":"results[]{listing_id, title, url, category_slug, image, price (EUR; null when on request / hidden / 0), price_text (as printed), price_min, price_max, price_on_request, price_hidden, currency, location, condition, attributes[]{id,label,value} (year, mileage, m², memory …), summary_lines[]{caption,text,highlight}, created_at, is_promoted, payprotect, is_new_car, has_car_warranty, has_video, has_virtual_tour, has_ground_plan, is_luxury_real_estate, financing_text (cars: the dealer's monthly-instalment line), seller{seller_id, name, seller_type (private|business), rating, review_count, logo}} + total, pages, last_reachable_page, page, has_more, promoted_count, adapted_category_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone","site":"hr"}},{"name":"browse","description":"List one category page (e.g. `auti`, `auti/audi`, `prodaja-stanova/zagreb`, `mobiteli`) with the price range, seller type (private / business), condition, photos-only and sort — plus any of the category's OWN filters (car year, mileage, fuel, m², rooms …) through `filters`, using the parameter names the response lists in `available_filters`. Rows have the same shape as search. Also returns the category's sub-categories with counts.","required_params":["category"],"optional_params":["site","min_price","max_price","seller_type","condition","with_images","filters","sort","page"],"params":[{"name":"category","type":"string","required":true,"description":"Category path as in the site URL, without the domain: `auti`, `auti/audi`, `prodaja-stanova`, `prodaja-stanova/zagreb`, `mobiteli` (njuskalo); `avto-oglasi`, `nadomestni-deli` (bolha). Slugs come from `categories`. Landing pages without listings (`auto-moto`, `marketplace`) are refused — list their children with `categories`.","on_invalid":"reject","example":"auti","aliases":["category_slug","path"]},{"name":"site","type":"enum","required":false,"description":"Which site: `hr` = njuskalo.hr (Croatia), `si` = bolha.com (Slovenia). Same platform, same fields.","on_invalid":"reject","allowed_values":[{"value":"hr","label":"njuskalo.hr — Croatia"},{"value":"si","label":"bolha.com — Slovenia"}],"default":"hr","aliases":["country","market"]},{"name":"min_price","type":"number","required":false,"description":"Minimum price in EUR.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum price in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max"]},{"name":"seller_type","type":"enum","required":false,"description":"Private sellers or business sellers. The two add up exactly to the category total (auti: 17,740 + 36,035 = 53,775).","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private (Privatne osobe)"},{"value":"business","label":"Business (Poslovne osobe)"}],"aliases":["account_purpose"]},{"name":"condition","type":"enum","required":false,"description":"Item condition (one value). Listings with no condition set are in none of the three classes.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New (novo)"},{"value":"used","label":"Used (rabljeno)"},{"value":"defective","label":"Damaged / defective"}],"aliases":["state"]},{"name":"with_images","type":"boolean","required":false,"description":"Only listings that have at least one photo.","on_invalid":"reject","aliases":["ads_with_images"]},{"name":"filters","type":"object","required":false,"description":"The category's own filters as `{parameter: value}`, named exactly as listed in `available_filters[].params` (e.g. on `auti`: `yearManufactured[min]`, `mileage[max]`, `fuelTypeId` = 602 (Diesel), `bodyTypeId`; on `prodaja-stanova`: `livingArea[min]`). A parameter the category does not have is rejected, never silently ignored.","on_invalid":"reject","example":{"yearManufactured[min]":2018,"mileage[max]":100000}},{"name":"sort","type":"enum","required":false,"description":"Result order (category pages default to newest).","on_invalid":"reject","allowed_values":[{"value":"new","label":"Newest first"},{"value":"old","label":"Oldest first"},{"value":"cheap","label":"Price low → high"},{"value":"expensive","label":"Price high → low"}],"default":"new"},{"name":"page","type":"integer","required":false,"description":"Result page: 25 regular rows on most pages (36 measured on `mobiteli`) plus up to 6 promoted rows on page 1. The source serves at most 400 pages (10,000 rows) per query even when its own page count is higher; see `last_reachable_page`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400}],"returns":"results[]{listing_id, title, url, category_slug, image, price (EUR; null when on request / hidden / 0), price_text (as printed), price_min, price_max, price_on_request, price_hidden, currency, location, condition, attributes[]{id,label,value} (year, mileage, m², memory …), summary_lines[]{caption,text,highlight}, created_at, is_promoted, payprotect, is_new_car, has_car_warranty, has_video, has_virtual_tour, has_ground_plan, is_luxury_real_estate, financing_text (cars: the dealer's monthly-instalment line), seller{seller_id, name, seller_type (private|business), rating, review_count, logo}} + total, pages, last_reachable_page, page, has_more, page_clamped, category{category_id, name, url}, subcategories[]{category_id, name, slug, url, listing_count}, available_filters[]{filter, label, type, params[], choices[]{value,label,param}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"auti","site":"hr","seller_type":"private"}},{"name":"categories","description":"The category tree, one level at a time: without `category` the site's top-level sections and their main categories; with a category path its child categories (brands, models, regions, sub-types) with the live listing count of each. Feed a `slug` to `browse`, a `category_id` to `search`.","required_params":[],"optional_params":["site","category"],"params":[{"name":"site","type":"enum","required":false,"description":"Which site: `hr` = njuskalo.hr (Croatia), `si` = bolha.com (Slovenia). Same platform, same fields.","on_invalid":"reject","allowed_values":[{"value":"hr","label":"njuskalo.hr — Croatia"},{"value":"si","label":"bolha.com — Slovenia"}],"default":"hr","aliases":["country","market"]},{"name":"category","type":"string","required":false,"description":"Category path whose children to list (`auti`, `prodaja-stanova`, `avto-moto`). Omit for the top level.","on_invalid":"reject","example":"auti","aliases":["category_slug","path"]}],"returns":"categories[]{category_id, name, slug, url, listing_count?, children[]?} + category (the requested one, when given)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"auti","site":"hr"}},{"name":"listing","description":"Full listing by listing_id or URL: title, price (parsed + printed, range for new-build projects, on-request flag), state, created / expiry dates, view count, category path, location + map coordinates (approximate flag), every detail field the listing shows (car: make, model, year, mileage, power, VIN, owners …; real estate: m², rooms, floor, energy class …), equipment groups, full description, all photos, PayProtect fees, and the seller (id, username, display name, private / business / store, profile URL, region / town, website, phone-verified flag, rating).","required_params":[],"optional_params":["listing_id","url","site"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Listing id: the digits after `-oglas-` in a listing URL, returned as `listing_id` in every search/browse row. Provide listing_id OR url.","on_invalid":"reject","example":"51742531","aliases":["id","ad_id"]},{"name":"url","type":"string","required":false,"description":"A njuskalo.hr or bolha.com listing URL; alternative to listing_id (the site is taken from the URL).","on_invalid":"reject","example":"https://www.njuskalo.hr/iphone-16/iphone-oglas-51742531","aliases":["listing_url"]},{"name":"site","type":"enum","required":false,"description":"Which site: `hr` = njuskalo.hr (Croatia), `si` = bolha.com (Slovenia). Same platform, same fields.","on_invalid":"reject","allowed_values":[{"value":"hr","label":"njuskalo.hr — Croatia"},{"value":"si","label":"bolha.com — Slovenia"}],"default":"hr","aliases":["country","market"]}],"returns":"listing{listing_id, site, title, headline, url, state, listing_type, created_at, expires_at, view_count, price, price_text, price_min, price_max, price_on_request, currency, price_structured_data, price_mismatch, availability, item_condition_schema, category{}, category_ids{}, category_path[], location, coordinates{lat,lng,approximate}, highlights[], details[]{field,label,value}, additional_details[]{group, items[]|values[]}, description, images[], video_count, has_ground_plan, payprotect{enabled, lowest_delivery_fee_text, buyer_protection_fee_text, total_with_min_delivery_text}, is_paid_promotion, new_build_project{title,url}?, seller{seller_id, username, name, seller_type (private|business|store), profile_url, logo, phone_verified, country, region, town, zip_code, street, website, email, additional_contact, rating, review_count, is_active}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.njuskalo.hr/iphone-16/iphone-oglas-51742531"}}]},{"name":"noon","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"noon API scraper — the Gulf marketplace (noon.com) for the UAE, Egypt, Kuwait, Oman, Qatar and Bahrain: search products, browse categories, read the full product record and every seller's offer, in local currency, English or Arabic. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/noon/v1","spec_available":true,"actions":[{"name":"search","description":"Search noon.com by keyword in one Gulf country and get the matching products: noon product id, title, brand, image, the price the shopper pays with the struck-through price and discount, any coupon code, rating and review count, the seller and its rating, noon Express / Supermall flags, delivery estimate and noon's own key specs. Filter by price, brand, minimum rating and delivery programme; sort by popularity, price or rating.","required_params":["query"],"optional_params":["country","language","page","limit","sort","price_min","price_max","brand","min_rating","fulfillment","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for on noon.","on_invalid":"reject","example":"iphone 17","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"noon storefront. Prices come back in that country's currency and product ids are shared across storefronts, but price, stock and sellers differ per country. Saudi Arabia is not available.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"om","label":"Oman (OMR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"bh","label":"Bahrain (BHD)"}],"default":"ae","example":"ae"},{"name":"language","type":"enum","required":false,"description":"Language of titles, specs and descriptions. Prices and ids are the same in both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. `total_pages` says how many exist; a page past the end returns an empty list, not an error.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100 (noon's own default is 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only orderings noon honours are accepted; anything else is rejected rather than silently ignored.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"noon's default ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first (noon's ranking, not strictly numeric)"},{"value":"rating","label":"Best rated first (noon's ranking, not strictly numeric)"}],"default":"popular"},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"brand","type":"string","required":false,"description":"noon brand code, lowercase with underscores (apple, samsung, new_balance). Every result row returns it as `brand_code`.","on_invalid":"reject","example":"apple"},{"name":"min_rating","type":"number","required":false,"description":"Only products rated at least this (1-5).","on_invalid":"reject","minimum":1,"maximum":5},{"name":"fulfillment","type":"enum","required":false,"description":"Restrict to one noon delivery programme.","on_invalid":"reject","allowed_values":[{"value":"express","label":"Fulfilled by noon (noon Express)"},{"value":"supermall","label":"noon Supermall fast delivery"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, offer_code, title, brand, brand_code, url, image, images[], price (number — what the shopper pays; noon's sale price when one is set), price_before_discount (the struck-through price, null when none), discount_percent, currency, coupon{code, title, detail, terms[]} (a code the shopper must enter — NOT subtracted from price), rating, review_count, rating_scale (5), seller{id, name, rating, rating_count, rating_scale, positive_rating_percent}, fulfilled_by_noon, supermall, marketplace_seller, free_delivery_eligible, buyable, low_stock_quantity, estimated_delivery, supermall_offer{offer_code, price, price_before_discount, discount_percent, delivery}, best_seller_rank, badges[], deal_tag, key_specs{name: value}, colour_variant_count}, count, total_results, total_pages, page, sort_applied{by, dir}, filters_applied, breadcrumbs[]{name, code}, country, currency, language, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone","country":"ae"}},{"name":"category/products","description":"Browse one noon category (by its path) in one Gulf country: the same product rows, filters, sorts and paging as `search`, plus the category breadcrumb.","required_params":["category"],"optional_params":["country","language","page","limit","sort","price_min","price_max","brand","min_rating","fulfillment","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"noon category path — the part of a noon category URL after the country segment (https://www.noon.com/uae-en/electronics-and-mobiles/… → electronics-and-mobiles/…). A full category URL is accepted. `breadcrumbs[].code` on a listing returns these.","on_invalid":"reject","example":"electronics-and-mobiles/mobiles-and-accessories/mobiles-20905/smartphones","aliases":["category_path","url"]},{"name":"country","type":"enum","required":false,"description":"noon storefront. Prices come back in that country's currency and product ids are shared across storefronts, but price, stock and sellers differ per country. Saudi Arabia is not available.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"om","label":"Oman (OMR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"bh","label":"Bahrain (BHD)"}],"default":"ae","example":"ae"},{"name":"language","type":"enum","required":false,"description":"Language of titles, specs and descriptions. Prices and ids are the same in both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. `total_pages` says how many exist; a page past the end returns an empty list, not an error.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100 (noon's own default is 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only orderings noon honours are accepted; anything else is rejected rather than silently ignored.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"noon's default ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first (noon's ranking, not strictly numeric)"},{"value":"rating","label":"Best rated first (noon's ranking, not strictly numeric)"}],"default":"popular"},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's currency.","on_invalid":"reject","minimum":0},{"name":"brand","type":"string","required":false,"description":"noon brand code, lowercase with underscores (apple, samsung, new_balance). Every result row returns it as `brand_code`.","on_invalid":"reject","example":"apple"},{"name":"min_rating","type":"number","required":false,"description":"Only products rated at least this (1-5).","on_invalid":"reject","minimum":1,"maximum":5},{"name":"fulfillment","type":"enum","required":false,"description":"Restrict to one noon delivery programme.","on_invalid":"reject","allowed_values":[{"value":"express","label":"Fulfilled by noon (noon Express)"},{"value":"supermall","label":"noon Supermall fast delivery"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, offer_code, title, brand, brand_code, url, image, images[], price (number — what the shopper pays; noon's sale price when one is set), price_before_discount (the struck-through price, null when none), discount_percent, currency, coupon{code, title, detail, terms[]} (a code the shopper must enter — NOT subtracted from price), rating, review_count, rating_scale (5), seller{id, name, rating, rating_count, rating_scale, positive_rating_percent}, fulfilled_by_noon, supermall, marketplace_seller, free_delivery_eligible, buyable, low_stock_quantity, estimated_delivery, supermall_offer{offer_code, price, price_before_discount, discount_percent, delivery}, best_seller_rank, badges[], deal_tag, key_specs{name: value}, colour_variant_count}, count, total_results, total_pages, page, sort_applied{by, dir}, filters_applied, breadcrumbs[]{name, code}, country, currency, language, category","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"electronics-and-mobiles/mobiles-and-accessories/mobiles-20905/smartphones"}},{"name":"product/detail","description":"The full noon product record by `product_id` (or product URL) in one Gulf country: title, brand, description and bullet points, image gallery, model and model number, the buy-box price with struck-through price, discount and coupon, the cheapest and dearest seller price, availability, rating with review count and scale, a sample of reviews, the category breadcrumb, the full specification table, size variants, colour variants, and every seller's offer.","required_params":["product_id"],"optional_params":["country","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"noon product id (the code before /p/ in a product URL, e.g. N70211545V or Z21880EA663D8910F1026Z). A full noon product URL is accepted and its country is used when `country` is not given.","on_invalid":"reject","example":"N70211545V","aliases":["id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"noon storefront. Prices come back in that country's currency and product ids are shared across storefronts, but price, stock and sellers differ per country. Saudi Arabia is not available.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"om","label":"Oman (OMR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"bh","label":"Bahrain (BHD)"}],"default":"ae","example":"ae"},{"name":"language","type":"enum","required":false,"description":"Language of titles, specs and descriptions. Prices and ids are the same in both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, title, brand, brand_code, url, description, feature_bullets[], images[], model, model_number, color, gtin (null — noon publishes none), price (number — noon's buy-box offer), price_before_discount, discount_percent, price_min, price_max (cheapest / dearest buyable offer across sellers and sizes), currency, coupon, availability (in_stock|out_of_stock), featured_offer_code, featured_seller, offer_count, seller_count, product_type_code (noon's own opaque product-type integer: a phone, its case and its charger differ even inside one category; noon publishes no dictionary for the values), rating, review_count, rating_scale, reviews_sample[]{rating, title, body, date, author}, breadcrumbs[]{name, url}, category, specifications[]{code, name, value}, variants[]{variant_sku, variant (e.g. a shoe size), available, offer_count, price_min}, colour_variants[]{group, options[]{name, product_id, available, url, image}}, offers[] (as in product/offers), country, language}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"N70211545V","country":"kw"}},{"name":"product/offers","description":"Every seller's offer for one noon product in one Gulf country, cheapest first: the seller with its id, name and rating, the price paid with struck-through price and discount, coupon, stock, size variant, noon Express / marketplace flags, delivery estimate and date, warranty and return policy, and which offer holds noon's buy box.","required_params":["product_id"],"optional_params":["country","language","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"noon product id (the code before /p/ in a product URL, e.g. N70211545V or Z21880EA663D8910F1026Z). A full noon product URL is accepted and its country is used when `country` is not given.","on_invalid":"reject","example":"N70211545V","aliases":["id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"noon storefront. Prices come back in that country's currency and product ids are shared across storefronts, but price, stock and sellers differ per country. Saudi Arabia is not available.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"eg","label":"Egypt (EGP)"},{"value":"kw","label":"Kuwait (KWD)"},{"value":"om","label":"Oman (OMR)"},{"value":"qa","label":"Qatar (QAR)"},{"value":"bh","label":"Bahrain (BHD)"}],"default":"ae","example":"ae"},{"name":"language","type":"enum","required":false,"description":"Language of titles, specs and descriptions. Prices and ids are the same in both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, title, brand, url, currency, price (buy-box), price_min, price_max, offer_count, seller_count, product_type_code, availability} + offers[]{position, offer_code, variant_sku, variant, seller{id, name, rating, rating_count, rating_scale, positive_rating_percent}, price, price_before_discount, discount_percent, currency, coupon, buyable, stock (as noon reports it; never seen above 10), stock_is_display_cap, fulfilled_by_noon, marketplace_seller, free_delivery_eligible, estimated_delivery, estimated_delivery_date, warranty, warranty_code (machine-readable warranty: 12_month_brand / 12_month_seller / none / 06_month_seller; distinguishes a manufacturer warranty from a seller one, which is NOT the same as a region or market field), returnable, return_policy, featured} + count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"N70211545V"}}]},{"name":"notino","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Notino API scraper — Europe's largest online perfume & cosmetics retailer (notino.*): search 27 countries, read the full product (every size/shade with its own price, price per litre/100 ml, was-price, EU 30-day lowest price, voucher prices, EAN, ingredients, delivery dates), reviews and autocomplete. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/notino/v1","spec_available":true,"actions":[{"name":"search","description":"Search a Notino storefront by keyword, or browse a category/brand page, with the site's own sorts, price range and facet filters. Each row: product (variant) id, catalog master id, brand, name, annotation, price (price_basis says whether it is this variant's price or the cheapest shade of a grouped product), unit price per litre/100 ml, voucher / conditional-voucher prices, discount reason, rating + count, stock bucket, variants (size/shade labels), category and image. A keyword the site maps to a category or brand is followed and reported (redirect_to). No-match padding and sponsored rows are dropped and counted.","required_params":[],"optional_params":["country","query","category","sort","page","filters","price_min","price_max","include_facets","include_sponsored","include_fallback_results"],"params":[{"name":"country","type":"enum","required":false,"description":"Notino storefront. All 27 run on one platform; currency and language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — notino.de (EUR)"},{"value":"at","label":"Austria — notino.at (EUR)"},{"value":"ch","label":"Switzerland — notino.ch (CHF)"},{"value":"cz","label":"Czechia — notino.cz (CZK)"},{"value":"sk","label":"Slovakia — notino.sk (EUR)"},{"value":"pl","label":"Poland — notino.pl (PLN)"},{"value":"hu","label":"Hungary — notino.hu (HUF)"},{"value":"ro","label":"Romania — notino.ro (RON)"},{"value":"bg","label":"Bulgaria — notino.bg (EUR)"},{"value":"hr","label":"Croatia — notino.hr (EUR)"},{"value":"si","label":"Slovenia — notino.si (EUR)"},{"value":"gr","label":"Greece — notino.gr (EUR)"},{"value":"it","label":"Italy — notino.it (EUR)"},{"value":"es","label":"Spain — notino.es (EUR)"},{"value":"pt","label":"Portugal — notino.pt (EUR)"},{"value":"fr","label":"France — notino.fr (EUR)"},{"value":"be","label":"Belgium — notino.be (EUR, French)"},{"value":"nl","label":"Netherlands — notino.nl (EUR)"},{"value":"uk","label":"United Kingdom — notino.co.uk (GBP)"},{"value":"ie","label":"Ireland — notino.ie (EUR)"},{"value":"dk","label":"Denmark — notino.dk (DKK)"},{"value":"se","label":"Sweden — notino.se (SEK)"},{"value":"fi","label":"Finland — notino.fi (EUR)"},{"value":"lt","label":"Lithuania — notino.lt (EUR)"},{"value":"lv","label":"Latvia — notino.lv (EUR)"},{"value":"ee","label":"Estonia — notino.ee (EUR)"},{"value":"ua","label":"Ukraine — notino.ua (UAH)"}],"default":"de"},{"name":"query","type":"string","required":false,"description":"Keyword to search (brand, product or product type, in the store's language). Optional when `category` is given.","on_invalid":"reject","example":"dior sauvage","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"A category or brand page to browse: its slug ('lippenstifte', 'dior') or a notino URL/path (from `related_categories`, a breadcrumb or a redirect_to).","on_invalid":"reject","example":"lippenstifte","aliases":["category_url"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering (the site's own sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"bestseller","label":"Bestsellers"},{"value":"price_asc","label":"Price ascending"},{"value":"price_desc","label":"Price descending"},{"value":"top_rated","label":"Top rated"},{"value":"newest","label":"Newest"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page; 24 products per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"filters","type":"string","required":false,"description":"Comma-separated facet value ids from `include_facets` (brand, shade, gender, rating, offers …). Ids are per store for brand/offer facets.","on_invalid":"reject","example":"200005"},{"name":"price_min","type":"number","required":false,"description":"Minimum price in the country currency.","on_invalid":"reject","example":20,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in the country currency.","on_invalid":"reject","example":60,"minimum":0},{"name":"include_facets","type":"boolean","required":false,"description":"Also return the filter facets (brands, shades, offers, ratings …) with their ids.","on_invalid":"ignore","default":false},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return sponsored (paid placement) rows, flagged; dropped by default.","on_invalid":"ignore","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When a keyword has no real match the site pads the page with unrelated products; they are dropped by default. true returns them under fallback_results.","on_invalid":"ignore","default":false}],"returns":"results[]{product_id, catalog_master_id, master_id, product_code, master_product_code, title, brand, name, sub_name, annotation, url, price, currency, price_basis, was_price, discount_percent, dual_price, member_price, unit_price{value,per_amount,per_unit}, voucher{code,price,discount_percent}, conditional_voucher{code,min_basket,condition_type,discount_percent,applies_to}, discount_reason, free_delivery, is_new, rating, rating_count, rating_scale, search_index_stock, variant_count, variants[{product_id,label,colors}], category{kind,category,subcategory,type}, image, is_pharmacy, sponsored}, count, total_results, total_pages, page, page_size, has_more, sort, query, category, country, currency, page_title, redirect_to, related_categories[{name,url}], price_range{min,max}, sponsored_dropped, fallback_results_dropped, fallback_results (opt-in), facets (opt-in)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","query":"dior sauvage"}},{"name":"product/detail","description":"The full Notino product by product id, catalog master id or URL: title, brand, manufacturer, the requested variant's price, was-price with its type and discount, EU 30-day lowest price, unit price, voucher and conditional-voucher prices, loyalty points, stock state + count, EAN, order code, images, description, ingredients, warnings, usage, characteristics, fragrance notes, rating + counts, breadcrumb, category, delivery options with dates and prices, gifts/samples, and every size/shade variant each with its own price block, EAN and stock.","required_params":[],"optional_params":["country","product_id","catalog_master_id","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Notino storefront. All 27 run on one platform; currency and language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — notino.de (EUR)"},{"value":"at","label":"Austria — notino.at (EUR)"},{"value":"ch","label":"Switzerland — notino.ch (CHF)"},{"value":"cz","label":"Czechia — notino.cz (CZK)"},{"value":"sk","label":"Slovakia — notino.sk (EUR)"},{"value":"pl","label":"Poland — notino.pl (PLN)"},{"value":"hu","label":"Hungary — notino.hu (HUF)"},{"value":"ro","label":"Romania — notino.ro (RON)"},{"value":"bg","label":"Bulgaria — notino.bg (EUR)"},{"value":"hr","label":"Croatia — notino.hr (EUR)"},{"value":"si","label":"Slovenia — notino.si (EUR)"},{"value":"gr","label":"Greece — notino.gr (EUR)"},{"value":"it","label":"Italy — notino.it (EUR)"},{"value":"es","label":"Spain — notino.es (EUR)"},{"value":"pt","label":"Portugal — notino.pt (EUR)"},{"value":"fr","label":"France — notino.fr (EUR)"},{"value":"be","label":"Belgium — notino.be (EUR, French)"},{"value":"nl","label":"Netherlands — notino.nl (EUR)"},{"value":"uk","label":"United Kingdom — notino.co.uk (GBP)"},{"value":"ie","label":"Ireland — notino.ie (EUR)"},{"value":"dk","label":"Denmark — notino.dk (DKK)"},{"value":"se","label":"Sweden — notino.se (SEK)"},{"value":"fi","label":"Finland — notino.fi (EUR)"},{"value":"lt","label":"Lithuania — notino.lt (EUR)"},{"value":"lv","label":"Latvia — notino.lv (EUR)"},{"value":"ee","label":"Estonia — notino.ee (EUR)"},{"value":"ua","label":"Ukraine — notino.ua (UAH)"}],"default":"de"},{"name":"product_id","type":"string","required":false,"description":"Notino product (variant) id — the number in a product URL (…/p-15676582/). Every search row returns one.","on_invalid":"reject","example":"15676582","aliases":["id","variant_id"]},{"name":"catalog_master_id","type":"string","required":false,"description":"Instead of product_id: the catalog master id (search rows return it); saves a lookup.","on_invalid":"reject","example":"361339","aliases":["master_catalog_id"]},{"name":"url","type":"string","required":false,"description":"Instead of product_id: a notino product URL (…/p-<id>/).","on_invalid":"reject","aliases":["product_url"]}],"returns":"product{product_id, catalog_master_id, master_id, master_product_code, title, brand, brand_id, manufacturer, name, collection, annotation, url, catalog_id, label, variant_name, product_code, order_code, ean, price, currency, was_price, was_price_type, discount_percent, lowest_price_30d, unit_price, tax_percent, member_price, loyalty_points, voucher, conditional_voucher{code,condition_type,conditions[{min_basket,discount_percent,price_if_met,product_meets_condition}],applies_to,valid_until}, amount{value,unit,package}, colors, availability{state,stock_code,stock_count,max_order_quantity}, in_stock, images, gender, description, ingredients, warnings, instructions, important_notice, characteristics[{name,values}], fragrance_notes[{name,values}], rating, rating_count, text_review_count, rating_scale, breadcrumb[{name,url}], category, deliveries[{carrier,method,date,date_from,date_to,price,free_shipping,unavailable_reason}], delivery_estimate, gifts[{campaign_id,type,for_product_id,text,image}], variant_display_type, variant_count, variants[...same price/stock/ean block per variant], related_product_ids}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","product_id":"15676582"}},{"name":"product/reviews","description":"Customer reviews of a Notino product (the storefront's own reviews, in its language): text, title, star rating, date, verified flag, likes/dislikes, pros/cons, photos, the reviewed variant, and the rating histogram. Sort newest/oldest/rating/most helpful, filter by stars or photos; 8 per page.","required_params":[],"optional_params":["country","product_id","catalog_master_id","url","sort","page","rating","with_images"],"params":[{"name":"country","type":"enum","required":false,"description":"Notino storefront. All 27 run on one platform; currency and language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — notino.de (EUR)"},{"value":"at","label":"Austria — notino.at (EUR)"},{"value":"ch","label":"Switzerland — notino.ch (CHF)"},{"value":"cz","label":"Czechia — notino.cz (CZK)"},{"value":"sk","label":"Slovakia — notino.sk (EUR)"},{"value":"pl","label":"Poland — notino.pl (PLN)"},{"value":"hu","label":"Hungary — notino.hu (HUF)"},{"value":"ro","label":"Romania — notino.ro (RON)"},{"value":"bg","label":"Bulgaria — notino.bg (EUR)"},{"value":"hr","label":"Croatia — notino.hr (EUR)"},{"value":"si","label":"Slovenia — notino.si (EUR)"},{"value":"gr","label":"Greece — notino.gr (EUR)"},{"value":"it","label":"Italy — notino.it (EUR)"},{"value":"es","label":"Spain — notino.es (EUR)"},{"value":"pt","label":"Portugal — notino.pt (EUR)"},{"value":"fr","label":"France — notino.fr (EUR)"},{"value":"be","label":"Belgium — notino.be (EUR, French)"},{"value":"nl","label":"Netherlands — notino.nl (EUR)"},{"value":"uk","label":"United Kingdom — notino.co.uk (GBP)"},{"value":"ie","label":"Ireland — notino.ie (EUR)"},{"value":"dk","label":"Denmark — notino.dk (DKK)"},{"value":"se","label":"Sweden — notino.se (SEK)"},{"value":"fi","label":"Finland — notino.fi (EUR)"},{"value":"lt","label":"Lithuania — notino.lt (EUR)"},{"value":"lv","label":"Latvia — notino.lv (EUR)"},{"value":"ee","label":"Estonia — notino.ee (EUR)"},{"value":"ua","label":"Ukraine — notino.ua (UAH)"}],"default":"de"},{"name":"product_id","type":"string","required":false,"description":"Notino product (variant) id — the number in a product URL (…/p-15676582/). Every search row returns one.","on_invalid":"reject","example":"15676582","aliases":["id","variant_id"]},{"name":"catalog_master_id","type":"string","required":false,"description":"Instead of product_id: the catalog master id (search rows return it); saves a lookup.","on_invalid":"reject","example":"361339","aliases":["master_catalog_id"]},{"name":"url","type":"string","required":false,"description":"Instead of product_id: a notino product URL (…/p-<id>/).","on_invalid":"reject","aliases":["product_url"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"rating_desc","label":"Highest rating"},{"value":"rating_asc","label":"Lowest rating"},{"value":"most_helpful","label":"Most helpful"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page; 8 reviews per page (the site's size).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"rating","type":"string","required":false,"description":"Only these star ratings, comma-separated 1-5.","on_invalid":"reject","example":"1,2"},{"name":"with_images","type":"boolean","required":false,"description":"Only reviews that carry customer photos.","on_invalid":"ignore","default":false}],"returns":"reviews[{id, title, text, rating, created_at, author, verified, author_type, likes, dislikes, variant_id, source_language, original_title, original_text, pros, cons, images[{thumbnail,full}], agency{name,url}}], count, page, total_pages, total_reviews, has_more, rating_histogram{1..5}, verified_count, with_images_count, product{catalog_master_id, master_product_code, rating, rating_count, text_review_count}, sort, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","catalog_master_id":"361339"}},{"name":"suggest","description":"Notino autocomplete for a partial query: suggested products (id, title, annotation, product code, url, image) and the brand, collection and category pages it proposes.","required_params":["query"],"optional_params":["country"],"params":[{"name":"query","type":"string","required":false,"description":"A partial keyword.","on_invalid":"reject","example":"dior","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Notino storefront. All 27 run on one platform; currency and language follow the country.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — notino.de (EUR)"},{"value":"at","label":"Austria — notino.at (EUR)"},{"value":"ch","label":"Switzerland — notino.ch (CHF)"},{"value":"cz","label":"Czechia — notino.cz (CZK)"},{"value":"sk","label":"Slovakia — notino.sk (EUR)"},{"value":"pl","label":"Poland — notino.pl (PLN)"},{"value":"hu","label":"Hungary — notino.hu (HUF)"},{"value":"ro","label":"Romania — notino.ro (RON)"},{"value":"bg","label":"Bulgaria — notino.bg (EUR)"},{"value":"hr","label":"Croatia — notino.hr (EUR)"},{"value":"si","label":"Slovenia — notino.si (EUR)"},{"value":"gr","label":"Greece — notino.gr (EUR)"},{"value":"it","label":"Italy — notino.it (EUR)"},{"value":"es","label":"Spain — notino.es (EUR)"},{"value":"pt","label":"Portugal — notino.pt (EUR)"},{"value":"fr","label":"France — notino.fr (EUR)"},{"value":"be","label":"Belgium — notino.be (EUR, French)"},{"value":"nl","label":"Netherlands — notino.nl (EUR)"},{"value":"uk","label":"United Kingdom — notino.co.uk (GBP)"},{"value":"ie","label":"Ireland — notino.ie (EUR)"},{"value":"dk","label":"Denmark — notino.dk (DKK)"},{"value":"se","label":"Sweden — notino.se (SEK)"},{"value":"fi","label":"Finland — notino.fi (EUR)"},{"value":"lt","label":"Lithuania — notino.lt (EUR)"},{"value":"lv","label":"Latvia — notino.lv (EUR)"},{"value":"ee","label":"Estonia — notino.ee (EUR)"},{"value":"ua","label":"Ukraine — notino.ua (UAH)"}],"default":"de"}],"returns":"products[{product_id, title, annotation, product_code, url, image}], sections[{title, kind, items[{name, url, kind}]}], count, country","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de","query":"chanel"}}]},{"name":"nykaa","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Nykaa API — India's biggest beauty marketplace as JSON: product search, MRP and selling price with the real discount, shade-level prices and stock, customer reviews with the rating histogram and aspect sentiment, brand and category catalogues with filters that bite, from nykaa.com — prices in INR, no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/nykaa/v1","spec_available":true,"actions":[{"name":"search","description":"Search Nykaa exactly as a shopper does and get the product grid: the price actually paid, the printed MRP, the real discount, rating and rating count, shade count, stock and the product id. Two things this action does for you: it reads the same index the website shows (a cheaper keyword route on the same host answers 0 for 'nykaa foundation', where the site answers 116), and when Nykaa redirects a head term such as 'lipstick' to a category it follows that and tells you, so you get the catalogue instead of nothing. 🔴 Nykaa server-renders only the FIRST 20 matches of a search: `total_results` is its own count, and a deeper walk goes through `category` with the `category_id` this action hands back.","required_params":["query"],"optional_params":["sort","price_min","price_max","min_discount","min_rating","brand_id","color_id","finish_id","concern_id","formulation_id","ingredient_id","gender_id","country_of_origin","preference_id","skin_type_id","include_facets"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper would type on nykaa.com — a product, a brand, a category, or a concern phrase such as 'serum for oily skin'.","on_invalid":"reject","example":"maybelline mascara","aliases":["q","keyword","term","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Nykaa's own default is `popularity`. It refuses any order it does not know, so these seven are all that exist.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Nykaa's own ranking (default)"},{"value":"price_asc","label":"Price, cheapest first"},{"value":"price_desc","label":"Price, dearest first"},{"value":"discount","label":"Biggest discount first"},{"value":"customer_top_rated","label":"Highest customer rating first"},{"value":"new_arrival","label":"Newest products first"},{"value":"name","label":"Product name, A-Z"}],"example":"price_asc"},{"name":"price_min","type":"integer","required":false,"description":"Lowest selling price in INR. Use with `price_max`; the source takes the pair as one band.","on_invalid":"ignore","example":0,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest selling price in INR. Measured on the Lipstick category: 718 products unfiltered, 295 under 500, 84 between 1000 and 1999.","on_invalid":"ignore","example":499,"minimum":1},{"name":"min_discount","type":"integer","required":false,"description":"Only products discounted by at least this percentage. Measured on Lipstick: 718 unfiltered, 453 discounted at all, 184 at 20 % or more, 92 at 30 %, 36 at 40 %.","on_invalid":"ignore","example":30,"minimum":0,"maximum":90},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average customer rating is at least this many stars (1-4; Nykaa publishes no 5-only filter). Measured on the query 'kajal waterproof': 329 unfiltered, 309 at 3+, 278 at 4+.","on_invalid":"ignore","example":4,"minimum":1,"maximum":4},{"name":"brand_id","type":"string","required":false,"description":"Narrow to one brand. The id comes from `facets.brand` on this action (set `include_facets`) or from `brands`. Measured: brand 3899 in category 249 returns exactly the 26 the facet promises. Nykaa offers no brand facet on a KEYWORD search, only on a category or brand listing.","on_invalid":"ignore","example":"3899"},{"name":"color_id","type":"string","required":false,"description":"Narrow to one colour family; the id comes from `facets.color`. 🔴 This one matches at SHADE level, so on a category its own count can exceed the unfiltered product count.","on_invalid":"ignore","example":"15514","aliases":["colour_id"]},{"name":"finish_id","type":"string","required":false,"description":"Finish, e.g. matte / creme / satin / glossy. Id from `facets.finish`. Measured on Lipstick: 454 of 718 are matte.","on_invalid":"ignore","example":"10881"},{"name":"concern_id","type":"string","required":false,"description":"Skin or hair concern (acne, pigmentation, dryness, hair fall). Id from `facets.concern` — this is the axis Indian beauty shoppers actually buy on.","on_invalid":"ignore","example":"10777"},{"name":"formulation_id","type":"string","required":false,"description":"Formulation (liquid, cream, powder, pencil, gel). Id from `facets.formulation`.","on_invalid":"ignore","example":"10822"},{"name":"ingredient_id","type":"string","required":false,"description":"Hero ingredient (hyaluronic acid, niacinamide, salicylic acid, retinol). Id from `facets.ingredient_v1`.","on_invalid":"ignore","example":"228713"},{"name":"gender_id","type":"string","required":false,"description":"Gender the product is listed for. Id from `facets.gender` (10711 female, 10712 unisex on the categories measured).","on_invalid":"ignore","example":"10712","aliases":["gender"]},{"name":"country_of_origin","type":"string","required":false,"description":"ISO country code of manufacture, as Nykaa files it. Id from `facets.country_of_origin` — 'IN' and 'KR' are the two a buyer of Indian beauty data usually wants.","on_invalid":"ignore","example":"IN"},{"name":"preference_id","type":"string","required":false,"description":"Claim or preference (paraben free, cruelty free, vegan, dermatologically tested). Id from `facets.preference`.","on_invalid":"ignore","example":"10851"},{"name":"skin_type_id","type":"string","required":false,"description":"Skin type the product is listed for (oily, dry, normal, combination, sensitive). Id from `facets.skin_type`.","on_invalid":"ignore","example":"10780"},{"name":"include_facets","type":"boolean","required":false,"description":"Also return `facets`: every filter Nykaa offers for this listing — brands, colours, finishes, concerns, ingredients, formulations, price bands, ratings, discounts, country of origin — each with its id and the number of products behind it. This is where every `*_id` parameter above comes from.","on_invalid":"ignore","default":false}],"returns":"products[]{product_id, url, name, product_title, brand, price_inr, mrp_inr, discount_percent, discount_percent_listed, currency, rating, rating_count, in_stock, stock_quantity, shade_count, variant_type, sku, image, category_path[], offer, offer_count, tags}, total_results, listing_type (search|category), query, did_you_mean, approximate_results, category_id, category_name, promo_tiles_dropped, facets (optional)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"maybelline mascara"}},{"name":"category","description":"Walk one category with filters that bite: price band, minimum discount, minimum rating, one brand, colour, finish, concern, ingredient, formulation, skin type, country of origin, and any of Nykaa's seven sort orders. Same product rows as `search`, and unlike search this one pages all the way down. Category ids come from `categories`, from `suggest`, or from any product's `category_path`.","required_params":["category_id"],"optional_params":["page","sort","price_min","price_max","min_discount","min_rating","brand_id","color_id","finish_id","concern_id","formulation_id","ingredient_id","gender_id","country_of_origin","preference_id","skin_type_id","include_facets"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric category id (249 = Lipstick), or a nykaa.com category URL. A Nykaa brand page is a category too, so a brand id works here as well.","on_invalid":"reject","example":"249","aliases":["category","cid","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Nykaa serves 20 products a page and ignores every page-size parameter it is given, so this is the only way to go deeper. `total_results` says how far you can go.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Result order. Nykaa's own default is `popularity`. It refuses any order it does not know, so these seven are all that exist.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Nykaa's own ranking (default)"},{"value":"price_asc","label":"Price, cheapest first"},{"value":"price_desc","label":"Price, dearest first"},{"value":"discount","label":"Biggest discount first"},{"value":"customer_top_rated","label":"Highest customer rating first"},{"value":"new_arrival","label":"Newest products first"},{"value":"name","label":"Product name, A-Z"}],"example":"price_asc"},{"name":"price_min","type":"integer","required":false,"description":"Lowest selling price in INR. Use with `price_max`; the source takes the pair as one band.","on_invalid":"ignore","example":0,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest selling price in INR. Measured on the Lipstick category: 718 products unfiltered, 295 under 500, 84 between 1000 and 1999.","on_invalid":"ignore","example":499,"minimum":1},{"name":"min_discount","type":"integer","required":false,"description":"Only products discounted by at least this percentage. Measured on Lipstick: 718 unfiltered, 453 discounted at all, 184 at 20 % or more, 92 at 30 %, 36 at 40 %.","on_invalid":"ignore","example":30,"minimum":0,"maximum":90},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average customer rating is at least this many stars (1-4; Nykaa publishes no 5-only filter). Measured on the query 'kajal waterproof': 329 unfiltered, 309 at 3+, 278 at 4+.","on_invalid":"ignore","example":4,"minimum":1,"maximum":4},{"name":"brand_id","type":"string","required":false,"description":"Narrow to one brand. The id comes from `facets.brand` on this action (set `include_facets`) or from `brands`. Measured: brand 3899 in category 249 returns exactly the 26 the facet promises. Nykaa offers no brand facet on a KEYWORD search, only on a category or brand listing.","on_invalid":"ignore","example":"3899"},{"name":"color_id","type":"string","required":false,"description":"Narrow to one colour family; the id comes from `facets.color`. 🔴 This one matches at SHADE level, so on a category its own count can exceed the unfiltered product count.","on_invalid":"ignore","example":"15514","aliases":["colour_id"]},{"name":"finish_id","type":"string","required":false,"description":"Finish, e.g. matte / creme / satin / glossy. Id from `facets.finish`. Measured on Lipstick: 454 of 718 are matte.","on_invalid":"ignore","example":"10881"},{"name":"concern_id","type":"string","required":false,"description":"Skin or hair concern (acne, pigmentation, dryness, hair fall). Id from `facets.concern` — this is the axis Indian beauty shoppers actually buy on.","on_invalid":"ignore","example":"10777"},{"name":"formulation_id","type":"string","required":false,"description":"Formulation (liquid, cream, powder, pencil, gel). Id from `facets.formulation`.","on_invalid":"ignore","example":"10822"},{"name":"ingredient_id","type":"string","required":false,"description":"Hero ingredient (hyaluronic acid, niacinamide, salicylic acid, retinol). Id from `facets.ingredient_v1`.","on_invalid":"ignore","example":"228713"},{"name":"gender_id","type":"string","required":false,"description":"Gender the product is listed for. Id from `facets.gender` (10711 female, 10712 unisex on the categories measured).","on_invalid":"ignore","example":"10712","aliases":["gender"]},{"name":"country_of_origin","type":"string","required":false,"description":"ISO country code of manufacture, as Nykaa files it. Id from `facets.country_of_origin` — 'IN' and 'KR' are the two a buyer of Indian beauty data usually wants.","on_invalid":"ignore","example":"IN"},{"name":"preference_id","type":"string","required":false,"description":"Claim or preference (paraben free, cruelty free, vegan, dermatologically tested). Id from `facets.preference`.","on_invalid":"ignore","example":"10851"},{"name":"skin_type_id","type":"string","required":false,"description":"Skin type the product is listed for (oily, dry, normal, combination, sensitive). Id from `facets.skin_type`.","on_invalid":"ignore","example":"10780"},{"name":"include_facets","type":"boolean","required":false,"description":"Also return `facets`: every filter Nykaa offers for this listing — brands, colours, finishes, concerns, ingredients, formulations, price bands, ratings, discounts, country of origin — each with its id and the number of products behind it. This is where every `*_id` parameter above comes from.","on_invalid":"ignore","default":false}],"returns":"products[] (same shape as search), total_results, page, category_id, category_name, category_ancestors[], promo_tiles_dropped, facets (optional)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"249"}},{"name":"brand","description":"One brand's whole Nykaa catalogue, paged and filterable exactly like a category. Pass the brand id if you have it, or just the brand NAME and this action resolves it for you (one extra upstream lookup) and reports the id it used.","required_params":["brand"],"optional_params":["page","sort","price_min","price_max","min_discount","min_rating","brand_id","color_id","finish_id","concern_id","formulation_id","ingredient_id","gender_id","country_of_origin","preference_id","skin_type_id","include_facets"],"params":[{"name":"brand","type":"string","required":true,"description":"A brand name ('maybelline', 'lakme', 'the ordinary'), its numeric Nykaa id, or a nykaa.com brand URL. A name costs one extra upstream lookup; an id costs none.","on_invalid":"reject","example":"maybelline","aliases":["brand_name","brand_slug","slug","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Nykaa serves 20 products a page and ignores every page-size parameter it is given, so this is the only way to go deeper. `total_results` says how far you can go.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Result order. Nykaa's own default is `popularity`. It refuses any order it does not know, so these seven are all that exist.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Nykaa's own ranking (default)"},{"value":"price_asc","label":"Price, cheapest first"},{"value":"price_desc","label":"Price, dearest first"},{"value":"discount","label":"Biggest discount first"},{"value":"customer_top_rated","label":"Highest customer rating first"},{"value":"new_arrival","label":"Newest products first"},{"value":"name","label":"Product name, A-Z"}],"example":"price_asc"},{"name":"price_min","type":"integer","required":false,"description":"Lowest selling price in INR. Use with `price_max`; the source takes the pair as one band.","on_invalid":"ignore","example":0,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest selling price in INR. Measured on the Lipstick category: 718 products unfiltered, 295 under 500, 84 between 1000 and 1999.","on_invalid":"ignore","example":499,"minimum":1},{"name":"min_discount","type":"integer","required":false,"description":"Only products discounted by at least this percentage. Measured on Lipstick: 718 unfiltered, 453 discounted at all, 184 at 20 % or more, 92 at 30 %, 36 at 40 %.","on_invalid":"ignore","example":30,"minimum":0,"maximum":90},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average customer rating is at least this many stars (1-4; Nykaa publishes no 5-only filter). Measured on the query 'kajal waterproof': 329 unfiltered, 309 at 3+, 278 at 4+.","on_invalid":"ignore","example":4,"minimum":1,"maximum":4},{"name":"brand_id","type":"string","required":false,"description":"Narrow to one brand. The id comes from `facets.brand` on this action (set `include_facets`) or from `brands`. Measured: brand 3899 in category 249 returns exactly the 26 the facet promises. Nykaa offers no brand facet on a KEYWORD search, only on a category or brand listing.","on_invalid":"ignore","example":"3899"},{"name":"color_id","type":"string","required":false,"description":"Narrow to one colour family; the id comes from `facets.color`. 🔴 This one matches at SHADE level, so on a category its own count can exceed the unfiltered product count.","on_invalid":"ignore","example":"15514","aliases":["colour_id"]},{"name":"finish_id","type":"string","required":false,"description":"Finish, e.g. matte / creme / satin / glossy. Id from `facets.finish`. Measured on Lipstick: 454 of 718 are matte.","on_invalid":"ignore","example":"10881"},{"name":"concern_id","type":"string","required":false,"description":"Skin or hair concern (acne, pigmentation, dryness, hair fall). Id from `facets.concern` — this is the axis Indian beauty shoppers actually buy on.","on_invalid":"ignore","example":"10777"},{"name":"formulation_id","type":"string","required":false,"description":"Formulation (liquid, cream, powder, pencil, gel). Id from `facets.formulation`.","on_invalid":"ignore","example":"10822"},{"name":"ingredient_id","type":"string","required":false,"description":"Hero ingredient (hyaluronic acid, niacinamide, salicylic acid, retinol). Id from `facets.ingredient_v1`.","on_invalid":"ignore","example":"228713"},{"name":"gender_id","type":"string","required":false,"description":"Gender the product is listed for. Id from `facets.gender` (10711 female, 10712 unisex on the categories measured).","on_invalid":"ignore","example":"10712","aliases":["gender"]},{"name":"country_of_origin","type":"string","required":false,"description":"ISO country code of manufacture, as Nykaa files it. Id from `facets.country_of_origin` — 'IN' and 'KR' are the two a buyer of Indian beauty data usually wants.","on_invalid":"ignore","example":"IN"},{"name":"preference_id","type":"string","required":false,"description":"Claim or preference (paraben free, cruelty free, vegan, dermatologically tested). Id from `facets.preference`.","on_invalid":"ignore","example":"10851"},{"name":"skin_type_id","type":"string","required":false,"description":"Skin type the product is listed for (oily, dry, normal, combination, sensitive). Id from `facets.skin_type`.","on_invalid":"ignore","example":"10780"},{"name":"include_facets","type":"boolean","required":false,"description":"Also return `facets`: every filter Nykaa offers for this listing — brands, colours, finishes, concerns, ingredients, formulations, price bands, ratings, discounts, country of origin — each with its id and the number of products behind it. This is where every `*_id` parameter above comes from.","on_invalid":"ignore","default":false}],"returns":"products[] (same shape as search), total_results, page, brand_id, brand_name, resolved_from (set when a name was resolved), promo_tiles_dropped, facets (optional)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"maybelline"}},{"name":"product","description":"The full Nykaa product record: selling price and printed MRP with the real discount, brand, rating and how many people rated it, how many wrote a review, the 1-5 star histogram, Nykaa's own review summary and its ranked aspect sentiment ('Color Payoff: Positive'), the barcode (GTIN), seller, country of origin, expiry date, return window, live stock, shade count, every image, the description, ingredients and how-to-use.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"The product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both.","on_invalid":"reject","example":"367160","aliases":["id","url","slug"]}],"returns":"product{product_id, url, name, product_title, brand, price_inr, mrp_inr, discount_percent, discount_percent_listed, currency, rating, rating_count, review_count, rating_histogram[]{stars, count, percent}, review_summary, review_aspects[]{aspect, sentiment, rank}, top_review, gtin, sku, seller, country_of_origin, manufacturer, expiry_date, return_period_days, returnable, in_stock, stock_quantity, shade_count, variant_type, images[], description, ingredients, how_to_use, offers[], category_path[]}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"985204"}},{"name":"product/shades","description":"Every shade of one product — or every pack size, for products Nykaa sells in several weights — with ITS OWN price, MRP, discount, stock count and images. A Nykaa lipstick is one product id and thirty shades, each separately priced and separately in or out of stock, and this is the only place that is published. Shades with zero stock are returned with `in_stock: false` rather than dropped, which is also why `count` here can be larger than the `shade_count` on the product record — that one is Nykaa's own headline number and leaves discontinued shades out.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"The product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both.","on_invalid":"reject","example":"367160","aliases":["id","url","slug"]}],"returns":"shades[]{variant_id, name, sku, price_inr, mrp_inr, discount_percent, currency, stock_quantity, in_stock, image, images[]}, product_id, count, in_stock_count","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"985204"}},{"name":"product/reviews","description":"The customer reviews Nykaa publishes for a product: rating, title, the full text, the author display name, the date, how many shoppers found it helpful, whether the reviewer is a verified buyer, which shade they bought and the photos they posted. 🔴 Two honest limits. The source server-renders the same 20 reviews whatever page, sort or filter is asked for, so that is the ceiling per product and this action does not pretend to page. And those 20 are Nykaa's own 'most useful, verified buyer' selection, not a random sample: across 12 products measured, 240 of 240 were verified buyers, 240 of 240 carried photos and the ratings skew to 5. `reviews_available` is Nykaa's own total and `product` returns the real 1-5 star histogram behind it — read that, not these 20, for sentiment.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"The product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both.","on_invalid":"reject","example":"367160","aliases":["id","url","slug"]}],"returns":"reviews[]{review_id, rating, title, text, author, created_at, helpful_count, verified_buyer, shade_id, images[]}, product{product_id, name, brand, url, rating, rating_count, review_count}, count, reviews_available","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"985204"}},{"name":"product/similar","description":"The products Nykaa itself recommends beside this one — its 'Explore Similar Products' rail, returned as full product rows with prices and ratings. A competitive set around a product without having to guess a category. Nykaa does not build a rail for every product: on 12 products measured, 6 had 9-16 recommendations and 6 had none, and an empty `products` means the source publishes none, not an error.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"The product to read. Accepts the numeric id (367160) or a full nykaa.com product URL. Every listing row carries both.","on_invalid":"reject","example":"367160","aliases":["id","url","slug"]}],"returns":"products[] (same shape as search), product_id, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"985204"}},{"name":"suggest","description":"Nykaa's own autocomplete for a partial query: the search terms it would offer, the brands and categories it maps the term to WITH their ids, and the products it would show. The cheapest way to turn a brand or category NAME into the id the other actions take.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"A partial or full query, brand name or category name.","on_invalid":"reject","example":"maybelline","aliases":["q","keyword","term"]}],"returns":"suggestions[]{text, type (brand|category|query), url, category_id, match_count}, products[]{product_id, name, url}, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"maybelline"}},{"name":"trending","description":"What India is searching for on Nykaa right now — the popular-searches list the site prints in its own search box.","required_params":[],"optional_params":[],"params":[],"returns":"trending[]{text, url, type}, count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"categories","description":"Nykaa's category tree: every department, category and sub-category with its id, name, URL and depth. These are the ids `category` takes. One call, cached for a day.","required_params":[],"optional_params":["query","depth"],"params":[{"name":"query","type":"string","required":false,"description":"Only categories whose name contains this text (case-insensitive). Omit for the whole tree.","on_invalid":"ignore","example":"lipstick","aliases":["q","name"]},{"name":"depth","type":"integer","required":false,"description":"Only categories at this depth, counted in URL segments as Nykaa files them: 2 is a category ('makeup/face' = Face), 3 a sub-category ('makeup/face/face-foundation' = Foundation). Measured: 337 categories, depths 1-6, most at 2 and 3.","on_invalid":"ignore","example":3,"minimum":1,"maximum":6}],"returns":"categories[]{category_id, name, url, path[], depth}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"lipstick"}},{"name":"brands","description":"Nykaa's A-Z brand index: every brand the marketplace carries, with the id its brand page is addressed by, its letter and its URL. These are the ids `brand` and `brand_id` take. One call, cached for a day.","required_params":[],"optional_params":["query","letter","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Only brands whose name contains this text (case-insensitive).","on_invalid":"ignore","example":"lore","aliases":["q","name"]},{"name":"letter","type":"string","required":false,"description":"Only brands filed under this letter (A-Z, or # for names starting with a digit or symbol).","on_invalid":"ignore","example":"L"},{"name":"limit","type":"integer","required":false,"description":"Rows to return — the index holds several thousand brands. `total` always reports the full match count.","on_invalid":"ignore","default":500,"minimum":1,"maximum":10000}],"returns":"brands[]{brand_id, name, letter, url, is_top_brand}, count, total","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"letter":"L"}}]},{"name":"ocado","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Ocado UK Groceries","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ocado/v1","spec_available":true,"actions":[{"name":"search","description":"Search UK groceries. GTIN/EAN is not available on the measured surfaces.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Product text up to 50 characters.","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Requested products per source page, 1–48; source groups can change the returned count.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"Opaque next_cursor returned by the same action and filters; restart without it after five minutes.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering within product groups; featured and offer groups are preserved.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"},{"value":"customerRating","label":"customerRating"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the brands facet, e.g. Cravendale.","on_invalid":"reject","example":"Cravendale"},{"name":"dietary","type":"enum","required":false,"description":"Source dietary/lifestyle facet value.","on_invalid":"reject","allowed_values":[{"value":"vegetarian","label":"vegetarian"},{"value":"glutenFree","label":"glutenFree"},{"value":"vegan","label":"vegan"},{"value":"celeryFree","label":"celeryFree"},{"value":"eggFree","label":"eggFree"},{"value":"fatFree","label":"fatFree"},{"value":"lactoseFree","label":"lactoseFree"},{"value":"milkFree","label":"milkFree"},{"value":"mustardFree","label":"mustardFree"},{"value":"nutFree","label":"nutFree"},{"value":"oatFree","label":"oatFree"},{"value":"organic","label":"organic"},{"value":"peanutFree","label":"peanutFree"},{"value":"sesameFree","label":"sesameFree"},{"value":"shellfishFree","label":"shellfishFree"},{"value":"soyaFree","label":"soyaFree"},{"value":"sulphitesFree","label":"sulphitesFree"},{"value":"wheatFree","label":"wheatFree"},{"value":"yeastFree","label":"yeastFree"}],"example":"organic"},{"name":"on_offer","type":"boolean","required":false,"description":"Only products with source promotions when true.","on_invalid":"reject","default":false},{"name":"new","type":"boolean","required":false,"description":"Only products marked new by the source when true.","on_invalid":"reject","default":false}],"returns":"Products with GBP current shelf and unit prices, promotions, availability, facets and next_cursor. Search total is unknown except a complete first page.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","limit":24}},{"name":"product/detail","description":"Full public product and label sheet, including promotion terms.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Retailer id from search or an Ocado product URL; never a barcode.","on_invalid":"reject","example":"24577011","aliases":["product_id","url"]}],"returns":"Product plus description, all named label fields, nutrition table, detailed images and breadcrumbs. No stock quantity or GTIN/EAN on tested surfaces.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"24577011"}}]},{"name":"offerup","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"OfferUp API scraper — search the US local classifieds marketplace by keyword, category and location (ZIP or coordinates) and read the full listing record: price, condition, photos, category, pickup/shipping and the seller's public profile. Prices in USD. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/offerup/v1","spec_available":true,"actions":[{"name":"search","description":"Search OfferUp listings near a US location by keyword, by category, or both. Returns one row per listing with its id, title, numeric price, town, photo and OfferUp's own tile flags — about 44-50 rows per call — plus a `next_cursor` for the next page. Filter by `condition` (NEW, OPEN_BOX, REFURBISHED, USED, BROKEN, OTHER), price range, radius and category. The condition and whether the price is firm are NOT on a feed tile (measured 0 of 704 rows); `product/detail` fills both. Location is what scopes the query: give `zip_code` (resolved by OfferUp's own geocoder) or `latitude`+`longitude`. Use the returned `listing_id` with `product/detail` for the description, the photo gallery and the seller.","required_params":[],"optional_params":["query","category","zip_code","latitude","longitude","radius","condition","min_price","max_price","sort","cursor","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"What to look for, in English. Optional — omit it and pass `category` instead to browse a whole category near the location. When BOTH are given, the category wins where the keyword has no local supply (measured: q=iphone + category=5 returns cars), so use one or the other unless you want that.","on_invalid":"reject","example":"couch","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"OfferUp category id. Top level: 1=Electronics & Media, 2=Home & Garden, 3=Clothing, Shoes, & Accessories, 4=Baby & Kids, 5=Vehicles, 6=Toys, Games, & Hobbies, 7=Sports & Outdoors, 8=Collectibles & Art, 9=Pet supplies, 10=Health & Beauty, 11=Wedding, 12=Business equipment, 13=Tickets, 14=General. Sub-categories are dotted and any depth works — 2.1 Furniture, 1.2 Cell phones & Accessories, 5.1 Cars & Trucks. Every result of `product/detail` returns the listing's own `category.id`, which is how you discover the deeper ids.","on_invalid":"reject","example":"2.1","aliases":["cid","category_id"]},{"name":"zip_code","type":"string","required":false,"description":"US 5-digit ZIP the search is centred on. Resolved to coordinates by OfferUp's own geocoder (one extra ~0.7 s call), and the resolved city/state/lat/lon come back in `location`. Give this OR latitude+longitude. If you give neither, OfferUp falls back to the geographic centre of the US (Pretty Prairie, Kansas) and the results are Kansas listings — `location.source` says which happened.","on_invalid":"reject","example":"90012","aliases":["zip","postal_code","zipcode"]},{"name":"latitude","type":"number","required":false,"description":"Latitude the search is centred on. Use with `longitude`; skips the ZIP lookup.","on_invalid":"reject","example":34.0522,"minimum":-90,"maximum":90,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Longitude the search is centred on. Use with `latitude`.","on_invalid":"reject","example":-118.2437,"minimum":-180,"maximum":180,"aliases":["lon","lng"]},{"name":"radius","type":"enum","required":false,"description":"Search radius in miles around the location. Only the five values OfferUp's own distance slider offers are accepted; anything else is rejected rather than silently ignored. 50 is the site's maximum — there is no nationwide search.","on_invalid":"reject","allowed_values":[{"value":"5","label":"5 miles"},{"value":"10","label":"10 miles"},{"value":"20","label":"20 miles"},{"value":"30","label":"30 miles (OfferUp's default)"},{"value":"50","label":"50 miles (the maximum)"}],"default":"30"},{"name":"condition","type":"array","required":false,"description":"Item condition, OfferUp's own six values. One value or several (a list, or comma-separated: `NEW,OPEN_BOX`) — several means ANY of them. Verified on product/detail: NEW returned 8/8 NEW items, BROKEN (OfferUp's 'For parts') 8/8 BROKEN. Any other value is rejected, because OfferUp would silently ignore it. Search rows carry no condition; product/detail returns it as `condition`.","on_invalid":"reject","allowed_values":[{"value":"NEW","label":"New — unused, sealed box, undamaged"},{"value":"OPEN_BOX","label":"Open box — unused, undamaged"},{"value":"REFURBISHED","label":"Reconditioned — restored by seller or a third party"},{"value":"USED","label":"Used — works perfectly, may show signs of wear"},{"value":"BROKEN","label":"For parts"},{"value":"OTHER","label":"Other — see item details"}],"example":["NEW"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in USD. Bites: min 100 & max 200 returned 44/44 rows priced 100-200. OfferUp filters in whole dollars and rounds a decimal (99.5 → 100); the bound it actually applied comes back in `filters_applied.min_price`.","on_invalid":"reject","example":100,"minimum":0,"maximum":1000000,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in USD (OfferUp's own maximum is 1000000). Whole dollars, rounded by OfferUp (150.75 → 151); echoed in `filters_applied.max_price`.","on_invalid":"reject","example":500,"minimum":0,"maximum":1000000,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. These are the five orderings OfferUp's own sort drawer offers and each was verified to change the result set; anything else is rejected.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"OfferUp's own relevance order (default)"},{"value":"newest","label":"Most recently posted first"},{"value":"closest","label":"Nearest to the location first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"best_match"},{"name":"cursor","type":"string","required":false,"description":"Next page. Pass back the `next_cursor` from the previous response — verified to return a page with zero ids in common with the one before it. There is no page NUMBER: OfferUp pages this feed by cursor only, and it publishes no total, so `total_results` is null rather than a guess.","on_invalid":"reject","aliases":["page_cursor","next_cursor"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry on a fresh exit (1-6, default 3 — leave unchanged for typical use).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{position, listing_id, title, price (number; null when call_for_price is true), price_display (OfferUp's own formatted string), currency=USD, call_for_price (true on a dealer listing whose price OfferUp hides on the tile — product/detail returns the number), is_firm_price (null on a search row — OfferUp does not fill it here), condition (null on a search row; product/detail has it), location{name, latitude (null on a search row), longitude (null)}, image{url,width,height}, vehicle_miles, flags[] (verbatim: LOCAL_PICKUP, CALL_FOR_PRICE), url, seller (null — OfferUp publishes no owner on a feed tile), rating (null — OfferUp has no product reviews), review_count (null), rating_scale (null)}, count, next_cursor, total_results (null — OfferUp publishes no total for this feed), location{latitude, longitude, zip_code, city, state, radius_miles, source ('zip_code' | 'coordinates' | 'offerup_default_us_centre')}, query, category, sort, filters_applied (OfferUp's own echo of the filters it applied: condition[], min_price, max_price — null when none was sent), ad_tiles_dropped, duplicate_rows_dropped (meta.pagination carries next_cursor + has_more)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"couch","latitude":34.0522,"longitude":-118.2437}},{"name":"product/detail","description":"The full OfferUp listing record by `listing_id` (or listing URL): title, the seller's own description, numeric price and whether it is firm, condition, posted date, the complete photo gallery at full size, the category with its whole path, the listing's coordinates and town, pickup/shipping terms, vehicle attributes when it is a vehicle, and the seller's PUBLIC profile — display name, star rating and number of ratings, what buyers praised (Friendly, On time …), how many items they have sold and bought, when they joined, their stated response time and their verification badges.","required_params":["listing_id"],"optional_params":["max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"OfferUp listing id — the uuid in the listing URL (https://offerup.com/item/detail/ca6fcc12-… → ca6fcc12-…). A full listing URL is also accepted. Every `search` row returns it as `listing_id`.","on_invalid":"reject","example":"ca6fcc12-1849-3bac-a671-593efc5c9c01","aliases":["id","item_id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry on a fresh exit (1-6, default 3 — leave unchanged for typical use).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"listing{listing_id, internal_id, title, original_title, description, price (number), price_display, original_price, currency=USD, is_firm_price, quantity, sku, condition ('NEW' …), condition_code (OfferUp's own 0-100 integer, passed through untranslated), state, is_removed, is_local (OfferUp's raw flag — NOT local pickup: false on every pickup-only listing measured; see shipping.local_pickup), is_merchant_item, posted_at, updated_at (OfferUp's last-edited time; null when it recorded no edit), location{name, latitude, longitude}, category{id, name, l1_id, l1_name, l2_id, l2_name, l3_id, l3_name}, images[]{id,url,width,height}, image, shipping{local_pickup, shipping_available, can_ship_to_buyer, buy_it_now, seller_pays_shipping, shipping_price, shipping_price_display}, seller{id, name, url, rating (OfferUp's average star rating, e.g. 4.5; null when the seller has no ratings yet), review_count (number of ratings; 0 when unrated), rating_scale (5 when rated), rating_attributes[]{label, count} (what buyers ticked: Friendly, On time, Communicative, Reliable, Item as described), items_sold, items_purchased, response_time, joined_at, location_name, is_business, is_premium, is_auto_dealer, is_verified, is_inactive, badges[] (labels only — no phone number or address), avatar}, vehicle{make, model, miles, color, body, fuel_type, transmission, title_status, mpg_city, mpg_highway, engine_cylinders, drive_train} (null when the listing is not a vehicle), rating (null — OfferUp has no product reviews), review_count (null), rating_scale (null), url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"617edbe7-77f8-3284-a7da-d33032d49da0"}}]},{"name":"okazii","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Okazii.ro Romania marketplace","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/okazii/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Romanian public marketplace by keyword, keeping general results.","required_params":["query"],"optional_params":["page"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword text, 1–200 characters. Alias q is accepted.","on_invalid":"reject","example":"iphone","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"One-based source result page, 1–100. Page size varies; exhaustive coverage is not promised.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"listings with numeric listing_id, source search title, canonical URL, current item amount/currency/display and thumbnail; source total, page, last_page and has_more. Search titles may differ from seller-written detail titles.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","page":1}},{"name":"detail","description":"Resolve a current search listing_id to its meaningful public listing detail.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Numeric source listing ID returned by search, 1–12 digits.","on_invalid":"reject","example":"219844423"}],"returns":"Source ID and URL, seller-written title, current visible price and source price disagreement flag, full description, images, public seller identity/type/rating, condition, source stock/availability, attributes and categories. GTIN optional/null; delivery/checkout totals, promotions, bid history and advanced filters are unqualified.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"219844423"}}]},{"name":"okidoki","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"okidoki.ee — Estonia classifieds","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/okidoki/v1","spec_available":true,"actions":[{"name":"search","description":"Search okidoki.ee adverts by text, category, seller, price, condition, seller type and location. One page of advert cards with price, photo, seller type and the date the site shows, plus the site's own total.","required_params":[],"optional_params":["query","category","seller_id","page","per_page","sort","condition","seller_type","min_price","max_price","location","negotiable","with_video","urgent","deposit"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search, as typed into okidoki's search box (Estonian or Russian). One of query / category / seller_id is required.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"category","type":"integer","required":false,"description":"One numeric category_id from the `categories` action (e.g. 1403 = mobile phones, 1601 = cars, 1505 = flats). Combines with query.","on_invalid":"reject","example":1403,"aliases":["category_id"]},{"name":"seller_id","type":"string","required":false,"description":"A seller's id (`seller.id` from `listing`): lists that seller's adverts. Combine with seller_type=company to check whether the seller is a business.","on_invalid":"reject","aliases":["user"]},{"name":"page","type":"integer","required":false,"description":"Page number. The site stops at page 100 and at a total of 5 000; a page past the end returns 0 rows with page_clamped=true.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"per_page","type":"enum","required":false,"description":"Rows per page — only the sizes the site offers.","on_invalid":"reject","allowed_values":[{"value":"25","label":"25"},{"value":"50","label":"50"},{"value":"100","label":"100"},{"value":"200","label":"200"}],"default":"50","aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Ordering. Default newest (by the date the site shows).","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"newest"},{"name":"condition","type":"enum","required":false,"description":"Item condition as the seller declared it. Adverts with no declared condition are excluded by either value.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New (Uus)"},{"value":"used","label":"Used (Kasutatud)"}]},{"name":"seller_type","type":"enum","required":false,"description":"Private persons or businesses.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All sellers"},{"value":"private","label":"Private (Eraisikud)"},{"value":"company","label":"Businesses (Ettevõtted)"}],"default":"all"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR (the site's own price filter).","on_invalid":"reject","minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR (the site's own price filter).","on_invalid":"reject","minimum":0,"aliases":["price_max"]},{"name":"location","type":"string","required":false,"description":"One location token from the `locations` action: r<id> county, m<id> municipality, p<id> place (r1 = Harjumaa, m1 = Tallinn, p532 = Pärnu). One level only.","on_invalid":"reject","example":"m1","value_pattern":"[rmp]\\d{1,7}"},{"name":"negotiable","type":"boolean","required":false,"description":"Only adverts where the seller accepts price offers.","on_invalid":"reject"},{"name":"with_video","type":"boolean","required":false,"description":"Only adverts with a video.","on_invalid":"reject"},{"name":"urgent","type":"boolean","required":false,"description":"Only adverts marked urgent.","on_invalid":"reject"},{"name":"deposit","type":"boolean","required":false,"description":"Only adverts that can be bought through okidoki's deposit (escrow) checkout.","on_invalid":"reject"}],"returns":"{total, total_capped, page, per_page, last_page, has_more, page_clamped, applied, rows:[{id, url, title, price, price_min, price_max, price_type, price_period, is_free, currency, price_text, price_per_m2, image, photo_count, seller_type, company_name, identity_verified, data_verified, labels, shown_date, shown_date_text}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","category":1403}},{"name":"listing","description":"One okidoki advert in full: title, category path, price (fixed / from / up to / range, period), condition, all attributes (car, flat and job parameters included), location, description, every photo, view counts, the date the site shows, and the seller block.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"integer","required":true,"description":"The advert id (`id` in search rows, the number at the end of an okidoki /item/ URL).","on_invalid":"reject","example":14143313,"aliases":["item_id","listing_id"]}],"returns":"{listing:{id, url, title, category_path, category_id, price…, itemprop_price, price_mismatch, price_per_m2, negotiable, deposit_purchase, condition, location, address, description, featured, attributes:[{section,name,value}], shown_date, views_total, views_today, photos, seller:{id, name, avatar, identity_verified, data_verified, member_since, feedback_score_pct, listing_count, listings_url}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":14143313}},{"name":"categories","description":"okidoki's full category tree (about 660 nodes) with the site's live advert count per category. Use category_id in search.","required_params":[],"optional_params":["parent"],"params":[{"name":"parent","type":"integer","required":false,"description":"Only this category and everything under it (category_id). Omit for the whole tree.","on_invalid":"reject","example":16}],"returns":"{count, categories:[{category_id, node_id, name, path, parent_category_id, depth, listing_count, url, has_children}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"parent":16}},{"name":"locations","description":"Resolve an Estonian place name to okidoki location tokens (county / municipality / place) for search's `location` filter.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"At least 2 letters of a place name.","on_invalid":"reject","example":"tartu","aliases":["q"]}],"returns":"{locations:[{location, level, name, parents}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"tartu"}},{"name":"suggest","description":"okidoki's own search autocomplete: popular queries for what was typed, some scoped to a category.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"At least 2 characters.","on_invalid":"reject","example":"iphone","aliases":["q"]}],"returns":"{suggestions:[{query, category_name, category_id, is_category}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}}]},{"name":"olx","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"OLX API scraper — search OLX classifieds across 8 countries (Brazil, Poland, Ukraine, Romania, Portugal, Bulgaria, Kazakhstan, Uzbekistan): listings, offer detail, prices, photos, categories, filters, seller profiles & inventory, related offers, result counts and a GEO location resolver. Brazil adds state/region scoping and a private-vs-professional seller filter. No account needed; public logged-out data only.","version":"0.3.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/olx/v1","spec_available":true,"actions":[{"name":"search","description":"Search OLX classifieds by keyword and/or category with sort, condition, price, delivery and location filters. Offset pagination (limit=40). Promoted ads filtered out.","required_params":[],"optional_params":["query","country","category_id","sort_by","condition","with_photos","courier","region_id","city_id","district_id","price_from","price_to","filters","offset","limit","state","region","category","page","seller_type"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword search. (search needs query OR category_id.)","on_invalid":"reject","example":"iphone 13"},{"name":"category_id","type":"integer","required":false,"description":"OLX numeric category id (discover via the categories / breadcrumbs actions). (search needs query OR category_id.)","on_invalid":"reject","example":99},{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"},{"name":"sort_by","type":"enum","required":false,"description":"Result ordering. Common keys shown; other OLX sort keys are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance (default)"},{"value":"created_at:desc","label":"Newest first"},{"value":"filter_float_price:asc","label":"Price: low to high"},{"value":"filter_float_price:desc","label":"Price: high to low"}],"example":"filter_float_price:asc"},{"name":"condition","type":"enum","required":false,"description":"Item condition filter.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"Brand new"},{"value":"used","label":"Used"}],"example":"used"},{"name":"with_photos","type":"boolean","required":false,"description":"Only return listings that have at least one photo.","on_invalid":"ignore","example":true},{"name":"courier","type":"boolean","required":false,"description":"Only return listings that offer OLX delivery (courier shipping).","on_invalid":"ignore","example":true},{"name":"region_id","type":"integer","required":false,"description":"Location filter: OLX numeric region id (discover via the filters action).","on_invalid":"ignore"},{"name":"city_id","type":"integer","required":false,"description":"Location filter: OLX numeric city id (discover via the filters action).","on_invalid":"ignore"},{"name":"district_id","type":"integer","required":false,"description":"Location filter: OLX numeric district id (discover via the filters action).","on_invalid":"ignore"},{"name":"price_from","type":"number","required":false,"description":"Minimum price filter (in the marketplace's local currency).","on_invalid":"ignore","example":100},{"name":"price_to","type":"number","required":false,"description":"Maximum price filter (in the marketplace's local currency).","on_invalid":"ignore","example":500},{"name":"filters","type":"object","required":false,"description":"Advanced escape hatch: extra raw OLX filter params as a key->value map (e.g. {\"filter_enum_state[0]\": \"used\"}); keys come from the filters action. Most users won't need this — use condition / with_photos / courier instead.","on_invalid":"ignore","example":{"filter_enum_phonemodel[0]":"iphone-13"}},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N results). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-50, default 40). Larger values are clamped to 50.","on_invalid":"ignore","default":40,"example":40,"minimum":1,"maximum":50},{"name":"state","type":"string","required":false,"description":"Brazil only: 2-letter state (UF) to scope the search, e.g. 'sp', 'rj', 'mg'. All 27 are listed by the locations action. Omit for the whole country.","on_invalid":"ignore","example":"sp"},{"name":"region","type":"string","required":false,"description":"Brazil only: sub-region slug inside a state (requires state). Slugs come from the locations action or from a listing URL.","on_invalid":"ignore","example":"sao-paulo-e-regiao"},{"name":"category","type":"string","required":false,"description":"Brazil only: category slug, e.g. 'celulares', 'imoveis', 'autos-e-pecas'. Slugs come from the categories action. Also required before the condition filter has any effect.","on_invalid":"ignore","example":"celulares"},{"name":"page","type":"integer","required":false,"description":"Brazil only: 1-based result page (50 listings per page). `offset` is also accepted and converted.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"seller_type","type":"enum","required":false,"description":"Brazil only: restrict to private or professional advertisers.","on_invalid":"ignore","allowed_values":[{"value":"private","label":"Private individuals only (Particular)"},{"value":"professional","label":"Professional sellers/dealers only (Profissional)"}],"example":"professional"}],"returns":"offers[] (normalized, promoted slots filtered), search_id, total, has_more, next_offset. Brazil returns offers[] + total + page/page_size/has_more/next_page + sort_applied + ad_slots_dropped.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone","country":"pl"}},{"name":"count","description":"Lightweight result count for a query/category/filter combination — total matching listings without fetching the offers. Useful for market sizing.","required_params":[],"optional_params":["query","country","category_id","condition","region_id","city_id","district_id","price_from","price_to","filters","state","region","category","seller_type"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword search. (search needs query OR category_id.)","on_invalid":"reject","example":"iphone 13"},{"name":"category_id","type":"integer","required":false,"description":"OLX numeric category id (discover via the categories / breadcrumbs actions). (search needs query OR category_id.)","on_invalid":"reject","example":99},{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"},{"name":"condition","type":"enum","required":false,"description":"Item condition filter.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"Brand new"},{"value":"used","label":"Used"}],"example":"used"},{"name":"region_id","type":"integer","required":false,"description":"Location filter: OLX numeric region id (discover via the filters action).","on_invalid":"ignore"},{"name":"city_id","type":"integer","required":false,"description":"Location filter: OLX numeric city id (discover via the filters action).","on_invalid":"ignore"},{"name":"district_id","type":"integer","required":false,"description":"Location filter: OLX numeric district id (discover via the filters action).","on_invalid":"ignore"},{"name":"price_from","type":"number","required":false,"description":"Minimum price filter (in the marketplace's local currency).","on_invalid":"ignore","example":100},{"name":"price_to","type":"number","required":false,"description":"Maximum price filter (in the marketplace's local currency).","on_invalid":"ignore","example":500},{"name":"filters","type":"object","required":false,"description":"Advanced escape hatch: extra raw OLX filter params as a key->value map (e.g. {\"filter_enum_state[0]\": \"used\"}); keys come from the filters action. Most users won't need this — use condition / with_photos / courier instead.","on_invalid":"ignore","example":{"filter_enum_phonemodel[0]":"iphone-13"}},{"name":"state","type":"string","required":false,"description":"Brazil only: 2-letter state (UF) to scope the search, e.g. 'sp', 'rj', 'mg'. All 27 are listed by the locations action. Omit for the whole country.","on_invalid":"ignore","example":"sp"},{"name":"region","type":"string","required":false,"description":"Brazil only: sub-region slug inside a state (requires state). Slugs come from the locations action or from a listing URL.","on_invalid":"ignore","example":"sao-paulo-e-regiao"},{"name":"category","type":"string","required":false,"description":"Brazil only: category slug, e.g. 'celulares', 'imoveis', 'autos-e-pecas'. Slugs come from the categories action. Also required before the condition filter has any effect.","on_invalid":"ignore","example":"celulares"},{"name":"seller_type","type":"enum","required":false,"description":"Brazil only: restrict to private or professional advertisers.","on_invalid":"ignore","allowed_values":[{"value":"private","label":"Private individuals only (Particular)"},{"value":"professional","label":"Professional sellers/dealers only (Profissional)"}],"example":"professional"}],"returns":"total_count, visible_total_count (OLX caps deep results at 1000). Brazil returns count (its own totalOfAds) — note that on Brazil this costs a full listing fetch upstream, there is no count-only endpoint.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone","country":"pl"}},{"name":"locations","description":"GEO resolver: turn a place name into OLX region/city/district ids for the location filters. No params -> all regions; region_id -> its cities; city_id -> city detail + districts; query -> match a city by name across regions.","required_params":[],"optional_params":["country","query","region_id","city_id","state"],"params":[{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"},{"name":"query","type":"string","required":false,"description":"Place name to look up (city/region). Optional — omit to list all regions for the country.","on_invalid":"reject","example":"Warszawa"},{"name":"region_id","type":"integer","required":false,"description":"List the cities inside this region id (region ids come from the same locations action with no params).","on_invalid":"ignore","example":2},{"name":"city_id","type":"integer","required":false,"description":"Look up this city's detail + districts (city ids come from a region's city list).","on_invalid":"ignore","example":17871},{"name":"state","type":"string","required":false,"description":"Brazil only: 2-letter state (UF) to scope the search, e.g. 'sp', 'rj', 'mg'. All 27 are listed by the locations action. Omit for the whole country.","on_invalid":"ignore","example":"sp"}],"returns":"level (regions|cities|city|matches), regions[]/cities[]/districts[]/matches[] with id, name, lat/lon, has_districts. Brazil: no params -> all 27 states (uf, name, slug); state=<uf> -> sub-region slugs observed in that state's own listing URLs (a sample, not a complete directory — Brazil publishes no sub-region index).","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"pl"}},{"name":"offer","description":"Offer detail by numeric id (no trailing slash on upstream path).","required_params":["id"],"optional_params":["country"],"params":[{"name":"id","type":"integer","required":true,"description":"OLX offer numeric id (the digits in an offer URL / a search result's id).","on_invalid":"reject","example":1027143072},{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"}],"returns":"offer{} — full normalized offer (price, condition, photos, location, seller, params)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":1027143072,"country":"pl"}},{"name":"categories","description":"Category facets + filter suggestions from search metadata, plus global filter definitions.","required_params":[],"optional_params":["query","country","category_id","category","state"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword search. (search needs query OR category_id.)","on_invalid":"reject","example":"iphone 13"},{"name":"category_id","type":"integer","required":false,"description":"OLX numeric category id (discover via the categories / breadcrumbs actions). (search needs query OR category_id.)","on_invalid":"reject","example":99},{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"},{"name":"category","type":"string","required":false,"description":"Brazil only: category slug, e.g. 'celulares', 'imoveis', 'autos-e-pecas'. Slugs come from the categories action. Also required before the condition filter has any effect.","on_invalid":"ignore","example":"celulares"},{"name":"state","type":"string","required":false,"description":"Brazil only: 2-letter state (UF) to scope the search, e.g. 'sp', 'rj', 'mg'. All 27 are listed by the locations action. Omit for the whole country.","on_invalid":"ignore","example":"sp"}],"returns":"facets, filter_suggestions, filter_definitions, total_count, visible_total_count. Brazil returns categories[] — the site's full public taxonomy with id, label, parent_id and the slug the category param takes.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"pl","category_id":99}},{"name":"user_offers","description":"Active offers for a seller user_id with offset pagination.","required_params":["user_id"],"optional_params":["country","offset","limit"],"params":[{"name":"user_id","type":"integer","required":true,"description":"OLX seller numeric id (an offer's seller_id / search result user.id).","on_invalid":"reject","example":904511},{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (skip N results). Page forward with meta.next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-50, default 40). Larger values are clamped to 50.","on_invalid":"ignore","default":40,"example":40,"minimum":1,"maximum":50}],"returns":"offers[] (this seller's active listings), total, has_more, next_offset","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"user_id":904511}},{"name":"suggested","description":"Related/suggested offers for a given offer id.","required_params":["id"],"optional_params":["country"],"params":[{"name":"id","type":"integer","required":true,"description":"OLX offer numeric id (the digits in an offer URL / a search result's id).","on_invalid":"reject","example":1027143072},{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"}],"returns":"offers[] related to the source offer, source_id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":1027143072}},{"name":"breadcrumbs","description":"Category or offer breadcrumb trail.","required_params":[],"optional_params":["country","category_id","id"],"params":[{"name":"category_id","type":"integer","required":false,"description":"OLX numeric category id (discover via the categories / breadcrumbs actions). (search needs query OR category_id.)","on_invalid":"reject","example":99},{"name":"id","type":"integer","required":false,"description":"OLX offer numeric id (alternative to category_id for breadcrumbs).","on_invalid":"reject","example":1027143072},{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"}],"returns":"breadcrumbs[] — the category/offer hierarchy trail","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":99}},{"name":"user","description":"Public seller profile.","required_params":["user_id"],"optional_params":["country","id"],"params":[{"name":"user_id","type":"integer","required":true,"description":"OLX seller numeric id (an offer's seller_id / search result user.id).","on_invalid":"reject","example":904511},{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"}],"returns":"user{} — the public, logged-out seller profile. Brazil returns name, profile_slug/profile_url, member_since, rating_score, chat_response_time, online/last_activity, verification flags and location. 🔴 On Brazil the id is a LISTING id, not a seller id (the platform keys this surface on the ad) — pass the id of any live listing by that seller. Brazil does not publish the seller's phone number to logged-out visitors.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"user_id":904511}},{"name":"filters","description":"Global filter attribute definitions keyed by filter_enum/filter_float names.","required_params":[],"optional_params":["country","category","state","query"],"params":[{"name":"country","type":"enum","required":false,"description":"OLX country edition — each is a fully separate marketplace. Brazil (br) is a different platform generation: it takes state/region/category/page instead of region_id/city_id/category_id/offset, its `user` action is keyed on a listing id rather than a seller id, and it does not serve user_offers, suggested or breadcrumbs. in/tr are not supported.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"Poland (olx.pl)"},{"value":"ua","label":"Ukraine (olx.ua)"},{"value":"bg","label":"Bulgaria (olx.bg)"},{"value":"ro","label":"Romania (olx.ro)"},{"value":"pt","label":"Portugal (olx.pt)"},{"value":"kz","label":"Kazakhstan (olx.kz)"},{"value":"uz","label":"Uzbekistan (olx.uz)"},{"value":"br","label":"Brazil (olx.com.br)"}],"default":"pl","example":"pl"},{"name":"category","type":"string","required":false,"description":"Brazil only: category slug, e.g. 'celulares', 'imoveis', 'autos-e-pecas'. Slugs come from the categories action. Also required before the condition filter has any effect.","on_invalid":"ignore","example":"celulares"},{"name":"state","type":"string","required":false,"description":"Brazil only: 2-letter state (UF) to scope the search, e.g. 'sp', 'rj', 'mg'. All 27 are listed by the locations action. Omit for the whole country.","on_invalid":"ignore","example":"sp"},{"name":"query","type":"string","required":false,"description":"Free-text keyword search. (search needs query OR category_id.)","on_invalid":"reject","example":"iphone 13"}],"returns":"filters{} — global filter attribute definitions (enum/float keys). Brazil returns filters[] — the filter components the site itself renders for that category, each with its real query-string key(s) and values.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"pl"}}]},{"name":"olx-pk","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"OLX Pakistan API - search olx.com.pk classifieds (cars, mobiles, property, bikes …) in PKR","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/olx-pk/v1","spec_available":true,"actions":[{"name":"search","description":"Search live OLX Pakistan listings by keyword, category, city or area, price range in PKR and sort. Cars and bikes add make, model, year, kilometres, fuel, transmission and assembly; any category filter (body type, colour, PTA approval, bedrooms …) goes in `filters`. Each row: listing id, title, price, location down to the area, dates, attributes, seller name and verification, cover image and the listing URL, with the true total.","required_params":[],"optional_params":["query","category","location","price_min","price_max","make","model","year_min","year_max","km_min","km_max","fuel","transmission","assembly","condition","filters","sort","page","limit","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keywords, matched like the site's search box (all words must appear).","on_invalid":"reject","example":"Toyota Corolla","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Category from `categories`: its external_id (84 = Cars, 1453 = Mobile Phones, 5 = Vehicles), the site's URL form (cars_c84), a unique slug (cars) or a slug path (vehicles/spare-parts). A parent category includes all its children.","on_invalid":"reject","example":"84"},{"name":"location","type":"string","required":false,"description":"Province, city or area: a name (Lahore, Karachi, `DHA Defence, Karachi`), a location_id from `locations` (4060695 = Karachi) or the site's slug (karachi_g4060695). The resolved place is echoed in filters_applied.location.","on_invalid":"reject","example":"Lahore","aliases":["city"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price, PKR.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price, PKR.","on_invalid":"reject","minimum":0},{"name":"make","type":"string","required":false,"description":"Brand by name (Toyota, Honda, Suzuki, Apple, Samsung) or the site's code; needs category. Choices: category_fields.","on_invalid":"reject","example":"Toyota"},{"name":"model","type":"string","required":false,"description":"Model by name (Corolla GLI, Civic, 15 Pro Max) or code; needs make.","on_invalid":"reject","example":"Corolla GLI"},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"km_min","type":"integer","required":false,"description":"Fewest kilometres driven.","on_invalid":"reject","minimum":0},{"name":"km_max","type":"integer","required":false,"description":"Most kilometres driven.","on_invalid":"reject","minimum":0},{"name":"fuel","type":"enum","required":false,"description":"Fuel (cars).","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol"},{"value":"diesel","label":"Diesel"},{"value":"lpg","label":"LPG"},{"value":"cng","label":"CNG"},{"value":"hybrid","label":"Hybrid"},{"value":"electric","label":"Electric"},{"value":"reev","label":"REEV"},{"value":"phev","label":"PHEV"}]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox (cars).","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"}]},{"name":"assembly","type":"enum","required":false,"description":"Locally assembled or imported (cars).","on_invalid":"reject","allowed_values":[{"value":"local","label":"Local"},{"value":"imported","label":"Imported"}]},{"name":"condition","type":"enum","required":false,"description":"New or used, as the seller declared it.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used","label":"Used"}]},{"name":"filters","type":"object","required":false,"description":"Any other filter of the category, by the category's own vocabulary (category_fields lists them): {attribute: value}. A value is the published label or the site's code; a list means any of them; ranges take {min, max} or <attribute>_min / <attribute>_max. Needs category.","on_invalid":"reject","example":{"body_type":"SUV","registration_city":"Lahore"}},{"name":"sort","type":"enum","required":false,"description":"Order. relevance (default with a query), newest (default without), oldest, price_asc, price_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match for the query (default when query is given)"},{"value":"newest","label":"Newest first (default without a query)"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Lowest price first (call-for-price ads left out, as on the site)"},{"value":"price_desc","label":"Highest price first (call-for-price ads left out, as on the site)"}]},{"name":"page","type":"integer","required":false,"description":"Page, from 1.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100). page × limit stops at 10 000, the site's own limit.","on_invalid":"reject","default":25,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"Attempts on a fresh datacentre exit when the search service stumbles (1-5).","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, url, price (PKR, null when not published or call for price), currency, price_type (fixed|call_for_price), purpose, category[]{external_id, slug, name}, category_name, location{province, city, area, sub_area, location_id, path[], lat, lng}, listed_at, refreshed_at (last bump), updated_at, condition (new|used), make, model, year, mileage_km, fuel, transmission, image, image_count, video_count, attributes[]{key, name, value, raw}, seller{name, user_id, is_verified, shows_phone, allows_chat}, is_featured, promotions[], deliverable, description}, count, total_results, page, limit, total_pages, has_more, reachable_results, currency, filters_applied","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Toyota Corolla","category":"84","limit":5}},{"name":"listing","description":"One OLX Pakistan listing in full by its id or URL: title, price in PKR, the whole description, every attribute (make, model, year, km, fuel, PTA status …), all images, location down to the area with coordinates, posting and refresh dates, and a seller summary (name, member since, verified, phone when the seller made it visible, active listings).","required_params":[],"optional_params":["listing_id","url","include_seller","max_rotations"],"params":[{"name":"listing_id","type":"string","required":false,"description":"The number after iid- in the listing URL (search rows carry it).","on_invalid":"reject","example":"1120152899","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"An olx.com.pk listing URL.","on_invalid":"reject","example":"https://www.olx.com.pk/item/honda-civic-vti-1998-iid-1120152899"},{"name":"include_seller","type":"boolean","required":false,"description":"Add the seller's profile (member since, visible phone; one extra request) and active listing count. false = only what the listing carries.","on_invalid":"reject","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Attempts on a fresh datacentre exit when the search service stumbles (1-5).","on_invalid":"reject","default":3,"minimum":1,"maximum":5}],"returns":"listing{every search field, images[]{photo_id, url, thumbnail}, seller{name, user_id, is_verified, shows_phone, allows_chat, member_since, phone (only when visible), phone_visible, active_listings, profile_url}, seller_status (ok|not_requested|unavailable)}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.olx.com.pk/item/honda-civic-vti-1998-iid-1120152899"}},{"name":"categories","description":"The OLX Pakistan category tree with live listing counts: Mobiles, Vehicles (cars, motorcycles, spare parts …), Property for sale and rent, Electronics, Bikes, Jobs, Animals, Furniture, Fashion and more, down to sub-category. Each node carries the external_id to pass as category to search.","required_params":[],"optional_params":["category","depth"],"params":[{"name":"category","type":"string","required":false,"description":"Optional: only this category's subtree (external_id, slug or slug path).","on_invalid":"reject","example":"5"},{"name":"depth","type":"integer","required":false,"description":"Levels of children to include (default: all).","on_invalid":"reject","minimum":0,"maximum":5}],"returns":"categories[]{external_id, slug, name, level, purpose, active_count, url, children[]}, count, total_nodes","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"depth":1}},{"name":"category_fields","description":"The filters a category offers on OLX Pakistan, with every published choice: for Cars make (64 brands), model per make, year, kilometres, fuel, transmission, body type, colour, registration city, assembly …; for Mobile Phones brand, model, PTA approval, condition. Pass make to get its models.","required_params":["category"],"optional_params":["category","make"],"params":[{"name":"category","type":"string","required":true,"description":"Category external_id or slug (84 = Cars, 1453 = Mobile Phones).","on_invalid":"reject","example":"84"},{"name":"make","type":"string","required":false,"description":"A make (name or code) to list its models.","on_invalid":"reject","example":"Toyota"}],"returns":"category{external_id, name}, fields[]{attribute, name, value_type, filter_type (range|single_choice|multiple_choice), filterable, min, max, choices[]{value, label}}, make, models[]{value, label}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"84"}},{"name":"locations","description":"OLX Pakistan places and their ids: provinces, the 231 cities, their areas and sub-areas, with live listing counts and coordinates. List a place's children, or find a place by name.","required_params":[],"optional_params":["parent","query","level","limit"],"params":[{"name":"parent","type":"string","required":false,"description":"List the places inside this one (a name or location_id). Without parent and query: the provinces.","on_invalid":"reject","example":"Lahore"},{"name":"query","type":"string","required":false,"description":"Find places by name (inside parent when given).","on_invalid":"reject","example":"DHA","aliases":["q"]},{"name":"level","type":"enum","required":false,"description":"Only places of this level (e.g. city with no parent = all 231 cities).","on_invalid":"reject","allowed_values":[{"value":"province","label":"Province"},{"value":"city","label":"City"},{"value":"area","label":"Area"},{"value":"sub_area","label":"Sub-area"}]},{"name":"limit","type":"integer","required":false,"description":"Most places returned (1-500), busiest first.","on_invalid":"reject","default":100,"minimum":1,"maximum":500}],"returns":"locations[]{location_id, name, slug, level, level_name, path[], parent_id, has_children, active_ads, lat, lng, url}, count, total_results, parent","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"level":"city","limit":10}}]},{"name":"oneroof","category":{"id":"real-estate","title":"Real Estate"},"title":"OneRoof API scraper (New Zealand) - homes for sale and for rent, recent sales, property value estimates with sale and valuation history, and suburb median price, median rent and rental yield. Prices in NZD. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/oneroof/v1","spec_available":true,"actions":[{"name":"search","description":"New Zealand homes on OneRoof for sale, for rent or recently sold, by region, district or suburb(s): listing URL, address, coordinates, price or how it is being sold (asking price, negotiation, auction, tender, deadline sale, enquiries over) or weekly rent, bedrooms, bathrooms, parking, floor and land area, property type, photos, the listing agents with phone numbers and the agency, open homes, the site's value estimate and the council rating valuation. Sold returns sale price, date and method. Filter by property type, bedrooms, bathrooms, price and keyword; sort by newest or price.","required_params":[],"optional_params":["purpose","region","district_id","suburb_id","location","include_surrounding_suburbs","property_type","bedrooms_min","bedrooms_max","bathrooms_min","bathrooms_max","price_min","price_max","keyword","sort","page","limit","max_rotations"],"params":[{"name":"purpose","type":"enum","required":false,"description":"For sale (default), for rent, or recently sold.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"For rent (weekly rent)"},{"value":"sold","label":"Recently sold (sale price and date)"}],"default":"sale"},{"name":"region","type":"enum","required":false,"description":"Region. district_id / suburb_id / location narrow it further.","on_invalid":"reject","allowed_values":[{"value":"northland","label":"Northland"},{"value":"auckland","label":"Auckland"},{"value":"waikato","label":"Waikato"},{"value":"bay_of_plenty","label":"Bay of Plenty"},{"value":"gisborne","label":"Gisborne"},{"value":"hawkes_bay","label":"Hawke's Bay"},{"value":"taranaki","label":"Taranaki"},{"value":"wellington","label":"Wellington"},{"value":"nelson_bays","label":"Nelson & Bays"},{"value":"west_coast","label":"West Coast"},{"value":"canterbury","label":"Canterbury"},{"value":"otago","label":"Otago"},{"value":"southland","label":"Southland"},{"value":"coromandel","label":"Coromandel"},{"value":"central_otago_lakes","label":"Central Otago / Lakes District"},{"value":"marlborough","label":"Marlborough"},{"value":"wairarapa","label":"Wairarapa"},{"value":"pacific_islands","label":"Pacific Islands"},{"value":"central_north_island","label":"Central North Island"},{"value":"manawatu_whanganui","label":"Manawatu / Whanganui"}],"example":"auckland"},{"name":"district_id","type":"array","required":false,"description":"One or more OneRoof district ids (225 = Auckland City). `suggest` returns them.","on_invalid":"reject","example":"225"},{"name":"suburb_id","type":"array","required":false,"description":"One or more OneRoof suburb ids (3236 = Ponsonby). `suggest` returns them.","on_invalid":"reject","example":"3236,1454"},{"name":"location","type":"string","required":false,"description":"A region, district or suburb by name; resolved to the site's own id (first match, returned in resolved_location). Use suburb_id for several suburbs.","on_invalid":"reject","example":"Ponsonby","aliases":["suburb","district","where"]},{"name":"include_surrounding_suburbs","type":"boolean","required":false,"description":"Also return listings in the suburbs around the chosen suburb(s), as the site does.","on_invalid":"reject","default":false},{"name":"property_type","type":"array","required":false,"description":"One or more property types. home_and_income, lifestyle_section and section exist for sale/sold only; holiday_rental for rent only.","on_invalid":"reject","allowed_values":[{"value":"house","label":"House"},{"value":"apartment","label":"Apartment"},{"value":"studio","label":"Studio"},{"value":"townhouse","label":"Townhouse"},{"value":"unit","label":"Unit"},{"value":"home_and_income","label":"Home and income"},{"value":"lifestyle_property","label":"Lifestyle property"},{"value":"lifestyle_section","label":"Lifestyle section"},{"value":"section","label":"Section"},{"value":"holiday_rental","label":"Holiday rental"}],"example":"house,townhouse"},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms (5 = 5 or more).","on_invalid":"reject","example":3,"minimum":0,"maximum":5},{"name":"bedrooms_max","type":"integer","required":false,"description":"Most bedrooms (5 = no upper limit).","on_invalid":"reject","minimum":1,"maximum":5},{"name":"bathrooms_min","type":"integer","required":false,"description":"Fewest bathrooms (5 = 5 or more).","on_invalid":"reject","minimum":0,"maximum":5},{"name":"bathrooms_max","type":"integer","required":false,"description":"Most bathrooms.","on_invalid":"reject","minimum":1,"maximum":5},{"name":"price_min","type":"number","required":false,"description":"Lowest price, NZD (rent: per week; sold: sale price). Listings without a shown price are matched on the price the agent gave the site.","on_invalid":"reject","example":600000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, NZD (rent: per week; sold: sale price).","on_invalid":"reject","example":1000000,"minimum":0},{"name":"keyword","type":"string","required":false,"description":"Words in the listing (title and description), as the site's keyword box.","on_invalid":"reject","example":"pool","aliases":["query","q"]},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"The site's default order (featured listings first)"},{"value":"newest","label":"Latest listed first (sold: most recent sale first)"},{"value":"price_desc","label":"Highest price first (the site orders by its search price)"},{"value":"price_asc","label":"Lowest price first (the site orders by its search price)"},{"value":"earliest_open_home","label":"Earliest open home first (sale and rent only)"}],"default":"featured"},{"name":"page","type":"integer","required":false,"description":"","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-50).","on_invalid":"reject","default":20,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"purpose, results[]{listing_id, url, title, address, street, address_withheld, suburb, district, region, suburb_id, district_id, region_id, latitude, longitude, price (NZD number parsed from the site's text; null when none), price_qualifier (asking|from|per_week), price_display (the site's own words), currency, sale_method (asking_price|negotiation|auction|tender|deadline_sale|set_date_of_sale|enquiries_over|offers_over|buyer_enquiry_over|buyers_from|negotiable_from|price_on_application|offers|for_sale|other), sale_method_code, sale_date_display, auction_at, listing_type, property_type, bedrooms, bathrooms, parking, floor_area_m2, land_area_m2, image, images[], floor_plan_images[], agents[]{agent_id, name, phone, photo}, agency{agency_id, name, logo}, open_homes[]{start, end}, listed_date, is_new_listing, is_new_build, estimate{value, low, high, confidence, confidence_label, rateable_value, estimate_vs_rateable_value, suburb_median_sale_price_12m, suburb_average_rateable_value, suburb_sale_vs_rateable_value_percent, currency}, rateable_value, rateable_value_date, decade_built, available_date, has_video} (purpose=sold: results[]{sale_id, property_id (for `property`), url, address, street, address_withheld, suburb, district, region, suburb_id, district_id, region_id, latitude, longitude, sold_price (null when withheld), sold_date, sold_date_is_future (the agent-entered date is after today), sale_method, sale_method_display, currency, price_verified_by, property_type, bedrooms, bathrooms, parking, image, agents[], agency}), count, total_results, page, limit, has_more, resolved_location{id, level, name, label}, filters{}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"region":"auckland","limit":10}},{"name":"listing","description":"One OneRoof listing in full, for sale or for rent: everything in a search row plus the description, every photo and floor plan, the listing agents with phone, email and job title, the agency's phone, email and address, open homes, bond for rentals, the council valuation (land, improvements, capital value and date), title type, legal description, zoning and construction, the property's sale, listing and valuation history, and the suburb's median sale price, median rent and yield.","required_params":["listing_id"],"optional_params":["max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Listing id from search, or the listing URL on oneroof.co.nz.","on_invalid":"reject","example":"2549010","aliases":["id","url","listing"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, url, title, address, street, address_withheld, suburb, district, region, suburb_id, district_id, region_id, latitude, longitude, price (NZD number parsed from the site's text; null when none), price_qualifier (asking|from|per_week), price_display (the site's own words), currency, sale_method (asking_price|negotiation|auction|tender|deadline_sale|set_date_of_sale|enquiries_over|offers_over|buyer_enquiry_over|buyers_from|negotiable_from|price_on_application|offers|for_sale|other), sale_method_code, sale_date_display, auction_at, listing_type, property_type, bedrooms, bathrooms, parking, floor_area_m2, land_area_m2, image, images[], floor_plan_images[], agents[]{agent_id, name, phone, photo}, agency{agency_id, name, logo}, open_homes[]{start, end}, listed_date, is_new_listing, is_new_build, estimate{value, low, high, confidence, confidence_label, rateable_value, estimate_vs_rateable_value, suburb_median_sale_price_12m, suburb_average_rateable_value, suburb_sale_vs_rateable_value_percent, currency}, rateable_value, rateable_value_date, decade_built, available_date, has_video, description, agents[]{agent_id, name, phone, email, job_title, photo, profile_url, sold_count, recent_sold_count}, agency{agency_id, name, branch, phone, email, address, website, logo}, property_id, property_url, bond, council_valuation{land_value, improvements_value, capital_value, valuation_date, previous_valuation_date, land_value_change_percent, improvements_value_change_percent, capital_value_change_percent, currency}, property_records[]{key, label, value}, history[]{event (listed|valuation|sold|built|building_consent), date, label, value, detail, sale_type}, suburb_market{median_sale_price, median_rent_per_week, rental_yield_percent, capital_growth_percent, currency}, updated_at, listing_code}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"2549010"}},{"name":"property","description":"Any New Zealand property on OneRoof, listed or not, by property id, address or URL: the site's value estimate with low-high range and confidence, the council valuation (land, improvements, capital value and date, change since the last valuation), the last sale price and date, the full sale, listing, valuation and building-consent history, bedrooms, bathrooms, floor and land area, title, zoning and construction records, the current listing if it is on the market, and the suburb's median sale price, median weekly rent, rental yield and capital growth.","required_params":[],"optional_params":["property_id","address","url","max_rotations"],"params":[{"name":"property_id","type":"string","required":false,"description":"Property id (from suggest, sold search rows or a listing).","on_invalid":"reject","example":"1526827","aliases":["id"]},{"name":"address","type":"string","required":false,"description":"A street address; the best match is used and returned in matched_address.","on_invalid":"reject","example":"36 Spring Street, Freemans Bay"},{"name":"url","type":"string","required":false,"description":"A oneroof.co.nz property or listing URL.","on_invalid":"reject","example":"https://www.oneroof.co.nz/property/auckland/freemans-bay/36-spring-street/l7moE"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"property{property_id, url, address, street, suburb, district, region, suburb_id, district_id, region_id, latitude, longitude, property_category, bedrooms, bathrooms, parking, floor_area_m2, land_area_m2, estimate{value, low, high, confidence, confidence_label, rateable_value, …}, council_valuation{…}, last_sale{price, date, sale_type, source}, history[]{…}, property_records[]{key, label, value}, current_listing{listing_id, url, listing_type, price, price_qualifier, price_display, sale_method, listed_date}, suburb_market{…}, image, images[]}, matched_address, other_matches[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.oneroof.co.nz/property/auckland/freemans-bay/36-spring-street/l7moE"}},{"name":"suburb","description":"A New Zealand suburb's property market on OneRoof: median sale price, median weekly rent, rental yield and capital growth, with the census median age, median income, years in home and home ownership split. By suburb id or name.","required_params":[],"optional_params":["suburb_id","name","max_rotations"],"params":[{"name":"suburb_id","type":"integer","required":false,"description":"OneRoof suburb id (from suggest or search rows).","on_invalid":"reject","example":3236,"aliases":["id"]},{"name":"name","type":"string","required":false,"description":"Suburb name; the first suburb match is used.","on_invalid":"reject","example":"Ponsonby","aliases":["suburb","query"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suburb{suburb_id, name, label, district, district_id, region, region_id, url, latitude, longitude, market{median_sale_price, median_rent_per_week, rental_yield_percent, capital_growth_percent, currency}, description, demographics{median_age, median_income, average_years_in_home, ownership[]{category, percent}, age[]{category, percent}}}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"suburb_id":3236}},{"name":"suggest","description":"OneRoof's own location and address lookup: regions, districts and suburbs with their ids and live listing counts (for search), streets, and matching properties with property and listing ids (for property and listing).","required_params":["query"],"optional_params":["purpose","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Start of a place name or an address.","on_invalid":"reject","example":"ponsonby","aliases":["q","keyword"]},{"name":"purpose","type":"enum","required":false,"description":"Which listing counts and properties to match.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Listing counts for sale"},{"value":"rent","label":"Listing counts for rent"},{"value":"sold","label":"Sold properties"},{"value":"estimate","label":"Every property (estimates)"}],"default":"sale"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, locations[]{id, level (region|district|suburb), name, label, listing_count, latitude, longitude}, surrounding_suburbs[], streets[]{street_id, label, latitude, longitude}, properties[]{property_id, listing_id, address, url, latitude, longitude}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ponsonby"}}]},{"name":"onthemarket","category":{"id":"real-estate","title":"Real Estate"},"title":"OnTheMarket API scraper — UK property data: for-sale and to-rent listings with full filters (price, beds, property type, radius, keywords, added-within, sort), complete property detail (price, beds/baths, description, key features, tenure & council-tax, photos, floorplans, nearby stations & schools, area stats, agent) and location autocomplete from OnTheMarket.com — the UK's #3 property portal — no API key required","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/onthemarket/v1","spec_available":true,"actions":[{"name":"location_search","description":"Resolve a text location (town, postcode, borough, area) to OnTheMarket location slug(s). Returns multiple ranked matches; use a result's location_id in search.","required_params":["query"],"optional_params":["channel","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text place to resolve (town, city, postcode, borough, area).","on_invalid":"reject","example":"London","aliases":["location","q","search"]},{"name":"channel","type":"enum","required":false,"description":"Which market to search/resolve (default for-sale). Canonical values + the listed aliases are accepted; any other value is rejected with this list.","on_invalid":"reject","allowed_values":[{"value":"for-sale","label":"Properties for sale"},{"value":"to-rent","label":"Properties to rent"},{"value":"buy","label":"= for-sale"},{"value":"sale","label":"= for-sale"},{"value":"rent","label":"= to-rent"},{"value":"lettings","label":"= to-rent"}],"default":"for-sale","example":"for-sale"},{"name":"limit","type":"integer","required":false,"description":"Max location matches to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"matches[]{location_id, name, display_name}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"London"}},{"name":"search","description":"Search UK property listings by location (for sale / to rent) with structured filters: price, beds, property type, radius, keywords, added-within and sort. Paginate with page/max_pages (30 per page).","required_params":[],"optional_params":["location","location_id","channel","for_rent","price_min","price_max","beds_min","beds_max","property_type","radius","added_within_days","sort","keywords","retirement_only","shared_ownership_only","auction_only","new_homes_only","include_under_offer","include_sponsored","page","max_pages","filters"],"params":[{"name":"location","type":"string","required":false,"description":"Free-text location OR an OnTheMarket location slug (e.g. 'london', 'sw9', 'manchester'). Provide this OR location_id. Use location_search for the exact slug.","on_invalid":"ignore","example":"London","aliases":["query"]},{"name":"location_id","type":"string","required":false,"description":"An OnTheMarket location slug from location_search (its `location_id`/seo_id, e.g. 'notting-hill', 'bs1'). Most precise. Provide this OR location.","on_invalid":"ignore","example":"london","aliases":["seo_id","slug"]},{"name":"channel","type":"enum","required":false,"description":"Which market to search/resolve (default for-sale). Canonical values + the listed aliases are accepted; any other value is rejected with this list.","on_invalid":"reject","allowed_values":[{"value":"for-sale","label":"Properties for sale"},{"value":"to-rent","label":"Properties to rent"},{"value":"buy","label":"= for-sale"},{"value":"sale","label":"= for-sale"},{"value":"rent","label":"= to-rent"},{"value":"lettings","label":"= to-rent"}],"default":"for-sale","example":"for-sale"},{"name":"for_rent","type":"boolean","required":false,"description":"Shortcut: true selects the to-rent channel when `channel` is unset.","on_invalid":"ignore","example":false},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in GBP (sale price, or monthly rent £pcm for to-rent).","on_invalid":"ignore","example":400000,"minimum":0,"aliases":["min_price","minPrice"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in GBP (sale price, or monthly rent £pcm for to-rent).","on_invalid":"ignore","example":900000,"minimum":0,"aliases":["max_price","maxPrice"]},{"name":"beds_min","type":"integer","required":false,"description":"Minimum bedrooms (2 = 2+; 0 for studios).","on_invalid":"ignore","example":2,"minimum":0,"maximum":10,"aliases":["beds","min_bedrooms","minBedrooms"]},{"name":"beds_max","type":"integer","required":false,"description":"Maximum bedrooms.","on_invalid":"ignore","example":4,"minimum":0,"maximum":10,"aliases":["max_bedrooms","maxBedrooms"]},{"name":"property_type","type":"string","required":false,"description":"Property type(s), comma-separated. One or more of: flat, apartment, houses, detached, semi-detached, terraced, bungalow, studio, cottage, mews, park-home, land (e.g. 'detached,semi-detached'). 'house'=houses.","on_invalid":"ignore","example":"flat","aliases":["property_types","prop_types","home_type"]},{"name":"radius","type":"number","required":false,"description":"Search radius in MILES around the location (0=this area only; 0.25/0.5/1/3/5/10/15/20/30).","on_invalid":"ignore","example":1.0,"minimum":0,"maximum":30,"aliases":["radius_miles"]},{"name":"added_within_days","type":"integer","required":false,"description":"Only listings added recently; mapped to the nearest supported window (1, 3, 7 or 14 days).","on_invalid":"ignore","example":7,"minimum":1,"aliases":["max_days_since_added"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering (default = OnTheMarket's recommended order).","on_invalid":"ignore","allowed_values":[{"value":"recommended","label":"Recommended (default)"},{"value":"newest","label":"Most recent"},{"value":"price_high","label":"Price: high to low"},{"value":"price_low","label":"Price: low to high"}],"example":"newest"},{"name":"keywords","type":"string","required":false,"description":"Free-text keyword filter (e.g. 'garden', 'garage', 'parking').","on_invalid":"ignore","example":"garden"},{"name":"retirement_only","type":"boolean","required":false,"description":"Only retirement properties.","on_invalid":"ignore","example":false},{"name":"shared_ownership_only","type":"boolean","required":false,"description":"Only shared-ownership properties.","on_invalid":"ignore","example":false},{"name":"auction_only","type":"boolean","required":false,"description":"Only auction properties.","on_invalid":"ignore","example":false},{"name":"new_homes_only","type":"boolean","required":false,"description":"Only new-build homes.","on_invalid":"ignore","example":false},{"name":"include_under_offer","type":"boolean","required":false,"description":"Include Under Offer / Sold STC listings (for-sale).","on_invalid":"ignore","example":false},{"name":"include_sponsored","type":"boolean","required":false,"description":"OnTheMarket mixes paid adverts into its results grid (0-2 of every 30 rows, both channels). They are not properties — no price, address, bedrooms or listing link — so by DEFAULT they are removed and `meta.sponsored_count` reports how many were found. Set true to receive them in their real grid position, each flagged `sponsored: true`.","on_invalid":"ignore","default":false,"example":false,"aliases":["sponsored","include_ads"]},{"name":"page","type":"integer","required":false,"description":"1-based result page (30 listings per page).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"How many 30-result pages to fetch and merge, starting at `page`.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":42},{"name":"filters","type":"object","required":false,"description":"Advanced escape-hatch: extra raw OnTheMarket query params as a key->value map, merged after the typed filters above.","on_invalid":"ignore","example":{"chain-free":"true"}}],"returns":"items[]{sponsored (false for a real listing), property_id, title, price_display, price_amount?, bedrooms, property_type, address, latitude, longitude, features[], images[], details_url, agent{}}, count (PROPERTIES only — OnTheMarket mixes paid adverts into its grid and they are removed by default), channel, total_results (market total), sponsored_count (adverts found on the pages fetched), filters_applied, pages_fetched, stop_reason + meta{grid_rows, sponsored_count}. Pass include_sponsored=true to keep the adverts in their real grid position as {sponsored: true, advert_id, title, description, features[], advertiser, link_url, cover_image} rows","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"London"}},{"name":"property_detail","description":"Full property record: price (+qualifier), beds/baths, description, key features, key-info (tenure, council-tax band), images, floorplans, virtual/video tours, documents, nearby stations & schools, area stats (avg price, crime level), breadcrumbs and the listing agent.","required_params":[],"optional_params":["property_id","url"],"params":[{"name":"property_id","type":"string","required":true,"description":"OnTheMarket property id (the digits in a /details/<id>/ URL or a search result's property_id).","on_invalid":"reject","example":"19555795","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full OnTheMarket property detail URL.","on_invalid":"ignore","example":"https://www.onthemarket.com/details/19555795/"}],"returns":"listing{} — title, price_display, price_amount, price_qualifier, bedrooms, bathrooms, description, features[], key_info[], images[], floorplans[], virtual_tours[], stations[], schools[], area_stats{}, breadcrumbs[], agent{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"property_id":"19555795"}}]},{"name":"opensea","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"OpenSea API — NFT marketplace scraper: collection floor price, volume, market-cap stats, supply and socials; collection search; per-NFT item detail with traits, rarity rank, best listing/offer and last sale; paginated collection items; top holders; recent sales activity; and trending / top collection rankings from OpenSea (opensea.io) — no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/opensea/v1","spec_available":true,"actions":[{"name":"collection","description":"Full collection detail by slug: floor price, top offer, 24h + total volume, owner / listed / supply counts and 1-day floor change (live from OpenSea's GraphQL) merged with keyless metadata — description, image/banner, contracts (address + chain), category, safelist status, fees and social links (Twitter / Discord / Telegram / website).","required_params":["slug"],"optional_params":[],"params":[{"name":"slug","type":"string","required":true,"description":"OpenSea collection slug — the last path segment of an OpenSea collection URL (opensea.io/collection/<slug>), e.g. 'pudgypenguins', 'boredapeyachtclub', 'azuki'. Use the search action to resolve a name to its slug.","on_invalid":"reject","example":"pudgypenguins","aliases":["collection","collection_slug"]}],"returns":"collection{slug, name, category, floor_price{amount,symbol,usd}, top_offer, total_supply, unique_item_count, listed_count, owner_count, total_volume, one_day_volume, one_day_floor_change, description, image_url, banner_image_url, contracts[]{address,chain}, safelist_status, twitter_username, discord_url, project_url, fees, created_date, opensea_url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"pudgypenguins"}},{"name":"search","description":"Search OpenSea collections by free-text name. Returns matching collections with slug, name, image, category, floor price, owner count, supply and total volume — use the returned slug with the other actions.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Collection name or keyword to search for (e.g. 'pudgy', 'bored ape', 'azuki').","on_invalid":"reject","example":"pudgy","aliases":["q","name"]},{"name":"limit","type":"integer","required":false,"description":"Max collections to return (1-50, default 10).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"collections[]{slug, name, category, image_url, floor_price, total_supply, owner_count, total_volume, opensea_url}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"pudgy"}},{"name":"items","description":"Paginated items (NFTs) in a collection. Each item: name, token id, contract, image, rarity rank, best listing price + marketplace, best offer and last sale. Sort by price / rarity / last-sale-price / listing-date. Cursor pagination — pass the returned meta.next_cursor as `cursor` to page on.","required_params":["slug"],"optional_params":["limit","cursor","sort_by","direction"],"params":[{"name":"slug","type":"string","required":true,"description":"OpenSea collection slug — the last path segment of an OpenSea collection URL (opensea.io/collection/<slug>), e.g. 'pudgypenguins', 'boredapeyachtclub', 'azuki'. Use the search action to resolve a name to its slug.","on_invalid":"reject","example":"pudgypenguins","aliases":["collection","collection_slug"]},{"name":"limit","type":"integer","required":false,"description":"Items per page (1-100, default 30).","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor — pass meta.next_cursor from the previous page to fetch the next.","on_invalid":"ignore"},{"name":"sort_by","type":"enum","required":false,"description":"Sort items by this field.","on_invalid":"ignore","allowed_values":[{"value":"PRICE","label":"Price"},{"value":"RARITY","label":"Rarity"},{"value":"LAST_SALE_PRICE","label":"Last sale price"},{"value":"CREATED_DATE","label":"Listing date"},{"value":"BEST_OFFER","label":"Best offer"}],"default":"PRICE","example":"PRICE"},{"name":"direction","type":"enum","required":false,"description":"Sort direction (ASC = cheapest/lowest first).","on_invalid":"ignore","allowed_values":[{"value":"ASC","label":"Ascending"},{"value":"DESC","label":"Descending"}],"default":"ASC","example":"ASC"}],"returns":"items[]{id, name, token_id, contract_address, image_url, rarity_rank, best_listing{amount,symbol,usd}, listing_marketplace, best_offer, last_sale} + meta{next_cursor, has_more}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"pudgypenguins","limit":5}},{"name":"item","description":"Single NFT / item detail by collection contract + token id: name, image, all traits (trait_type + value), rarity rank, best listing (price + marketplace), best offer and last sale. Get contract_address from the collection action's contracts[] (or an items[] row); token_id is the NFT number.","required_params":["contract_address","token_id"],"optional_params":["chain"],"params":[{"name":"contract_address","type":"string","required":true,"description":"NFT contract address (0x…). From the collection's contracts[].address or an items[] row.","on_invalid":"reject","example":"0xbd3531da5cf5857e7cfaa92426877b022e612cf8","aliases":["contract","address"]},{"name":"token_id","type":"string","required":true,"description":"The token id / NFT number within the contract.","on_invalid":"reject","example":"7526","aliases":["token","id"]},{"name":"chain","type":"enum","required":false,"description":"Blockchain the item is on (default ethereum).","on_invalid":"ignore","allowed_values":[{"value":"ethereum","label":"Ethereum"},{"value":"matic","label":"Polygon"},{"value":"base","label":"Base"},{"value":"solana","label":"Solana"},{"value":"arbitrum","label":"Arbitrum"},{"value":"optimism","label":"Optimism"},{"value":"klaytn","label":"Klaytn"},{"value":"avalanche","label":"Avalanche"},{"value":"blast","label":"Blast"},{"value":"zora","label":"Zora"},{"value":"bsc","label":"BNB Chain"},{"value":"sei","label":"Sei"}],"default":"ethereum","example":"ethereum"}],"returns":"item{id, name, token_id, contract_address, image_url, animation_url, rarity_rank, collection_slug, traits[]{trait_type,value}, best_listing{amount,symbol,usd}, listing_marketplace, best_offer, last_sale, opensea_url}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"contract_address":"0xbd3531da5cf5857e7cfaa92426877b022e612cf8","token_id":"7526"}},{"name":"activity","description":"Recent on-chain activity for a collection (default: sales). Each event: type, time, price (token amount + USD) and the item (name, token id, contract). Filter by event type — sales, listings, offers, transfers or mints.","required_params":["slug"],"optional_params":["limit","event_type"],"params":[{"name":"slug","type":"string","required":true,"description":"OpenSea collection slug — the last path segment of an OpenSea collection URL (opensea.io/collection/<slug>), e.g. 'pudgypenguins', 'boredapeyachtclub', 'azuki'. Use the search action to resolve a name to its slug.","on_invalid":"reject","example":"pudgypenguins","aliases":["collection","collection_slug"]},{"name":"limit","type":"integer","required":false,"description":"Max events (1-50, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50},{"name":"event_type","type":"enum","required":false,"description":"Which activity to return (default SALE = recent sales).","on_invalid":"ignore","allowed_values":[{"value":"SALE","label":"Sales"},{"value":"LISTING","label":"Listings"},{"value":"OFFER","label":"Offers"},{"value":"TRANSFER","label":"Transfers"},{"value":"MINT","label":"Mints"}],"default":"SALE","example":"SALE","aliases":["type"]}],"returns":"activity[]{id, type, event_time, price{amount,symbol,usd}, item_name, token_id, contract_address}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"pudgypenguins","event_type":"SALE","limit":5}},{"name":"holders","description":"Top holders (owners) of a collection, ranked by quantity owned. Each holder: wallet address, display name (ENS / OpenSea username if any), quantity, % of supply and estimated total NFT portfolio value (USD). Cursor pagination.","required_params":["slug"],"optional_params":["limit","cursor"],"params":[{"name":"slug","type":"string","required":true,"description":"OpenSea collection slug — the last path segment of an OpenSea collection URL (opensea.io/collection/<slug>), e.g. 'pudgypenguins', 'boredapeyachtclub', 'azuki'. Use the search action to resolve a name to its slug.","on_invalid":"reject","example":"pudgypenguins","aliases":["collection","collection_slug"]},{"name":"limit","type":"integer","required":false,"description":"Holders per page (1-50, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor (meta.next_cursor from the previous page).","on_invalid":"ignore"}],"returns":"holders[]{address, display_name, quantity, percent, estimated_nft_value_usd} + meta{next_cursor, has_more}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"pudgypenguins","limit":5}},{"name":"trending","description":"Trending or top collections ranked over a time window — the OpenSea rankings/leaderboard. Each: rank score, slug, name, floor price, volume, owners and 1-day floor change. Choose TRENDING (momentum) or TOP (by volume), and a window (1h / 1d / 7d / 30d).","required_params":[],"optional_params":["ranking","timeframe","limit"],"params":[{"name":"ranking","type":"enum","required":false,"description":"TRENDING (momentum) or TOP (highest volume).","on_invalid":"ignore","allowed_values":[{"value":"TRENDING","label":"Trending"},{"value":"TOP","label":"Top"}],"default":"TRENDING","example":"TRENDING"},{"name":"timeframe","type":"enum","required":false,"description":"Ranking window.","on_invalid":"ignore","allowed_values":[{"value":"ONE_HOUR","label":"1 hour"},{"value":"ONE_DAY","label":"1 day"},{"value":"SEVEN_DAYS","label":"7 days"},{"value":"THIRTY_DAYS","label":"30 days"}],"default":"ONE_DAY","example":"ONE_DAY","aliases":["window"]},{"name":"limit","type":"integer","required":false,"description":"Max collections (1-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"collections[]{score, slug, name, category, image_url, floor_price, total_volume, one_day_volume, owner_count, listed_count, total_supply, one_day_floor_change, opensea_url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ranking":"TRENDING","timeframe":"ONE_DAY","limit":5}}]},{"name":"opensooq","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"OpenSooq — Middle East & North Africa classifieds: cars, property, phones, jobs","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/opensooq/v1","spec_available":true,"actions":[{"name":"search","description":"Search the classifieds of ONE OpenSooq country site (Jordan, Saudi Arabia, Kuwait, Iraq, Oman, Qatar, Bahrain, UAE, Egypt, Libya, Lebanon, Palestine, Syria, Yemen, Sudan, Morocco, Algeria, Tunisia) by free text, category and subcategory, city and neighbourhood, price range, any filter of the category's own form (car make / model / year / mileage / fuel, property rooms / area / furnishing, phone brand / storage…), seller, in OpenSooq's four sort orders. Returns the source's own total and 30 listings per page with price and currency, attribute chips, location, posting date, promotion status, photo and the seller. `country` is required; every other parameter is optional.","required_params":["country"],"optional_params":["query","category","subcategory","city_id","neighborhood_id","price_min","price_max","with_price_only","filters","seller_id","sort","page","lang"],"params":[{"name":"country","type":"enum","required":false,"description":"ONE OpenSooq country site (two-letter code). One call per country. Measured 2026-10-14 listing totals: jo 148,613 · sa 21,771 (see BUILD-LOG for every site).","on_invalid":"reject","allowed_values":[{"value":"jo","label":"Jordan — JOD"},{"value":"sa","label":"Saudi Arabia — SAR"},{"value":"kw","label":"Kuwait — KWD"},{"value":"iq","label":"Iraq — IQD"},{"value":"om","label":"Oman — OMR"},{"value":"qa","label":"Qatar — QAR"},{"value":"bh","label":"Bahrain — BHD"},{"value":"ae","label":"United Arab Emirates — AED"},{"value":"eg","label":"Egypt — EGP"},{"value":"ly","label":"Libya — LYD"},{"value":"lb","label":"Lebanon — LBP"},{"value":"ps","label":"Palestine — ILS"},{"value":"sy","label":"Syria — SYP"},{"value":"ye","label":"Yemen — YER"},{"value":"sd","label":"Sudan — SDG"},{"value":"ma","label":"Morocco — MAD"},{"value":"dz","label":"Algeria — DZD"},{"value":"tn","label":"Tunisia — TND"}],"example":"jo","aliases":["site","market"]},{"name":"query","type":"string","required":false,"description":"Free text, matched by OpenSooq's own search over titles and descriptions (Arabic or English). Measured: jo `iphone` = 5,122, sa `ايفون` = 834.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","term"]},{"name":"category","type":"string","required":false,"description":"Category slug as OpenSooq writes it in its URLs (action `categories` lists them per country): cars, property/property-for-sale, property/property-for-rent, mobile-phones-tablets, electronics-appliances, home-garden, jobs, pets… An unknown slug fails with INVALID_PARAM.","on_invalid":"reject","example":"cars"},{"name":"subcategory","type":"string","required":false,"description":"Subcategory slug under `category` (e.g. cars-for-sale under cars, mobile-phones under mobile-phones-tablets, apartments-for-sale under property/property-for-sale). Needs `category`.","on_invalid":"reject","example":"cars-for-sale"},{"name":"city_id","type":"integer","required":false,"description":"City id (action `categories` lists the country's cities with ids). Measured: jo `iphone` in Amman (59) = 3,355 of 5,122.","on_invalid":"reject","example":59,"minimum":1,"aliases":["city"]},{"name":"neighborhood_id","type":"integer","required":false,"description":"Neighbourhood id inside `city_id` (action `categories` with `city_id` lists them; every row carries its own neighborhood_id). Measured: jo phones, Amman / Al Gardens (6759) = 219.","on_invalid":"reject","example":6759,"minimum":1,"aliases":["nhood_id"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in the currency the site prints (JOD, SAR, AED, IQD, LBP…). Measured: jo `iphone` 100-500 = 2,685 of 5,122 (30/30 rows inside the range).","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in the country's currency.","on_invalid":"reject","example":500,"minimum":0},{"name":"with_price_only","type":"boolean","required":false,"description":"true = only listings that publish a price. Measured: jo `iphone` 5,009 of 5,122.","on_invalid":"reject","example":true},{"name":"filters","type":"object","required":false,"description":"Any filter of the category's own filter form, by its `key` from action `categories`: a value filter takes the value id(s) — {\"car_make\": 24851} or {\"Phones_Brand\": [4157, 4159]} — and a range filter takes {\"from\": …, \"to\": …} — {\"Car_Year\": {\"from\": 2020, \"to\": 2022}}. Child filters (car_model) need their parent (car_make). Every filter is checked against the source's own applied-filter echo: a filter OpenSooq did not apply fails the call with INVALID_PARAM instead of returning the unfiltered list. Measured (jo cars): Car_Year 2020-2022 = 2,306 of 18,773; (jo phones) Phones_Brand Apple = 4,639 of 8,607.","on_invalid":"reject","example":{"Car_Year":{"from":2020,"to":2022}}},{"name":"seller_id","type":"string","required":false,"description":"Only the listings of ONE seller: the `seller.member_id` of a row. Measured: member 38496397 = 95 listings (the source does not echo this filter; the engine checks every returned row).","on_invalid":"reject","example":"38496397","aliases":["member_id"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (OpenSooq's own four).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevant — site default, promoted listings first"},{"value":"newest","label":"Date: newest first"},{"value":"price_asc","label":"Price: lowest first"},{"value":"price_desc","label":"Price: highest first"}],"default":"relevance","example":"newest","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Page number, 30 listings per page. `summary.last_page` and `summary.has_more` come from the source's own total; a page past the last returns no rows (measured: page 172 of a 171-page result, 0 rows). Deep pages are served (measured: jo page 1,000 of 4,954).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"lang","type":"enum","required":false,"description":"Language of the source's labels (city, category, attribute labels, relative dates): en or ar. Listing titles and descriptions are the seller's own text in whatever language they wrote (often Arabic) and are never translated.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels"}],"default":"en","example":"en","aliases":["language","locale"]}],"returns":"`{rows[], summary{country, lang, currency, total_results, page, rows_per_page, last_page, has_more, past_last_page, promoted_on_page, filters_applied}}`. Each row: id + country (the values `listing` takes), url, title, price + currency (the amount and currency the card prints — on multi-currency sites the site's display currency, see listing_currency) + price_as_published + price_published, listing_currency (the currency the seller listed in) + price_converted (true when the card shows OpenSooq's conversion, e.g. Lebanon prints LBP for listings priced in USD; `listing` returns the seller's own price), highlights, attributes_as_published[] (the card's attribute chips), description_preview, category / category_code / category_slug, subcategory / subcategory_code / subcategory_slug, city + city_id, neighborhood + neighborhood_id, posted_at_as_published (often relative) + posted_date (when absolute), inserted_date (null since 2026-11-05: the source's search answer sends it empty; `listing` carries published_date), expires_as_published, listing_status, promoted + promotion (vip / turbo / featured), post_badges[], flags[], mileage_km (vehicles), image_url, image_count, has_video, has_360, has_phone, phone_masked (as OpenSooq publishes it, last two digits hidden), seller {member_id, name, username, shop_name, type, badges[], rating_avg, rating_count, verification_level, shop_logo_url}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"jo","query":"iphone"}},{"name":"listing","description":"One OpenSooq listing by `country` + `id` (both from a search row) or by its URL: full description, price with currency, the labelled attribute table (e.g. make, model, year, mileage, fuel, transmission for cars; rooms, bathrooms, area, furnishing, floor for property; brand, model, storage, condition for phones), category and subcategory, city and neighbourhood, publication date, promotion status and badges, all photos, favourites count, AI tags, breadcrumbs and the seller block (name, shop flag, rating, number of listings, member since, response time, verification level, profile URL).","required_params":[],"optional_params":["country","id","url","lang"],"params":[{"name":"country","type":"enum","required":false,"description":"Country site of the listing — the `country` of the search row. Required with `id`. An id asked on another country's site is NOT_FOUND.","on_invalid":"reject","allowed_values":[{"value":"jo","label":"Jordan — JOD"},{"value":"sa","label":"Saudi Arabia — SAR"},{"value":"kw","label":"Kuwait — KWD"},{"value":"iq","label":"Iraq — IQD"},{"value":"om","label":"Oman — OMR"},{"value":"qa","label":"Qatar — QAR"},{"value":"bh","label":"Bahrain — BHD"},{"value":"ae","label":"United Arab Emirates — AED"},{"value":"eg","label":"Egypt — EGP"},{"value":"ly","label":"Libya — LYD"},{"value":"lb","label":"Lebanon — LBP"},{"value":"ps","label":"Palestine — ILS"},{"value":"sy","label":"Syria — SYP"},{"value":"ye","label":"Yemen — YER"},{"value":"sd","label":"Sudan — SDG"},{"value":"ma","label":"Morocco — MAD"},{"value":"dz","label":"Algeria — DZD"},{"value":"tn","label":"Tunisia — TND"}],"example":"jo"},{"name":"id","type":"string","required":false,"description":"OpenSooq listing id from a search row (`id`), e.g. 287227484. Either `id` (+ `country`) or `url`.","on_invalid":"reject","example":"287227484","aliases":["listing_id","post_id"]},{"name":"url","type":"string","required":false,"description":"Alternative to `id`: an OpenSooq listing URL (https://<cc>.opensooq.com/<lang>/search/<id>).","on_invalid":"reject","example":"https://jo.opensooq.com/en/search/287227484","aliases":["listing_url","link"]},{"name":"lang","type":"enum","required":false,"description":"Language of the source's labels (city, category, attribute labels, relative dates): en or ar. Listing titles and descriptions are the seller's own text in whatever language they wrote (often Arabic) and are never translated.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels"}],"default":"en","example":"en","aliases":["language","locale"]}],"returns":"One listing: id, country, url, title, description, price, currency, currency_label, price_as_published, price_published, listing_price, listing_currency, price_converted, prices[]{price, currency}, price_valid_until, attributes[]{label, value, field}, attributes_as_published[], category, category_id, category_code, category_slug, subcategory, subcategory_id, subcategory_code, subcategory_slug, city, city_id, neighborhood, neighborhood_id, published_date, published_date_as_published, listing_status, promoted, promotion, is_live, badges[], photo_count, video_count, photos[], favorites_count, phone_masked, phone_enabled, seller{member_id, name, is_shop, rating_avg, rating_count, listings_count, member_since, response_time, verification_level, authorised_seller, profile_url, avatar_url}, ai_tags[], breadcrumbs[]{label, url}, product_reviews{score, count}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://jo.opensooq.com/en/search/287227484"}},{"name":"categories","description":"For ONE country site (optionally inside a category / subcategory / city / filter): the categories and subcategories with their slugs and listing counts, the cities with ids, the neighbourhoods of a chosen city, and the full filter form of that scope — every filter key with its label, type (values / range / toggle), range bounds, parent filter and value ids with labels (English and Arabic) and counts. These are the values `search` takes as `category`, `subcategory`, `city_id`, `neighborhood_id` and `filters`. Child values (car models of a make) appear once the parent is given in `filters`.","required_params":["country"],"optional_params":["category","subcategory","city_id","filters","lang"],"params":[{"name":"country","type":"enum","required":false,"description":"ONE OpenSooq country site (two-letter code). One call per country. Measured 2026-10-14 listing totals: jo 148,613 · sa 21,771 (see BUILD-LOG for every site).","on_invalid":"reject","allowed_values":[{"value":"jo","label":"Jordan — JOD"},{"value":"sa","label":"Saudi Arabia — SAR"},{"value":"kw","label":"Kuwait — KWD"},{"value":"iq","label":"Iraq — IQD"},{"value":"om","label":"Oman — OMR"},{"value":"qa","label":"Qatar — QAR"},{"value":"bh","label":"Bahrain — BHD"},{"value":"ae","label":"United Arab Emirates — AED"},{"value":"eg","label":"Egypt — EGP"},{"value":"ly","label":"Libya — LYD"},{"value":"lb","label":"Lebanon — LBP"},{"value":"ps","label":"Palestine — ILS"},{"value":"sy","label":"Syria — SYP"},{"value":"ye","label":"Yemen — YER"},{"value":"sd","label":"Sudan — SDG"},{"value":"ma","label":"Morocco — MAD"},{"value":"dz","label":"Algeria — DZD"},{"value":"tn","label":"Tunisia — TND"}],"example":"jo","aliases":["site","market"]},{"name":"category","type":"string","required":false,"description":"Category slug as OpenSooq writes it in its URLs (action `categories` lists them per country): cars, property/property-for-sale, property/property-for-rent, mobile-phones-tablets, electronics-appliances, home-garden, jobs, pets… An unknown slug fails with INVALID_PARAM.","on_invalid":"reject","example":"cars"},{"name":"subcategory","type":"string","required":false,"description":"Subcategory slug under `category` (e.g. cars-for-sale under cars, mobile-phones under mobile-phones-tablets, apartments-for-sale under property/property-for-sale). Needs `category`.","on_invalid":"reject","example":"cars-for-sale"},{"name":"city_id","type":"integer","required":false,"description":"City id; when given, the answer lists that city's neighbourhoods.","on_invalid":"reject","example":59,"minimum":1},{"name":"filters","type":"object","required":false,"description":"Any filter of the category's own filter form, by its `key` from action `categories`: a value filter takes the value id(s) — {\"car_make\": 24851} or {\"Phones_Brand\": [4157, 4159]} — and a range filter takes {\"from\": …, \"to\": …} — {\"Car_Year\": {\"from\": 2020, \"to\": 2022}}. Child filters (car_model) need their parent (car_make). Every filter is checked against the source's own applied-filter echo: a filter OpenSooq did not apply fails the call with INVALID_PARAM instead of returning the unfiltered list. Measured (jo cars): Car_Year 2020-2022 = 2,306 of 18,773; (jo phones) Phones_Brand Apple = 4,639 of 8,607.","on_invalid":"reject","example":{"Car_Year":{"from":2020,"to":2022}}},{"name":"lang","type":"enum","required":false,"description":"Language of the source's labels (city, category, attribute labels, relative dates): en or ar. Listing titles and descriptions are the seller's own text in whatever language they wrote (often Arabic) and are never translated.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels"}],"default":"en","example":"en","aliases":["language","locale"]}],"returns":"`{country, lang, currency, scope{category, subcategory, city_id}, total_listings, categories[]{id, label, label_ar, slug}, subcategories[]{id, label, label_ar, count, slug}, cities[]{id, label, label_ar, count, slug}, neighborhoods[]{id, label, label_ar, count, slug}, filters[]{key, label, type, parent, range, send_as, values[]{id, label, label_ar, count, slug}}, sorts[]}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"ae"}}]},{"name":"otodom","category":{"id":"real-estate","title":"Real Estate"},"title":"Otodom + Imovirtual + Storia API — Poland's, Portugal's and Romania's real-estate portals (OLX Group): property search with the site's own filters, full listing detail with prices, fees, seller and new-development units, and location lookup","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/otodom/v1","spec_available":true,"actions":[{"name":"search","description":"Search sale or rental listings on otodom.pl (site=pl), imovirtual.com (pt) or storia.ro (ro): property type, location (an id from `locations`), price, price per m², area, rooms, floor, build year, advertiser type (private / agency / developer), market (primary / secondary), listing age, keyword in the description, extras, building type, sort and page. Each row: listing id, title, URL, total price, price per m², monthly administrative fee, area, rooms, floor, location down to the neighbourhood, advertiser type and agency, dates, promoted flag, photos. Plus the source's own total and page count. Every filter is checked against the source's own echo: a value the site did not apply is refused, never silently ignored.","required_params":[],"optional_params":["site","transaction","estate","location","min_price","max_price","min_price_per_m2","max_price_per_m2","min_area","max_area","rooms","floors","min_build_year","max_build_year","owner_type","market","days_since_created","description","extras","building_type","sort","page","limit"],"params":[{"name":"site","type":"enum","required":false,"description":"Which portal: `pl` = otodom.pl (Poland, prices in PLN), `pt` = imovirtual.com (Portugal, EUR), `ro` = storia.ro (Romania, mostly EUR). Same platform, same fields.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"otodom.pl — Poland"},{"value":"pt","label":"imovirtual.com — Portugal"},{"value":"ro","label":"storia.ro — Romania"}],"default":"pl","aliases":["country","market_site"]},{"name":"transaction","type":"enum","required":false,"description":"Sale or rent. For `rent`, `price` is the monthly rent.","on_invalid":"reject","allowed_values":[{"value":"sell","label":"For sale (sprzedaż / comprar / vânzare)"},{"value":"rent","label":"For rent (wynajem / arrendar / închiriere)"}],"default":"sell","aliases":["offer_type","deal"]},{"name":"estate","type":"enum","required":false,"description":"Property type. `investment` lists new-development projects (inwestycja / empreendimento / ansamblu); flat results also contain development rows (`kind`=investment).","on_invalid":"reject","allowed_values":[{"value":"flat","label":"Flat / apartment"},{"value":"house","label":"House"},{"value":"plot","label":"Plot / land"},{"value":"commercial","label":"Commercial premises / office"},{"value":"hall","label":"Hall / warehouse"},{"value":"garage","label":"Garage"},{"value":"room","label":"Room (rent)"},{"value":"investment","label":"New development project"}],"default":"flat","aliases":["property_type","type"]},{"name":"location","type":"string","required":false,"description":"Location id as the site writes it in its URLs, taken from the `locations` action (`location_id`), e.g. `mazowieckie/warszawa/warszawa/warszawa` (Warsaw), `malopolskie/krakow/krakow/krakow`, `lisboa` (pt), `cluj/cluj--napoca` (ro). Omit for the whole country. An unknown id is rejected (INVALID_PARAM).","on_invalid":"reject","example":"mazowieckie/warszawa/warszawa/warszawa","aliases":["location_id","city","region"]},{"name":"min_price","type":"number","required":false,"description":"Minimum price (total price; monthly rent for `rent`), in the site's currency.","on_invalid":"reject","example":300000,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Maximum price (total; monthly rent for `rent`).","on_invalid":"reject","example":600000,"minimum":0},{"name":"min_price_per_m2","type":"number","required":false,"description":"Minimum price per m².","on_invalid":"reject","minimum":0},{"name":"max_price_per_m2","type":"number","required":false,"description":"Maximum price per m².","on_invalid":"reject","minimum":0},{"name":"min_area","type":"number","required":false,"description":"Minimum area in m².","on_invalid":"reject","minimum":0},{"name":"max_area","type":"number","required":false,"description":"Maximum area in m².","on_invalid":"reject","minimum":0},{"name":"rooms","type":"array","required":false,"description":"Number of rooms, one or more (`2` or `2,3`); `6+` = six or more (the site's own top class). Several values are combined with OR in ONE request.","on_invalid":"reject","allowed_values":[{"value":"1","label":"1"},{"value":"2","label":"2"},{"value":"3","label":"3"},{"value":"4","label":"4"},{"value":"5","label":"5"},{"value":"6+","label":"6+"}],"example":["2","3"],"aliases":["rooms_number"]},{"name":"floors","type":"array","required":false,"description":"Floor(s): `cellar`, `ground`, `1`…`10`, `above_10`, `garret`. Several values combine with OR.","on_invalid":"reject","allowed_values":[{"value":"cellar","label":"cellar"},{"value":"ground","label":"ground"},{"value":"1","label":"1"},{"value":"2","label":"2"},{"value":"3","label":"3"},{"value":"4","label":"4"},{"value":"5","label":"5"},{"value":"6","label":"6"},{"value":"7","label":"7"},{"value":"8","label":"8"},{"value":"9","label":"9"},{"value":"10","label":"10"},{"value":"above_10","label":"above_10"},{"value":"garret","label":"garret"}],"aliases":["floor"]},{"name":"min_build_year","type":"integer","required":false,"description":"Built in or after this year.","on_invalid":"reject","minimum":1700,"maximum":2100},{"name":"max_build_year","type":"integer","required":false,"description":"Built in or before this year.","on_invalid":"reject","minimum":1700,"maximum":2100},{"name":"owner_type","type":"enum","required":false,"description":"Who placed the ad (the site's own advertiser filter).","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private owner"},{"value":"agency","label":"Estate agency"},{"value":"developer","label":"Developer"}],"aliases":["seller_type","advertiser_type"]},{"name":"market","type":"enum","required":false,"description":"Primary market (new build from a developer) or secondary.","on_invalid":"reject","allowed_values":[{"value":"primary","label":"Primary (rynek pierwotny)"},{"value":"secondary","label":"Secondary (rynek wtórny)"}]},{"name":"days_since_created","type":"enum","required":false,"description":"Only listings added in the last N days.","on_invalid":"reject","allowed_values":[{"value":"1","label":"last 1 day(s)"},{"value":"3","label":"last 3 day(s)"},{"value":"7","label":"last 7 day(s)"},{"value":"14","label":"last 14 day(s)"},{"value":"30","label":"last 30 day(s)"}],"aliases":["posted_within_days"]},{"name":"description","type":"string","required":false,"description":"A word that must appear in the listing description (the site's own keyword filter), e.g. `taras`, `garaż`.","on_invalid":"reject","example":"taras","aliases":["keyword","query","q"]},{"name":"extras","type":"array","required":false,"description":"Required extras (AND): balcony, terrace, garage, lift, basement, garden, separate_kitchen.","on_invalid":"reject","allowed_values":[{"value":"balcony","label":"balcony"},{"value":"terrace","label":"terrace"},{"value":"garage","label":"garage"},{"value":"lift","label":"lift"},{"value":"basement","label":"basement"},{"value":"garden","label":"garden"},{"value":"separate_kitchen","label":"separate_kitchen"}]},{"name":"building_type","type":"array","required":false,"description":"Building type(s): block, tenement, house, apartment, infill, ribbon, loft.","on_invalid":"reject","allowed_values":[{"value":"block","label":"block"},{"value":"tenement","label":"tenement"},{"value":"house","label":"house"},{"value":"apartment","label":"apartment"},{"value":"infill","label":"infill"},{"value":"ribbon","label":"ribbon"},{"value":"loft","label":"loft"}]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own options).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Recommended"},{"value":"newest","label":"Newest first"},{"value":"price_asc","label":"Price low → high"},{"value":"price_desc","label":"Price high → low"},{"value":"area_asc","label":"Area small → large"},{"value":"area_desc","label":"Area large → small"}],"default":"relevance","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Result page. Past the last page the source would re-serve the last page; the engine returns 0 rows with `page_clamped: true` and `last_page` instead.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"limit","type":"enum","required":false,"description":"Rows per page requested from the site: 24, 36, 48 or 72 (the site's own options; the actual count varies).","on_invalid":"reject","allowed_values":[{"value":"24","label":"24"},{"value":"36","label":"36"},{"value":"48","label":"48"},{"value":"72","label":"72"}],"default":"36"}],"returns":"results[]{listing_id (ID… token — pass to `listing`), ad_id, kind (ad|investment), title, url, estate, transaction, price, currency, price_type (sale_price|monthly_rent|from_price_per_m2), price_on_request, price_hidden, price_per_m2, maintenance_fee_monthly (czynsz), investment_price_from_per_m2, area_m2, plot_area_m2, rooms, floor, floor_number, location{region, city, district, neighbourhood, street, location_id, full_name, levels[]}, advertiser_type (private_person|agency|developer|business), is_private_owner, advertiser_name, agency{agency_id, name, type, logo}, created_at, first_created_at, pushed_up_at, is_promoted, is_exclusive, is_crosslisted, tags[], development{}, investment{state, estimated_delivery, units, …}, image, images[], image_count} + total, pages, page, per_page, last_page, has_more, page_clamped, decoy_rows_dropped, location{location_id, name, level, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"site":"pl","transaction":"sell","estate":"flat","location":"mazowieckie/warszawa/warszawa/warszawa"}},{"name":"listing","description":"Full listing by `listing_id` (the ID… token from a search row) or URL: price, the price as the site prints it, monthly administrative fee (czynsz), deposit, price per m², area, rooms, floor, building floors, build year, building type / material, ownership, heating, construction status, extras, all characteristics, full description, photos, floor plans, location with coordinates, dates, and the advertiser (type, contact name, phone numbers as published, agency name / page / logo, owner address). For a new-development project: price-from per m², area range, number of units and the first page of its units with price and area.","required_params":[],"optional_params":["listing_id","url","site"],"params":[{"name":"listing_id","type":"string","required":false,"description":"The ID… token at the end of a listing URL (`…-ID4Diz3`), returned as `listing_id` in every search row. The numeric `ad_id` does not address a page on the site. Provide listing_id OR url.","on_invalid":"reject","example":"ID4Diz3","aliases":["id","token"]},{"name":"url","type":"string","required":false,"description":"An otodom.pl, imovirtual.com or storia.ro offer / development URL (the site is taken from the URL).","on_invalid":"reject","example":"https://www.otodom.pl/pl/oferta/bezposrednio-29-m-widok-na-las-petla-i-pkp-goclawek-ID4Diz3","aliases":["listing_url"]},{"name":"site","type":"enum","required":false,"description":"Which portal: `pl` = otodom.pl (Poland, prices in PLN), `pt` = imovirtual.com (Portugal, EUR), `ro` = storia.ro (Romania, mostly EUR). Same platform, same fields.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"otodom.pl — Poland"},{"value":"pt","label":"imovirtual.com — Portugal"},{"value":"ro","label":"storia.ro — Romania"}],"default":"pl","aliases":["country","market_site"]}],"returns":"listing{listing_id, ad_id, site, kind, title, url, status, estate, transaction, market, price, currency, price_type, price_display, price_printed, price_mismatch, price_on_request, price_negotiable, price_per_m2, maintenance_fee_monthly, deposit, investment_price_from_per_m2, area_m2, plot_area_m2, rooms, floor, building_floors, build_year, building_type, building_material, building_ownership, construction_status, heating, windows_type, available_from, extras[], attributes{}, characteristics[]{key, value, display, currency}, features[], description, location{…, latitude, longitude}, images[], floor_plans[], links{}, created_at, modified_at, pushed_up_at, reference_id, is_exclusive, advertiser_type, seller{type, contact_name, phones[], owner_id, owner_name, owner_address, agency{agency_id, name, type, url, logo}}, investment{state, number_of_properties, area_from_m2, area_to_m2, total, returned, units[]{ad_id, listing_id, url, price, area_m2, rooms, floor, price_per_m2}, groups[]}, development{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.otodom.pl/pl/oferta/bezposrednio-29-m-widok-na-las-petla-i-pkp-goclawek-ID4Diz3"}},{"name":"locations","description":"Location lookup: type a place name (`Kraków`, `Mokotów`, `Lisboa`, `Cluj`) and get the site's own location ids with level (voivodeship / county / city / district / village…) and full name. Feed `location_id` to `search`. Diacritics are optional.","required_params":["query"],"optional_params":["query","site"],"params":[{"name":"query","type":"string","required":true,"description":"Place name or its beginning (2+ characters). The site matches loosely: a string that is no place still returns its closest spellings, so check `full_name`.","on_invalid":"reject","example":"Kraków","aliases":["q","name","text"]},{"name":"site","type":"enum","required":false,"description":"Which portal: `pl` = otodom.pl (Poland, prices in PLN), `pt` = imovirtual.com (Portugal, EUR), `ro` = storia.ro (Romania, mostly EUR). Same platform, same fields.","on_invalid":"reject","allowed_values":[{"value":"pl","label":"otodom.pl — Poland"},{"value":"pt","label":"imovirtual.com — Portugal"},{"value":"ro","label":"storia.ro — Romania"}],"default":"pl","aliases":["country","market_site"]}],"returns":"locations[]{location_id, name, full_name, level, parent_ids[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"pl","query":"Kraków"}}]},{"name":"otomoto","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Otomoto API scraper — otomoto.pl, Poland's largest car marketplace (OLX Group): search cars, vans and motorcycles by make, model, voivodeship or city with otomoto's own filters and sorts, and read the full offer record. Every ad returns the price in PLN checked against otomoto's own price string, the published year, mileage, fuel, gearbox, engine power and capacity, whether the seller is a private person or a dealer, and whether the ad is a paid promoted placement. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/otomoto/v1","spec_available":true,"actions":[{"name":"search","description":"Search otomoto.pl the way its own visitors do: pick a section (cars, vans, motorcycles), narrow by make and model, by voivodeship or by city with a radius, and apply otomoto's own price, year, mileage, engine power, engine capacity, fuel, gearbox, body, condition, damage and seller-type filters. Every ad comes back with the price in PLN cross-checked against otomoto's own price string, the published model year, the odometer reading with the site's own formatted string beside it, fuel and gearbox in both otomoto's code and its Polish label, engine power and capacity, the city and voivodeship, whether a private person or a dealer is selling (otomoto's own flag, never inferred), otomoto's below/at/above-market price indicator, the CEPiK history-check flag, and whether the ad is a paid promoted placement. Promoted ads are returned in the position otomoto gives them and flagged, never dropped. Sort by price, mileage, engine power or posting date, and page through the whole result set. The answer repeats every filter otomoto actually applied, with the canonical slug it resolved to, and lists every model otomoto publishes for the chosen make with its live ad count — so the next call can drill down without guessing a slug.","required_params":[],"optional_params":["category","make","model","location","distance_km","page","sort","seller_type","condition","fuel_type","gearbox","body_type","damaged","price_from","price_to","year_from","year_to","mileage_from","mileage_to","engine_power_from","engine_power_to","engine_capacity_from","engine_capacity_to"],"params":[{"name":"category","type":"enum","required":false,"description":"Which otomoto section to search. These are otomoto's own URL sections; the category id each one resolves to is returned in filters_applied.","on_invalid":"reject","allowed_values":[{"value":"osobowe","label":"Cars (otomoto category 29)"},{"value":"dostawcze","label":"Vans and light commercials (category 73)"},{"value":"motocykle-i-quady","label":"Motorcycles and quads (category 65)"}],"default":"osobowe","example":"osobowe"},{"name":"make","type":"string","required":false,"description":"A make exactly as otomoto spells it in its own URLs: bmw, audi, volkswagen, mercedes-benz, skoda. Case and spaces are normalised. If otomoto does not recognise the make the call is refused — it is NOT quietly widened to every car, which is what the site itself does.","on_invalid":"reject","example":"bmw","value_pattern":"[a-z0-9][a-z0-9._\\- ]{0,60}","aliases":["brand"]},{"name":"model","type":"string","required":false,"description":"A model slug as otomoto spells it (x3, seria-3, golf, a4). Requires make. Every model otomoto publishes for a make, with its live ad count, comes back in related_links.models of any search for that make.","on_invalid":"reject","example":"x3","value_pattern":"[a-z0-9][a-z0-9._\\- ]{0,60}"},{"name":"location","type":"string","required":false,"description":"A Polish voivodeship or city slug as otomoto spells it (mazowieckie, warszawa, krakow, slaskie, wroclaw). otomoto resolves it itself to a region or a city and echoes which; the answer is in filters_applied. A city search also carries a radius (see distance_km). An unrecognised location is refused.","on_invalid":"reject","example":"mazowieckie","value_pattern":"[a-z0-9][a-z0-9._\\- ]{0,60}","aliases":["city","region"]},{"name":"distance_km","type":"integer","required":false,"description":"Search radius in kilometres around a city given in location. otomoto's own default for a city is 50 km. Ignored for a voivodeship, which has no radius.","on_invalid":"reject","example":100,"minimum":0,"maximum":500},{"name":"page","type":"integer","required":false,"description":"Result page, from 1. otomoto serves 32 ads per page and the page size is fixed by the site, not by this API.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order, using otomoto's own published sort ids.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"otomoto's own 'chosen for you' order"},{"value":"featured","label":"Featured ads first"},{"value":"newest","label":"Most recently posted first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"},{"value":"power_asc","label":"Lowest engine power first"},{"value":"power_desc","label":"Highest engine power first"}],"default":"relevance","example":"price_asc"},{"name":"seller_type","type":"enum","required":false,"description":"Whether the ad is posted by a private seller or a business. This is otomoto's own filter, and every row also carries the seller type the site publishes for it, so the two can be checked against each other (measured: 32/32 rows agreed on each side).","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private sellers only"},{"value":"business","label":"Dealers and companies only"}],"example":"private"},{"name":"condition","type":"enum","required":false,"description":"New or used, as otomoto's own new/used filter defines it.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New vehicles"},{"value":"used","label":"Used vehicles"}],"example":"used"},{"name":"fuel_type","type":"string","required":false,"description":"otomoto's fuel value: petrol, diesel, petrol-lpg, petrol-cng, hybrid, plugin-hybrid, electric, hydrogen, ethanol. Every row returns the value and otomoto's own Polish label, so the vocabulary can be read back from any result.","on_invalid":"reject","example":"petrol","value_pattern":"[a-z0-9][a-z0-9\\-]{0,40}"},{"name":"gearbox","type":"string","required":false,"description":"otomoto's gearbox value: manual or automatic. Rows return the value and otomoto's Polish label.","on_invalid":"reject","example":"automatic","value_pattern":"[a-z0-9][a-z0-9\\-]{0,40}"},{"name":"body_type","type":"string","required":false,"description":"otomoto's body value: suv, sedan, kombi, compact, city-cars, minivan, coupe, cabrio, small-cars.","on_invalid":"reject","example":"suv","value_pattern":"[a-z0-9][a-z0-9\\-]{0,40}"},{"name":"damaged","type":"boolean","required":false,"description":"true returns only damaged vehicles, false only undamaged ones. Omit to include both, which is otomoto's default.","on_invalid":"reject","example":false},{"name":"price_from","type":"integer","required":false,"description":"Lowest price in PLN, inclusive, as otomoto's own price filter applies it.","on_invalid":"reject","example":50000,"minimum":0},{"name":"price_to","type":"integer","required":false,"description":"Highest price in PLN, inclusive.","on_invalid":"reject","example":80000,"minimum":0},{"name":"year_from","type":"integer","required":false,"description":"Earliest model year, inclusive.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_to","type":"integer","required":false,"description":"Latest model year, inclusive.","on_invalid":"reject","example":2022,"minimum":1900,"maximum":2100},{"name":"mileage_from","type":"integer","required":false,"description":"Lowest odometer reading in kilometres, inclusive.","on_invalid":"reject","example":0,"minimum":0},{"name":"mileage_to","type":"integer","required":false,"description":"Highest odometer reading in kilometres, inclusive.","on_invalid":"reject","example":100000,"minimum":0},{"name":"engine_power_from","type":"integer","required":false,"description":"Lowest engine power in metric horsepower (KM), inclusive.","on_invalid":"reject","example":150,"minimum":0},{"name":"engine_power_to","type":"integer","required":false,"description":"Highest engine power in metric horsepower (KM), inclusive.","on_invalid":"reject","example":400,"minimum":0},{"name":"engine_capacity_from","type":"integer","required":false,"description":"Smallest engine capacity in cm3, inclusive.","on_invalid":"reject","example":1600,"minimum":0},{"name":"engine_capacity_to","type":"integer","required":false,"description":"Largest engine capacity in cm3, inclusive.","on_invalid":"reject","example":3000,"minimum":0}],"returns":"results[]{ad_id (otomoto's numeric ad id), listing_id (the offer token in the URL, e.g. ID6IgtYL or OLX_ID6IguOF — this is what listing/detail takes), title, subtitle, url, created_at, price (PLN, cross-checked against the source's own price string), price_raw, currency, price_is_gross, price_evaluation (otomoto's own below/in/above market indicator), price_drop, price_mismatch (present only when the source contradicted itself and the price was withheld), make, make_slug, model, model_slug, version, year, mileage_km, mileage_display (otomoto's own formatted string, for cross-checking), fuel_type{value,label}, gearbox{value,label}, engine_power_hp, engine_capacity_ccm, field_mismatch (the numeric fields the source contradicted, when any), location{city, region, country}, seller{kind — private, dealer, or crosslisted for an ad cross-posted from OLX, which is all otomoto publishes on the row for those (the offer page resolves the real type); uuid, dealer_id, dealer_name, dealer_url, is_credit_intermediary}, is_promoted, promotions[], badges[], cepik_verified, image, category_id}, count, total_results, total_pages, page, page_size, has_more, sort, filters_applied (every filter otomoto echoed back, with the canonical slug and label it resolved to), breadcrumb[]{label, url}, related_links{models|makes|…}[]{title, slug, url, count}, search_url (the otomoto page this answer came from), currency","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"bmw"}},{"name":"listing/detail","description":"The full otomoto offer record from an offer URL or its ID token: title, the price in PLN with otomoto's own VAT and invoice labels, the seller's type (private person or dealer), the dealer's trading name, page and how many ads it currently has, the city, voivodeship and country, the whole published specification grouped exactly as otomoto groups it (basic information, technical specification, condition and history, financing), every equipment item by category, every photo at full size, the seller's own description with its HTML stripped, the CEPiK history-check flag, the posting and last-update timestamps, the ad status, and whether the ad carries a paid promotion. Numbers otomoto publishes twice — mileage, year, engine power, engine capacity — are returned only when the site's own formatted string agrees with its raw value. The seller's street address, postcode, map point and website are returned as the page carries them; the phone number sits behind otomoto's reveal call and is not requested. A withdrawn or unknown offer answers NOT_FOUND.","required_params":["listing"],"optional_params":[],"params":[{"name":"listing","type":"string","required":true,"description":"An otomoto offer URL, or the listing_id at the end of it (…-ID6IgtYL.html → ID6IgtYL; an ad cross-posted from OLX ends …-OLX_ID6IguOF.html → OLX_ID6IguOF, and the OLX_ part is required). Search rows carry both `url` and `listing_id`. The numeric `ad_id` is otomoto's internal id and does NOT address an offer page; passing it is refused rather than reported as missing.","on_invalid":"reject","example":"https://www.otomoto.pl/osobowe/oferta/bmw-x3-ID6IgtYL.html","value_pattern":"(https?://.*|/.*|(OLX_)?(ID)?[0-9A-Za-z]{4,16})","aliases":["url","listing_id","id"]}],"returns":"listing{ad_id, listing_id, title, url, status, created_at, updated_at, price, price_raw, currency, price_labels[], price_drop, is_promoted, promotions[], make, make_slug, model, model_slug, version, generation, year, mileage_km, mileage_display, fuel_type{value,label}, gearbox{value,label}, engine_power_hp, engine_capacity_ccm, body_type{value,label}, colour{value,label}, doors, seats, drive{value,label}, condition{value,label}, vin_published, field_mismatch, location{city, region, country}, seller{kind, name, dealer_url, active_ads, badges[], address, postal_code, short_address, latitude, longitude, website}, specs[]{key, label, value, group}, spec_groups[]{key, label}, equipment[]{key, label, items[]{key, label}}, images[], image_count, description, cepik_verified, category{id, code, name}, breadcrumb[]{label, url}, seo{title, description}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"listing":"https://www.otomoto.pl/osobowe/oferta/bmw-x3-ID6IgtYL.html"}},{"name":"makes","description":"The makes otomoto itself lists on a section's landing page, ranked by how many live ads each one carries, with the exact slug a search needs. This is otomoto's own published shortlist, not its full make register — it is as long as otomoto makes it (20 entries on the cars section, measured), and `count` says how many came back. Use it to get a slug right before searching, because otomoto silently ignores a make it does not recognise and answers with the whole section instead. Passing a make returns that make's model shortlist instead, each model with its slug and live ad count.","required_params":[],"optional_params":["category","make"],"params":[{"name":"category","type":"enum","required":false,"description":"Which otomoto section to search. These are otomoto's own URL sections; the category id each one resolves to is returned in filters_applied.","on_invalid":"reject","allowed_values":[{"value":"osobowe","label":"Cars (otomoto category 29)"},{"value":"dostawcze","label":"Vans and light commercials (category 73)"},{"value":"motocykle-i-quady","label":"Motorcycles and quads (category 65)"}],"default":"osobowe","example":"osobowe"},{"name":"make","type":"string","required":false,"description":"A make exactly as otomoto spells it in its own URLs: bmw, audi, volkswagen, mercedes-benz, skoda. Case and spaces are normalised. If otomoto does not recognise the make the call is refused — it is NOT quietly widened to every car, which is what the site itself does.","on_invalid":"reject","example":"bmw","value_pattern":"[a-z0-9][a-z0-9._\\- ]{0,60}","aliases":["brand"]}],"returns":"results[]{title, slug, url, count (live ads for that make or model)}, kind (makes|models), count (how many entries otomoto published, not how many exist), category, make (when a make was given), total_results (live ads in the section), other_lists{fuel-types|body-types|regions|model-generations} — the other shortlists otomoto published on the same page, each with slug and count, source_url","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"osobowe"}}]},{"name":"otoplus","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"otoplus — Turkey used cars with expertise report, plate, VIN and price","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/otoplus/v1","spec_available":true,"actions":[{"name":"search","description":"Search the used cars otoplus sells from its own stock in Turkey (İstanbul, Ankara, İzmir) by make, model, free text, city, fuel, gearbox, body type, campaign, price, model year and mileage, in otoplus's five sort orders. Returns the source's own total, 12 cars per page with asking price, special price and credit offer, mileage, VIN, sales centre and photos, plus the make facets with live counts. All parameters are optional: no parameter = the whole stock (140 cars on 2026-10-07).","required_params":[],"optional_params":["make","model","query","city","fuel","transmission","body_type","campaign","price_min","price_max","year_min","year_max","mileage_min","mileage_max","sort","page"],"params":[{"name":"make","type":"string","required":false,"description":"Make slug as otoplus writes it (lower case): peugeot, renault, opel, hyundai, fiat, volkswagen, toyota, skoda… Action `makes` lists the makes in stock with live counts. Measured: peugeot = 23 of 140 cars. A make with nothing in stock returns an empty result with a warning.","on_invalid":"reject","example":"peugeot","aliases":["brand","marka"]},{"name":"model","type":"string","required":false,"description":"Model slug under `make`, as in the second segment of a vehicle URL: 3008, 2008, clio, egea… Needs `make`. Measured: peugeot/3008 = 9 cars.","on_invalid":"reject","example":"3008","aliases":["serie","series"]},{"name":"query","type":"string","required":false,"description":"Free text matched by otoplus's own search box (make, model or trim words). Measured: `clio` = 6 cars.","on_invalid":"reject","example":"clio","aliases":["q","keyword","arama"]},{"name":"city","type":"enum","required":false,"description":"City of the otoplus sales centre holding the car (comma-separate several). Measured: istanbul 57, ankara 45, izmir 38 of 140.","on_invalid":"reject","allowed_values":[{"value":"istanbul","label":"İstanbul"},{"value":"ankara","label":"Ankara"},{"value":"izmir","label":"İzmir"}],"example":"istanbul"},{"name":"fuel","type":"enum","required":false,"description":"Fuel type (comma-separate several). Measured: diesel 34 of 140.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Benzin"},{"value":"diesel","label":"Dizel"},{"value":"electric","label":"Elektrik"},{"value":"hybrid","label":"Hibrit"}],"example":"diesel","aliases":["fuel_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox. Measured: manual 14 of 140.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manuel"},{"value":"automatic","label":"Otomatik"}],"example":"automatic","aliases":["gearbox"]},{"name":"body_type","type":"enum","required":false,"description":"Body type (comma-separate several). Measured: suv 65 of 140.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan"},{"value":"hatchback","label":"Hatchback 5 Kapı"},{"value":"suv","label":"SUV"},{"value":"crossover","label":"Crossover"},{"value":"station_wagon","label":"Station Wagon"},{"value":"kombi","label":"Kombi"}],"example":"suv","aliases":["body"]},{"name":"campaign","type":"enum","required":false,"description":"Only cars in one of otoplus's campaigns: `credit` (Kredi Fırsatı, 103 of 140 measured) or `trade_in` (Özel Takas Fırsatı, 0 of 140 on 2026-10-07).","on_invalid":"reject","allowed_values":[{"value":"credit","label":"Kredi Fırsatı"},{"value":"trade_in","label":"Özel Takas Fırsatı"}],"example":"credit"},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, TRY.","on_invalid":"reject","example":1000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price, TRY.","on_invalid":"reject","example":1500000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Oldest model year.","on_invalid":"reject","example":2021,"minimum":1950,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Newest model year.","on_invalid":"reject","example":2025,"minimum":1950,"maximum":2100},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading, km.","on_invalid":"reject","example":0,"minimum":0,"aliases":["km_min"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading, km.","on_invalid":"reject","example":60000,"minimum":0,"aliases":["km_max"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results. The default (`recommended`) measured as newest listing first; otoplus has no model-year or mileage sort.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"Önerilen — site default; measured = newest listing first"},{"value":"oldest_listing","label":"Longest-listed cars first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"recommended","example":"price_asc","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Page number; 12 cars per page. `summary.last_page` and `summary.has_more` come from the source's own total. A page past the last returns no rows (the source answers 404, it never repeats a page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"`{rows[], summary{total_results, page, rows_per_page, last_page, has_more, past_last_page, reserved_on_page, filters_applied, make_facets[]{slug, name, count}}}`. Each row: id (the value `detail` takes as `id`), url, title, make, model, trim, year, price_try, ld_price_try + price_mismatch (the page's own schema.org price as a second witness), special_price_try (the site's 'Size Özel' price, when shown), credit_offer {amount_try, months, monthly_interest_pct, text}, mileage_km, fuel, transmission, body_type, color, city, status (available/reserved), reserved, vin (valid 17-character VINs only, else null) + vin_as_published (the source's raw value), seller {name: otoplus, location, address}, photo_count, photo_url, photos[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"make":"peugeot","sort":"price_asc"}},{"name":"detail","description":"One otoplus car by its `id` (from a search row) or URL: asking price with its schema.org second witness, special price, credit offer and loan limits, consultancy fee, plate number, VIN, TSB code, warranty and its end date, inspection (muayene) validity, motor-vehicle-tax instalments, spare key / LPG flags, the full expertise report (13 body panels: original, painted or replaced, plus mechanical checks), equipment list, all photos, the sales centre with address and phone, and similar cars.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"string","required":false,"description":"otoplus vehicle id from a search row (`id`), e.g. 575530. Either `id` or `url` is required.","on_invalid":"reject","example":"575530","aliases":["vehicle_id","listing_id"]},{"name":"url","type":"string","required":false,"description":"Alternative to `id`: an otoplus vehicle URL (it ends in -<id>).","on_invalid":"reject","example":"https://www.otoplus.com/peugeot/3008/3008-allure-1.5-bluehdi-130-eat8/sahibinden-2019-otomatik-dizel-81614km-ekspertizli-istanbul-1625000tl-575144","aliases":["listing_url","link"]}],"returns":"One car: id, url, title, make, model, trim, year, price_try, ld_price_try, price_mismatch, ld_availability, special_price_try, refurbished_discount_try, consultancy_fee_try, credit_offer, credit{max_amount_try, installment_options_months[]}, mileage_km, fuel, transmission, body_type, color, plate_number, vin, vin_as_published, tsb_code, has_warranty, warranty_end_date, has_spare_keys, has_lpg_kit, refurbished, inspection_valid_until, motor_vehicle_tax_try{current_installment, next_installment}, specs{segment, displacement, …}, equipment[]{group, features[]}, expertise{body_panels[]{part_code, part, condition[], condition_tr[], original, note}, summary{panels_checked, original, painted, replaced, other_damage}, mechanical_checks[], extras_checks[]}, expertise_notes, status, reserved, reserved_until, city, seller{name, type, location, address, phone}, photo_count, photos[], damage_photos[], photos_360_count, similar_ids[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.otoplus.com/peugeot/3008/3008-allure-1.5-bluehdi-130-eat8/sahibinden-2019-otomatik-dizel-81614km-ekspertizli-istanbul-1625000tl-575144"}},{"name":"makes","description":"The makes otoplus has in stock right now with live car counts (the slugs `search` takes as `make`), plus the cities, body types, fuels, gearboxes and campaigns the site filters by.","required_params":[],"optional_params":[],"params":[],"returns":"`{makes[]{slug, name, count}, total_cars, cities[], body_types[], fuels[], transmissions[], campaigns[]}`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}}]},{"name":"otto","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Otto.de API scraper — search Germany's Otto.de marketplace: product search & filters, category browse, product facts, deals, new arrivals, brands and the department tree (DE / EUR)","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/otto/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword product search on Otto.de with brand, price, rating, condition and availability filters, sort order and offset pagination. Returns product cards (name, brand, price in EUR, condition, availability, rating, review count, image, URL).","required_params":["query"],"optional_params":["offset","marke","brand","sortierung","sort","preis","price_min","price_max","bewertung","min_rating","zustand","condition","verfuegbarkeit","availability"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, e.g. iphone, sneaker, kaffeevollautomat.","on_invalid":"reject","example":"iphone"},{"name":"sort","type":"enum","required":false,"description":"Sort order (Otto 'sortierung' keys).","on_invalid":"ignore","allowed_values":[{"value":"beliebtheit","label":"Most popular (default)"},{"value":"preis-aufsteigend","label":"Price: low to high"},{"value":"preis-absteigend","label":"Price: high to low"},{"value":"bewertung","label":"Best rated"},{"value":"neuheiten","label":"Newest first"}],"example":"preis-aufsteigend","aliases":["sortierung"]},{"name":"brand","type":"string","required":false,"description":"Filter by brand slug (lowercased), e.g. apple, samsung, hp.","on_invalid":"reject","example":"apple","aliases":["marke"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price (EUR).","on_invalid":"ignore","example":50},{"name":"price_max","type":"number","required":false,"description":"Maximum price (EUR).","on_invalid":"ignore","example":500},{"name":"preis","type":"string","required":false,"description":"Advanced: raw Otto price range 'lo-hi' (overrides price_min/price_max).","on_invalid":"reject"},{"name":"min_rating","type":"integer","required":false,"description":"Minimum star rating filter (1-5).","on_invalid":"ignore","example":4,"minimum":1,"maximum":5,"aliases":["bewertung"]},{"name":"condition","type":"string","required":false,"description":"Otto Zustand filter (German value, e.g. neu, gebraucht).","on_invalid":"reject","aliases":["zustand"]},{"name":"availability","type":"string","required":false,"description":"Otto Verfuegbarkeit filter (German value, e.g. sofort-lieferbar).","on_invalid":"reject","aliases":["verfuegbarkeit"]},{"name":"offset","type":"integer","required":false,"description":"Kept for compatibility only — Otto serves a single result grid per query and ignores any offset above 0, so a non-zero value is refused rather than answered with the same rows. Narrow the list with brand / price / rating / condition / sort instead.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"products[] (name, brand, price, currency, condition, availability, rating, review_count, image, url), offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}},{"name":"browse","description":"Browse an Otto.de category landing (e.g. moebel, technik/computer, mode) with the same brand / price / rating / sort filters and offset pagination as search.","required_params":["category"],"optional_params":["offset","marke","brand","sortierung","sort","preis","price_min","price_max","bewertung","min_rating","zustand","condition","verfuegbarkeit","availability"],"params":[{"name":"category","type":"string","required":true,"description":"Otto category path, e.g. moebel or technik/computer (discover paths via the categories action).","on_invalid":"reject","example":"moebel"},{"name":"sort","type":"enum","required":false,"description":"Sort order (Otto 'sortierung' keys).","on_invalid":"ignore","allowed_values":[{"value":"beliebtheit","label":"Most popular (default)"},{"value":"preis-aufsteigend","label":"Price: low to high"},{"value":"preis-absteigend","label":"Price: high to low"},{"value":"bewertung","label":"Best rated"},{"value":"neuheiten","label":"Newest first"}],"example":"preis-aufsteigend","aliases":["sortierung"]},{"name":"brand","type":"string","required":false,"description":"Filter by brand slug (lowercased), e.g. apple, samsung, hp.","on_invalid":"reject","example":"apple","aliases":["marke"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price (EUR).","on_invalid":"ignore","example":50},{"name":"price_max","type":"number","required":false,"description":"Maximum price (EUR).","on_invalid":"ignore","example":500},{"name":"preis","type":"string","required":false,"description":"Advanced: raw Otto price range 'lo-hi' (overrides price_min/price_max).","on_invalid":"reject"},{"name":"min_rating","type":"integer","required":false,"description":"Minimum star rating filter (1-5).","on_invalid":"ignore","example":4,"minimum":1,"maximum":5,"aliases":["bewertung"]},{"name":"condition","type":"string","required":false,"description":"Otto Zustand filter (German value, e.g. neu, gebraucht).","on_invalid":"reject","aliases":["zustand"]},{"name":"availability","type":"string","required":false,"description":"Otto Verfuegbarkeit filter (German value, e.g. sofort-lieferbar).","on_invalid":"reject","aliases":["verfuegbarkeit"]},{"name":"offset","type":"integer","required":false,"description":"Kept for compatibility only — Otto serves a single result grid per query and ignores any offset above 0, so a non-zero value is refused rather than answered with the same rows. Narrow the list with brand / price / rating / condition / sort instead.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"products[], category, offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"moebel"}},{"name":"product","description":"Product facts for one Otto.de item by variation id — name, brand, price (EUR), condition, availability, aggregate rating, review count, image and URL. Read from the search grid, because Otto does not serve its standalone product page to this endpoint; individual review text, GTIN and the full spec table are therefore not available here.","required_params":["id","query"],"optional_params":["variation_id"],"params":[{"name":"id","type":"string","required":true,"description":"Otto variation id (e.g. 1786938267), as returned in search/browse products[].variation_id.","on_invalid":"reject","example":"1786938267","aliases":["variation_id"]},{"name":"query","type":"string","required":true,"description":"Keyword this variation appears under in Otto search — the item is located through the search grid, so the keyword is required.","on_invalid":"reject","example":"iphone"}],"returns":"product{} — variation_id, product_id, name, brand, price, currency, condition, availability, rating, review_count, image, url","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1786938267","query":"iphone"}},{"name":"deals","description":"Current Otto.de deal / sale campaign products (e.g. Deal des Monats, Super Sale). Auto-discovers the active campaigns from the storefront and returns their product cards. Pick a specific campaign with the campaign param.","required_params":[],"optional_params":["campaign"],"params":[{"name":"campaign","type":"string","required":false,"description":"Specific deal campaign slug (e.g. deal-des-monats, super-sale). Omit to auto-pick the first active campaign; the full list is returned in available_campaigns.","on_invalid":"reject"}],"returns":"products[], campaign, available_campaigns[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"new_arrivals","description":"Newest products on Otto.de — keyword or category sorted newest-first (sortierung=neuheiten). Pass query OR category; supports the same filters and offset pagination.","required_params":[],"optional_params":["query","category","offset","marke","brand","preis","price_min","price_max","bewertung","min_rating","zustand","condition","verfuegbarkeit","availability"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to pull newest items for, e.g. sneaker.","on_invalid":"reject","example":"sneaker"},{"name":"category","type":"string","required":false,"description":"Category path to pull newest items for (alternative to query).","on_invalid":"reject","example":"mode"},{"name":"brand","type":"string","required":false,"description":"Filter by brand slug (lowercased), e.g. apple, samsung, hp.","on_invalid":"reject","example":"apple","aliases":["marke"]},{"name":"price_min","type":"number","required":false,"description":"Minimum price (EUR).","on_invalid":"ignore","example":50},{"name":"price_max","type":"number","required":false,"description":"Maximum price (EUR).","on_invalid":"ignore","example":500},{"name":"preis","type":"string","required":false,"description":"Advanced: raw Otto price range 'lo-hi' (overrides price_min/price_max).","on_invalid":"reject"},{"name":"min_rating","type":"integer","required":false,"description":"Minimum star rating filter (1-5).","on_invalid":"ignore","example":4,"minimum":1,"maximum":5,"aliases":["bewertung"]},{"name":"condition","type":"string","required":false,"description":"Otto Zustand filter (German value, e.g. neu, gebraucht).","on_invalid":"reject","aliases":["zustand"]},{"name":"availability","type":"string","required":false,"description":"Otto Verfuegbarkeit filter (German value, e.g. sofort-lieferbar).","on_invalid":"reject","aliases":["verfuegbarkeit"]},{"name":"offset","type":"integer","required":false,"description":"Kept for compatibility only — Otto serves a single result grid per query and ignores any offset above 0, so a non-zero value is refused rather than answered with the same rows. Narrow the list with brand / price / rating / condition / sort instead.","on_invalid":"ignore","default":0,"example":0,"minimum":0}],"returns":"products[] (newest first), query|category, offset, has_more, next_offset","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"sneaker"}},{"name":"brands","description":"Brand filter links available on an Otto.de category landing page — feed the slug to search/browse as the brand filter.","required_params":["category"],"optional_params":[],"params":[{"name":"category","type":"string","required":true,"description":"Otto category path to list brand filters for, e.g. technik.","on_invalid":"reject","example":"technik"}],"returns":"brands[] {name, slug, url}, category","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"technik"}},{"name":"categories","description":"Otto.de department tree — top-level departments from the homepage, or the child categories of a parent path (e.g. parent=technik). Feed paths to browse / brands.","required_params":[],"optional_params":["parent","category"],"params":[{"name":"parent","type":"string","required":false,"description":"Parent category path to list children of (omit for the top-level departments).","on_invalid":"reject","example":"technik","aliases":["category"]}],"returns":"categories[] {name, slug, path, url}, parent","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"parent":"technik"}},{"name":"filters","description":"Discover the sort orders and filter query params supported by Otto.de search/browse, with a live probe showing the available deal campaigns.","required_params":[],"optional_params":[],"params":[],"returns":"sort_options[], supported_filters{}, available_campaigns[], notes[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"reviews","description":"Aggregate customer rating for an Otto.de item — average star rating and total review count from the search-embedded data. Individual review TEXT is only on the standalone product page, which Otto does not serve to this endpoint, so it is not available here (reviews[] is returned empty with text_available=false, honestly).","required_params":["id","query"],"optional_params":["variation_id"],"params":[{"name":"id","type":"string","required":true,"description":"Otto variation id (from search/browse products[].variation_id).","on_invalid":"reject","example":"1786938267","aliases":["variation_id"]},{"name":"query","type":"string","required":true,"description":"Keyword the variation appears under.","on_invalid":"reject","example":"iphone"}],"returns":"rating{average, count}, reviews[] (empty on this tier), text_available, variation_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1786938267","query":"iphone"}}]},{"name":"ouedkniss","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Ouedkniss API scraper — search Algeria's largest classifieds marketplace (ouedkniss.com): keyword and category search with wilaya/city, price-band, photo and sort filters, full ad detail with every photo and the ad's own specification table, the live category tree with its region and city ids, and professional store search. Prices come back in Algerian dinar with the source's own `price_unit` and `price_preview` beside every number; an unpriced ad returns null, never a fake zero. No account, public logged-out data only, no seller phone numbers.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ouedkniss/v1","spec_available":true,"actions":[{"name":"search","description":"Search Ouedkniss classifieds by keyword and/or category, filtered by wilaya (region) ids, city ids, price band, has-photo and has-price, with two sorts and paging (up to 48 ads per page). Give at least `query` or `category`. Returns the source's own `total_results`, the category Ouedkniss matched the search to, and the sibling categories it suggests.","required_params":[],"optional_params":["query","category","region_ids","city_ids","price_min","price_max","has_pictures","has_price","exchange","delivery_available","seller_type","sort","page","page_size","language"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keywords, in French or Arabic — the site's own search box. Give at least `query` or `category`.","on_invalid":"reject","example":"iphone 13","aliases":["q","keywords","search","term"]},{"name":"category","type":"string","required":false,"description":"Ouedkniss category slug (e.g. `telephones`, `automobiles-voitures`, `immobilier-vente`). Read the live slugs with the `categories` action. Give at least `query` or `category`.","on_invalid":"reject","example":"telephones-smartphones","value_pattern":"[a-z0-9][a-z0-9-]{1,80}","aliases":["category_slug","categorySlug","cat"]},{"name":"region_ids","type":"array","required":false,"description":"Numeric wilaya ids (16 = Alger). The `categories` action lists every id with its name. Names are not accepted — Ouedkniss filters on ids only.","on_invalid":"reject","example":["16"],"aliases":["region_id","regions","wilaya","wilaya_ids"]},{"name":"city_ids","type":"array","required":false,"description":"Numeric city/commune ids (560 = Bab el Oued). These are NOT wilaya ids: passing a wilaya id here matches nothing. The `categories` action lists them.","on_invalid":"reject","example":["560"],"aliases":["city_id","cities","commune_ids"]},{"name":"price_min","type":"integer","required":false,"description":"Lower bound of the price band, in the category's own price unit (see `price_unit` on every row).","on_invalid":"reject","example":20000,"minimum":0,"aliases":["min_price","priceMin"]},{"name":"price_max","type":"integer","required":false,"description":"Upper bound of the price band, in the category's own price unit.","on_invalid":"reject","example":120000,"minimum":0,"aliases":["max_price","priceMax"]},{"name":"has_pictures","type":"boolean","required":false,"description":"true keeps only ads that carry at least one photo.","on_invalid":"reject","example":true,"aliases":["with_images","with_photos","hasPictures"]},{"name":"has_price","type":"boolean","required":false,"description":"true keeps only ads that state a price.","on_invalid":"reject","example":true,"aliases":["with_price","hasPrice"]},{"name":"exchange","type":"enum","required":false,"description":"Filter on whether the seller accepts a swap. Omit for both.","on_invalid":"reject","allowed_values":[{"value":"yes","label":"Seller accepts an exchange (échange)"},{"value":"no","label":"Seller does not accept an exchange"}],"example":"yes","aliases":["exchangeable","troc"]},{"name":"delivery_available","type":"boolean","required":false,"description":"true keeps only ads that offer delivery. Ouedkniss publishes no 'no delivery' side of this filter, so false is rejected rather than silently ignored — read `has_delivery` on each row instead.","on_invalid":"reject","example":true,"aliases":["with_delivery","delivery"]},{"name":"seller_type","type":"enum","required":false,"description":"Keep only ads from professional stores, or only ads from private sellers. Omit for both.","on_invalid":"reject","allowed_values":[{"value":"store","label":"Professional stores (boutiques) only"},{"value":"individual","label":"Private sellers only"}],"example":"store","aliases":["origin","seller","from_store"]},{"name":"sort","type":"enum","required":false,"description":"Ouedkniss orders by the ad's refresh time by default; `newest` orders by original creation time.","on_invalid":"reject","allowed_values":[{"value":"refreshed","label":"Most recently bumped (site default)"},{"value":"newest","label":"Most recently created"}],"default":"refreshed","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Ads per page, 1-48 (the site's own maximum is 48).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48,"aliases":["count","limit","per_page"]},{"name":"language","type":"enum","required":false,"description":"Language of the category and specification LABELS Ouedkniss returns. Ad titles and descriptions come back exactly as the seller typed them and are never translated.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"French labels (the site default)"},{"value":"ar","label":"Arabic labels"},{"value":"en","label":"English labels"}],"default":"fr","example":"ar","aliases":["lang","locale"]}],"returns":"query/category/filter echo, language, total_results (the source's own paginator total), page, page_size, last_page, has_more, currency, matched_category{} and suggested_categories[], plus listings[] with listing_id, url, title, description, price (always dinars), price_preview and price_display (the number and string Ouedkniss itself prints, in price_unit), price_preview_basis (total | per_square_metre), price_unit, price_type, price_currency, old_price, exchange_type, city/city_id/region/region_id, store{}, image, images[], image_count, specs[], refreshed_at, status, has_delivery, delivery_type, payment_method, like_count and is_from_store. An ad with no price returns null for all three price numbers — Ouedkniss prints 0 there.","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone 13"}},{"name":"listing","description":"Full detail of one Ouedkniss ad: title, complete description, price with its unit, wilaya and city, the store or private seller, every photo at full size and the ad's own specification table. Accepts the ad id or the ad URL.","required_params":[],"optional_params":["listing_id","url","language"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Numeric ad id — the digits after `-d` in the ad URL. Give `listing_id` or `url`.","on_invalid":"reject","example":"54590864","value_pattern":"\\d{1,12}","aliases":["id","announcement_id","ad_id"]},{"name":"url","type":"string","required":false,"description":"Full ouedkniss.com ad URL; the id is taken from it. Give `listing_id` or `url`.","on_invalid":"reject","example":"https://www.ouedkniss.com/smartphones-iphone13-bab-el-oued-alger-algerie-d54590864","aliases":["listing_url","ad_url","link"]},{"name":"language","type":"enum","required":false,"description":"Language of the category and specification LABELS Ouedkniss returns. Ad titles and descriptions come back exactly as the seller typed them and are never translated.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"French labels (the site default)"},{"value":"ar","label":"Arabic labels"},{"value":"en","label":"English labels"}],"default":"fr","example":"ar","aliases":["lang","locale"]}],"returns":"listing_id, url, title, slug, description, price (dinars), price_preview, price_display, price_preview_basis, price_unit, price_type, price_currency, old_price, exchange_type, created_at, refreshed_at, status, view_count, like_count, city/city_id/region/region_id, category/category_id/category_slug, store{} (with follower_count and announcements_count), seller_user_id, image, images[], image_count, specs[] (label + value), has_delivery, delivery_type, payment_method, is_from_store, language.","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.ouedkniss.com/smartphones-iphone13-bab-el-oued-alger-algerie-d54590864"}},{"name":"categories","description":"The live Ouedkniss category tree — the resolver `search` needs, because a category slug is the strongest filter the marketplace has. With no `category` it returns the top-level categories off the site's own menu; with a `category` slug it returns that category with its children, its parent chain, its price units and its filterable specifications (each with the value list Ouedkniss allows), plus how many ads sit under it right now.","required_params":[],"optional_params":["category","language"],"params":[{"name":"category","type":"string","required":false,"description":"Category slug to open, e.g. `telephones`, `automobiles-voitures`. Omit to list the top-level categories.","on_invalid":"reject","example":"automobiles-voitures","value_pattern":"[a-z0-9][a-z0-9_-]{1,80}","aliases":["category_slug","categorySlug","slug"]},{"name":"language","type":"enum","required":false,"description":"Language of the category and specification LABELS Ouedkniss returns. Ad titles and descriptions come back exactly as the seller typed them and are never translated.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"French labels (the site default)"},{"value":"ar","label":"Arabic labels"},{"value":"en","label":"English labels"}],"default":"fr","example":"ar","aliases":["lang","locale"]}],"returns":"With no category: categories[] (category_id, name, slug, icon). With a category: category{} (category_id, name, slug, icon, price_units, has_delivery, delivery_type, is_without_exchange), children[], parent_tree[], parent{}, specifications[] (codename, label, type, class, is_required, values[]), suggested_categories[] and total_listings.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"automobiles-voitures"}},{"name":"stores","description":"Search the professional stores (boutiques) on Ouedkniss by name or keyword, with their location, follower count and how many ads they run.","required_params":[],"optional_params":["query","page","page_size","language"],"params":[{"name":"query","type":"string","required":true,"description":"Store name or keyword.","on_invalid":"reject","example":"phone","aliases":["q","keywords","name","search"]},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Stores per page, 1-48.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48,"aliases":["count","limit","per_page"]},{"name":"language","type":"enum","required":false,"description":"Language of the category and specification LABELS Ouedkniss returns. Ad titles and descriptions come back exactly as the seller typed them and are never translated.","on_invalid":"reject","allowed_values":[{"value":"fr","label":"French labels (the site default)"},{"value":"ar","label":"Arabic labels"},{"value":"en","label":"English labels"}],"default":"fr","example":"ar","aliases":["lang","locale"]}],"returns":"query echo, total_results, page, page_size, last_page, has_more and stores[] with store_id, name, slug, url, website, description, image, is_official, is_verified, follower_count, announcements_count, city/city_id and region/region_id.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"phone"}}]},{"name":"packages","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Package Registries API — npm (Node.js) and PyPI (Python) metadata, version history, dependencies, download counts and keyword search (no API key required)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/packages/v1","spec_available":true,"actions":[{"name":"package","description":"full package metadata (latest version normalized)","required_params":["registry","name"],"optional_params":[],"params":[{"name":"registry","type":"enum","required":true,"description":"Which package registry to query. npm = Node.js packages; pypi = Python packages. (Synonyms node/nodejs -> npm, python/pip -> pypi.)","on_invalid":"reject","allowed_values":[{"value":"npm","label":"npm (Node.js registry)"},{"value":"pypi","label":"PyPI (Python Package Index)"},{"value":"node","label":"Alias for npm"},{"value":"nodejs","label":"Alias for npm"},{"value":"python","label":"Alias for pypi"},{"value":"pip","label":"Alias for pypi"}],"example":"npm"},{"name":"name","type":"string","required":true,"description":"Exact package name (e.g. npm 'react', PyPI 'requests'). Scoped npm names like '@scope/pkg' are supported.","on_invalid":"reject","example":"react"}],"returns":"package{} — name, latest version, description, license, homepage, repository, keywords, maintainers, dependencies, dist_tags/version_count, links","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"registry":"npm","name":"react"}},{"name":"versions","description":"paginated version list for a package","required_params":["registry","name"],"optional_params":["page","page_size"],"params":[{"name":"registry","type":"enum","required":true,"description":"Which package registry to query. npm = Node.js packages; pypi = Python packages. (Synonyms node/nodejs -> npm, python/pip -> pypi.)","on_invalid":"reject","allowed_values":[{"value":"npm","label":"npm (Node.js registry)"},{"value":"pypi","label":"PyPI (Python Package Index)"},{"value":"node","label":"Alias for npm"},{"value":"nodejs","label":"Alias for npm"},{"value":"python","label":"Alias for pypi"},{"value":"pip","label":"Alias for pypi"}],"example":"npm"},{"name":"name","type":"string","required":true,"description":"Exact package name (e.g. npm 'react', PyPI 'requests'). Scoped npm names like '@scope/pkg' are supported.","on_invalid":"reject","example":"react"},{"name":"page","type":"integer","required":false,"description":"1-based page number for paginated lists (versions / search).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-250, default 50). Larger values are clamped.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":250}],"returns":"versions[] (newest-first: version, latest flag, npm published_at / pypi file count); meta has page, page_size, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"registry":"npm","name":"react","page_size":10}},{"name":"version","description":"single version metadata","required_params":["registry","name","version"],"optional_params":[],"params":[{"name":"registry","type":"enum","required":true,"description":"Which package registry to query. npm = Node.js packages; pypi = Python packages. (Synonyms node/nodejs -> npm, python/pip -> pypi.)","on_invalid":"reject","allowed_values":[{"value":"npm","label":"npm (Node.js registry)"},{"value":"pypi","label":"PyPI (Python Package Index)"},{"value":"node","label":"Alias for npm"},{"value":"nodejs","label":"Alias for npm"},{"value":"python","label":"Alias for pypi"},{"value":"pip","label":"Alias for pypi"}],"example":"npm"},{"name":"name","type":"string","required":true,"description":"Exact package name (e.g. npm 'react', PyPI 'requests'). Scoped npm names like '@scope/pkg' are supported.","on_invalid":"reject","example":"react"},{"name":"version","type":"string","required":true,"description":"Exact version string to fetch (e.g. '18.2.0', '2.31.0').","on_invalid":"reject","example":"18.2.0"}],"returns":"version{} — that version's description, license, homepage, repository, dependencies, dist/engines (npm) or requires_dist/classifiers (pypi)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"registry":"pypi","name":"requests","version":"2.34.2"}},{"name":"dependencies","description":"runtime + dev dependencies for a version (latest if omitted)","required_params":["registry","name"],"optional_params":["version"],"params":[{"name":"registry","type":"enum","required":true,"description":"Which package registry to query. npm = Node.js packages; pypi = Python packages. (Synonyms node/nodejs -> npm, python/pip -> pypi.)","on_invalid":"reject","allowed_values":[{"value":"npm","label":"npm (Node.js registry)"},{"value":"pypi","label":"PyPI (Python Package Index)"},{"value":"node","label":"Alias for npm"},{"value":"nodejs","label":"Alias for npm"},{"value":"python","label":"Alias for pypi"},{"value":"pip","label":"Alias for pypi"}],"example":"npm"},{"name":"name","type":"string","required":true,"description":"Exact package name (e.g. npm 'react', PyPI 'requests'). Scoped npm names like '@scope/pkg' are supported.","on_invalid":"reject","example":"react"},{"name":"version","type":"string","required":false,"description":"Optional exact version; omit to use the latest published version.","on_invalid":"reject","example":"18.2.0"}],"returns":"registry, name, version + dependencies (npm: dependencies/dev/peer/optional; pypi: requires_dist[] + parsed dependencies map)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"registry":"npm","name":"react"}},{"name":"downloads","description":"download statistics (npm: period=last-day|week|month|year; pypi: recent day/week/month)","required_params":["registry","name"],"optional_params":["period"],"params":[{"name":"registry","type":"enum","required":true,"description":"Which package registry to query. npm = Node.js packages; pypi = Python packages. (Synonyms node/nodejs -> npm, python/pip -> pypi.)","on_invalid":"reject","allowed_values":[{"value":"npm","label":"npm (Node.js registry)"},{"value":"pypi","label":"PyPI (Python Package Index)"},{"value":"node","label":"Alias for npm"},{"value":"nodejs","label":"Alias for npm"},{"value":"python","label":"Alias for pypi"},{"value":"pip","label":"Alias for pypi"}],"example":"npm"},{"name":"name","type":"string","required":true,"description":"Exact package name (e.g. npm 'react', PyPI 'requests'). Scoped npm names like '@scope/pkg' are supported.","on_invalid":"reject","example":"react"},{"name":"period","type":"enum","required":false,"description":"npm download window (rejects unknown values). Ignored for PyPI, which always returns recent last-day/last-week/last-month totals.","on_invalid":"reject","allowed_values":[{"value":"last-day","label":"Last day (npm)"},{"value":"last-week","label":"Last week (npm)"},{"value":"last-month","label":"Last month (npm, default)"},{"value":"last-year","label":"Last year (npm)"}],"default":"last-month","example":"last-month"}],"returns":"npm: downloads count for the period (+ start/end); pypi: last_day/last_week/last_month totals (source pypistats.org)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"registry":"npm","name":"react","period":"last-month"}},{"name":"search","description":"search packages (npm: registry API; pypi: libraries.io→HTML→ranked simple-index+enrich)","required_params":["registry","query"],"optional_params":["page","page_size","from"],"params":[{"name":"registry","type":"enum","required":true,"description":"Which package registry to query. npm = Node.js packages; pypi = Python packages. (Synonyms node/nodejs -> npm, python/pip -> pypi.)","on_invalid":"reject","allowed_values":[{"value":"npm","label":"npm (Node.js registry)"},{"value":"pypi","label":"PyPI (Python Package Index)"},{"value":"node","label":"Alias for npm"},{"value":"nodejs","label":"Alias for npm"},{"value":"python","label":"Alias for pypi"},{"value":"pip","label":"Alias for pypi"}],"example":"npm"},{"name":"query","type":"string","required":true,"description":"Free-text search keywords matched against package name/description.","on_invalid":"reject","example":"http client"},{"name":"page","type":"integer","required":false,"description":"1-based page number for paginated lists (versions / search).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-250, default 20). Larger values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":250},{"name":"from","type":"integer","required":false,"description":"npm search only: raw result offset (alternative to page). Page forward with meta.next_from.","on_invalid":"ignore","example":0,"minimum":0}],"returns":"results[] (name, version, description, license, score, links/maintainers); meta has page, page_size, total/has_more, next_page/next_from, method","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"registry":"npm","query":"fastapi"}},{"name":"maintainer","description":"maintainer/author records for a package","required_params":["registry","name"],"optional_params":[],"params":[{"name":"registry","type":"enum","required":true,"description":"Which package registry to query. npm = Node.js packages; pypi = Python packages. (Synonyms node/nodejs -> npm, python/pip -> pypi.)","on_invalid":"reject","allowed_values":[{"value":"npm","label":"npm (Node.js registry)"},{"value":"pypi","label":"PyPI (Python Package Index)"},{"value":"node","label":"Alias for npm"},{"value":"nodejs","label":"Alias for npm"},{"value":"python","label":"Alias for pypi"},{"value":"pip","label":"Alias for pypi"}],"example":"npm"},{"name":"name","type":"string","required":true,"description":"Exact package name (e.g. npm 'react', PyPI 'requests'). Scoped npm names like '@scope/pkg' are supported.","on_invalid":"reject","example":"react"}],"returns":"maintainers[] (name/email) + author/publisher; pypi also author_email/maintainer_email","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"registry":"pypi","name":"requests"}}]},{"name":"paknsave","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"PAK'nSAVE & New World API — New Zealand grocery prices per store from paknsave.co.nz and newworld.co.nz: NZD price, Club+ price, multi-buys, unit price, sold-by-weight, availability, ingredients, allergens, nutrition, categories and stores","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/paknsave/v1","spec_available":true,"actions":[{"name":"search","description":"Search one PAK'nSAVE or New World store's online range: price in NZD, club-card price kept apart from the price, multi-buy, unit price, sold-by-weight details, online / in-store availability, dietary tags and every category placement per product. `query` or `category` is required (either one); filter by brand, dietary tag or deals.","required_params":[],"optional_params":["query","category","store_id","banner","brand","dietary","on_promotion","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"What to search for, as typed in the site's search box. Required unless category is given.","on_invalid":"reject","example":"milk","aliases":["q","keyword","search","term"]},{"name":"category","type":"string","required":false,"description":"Category path from the `categories` action, 1-3 levels joined by ' > ' (e.g. 'Pantry' or 'Fridge, Deli & Eggs > Milk > Fresh Milk'). Case-insensitive.","on_invalid":"reject","example":"Fridge, Deli & Eggs > Milk","aliases":["category_path","department"]},{"name":"store_id","type":"string","required":false,"description":"Store whose prices, deals and range you want: a store_id from the `stores` action, or part of a store name ('Napier', 'Royal Oak'). Prices differ by store. Without it the default store is used (PAK'nSAVE Royal Oak / New World Remuera, Auckland) and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"49037947-e450-49bf-ba1f-a94551c79a72","aliases":["store","storeId"]},{"name":"banner","type":"enum","required":false,"description":"Which Foodstuffs shop: paknsave (default) or newworld. Same platform, own stores, prices and deals; New World has Club+ card prices.","on_invalid":"reject","allowed_values":[{"value":"paknsave","label":"PAK'nSAVE (paknsave.co.nz)"},{"value":"newworld","label":"New World (newworld.co.nz)"}],"default":"paknsave","aliases":["site","chain"]},{"name":"brand","type":"string","required":false,"description":"Only this brand, as a row's `brand` field gives it (case-insensitive).","on_invalid":"reject","example":"Anchor"},{"name":"dietary","type":"string","required":false,"description":"Only products with this dietary tag, as a row's `dietary` list gives it (e.g. Gluten Free, Vegan, Vegetarian, Non-GMO, Low Fat, Low Sugar).","on_invalid":"reject","example":"Gluten Free"},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products on a deal at this store (sale price, multi-buy or club-card price).","on_invalid":"reject","default":false,"aliases":["on_sale","deals_only"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results. The unit-price sorts are the site's own: it ranks the number alone, whatever the unit (\"$0.45/ea\" before \"$0.58/100g\" before \"$1.89/1L\"), using the deal's unit price where a deal is on; to compare across units use each row's unit_price_per_kg / unit_price_per_l (a warning says when a page mixes units).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Popularity (the site's default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"unit_price_asc","label":"Unit price: low to high"},{"value":"unit_price_desc","label":"Unit price: high to low"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Page number, 1-20, 50 products per page. The source shows at most the first 1000 products of a result (total_capped says when).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"banner, store_id, store_name, store_region, store_defaulted, query, category, brand, dietary, on_promotion, sort, total, total_is_exact, total_capped, total_on_promotion (deals), page, page_size, last_page, has_more, returned, products[]{rank, product_id, title, name, brand, size, price (NZD, what everybody pays for one now), regular_price (the source's price without a limited single-unit deal; null on most deals, where the source publishes no earlier price), price_limit, currency, on_promotion, member_price (club-card single-unit price, apart from price), member_price_program ('Club+' on New World), member_price_program_checked (date that name was checked against the site), member_unit_price, member_price_limit, multi_buy{quantity, price, text, card_required, mix_and_match, limit, promotion_id}, price_unit ('each' | 'kg'), unit_price{price, quantity, unit, per, text, per_kg, per_l}, unit_price_per_kg (NZD per kg for weight units, else null), unit_price_per_l (NZD per litre for volume units, else null), sold_by ('unit' | 'weight' | 'unit_or_weight'), weight{average_piece_g, min_order_g, step_g}, available_online, available_in_store, promotions[]{promotion_id, reward_type, quantity, deal_price, card_required, limit, multi_products, best, text, unit_price}, categories[] (every placement, 'A > B > C'), dietary[], origin, restricted, liquor, tobacco, store_id, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk"}},{"name":"deals","description":"Everything on a deal at one store (the site's Deals page): sale prices, multi-buys and club-card prices, optionally narrowed by query, category, brand or dietary tag. Reports the store's own count of deals (total_on_promotion) beyond the 1000-row window.","required_params":[],"optional_params":["query","category","store_id","banner","brand","dietary","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Optional text to narrow the deals.","on_invalid":"reject","example":"chocolate","aliases":["q","keyword","search","term"]},{"name":"category","type":"string","required":false,"description":"Category path from the `categories` action, 1-3 levels joined by ' > ' (e.g. 'Pantry' or 'Fridge, Deli & Eggs > Milk > Fresh Milk'). Case-insensitive.","on_invalid":"reject","example":"Fridge, Deli & Eggs > Milk","aliases":["category_path","department"]},{"name":"store_id","type":"string","required":false,"description":"Store whose prices, deals and range you want: a store_id from the `stores` action, or part of a store name ('Napier', 'Royal Oak'). Prices differ by store. Without it the default store is used (PAK'nSAVE Royal Oak / New World Remuera, Auckland) and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"49037947-e450-49bf-ba1f-a94551c79a72","aliases":["store","storeId"]},{"name":"banner","type":"enum","required":false,"description":"Which Foodstuffs shop: paknsave (default) or newworld. Same platform, own stores, prices and deals; New World has Club+ card prices.","on_invalid":"reject","allowed_values":[{"value":"paknsave","label":"PAK'nSAVE (paknsave.co.nz)"},{"value":"newworld","label":"New World (newworld.co.nz)"}],"default":"paknsave","aliases":["site","chain"]},{"name":"brand","type":"string","required":false,"description":"Only this brand, as a row's `brand` field gives it (case-insensitive).","on_invalid":"reject","example":"Anchor"},{"name":"dietary","type":"string","required":false,"description":"Only products with this dietary tag, as a row's `dietary` list gives it (e.g. Gluten Free, Vegan, Vegetarian, Non-GMO, Low Fat, Low Sugar).","on_invalid":"reject","example":"Gluten Free"},{"name":"sort","type":"enum","required":false,"description":"Order of the results. The unit-price sorts are the site's own: it ranks the number alone, whatever the unit (\"$0.45/ea\" before \"$0.58/100g\" before \"$1.89/1L\"), using the deal's unit price where a deal is on; to compare across units use each row's unit_price_per_kg / unit_price_per_l (a warning says when a page mixes units).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Popularity (the site's default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"unit_price_asc","label":"Unit price: low to high"},{"value":"unit_price_desc","label":"Unit price: high to low"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Page number, 1-20, 50 products per page. The source shows at most the first 1000 products of a result (total_capped says when).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20}],"returns":"banner, store_id, store_name, store_region, store_defaulted, query, category, brand, dietary, on_promotion, sort, total, total_is_exact, total_capped, total_on_promotion (deals), page, page_size, last_page, has_more, returned, products[]{rank, product_id, title, name, brand, size, price (NZD, what everybody pays for one now), regular_price (the source's price without a limited single-unit deal; null on most deals, where the source publishes no earlier price), price_limit, currency, on_promotion, member_price (club-card single-unit price, apart from price), member_price_program ('Club+' on New World), member_price_program_checked (date that name was checked against the site), member_unit_price, member_price_limit, multi_buy{quantity, price, text, card_required, mix_and_match, limit, promotion_id}, price_unit ('each' | 'kg'), unit_price{price, quantity, unit, per, text, per_kg, per_l}, unit_price_per_kg (NZD per kg for weight units, else null), unit_price_per_l (NZD per litre for volume units, else null), sold_by ('unit' | 'weight' | 'unit_or_weight'), weight{average_piece_g, min_order_g, step_g}, available_online, available_in_store, promotions[]{promotion_id, reward_type, quantity, deal_price, card_required, limit, multi_products, best, text, unit_price}, categories[] (every placement, 'A > B > C'), dietary[], origin, restricted, liquor, tobacco, store_id, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"banner":"newworld","query":"chocolate"}},{"name":"product","description":"One product at one store: price, club-card price, multi-buy with start / end dates, unit price, barcode (or PLU for weighed goods), description, ingredients, allergens, nutrition panel, dietary tags, origin, images and availability. NOT_FOUND when the store does not sell it.","required_params":["product_id"],"optional_params":["store_id","banner"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product_id of a search row (e.g. 5201490-EA-000, 5046542-KGM-000) or the product page URL.","on_invalid":"reject","example":"5201490-EA-000","aliases":["id","productId","url","product_url"]},{"name":"store_id","type":"string","required":false,"description":"Store whose prices, deals and range you want: a store_id from the `stores` action, or part of a store name ('Napier', 'Royal Oak'). Prices differ by store. Without it the default store is used (PAK'nSAVE Royal Oak / New World Remuera, Auckland) and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"49037947-e450-49bf-ba1f-a94551c79a72","aliases":["store","storeId"]},{"name":"banner","type":"enum","required":false,"description":"Which Foodstuffs shop: paknsave (default) or newworld. Same platform, own stores, prices and deals; New World has Club+ card prices.","on_invalid":"reject","allowed_values":[{"value":"paknsave","label":"PAK'nSAVE (paknsave.co.nz)"},{"value":"newworld","label":"New World (newworld.co.nz)"}],"default":"paknsave","aliases":["site","chain"]}],"returns":"banner, store_id, store_name, store_region, store_defaulted, product{product_id, title, name, brand, size, net_content, price, regular_price, price_limit, currency, on_promotion, member_price, member_price_program, member_price_program_checked, member_unit_price, member_price_limit, multi_buy{…}, non_member_price, price_unit, unit_price{…}, unit_price_per_kg, unit_price_per_l, price_valid_text, sold_by, weight{…}, available_online, available_in_store, fulfilment[]{method, available}, promotions[]{promotion_id, reward_type, quantity, deal_price, card_required, limit, multi_products, text, starts, ends, linked_products[]}, barcode, plu, description, ingredients, allergens, nutrition{servings_per_pack, nutrients[]{nutrient, code, value, unit, basis, basis_quantity, basis_unit, precision, serving_size}}, categories[], category_paths[], dietary[], origin, in_store_made, restricted, images[], image_sizes{}, store_id, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"5010431-EA-000"}},{"name":"categories","description":"The category tree of one store (names and paths to pass as `category`).","required_params":[],"optional_params":["store_id","banner"],"params":[{"name":"store_id","type":"string","required":false,"description":"Store whose prices, deals and range you want: a store_id from the `stores` action, or part of a store name ('Napier', 'Royal Oak'). Prices differ by store. Without it the default store is used (PAK'nSAVE Royal Oak / New World Remuera, Auckland) and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"49037947-e450-49bf-ba1f-a94551c79a72","aliases":["store","storeId"]},{"name":"banner","type":"enum","required":false,"description":"Which Foodstuffs shop: paknsave (default) or newworld. Same platform, own stores, prices and deals; New World has Club+ card prices.","on_invalid":"reject","allowed_values":[{"value":"paknsave","label":"PAK'nSAVE (paknsave.co.nz)"},{"value":"newworld","label":"New World (newworld.co.nz)"}],"default":"paknsave","aliases":["site","chain"]}],"returns":"banner, store_id, store_name, store_defaulted, departments, total_categories, categories[]{name, path, level, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"banner":"paknsave"}},{"name":"stores","description":"PAK'nSAVE or New World store directory: store_id, name, address, region, island, coordinates, the store's own phone, opening hours, click & collect / delivery. Narrow by text (name, address, city or region) or island, or sort by distance from a point.","required_params":[],"optional_params":["banner","query","region","latitude","longitude","limit"],"params":[{"name":"banner","type":"enum","required":false,"description":"Which Foodstuffs shop: paknsave (default) or newworld. Same platform, own stores, prices and deals; New World has Club+ card prices.","on_invalid":"reject","allowed_values":[{"value":"paknsave","label":"PAK'nSAVE (paknsave.co.nz)"},{"value":"newworld","label":"New World (newworld.co.nz)"}],"default":"paknsave","aliases":["site","chain"]},{"name":"query","type":"string","required":false,"description":"Part of the store name, address, city, locality or region (case-insensitive): 'Auckland' finds every store in the Auckland region, also those whose address does not say Auckland.","on_invalid":"reject","example":"Napier","aliases":["q","name","city"]},{"name":"region","type":"enum","required":false,"description":"Only stores on this island.","on_invalid":"reject","allowed_values":[{"value":"NI","label":"North Island"},{"value":"SI","label":"South Island"}]},{"name":"latitude","type":"number","required":false,"description":"With longitude: sort stores by straight-line distance from this point (distance_km).","on_invalid":"reject","example":-36.8485,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"With latitude.","on_invalid":"reject","example":174.7633,"aliases":["lng","lon"]},{"name":"limit","type":"integer","required":false,"description":"How many stores to return (default all).","on_invalid":"reject","default":200,"minimum":1,"maximum":200}],"returns":"banner, total_stores, returned, stores[]{store_id, name, banner, region ('NI' | 'SI'), region_name ('Auckland', 'Canterbury' …), city, locality, postal_code, address, latitude, longitude, distance_km, phone (the store's own number, digits; null when the source has none or gives the same number to several stores), national_phone (the chain's 0800 number), click_and_collect, delivery, online_active, physical_store_code, hours{monday … sunday}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"banner":"newworld","query":"Auckland"}}]},{"name":"pakwheels","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"PakWheels API scraper — Pakistan's largest vehicle marketplace (pakwheels.com). Search the live Pakistani used-car, used-motorcycle and auto-parts markets with the site's own filters (make, model, city, province, body type, fuel, transmission, colour, assembly, origin, dealer vs individual, price in PKR, model year, odometer) and pull the full ad: exact rupee price alongside the site's own 'lacs/crore' string, odometer, engine, colour, registration city, every photo, the seller's comments, the feature list and the seller's public profile. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pakwheels/v1","spec_available":true,"actions":[{"name":"car_search","description":"Search the live Pakistani used-car market on pakwheels.com. Every row is one ad: make, model, variant, model year, asking price in exact PKR rupees plus the site's own printed string ('PKR 2.07 crore'), odometer in km, fuel, engine size, transmission, city, photo, photo count, whether the seller paid to feature it, whether PakWheels manages the sale, and when it was last bumped. total_results is the site's own count, and page_size, pages and page_window come from the response rather than from a constant. Every filter offered here was measured to move that total in the same run; filters the source accepts and ignores are deliberately absent. Call with no parameters to page the whole market.","required_params":[],"optional_params":["query","make","model","city","province","body_type","fuel","transmission","color","assembly","origin","seller_kind","price_min","price_max","year_min","year_max","mileage_min","mileage_max","inspected_only","featured_only","with_pictures","with_video","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, passed to the site's own search box. Measured to bite: 83,786 cars → 10,716 for 'corolla'; 58,934 parts → 661 for 'clutch'.","on_invalid":"reject","example":"corolla","aliases":["q","keyword","search"]},{"name":"make","type":"string","required":false,"description":"Make, as PakWheels spells it in its own urls (lower-case, hyphenated: 'toyota', 'suzuki', 'honda', 'mercedes-benz'). Measured bite: 83,786 → 22,876 for toyota. Hundreds of makes are listed, so this is an open text token, not a closed enum; an unknown make makes the source answer 404 and you get NOT_FOUND, never a full catalogue.","on_invalid":"reject","example":"toyota","value_pattern":"[a-z0-9]+(?:-[a-z0-9]+)*","aliases":["brand","manufacturer"]},{"name":"model","type":"string","required":false,"description":"Model slug, used together with make. Measured: toyota 22,876 → toyota+corolla 9,993.","on_invalid":"reject","example":"corolla","value_pattern":"[a-z0-9]+(?:-[a-z0-9]+)*"},{"name":"city","type":"string","required":false,"description":"City or region slug ('lahore', 'karachi', 'islamabad', 'rawalpindi'…). Measured bite: 83,786 → 11,441 for lahore.","on_invalid":"reject","example":"lahore","value_pattern":"[a-z0-9]+(?:-[a-z0-9]+)*","aliases":["region"]},{"name":"province","type":"enum","required":false,"description":"Province. Measured bite: 83,786 → 46,872 for punjab.","on_invalid":"reject","allowed_values":[{"value":"punjab","label":"Punjab"},{"value":"sindh","label":"Sindh"},{"value":"kpk","label":"Khyber Pakhtunkhwa"},{"value":"balochistan","label":"Balochistan"},{"value":"azad-kashmir","label":"Azad Kashmir"},{"value":"islamabad-capital-territory","label":"Islamabad Capital Territory"},{"value":"gilgit-baltistan","label":"Gilgit Baltistan"},{"value":"federally-administered-tribal-areas","label":"Federally Administered Tribal Areas"}],"example":"punjab"},{"name":"body_type","type":"array","required":false,"description":"Body type, one or more. Measured bite: 83,786 → 29,232 for sedan.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan"},{"value":"hatchback","label":"Hatchback"},{"value":"suv","label":"SUV"},{"value":"crossover","label":"Crossover"},{"value":"van","label":"Van"},{"value":"mini-van","label":"Mini Van"},{"value":"pick-up","label":"Pick Up"},{"value":"double-cabin","label":"Double Cabin"},{"value":"single-cabin","label":"Single Cabin"},{"value":"coupe","label":"Coupe"},{"value":"convertible","label":"Convertible"},{"value":"compact-sedan","label":"Compact sedan"},{"value":"compact-suv","label":"Compact SUV"},{"value":"mpv","label":"MPV"},{"value":"mini-vehicles","label":"Mini Vehicles"},{"value":"station-wagon","label":"Station Wagon"},{"value":"truck","label":"Truck"},{"value":"high-roof","label":"High Roof"},{"value":"micro-van","label":"Micro Van"},{"value":"subcompact-hatchback","label":"Subcompact hatchback"}],"example":"suv"},{"name":"fuel","type":"array","required":false,"description":"Fuel / drivetrain energy. Measured bite: 83,786 → 72,528 for petrol.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol"},{"value":"diesel","label":"Diesel"},{"value":"hybrid","label":"Hybrid"},{"value":"electric","label":"Electric"},{"value":"phev","label":"PHEV (plug-in hybrid)"},{"value":"cng","label":"CNG"},{"value":"lpg","label":"LPG"}],"example":"hybrid"},{"name":"transmission","type":"enum","required":false,"description":"Measured bite: 83,786 → 48,222 for automatic.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"}],"example":"automatic","aliases":["gearbox"]},{"name":"color","type":"array","required":false,"description":"Exterior colour. Measured bite: 83,786 → 33,862 for white.","on_invalid":"reject","allowed_values":[{"value":"white","label":"White"},{"value":"black","label":"Black"},{"value":"silver","label":"Silver"},{"value":"grey","label":"Grey"},{"value":"blue","label":"Blue"},{"value":"red","label":"Red"},{"value":"green","label":"Green"},{"value":"brown","label":"Brown"},{"value":"maroon","label":"Maroon"},{"value":"gold","label":"Gold"},{"value":"beige","label":"Beige"},{"value":"gun-metallic","label":"Gun Metallic"},{"value":"pearl-white","label":"Pearl White"},{"value":"bronze","label":"Bronze"},{"value":"burgundy","label":"Burgundy"},{"value":"indigo","label":"Indigo"},{"value":"navy","label":"Navy"},{"value":"orange","label":"Orange"},{"value":"pink","label":"Pink"},{"value":"purple","label":"Purple"},{"value":"turquoise","label":"Turquoise"},{"value":"yellow","label":"Yellow"},{"value":"unlisted","label":"Unlisted"}],"example":"white"},{"name":"assembly","type":"enum","required":false,"description":"Locally assembled or imported. Measured: local 60,914, imported 22,872.","on_invalid":"reject","allowed_values":[{"value":"local","label":"Local"},{"value":"imported","label":"Imported"}],"example":"imported"},{"name":"origin","type":"enum","required":false,"description":"Country-of-origin group as the site groups it. Measured bite: 83,786 → 14,832 for japanese.","on_invalid":"reject","allowed_values":[{"value":"japanese","label":"Japanese"},{"value":"german","label":"German"},{"value":"korean","label":"Korean"},{"value":"chinese","label":"Chinese"},{"value":"american","label":"American"},{"value":"european","label":"European"},{"value":"british","label":"British"},{"value":"indian","label":"Indian"},{"value":"pakistani","label":"Pakistani"}],"example":"japanese"},{"name":"seller_kind","type":"enum","required":false,"description":"Who is selling. The two values are the site's own facet labels; measured 73,130 individual ads and 10,656 dealer ads.","on_invalid":"reject","allowed_values":[{"value":"individual","label":"Individuals — the site's own facet label (seller_1, 73,130 ads)"},{"value":"dealer","label":"Dealers — the site's own facet label (seller_2, 10,656 ads)"}],"example":"dealer","aliases":["seller_type","seller"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in PKR (whole rupees — PakWheels prices are written as 'lacs' and 'crore' on the page but this API takes and returns the exact rupee figure). Measured bite: 1,000,000-2,000,000 → 17,473.","on_invalid":"reject","example":1000000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in PKR. Sent together with price_min — the source wants both halves of the range, so a one-sided request is completed with 0 / 100,000,000.","on_invalid":"reject","example":2000000,"minimum":0,"aliases":["max_price"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. Measured bite: 2018-2022 → 23,032.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100,"aliases":["min_year"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","example":2022,"minimum":1900,"maximum":2100,"aliases":["max_year"]},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading in km. Measured bite: 0-50,000 → 22,654.","on_invalid":"reject","example":0,"minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading in km.","on_invalid":"reject","example":50000,"minimum":0},{"name":"inspected_only","type":"boolean","required":false,"description":"Only ads PakWheels has inspected itself (the site's 'PakWheels Inspected' facet). Measured bite: 83,786 → 2,688.","on_invalid":"reject","default":false},{"name":"featured_only","type":"boolean","required":false,"description":"Only ads whose seller paid to feature them. Measured bite: 83,786 → 12,873. Note that featured ads are ordinary results, not a separate block: every row carries a `featured` flag.","on_invalid":"reject","default":false},{"name":"with_pictures","type":"boolean","required":false,"description":"Only ads that have at least one photo. Measured bite: 83,786 → 83,260, so almost every ad has pictures.","on_invalid":"reject","default":false},{"name":"with_video","type":"boolean","required":false,"description":"Only ads with a video. Measured bite: 83,786 → 186 — this is a very small slice of the market, which is exactly why it is worth saying.","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order. An explicit order is ALWAYS sent, because with no order the source injects extra promoted rows on top of the page (measured 29 rows for a window it declared as 1-25) and those rows repeat between pages. An unrecognised value is silently dropped by the source, so it is rejected here instead.","on_invalid":"reject","allowed_values":[{"value":"bumped_at-desc","label":"Updated date: recent first (the site's own default)"},{"value":"bumped_at-asc","label":"Updated date: oldest first"},{"value":"price-asc","label":"Price: low to high"},{"value":"price-desc","label":"Price: high to low"},{"value":"model_year-desc","label":"Model year: latest first"},{"value":"model_year-asc","label":"Model year: oldest first"},{"value":"mileage-asc","label":"Mileage: low to high"},{"value":"mileage-desc","label":"Mileage: high to low"}],"default":"bumped_at-desc","example":"price-asc","aliases":["sortby","order"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Pages hold 25 rows on the car and bike surfaces and 24 on the parts surface (measured, not assumed). The source serves every page its own total implies — the unfiltered car market's last page is 3352 and it carries the final 10 of 83,785 ads — and a page beyond the last REDIRECTS to the last page rather than replaying page 1. The response reports page_window (what the site says it served), pages and reachable_results so you never have to guess.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5000}],"returns":"{total_results, page, page_size, pages, reachable_results, page_window, has_more, count, duplicates_dropped, filters_applied, search_url, cars[]} — each car has ad_id, url, title, price_pkr, price_currency, price_display, price_before_discount_pkr, price_before_discount_display, price_on_request, city, brand, model, variant, year, mileage_km, fuel, engine_cc, engine_type, transmission, image_url, images_count, featured, managed_by_pakwheels, availability and updated_text.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"make":"toyota","city":"lahore","max_results":20}},{"name":"car_listing","description":"The FULL ad behind a car ad_id: everything the detail page publishes. Adds what a search row cannot carry — the seller's own free-text comments, the complete feature list, every photo at slide size, exterior colour, body type, assembly, the city the car is registered in, the ad reference number, the last-updated date, the site's own label/value spec table verbatim, and the seller block (display name, member-since date, profile image). The one field this surface does NOT publish is the phone number: the page prints a mask and the real number sits behind a click, so no fake field is returned. A dead id answers NOT_FOUND, never an empty success.","required_params":["ad_id"],"optional_params":[],"params":[{"name":"ad_id","type":"string","required":true,"description":"The numeric ad id exactly as a search row returns it in ad_id. The slug is not needed: /used-cars/<id> redirects to the canonical url (measured). A removed or non-existent id answers a real HTTP 404 upstream and becomes NOT_FOUND.","on_invalid":"reject","example":"12075989","value_pattern":"\\d{4,12}","aliases":["id","listing_id"]}],"returns":"{car:{ad_id, url, title, price_pkr, price_currency, price_display, price_on_request, availability, condition, brand, model, year, mileage_km, fuel, transmission, color, body_type, engine_cc, engine_type, assembly, registered_in, last_updated, ad_reference, description, image_url, images[], images_count, specs{}, features[], seller{}, similar_ads_on_page}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"ad_id":"12075989"}},{"name":"bike_search","description":"Search the live Pakistani used-motorcycle and scooter market. Same row shape as the car search where the source publishes the same facts: make, model, year, exact PKR price plus the printed string, odometer, engine type, city, photo, featured flag and bump time. 🔴 This surface is NOT the car surface with a different path — it was measured separately: bike result rows carry no embedded product schema (0 blocks for 25 rows, against 25+ on the car surface), so the row data is read from the row markup and the engine-size, body type, colour and assembly filters the car surface offers are not offered here because they are not part of this surface's own facet set. Measured market size 21,573 bikes.","required_params":[],"optional_params":["query","make","model","city","province","fuel","seller_kind","price_min","price_max","year_min","year_max","mileage_min","mileage_max","featured_only","with_pictures","with_video","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, passed to the site's own search box. Measured to bite: 83,786 cars → 10,716 for 'corolla'; 58,934 parts → 661 for 'clutch'.","on_invalid":"reject","example":"corolla","aliases":["q","keyword","search"]},{"name":"make","type":"string","required":false,"description":"Make, as PakWheels spells it in its own urls (lower-case, hyphenated: 'toyota', 'suzuki', 'honda', 'mercedes-benz'). Measured bite: 83,786 → 22,876 for toyota. Hundreds of makes are listed, so this is an open text token, not a closed enum; an unknown make makes the source answer 404 and you get NOT_FOUND, never a full catalogue.","on_invalid":"reject","example":"toyota","value_pattern":"[a-z0-9]+(?:-[a-z0-9]+)*","aliases":["brand","manufacturer"]},{"name":"model","type":"string","required":false,"description":"Model slug, used together with make. Measured: toyota 22,876 → toyota+corolla 9,993.","on_invalid":"reject","example":"corolla","value_pattern":"[a-z0-9]+(?:-[a-z0-9]+)*"},{"name":"city","type":"string","required":false,"description":"City or region slug ('lahore', 'karachi', 'islamabad', 'rawalpindi'…). Measured bite: 83,786 → 11,441 for lahore.","on_invalid":"reject","example":"lahore","value_pattern":"[a-z0-9]+(?:-[a-z0-9]+)*","aliases":["region"]},{"name":"province","type":"enum","required":false,"description":"Province. Measured bite: 83,786 → 46,872 for punjab.","on_invalid":"reject","allowed_values":[{"value":"punjab","label":"Punjab"},{"value":"sindh","label":"Sindh"},{"value":"kpk","label":"Khyber Pakhtunkhwa"},{"value":"balochistan","label":"Balochistan"},{"value":"azad-kashmir","label":"Azad Kashmir"},{"value":"islamabad-capital-territory","label":"Islamabad Capital Territory"},{"value":"gilgit-baltistan","label":"Gilgit Baltistan"},{"value":"federally-administered-tribal-areas","label":"Federally Administered Tribal Areas"}],"example":"punjab"},{"name":"fuel","type":"array","required":false,"description":"Fuel / drivetrain energy. Measured bite: 83,786 → 72,528 for petrol.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol"},{"value":"diesel","label":"Diesel"},{"value":"hybrid","label":"Hybrid"},{"value":"electric","label":"Electric"},{"value":"phev","label":"PHEV (plug-in hybrid)"},{"value":"cng","label":"CNG"},{"value":"lpg","label":"LPG"}],"example":"hybrid"},{"name":"seller_kind","type":"enum","required":false,"description":"Who is selling. The two values are the site's own facet labels; measured 73,130 individual ads and 10,656 dealer ads.","on_invalid":"reject","allowed_values":[{"value":"individual","label":"Individuals — the site's own facet label (seller_1, 73,130 ads)"},{"value":"dealer","label":"Dealers — the site's own facet label (seller_2, 10,656 ads)"}],"example":"dealer","aliases":["seller_type","seller"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in PKR (whole rupees — PakWheels prices are written as 'lacs' and 'crore' on the page but this API takes and returns the exact rupee figure). Measured bite: 1,000,000-2,000,000 → 17,473.","on_invalid":"reject","example":1000000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in PKR. Sent together with price_min — the source wants both halves of the range, so a one-sided request is completed with 0 / 100,000,000.","on_invalid":"reject","example":2000000,"minimum":0,"aliases":["max_price"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. Measured bite: 2018-2022 → 23,032.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100,"aliases":["min_year"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","example":2022,"minimum":1900,"maximum":2100,"aliases":["max_year"]},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading in km. Measured bite: 0-50,000 → 22,654.","on_invalid":"reject","example":0,"minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading in km.","on_invalid":"reject","example":50000,"minimum":0},{"name":"featured_only","type":"boolean","required":false,"description":"Only ads whose seller paid to feature them. Measured bite: 83,786 → 12,873. Note that featured ads are ordinary results, not a separate block: every row carries a `featured` flag.","on_invalid":"reject","default":false},{"name":"with_pictures","type":"boolean","required":false,"description":"Only ads that have at least one photo. Measured bite: 83,786 → 83,260, so almost every ad has pictures.","on_invalid":"reject","default":false},{"name":"with_video","type":"boolean","required":false,"description":"Only ads with a video. Measured bite: 83,786 → 186 — this is a very small slice of the market, which is exactly why it is worth saying.","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order. An explicit order is ALWAYS sent, because with no order the source injects extra promoted rows on top of the page (measured 29 rows for a window it declared as 1-25) and those rows repeat between pages. An unrecognised value is silently dropped by the source, so it is rejected here instead.","on_invalid":"reject","allowed_values":[{"value":"bumped_at-desc","label":"Updated date: recent first (the site's own default)"},{"value":"bumped_at-asc","label":"Updated date: oldest first"},{"value":"price-asc","label":"Price: low to high"},{"value":"price-desc","label":"Price: high to low"},{"value":"model_year-desc","label":"Model year: latest first"},{"value":"model_year-asc","label":"Model year: oldest first"},{"value":"mileage-asc","label":"Mileage: low to high"},{"value":"mileage-desc","label":"Mileage: high to low"}],"default":"bumped_at-desc","example":"price-asc","aliases":["sortby","order"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Pages hold 25 rows on the car and bike surfaces and 24 on the parts surface (measured, not assumed). The source serves every page its own total implies — the unfiltered car market's last page is 3352 and it carries the final 10 of 83,785 ads — and a page beyond the last REDIRECTS to the last page rather than replaying page 1. The response reports page_window (what the site says it served), pages and reachable_results so you never have to guess.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5000}],"returns":"Same envelope as car_search with a bikes[] list; each bike has ad_id, url, title, price_pkr, price_currency, price_display, price_on_request, city, brand, model, year, mileage_km, engine_type ('4 Stroke' / '2 Stroke' / 'Electric' - 36/36 filled), image_url, images_count, featured, managed_by_pakwheels and updated_text. Engine size, gearbox and availability are NOT returned: this surface does not publish them (measured 0/36).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"corolla"}},{"name":"bike_listing","description":"The FULL ad behind a bike ad_id: the seller's comments, the bike-feature list (disc brake, LED light…), every photo, colour, registered-in city, assembly, body type, engine type, the ad reference, the last-updated date, the site's own spec table verbatim and the seller block. A dead id answers NOT_FOUND.","required_params":["ad_id"],"optional_params":[],"params":[{"name":"ad_id","type":"string","required":true,"description":"The numeric ad id exactly as a search row returns it in ad_id. The slug is not needed: /used-cars/<id> redirects to the canonical url (measured). A removed or non-existent id answers a real HTTP 404 upstream and becomes NOT_FOUND.","on_invalid":"reject","example":"12075989","value_pattern":"\\d{4,12}","aliases":["id","listing_id"]}],"returns":"{bike:{…same shape as car_listing.car, minus the car-only keys the bike page does not publish}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"ad_id":"12075989"}},{"name":"part_search","description":"Search PakWheels' auto-parts and accessories marketplace: 58,934 live listings measured on 2026-10-02. Every row is one part: title, exact PKR price, the site's own two-level category path (for example 'Engine & Mechanical' → 'Car Clutch Plate'), photo, photo count and whether it is available for instant Buy Now checkout. 🔴 Only the keyword filter is offered on this surface, and that is a measurement, not an omission: the city filter that bites on cars and bikes is accepted with HTTP 200 and silently ignored here (58,934 → 58,934, byte-identical), so it is not exposed. Keyword does bite: 58,934 → 661 for 'clutch'. Pages hold 24 rows on this surface, not 25.","required_params":[],"optional_params":["query","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, passed to the site's own search box. Measured to bite: 83,786 cars → 10,716 for 'corolla'; 58,934 parts → 661 for 'clutch'.","on_invalid":"reject","example":"corolla","aliases":["q","keyword","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order. An explicit order is ALWAYS sent, because with no order the source injects extra promoted rows on top of the page (measured 29 rows for a window it declared as 1-25) and those rows repeat between pages. An unrecognised value is silently dropped by the source, so it is rejected here instead.","on_invalid":"reject","allowed_values":[{"value":"bumped_at-desc","label":"Updated date: recent first (the site's own default)"},{"value":"bumped_at-asc","label":"Updated date: oldest first"},{"value":"price-asc","label":"Price: low to high"},{"value":"price-desc","label":"Price: high to low"},{"value":"model_year-desc","label":"Model year: latest first"},{"value":"model_year-asc","label":"Model year: oldest first"},{"value":"mileage-asc","label":"Mileage: low to high"},{"value":"mileage-desc","label":"Mileage: high to low"}],"default":"bumped_at-desc","example":"price-asc","aliases":["sortby","order"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Pages hold 25 rows on the car and bike surfaces and 24 on the parts surface (measured, not assumed). The source serves every page its own total implies — the unfiltered car market's last page is 3352 and it carries the final 10 of 83,785 ads — and a page beyond the last REDIRECTS to the last page rather than replaying page 1. The response reports page_window (what the site says it served), pages and reachable_results so you never have to guess.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":5000}],"returns":"{total_results, page, page_size, pages, reachable_results, page_window, has_more, count, duplicates_dropped, filters_applied, search_url, parts[]} — each part has ad_id, url, title, price_pkr, price_currency, price_display, price_before_discount_pkr, price_before_discount_display, price_on_request, category, sub_category, image_url, images_count, buy_now, featured.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"corolla"}},{"name":"part_listing","description":"The full parts/accessory ad behind an ad_id: the seller's own description, the stock keeping id the site assigns, the brand, every photo and the site's own spec table. A dead id answers NOT_FOUND.","required_params":["ad_id"],"optional_params":[],"params":[{"name":"ad_id","type":"string","required":true,"description":"The numeric ad id exactly as a search row returns it in ad_id. The slug is not needed: /used-cars/<id> redirects to the canonical url (measured). A removed or non-existent id answers a real HTTP 404 upstream and becomes NOT_FOUND.","on_invalid":"reject","example":"12075989","value_pattern":"\\d{4,12}","aliases":["id","listing_id"]}],"returns":"{part:{ad_id, url, title, price_pkr, price_currency, price_display, availability, brand, sku, description, image_url, images[], images_count, specs{}, features[], seller{}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"ad_id":"12075989"}},{"name":"filter_options","description":"The filter vocabulary this API accepts, group by group, with the label PakWheels itself prints next to each value and the measured ad count behind the ones that were counted. Read this before building a filter UI. It is served from the vocabulary the engine validates against, so it costs no upstream request and can never drift away from what the API will accept. Make, model and city are deliberately NOT enumerated here: PakWheels lists hundreds of each and they are open text tokens in its own urls.","required_params":[],"optional_params":[],"params":[],"returns":"{sorts[], body_types[], fuels[], transmissions[], colors[], assembly[], origins[], seller_kinds[], provinces[], open_text_filters[], notes{}}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"paris-cl","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Paris.cl API — Chile's Paris department store and Marketplace: search, categories, normal / internet / Tarjeta Cencosud prices, variants, EAN, seller, stock per comuna, ratings and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/paris-cl/v1","spec_available":true,"actions":[{"name":"search","description":"Search Paris.cl (Cencosud, Chile) — Paris's own stock and its Marketplace shops. One page of products: id, name, brand, the search index's lowest price (`search_index_price`: the Tarjeta Cencosud price when there is one), discount %, seller and whether it is Paris or a Marketplace shop, product type, category path, rating, review count, image and every size/colour variant with its own SKU — plus the source's facet counts (brands, seller types, product types, price and discount bands). Filters: brand, seller_type, min_price, max_price, category; sort; page. By default the same in-stock view the site shows. For the three separate prices (normal / internet / card) call `product`. `query` is required.","required_params":["query"],"optional_params":["category","page","page_size","sort","brand","seller_type","min_price","max_price","include_unavailable"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the paris.cl search box (Spanish: notebook, zapatillas, sofá, perfume).","on_invalid":"reject","example":"notebook","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"Narrow the search to one category id (from `categories` or a row's `category_id`).","on_invalid":"reject","example":"tecCompNotebooks","aliases":["category_id","categoria"]},{"name":"page","type":"integer","required":false,"description":"Result page. `last_page` in the answer is the last reachable page; the source stops counting at 10,000 results (`total_capped`).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-60; the site shows 24 on a phone).","on_invalid":"reject","default":24,"minimum":1,"maximum":60,"aliases":["limit","per_page"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results. Price sorts use the search index's price (`search_index_price`).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (the site's default)"},{"value":"price_low","label":"Lowest price first (the price shown on the card)"},{"value":"price_high","label":"Highest price first"},{"value":"discount","label":"Biggest discount first"},{"value":"newest","label":"Newest first"},{"value":"rating","label":"Best rated first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled exactly as in `facets` (case-sensitive at the source: 'Adidas' 2,317 sneakers, 'adidas' 0). One brand per call.","on_invalid":"reject","example":"Samsung","aliases":["marca"]},{"name":"seller_type","type":"enum","required":false,"description":"Sold by Paris itself or by a Marketplace shop (notebook: 453 Paris, 5,975 Marketplace in the raw index).","on_invalid":"reject","allowed_values":[{"value":"paris","label":"Sold by Paris"},{"value":"marketplace","label":"Sold by a Marketplace shop"}],"aliases":["sold_by","vendido_por"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest search-index price (`search_index_price`) in whole CLP, e.g. 10000.","on_invalid":"reject","minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest search-index price (`search_index_price`) in whole CLP, e.g. 20000.","on_invalid":"reject","minimum":0,"aliases":["price_max"]},{"name":"include_unavailable","type":"boolean","required":false,"description":"false (default) = exactly what paris.cl lists: products with stock for delivery or pickup. true = the whole index, unavailable products included (notebook 837 vs 6,441).","on_invalid":"reject","default":false}],"returns":"query/category_id, total (the source's count), total_capped, page, page_size, last_page, beyond_last_page, returned, results[]{id, variation_id, name, brand, url, search_index_price, search_index_price_note, discount_pct, currency, seller, sellers[], seller_type, product_type, category, category_id, category_path[], rating, review_count, image, color, model, variant_count, variants[]{sku, size, color, search_index_price, image}, rank}, facets[]{name, label, values[]{value, label, count}}, categories[]{id, name, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"notebook"}},{"name":"category","description":"Browse one Paris.cl category (e.g. tecCompNotebooks = Notebooks, tecnologia = Tecno) — the same rows, filters, sort and facets as `search`, without a keyword. Category ids come from `categories` or from a search row's `category_id`. `category` is required.","required_params":["category"],"optional_params":["page","page_size","sort","brand","seller_type","min_price","max_price","include_unavailable"],"params":[{"name":"category","type":"string","required":true,"description":"Category id exactly as `categories` returns it (case-sensitive: tecCompNotebooks, homModPoleras, tecnologia).","on_invalid":"reject","example":"tecCompNotebooks","aliases":["category_id","categoria","group_id"]},{"name":"page","type":"integer","required":false,"description":"Result page. `last_page` in the answer is the last reachable page; the source stops counting at 10,000 results (`total_capped`).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-60; the site shows 24 on a phone).","on_invalid":"reject","default":24,"minimum":1,"maximum":60,"aliases":["limit","per_page"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results. Price sorts use the search index's price (`search_index_price`).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (the site's default)"},{"value":"price_low","label":"Lowest price first (the price shown on the card)"},{"value":"price_high","label":"Highest price first"},{"value":"discount","label":"Biggest discount first"},{"value":"newest","label":"Newest first"},{"value":"rating","label":"Best rated first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled exactly as in `facets` (case-sensitive at the source: 'Adidas' 2,317 sneakers, 'adidas' 0). One brand per call.","on_invalid":"reject","example":"Samsung","aliases":["marca"]},{"name":"seller_type","type":"enum","required":false,"description":"Sold by Paris itself or by a Marketplace shop (notebook: 453 Paris, 5,975 Marketplace in the raw index).","on_invalid":"reject","allowed_values":[{"value":"paris","label":"Sold by Paris"},{"value":"marketplace","label":"Sold by a Marketplace shop"}],"aliases":["sold_by","vendido_por"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest search-index price (`search_index_price`) in whole CLP, e.g. 10000.","on_invalid":"reject","minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest search-index price (`search_index_price`) in whole CLP, e.g. 20000.","on_invalid":"reject","minimum":0,"aliases":["price_max"]},{"name":"include_unavailable","type":"boolean","required":false,"description":"false (default) = exactly what paris.cl lists: products with stock for delivery or pickup. true = the whole index, unavailable products included (notebook 837 vs 6,441).","on_invalid":"reject","default":false}],"returns":"query/category_id, total (the source's count), total_capped, page, page_size, last_page, beyond_last_page, returned, results[]{id, variation_id, name, brand, url, search_index_price, search_index_price_note, discount_pct, currency, seller, sellers[], seller_type, product_type, category, category_id, category_path[], rating, review_count, image, color, model, variant_count, variants[]{sku, size, color, search_index_price, image}, rank}, facets[]{name, label, values[]{value, label, count}}, categories[]{id, name, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"tecCompNotebooks"}},{"name":"categories","description":"The Paris.cl category tree with product counts per category: the top departments, or the children of one `category`. Ids feed `category` and `search`.","required_params":[],"optional_params":["category","depth"],"params":[{"name":"category","type":"string","required":false,"description":"Return this category and its children. Omitted: the whole store from the root.","on_invalid":"reject","example":"tecnologia","aliases":["category_id","parent"]},{"name":"depth","type":"integer","required":false,"description":"How many levels of children to include (1-4).","on_invalid":"reject","default":2,"minimum":1,"maximum":4}],"returns":"parent, categories[]{id, name, count, child_count, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"tecnologia"}},{"name":"product","description":"One Paris.cl product by id (as search rows return it), variant SKU or product URL: the three prices kept apart — normal (crossed) price, internet price and the Tarjeta Cencosud card price — with discount %, EAN, brand, model, seller (Paris or the Marketplace shop) and its legal name, category path, rating and review count, all images, description, the specification sheet, every attribute, extended-warranty offers with their price, and every size/colour variant with its own SKU, EAN and three prices. Stock per comuna: `stock`. One of `id`, `sku` or `url` is required.","required_params":[],"optional_params":["id","sku","url"],"params":[{"name":"id","type":"string","required":false,"description":"The product id exactly as a search row returns it (626082999, MKSQKNFQC9, 410889).","on_invalid":"reject","example":"626082999","aliases":["product_id","key"]},{"name":"sku","type":"string","required":false,"description":"A variant SKU (a search row's `variation_id` or `variants[].sku`); returns the whole product.","on_invalid":"reject","example":"410889025","aliases":["variation_id","variant_sku"]},{"name":"url","type":"string","required":false,"description":"A www.paris.cl product page URL (…-<id>.html).","on_invalid":"reject","example":"https://www.paris.cl/notebook-ideapad-slim-3-intel-core-i3-n305-8gb-ram-512gb-ssd-156-fhd-626082999.html","aliases":["product_url"]}],"returns":"item{id, sku, ean, name, brand, url, slug, price, price_type, normal_price, internet_price, card_price, card_price_method, card_price_label, discount_pct, card_discount_pct, currency, seller, sellers[], seller_legal_name, seller_type, is_marketplace, product_type, category_path[], category_ids[], model, condition, warranty, commercial_warranty, country_of_origin, short_description, description, rating, review_count, images[], main_attributes[]{name, label, value}, specifications[]{group, name, value}, attributes[]{name, value}, extended_warranties[]{type, name, description, months, price, code}, collections[], variant_count, variants[]{sku, ean, size, size_code, color, color_code, price, price_type, normal_price, internet_price, card_price, ..., image}, published}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"626082999"}},{"name":"stock","description":"Stock and delivery options of one or more Paris.cl SKUs for a Chilean comuna: whether it can be delivered/picked up there, the stock level (IN_STOCK, LOW_STOCK, OUT_OF_STOCK), the unit count the source publishes, and each shipping option (home delivery scheduled / next day, pickup at Copec or in store) with its own stock and order-by time. Up to 40 SKUs of the same call are answered by the source in one request. `sku` is required.","required_params":["sku"],"optional_params":["comuna"],"params":[{"name":"sku","type":"string","required":true,"description":"A SKU (search row `variation_id`, product `sku` or `variants[].sku`), or up to 40 of them comma-separated.","on_invalid":"reject","example":"626082999","aliases":["skus","variation_id"]},{"name":"comuna","type":"string","required":false,"description":"Chilean comuna code (INE, 4-5 digits): 13114 Las Condes (the site's default), 13101 Santiago, 5101 Valparaíso, 1101 Iquique. Stock and options differ by comuna.","on_invalid":"reject","default":"13114","example":"13114","aliases":["locality","commune"]}],"returns":"comuna, returned, results[]{sku, serviceable, in_stock, stock_level, network_stock_level, stock_quantity, total_stock_quantity, service_node, service_node_type, shipping_options[]{type, subtype, method, stock_level, stock_quantity, node_category, order_by}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"626082999"}},{"name":"reviews","description":"Ratings and reviews of one Paris.cl product: average rating, review count, the 1-5 star distribution, the site's AI-written review summary, and the reviews (rating, title, text, reviewer nickname, month, recommended flag, helpful votes, photo count). `id` is required (the product id, not a variant SKU).","required_params":["id"],"optional_params":["page","page_size","with_text_only","sort"],"params":[{"name":"id","type":"string","required":true,"description":"The product id as a search row returns it.","on_invalid":"reject","example":"626082999","aliases":["product_id","key"]},{"name":"page","type":"integer","required":false,"description":"Page of reviews.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-100).","on_invalid":"reject","default":20,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"with_text_only","type":"boolean","required":false,"description":"true = only reviews with a written text (Paris collects many star-only ratings: 53 of 75 on 626082999).","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Order of the reviews.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Source order (newest first)"},{"value":"rating_high","label":"Highest rating first"},{"value":"rating_low","label":"Lowest rating first"}],"default":"newest"}],"returns":"id, total, page, page_size, returned, statistics{average_rating, review_count, ratings_only_count, recommended_count, rating_distribution[]{rating, count}, first_review_at, last_review_at}, ai_summary, ai_summary_date, reviews[]{id, rating, rating_range, title, text, ratings_only, author, submitted, recommended, sku, helpful_votes, not_helpful_votes, photos, videos, moderation_status}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"626082999"}}]},{"name":"paruvendu","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"ParuVendu.fr France Classifieds","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/paruvendu/v1","spec_available":true,"actions":[{"name":"search","description":"Search ParuVendu.fr, one of France's big general classifieds sites, section by section: used cars (brand, model, fuel, gearbox, body, year, mileage, price), real estate for sale or rent (property type, price, surface), second-hand goods (28 categories, sale/gift/swap, condition), pets and local services. Every section can be narrowed to a French department. `section` is required.","required_params":["section"],"optional_params":["query","category","brand","model","fuel","gearbox","body_type","year_min","year_max","mileage_max","transaction","property_type","surface_min","min_price","max_price","ad_type","condition","seller_type","department","sort","page","include_pii"],"params":[{"name":"section","type":"enum","required":true,"description":"Which part of ParuVendu to search: `cars` (used cars), `real_estate` (homes, flats, land, parking for sale or rent), `goods` (second-hand items), `pets`, `services`. Each section accepts its own filters; a filter from another section is rejected.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Voitures d'occasion"},{"value":"real_estate","label":"Immobilier"},{"value":"goods","label":"Seconde main / Mon débarras"},{"value":"pets","label":"Animaux"},{"value":"services","label":"Services entre particuliers"}],"example":"cars"},{"name":"query","type":"string","required":false,"description":"Free text as a French buyer types it: `cabriolet`, `canape`, `chiot berger`. Sections cars, goods, pets, services.","on_invalid":"reject","example":"cabriolet","aliases":["q","keyword","fulltext"]},{"name":"category","type":"string","required":false,"description":"Goods / pets / services rubric: a code such as `BMAME000` (Meubles), `ACI00000` (Chien, Chiot), `LMR00000` (Ménage / repassage) or its exact French name. See `categories`.","on_invalid":"reject","example":"BMAME000"},{"name":"brand","type":"string","required":false,"description":"Cars: brand code, e.g. `VVOBM000` (BMW), `VVORE000` (Renault). See `car_facets`.","on_invalid":"reject","example":"VVOBM000"},{"name":"model","type":"string","required":false,"description":"Cars: model code of that brand, e.g. `VVOBMS1` (BMW Série 1). From `car_facets` with `brand`.","on_invalid":"reject","example":"VVOBMS1"},{"name":"fuel","type":"enum","required":false,"description":"Cars: energy.","on_invalid":"reject","allowed_values":[{"value":"ES","label":"Essence"},{"value":"DI","label":"Diesel"},{"value":"GP","label":"GPL ou GNL"},{"value":"BI","label":"BioEthanol"},{"value":"EL","label":"Electrique"},{"value":"HY","label":"Hybride (tous)"},{"value":"HR","label":"Hybride rechargeable"},{"value":"MH","label":"Micro Hybride"},{"value":"HD","label":"Hydrogène"},{"value":"ZZ","label":"Autres"}],"example":"EL"},{"name":"gearbox","type":"enum","required":false,"description":"Cars: transmission.","on_invalid":"reject","allowed_values":[{"value":"MA","label":"Manuelle"},{"value":"AU","label":"Automatique"},{"value":"SA","label":"Semi automatique"},{"value":"ZZ","label":"Autres"}],"example":"AU"},{"name":"body_type","type":"enum","required":false,"description":"Cars: body style.","on_invalid":"reject","allowed_values":[{"value":"TO","label":"Berline"},{"value":"4X","label":"4x4 - SUV"},{"value":"BR","label":"Break"},{"value":"CA","label":"Cabriolet"},{"value":"CO","label":"Coupé"},{"value":"MO","label":"Monospace"},{"value":"SO","label":"Véhicule de société"},{"value":"PU","label":"Pick-up"}],"example":"4X"},{"name":"year_min","type":"integer","required":false,"description":"Cars: model year from.","on_invalid":"reject","example":2020},{"name":"year_max","type":"integer","required":false,"description":"Cars: model year up to.","on_invalid":"reject","example":2024},{"name":"mileage_max","type":"integer","required":false,"description":"Cars: kilometres up to.","on_invalid":"reject","example":50000},{"name":"transaction","type":"enum","required":false,"description":"Real estate: for sale (default) or for rent.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Vente"},{"value":"rent","label":"Location"}],"default":"sale","example":"sale"},{"name":"property_type","type":"enum","required":false,"description":"Real estate: house (default), apartment, land, parking or building.","on_invalid":"reject","allowed_values":[{"value":"house","label":"Maison (maison, villa, chalet, ferme, moulin, propriété, hôtel particulier)"},{"value":"apartment","label":"Appartement (appartement, duplex, loft, atelier, chambre, plateau)"},{"value":"land","label":"Terrain"},{"value":"parking","label":"Parking / garage"},{"value":"building","label":"Immeuble"}],"default":"house","example":"apartment"},{"name":"surface_min","type":"integer","required":false,"description":"Real estate: living surface from, m².","on_invalid":"reject","example":80},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in euros (not services).","on_invalid":"reject","example":5000},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in euros (not services).","on_invalid":"reject","example":15000},{"name":"ad_type","type":"enum","required":false,"description":"Goods: sale, swap, gift, wanted, event. Pets: sale, gift, wanted.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"Vente"},{"value":"swap","label":"Troc (goods)"},{"value":"gift","label":"Don"},{"value":"wanted","label":"Recherche"},{"value":"event","label":"Évènement (goods)"}],"example":"gift"},{"name":"condition","type":"enum","required":false,"description":"Goods: item condition.","on_invalid":"reject","allowed_values":[{"value":"like_new","label":"Quasi neuf"},{"value":"used","label":"Occasion"},{"value":"to_refurbish","label":"A rénover"},{"value":"collector","label":"Unique/collector"},{"value":"new_gift","label":"Cadeau neuf"}],"example":"like_new"},{"name":"seller_type","type":"enum","required":false,"description":"Pets: who is selling.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Particulier"},{"value":"professional","label":"Professionnel"},{"value":"association","label":"Association"},{"value":"breeder","label":"Eleveur"}],"example":"breeder"},{"name":"department","type":"string","required":false,"description":"French department number to search in, e.g. `33` (Gironde), `75` (Paris), `2A`.","on_invalid":"reject","example":"33","aliases":["dept"]},{"name":"sort","type":"enum","required":false,"description":"Result order. cars: newest, price_asc, price_desc, mileage_asc, mileage_desc · real_estate: relevance (default), newest, price_asc, price_desc, surface_asc (ads without a surface come first), surface_desc · goods/pets: newest, oldest, price_asc, price_desc · services: newest, oldest.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"mileage_asc","label":"mileage_asc"},{"value":"mileage_desc","label":"mileage_desc"},{"value":"relevance","label":"relevance"},{"value":"surface_desc","label":"surface_desc"},{"value":"surface_asc","label":"surface_asc"},{"value":"oldest","label":"oldest"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-500 (ParuVendu serves no page past 500). Page size is the site's: 25 cars, about 30 elsewhere.","on_invalid":"reject","default":1,"example":1},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{section, query, total, page, page_size, last_page, has_more, page_beyond_end, sort, filters_applied, listings[]}. Each listing: id, ad_number, url, section, title, price_eur, price_text, city, postal_code, department, description_snippet, image, photo_count, seller_type, seller_name, seller_listing_count, seller_url, is_featured, is_new, published_on; cars add year, mileage_km, fuel, gearbox, body_type; real_estate adds property_kind, surface_m2, rooms, bedrooms, land_m2, energy_class; goods add category.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"section":"cars","brand":"VVOBM000","max_price":15000,"sort":"price_desc"}},{"name":"listing","description":"One ParuVendu ad in full: title, full description, price (with the page's own second price witnesses), every photo, city/department/region, every labelled attribute (cars: make, model, version, year, mileage, fuel, gearbox, CO2, Crit'Air, warranty; property: rooms, surface, bedrooms, land, energy class), the ad reference and the seller block (name, private or professional, dealer page, listing count, member since, dealer phone when the page publishes it). Either `id` or `url` is required.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"ParuVendu listing id exactly as a `search` row gives it, e.g. `1296268993A1KVVOBMS1`.","on_invalid":"reject","example":"1296268993A1KVVOBMS1"},{"name":"url","type":"string","required":false,"description":"Or the listing URL (https://www.paruvendu.fr/.../<id>).","on_invalid":"reject","example":"https://www.paruvendu.fr/a/voiture-occasion/bmw/serie-1/1296268993A1KVVOBMS1"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, ad_number, url, section, title, description, price_eur, price_text, price_analytics, price_ld_json, price_mismatch, currency, category_path[], city, postal_code, department, region, attributes[{label, value}], attributes_map, features[], images[], image, images_count, reference, updated_at, published_on, ld_json_type, vehicle{brand, model, version, year, mileage_km, fuel, gearbox, body_type, color, co2_g_km, condition} (cars), seller{name, type, is_professional, listing_count, member_since, profile_url, phone, logo}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.paruvendu.fr/a/voiture-occasion/bmw/serie-1/1296268993A1KVVOBMS1"}},{"name":"car_facets","description":"ParuVendu's own car filter vocabulary: every brand code, and with `brand` that brand's model codes, plus fuel, gearbox, body and door codes and the year range — the exact codes `search` (section=cars) accepts.","required_params":[],"optional_params":["brand"],"params":[{"name":"brand","type":"string","required":false,"description":"Brand code (e.g. `VVOBM000`) to also list that brand's models.","on_invalid":"reject","example":"VVOBM000"}],"returns":"{brand, brands[{code, name}], models[{code, name}], fuels[], gearboxes[], body_types[], doors[], year_min, year_max}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"VVOBM000"}},{"name":"categories","description":"The category codes `search` accepts: 28 goods rubrics, 13 pet families, 15 service families, the 5 property types and the car fuel/gearbox/body codes.","required_params":[],"optional_params":["section"],"params":[{"name":"section","type":"enum","required":false,"description":"Only this section's codes.","on_invalid":"reject","allowed_values":[{"value":"real_estate","label":"Immobilier"},{"value":"goods","label":"Seconde main"},{"value":"pets","label":"Animaux"},{"value":"services","label":"Services"},{"value":"cars","label":"Voitures"}],"example":"goods"}],"returns":"{sections{<section>: [{code, name}]}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"section":"goods"}}]},{"name":"passive-osint","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Passive OSINT & Recon API — passive subdomain discovery and a unified domain/IP recon report from certificate transparency logs, passive DNS, web archives, ASN/rDNS and threat blocklists (no active scanning)","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/passive-osint/v1","spec_available":true,"actions":[{"name":"subdomains","description":"Passive subdomain discovery across crt.sh + certspotter + OTX + hackertarget + Wayback, deduped, with a per-source matrix and an honest coverage note","required_params":["domain"],"optional_params":["sources"],"params":[{"name":"domain","type":"string","required":true,"description":"The registrable domain to enrich (a bare host like example.com; a full URL or leading www. is accepted and normalized). NOT a person.","on_invalid":"reject","example":"hackerone.com"},{"name":"sources","type":"array","required":false,"description":"Which passive sources to query (comma-separated string or array). Defaults to all five. Unknown names are ignored.","on_invalid":"ignore","allowed_values":[{"value":"crtsh","label":"crt.sh Certificate-Transparency logs"},{"value":"certspotter","label":"Cert Spotter CT issuances (reliable)"},{"value":"otx","label":"AlienVault/LevelBlue OTX passive-DNS + url_list"},{"value":"hackertarget","label":"hackertarget hostsearch (free-tier limited)"},{"value":"wayback","label":"Wayback Machine archived-host index"}],"example":"crtsh,certspotter,otx,hackertarget,wayback"}],"returns":"domain, count, subdomains[] (sorted unique), source_matrix{host:[sources]}, sources{per-source ok/count/note}, coverage_note","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"domain":"hackerone.com"}},{"name":"domain","description":"One-call unified passive report: subdomains + DNS summary + SSL summary + archive first/last-seen + threat blocklist flags, each section degrading independently","required_params":["domain"],"optional_params":["sources","include_pii"],"params":[{"name":"domain","type":"string","required":true,"description":"The registrable domain to enrich (a bare host like example.com; a full URL or leading www. is accepted and normalized). NOT a person.","on_invalid":"reject","example":"hackerone.com"},{"name":"sources","type":"array","required":false,"description":"Which passive sources to query (comma-separated string or array). Defaults to all five. Unknown names are ignored.","on_invalid":"ignore","allowed_values":[{"value":"crtsh","label":"crt.sh Certificate-Transparency logs"},{"value":"certspotter","label":"Cert Spotter CT issuances (reliable)"},{"value":"otx","label":"AlienVault/LevelBlue OTX passive-DNS + url_list"},{"value":"hackertarget","label":"hackertarget hostsearch (free-tier limited)"},{"value":"wayback","label":"Wayback Machine archived-host index"}],"example":"crtsh,certspotter,otx,hackertarget,wayback"},{"name":"include_pii","type":"boolean","required":false,"description":"If true, reveal the RDAP abuse mailbox / contact email. Default false → contact emails are masked (R17 privacy hygiene).","on_invalid":"ignore","default":false,"example":false}],"returns":"domain + subdomains_passive{} + dns{} + ssl{} + archive{} + threat_flags{} + dns_history{records:[hostname,record_type,address,first_seen,last_seen]} + associated_domains{domains[] sharing a TLS cert} (each with source/confidence) + provenance{cross_links}; meta.sections = per-section status","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"domain":"github.com"}},{"name":"ip","description":"Passive IP enrichment: rDNS (PTR) + ASN/org/country (Team-Cymru + RDAP) + threat blocklist flags + shared-host neighbours (reverse-IP + OTX IPv4 passive-DNS)","required_params":["ip"],"optional_params":["include_pii"],"params":[{"name":"ip","type":"string","required":true,"description":"A single IPv4 address to enrich (rDNS + ASN/org/country + threat + shared-host neighbours).","on_invalid":"reject","example":"8.8.8.8","aliases":["address","query"]},{"name":"include_pii","type":"boolean","required":false,"description":"If true, reveal the RDAP abuse mailbox / contact email. Default false → contact emails are masked (R17 privacy hygiene).","on_invalid":"ignore","default":false,"example":false}],"returns":"ip + rdns{ptr} + network{asn,as_name,bgp_prefix,country,org} + threat_flags{} + shared_host{neighbours[],approx_total} + provenance{cross_links}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"ip":"8.8.8.8"}},{"name":"batch","description":"Compact passive report (subdomain count+list, DNS, threat, archive-first-seen) across up to 10 domains in one call","required_params":["domains"],"optional_params":[],"params":[{"name":"domains","type":"array","required":true,"description":"Up to 10 domains. A JSON array or a comma/space/newline-separated string. Each gets a compact passive report.","on_invalid":"reject","example":["hackerone.com","github.com"],"aliases":["targets"]}],"returns":"count, results[] (domain, subdomain_count, subdomains[], resolves, mx, threat_verdict, archive_first_seen), coverage_note","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"domains":["hackerone.com","github.com"]}}]},{"name":"paypay-flea-market","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Yahoo! Flea Market Japan","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/paypay-flea-market/v1","spec_available":true,"actions":[{"name":"search","description":"Search public Japanese flea-market listings. Native 100-item pages; limit truncates each page, not an exhaustive export.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Japanese or other keyword, at most 120 characters.","on_invalid":"reject","example":"iphone"},{"name":"page","type":"integer","required":false,"description":"Native source page; only pages one and two are qualified.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Maximum rows returned from this native 100-item page. Truncated rows are skipped when advancing page.","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":100}],"returns":"results with listing id, title, JPY price, source status and seller reputation; source totals and semantic fallback label.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","page":1,"limit":3}},{"name":"product/detail","description":"Read a public listing using its live search id.","required_params":["item_id"],"optional_params":[],"params":[{"name":"item_id","type":"string","required":true,"description":"Copy results[].id from search; not a Yahoo Auctions id.","on_invalid":"reject","example":"z696924036"}],"returns":"One listing with description, images, source categories, specifications, shipping and public seller facts.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"z696924036"}}]},{"name":"pazarama","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Pazarama API scraper — Turkish marketplace (pazarama.com): search listings by keyword, category or brand with price range and sort, and read the full listing — price and in-basket price in TRY, stock, barcode, attributes, seller and seller score, star rating with 1-5 breakdown, newest reviews and description. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/pazarama/v1","spec_available":true,"actions":[{"name":"search","description":"Search pazarama.com by keyword, or browse any Pazarama category or brand listing, with price range, brand and the site's seven sort orders. Each row is ONE seller's listing: product id and code, barcode (when the code is a valid GTIN), title, URL pointing at that seller, image, brand, seller, the price the site shows, the in-basket price when a basket campaign lowers it, the site's discount badge, star rating and Pazarama's search-index rating (the listing's own rating is in product/detail), availability and stock count, category and variant group.","required_params":[],"optional_params":["query","url","page","sort","price_min","price_max","brand","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search on pazarama.com, Turkish or brand/model words ('airfryer', 'çay makinesi', 'iphone 15 128'). Optional when `url` is given; with `url` it narrows that listing.","on_invalid":"reject","example":"airfryer","aliases":["q","keyword"]},{"name":"url","type":"string","required":false,"description":"A pazarama.com LISTING URL to browse instead of (or together with) a keyword: a category (…-k-K03043), a brand (/apple), a brand inside a category (/apple/cep-telefonu-k-K03043) or a search page. Every breadcrumb item this engine returns is such a URL.","on_invalid":"reject","example":"https://www.pazarama.com/cep-telefonu-k-K03043","aliases":["category_url","listing_url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Pazarama serves 20 listings per page; `total_pages` says how many exist. A page past the end returns an empty page (the site itself would silently show page 1).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Order of the results — the seven orderings the site itself offers. The price orderings follow the IN-BASKET price (`lowest_price` on each row), not the shown `price`, so rows can look out of order by `price`.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Pazarama's default order"},{"value":"price_asc","label":"Lowest in-basket price first"},{"value":"price_desc","label":"Highest in-basket price first"},{"value":"newest","label":"Newest listings first"},{"value":"most_favorited","label":"Most favourited first"},{"value":"most_reviewed","label":"Most reviewed first"},{"value":"best_selling","label":"Best sellers first"}],"default":"relevance"},{"name":"price_min","type":"number","required":false,"description":"Lowest sale price in Turkish lira (inclusive).","on_invalid":"reject","example":1000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest sale price in Turkish lira (inclusive).","on_invalid":"reject","example":3000,"minimum":0},{"name":"brand","type":"string","required":false,"description":"Pazarama's brand slug, as in its brand URLs (pazarama.com/philips → 'philips').","on_invalid":"reject","example":"philips"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id, listing_id, product_code, barcode (null unless the code is a valid GTIN), title, url (with ?magaza=<seller>), image, images[], brand, brand_id, seller{id, name, slug, url}, price (number, TRY — the price the page shows), price_display, basket_price (the lower 'Sepette İndirimli Fiyatı' when a basket campaign applies, else null), basket_price_display, basket_price_label, lowest_price (the lower of price and basket_price — what the price sorts follow), plus_member_price (Pazarama Plus members only, null when not lower), price_before_discount (always null — the site renders no struck price), discount_percent (the site's own badge, null when none), currency=TRY, lowest_price_in_30_days, search_index_rating, search_index_rating_count (Pazarama's search-index figures — NOT this listing's page figures: they differed from the product page on 9 of 19 measured listings; use product/detail for rating and rating_count), rating_scale (5), availability ('in_stock'|'out_of_stock'), in_stock, stock_count (seller-declared), category{id, name}, has_variants, variant_group_code, pazarama_plus}, count, total_results, total_pages, page, page_size, sort, applied_filters[{field, value}], breadcrumb[{name, url, category_id}], no_match_notice (set when Pazarama did not find the keyword — results are then empty instead of its unrelated suggestions), page_notice","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"airfryer"}},{"name":"seller/categories","description":"Pazarama's seller category tree, as used for product uploads: every category with its id (a UUID), full path and whether it is a leaf. Filter with `query`; take the id to seller/category-attributes.","required_params":[],"optional_params":["query","leaf_only","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Case-insensitive text matched against the category name and path.","on_invalid":"ignore","example":"ayakkabı","aliases":["q","name"]},{"name":"leaf_only","type":"boolean","required":false,"description":"Only leaf categories (the ones products are uploaded to). Default true.","on_invalid":"ignore","default":true},{"name":"limit","type":"integer","required":false,"description":"Maximum rows to return (1-5000).","on_invalid":"ignore","default":200,"minimum":1,"maximum":5000}],"returns":"categories[]{id, name, path, parent_id, leaf}, count, total","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ayakkabı"}},{"name":"seller/category-attributes","description":"The product upload template of one Pazarama category: every attribute, whether it is required, whether it creates variants, and the allowed values.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"Leaf category id (UUID) from seller/categories.","on_invalid":"reject","example":"3053ce72-9208-40bb-8775-001fb4ca654b","aliases":["id","categoryId"]}],"returns":"category{id, name}, attributes[]{id, name, required, varianter, values[]{id, name}}, attribute_count, required_count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"3053ce72-9208-40bb-8775-001fb4ca654b"}},{"name":"product/detail","description":"The full Pazarama listing by product URL (or product_code + seller): title, brand, barcode, seller SKU, the price the page shows and the in-basket price, VAT rate, stock count and availability, image gallery, every attribute (with the variant axes flagged), seller with its Pazarama seller score, star rating with the 1-5 breakdown and total counts, the newest reviews, breadcrumb and the description text.","required_params":[],"optional_params":["url","product_code","seller","max_rotations"],"params":[{"name":"url","type":"string","required":false,"description":"A pazarama.com product URL (…-p-<code>, optionally with ?magaza=<seller>). Every search row returns one as `url`, already pointing at that seller.","on_invalid":"reject","example":"https://www.pazarama.com/apple-iphone-15-128-6-gb-ram-5g-apple-turkiye-garantili-p-195949036040?magaza=mediamarkt","aliases":["product_url"]},{"name":"product_code","type":"string","required":false,"description":"Alternative to `url`: the part after -p- in a product URL. Every search row returns it as `product_code`.","on_invalid":"reject","example":"195949036040","aliases":["code"]},{"name":"seller","type":"string","required":false,"description":"Seller slug (the ?magaza= value) to read THAT seller's listing of the product. Without it Pazarama shows its default seller, which can be a different seller at a different price.","on_invalid":"reject","example":"mediamarkt","aliases":["seller_slug","magaza"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, listing_id, product_code, barcode (null unless a valid GTIN), seller_sku, title, short_name, url, brand, brand_id, brand_url, price, price_display, basket_price, basket_price_display, basket_price_label, lowest_price, plus_member_price, price_before_discount (null), discount_percent, currency=TRY, vat_rate_percent, lowest_price_in_30_days, availability, in_stock, stock_count (seller-declared), stock_text, images[], rating, rating_count (the page's 'N Değerlendirme' — all star ratings), written_review_count (the subset of those ratings with written text), rating_scale (5), rating_breakdown{'1'..'5': count}, top_reviews[{id, rating, author (site-masked), author_id, text, date, city, like_count, seller_name, variant, has_images}], seller{id, name, slug, url, rating (Pazarama seller score), rating_scale (null — the site prints no maximum), logo}, category{id, name, url}, breadcrumb[], attributes[{name, value, variant_axis}], variant_attributes, has_variants, variants (null — the sibling list is not published without a signed-in session), other_offers (null — same reason), origin, description}, requested_seller, requested_seller_served","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_code":"195949036040","seller":"mediamarkt"}}]},{"name":"pccomponentes","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"PcComponentes API — search pccomponentes.com and read products with every seller's offer, price types (PVPR, 30-day low), stock, delivery, specs, EAN, reviews and price history","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pccomponentes/v1","spec_available":true,"actions":[{"name":"search","description":"Search PcComponentes (Spain) by keyword with the site's own filters — category (family), brand, seller (PcComponentes itself or marketplace sellers), condition (new / refurbished), price range — and 7 sort orders; or browse a category by its slug. Each row: product id, slug, name, brand, part number, condition, category, price, the struck price with its type (PVPR = recommended retail price), discount, 30-day and all-time lowest price, seller and whether PcComponentes sells it, stock, delivery dates, free shipping, rating and review count, image. Plus the source's own total and the facets (brands with ids and counts, categories, seller and condition counts).","required_params":[],"optional_params":["query","category","family_id","brand","seller","condition","min_price","max_price","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Search words as typed into the PcComponentes search box. Either `query` or `category` is required. The site may narrow a query to its own category (\"monitor\" → Monitores); that is shown in applied_filters.","on_invalid":"reject","example":"monitor","aliases":["q","keyword","keywords","search"]},{"name":"category","type":"string","required":false,"description":"Browse one category by its slug (as a row's category.slug returns it, e.g. tarjetas-graficas, portatiles). Used WITHOUT `query`; only `sort` and `page` apply. To filter a category, use `query` + `family_id`.","on_invalid":"reject","example":"tarjetas-graficas","aliases":["category_slug"]},{"name":"family_id","type":"integer","required":false,"description":"Category (family) id as a row's category.id or the families facet returns it (13 = Monitores, 6 = Tarjetas Gráficas). Needs `query`.","on_invalid":"reject","example":13,"aliases":["category_id","families"]},{"name":"brand","type":"string","required":false,"description":"Brand: the site's numeric brand id (from the brands facet, e.g. 3 = LG, 43 = Asus) or a brand name as the facet prints it (resolved through the same query's brand facet: one extra request). Needs `query`.","on_invalid":"reject","example":"3","aliases":["brand_id","brands"]},{"name":"seller","type":"enum","required":false,"description":"Only offers sold by PcComponentes itself, or by marketplace sellers. Needs `query`.","on_invalid":"reject","allowed_values":[{"value":"pccomponentes","label":"Sold by PcComponentes"},{"value":"marketplace","label":"Marketplace sellers"}],"aliases":["seller_type","sold_by"]},{"name":"condition","type":"enum","required":false,"description":"New or refurbished (reacondicionado) units. Needs `query`.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"refurbished","label":"Refurbished"}],"aliases":["status"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR (VAT included). Needs `query`.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR (VAT included). Needs `query`.","on_invalid":"reject","example":200,"minimum":0,"aliases":["price_max","price_to"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"},{"value":"best_selling","label":"Best selling"},{"value":"discount","label":"Biggest discount"},{"value":"top_rated","label":"Top rated"},{"value":"newest","label":"Newest"}],"default":"relevance","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Result page (40 rows each). The site serves at most 25 pages (1,000 rows) per listing.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":25}],"returns":"results[]{product_id, slug, url, name, brand, mpn, condition, category{id, name, slug}, price, currency, crossed_out_price, crossed_out_price_type, discount_pct, discount_amount, new_product_price, lowest_price_30d, lowest_price_historical, is_lowest_price_ever, seller_name, sold_by_pccomponentes, in_stock, availability_code, delivery_min_date, delivery_max_date, free_shipping, shipping_cost, rating, review_count, image, top_attributes[], flags[], price_mismatch, lowest_prices_whole_euros} + total, total_pages, page, page_size, has_more, facets{brands[], families[], seller_type[], status[], price_range}, applied_filters","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"monitor","brand":"3"}},{"name":"product","description":"Full PcComponentes product record: name, brand, EAN, manufacturer part number, condition, category, price (VAT included) and price without VAT, the struck price with its type (PVPR), discount, promotion end date, 30-day and all-time lowest price, the buy-box seller and EVERY seller's offer (price, stock quantity, availability, delivery window, shipping, seller rating), stock and delivery dates, store pick-up per store, rating out of 5 and 10, review and recommendation counts, star distribution, the site's review summary, the specification table, attribute facets, description, images, variants and financing.","required_params":["slug"],"optional_params":[],"params":[{"name":"slug","type":"string","required":false,"description":"The product's slug exactly as a search row returns it (`slug`, e.g. tarjeta-grafica-zotac-gaming-...; a refurbished unit keeps its `?refurbished` suffix). A pccomponentes.com product URL is accepted too.","on_invalid":"reject","example":"tarjeta-grafica-zotac-gaming-geforce-rtx-5060-ti-twin-edge-oc-8gb-gddr7-reflex-2-rtx-ai-dlss4","aliases":["url","product_url","path"]}],"returns":"{product_id, slug, url, name, brand, ean, mpn, condition, is_refurbished, category{}, super_category, price, currency, price_ex_vat, crossed_out_price, crossed_out_price_type, discount_pct, discount_amount, promotion_valid_until, lowest_price_30d, lowest_price_historical, msrp, sold_by_pccomponentes, seller{}, offers[]{offer_id, is_buy_box, seller_id, seller_name, seller_rating, seller_rating_count, price, price_ex_vat, vat_rate, original_price, discount_pct, shipping_min_price, free_shipping, condition, quantity, available, availability_status, real_stock, delivery_min_date, delivery_max_date, delivery_text, logistics}, offer_count, other_offers_from_price, in_stock, purchasable, availability_code, delivery_min_date, delivery_max_date, delivery_text, shipping_cost, store_pickup[], rating, rating_10, review_count, written_review_count, recommend_count, rating_distribution{}, opinion_summary{}, specifications[]{name, value}, attributes[], description, images[], variants[], weight, added_date, financing[], ld_json_price, price_mismatch, refurbished_unit_not_offered}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"tarjeta-grafica-zotac-gaming-geforce-rtx-5060-ti-twin-edge-oc-8gb-gddr7-reflex-2-rtx-ai-dlss4"}},{"name":"reviews","description":"Buyer reviews of a PcComponentes product: score out of 10 (and out of 5), value-for-money score, recommends yes/no, comment, pros and cons (Spanish original), verified purchase, author nickname, likes, media count, dates. The site pools the reviews of every variant of the model; each review names its own product_id.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"PcComponentes product id exactly as a search or product row returns it (product_id, digits).","on_invalid":"reject","example":"10875526","aliases":["id","article_id"]},{"name":"page","type":"integer","required":false,"description":"Review page (16 reviews per page, the site's own size).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"newest","label":"Newest"},{"value":"oldest","label":"Oldest"}],"default":"relevance","aliases":["order"]}],"returns":"reviews[]{review_id, product_id, product_name, rating, rating_10, price_rating_10, recommends, comment, advantages, disadvantages, language, verified_purchase, author, likes, media_count, created_at, updated_at} + product_id, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"10875526"}},{"name":"price_history","description":"The price history PcComponentes publishes for a product (its own 'historial de precios' panel): every price change with its date and whether it was a promotional price.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"PcComponentes product id exactly as a search or product row returns it (product_id, digits).","on_invalid":"reject","example":"10875526","aliases":["id","article_id"]}],"returns":"history[]{date, price, promotional} + product_id, count, min_price, max_price","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"10875526"}}]},{"name":"pchome","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"PChome 24h API — search Taiwan's 24-hour online store and read products with list, web and discount prices, stock state, variants, delivery type and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pchome/v1","spec_available":true,"actions":[{"name":"search","description":"Search PChome 24h products by keyword with the site's own filters: scope (all / 24h arrival / supplier-shipped / bookstore), category id, brand id, price range in TWD, pickup or delivery method, in-stock only, and 5 sort orders. Each row: product id, title, short description, URL, image, the card price (the discount price when PChome runs one, else the web price), the card's web price, rating, review count, category ids, coupon activity ids, book author, publisher and publish date. Plus PChome's own total and page count (capped at 100 pages).","required_params":["query"],"optional_params":["scope","category","brand","min_price","max_price","delivery","in_stock_only","sort","page","page_size"],"params":[{"name":"query","type":"string","required":true,"description":"Search words in any form PChome's own search box takes: Traditional or Simplified Chinese (衛生紙 / 卫生纸 return the same results), English, model numbers. Full-width characters are normalised.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords"]},{"name":"scope","type":"enum","required":false,"description":"Which part of PChome to search: everything, only products that arrive within 24 hours (24h到貨), only products shipped by the supplier (廠商出貨), or the 24h bookstore. 24h and vendor do not add up exactly to all.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All of PChome 24h"},{"value":"24h","label":"24h arrival (24h到貨)"},{"value":"vendor","label":"Shipped by the supplier (廠商出貨)"},{"value":"books","label":"24h bookstore (24h書店)"}],"default":"all"},{"name":"category","type":"string","required":false,"description":"PChome category id (15 digits) from the `categories` action or a row's category_ids, e.g. 141001002001000. Narrows the search to that category and its children.","on_invalid":"reject","example":"141001002001000","aliases":["category_id","pcate"]},{"name":"brand","type":"string","required":false,"description":"PChome brand id from the `brands` action or a product's brand_id, e.g. 1_665 (Apple).","on_invalid":"reject","example":"1_665","aliases":["brand_id"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest card price in TWD.","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest card price in TWD.","on_invalid":"reject","example":20000,"minimum":0,"aliases":["price_max"]},{"name":"delivery","type":"enum","required":false,"description":"Only products offering this pickup or delivery method.","on_invalid":"reject","allowed_values":[{"value":"convenience_store","label":"Convenience-store pickup (超商取貨)"},{"value":"ipost","label":"i-Post locker pickup (i郵箱取貨)"},{"value":"express","label":"Express delivery (超速配)"},{"value":"quick_install","label":"Quick installation (快速安裝)"}]},{"name":"in_stock_only","type":"boolean","required":false,"description":"true drops products PChome shows as restocking (補貨中).","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order (PChome's own options). Price sorts use the card price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"popular","label":"Most popular"},{"value":"newest","label":"Newest"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page. PChome serves at most 100 pages.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Rows per page: 10, 20, 30 … 100 (PChome serves only multiples of 10).","on_invalid":"reject","default":20,"example":20,"minimum":10,"maximum":100,"aliases":["limit"]}],"returns":"results[]{product_id, title, description, url, image, price, card_web_price, currency (TWD), rating, review_count, category_ids[], coupon_activity_ids[], publisher (books), author, publish_date, is_book, is_adult, sold_by_pchome, business_unit} + total, pages, page, page_size, has_more, pages_capped","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone","scope":"24h"}},{"name":"product","description":"Full PChome 24h product by product_id: name, tagline, brand, list price, web price (網路價), discount price (折扣價), member price, subscription plan when the product is sold by monthly instalments, the buy button state (for sale / restocking), orderable quantity, variants (colour / size) each with its own quantity and state, bundle components, fulfilment (PChome warehouse or supplier direct), 24h-arrival flag, pre-order date, category ids, images, video, ISBN, selling points, warranty statement, book metadata and the review summary (count, exact average, 1-5 star distribution).","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"PChome product id exactly as a search row returns it (6 + 9 characters, e.g. DYAJ2X-1900KFLI4). The 20-character form with a -000 suffix and a 24h.pchome.com.tw/prod/... URL are accepted too.","on_invalid":"reject","example":"DYAJ2X-1900KFLI4","aliases":["id","prod_id","url","item_id"]}],"returns":"product{product_id, item_id, url, name, nickname, sales_name, tagline, brands[], brand_id, price, price_type, currency, prices{list_price, web_price, discount_price, prime_price, original_web_price, discount_text}, is_subscription, subscription{periods, amount_per_period, total}?, availability{button_type, status, in_stock, orderable_qty, orderable_qty_capped}, fulfilment, ship_type, arrives_24h, preorder_date, seller{name, type, fulfilment}, store_id, region_id, category_ids[], has_variants, variants[]{variant_id, spec, orderable_qty, status, in_stock, prices, image}, is_bundle, bundle_components[], images[], video_url, isbn, flags{}, details{selling_points[], statement, equipment, author, translator, publisher, publish_date, approvals{}}, reviews{total, average_rating, distribution{}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"DYAJ2X-1900KFLI4"}},{"name":"reviews","description":"Buyer reviews of a PChome 24h product: rating 1-5, comment, tags, variant bought, PChome's or the supplier's reply, photos, date, likes, reviewer name as PChome shows it (masked by PChome). Sort by relevance, newest, highest or lowest; photo reviews only. Plus the total, exact average and 1-5 star distribution.","required_params":["product_id"],"optional_params":["sort","with_photos","page","page_size"],"params":[{"name":"product_id","type":"string","required":true,"description":"PChome product id exactly as a search row returns it (6 + 9 characters, e.g. DYAJ2X-1900KFLI4). The 20-character form with a -000 suffix and a 24h.pchome.com.tw/prod/... URL are accepted too.","on_invalid":"reject","example":"DYAJ2X-1900KFLI4","aliases":["id","prod_id","url","item_id"]},{"name":"sort","type":"enum","required":false,"description":"Review order (PChome's own options).","on_invalid":"reject","allowed_values":[{"value":"relevant","label":"Most relevant (最相關)"},{"value":"newest","label":"Newest (最新)"},{"value":"highest","label":"Highest rating (最高分)"},{"value":"lowest","label":"Lowest rating (最低分)"}],"default":"relevant"},{"name":"with_photos","type":"boolean","required":false,"description":"true = only reviews with photos (附圖片評價). PChome's total stays the all-reviews total; `pages` reflects the filter.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page, 1 to 100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"reviews[]{review_id, reviewer, rating, product_name, variant, comment, seller_reply, tags[]{name, text}, date, photos[], likes} + summary{total, average_rating, source_average_rounded, distribution{}}, page, pages, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"DYAJNV-1900KFKV5","sort":"newest"}},{"name":"prices","description":"Price and stock check for up to 50 PChome products in ONE call (PChome's own multi-product endpoint): list, web and discount price, subscription flag, buy button state, orderable quantity, fulfilment, 24h arrival — plus every variant row PChome returns for those products. Ids PChome does not know are listed in not_found.","required_params":["product_ids"],"optional_params":[],"params":[{"name":"product_ids","type":"string","required":true,"description":"Up to 50 product ids, comma-separated or as a list, exactly as search rows return them.","on_invalid":"reject","example":"DYAJ2X-1900KFLI4,DYAJNV-1900KFKV5","aliases":["ids","product_id"]}],"returns":"products[]{product_id, item_id, name, price, price_type, prices{}, availability{}, fulfilment, arrives_24h, preorder_date, is_subscription, variants[]{variant_id, prices{}, availability{}}} + not_found[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_ids":"DYAJ2X-1900KFLI4,DYAJNV-1900KFKV5"}},{"name":"categories","description":"PChome's category tree for a search, with the number of matching products in each category — the ids feed search's `category` filter.","required_params":["query"],"optional_params":["scope"],"params":[{"name":"query","type":"string","required":true,"description":"Search words in any form PChome's own search box takes: Traditional or Simplified Chinese (衛生紙 / 卫生纸 return the same results), English, model numbers. Full-width characters are normalised.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords"]},{"name":"scope","type":"enum","required":false,"description":"Which part of PChome to search: everything, only products that arrive within 24 hours (24h到貨), only products shipped by the supplier (廠商出貨), or the 24h bookstore. 24h and vendor do not add up exactly to all.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All of PChome 24h"},{"value":"24h","label":"24h arrival (24h到貨)"},{"value":"vendor","label":"Shipped by the supplier (廠商出貨)"},{"value":"books","label":"24h bookstore (24h書店)"}],"default":"all"}],"returns":"categories[]{category_id, name, count, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"衛生紙"}},{"name":"brands","description":"Brands PChome lists for a search, with the number of matching products per brand — the ids feed search's `brand` filter. PChome lists at most 100.","required_params":["query"],"optional_params":["scope"],"params":[{"name":"query","type":"string","required":true,"description":"Search words in any form PChome's own search box takes: Traditional or Simplified Chinese (衛生紙 / 卫生纸 return the same results), English, model numbers. Full-width characters are normalised.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords"]},{"name":"scope","type":"enum","required":false,"description":"Which part of PChome to search: everything, only products that arrive within 24 hours (24h到貨), only products shipped by the supplier (廠商出貨), or the 24h bookstore. 24h and vendor do not add up exactly to all.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All of PChome 24h"},{"value":"24h","label":"24h arrival (24h到貨)"},{"value":"vendor","label":"Shipped by the supplier (廠商出貨)"},{"value":"books","label":"24h bookstore (24h書店)"}],"default":"all"}],"returns":"brands[]{brand_id, name, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"衛生紙"}}]},{"name":"pepper-nl","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Pepper.com NL API — deals from nl.pepper.com (Netherlands) as JSON: search the community's deals by keyword with sort (relevance, newest, hottest, price, discussed), temperature, price, date and category filters; the trending, new, hottest and discussion feeds; every deal in full (price, comparison price, discount, merchant, voucher code, shipping, temperature, comments, expiry, description); the comments of a deal; and the category list. Prices in EUR. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pepper-nl/v1","spec_available":true,"actions":[{"name":"search","description":"Search Pepper.com NL deals by keyword. Sort by relevance, newest, hottest, price or latest comment; filter by temperature, price, posting date, category, expired and local deals. 30 deals a page.","required_params":["query"],"optional_params":["sort","time_frame","min_temperature","max_temperature","min_price","max_price","group_id","hide_expired","hide_local","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search Pepper.com NL deal titles and voucher codes for.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default for a search)"},{"value":"new","label":"Newest first"},{"value":"hot","label":"Hottest first (highest temperature)"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"discussed","label":"Most recently commented"}],"default":"relevance","example":"hot","aliases":["sort_by","order"]},{"name":"time_frame","type":"enum","required":false,"description":"How far back to search by posting date. The site searches the last 365 days unless told otherwise.","on_invalid":"reject","allowed_values":[{"value":"last_year","label":"Posted in the last 365 days (the site's default)"},{"value":"last_30_days","label":"Last 30 days"},{"value":"last_7_days","label":"Last 7 days"},{"value":"all_time","label":"No date limit"}],"default":"last_year","example":"last_30_days","aliases":["period","posted_within"]},{"name":"min_temperature","type":"integer","required":false,"description":"Only deals at or above this temperature (degrees; the site's own steps are 20, 100 and 500, any whole number works).","on_invalid":"reject","example":100,"minimum":-100000,"maximum":100000,"aliases":["temperature_from","min_temp"]},{"name":"max_temperature","type":"integer","required":false,"description":"Only deals at or below this temperature.","on_invalid":"reject","example":600,"minimum":-100000,"maximum":100000,"aliases":["temperature_to","max_temp"]},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price, in EUR.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price, in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max","price_to"]},{"name":"group_id","type":"string","required":false,"description":"Only one category: a categories row's group_id (or a row's group.group_id).","on_invalid":"reject","example":"156","value_pattern":"\\d{1,12}","aliases":["category_id"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked as expired.","on_invalid":"reject","default":false,"example":true},{"name":"hide_local","type":"boolean","required":false,"description":"Leave out in-store-only (local) deals.","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: total, page, last_page, has_more, filters_applied, suggestions_dropped (a search with no result: the site's filler deals are not returned).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","sort":"new"}},{"name":"deals","description":"The Pepper.com NL feeds: trending (heating up now), new (every new post), hottest (the hottest of the period) and community discussions. 30 a page.","required_params":[],"optional_params":["list","page"],"params":[{"name":"list","type":"enum","required":false,"description":"Which Pepper.com NL feed.","on_invalid":"reject","allowed_values":[{"value":"trending","label":"What is heating up now (the site's 'hot' tab)"},{"value":"new","label":"Newest posts first"},{"value":"hottest","label":"The hottest deals of the current period"},{"value":"discussions","label":"Community discussion threads"}],"default":"trending","example":"new","aliases":["feed","tab"]},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: list, total, total_capped (the feeds report 10000 = a cap), page, last_page, has_more, pinned_rows.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"list":"new"}},{"name":"category_deals","description":"The deals of one Pepper.com NL category, hottest or newest first. The category page's own view hides expired deals and starts at a temperature floor (100° or 180° depending on the site); hide_expired / min_temperature change that and meta.applied_view shows what the page applied.","required_params":["group_slug"],"optional_params":["sort","min_temperature","hide_expired","page"],"params":[{"name":"group_slug","type":"string","required":true,"description":"Category slug: a categories row's group_slug (or a row's group.group_slug), e.g. elektronica, gaming, reizen.","on_invalid":"reject","example":"elektronica","value_pattern":"[a-z0-9][a-z0-9\\-]{0,100}","aliases":["category","group"]},{"name":"sort","type":"enum","required":false,"description":"Order of the category's deals.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hottest first (the category page's default)"},{"value":"new","label":"Newest first"},{"value":"discussed","label":"Most recently commented"}],"default":"hot","example":"new","aliases":["sort_by"]},{"name":"min_temperature","type":"integer","required":false,"description":"Temperature floor. The category page has its own default floor (100° on most sites); meta.applied_view shows what the page applied.","on_invalid":"reject","example":0,"minimum":-100000,"maximum":100000,"aliases":["temperature_from"]},{"name":"hide_expired","type":"boolean","required":false,"description":"The category page hides expired deals by default; false shows them.","on_invalid":"reject","example":false},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: group_slug, sort, applied_view{sort, min_temperature, hide_expired}, total, total_capped, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group_slug":"elektronica"}},{"name":"deal","description":"One deal in full by its id: price (0 = free, null = no price), the price as the site prints it, comparison price and discount, merchant, voucher code, shipping, temperature, status and expiry, every category it is in, the poster, the outbound link, images and the full description.","required_params":["deal_id"],"optional_params":[],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (409942); a nl.pepper.com deal URL also works.","on_invalid":"reject","example":"409942","aliases":["id","thread_id","url"]}],"returns":"deal{deal_id, type, title, url, share_url, visit_url, status, is_expired, is_hot, is_new, is_local, is_exclusive, nsfw, temperature, temperature_level, price, is_free, price_display, next_best_price, discount_pct, source_discount_pct, price_discount, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant, link_host, group, groups[], comment_count, posted_by, published_at, created_at, updated_at, starts_at, expires_at, dispatched_from{name, country}, is_national, regions, locations, image_url, images[], description, description_html}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"409942"}},{"name":"comments","description":"The comments of one deal, in the site's own order (most helpful first), with author, time, reactions and reply links.","required_params":["deal_id"],"optional_params":["limit","page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (409942); a nl.pepper.com deal URL also works.","on_invalid":"reject","example":"409942","aliases":["id","thread_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Comments per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Comment page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"rows[]: comment_id, deal_id, url, text, html, user{user_id, username}, created_at, reactions{like, funny, helpful…}, is_reply, main_comment_id, parent_comment_id, is_pinned, popular, was_edited, status. meta: total, page, last_page, has_more, order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"409942"}},{"name":"categories","description":"The Pepper.com NL category list: every main category with its id, slug, deal count and its community-favourite subcategories. group_id goes to search, group_slug to category_deals.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: group_id, name, group_slug, url, deal_count, subcategories[{group_id, name, group_slug}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"pepper-pl","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Pepper.pl API — deals from www.pepper.pl (Poland) as JSON: search the community's deals by keyword with sort (relevance, newest, hottest, price, discussed), temperature, price, date and category filters; the trending, new, hottest and discussion feeds; every deal in full (price, comparison price, discount, merchant, voucher code, shipping, temperature, comments, expiry, description); the comments of a deal; and the category list. Prices in PLN. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pepper-pl/v1","spec_available":true,"actions":[{"name":"search","description":"Search Pepper.pl deals by keyword. Sort by relevance, newest, hottest, price or latest comment; filter by temperature, price, posting date, category, expired and local deals. 30 deals a page.","required_params":["query"],"optional_params":["sort","time_frame","min_temperature","max_temperature","min_price","max_price","group_id","hide_expired","hide_local","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search Pepper.pl deal titles and voucher codes for.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default for a search)"},{"value":"new","label":"Newest first"},{"value":"hot","label":"Hottest first (highest temperature)"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"discussed","label":"Most recently commented"}],"default":"relevance","example":"hot","aliases":["sort_by","order"]},{"name":"time_frame","type":"enum","required":false,"description":"How far back to search by posting date. The site searches the last 365 days unless told otherwise.","on_invalid":"reject","allowed_values":[{"value":"last_year","label":"Posted in the last 365 days (the site's default)"},{"value":"last_30_days","label":"Last 30 days"},{"value":"last_7_days","label":"Last 7 days"},{"value":"all_time","label":"No date limit"}],"default":"last_year","example":"last_30_days","aliases":["period","posted_within"]},{"name":"min_temperature","type":"integer","required":false,"description":"Only deals at or above this temperature (degrees; the site's own steps are 20, 100 and 500, any whole number works).","on_invalid":"reject","example":100,"minimum":-100000,"maximum":100000,"aliases":["temperature_from","min_temp"]},{"name":"max_temperature","type":"integer","required":false,"description":"Only deals at or below this temperature.","on_invalid":"reject","example":600,"minimum":-100000,"maximum":100000,"aliases":["temperature_to","max_temp"]},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price, in PLN.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price, in PLN.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max","price_to"]},{"name":"group_id","type":"string","required":false,"description":"Only one category: a categories row's group_id (or a row's group.group_id).","on_invalid":"reject","example":"131","value_pattern":"\\d{1,12}","aliases":["category_id"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked as expired.","on_invalid":"reject","default":false,"example":true},{"name":"hide_local","type":"boolean","required":false,"description":"Leave out in-store-only (local) deals.","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: total, page, last_page, has_more, filters_applied, suggestions_dropped (a search with no result: the site's filler deals are not returned).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","sort":"new"}},{"name":"deals","description":"The Pepper.pl feeds: trending (heating up now), new (every new post), hottest (the hottest of the period) and community discussions. 30 a page.","required_params":[],"optional_params":["list","page"],"params":[{"name":"list","type":"enum","required":false,"description":"Which Pepper.pl feed.","on_invalid":"reject","allowed_values":[{"value":"trending","label":"What is heating up now (the site's 'hot' tab)"},{"value":"new","label":"Newest posts first"},{"value":"hottest","label":"The hottest deals of the current period"},{"value":"discussions","label":"Community discussion threads"}],"default":"trending","example":"new","aliases":["feed","tab"]},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: list, total, total_capped (the feeds report 10000 = a cap), page, last_page, has_more, pinned_rows.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"list":"new"}},{"name":"category_deals","description":"The deals of one Pepper.pl category, hottest or newest first. The category page's own view hides expired deals and starts at a temperature floor (100° or 180° depending on the site); hide_expired / min_temperature change that and meta.applied_view shows what the page applied.","required_params":["group_slug"],"optional_params":["sort","min_temperature","hide_expired","page"],"params":[{"name":"group_slug","type":"string","required":true,"description":"Category slug: a categories row's group_slug (or a row's group.group_slug), e.g. elektronika, gry, podroze.","on_invalid":"reject","example":"elektronika","value_pattern":"[a-z0-9][a-z0-9\\-]{0,100}","aliases":["category","group"]},{"name":"sort","type":"enum","required":false,"description":"Order of the category's deals.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hottest first (the category page's default)"},{"value":"new","label":"Newest first"},{"value":"discussed","label":"Most recently commented"}],"default":"hot","example":"new","aliases":["sort_by"]},{"name":"min_temperature","type":"integer","required":false,"description":"Temperature floor. The category page has its own default floor (100° on most sites); meta.applied_view shows what the page applied.","on_invalid":"reject","example":0,"minimum":-100000,"maximum":100000,"aliases":["temperature_from"]},{"name":"hide_expired","type":"boolean","required":false,"description":"The category page hides expired deals by default; false shows them.","on_invalid":"reject","example":false},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: group_slug, sort, applied_view{sort, min_temperature, hide_expired}, total, total_capped, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group_slug":"elektronika"}},{"name":"deal","description":"One deal in full by its id: price (0 = free, null = no price), the price as the site prints it, comparison price and discount, merchant, voucher code, shipping, temperature, status and expiry, every category it is in, the poster, the outbound link, images and the full description.","required_params":["deal_id"],"optional_params":[],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (1147698); a www.pepper.pl deal URL also works.","on_invalid":"reject","example":"1147698","aliases":["id","thread_id","url"]}],"returns":"deal{deal_id, type, title, url, share_url, visit_url, status, is_expired, is_hot, is_new, is_local, is_exclusive, nsfw, temperature, temperature_level, price, is_free, price_display, next_best_price, discount_pct, source_discount_pct, price_discount, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant, link_host, group, groups[], comment_count, posted_by, published_at, created_at, updated_at, starts_at, expires_at, dispatched_from{name, country}, is_national, regions, locations, image_url, images[], description, description_html}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"1147698"}},{"name":"comments","description":"The comments of one deal, in the site's own order (most helpful first), with author, time, reactions and reply links.","required_params":["deal_id"],"optional_params":["limit","page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (1147698); a www.pepper.pl deal URL also works.","on_invalid":"reject","example":"1147698","aliases":["id","thread_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Comments per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Comment page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"rows[]: comment_id, deal_id, url, text, html, user{user_id, username}, created_at, reactions{like, funny, helpful…}, is_reply, main_comment_id, parent_comment_id, is_pinned, popular, was_edited, status. meta: total, page, last_page, has_more, order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"1147698"}},{"name":"categories","description":"The Pepper.pl category list: every main category with its id, slug, deal count and its community-favourite subcategories. group_id goes to search, group_slug to category_deals.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: group_id, name, group_slug, url, deal_count, subcategories[{group_id, name, group_slug}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"philkotse","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Philkotse Philippines Car Listings","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/philkotse/v1","spec_available":true,"actions":[{"name":"search","description":"Search Philkotse.com, the Philippines' car marketplace: used and brand-new cars from dealers and private sellers. Filter by make, model, condition, body type, transmission, colour, region and city, price, model year and mileage; sort by best match, newest or price. Nothing is required: no parameters browses every car on the site.","required_params":[],"optional_params":["make","model","condition","body_type","transmission","color","region","city","min_price","max_price","min_year","max_year","min_mileage","max_mileage","sort","page","include_pii"],"params":[{"name":"make","type":"string","required":false,"description":"Car make: the site's slug, its numeric id or its name — e.g. `toyota`, `mitsubishi`, `mercedes-benz`, `Ford`. 103 makes; list: the `filters` action.","on_invalid":"reject","example":"toyota","aliases":["brand"]},{"name":"model","type":"string","required":false,"description":"Model slug inside `make` — e.g. `vios`, `fortuner`, `hilux` (from the `models` action). Requires make.","on_invalid":"reject","example":"vios"},{"name":"condition","type":"enum","required":false,"description":"New cars, used cars or both.","on_invalid":"reject","allowed_values":[{"value":"all","label":"New and used"},{"value":"used","label":"Used"},{"value":"new","label":"Brand new"}],"default":"all","example":"used"},{"name":"body_type","type":"enum","required":false,"description":"Body type as the site classifies it.","on_invalid":"reject","allowed_values":[{"value":"commercial","label":"Commercial"},{"value":"coupe","label":"Coupe / Convertible"},{"value":"hatchback","label":"Hatchback"},{"value":"minivan","label":"Minivan"},{"value":"mpv","label":"MPV"},{"value":"pickup","label":"Pickup"},{"value":"sedan","label":"Sedan"},{"value":"suv","label":"SUV / Crossover"},{"value":"van","label":"Van"},{"value":"wagon","label":"Wagon"}],"example":"suv","aliases":["body"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"},{"value":"cvt","label":"CVT"},{"value":"automanual","label":"Automanual"},{"value":"shiftable_automatic","label":"Shiftable Automatic"}],"example":"automatic"},{"name":"color","type":"enum","required":false,"description":"Exterior colour as the seller declared it.","on_invalid":"reject","allowed_values":[{"value":"beige","label":"Beige"},{"value":"black","label":"Black"},{"value":"blue","label":"Blue"},{"value":"brightsilver","label":"Brightsilver"},{"value":"brown","label":"Brown"},{"value":"cream","label":"Cream"},{"value":"golden","label":"Golden"},{"value":"grayblack","label":"Grayblack"},{"value":"green","label":"Green"},{"value":"grey","label":"Grey"},{"value":"orange","label":"Orange"},{"value":"pearlwhite","label":"Pearlwhite"},{"value":"pink","label":"Pink"},{"value":"purple","label":"Purple"},{"value":"red","label":"Red"},{"value":"silver","label":"Silver"},{"value":"skyblue","label":"Skyblue"},{"value":"white","label":"White"},{"value":"yellow","label":"Yellow"},{"value":"other","label":"Other"}],"example":"white","aliases":["colour"]},{"name":"region","type":"string","required":false,"description":"Province / region: slug, id or name — e.g. `metro-manila`, `cebu`, `pampanga`, `Davao del Sur`. 82 regions; list: the `filters` action.","on_invalid":"reject","example":"metro-manila","aliases":["province"]},{"name":"city","type":"string","required":false,"description":"City slug inside `region` — e.g. `makati`, `quezon-city`, `pasig` (from the `cities` action). Requires region.","on_invalid":"reject","example":"makati"},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in Philippine pesos.","on_invalid":"reject","example":500000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in Philippine pesos.","on_invalid":"reject","example":1500000,"minimum":0},{"name":"min_year","type":"integer","required":false,"description":"Oldest model year.","on_invalid":"reject","example":2018,"minimum":1900},{"name":"max_year","type":"integer","required":false,"description":"Newest model year.","on_invalid":"reject","example":2024,"minimum":1900},{"name":"min_mileage","type":"integer","required":false,"description":"Minimum odometer reading in km (used cars).","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km"]},{"name":"max_mileage","type":"integer","required":false,"description":"Maximum odometer reading in km (used cars).","on_invalid":"reject","example":80000,"minimum":0,"aliases":["max_km"]},{"name":"sort","type":"enum","required":false,"description":"Result order — the four the site itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (site default)"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page, 18 listings per full page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. Seller names, phone numbers and e-mails are returned exactly as the listing page prints them.","on_invalid":"reject","default":true,"example":true}],"returns":"{source_url, page, total_pages, has_more, sort, filters_applied, related_dropped, expired_count, listings[]}. Each listing: {listing_id, url, title, condition, year, transmission, mileage_km, location, region, city, price_php, previous_price_php, currency, image, services[], is_premium_dealer, is_expired, seller_id, seller_phone}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"toyota","condition":"used","sort":"newest"}},{"name":"listing","description":"One Philkotse car listing in full: price and previous price, financing terms (down payment, months, monthly), make, model, year, body type, colour, transmission, mileage, plate ending, every photo, the seller's description and feature list, and the seller block — name, phone, e-mail, address, location, certified / premium-dealer flags and profile link.","required_params":[],"optional_params":["listing_id","url","include_pii"],"params":[{"name":"listing_id","type":"integer","required":false,"description":"The `listing_id` of a `search` row (e.g. 900736). Either this or `url`.","on_invalid":"reject","example":900736,"aliases":["id"]},{"name":"url","type":"string","required":false,"description":"A philkotse.com listing URL (…-aid9007362). Either this or `listing_id`.","on_invalid":"reject","example":"https://philkotse.com/honda-city-for-sale-in-makati/2018-15-vx-at-gas-aid9007362"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. Seller names, phone numbers and e-mails are returned exactly as the listing page prints them.","on_invalid":"reject","default":true,"example":true}],"returns":"{listing_id, url, title, posted_date, is_expired, condition, make, model, year, body_type, color, transmission, mileage_km, plate_ending, price_php, previous_price_php, downpayment_php, terms_months, monthly_payment_php, total_price_php, payment_terms, services[], badges[], features[], description, images[], region, location, make_id, model_id, seller{…}}. Either `listing_id` or `url` is required.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://philkotse.com/honda-city-for-sale-in-makati/2018-15-vx-at-gas-aid9007362"}},{"name":"models","description":"Every model Philkotse knows for one make, with the slug `search` accepts.","required_params":["make"],"optional_params":["active_only"],"params":[{"name":"make","type":"string","required":true,"description":"Make slug, id or name (e.g. `toyota`, `46`, `Honda`).","on_invalid":"reject","example":"toyota","aliases":["brand"]},{"name":"active_only","type":"boolean","required":false,"description":"Only the models the site marks as active (current line-up). Default false = every model the site knows, including discontinued ones.","on_invalid":"reject","default":false,"example":false}],"returns":"{make, make_id, model_count, models[{model_id, name, slug, is_active}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"honda"}},{"name":"cities","description":"The cities of one Philippine region, with the slug `search` accepts.","required_params":["region"],"optional_params":[],"params":[{"name":"region","type":"string","required":true,"description":"Region slug, id or name (e.g. `metro-manila`, `cebu`).","on_invalid":"reject","example":"metro-manila","aliases":["province"]}],"returns":"{region, region_id, city_count, cities[{city_id, name, slug}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"region":"metro-manila"}},{"name":"filters","description":"The site's own filter values: 103 makes, 82 regions, 10 body types, 5 transmissions and 20 colours, with the slugs `search` accepts.","required_params":[],"optional_params":["kind"],"params":[{"name":"kind","type":"enum","required":false,"description":"Return only one table.","on_invalid":"reject","allowed_values":[{"value":"makes","label":"Makes"},{"value":"regions","label":"Regions"},{"value":"body_types","label":"Body types"},{"value":"transmissions","label":"Transmissions"},{"value":"colors","label":"Colours"}],"example":"makes"}],"returns":"{makes[], regions[], body_types[], transmissions[], colors[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"kind":"makes"}}]},{"name":"phone-validate","category":{"id":"utilities","title":"Utilities & AI"},"title":"Phone Number Validation API — validate and parse phone numbers: validity, international and national format, region, line type, carrier and timezone","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/phone-validate/v1","spec_available":true,"actions":[{"name":"validate","description":"validate ONE number → validity + format/region/line-type/carrier/timezone/location","required_params":["number"],"optional_params":["region","default_region","lang"],"params":[{"name":"number","type":"string","required":true,"description":"The phone number to validate. Best supplied in E.164 (+countrycode…); a national number works too if you also pass `region`.","on_invalid":"reject","example":"+90 532 123 4567","aliases":["phone","input"]},{"name":"region","type":"string","required":false,"description":"Default ISO-3166 alpha-2 region (e.g. TR, US, DE, GB) used to parse NATIONAL-format numbers that have no +country-code. Ignored for E.164 input. Case-insensitive.","on_invalid":"ignore","example":"TR","aliases":["default_region","country"]},{"name":"lang","type":"string","required":false,"description":"Language for the carrier name + geocoded location text (e.g. en, de, fr, es). Falls back to English.","on_invalid":"ignore","default":"en","example":"en"}],"returns":"is_valid, is_possible, parse_error, e164/national_format/international_format/rfc3966, country_code, region_code, national_number, line_type (mobile/fixed_line/voip/toll_free/…), carrier, location, timezones[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"number":"+90 532 123 4567"}},{"name":"batch","description":"validate up to 100 numbers in one call (shared default region)","required_params":["numbers"],"optional_params":["region","default_region","lang"],"params":[{"name":"numbers","type":"array","required":true,"description":"Up to 100 phone numbers. A JSON array, OR a comma/newline-separated string. Each is validated independently (a bad entry → is_valid=false, never fails the call).","on_invalid":"reject","example":["+90 532 123 4567","+1 415 555 2671"],"aliases":["phone"]},{"name":"region","type":"string","required":false,"description":"Default ISO-3166 alpha-2 region (e.g. TR, US, DE, GB) used to parse NATIONAL-format numbers that have no +country-code. Ignored for E.164 input. Case-insensitive.","on_invalid":"ignore","example":"TR","aliases":["default_region","country"]},{"name":"lang","type":"string","required":false,"description":"Language for the carrier name + geocoded location text (e.g. en, de, fr, es). Falls back to English.","on_invalid":"ignore","default":"en","example":"en"}],"returns":"count, valid_count, possible_count, results[] (each the same record as validate)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"numbers":["+90 532 123 4567","+90 212 245 5555","nonsense"]}}]},{"name":"pickles","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Pickles Auctions API (Australia) — search live pickles.com.au auction lots: salvage and insurance write-off cars, dealer-trade vehicles, trucks, earthmoving plant, trailers, caravans, boats and government/industrial general goods. Filter by make, model, year, odometer, state, write-off (WOVR) status, buy method and sale event, then pull the full lot record (VIN, rego, odometer, damage, equipment, every photo, auction end time) plus the live auction calendar. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pickles/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Pickles auction lots. Free-text `query` and/or structured filters (category, asset_type, make, model, badge, series, year or year_min/year_max, odometer_min/max, hours_max, state + city, buy_method, salvage, wovr, body, fuel_type, transmission, drive_type, colour, vendor, sale_id, price_min/max, has_keys). Sortable and paginated. PASS AT LEAST ONE of `query` or a filter — with neither, you get the whole live catalogue (10 959 lots on 2026-10-01). Every filter is AND-ed server-side against the live index, and `meta.total_results` is the exact upstream count so you can verify a filter bit.","required_params":[],"optional_params":["query","category","asset_type","make","model","badge","series","year","year_min","year_max","odometer_min","odometer_max","hours_max","state","city","buy_method","salvage","wovr","body","fuel_type","transmission","drive_type","colour","vendor","sale_id","price_min","price_max","has_keys","sort","page","size"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword across the whole lot catalogue (make, model, badge, description, vendor, sale name). Leave it out to browse with filters only. Either `query` or at least one filter is strongly recommended — with neither you get the whole live catalogue, newest-relevance order.","on_invalid":"ignore","example":"toyota hilux","aliases":["q","keyword","search"]},{"name":"category","type":"enum","required":false,"description":"Pickles top-level catalogue. Live lot counts per category come from the `facets` action (field=category).","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"trucks","label":"Trucks"},{"value":"motorcycles","label":"Motorcycles"},{"value":"caravans","label":"Caravans"},{"value":"boats","label":"Boats"},{"value":"trailers","label":"Trailers"},{"value":"machinery","label":"Industrial machinery"},{"value":"earthmoving-and-mobile-plant","label":"Earthmoving & mobile plant"},{"value":"general-goods","label":"Government / industrial general goods"},{"value":"computers-smartphones-office-machines","label":"IT & office equipment"}],"example":"cars","aliases":["product_type","type"]},{"name":"asset_type","type":"enum","required":false,"description":"Asset class as Pickles classifies the item itself (a narrower axis than `category`).","on_invalid":"reject","allowed_values":[{"value":"vehicle","label":"Passenger vehicle"},{"value":"truck","label":"Truck"},{"value":"motorcycle","label":"Motorcycle"},{"value":"caravan","label":"Caravan"},{"value":"trailer","label":"Trailer"},{"value":"marine","label":"Marine / boat"},{"value":"emp","label":"Earthmoving & mobile plant"},{"value":"machinery","label":"Machinery"},{"value":"generalgoods","label":"General goods"},{"value":"itofficeequipment","label":"IT / office equipment"}],"example":"vehicle"},{"name":"make","type":"string","required":false,"description":"Vehicle make, matched exactly and case-insensitively (toyota, ford, hyundai, ldv …). The live make list with lot counts is the `facets` action with field=make.","on_invalid":"ignore","example":"toyota"},{"name":"model","type":"string","required":false,"description":"Vehicle model, matched exactly (Hilux, Ranger, Corolla). Pair with `make` when a model name is shared between makes.","on_invalid":"ignore","example":"Hilux"},{"name":"badge","type":"string","required":false,"description":"Trim/badge key in Pickles' own 'make|model|badge' form, e.g. 'ford|ranger|xlt'. Get the exact keys from facets field=badge.","on_invalid":"ignore","example":"toyota|hilux|sr"},{"name":"series","type":"string","required":false,"description":"Series/chassis key in Pickles' own 'make|model|series' form, e.g. 'ford|ranger|px-mkiii'. Keys come from facets field=series.","on_invalid":"ignore","example":"toyota|hilux|gun126r"},{"name":"year","type":"integer","required":false,"description":"Exact build/model year. For a span use year_min / year_max.","on_invalid":"ignore","example":2020,"minimum":1900,"maximum":2030},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year (inclusive). Ignored when `year` is set.","on_invalid":"ignore","minimum":1900,"maximum":2030},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive). Ignored when `year` is set.","on_invalid":"ignore","minimum":1900,"maximum":2030},{"name":"odometer_min","type":"integer","required":false,"description":"Minimum odometer reading in km.","on_invalid":"ignore","minimum":0},{"name":"odometer_max","type":"integer","required":false,"description":"Maximum odometer reading in km. Lots whose odometer the source does not publish are excluded by this filter.","on_invalid":"ignore","example":50000,"minimum":0},{"name":"hours_max","type":"integer","required":false,"description":"Maximum engine hours — for plant, machinery and trucks.","on_invalid":"ignore","minimum":0},{"name":"state","type":"enum","required":false,"description":"Australian state/territory the lot sits in.","on_invalid":"reject","allowed_values":[{"value":"nsw","label":"New South Wales"},{"value":"vic","label":"Victoria"},{"value":"qld","label":"Queensland"},{"value":"wa","label":"Western Australia"},{"value":"sa","label":"South Australia"},{"value":"nt","label":"Northern Territory"},{"value":"tas","label":"Tasmania"},{"value":"act","label":"ACT"},{"value":"nat","label":"National / multi-state"}],"example":"nsw","aliases":["region"]},{"name":"city","type":"string","required":false,"description":"City/metro inside `state` (sydney, melbourne, brisbane, perth …). Requires `state` — Pickles keys this filter as '<state>|<city>'. Exact keys: facets field=city.","on_invalid":"ignore","example":"sydney"},{"name":"buy_method","type":"enum","required":false,"description":"How the lot is sold.","on_invalid":"reject","allowed_values":[{"value":"pickles_online","label":"Pickles Online timed auction"},{"value":"pickles_live","label":"Pickles Live simulcast auction"},{"value":"buy_now","label":"Fixed Buy-Now price"},{"value":"eoi","label":"Expression of interest"},{"value":"auction","label":"Classic on-site auction"}],"example":"pickles_online"},{"name":"salvage","type":"enum","required":false,"description":"Salvage / insurance write-off stock vs ordinary used stock.","on_invalid":"reject","allowed_values":[{"value":"salvage","label":"Salvage & insurance write-off lots only"},{"value":"non_salvage","label":"Non-salvage lots only"}],"example":"salvage"},{"name":"wovr","type":"string","required":false,"description":"Written-Off Vehicle Register status, exact string as Pickles publishes it: 'Repairable Write-Off', 'Statutory Write-Off', 'Inspection Passed Repairable Writeoff', 'WOVR N/A'.","on_invalid":"ignore","example":"Repairable Write-Off"},{"name":"body","type":"string","required":false,"description":"Body style key (wagon, hatchback, sedan, utility-dual-cab …). Live keys + counts: facets field=body.","on_invalid":"ignore","example":"utility-dual-cab"},{"name":"fuel_type","type":"string","required":false,"description":"Fuel type, exact string as Pickles publishes it ('Diesel', 'Petrol - Unleaded ULP', 'Petrol - Premium ULP', 'Electric' …). Live values: facets field=fuel_type.","on_invalid":"ignore","example":"Diesel"},{"name":"transmission","type":"string","required":false,"description":"Transmission, exact string ('Automatic', 'Manual', 'Sports Automatic', 'Constantly Variable Transmission' …).","on_invalid":"ignore","example":"Automatic"},{"name":"drive_type","type":"string","required":false,"description":"Drive type, exact string ('Front Wheel Drive', '4X4 Dual Range', 'FWD : Front Wheel Drive' …). Live values: facets field=drive_type.","on_invalid":"ignore","example":"4X4 Dual Range"},{"name":"colour","type":"string","required":false,"description":"Exterior colour family as Pickles records it (Red, White, Blue …).","on_invalid":"ignore","example":"Red","aliases":["color"]},{"name":"vendor","type":"string","required":false,"description":"Selling vendor, exact name (insurers, fleets, government departments). Live vendor list: facets field=vendor.","on_invalid":"ignore","example":"YOUI PTY LTD"},{"name":"sale_id","type":"integer","required":false,"description":"Restrict to one auction/sale event by its Pickles sale id — the `sale_id` the `auctions` action returns.","on_invalid":"ignore","example":16405},{"name":"price_min","type":"number","required":false,"description":"Minimum advertised price in AUD. Only Buy-Now / fixed-price lots carry a price; auction lots are 0 upstream, so any price_min above 0 also limits you to priced stock.","on_invalid":"ignore","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum advertised price in AUD (see price_min for the auction-lot caveat).","on_invalid":"ignore","minimum":0},{"name":"has_keys","type":"boolean","required":false,"description":"True = only lots Pickles records as having keys.","on_invalid":"ignore"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Index relevance (default)"},{"value":"ending_soonest","label":"Bidding ends soonest first"},{"value":"ending_latest","label":"Bidding ends latest first"},{"value":"sale_soonest","label":"Sale event starts soonest first"},{"value":"year_desc","label":"Year: new to old"},{"value":"year_asc","label":"Year: old to new"},{"value":"odometer_asc","label":"Odometer: low to high"},{"value":"odometer_desc","label":"Odometer: high to low"},{"value":"price_desc","label":"Price: high to low"},{"value":"price_asc","label":"Price: low to high"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page number. page × size must stay under ~100 000.","on_invalid":"ignore","default":1,"minimum":1,"maximum":400},{"name":"size","type":"integer","required":false,"description":"Lots per page, 1-100 (default 20).","on_invalid":"ignore","default":20,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"lots[]{stock_number, title, summary, category, category_label, asset_type, lines_of_business, url, make, model, series, badge, year, build_year, compliance_date, body, colour, colour_manufacturer, doors, seats, engine_litres, engine_capacity, engine_type, cylinders, fuel_type, fuel_economy, transmission, gears, drive_type, power_kw, horsepower, odometer, odometer_note, kilometres, engine_hours, vin, serial_number, hull_id, registration_plate, registration_state, registration_expiry, has_keys, spare_keys, sold_with_plates, plates_count, service_history, is_salvage, salvage_label, wovr_status, incident_types[], driveable, engine_starts, burnt, price_aud, buy_now_price_aud, minimum_bid_aud, buy_method, selling_method, buy_now_during_auction, bidding_ends_at, for_sale, vendor_name, sale{sale_id, sale_number, name, status, selling_methods[], starts_at, ends_at, event_location, branch}, location_suburb, location_city, location_state, location_timezone, image_count, thumbnail, ancap_rating, green_star_rating, redbook_code, redbook_description, vfacts_class, gvm, gvm_unit, gcm, tare, towing_braked} + meta{total_results, pagination}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"make":"toyota","size":20}},{"name":"lot_detail","description":"Full record for one lot by `stock_number` (the digits at the end of a pickles.com.au/used/details/... URL, and the `stock_number` of any search row). Adds everything search trims: the long auction description, EVERY photo URL in order, standard equipment, accessories, fitted extras, option pack, ROPS/FOPS and physical dimensions — on top of all search fields. A stock number that is not in the live public catalogue returns NOT_FOUND, never an empty success.","required_params":["stock_number"],"optional_params":[],"params":[{"name":"stock_number","type":"string","required":true,"description":"Pickles stock number, e.g. 62424123.","on_invalid":"reject","example":"62424123","aliases":["stock","lot","lot_number","id","item_id"]}],"returns":"lot{stock_number, title, summary, category, category_label, asset_type, lines_of_business, url, make, model, series, badge, year, build_year, compliance_date, body, colour, colour_manufacturer, doors, seats, engine_litres, engine_capacity, engine_type, cylinders, fuel_type, fuel_economy, transmission, gears, drive_type, power_kw, horsepower, odometer, odometer_note, kilometres, engine_hours, vin, serial_number, hull_id, registration_plate, registration_state, registration_expiry, has_keys, spare_keys, sold_with_plates, plates_count, service_history, is_salvage, salvage_label, wovr_status, incident_types[], driveable, engine_starts, burnt, price_aud, buy_now_price_aud, minimum_bid_aud, buy_method, selling_method, buy_now_during_auction, bidding_ends_at, for_sale, vendor_name, sale{sale_id, sale_number, name, status, selling_methods[], starts_at, ends_at, event_location, branch}, location_suburb, location_city, location_state, location_timezone, image_count, thumbnail, ancap_rating, green_star_rating, redbook_code, redbook_description, vfacts_class, gvm, gvm_unit, gcm, tare, towing_braked, description, images[]{image_id, sequence, url}, standard_equipment[], accessories[], fitted_with[], other_extras[], option_pack, rops, fops, length, width, height}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"stock_number":"62424123"}},{"name":"auctions","description":"The live Pickles auction/sale calendar, built from the lots that are currently on offer: sale id, sale name, start and end time, status, event location, selling branch, selling methods, the states its lots sit in and the EXACT number of live lots in it. Use a returned `sale_id` as search's `sale_id` filter to list that sale's catalogue. Optional `state` / `category` scope the calendar. NOTE: the exact number of live sales is always reported as `meta.sales_total`; the engine names as many of them as one catalogue scan reaches and reports that as `meta.sales_named` — it never pretends the list is complete.","required_params":[],"optional_params":["state","category","limit"],"params":[{"name":"state","type":"enum","required":false,"description":"Australian state/territory the lot sits in.","on_invalid":"reject","allowed_values":[{"value":"nsw","label":"New South Wales"},{"value":"vic","label":"Victoria"},{"value":"qld","label":"Queensland"},{"value":"wa","label":"Western Australia"},{"value":"sa","label":"South Australia"},{"value":"nt","label":"Northern Territory"},{"value":"tas","label":"Tasmania"},{"value":"act","label":"ACT"},{"value":"nat","label":"National / multi-state"}],"example":"nsw","aliases":["region"]},{"name":"category","type":"enum","required":false,"description":"Pickles top-level catalogue. Live lot counts per category come from the `facets` action (field=category).","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"trucks","label":"Trucks"},{"value":"motorcycles","label":"Motorcycles"},{"value":"caravans","label":"Caravans"},{"value":"boats","label":"Boats"},{"value":"trailers","label":"Trailers"},{"value":"machinery","label":"Industrial machinery"},{"value":"earthmoving-and-mobile-plant","label":"Earthmoving & mobile plant"},{"value":"general-goods","label":"Government / industrial general goods"},{"value":"computers-smartphones-office-machines","label":"IT & office equipment"}],"example":"cars","aliases":["product_type","type"]},{"name":"limit","type":"integer","required":false,"description":"How many sale events to return, soonest first (1-100, default 25).","on_invalid":"ignore","default":25,"minimum":1,"maximum":100}],"returns":"auctions[]{sale_id, sale_number, name, status, selling_methods[], starts_at, ends_at, event_location, branch, states[], categories[], lot_count} + meta{sales_total, sales_named}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"limit":10}},{"name":"facets","description":"The live filter taxonomy: every distinct value of one field across the lots currently on offer, with its exact lot count. This is how you discover the valid values for search's free-string filters (make, model, body, fuel_type, transmission, drive_type, colour, vendor, wovr) instead of guessing them. One cheap call, no lot bodies transferred.","required_params":["field"],"optional_params":["field","query","limit"],"params":[{"name":"field","type":"enum","required":true,"description":"Which field's live values to list.","on_invalid":"reject","allowed_values":[{"value":"make","label":"Live values of `makeFilter`"},{"value":"model","label":"Live values of `modelFacetFilter`"},{"value":"badge","label":"Live values of `badgeFacetFilter`"},{"value":"series","label":"Live values of `seriesFacetFilter`"},{"value":"category","label":"Live values of `productTypeFilter`"},{"value":"asset_type","label":"Live values of `assetType`"},{"value":"body","label":"Live values of `bodyFilter`"},{"value":"fuel_type","label":"Live values of `fuelType`"},{"value":"transmission","label":"Live values of `transmission`"},{"value":"drive_type","label":"Live values of `driveType`"},{"value":"colour","label":"Live values of `colourUniqueFacet`"},{"value":"salvage","label":"Live values of `salvage`"},{"value":"wovr","label":"Live values of `wovr`"},{"value":"buy_method","label":"Live values of `buyMethod`"},{"value":"selling_method","label":"Live values of `sellingMethodName`"},{"value":"vendor","label":"Live values of `vendorName`"},{"value":"year","label":"Live values of `year`"},{"value":"line_of_business","label":"Live values of `lineOfBusinessUrls`"},{"value":"state","label":"Live values of `productLocation/stateFilter`"},{"value":"city","label":"Live values of `productLocation/cityFacetFilter`"},{"value":"sale_id","label":"Live values of `sale/saleId`"},{"value":"bid_end","label":"Live values of `productBidEnd`"}],"example":"make"},{"name":"query","type":"string","required":false,"description":"Optional case-insensitive substring to narrow the returned value list (client-side on the bucket labels, not a catalogue search).","on_invalid":"ignore","example":"toyota","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Maximum number of distinct values (1-500, default 50), biggest lot count first.","on_invalid":"ignore","default":50,"minimum":1,"maximum":500}],"returns":"field, values[]{value, lot_count} + meta{total_results}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"field":"make","limit":30}}]},{"name":"pigu","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Pigu API — Baltic and Finnish marketplace (pigu.lt, 220.lv, kaup24.ee, hobbyhall.fi): EUR prices for everyone and for Pigu PLUS members, every seller's offer, delivery dates and fees, specs","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pigu/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search in one Pigu Group shop (country lt/lv/ee/fi). Each row: product id and modification id (pass both to `product`), title, brand, URL, image, price in EUR that everyone pays, Pigu PLUS member price when the shop shows one, monthly instalment from, rating and review count, seller id and supply type (1P = sold by the shop, 3P = marketplace seller), delivery promise, promotion labels, sponsored flag, category id (feeds `category`). Plus the shop's own total and page count. Page on with `next_cursor`: it keeps every page in page 1's result set and drops rows already returned. One of `query` or `cursor` is required.","required_params":[],"optional_params":["query","country","min_price","max_price","sort","page","result_set","cursor"],"params":[{"name":"query","type":"string","required":false,"description":"Search words, as typed in the shop's search box (any language the shop indexes; the local language gives the most rows). Required unless `cursor` is given.","on_invalid":"reject","example":"lego technic","aliases":["q","keyword","search"]},{"name":"country","type":"enum","required":false,"description":"Which shop: lt = pigu.lt (Lithuania), lv = 220.lv (Latvia), ee = kaup24.ee (Estonia), fi = hobbyhall.fi (Finland). Prices are EUR in all four.","on_invalid":"reject","allowed_values":[{"value":"lt","label":"pigu.lt (Lithuania)"},{"value":"lv","label":"220.lv (Latvia)"},{"value":"ee","label":"kaup24.ee (Estonia)"},{"value":"fi","label":"hobbyhall.fi (Finland)"}],"default":"lt","example":"lt","aliases":["market","site"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR. The shop applies the range to the LOWEST payable price, which is the member price when the row has one, so a row's `price` (for everyone) can be above `max_price` (measured: 200-400 returned rows with `price` up to 487 and `member_price` in range).","on_invalid":"reject","example":200,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR (same rule as `min_price`).","on_invalid":"reject","example":400,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"best_selling (the shop's default), price_asc, price_desc, delivery (fastest delivery first) or rating. Price sorts order by the lowest payable price.","on_invalid":"reject","allowed_values":[{"value":"best_selling","label":"best_selling"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"delivery","label":"delivery"},{"value":"rating","label":"rating"}],"default":"best_selling","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, starting at 1 (59-60 rows per page, measured).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"result_set","type":"enum","required":false,"description":"The shop answers a keyword from one of two result sets, picked per request (lego technic: 451 or 261 hits). Pass the `result_set` of page 1 when asking for later pages; the engine asks again until the shop answers from that set (up to 3 times). `next_cursor` does this for you.","on_invalid":"reject","allowed_values":[{"value":"algolia","label":"algolia"},{"value":"classic","label":"classic"},{"value":"landing","label":"landing"}],"example":"algolia"},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous search answer. Carries the query, country, filters, sort, next page, page 1's result set and the product ids already returned; rows returned on earlier pages are dropped and counted in `duplicates_dropped`. Use it alone.","on_invalid":"reject","example":"","aliases":["next_cursor"]}],"returns":"results[]{product_id, modification_id, title, brand, url, image, currency, price, member_price, installment_from_per_month, rating, review_count, available, item_status, supply_type, seller_id, delivery_promise, delivery_label, labels, category_id, sponsored} + total, page, last_page, has_more, next_cursor, result_set, result_set_requested, result_set_changed, duplicates_dropped, search_kind, redirected_to","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"lego technic","country":"lt"}},{"name":"category","description":"One category listing of a Pigu Group shop, by the category id a search row carries in `category_id` (or the id in a shop category URL's listing). Same row fields as `search`, plus the category title and the shop's own product count.","required_params":["category_id"],"optional_params":["country","sort","page"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric category id, e.g. 85 = mobile phones on pigu.lt. Ids are per shop: take them from a search row of the same country.","on_invalid":"reject","example":"85","aliases":["category","cat","id"]},{"name":"country","type":"enum","required":false,"description":"Which shop: lt = pigu.lt (Lithuania), lv = 220.lv (Latvia), ee = kaup24.ee (Estonia), fi = hobbyhall.fi (Finland). Prices are EUR in all four.","on_invalid":"reject","allowed_values":[{"value":"lt","label":"pigu.lt (Lithuania)"},{"value":"lv","label":"220.lv (Latvia)"},{"value":"ee","label":"kaup24.ee (Estonia)"},{"value":"fi","label":"hobbyhall.fi (Finland)"}],"default":"lt","example":"lt","aliases":["market","site"]},{"name":"sort","type":"enum","required":false,"description":"best_selling (the shop's default), price_asc, price_desc, delivery (fastest delivery first) or rating. Price sorts order by the lowest payable price.","on_invalid":"reject","allowed_values":[{"value":"best_selling","label":"best_selling"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"delivery","label":"delivery"},{"value":"rating","label":"rating"}],"default":"best_selling","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, starting at 1 (59-60 rows per page, measured).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"results[]{same as search} + category{id, title}, total, page, last_page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"85","country":"lt"}},{"name":"product","description":"One product of a Pigu Group shop by its product id AND modification id (both are on every search/category row). Returns the main offer's price for everyone and member price, main seller with rating, every seller's offer with both prices, rating count and delivery date, the delivery options with date and fee, specification table, description, images.","required_params":["product_id","modification_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id exactly as a search row returns it (also the `id=` number of the product URL).","on_invalid":"reject","example":"79734775","aliases":["id"]},{"name":"modification_id","type":"string","required":true,"description":"Modification id from the same search row. A modification that belongs to another product answers NOT_FOUND.","on_invalid":"reject","example":"101444835","aliases":["m","variant_id"]},{"name":"country","type":"enum","required":false,"description":"Which shop: lt = pigu.lt (Lithuania), lv = 220.lv (Latvia), ee = kaup24.ee (Estonia), fi = hobbyhall.fi (Finland). Prices are EUR in all four.","on_invalid":"reject","allowed_values":[{"value":"lt","label":"pigu.lt (Lithuania)"},{"value":"lv","label":"220.lv (Latvia)"},{"value":"ee","label":"kaup24.ee (Estonia)"},{"value":"fi","label":"hobbyhall.fi (Finland)"}],"default":"lt","example":"lt","aliases":["market","site"]}],"returns":"product{product_id, modification_id, title, brand, currency, price, member_price, rating, review_count, question_count, available, supply_type, seller{id, name, url, rating}, other_offers_count, other_offers_from_price, offers[]{seller_name, seller_url, seller_id, seller_rating, seller_rating_count, supply_type, price, member_price, delivery_date}, delivery[]{method, date, fee}, category_id, category_name, category_url, manufacturer_code, specifications[]{name, value}, description, images[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"79734775","modification_id":"101444835","country":"lt"}}]},{"name":"pingodoce","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Pingo Doce API — Portuguese supermarket prices: shelf price, promotion and was price, PVPR, price per kg/litre, promotion end date, ingredients, allergens and nutrition from pingodoce.pt","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pingodoce/v1","spec_available":true,"actions":[{"name":"search","description":"Search Pingo Doce's online shop: shelf price, was price of a promotion, recommended retail price (PVPR), promotion badge and end date, price per kg/l, pack size, brand, category. `query` required; filters: category, brand, diet, min_price, max_price; sort; paging up to 100 per page; optional post code for that delivery area's range.","required_params":["query"],"optional_params":["category","brand","diet","min_price","max_price","sort","page","per_page","postal_code"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed in the Pingo Doce shop (Portuguese works best).","on_invalid":"reject","example":"leite","aliases":["q","keyword","search","term"]},{"name":"category","type":"string","required":false,"description":"Pingo Doce category id as `categories` returns it (e.g. ec_leitebebidasvegetais_900). An id the site does not know is rejected.","on_invalid":"reject","example":"ec_leitebebidasvegetais_900","aliases":["cgid","category_id"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as the shop prints it (e.g. Mimosa, Pingo Doce, Alpro).","on_invalid":"reject","example":"Mimosa","aliases":["marca"]},{"name":"diet","type":"enum","required":false,"description":"One of the shop's own food-choice facets: organic, vegan, gluten_free, lactose_free, milk_free, no_added_sugar, light, low_fat, high_protein, source_of_protein, source_of_fibre, source_of_omega3.","on_invalid":"reject","allowed_values":[{"value":"organic","label":"biologico"},{"value":"vegan","label":"vegan"},{"value":"gluten_free","label":"semgluten"},{"value":"lactose_free","label":"semlactose"},{"value":"milk_free","label":"semleite"},{"value":"no_added_sugar","label":"semacucaresadiconados"},{"value":"light","label":"light"},{"value":"low_fat","label":"baixoteordegordura"},{"value":"high_protein","label":"altoteorproteina"},{"value":"source_of_protein","label":"fontedeproteina"},{"value":"source_of_fibre","label":"fontedefibra"},{"value":"source_of_omega3","label":"fonteomega3"}],"aliases":["dietary","food_choice"]},{"name":"min_price","type":"number","required":false,"description":"Minimum shelf price in EUR (the number in `price`, per its `price_unit`).","on_invalid":"reject","example":1,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum shelf price in EUR.","on_invalid":"reject","example":3,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"relevance","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100 (default 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100,"aliases":["limit","sz"]},{"name":"postal_code","type":"string","required":false,"description":"Portuguese post code (NNNN-NNN) of a home-delivery area. Pingo Doce's range depends on it (measured: 'leite' 255 rows with no area, 155 Lisboa 1000-001, 200 Porto 4000-322); prices were the same across areas. Omit for the site's default range; the response's `store` says which.","on_invalid":"reject","example":"4000-322","aliases":["zip_code","zip","postcode","codigo_postal","cp"]}],"returns":"store{postal_code, delivery_type, store_name, store_defaulted, resolved_from}, query, category, filters, sort, total, total_is_exact, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg|…: what `price` is per), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (manufacturer PVPR), currency, on_offer, promotion_label, promotion_code, promotion_end{text, day, month, year}, pack_size, unit_price, unit_price_unit, unit_info_text, category, category_path, analytics_price, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"leite"}},{"name":"category","description":"List one Pingo Doce category (id from `categories`) with the same row fields, filters and paging as `search` — the way to walk the whole catalogue.","required_params":["category"],"optional_params":["brand","diet","min_price","max_price","sort","page","per_page","postal_code"],"params":[{"name":"category","type":"string","required":false,"description":"Pingo Doce category id as `categories` returns it (e.g. ec_leitebebidasvegetais_900). An id the site does not know is rejected.","on_invalid":"reject","example":"ec_leitebebidasvegetais_900","aliases":["cgid","category_id"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as the shop prints it (e.g. Mimosa, Pingo Doce, Alpro).","on_invalid":"reject","example":"Mimosa","aliases":["marca"]},{"name":"diet","type":"enum","required":false,"description":"One of the shop's own food-choice facets: organic, vegan, gluten_free, lactose_free, milk_free, no_added_sugar, light, low_fat, high_protein, source_of_protein, source_of_fibre, source_of_omega3.","on_invalid":"reject","allowed_values":[{"value":"organic","label":"biologico"},{"value":"vegan","label":"vegan"},{"value":"gluten_free","label":"semgluten"},{"value":"lactose_free","label":"semlactose"},{"value":"milk_free","label":"semleite"},{"value":"no_added_sugar","label":"semacucaresadiconados"},{"value":"light","label":"light"},{"value":"low_fat","label":"baixoteordegordura"},{"value":"high_protein","label":"altoteorproteina"},{"value":"source_of_protein","label":"fontedeproteina"},{"value":"source_of_fibre","label":"fontedefibra"},{"value":"source_of_omega3","label":"fonteomega3"}],"aliases":["dietary","food_choice"]},{"name":"min_price","type":"number","required":false,"description":"Minimum shelf price in EUR (the number in `price`, per its `price_unit`).","on_invalid":"reject","example":1,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum shelf price in EUR.","on_invalid":"reject","example":3,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"relevance","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100 (default 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100,"aliases":["limit","sz"]},{"name":"postal_code","type":"string","required":false,"description":"Portuguese post code (NNNN-NNN) of a home-delivery area. Pingo Doce's range depends on it (measured: 'leite' 255 rows with no area, 155 Lisboa 1000-001, 200 Porto 4000-322); prices were the same across areas. Omit for the site's default range; the response's `store` says which.","on_invalid":"reject","example":"4000-322","aliases":["zip_code","zip","postcode","codigo_postal","cp"]}],"returns":"store{postal_code, delivery_type, store_name, store_defaulted, resolved_from}, query, category, filters, sort, total, total_is_exact, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg|…: what `price` is per), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (manufacturer PVPR), currency, on_offer, promotion_label, promotion_code, promotion_end{text, day, month, year}, pack_size, unit_price, unit_price_unit, unit_info_text, category, category_path, analytics_price, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"ec_leitebebidasvegetais_900"}},{"name":"promotions","description":"Pingo Doce products on promotion right now (the shop's Promoções section): offer price, was price or PVPR, badge, end date. Narrow with `query`, `brand`, `diet`, price range.","required_params":[],"optional_params":["query","brand","diet","min_price","max_price","sort","page","per_page","postal_code"],"params":[{"name":"query","type":"string","required":false,"description":"Optional search words inside the promotions.","on_invalid":"reject","example":"leite","aliases":["q","keyword","search","term"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as the shop prints it (e.g. Mimosa, Pingo Doce, Alpro).","on_invalid":"reject","example":"Mimosa","aliases":["marca"]},{"name":"diet","type":"enum","required":false,"description":"One of the shop's own food-choice facets: organic, vegan, gluten_free, lactose_free, milk_free, no_added_sugar, light, low_fat, high_protein, source_of_protein, source_of_fibre, source_of_omega3.","on_invalid":"reject","allowed_values":[{"value":"organic","label":"biologico"},{"value":"vegan","label":"vegan"},{"value":"gluten_free","label":"semgluten"},{"value":"lactose_free","label":"semlactose"},{"value":"milk_free","label":"semleite"},{"value":"no_added_sugar","label":"semacucaresadiconados"},{"value":"light","label":"light"},{"value":"low_fat","label":"baixoteordegordura"},{"value":"high_protein","label":"altoteorproteina"},{"value":"source_of_protein","label":"fontedeproteina"},{"value":"source_of_fibre","label":"fontedefibra"},{"value":"source_of_omega3","label":"fonteomega3"}],"aliases":["dietary","food_choice"]},{"name":"min_price","type":"number","required":false,"description":"Minimum shelf price in EUR (the number in `price`, per its `price_unit`).","on_invalid":"reject","example":1,"minimum":0,"aliases":["pmin","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Maximum shelf price in EUR.","on_invalid":"reject","example":3,"minimum":0,"aliases":["pmax","price_max"]},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · name_asc · name_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"name_desc","label":"name_desc"}],"default":"relevance","aliases":["sort_by","srule"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":2000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100 (default 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100,"aliases":["limit","sz"]},{"name":"postal_code","type":"string","required":false,"description":"Portuguese post code (NNNN-NNN) of a home-delivery area. Pingo Doce's range depends on it (measured: 'leite' 255 rows with no area, 155 Lisboa 1000-001, 200 Porto 4000-322); prices were the same across areas. Omit for the site's default range; the response's `store` says which.","on_invalid":"reject","example":"4000-322","aliases":["zip_code","zip","postcode","codigo_postal","cp"]}],"returns":"store{postal_code, delivery_type, store_name, store_defaulted, resolved_from}, query, category, filters, sort, total, total_is_exact, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg|…: what `price` is per), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (manufacturer PVPR), currency, on_offer, promotion_label, promotion_code, promotion_end{text, day, month, year}, pack_size, unit_price, unit_price_unit, unit_info_text, category, category_path, analytics_price, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"leite"}},{"name":"product","description":"One Pingo Doce product by the `product_id` a search row returns: price, was price or PVPR, promotion badge and end date, price per kg/l, availability and order limits, category, images, and the label: regulated name, ingredients, allergens, nutrition table, vitamins and minerals, origin, storage, preparation, producer.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"The numeric product id a search row returns, or its https://www.pingodoce.pt/home/produtos/…-<id>.html URL.","on_invalid":"reject","example":"41043","aliases":["id","pid","url","product_url"]}],"returns":"product{product_id, name, brand, short_description, description, price, price_unit, price_text, regular_price, recommended_retail_price, currency, on_offer, promotion_label, promotion_code, promotion_end, pack_size, unit_price, unit_price_unit, unit_info_text, sales_unit, available, online, ready_to_order, availability_messages[], min_order_quantity, max_order_quantity, rating, category, category_path, product_family, national_product, origin_label, returnable_package, returnable_package_price, images[], url}, label{regulated_name, ingredients, ingredients_placeholder, allergens, origin, preparation, storage, storage_after_opening, conservation[], food_choices[], producer, producer_address, responsible, nutrition_per, nutrition[]{nutrient, code, amount, amount_text, unit}, vitamins_and_minerals[], aminogram[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"41043"}},{"name":"categories","description":"Pingo Doce's category tree from the shop menu: id, name, URL, children. Ids feed `category` and the `category` filter.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"string","required":false,"description":"Return only this category's subtree; omit for the whole tree.","on_invalid":"reject","example":"ec_leitebebidasvegetais_900","aliases":["cgid","category_id","parent"]}],"returns":"parent, total_categories, categories[]{category_id, name, url, path, depth, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"ec_leitebebidasvegetais_900"}},{"name":"store","description":"Whether Pingo Doce delivers to a Portuguese post code (home delivery) or only offers store pickup there — the area `postal_code` selects in the listing actions.","required_params":["postal_code"],"optional_params":[],"params":[{"name":"postal_code","type":"string","required":true,"description":"Portuguese post code (NNNN-NNN).","on_invalid":"reject","example":"1000-001","aliases":["zip_code","zip","postcode","codigo_postal","cp"]}],"returns":"postal_code, home_delivery, delivery_type, provider, message","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"postal_code":"1000-001"}}]},{"name":"pinterest","category":{"id":"social","title":"Social Media"},"title":"Pinterest API scraper — public Pinterest data: pin detail & comments, profiles, boards, board pins, related pins, search (pins / users / boards / videos) and autocomplete suggestions from pinterest.com (no account required)","version":"0.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/pinterest/v1","spec_available":true,"actions":[{"name":"search_pins","description":"Search Pinterest pins by keyword. Returns pin id/title/description/image/link/save-count with the pinner. Paginate with meta.bookmark.","required_params":["query"],"optional_params":["limit","bookmark"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (a topic, brand, product or idea).","on_invalid":"reject","example":"home decor"},{"name":"limit","type":"integer","required":false,"description":"How many items to return per page (1–100, default 25). Use the returned meta.bookmark to fetch the next page.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"bookmark","type":"string","required":false,"description":"Pagination cursor — pass the previous response's meta.bookmark to get the next page. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"pins[]{id, url, title, description, image_url, link, domain, repin_count, is_video, pinner}, bookmark","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"minimalist home office","limit":10}},{"name":"search_videos","description":"Search Pinterest video pins (Idea Pins / video) by keyword. Same shape as search_pins but scoped to video content (image_url + video_url). Paginate with meta.bookmark.","required_params":["query"],"optional_params":["limit","bookmark"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (a topic, brand, product or idea).","on_invalid":"reject","example":"home decor"},{"name":"limit","type":"integer","required":false,"description":"How many items to return per page (1–100, default 25). Use the returned meta.bookmark to fetch the next page.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"bookmark","type":"string","required":false,"description":"Pagination cursor — pass the previous response's meta.bookmark to get the next page. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"pins[]{id, url, title, image_url, video_url, is_video, repin_count, pinner}, bookmark","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"minimalist home office"}},{"name":"search_users","description":"Search Pinterest users/creators by keyword. Returns username/profile stats/avatar.","required_params":["query"],"optional_params":["limit","bookmark"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (a topic, brand, product or idea).","on_invalid":"reject","example":"home decor"},{"name":"limit","type":"integer","required":false,"description":"How many items to return per page (1–100, default 25). Use the returned meta.bookmark to fetch the next page.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"bookmark","type":"string","required":false,"description":"Pagination cursor — pass the previous response's meta.bookmark to get the next page. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"users[]{id, username, full_name, follower_count, board_count, pin_count, avatar_url}, bookmark","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"minimalist home office"}},{"name":"search_boards","description":"Search Pinterest boards by keyword. Returns board name/url/description/pin-count/owner.","required_params":["query"],"optional_params":["limit","bookmark"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (a topic, brand, product or idea).","on_invalid":"reject","example":"home decor"},{"name":"limit","type":"integer","required":false,"description":"How many items to return per page (1–100, default 25). Use the returned meta.bookmark to fetch the next page.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"bookmark","type":"string","required":false,"description":"Pagination cursor — pass the previous response's meta.bookmark to get the next page. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"boards[]{id, name, url, description, pin_count, follower_count, owner}, bookmark","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"minimalist home office"}},{"name":"suggestions","description":"Autocomplete / typeahead search suggestions for a partial query — the dropdown Pinterest shows as you type. Great for keyword research.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search query (a topic, brand, product or idea).","on_invalid":"reject","example":"home decor"}],"returns":"suggestions[]{term, display, type}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"minimalist home office"}},{"name":"pin","description":"Full detail for one pin: title, description, image, video, outbound link/domain, save & comment & share counts, reactions, hashtags, board, dominant color, product/price (when a shopping pin) and the pinner. Provide pin_id or pin_url.","required_params":[],"optional_params":["pin_id","pin_url","id"],"params":[{"name":"pin_id","type":"string","required":false,"description":"Numeric pin id (the digits in pinterest.com/pin/<pin_id>/). Provide pin_id OR pin_url.","on_invalid":"ignore","example":"99360735500167749","aliases":["id"]},{"name":"pin_url","type":"string","required":false,"description":"Full pin URL (alternative to pin_id).","on_invalid":"ignore","example":"https://www.pinterest.com/pin/99360735500167749/"}],"returns":"pin{id, url, title, description, image_url, video_url, link, domain, repin_count, comment_count, share_count, reaction_counts, hashtags, board, product, pinner}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"pin_url":"https://www.pinterest.com/pin/99360735500167749/"}},{"name":"pin_comments","description":"Public comments & 'Tried it' notes on a pin: text, like/helpful counts, commenter and whether the pin owner highlighted it. Provide pin_id or pin_url. Paginate with meta.bookmark.","required_params":[],"optional_params":["pin_id","pin_url","id","limit","bookmark"],"params":[{"name":"pin_id","type":"string","required":false,"description":"Numeric pin id (the digits in pinterest.com/pin/<pin_id>/). Provide pin_id OR pin_url.","on_invalid":"ignore","example":"99360735500167749","aliases":["id"]},{"name":"pin_url","type":"string","required":false,"description":"Full pin URL (alternative to pin_id).","on_invalid":"ignore","example":"https://www.pinterest.com/pin/99360735500167749/"},{"name":"limit","type":"integer","required":false,"description":"How many items to return per page (1–100, default 25). Use the returned meta.bookmark to fetch the next page.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"bookmark","type":"string","required":false,"description":"Pagination cursor — pass the previous response's meta.bookmark to get the next page. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"comments[]{id, text, type, like_count, helpful_count, highlighted_by_pin_owner, user}, bookmark","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"pin_url":"https://www.pinterest.com/pin/99360735500167749/"}},{"name":"related_pins","description":"'More like this' pins related to a source pin. Provide pin_id or pin_url.","required_params":[],"optional_params":["pin_id","pin_url","id","limit","bookmark"],"params":[{"name":"pin_id","type":"string","required":false,"description":"Numeric pin id (the digits in pinterest.com/pin/<pin_id>/). Provide pin_id OR pin_url.","on_invalid":"ignore","example":"99360735500167749","aliases":["id"]},{"name":"pin_url","type":"string","required":false,"description":"Full pin URL (alternative to pin_id).","on_invalid":"ignore","example":"https://www.pinterest.com/pin/99360735500167749/"},{"name":"limit","type":"integer","required":false,"description":"How many items to return per page (1–100, default 25). Use the returned meta.bookmark to fetch the next page.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"bookmark","type":"string","required":false,"description":"Pagination cursor — pass the previous response's meta.bookmark to get the next page. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"pins[]{id, url, title, image_url, link, repin_count, pinner}, bookmark","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"pin_url":"https://www.pinterest.com/pin/99360735500167749/"}},{"name":"profile","description":"Public profile for a username: name, bio, follower/following/board/pin counts, avatar, website.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"Pinterest username (the handle in pinterest.com/<username>/).","on_invalid":"reject","example":"nike"}],"returns":"profile{id, username, full_name, bio, follower_count, following_count, board_count, pin_count, avatar_url, website_url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nike"}},{"name":"user_boards","description":"Public boards owned by a username: name, url, description, pin-count, cover image.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"Pinterest username (the handle in pinterest.com/<username>/).","on_invalid":"reject","example":"nike"}],"returns":"boards[]{id, name, url, description, pin_count, cover_image_url, owner}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nike"}},{"name":"user_pins","description":"Pins created by a username (their feed). Paginate with meta.bookmark.","required_params":["username"],"optional_params":["limit","bookmark"],"params":[{"name":"username","type":"string","required":true,"description":"Pinterest username (the handle in pinterest.com/<username>/).","on_invalid":"reject","example":"nike"},{"name":"limit","type":"integer","required":false,"description":"How many items to return per page (1–100, default 25). Use the returned meta.bookmark to fetch the next page.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"bookmark","type":"string","required":false,"description":"Pagination cursor — pass the previous response's meta.bookmark to get the next page. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"pins[]{id, url, title, description, image_url, link, repin_count, pinner}, bookmark","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nike"}},{"name":"board","description":"Board metadata: name, description, pin & follower & section counts, cover image, owner. Provide board_url or username + board.","required_params":[],"optional_params":["board_url","username","board","board_slug"],"params":[{"name":"board_url","type":"string","required":false,"description":"Full board URL (alternative to username + board).","on_invalid":"ignore","example":"https://www.pinterest.com/marthastewart/home-decor/"},{"name":"username","type":"string","required":false,"description":"Pinterest username (the handle in pinterest.com/<username>/).","on_invalid":"reject","example":"nike"},{"name":"board","type":"string","required":false,"description":"Board slug — the segment after the username in a board URL (also accepted as 'board_slug'). Combine with username, or pass board_url.","on_invalid":"ignore","example":"home-decor","aliases":["board_slug"]}],"returns":"board{id, name, url, description, pin_count, follower_count, section_count, owner}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"board_url":"https://www.pinterest.com/marthastewart/home-decor/"}},{"name":"board_pins","description":"Pins inside a board. Provide board_url or username + board. Paginate with meta.bookmark.","required_params":[],"optional_params":["board_url","username","board","board_slug","limit","bookmark"],"params":[{"name":"board_url","type":"string","required":false,"description":"Full board URL (alternative to username + board).","on_invalid":"ignore","example":"https://www.pinterest.com/marthastewart/home-decor/"},{"name":"username","type":"string","required":false,"description":"Pinterest username (the handle in pinterest.com/<username>/).","on_invalid":"reject","example":"nike"},{"name":"board","type":"string","required":false,"description":"Board slug — the segment after the username in a board URL (also accepted as 'board_slug'). Combine with username, or pass board_url.","on_invalid":"ignore","example":"home-decor","aliases":["board_slug"]},{"name":"limit","type":"integer","required":false,"description":"How many items to return per page (1–100, default 25). Use the returned meta.bookmark to fetch the next page.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100},{"name":"bookmark","type":"string","required":false,"description":"Pagination cursor — pass the previous response's meta.bookmark to get the next page. Omit for page one.","on_invalid":"ignore","example":""}],"returns":"pins[]{id, url, title, description, image_url, link, repin_count, pinner}, bookmark","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"board_url":"https://www.pinterest.com/marthastewart/home-decor/"}}]},{"name":"pnp","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Pick n Pay API — South African grocery prices per store from pnp.co.za: price in rand, Smart Shopper card price, multi-buy and combo deals, price per kg, stock, barcode, nutrition and the store list","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pnp/v1","spec_available":true,"actions":[{"name":"search","description":"Search one Pick n Pay store's online shelf: shelf price, was-price, Smart Shopper card price (kept apart from the price), multi-buy / combo deal, price per kg for goods sold by weight, stock, rating and badges per product, plus the category / brand / certification / price facets. A row carries the product's primary promotion; `product` lists every promotion.","required_params":["query"],"optional_params":["store_id","page","page_size","sort","brand","category_id","on_promotion","min_price","max_price","certification"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the site's search box.","on_invalid":"reject","example":"milk","aliases":["q","keyword","search","term"]},{"name":"store_id","type":"string","required":false,"description":"Pick n Pay store code from the `stores` action (e.g. WC21 Constantia, GC11, NC10). Prices, deals and the assortment are the store's own and differ between stores. Without it the site's own default store is used and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"WC21","aliases":["store","storeCode","store_code"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-48 (default 24, the site's own page).","on_invalid":"reject","default":24,"minimum":1,"maximum":48,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (the site's three sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, exactly as the `brands` facet of a search lists it (e.g. CLOVER, PNP). An unknown brand gives an empty result.","on_invalid":"reject","example":"CLOVER"},{"name":"category_id","type":"string","required":false,"description":"Category code as the `categories` facet or a product's `categories` list gives it (e.g. milk-dairy-and-eggs-423144840, cheese44805192).","on_invalid":"reject","example":"milk-dairy-and-eggs-423144840","aliases":["category","categoryId"]},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products with a current promotion (sale, Smart Shopper price, multi-buy, combo).","on_invalid":"reject","default":false,"aliases":["on_sale","deals_only"]},{"name":"min_price","type":"number","required":false,"description":"Lowest shelf price in rand (the price anyone pays, not the Smart Shopper price; per kg for goods sold by weight).","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest shelf price in rand (same price as min_price).","on_invalid":"reject","example":50,"minimum":0},{"name":"certification","type":"enum","required":false,"description":"Only products carrying this certification.","on_invalid":"reject","allowed_values":[{"value":"halaal","label":"Halaal"},{"value":"kosher","label":"Kosher"},{"value":"free_range","label":"Free Range"}]}],"returns":"query, store_id, store_name, store_defaulted, total, total_is_capped, page, page_size, total_pages, sort, returned, sponsored_count, products[]{rank, product_id, title, supplier, price, price_display, price_type ('selling' | 'promotion'), price_unit ('each' | 'kg'), currency, original_price, savings, online_only_price, member_price (Smart Shopper card price), member_price_program, member_price_ends, multi_buy{kind ('multi_buy' | 'combo'), quantity, price, card_required, text, promotion_id}, promotions[]{promotion_id, type ('smart_shopper' | 'save'), card_required, text, description, kind, quantity, deal_price, starts, ends}, sold_by ('unit' | 'weight'), weight_options[]{grams, label, min_label, max_label, default}, stock_status, in_stock, max_order_quantity, rating, review_count, badges[], sponsored, image, url}, facets{categories[]{name, count, category_id}, brands[]{name, value, count}, certifications[], price_ranges[], on_promotion[], lifestyle[], unit_of_measure[]}, breadcrumbs[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milk","store_id":"WC21"}},{"name":"category","description":"Every product in one category (department or aisle) at one store, paged, with the same rows, filters and sorts as search; the `categories` facet lists the sub-categories with their codes.","required_params":["category_id"],"optional_params":["store_id","page","page_size","sort","brand","on_promotion","min_price","max_price","certification"],"params":[{"name":"category_id","type":"string","required":true,"description":"Category code as the `categories` facet or a product's `categories` list gives it (e.g. milk-dairy-and-eggs-423144840, cheese44805192).","on_invalid":"reject","example":"milk-dairy-and-eggs-423144840","aliases":["category","categoryId"]},{"name":"store_id","type":"string","required":false,"description":"Pick n Pay store code from the `stores` action (e.g. WC21 Constantia, GC11, NC10). Prices, deals and the assortment are the store's own and differ between stores. Without it the site's own default store is used and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"WC21","aliases":["store","storeCode","store_code"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-48 (default 24, the site's own page).","on_invalid":"reject","default":24,"minimum":1,"maximum":48,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (the site's three sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, exactly as the `brands` facet of a search lists it (e.g. CLOVER, PNP). An unknown brand gives an empty result.","on_invalid":"reject","example":"CLOVER"},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products with a current promotion (sale, Smart Shopper price, multi-buy, combo).","on_invalid":"reject","default":false,"aliases":["on_sale","deals_only"]},{"name":"min_price","type":"number","required":false,"description":"Lowest shelf price in rand (the price anyone pays, not the Smart Shopper price; per kg for goods sold by weight).","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest shelf price in rand (same price as min_price).","on_invalid":"reject","example":50,"minimum":0},{"name":"certification","type":"enum","required":false,"description":"Only products carrying this certification.","on_invalid":"reject","allowed_values":[{"value":"halaal","label":"Halaal"},{"value":"kosher","label":"Kosher"},{"value":"free_range","label":"Free Range"}]}],"returns":"category_id, store_id, store_name, store_defaulted, total, total_is_capped, page, page_size, total_pages, sort, returned, sponsored_count, products[]{rank, product_id, title, supplier, price, price_display, price_type ('selling' | 'promotion'), price_unit ('each' | 'kg'), currency, original_price, savings, online_only_price, member_price (Smart Shopper card price), member_price_program, member_price_ends, multi_buy{kind ('multi_buy' | 'combo'), quantity, price, card_required, text, promotion_id}, promotions[]{promotion_id, type ('smart_shopper' | 'save'), card_required, text, description, kind, quantity, deal_price, starts, ends}, sold_by ('unit' | 'weight'), weight_options[]{grams, label, min_label, max_label, default}, stock_status, in_stock, max_order_quantity, rating, review_count, badges[], sponsored, image, url}, facets{categories[]{name, count, category_id}, brands[]{name, value, count}, certifications[], price_ranges[], on_promotion[], lifestyle[], unit_of_measure[]}, breadcrumbs[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"milk-dairy-and-eggs-423144840","store_id":"WC21"}},{"name":"promotions","description":"Everything on promotion at one store right now — sale prices, Smart Shopper card prices, multi-buys and combos — optionally inside one category or for one search term.","required_params":[],"optional_params":["store_id","query","category_id","page","page_size","sort","brand"],"params":[{"name":"store_id","type":"string","required":false,"description":"Pick n Pay store code from the `stores` action (e.g. WC21 Constantia, GC11, NC10). Prices, deals and the assortment are the store's own and differ between stores. Without it the site's own default store is used and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"WC21","aliases":["store","storeCode","store_code"]},{"name":"query","type":"string","required":false,"description":"Only promotions whose product matches this search.","on_invalid":"reject","example":"coffee","aliases":["q","keyword","search","term"]},{"name":"category_id","type":"string","required":false,"description":"Category code as the `categories` facet or a product's `categories` list gives it (e.g. milk-dairy-and-eggs-423144840, cheese44805192).","on_invalid":"reject","example":"milk-dairy-and-eggs-423144840","aliases":["category","categoryId"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-48 (default 24, the site's own page).","on_invalid":"reject","default":24,"minimum":1,"maximum":48,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (the site's three sorts).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, exactly as the `brands` facet of a search lists it (e.g. CLOVER, PNP). An unknown brand gives an empty result.","on_invalid":"reject","example":"CLOVER"}],"returns":"query, category_id, store_id, store_name, store_defaulted, total, total_is_capped, page, page_size, total_pages, sort, returned, sponsored_count, products[]{rank, product_id, title, supplier, price, price_display, price_type ('selling' | 'promotion'), price_unit ('each' | 'kg'), currency, original_price, savings, online_only_price, member_price (Smart Shopper card price), member_price_program, member_price_ends, multi_buy{kind ('multi_buy' | 'combo'), quantity, price, card_required, text, promotion_id}, promotions[]{promotion_id, type ('smart_shopper' | 'save'), card_required, text, description, kind, quantity, deal_price, starts, ends}, sold_by ('unit' | 'weight'), weight_options[]{grams, label, min_label, max_label, default}, stock_status, in_stock, max_order_quantity, rating, review_count, badges[], sponsored, image, url}, facets{categories[]{name, count, category_id}, brands[]{name, value, count}, certifications[], price_ranges[], on_promotion[], lifestyle[], unit_of_measure[]}, breadcrumbs[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"store_id":"WC21","query":"coffee"}},{"name":"promotion","description":"One promotion by the `promotion_id` a product row carries: every product it covers at one store (a combo's whole bundle, a multi-buy's qualifying items) with the promotion's text, deal price, card requirement and dates.","required_params":["promotion_id"],"optional_params":["store_id","page","page_size"],"params":[{"name":"promotion_id","type":"string","required":true,"description":"The `promotion_id` exactly as a product row's promotions[] gives it. Promotions run for days, so an id from a recent search is the one to use.","on_invalid":"reject","example":"SCRIPT20261014212454-3000723669","aliases":["promotion","promo_id","code"]},{"name":"store_id","type":"string","required":false,"description":"Pick n Pay store code from the `stores` action (e.g. WC21 Constantia, GC11, NC10). Prices, deals and the assortment are the store's own and differ between stores. Without it the site's own default store is used and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"WC21","aliases":["store","storeCode","store_code"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-48 (default 24, the site's own page).","on_invalid":"reject","default":24,"minimum":1,"maximum":48,"aliases":["limit"]}],"returns":"promotion_id, promotion{promotion_id, type, card_required, text, kind, quantity, deal_price, starts, ends}, store_id, store_name, store_defaulted, total, total_is_capped, page, page_size, total_pages, sort, returned, sponsored_count, products[]{rank, product_id, title, supplier, price, price_display, price_type ('selling' | 'promotion'), price_unit ('each' | 'kg'), currency, original_price, savings, online_only_price, member_price (Smart Shopper card price), member_price_program, member_price_ends, multi_buy{kind ('multi_buy' | 'combo'), quantity, price, card_required, text, promotion_id}, promotions[]{promotion_id, type ('smart_shopper' | 'save'), card_required, text, description, kind, quantity, deal_price, starts, ends}, sold_by ('unit' | 'weight'), weight_options[]{grams, label, min_label, max_label, default}, stock_status, in_stock, max_order_quantity, rating, review_count, badges[], sponsored, image, url}, facets{categories[]{name, count, category_id}, brands[]{name, value, count}, certifications[], price_ranges[], on_promotion[], lifestyle[], unit_of_measure[]}, breadcrumbs[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"promotion_id":"SCRIPT20261014212454-3000723669"}},{"name":"product","description":"One product at one store by the `product_id` a search row returns: price, was-price, Smart Shopper price, multi-buy / combo, every promotion with dates, price per kg and allowed weights, stock level, barcode, brand, description, features, allergens, certifications, nutrition table, storage, pack variants (single / case) with their own price and stock, categories, images.","required_params":["product_id"],"optional_params":["store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"The `product_id` exactly as a search row returns it (e.g. 000000000000349246_EA, 000000000000251704_KGM), its short form 349246_EA, or a product URL ending /p/<code>.","on_invalid":"reject","example":"000000000000349246_EA","aliases":["id","code","url","product_url"]},{"name":"store_id","type":"string","required":false,"description":"Pick n Pay store code from the `stores` action (e.g. WC21 Constantia, GC11, NC10). Prices, deals and the assortment are the store's own and differ between stores. Without it the site's own default store is used and the answer says so (store_defaulted: true).","on_invalid":"reject","example":"WC21","aliases":["store","storeCode","store_code"]}],"returns":"store_id, store_name, store_defaulted, product{product_id, base_product_id, title, brand, brand_name, supplier, barcode, description, short_description, features[], allergens[], certifications[], lifestyle[], storage, usage, serving_suggestions, allergen_warnings, dimensions_mm{width, height, depth}, price, price_display, price_type, price_unit, currency, original_price, savings, online_only_price, member_price, member_price_program, member_price_ends, multi_buy{…}, promotions[]{…, validity_text}, sold_by, weight_options[], average_weight, stock_level, stock_status, in_stock, purchasable, max_order_quantity, unit_of_measure, rating, review_count, badges[], categories[]{category_id, name}, nutrition[]{nutrient, path, per_100, per_serving, serving_size}, variants[]{product_id, price, stock_level, stock_status, url}, images[], url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"000000000000349246_EA","store_id":"WC21"}},{"name":"stores","description":"The Pick n Pay stores of the online shop with their store_id (for every other action): code, name, display name and a closed flag where the store's own name says it is closed. Narrow by `query`.","required_params":[],"optional_params":["query","include_closed","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Stores whose code or name contains this text (case-insensitive).","on_invalid":"reject","example":"Cape","aliases":["q","name","city"]},{"name":"include_closed","type":"boolean","required":false,"description":"Also list stores whose own name marks them closed (default false).","on_invalid":"reject","default":false},{"name":"limit","type":"integer","required":false,"description":"At most this many stores.","on_invalid":"reject","default":500,"minimum":1,"maximum":500}],"returns":"total (stores of the online shop), matched, returned, default_store_id, stores[]{store_id, name, display_name, closed, code_prefix}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"Cape"}}]},{"name":"polovniautomobili","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Polovni Automobili API scraper — Serbia's largest car-classifieds site (polovniautomobili.com). Search the live Serbian used- and new-car market with the site's own filters (brand, model, price, year, mileage, fuel, gearbox, body, engine size, power, colour, equipment, region) and pull the FULL ad: price and currency as printed, odometer, registration validity, equipment and safety lists, every photo, the free-text description and the seller (dealer name, address, coordinates, rating, phone numbers, active-ad count). No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/polovniautomobili/v1","spec_available":true,"actions":[{"name":"search","description":"Search the live Serbian car market on polovniautomobili.com. Every row is one ad: brand, model, year, price with the currency the ad itself prints, odometer, fuel, gearbox, body, engine size, power in kW and hp, doors, seats, emission class, town, photo and the seller (trade name, dealer page, dealer id). total_results is the site's own count and pages / page_size come from the response, not from a constant. 🔴 Read reachable_pages, not pages: the source advertises more pages than it will serve — page 751 and beyond answer HTTP 200 with page 1 all over again (measured), so page is capped at 750 and 200 ads per page is how you reach a large result set. Every filter offered here was measured to move that total in the same run; filters the source accepts and ignores are deliberately absent. Call with no parameters to page the whole market. The paid block the site prints above the results is returned separately as top_ads so it is never mistaken for an organic hit.","required_params":[],"optional_params":["brand","model","price_min","price_max","year_min","year_max","mileage_min","mileage_max","power_kw_min","power_kw_max","engine_cc_min","engine_cc_max","fuel","gearbox","body_type","colour","drive","emission_class","doors","seats","damaged","plates","air_conditioning","interior_material","interior_colour","wheel_side","flywheel","attest","trade_in","country","country_of_origin","only_with_price","registered_to_seller","listing_age","page_size","page"],"params":[{"name":"brand","type":"enum","required":false,"description":"Brand, spelled exactly as polovniautomobili spells it — the site's own label IS the filter value ('Mercedes Benz', 'Škoda', 'Lynk & Co'). Case is forgiven. The brands action returns the live list.","on_invalid":"reject","allowed_values":[{"value":"Alfa Romeo","label":"Alfa Romeo"},{"value":"Alpina","label":"Alpina"},{"value":"Alpine","label":"Alpine"},{"value":"Aro","label":"Aro"},{"value":"Aston Martin","label":"Aston Martin"},{"value":"Audi","label":"Audi"},{"value":"Avantier","label":"Avantier"},{"value":"BAIC","label":"BAIC"},{"value":"BAW","label":"BAW"},{"value":"Bentley","label":"Bentley"},{"value":"BMW","label":"BMW"},{"value":"BYD","label":"BYD"},{"value":"Cadillac","label":"Cadillac"},{"value":"Changan","label":"Changan"},{"value":"Chery","label":"Chery"},{"value":"Chevrolet","label":"Chevrolet"},{"value":"Chrysler","label":"Chrysler"},{"value":"Citroen","label":"Citroen"},{"value":"Cupra","label":"Cupra"},{"value":"Dacia","label":"Dacia"},{"value":"Daewoo","label":"Daewoo"},{"value":"Daihatsu","label":"Daihatsu"},{"value":"Dodge","label":"Dodge"},{"value":"Dongfeng","label":"Dongfeng"},{"value":"DR","label":"DR"},{"value":"DS","label":"DS"},{"value":"Ferrari","label":"Ferrari"},{"value":"Fiat","label":"Fiat"},{"value":"Ford","label":"Ford"},{"value":"Foton","label":"Foton"},{"value":"GAZ","label":"GAZ"},{"value":"Geely","label":"Geely"},{"value":"Genesis","label":"Genesis"},{"value":"GMC","label":"GMC"},{"value":"Honda","label":"Honda"},{"value":"Hummer","label":"Hummer"},{"value":"Hyundai","label":"Hyundai"},{"value":"Ineos","label":"Ineos"},{"value":"Infiniti","label":"Infiniti"},{"value":"Isuzu","label":"Isuzu"},{"value":"JAC Motors","label":"JAC Motors"},{"value":"Jaguar","label":"Jaguar"},{"value":"Jeep","label":"Jeep"},{"value":"Jetour","label":"Jetour"},{"value":"JMEV","label":"JMEV"},{"value":"KGM","label":"KGM"},{"value":"Kia","label":"Kia"},{"value":"Lada","label":"Lada"},{"value":"Lamborghini","label":"Lamborghini"},{"value":"Lancia","label":"Lancia"},{"value":"Land Rover","label":"Land Rover"},{"value":"Leapmotor","label":"Leapmotor"},{"value":"Lexus","label":"Lexus"},{"value":"Lincoln","label":"Lincoln"},{"value":"Lynk & Co","label":"Lynk & Co"},{"value":"Mahindra","label":"Mahindra"},{"value":"Maserati","label":"Maserati"},{"value":"Maxus","label":"Maxus"},{"value":"Maybach","label":"Maybach"},{"value":"Mazda","label":"Mazda"},{"value":"McLaren","label":"McLaren"},{"value":"Mercedes Benz","label":"Mercedes Benz"},{"value":"MG","label":"MG"},{"value":"MINI","label":"MINI"},{"value":"Mitsubishi","label":"Mitsubishi"},{"value":"Moskvitch","label":"Moskvitch"},{"value":"Nissan","label":"Nissan"},{"value":"NSU","label":"NSU"},{"value":"Oldsmobile","label":"Oldsmobile"},{"value":"Opel","label":"Opel"},{"value":"Peugeot","label":"Peugeot"},{"value":"Polski Fiat","label":"Polski Fiat"},{"value":"Pontiac","label":"Pontiac"},{"value":"Porsche","label":"Porsche"},{"value":"Ram","label":"Ram"},{"value":"Renault","label":"Renault"},{"value":"Rolls Royce","label":"Rolls Royce"},{"value":"Rover","label":"Rover"},{"value":"Saab","label":"Saab"},{"value":"Seat","label":"Seat"},{"value":"Seres","label":"Seres"},{"value":"Smart","label":"Smart"},{"value":"SsangYong","label":"SsangYong"},{"value":"Subaru","label":"Subaru"},{"value":"Suzuki","label":"Suzuki"},{"value":"SWM","label":"SWM"},{"value":"Škoda","label":"Škoda"},{"value":"Tata","label":"Tata"},{"value":"Tesla","label":"Tesla"},{"value":"Toyota","label":"Toyota"},{"value":"Trabant","label":"Trabant"},{"value":"UAZ","label":"UAZ"},{"value":"Volkswagen","label":"Volkswagen"},{"value":"Volvo","label":"Volvo"},{"value":"Wartburg","label":"Wartburg"},{"value":"Xiaomi","label":"Xiaomi"},{"value":"Yudo Auto","label":"Yudo Auto"},{"value":"Zastava","label":"Zastava"},{"value":"other","label":"other"}],"example":"Audi","aliases":["make"]},{"name":"model","type":"array","required":false,"description":"One or more models of that brand, as the site spells them (A4, Golf, Astra). Requires brand — the site scopes models to a brand, and the models action lists a brand's models. Several models are OR-ed.","on_invalid":"reject","example":["A4"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, in the ad's own currency (Serbian car ads are priced in EUR; the row tells you with price_currency).","on_invalid":"reject","minimum":0,"maximum":9999999},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price, in the ad's own currency.","on_invalid":"reject","example":8000,"minimum":0,"maximum":9999999},{"name":"year_min","type":"integer","required":false,"description":"Earliest build year.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest build year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading, km.","on_invalid":"reject","minimum":0,"maximum":9999999},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading, km.","on_invalid":"reject","example":150000,"minimum":0,"maximum":9999999},{"name":"power_kw_min","type":"integer","required":false,"description":"Lowest engine power in kW. The site filters power in kW only — its horsepower box is a display, and a horsepower filter was measured to be ignored upstream, so it is not offered here. Rows carry both power_kw and power_hp.","on_invalid":"reject","minimum":0,"maximum":2000},{"name":"power_kw_max","type":"integer","required":false,"description":"Highest engine power in kW.","on_invalid":"reject","minimum":0,"maximum":2000},{"name":"engine_cc_min","type":"integer","required":false,"description":"Lowest engine displacement, cc.","on_invalid":"reject","example":1900,"minimum":0,"maximum":20000},{"name":"engine_cc_max","type":"integer","required":false,"description":"Highest engine displacement, cc.","on_invalid":"reject","minimum":0,"maximum":20000},{"name":"fuel","type":"array","required":false,"description":"Fuel type(s). Several values are OR-ed.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"gasoline"},{"value":"diesel","label":"diesel"},{"value":"gasolineLpg","label":"gasolineLpg"},{"value":"gasolineCng","label":"gasolineCng"},{"value":"hybridGasoline","label":"hybridGasoline"},{"value":"hybridDiesel","label":"hybridDiesel"},{"value":"plugInHybrid","label":"plugInHybrid"},{"value":"hybrid","label":"hybrid"},{"value":"electric","label":"electric"}],"example":["diesel"]},{"name":"gearbox","type":"array","required":false,"description":"Gearbox. The site distinguishes the number of manual gears (manual4Gears / manual5Gears / manual6Gears) from automatic.","on_invalid":"reject","allowed_values":[{"value":"manual4Gears","label":"manual4Gears"},{"value":"manual5Gears","label":"manual5Gears"},{"value":"manual6Gears","label":"manual6Gears"},{"value":"automatic","label":"automatic"}],"example":["automatic"],"aliases":["transmission"]},{"name":"body_type","type":"array","required":false,"description":"Body style.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"sedan"},{"value":"hatchback","label":"hatchback"},{"value":"caravan","label":"caravan"},{"value":"coupe","label":"coupe"},{"value":"cabrioletOrRoadster","label":"cabrioletOrRoadster"},{"value":"minivan","label":"minivan"},{"value":"suv","label":"suv"},{"value":"pickup","label":"pickup"}],"example":["suv"],"aliases":["chassis"]},{"name":"colour","type":"array","required":false,"description":"Exterior colour, from the site's own 21-colour vocabulary.","on_invalid":"reject","allowed_values":[{"value":"white","label":"white"},{"value":"pearlWhite","label":"pearlWhite"},{"value":"beige","label":"beige"},{"value":"bordeaux","label":"bordeaux"},{"value":"brown","label":"brown"},{"value":"black","label":"black"},{"value":"red","label":"red"},{"value":"chameleon","label":"chameleon"},{"value":"cream","label":"cream"},{"value":"purple","label":"purple"},{"value":"orange","label":"orange"},{"value":"blue","label":"blue"},{"value":"grey","label":"grey"},{"value":"brown2","label":"brown2"},{"value":"silver","label":"silver"},{"value":"turquoise","label":"turquoise"},{"value":"navyBlue","label":"navyBlue"},{"value":"green","label":"green"},{"value":"golden","label":"golden"},{"value":"yellow","label":"yellow"},{"value":"pink","label":"pink"}],"aliases":["color"]},{"name":"drive","type":"array","required":false,"description":"Driven wheels (front, rear, 4x4, 4x4Reducer).","on_invalid":"reject","allowed_values":[{"value":"front","label":"front"},{"value":"rear","label":"rear"},{"value":"4x4","label":"4x4"},{"value":"4x4Reducer","label":"4x4Reducer"}]},{"name":"emission_class","type":"enum","required":false,"description":"Euro emission class. One value — this source takes a single emission class, not a set.","on_invalid":"reject","allowed_values":[{"value":"euro1","label":"euro1"},{"value":"euro2","label":"euro2"},{"value":"euro3","label":"euro3"},{"value":"euro4","label":"euro4"},{"value":"euro5","label":"euro5"},{"value":"euro6","label":"euro6"}]},{"name":"doors","type":"enum","required":false,"description":"Door count as the site groups it: '3' means 2/3 doors, '5' means 4/5 doors. Those two are the ONLY values it accepts — any other number returns an empty result upstream, so it is rejected here instead.","on_invalid":"reject","allowed_values":[{"value":"3","label":"3"},{"value":"5","label":"5"}]},{"name":"seats","type":"enum","required":false,"description":"Exact number of seats (2–9). One value.","on_invalid":"reject","allowed_values":[{"value":"2","label":"2"},{"value":"3","label":"3"},{"value":"4","label":"4"},{"value":"5","label":"5"},{"value":"6","label":"6"},{"value":"7","label":"7"},{"value":"8","label":"8"},{"value":"9","label":"9"}]},{"name":"damaged","type":"array","required":false,"description":"Damage state: undamaged, damaged but driveable, damaged and not driveable.","on_invalid":"reject","allowed_values":[{"value":"notDamaged","label":"notDamaged"},{"value":"damagedInDrivingCondition","label":"damagedInDrivingCondition"},{"value":"damagedNotInDrivingCondition","label":"damagedNotInDrivingCondition"}]},{"name":"plates","type":"array","required":false,"description":"Registration status of the car on sale: domestic Serbian plates, to be registered in the buyer's name, or foreign plates.","on_invalid":"reject","allowed_values":[{"value":"domesticPlates","label":"domesticPlates"},{"value":"onBuyersName","label":"onBuyersName"},{"value":"foreignPlates","label":"foreignPlates"}],"aliases":["origin"]},{"name":"air_conditioning","type":"array","required":false,"description":"Air-conditioning: none, manual or automatic.","on_invalid":"reject","allowed_values":[{"value":"none","label":"none"},{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic"}]},{"name":"interior_material","type":"array","required":false,"description":"Upholstery material.","on_invalid":"reject","allowed_values":[{"value":"cloth","label":"cloth"},{"value":"leather","label":"leather"},{"value":"combinedLeather","label":"combinedLeather"},{"value":"velor","label":"velor"},{"value":"other","label":"other"}]},{"name":"interior_colour","type":"array","required":false,"description":"Interior colour.","on_invalid":"reject","allowed_values":[{"value":"black","label":"black"},{"value":"beige","label":"beige"},{"value":"brown","label":"brown"},{"value":"grey","label":"grey"},{"value":"other","label":"other"}]},{"name":"wheel_side","type":"enum","required":false,"description":"Steering-wheel side.","on_invalid":"reject","allowed_values":[{"value":"left","label":"left"},{"value":"right","label":"right"}]},{"name":"flywheel","type":"enum","required":false,"description":"Dual-mass (floating) flywheel or not — a Serbian-market buying criterion the site filters on.","on_invalid":"reject","allowed_values":[{"value":"floatingFlywheel","label":"floatingFlywheel"},{"value":"noFloatingFlywheel","label":"noFloatingFlywheel"}]},{"name":"attest","type":"enum","required":false,"description":"Whether the vehicle carries a Serbian conversion attest.","on_invalid":"reject","allowed_values":[{"value":"attested","label":"attested"},{"value":"notAttested","label":"notAttested"}]},{"name":"trade_in","type":"array","required":false,"description":"Seller's part-exchange stance (no exchange, for a cheaper car, same price, for a more expensive car, no preference).","on_invalid":"reject","allowed_values":[{"value":"noExchange","label":"noExchange"},{"value":"tradeForCheaper","label":"tradeForCheaper"},{"value":"samePrice","label":"samePrice"},{"value":"tradeForMoreExpensive","label":"tradeForMoreExpensive"},{"value":"noPreference","label":"noPreference"}],"aliases":["trade"]},{"name":"country","type":"enum","required":false,"description":"Country the ad is placed from. RS is Serbia; the site also carries ads from Montenegro, Bosnia and further afield.","on_invalid":"reject","allowed_values":[{"value":"RS","label":"RS"},{"value":"ME","label":"ME"},{"value":"BA","label":"BA"},{"value":"BE","label":"BE"},{"value":"FR","label":"FR"},{"value":"NL","label":"NL"},{"value":"IT","label":"IT"},{"value":"DE","label":"DE"},{"value":"RU","label":"RU"},{"value":"CH","label":"CH"},{"value":"GB","label":"GB"},{"value":"AT","label":"AT"},{"value":"BG","label":"BG"},{"value":"CZ","label":"CZ"},{"value":"DK","label":"DK"},{"value":"HR","label":"HR"},{"value":"IE","label":"IE"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"HU","label":"HU"},{"value":"MK","label":"MK"},{"value":"PT","label":"PT"},{"value":"RO","label":"RO"},{"value":"SK","label":"SK"},{"value":"SI","label":"SI"},{"value":"ES","label":"ES"},{"value":"SE","label":"SE"},{"value":"PL","label":"PL"},{"value":"NO","label":"NO"},{"value":"JP","label":"JP"},{"value":"CN","label":"CN"},{"value":"TR","label":"TR"},{"value":"KR","label":"KR"},{"value":"US","label":"US"},{"value":"XX","label":"XX"}]},{"name":"country_of_origin","type":"enum","required":false,"description":"Country the car was imported from.","on_invalid":"reject","allowed_values":[{"value":"ME","label":"ME"},{"value":"BA","label":"BA"},{"value":"BE","label":"BE"},{"value":"FR","label":"FR"},{"value":"NL","label":"NL"},{"value":"IT","label":"IT"},{"value":"DE","label":"DE"},{"value":"RU","label":"RU"},{"value":"CH","label":"CH"},{"value":"GB","label":"GB"},{"value":"AT","label":"AT"},{"value":"BG","label":"BG"},{"value":"CZ","label":"CZ"},{"value":"DK","label":"DK"},{"value":"HR","label":"HR"},{"value":"IE","label":"IE"},{"value":"LT","label":"LT"},{"value":"LU","label":"LU"},{"value":"HU","label":"HU"},{"value":"MK","label":"MK"},{"value":"PT","label":"PT"},{"value":"RO","label":"RO"},{"value":"SK","label":"SK"},{"value":"SI","label":"SI"},{"value":"ES","label":"ES"},{"value":"SE","label":"SE"},{"value":"PL","label":"PL"},{"value":"NO","label":"NO"},{"value":"JP","label":"JP"},{"value":"CN","label":"CN"},{"value":"TR","label":"TR"},{"value":"KR","label":"KR"},{"value":"US","label":"US"}]},{"name":"only_with_price","type":"boolean","required":false,"description":"Drop ads that are published without a price.","on_invalid":"reject"},{"name":"registered_to_seller","type":"boolean","required":false,"description":"Only ads where the vehicle is registered to the seller — the site's own 'Vlasništvo' switch.","on_invalid":"reject"},{"name":"listing_age","type":"enum","required":false,"description":"Used cars, brand-new cars, or both. Measured 2026-10-01: all = 75 449 ads, used = 73 773, new = 1 678.","on_invalid":"reject","allowed_values":[{"value":"all","label":"all"},{"value":"used","label":"used"},{"value":"new","label":"new"}],"default":"all"},{"name":"page_size","type":"enum","required":false,"description":"Ads per page. 25, 50, 100 and 200 were measured to work; anything else is silently served as 25 by the source, so it is rejected here. Use 200 when you want a large result set: the page NUMBER is capped at 750 whatever the page size, so 25 per page can only reach 18 750 ads of a 75 000-ad search while 200 per page reaches all of them.","on_invalid":"reject","allowed_values":[{"value":25,"label":"25"},{"value":50,"label":"50"},{"value":100,"label":"100"},{"value":200,"label":"200"}],"default":25},{"name":"page","type":"integer","required":false,"description":"1-based page, hard-capped at 750. Beyond 750 the source silently serves page 1 again with HTTP 200 (measured), so a request for page 751+ is rejected rather than answered with duplicate rows. The response says pages (the source's own count), reachable_pages (what you can actually page to) and reachable_results.","on_invalid":"reject","default":1,"minimum":1,"maximum":750}],"returns":"{total_results, page, page_size, pages, has_more, count, duplicates_dropped, filters_applied, search_url, cars[], top_ads[]} — each car has ad_id, url, title, brand, model, year, price, price_currency, price_on_request, price_before_discount, mileage_km, fuel, gearbox, body_type, doors, seats, engine_cc, power_kw, power_hp, emission_class, city, is_new, tags[], image_url, images_count, promoted_search, updated_at and seller{}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"volkswagen","max_results":20}},{"name":"listing","description":"The FULL ad behind an ad_id from search: everything the detail page publishes. Adds what the search row cannot carry — the free-text description, the complete equipment and safety lists (measured 1-97 and 0-18 items), every photo at full size, exterior and interior colour and material, drive, registration validity and the site's own registration-cost estimate, part-exchange stance, financing terms, and the seller block with street address, town, district, postal code, coordinates, rating, active-ad count and phone numbers. A dead or removed ad answers NOT_FOUND, never an empty success.","required_params":["ad_id"],"optional_params":["slug"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The numeric ad id, exactly as a search row returns it in ad_id.","on_invalid":"reject","example":"28407810","value_pattern":"\\d{4,12}","aliases":["id","listing_id"]},{"name":"slug","type":"string","required":false,"description":"Optional url slug. polovniautomobili ignores the slug text (two different slugs for the same id return the same ad), so leaving it out is fine — the engine supplies a placeholder. Pass it only if you want the canonical url echoed back verbatim.","on_invalid":"reject","example":"audi-a4"}],"returns":"{car:{ad_id, url, title, brand, model, variant, year, price, price_currency, price_on_request, price_fixed, mileage_km, fuel, gearbox, body_type, doors, seats, engine_cc, power_kw, power_hp, drive, emission_class, colour, interior_colour, interior_material, air_conditioning, wheel_side, damaged, plates, country, imported, registration_valid_until, registration_cost_min/max, owner_legal_status, registered_to_seller, selling_method, trade_in, reserved, status, description, condition[], equipment[], safety[], images[], published_at, renewed_at, financing{}, seller{}, breadcrumbs[]}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"ad_id":"28407810"}},{"name":"brands","description":"Every car brand polovniautomobili lists, with the exact spelling the search filter wants and the site's url slug. Measured 99 entries on 2026-10-01 (including the catch-all 'other'). Read this before building a brand filter: the filter value is the LABEL ('Mercedes Benz', 'Škoda'), not the slug.","required_params":[],"optional_params":[],"params":[],"returns":"{count, total_ads, brands:[{brand, label, slug}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"models","description":"The models of one brand that currently have live ads, with the number of ads seen for each and the spelling the search `model` filter wants. polovniautomobili publishes no model vocabulary anywhere on this surface (probed on the search payload, the brand page and the brand/model page), so this reads the brand's own result pages instead and tells you exactly how big the sample was: brand_ads is the brand's total, ads_sampled is what was read, sample_coverage_pct is the share. A model with no live ad will not be listed.","required_params":["brand"],"optional_params":["sample_pages"],"params":[{"name":"brand","type":"enum","required":true,"description":"Brand label as polovniautomobili spells it. Case is forgiven.","on_invalid":"reject","allowed_values":[{"value":"Alfa Romeo","label":"Alfa Romeo"},{"value":"Alpina","label":"Alpina"},{"value":"Alpine","label":"Alpine"},{"value":"Aro","label":"Aro"},{"value":"Aston Martin","label":"Aston Martin"},{"value":"Audi","label":"Audi"},{"value":"Avantier","label":"Avantier"},{"value":"BAIC","label":"BAIC"},{"value":"BAW","label":"BAW"},{"value":"Bentley","label":"Bentley"},{"value":"BMW","label":"BMW"},{"value":"BYD","label":"BYD"},{"value":"Cadillac","label":"Cadillac"},{"value":"Changan","label":"Changan"},{"value":"Chery","label":"Chery"},{"value":"Chevrolet","label":"Chevrolet"},{"value":"Chrysler","label":"Chrysler"},{"value":"Citroen","label":"Citroen"},{"value":"Cupra","label":"Cupra"},{"value":"Dacia","label":"Dacia"},{"value":"Daewoo","label":"Daewoo"},{"value":"Daihatsu","label":"Daihatsu"},{"value":"Dodge","label":"Dodge"},{"value":"Dongfeng","label":"Dongfeng"},{"value":"DR","label":"DR"},{"value":"DS","label":"DS"},{"value":"Ferrari","label":"Ferrari"},{"value":"Fiat","label":"Fiat"},{"value":"Ford","label":"Ford"},{"value":"Foton","label":"Foton"},{"value":"GAZ","label":"GAZ"},{"value":"Geely","label":"Geely"},{"value":"Genesis","label":"Genesis"},{"value":"GMC","label":"GMC"},{"value":"Honda","label":"Honda"},{"value":"Hummer","label":"Hummer"},{"value":"Hyundai","label":"Hyundai"},{"value":"Ineos","label":"Ineos"},{"value":"Infiniti","label":"Infiniti"},{"value":"Isuzu","label":"Isuzu"},{"value":"JAC Motors","label":"JAC Motors"},{"value":"Jaguar","label":"Jaguar"},{"value":"Jeep","label":"Jeep"},{"value":"Jetour","label":"Jetour"},{"value":"JMEV","label":"JMEV"},{"value":"KGM","label":"KGM"},{"value":"Kia","label":"Kia"},{"value":"Lada","label":"Lada"},{"value":"Lamborghini","label":"Lamborghini"},{"value":"Lancia","label":"Lancia"},{"value":"Land Rover","label":"Land Rover"},{"value":"Leapmotor","label":"Leapmotor"},{"value":"Lexus","label":"Lexus"},{"value":"Lincoln","label":"Lincoln"},{"value":"Lynk & Co","label":"Lynk & Co"},{"value":"Mahindra","label":"Mahindra"},{"value":"Maserati","label":"Maserati"},{"value":"Maxus","label":"Maxus"},{"value":"Maybach","label":"Maybach"},{"value":"Mazda","label":"Mazda"},{"value":"McLaren","label":"McLaren"},{"value":"Mercedes Benz","label":"Mercedes Benz"},{"value":"MG","label":"MG"},{"value":"MINI","label":"MINI"},{"value":"Mitsubishi","label":"Mitsubishi"},{"value":"Moskvitch","label":"Moskvitch"},{"value":"Nissan","label":"Nissan"},{"value":"NSU","label":"NSU"},{"value":"Oldsmobile","label":"Oldsmobile"},{"value":"Opel","label":"Opel"},{"value":"Peugeot","label":"Peugeot"},{"value":"Polski Fiat","label":"Polski Fiat"},{"value":"Pontiac","label":"Pontiac"},{"value":"Porsche","label":"Porsche"},{"value":"Ram","label":"Ram"},{"value":"Renault","label":"Renault"},{"value":"Rolls Royce","label":"Rolls Royce"},{"value":"Rover","label":"Rover"},{"value":"Saab","label":"Saab"},{"value":"Seat","label":"Seat"},{"value":"Seres","label":"Seres"},{"value":"Smart","label":"Smart"},{"value":"SsangYong","label":"SsangYong"},{"value":"Subaru","label":"Subaru"},{"value":"Suzuki","label":"Suzuki"},{"value":"SWM","label":"SWM"},{"value":"Škoda","label":"Škoda"},{"value":"Tata","label":"Tata"},{"value":"Tesla","label":"Tesla"},{"value":"Toyota","label":"Toyota"},{"value":"Trabant","label":"Trabant"},{"value":"UAZ","label":"UAZ"},{"value":"Volkswagen","label":"Volkswagen"},{"value":"Volvo","label":"Volvo"},{"value":"Wartburg","label":"Wartburg"},{"value":"Xiaomi","label":"Xiaomi"},{"value":"Yudo Auto","label":"Yudo Auto"},{"value":"Zastava","label":"Zastava"},{"value":"other","label":"other"}],"example":"Audi","aliases":["make"]},{"name":"sample_pages","type":"integer","required":false,"description":"How many 200-ad pages of this brand's stock to read. 3 pages cover 600 ads, which is the whole stock for most brands; raise it for Volkswagen or Audi, and read sample_coverage_pct to see whether you got all of it.","on_invalid":"reject","default":3,"minimum":1,"maximum":10}],"returns":"{brand, brand_ads, ads_sampled, sample_pages, sample_coverage_pct, count, models:[{model, ads_seen}]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"brand":"volkswagen"}},{"name":"filter_options","description":"The complete filter vocabulary the site itself ships, group by group, with each value's Serbian label — fuel, gearbox, body, colour, interior, drive, emission class, damage, plates, condition/history claims, the 97-item equipment list, the 18-item safety list, regions and countries. Each group says which search parameter it feeds, and groups the site publishes but does not actually filter on are marked filterable: false. Use this instead of hard-coding enum values: when the site adds a colour or a driver-assist item, it shows up here on the next call.","required_params":[],"optional_params":[],"params":[],"returns":"{count, sorts[], listing_age[], groups:[{param, source_field, filterable, count, values:[{value,label}]}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"poshmark","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Poshmark API scraper — search for-sale and SOLD resale listings on poshmark.com (US) and poshmark.ca (Canada), read a full listing with shipping and bundle discounts, browse a seller's closet and profile, similar listings and brand suggestions. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/poshmark/v1","spec_available":true,"actions":[{"name":"search","description":"Search Poshmark listings by keyword, or browse a department, category or brand, in the US or Canada. Every row: listing id and url, title, brand, current price with the seller's stated original price, price-drop percentage, sold or available with the sold date, condition, size with per-size quantities, department and category, colours, seller-paid shipping flag, likes, comments and shares, the seller's username and closet url. Filter by department, category, brand, size, colour, condition, price range, shipping discount and availability (set availability=sold for sold comparables); sort by relevance, newest, price, likes or price drops; page with `next_cursor`.","required_params":[],"optional_params":["query","include_similar","country","department","category","brand","size","color","condition","availability","price_min","price_max","shipping","sort","limit","cursor","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keywords. Optional when a department or brand is given (browse).","on_invalid":"reject","example":"nike dunk","aliases":["q","keyword"]},{"name":"include_similar","type":"boolean","required":false,"description":"When a keyword has no exact matches Poshmark fills the page with 'similar' listings. By default those are left out and counted in `similar_results_available`; true returns them, each marked `match: similar`.","on_invalid":"reject","default":false},{"name":"country","type":"enum","required":false,"description":"Poshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — poshmark.com (USD)"},{"value":"ca","label":"Canada — poshmark.ca (CAD)"}],"default":"us","example":"us"},{"name":"department","type":"enum","required":false,"description":"Poshmark department.","on_invalid":"reject","allowed_values":[{"value":"Women","label":"Women"},{"value":"Men","label":"Men"},{"value":"Kids","label":"Kids"},{"value":"Home","label":"Home"},{"value":"Pets","label":"Pets"},{"value":"Electronics","label":"Electronics"}],"example":"Women"},{"name":"category","type":"string","required":false,"description":"Category inside the department, e.g. Women → Dresses, Jackets_&_Coats; Men → Shoes; Home → Kitchen; Electronics → Headphones. Needs `department`. Spaces or underscores both work; an unknown category is rejected with the valid list.","on_invalid":"reject","example":"Dresses"},{"name":"brand","type":"string","required":false,"description":"Brand name as Poshmark lists it (comma-separate up to 10). Matching is case-insensitive. `suggest` returns exact brand names.","on_invalid":"reject","example":"Nike"},{"name":"size","type":"string","required":false,"description":"Size label(s) as sellers enter them, comma-separated: M, XL, 8, 10.5, OS (one size), 32x30.","on_invalid":"reject","example":"M"},{"name":"color","type":"string","required":false,"description":"Colour(s), comma-separated: Red, Pink, Orange, Yellow, Green, Blue, Purple, Gold, Silver, Black, Gray, White, Cream, Brown, Tan.","on_invalid":"reject","example":"Black"},{"name":"condition","type":"string","required":false,"description":"Condition(s), comma-separated: new_with_tags, not_new_with_tags, like_new, good, fair, boutique (new items from Poshmark boutique sellers).","on_invalid":"reject","example":"new_with_tags"},{"name":"availability","type":"enum","required":false,"description":"For-sale listings, or sold ones. A sold listing's price is its last listed price — Poshmark does not publish the amount an accepted offer closed at.","on_invalid":"reject","allowed_values":[{"value":"available","label":"For sale now"},{"value":"sold","label":"Sold listings (last listed price)"}],"default":"available","example":"sold"},{"name":"price_min","type":"number","required":false,"description":"Lowest listed price, in the marketplace currency.","on_invalid":"reject","example":20,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest listed price, in the marketplace currency.","on_invalid":"reject","example":150,"minimum":0},{"name":"shipping","type":"enum","required":false,"description":"Only listings whose seller pays part or all of the shipping.","on_invalid":"reject","allowed_values":[{"value":"free","label":"Free shipping offered by the seller"},{"value":"discounted","label":"Discounted or free shipping"}]},{"name":"sort","type":"enum","required":false,"description":"Order of results. Unknown values are rejected, not ignored.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Poshmark's default ranking"},{"value":"newest","label":"Just in"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"most_liked","label":"Most likes first"},{"value":"price_drop","label":"Recent price drops"}],"default":"relevance"},{"name":"limit","type":"integer","required":false,"description":"Listings per call, 1-100 (Poshmark's own page is 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100,"aliases":["count","page_size"]},{"name":"cursor","type":"string","required":false,"description":"Continue a previous call: pass back its `next_cursor`. `next_cursor: null` is the end.","on_invalid":"reject","aliases":["next_cursor","page_token"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, url, brand (as listed), brand_canonical, brand_id, price (number — current listed price), currency, original_price (the seller's stated retail price, null when not stated), discount_from_original_percent, first_listed_price, price_drop_percent, status (available|sold_out|not_for_sale|reserved…), is_sold, sold_at, condition (new_with_tags|not_new_with_tags|boutique|wholesale|like_new|good|fair|null), condition_code, size, size_code, size_system, sizes[]{size, size_code, size_system, quantity_available, quantity_sold}, quantity_available, multi_item, department, category, subcategories[], colors[], style_tags[], shipping_discount (free|discounted|null), image, image_count, like_count, comment_count, share_count, seller{id, username, full_name, url, picture}, listed_at (first published), available_since (when it last became available — what sort=newest follows), publish_count, updated_at, origin_country, available_in[], match (similar|null)}, count, next_cursor, total_results (exact matches, capped at 5000), total_results_capped, similar_results_available, similar_rows_dropped, filters{}, country, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"product/detail","description":"One Poshmark listing in full, by listing id or URL: title, description, brand, current price, the seller's stated original price, first listed price and price-drop percentage, availability and sold date, condition, size and per-size quantities, department / category / subcategory path, colours, style tags, every photo, the shipping price with any seller discount (free or reduced), the seller's bundle discount, like / comment / share counts and the public comments, and the seller's username and closet url.","required_params":["listing_id"],"optional_params":["country","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Poshmark listing id (24 characters, the end of a listing URL) or the full listing URL. Every search row returns it as `listing_id`.","on_invalid":"reject","example":"6aa93f81441b194af9ae6d8f","aliases":["id","product_id","url"]},{"name":"country","type":"enum","required":false,"description":"Poshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — poshmark.com (USD)"},{"value":"ca","label":"Canada — poshmark.ca (CAD)"}],"default":"us","example":"us"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, title, url, brand (as listed), brand_canonical, brand_id, price (number — current listed price), currency, original_price (the seller's stated retail price, null when not stated), discount_from_original_percent, first_listed_price, price_drop_percent, status (available|sold_out|not_for_sale|reserved…), is_sold, sold_at, condition (new_with_tags|not_new_with_tags|boutique|wholesale|like_new|good|fair|null), condition_code, size, size_code, size_system, sizes[]{size, size_code, size_system, quantity_available, quantity_sold}, quantity_available, multi_item, department, category, subcategories[], colors[], style_tags[], shipping_discount (free|discounted|null), image, image_count, like_count, comment_count, share_count, seller{id, username, full_name, url, picture}, listed_at (first published), available_since (when it last became available — what sort=newest follows), publish_count, updated_at, origin_country, available_in[], match (similar|null), description, images[], video_count, shipping{price (0 = free), price_before_discount, currency, discount_type, label}, bundle_discount{percent, min_items, label}, notices[], active_offer_count, comments[]{comment_id, username, full_name, text, created_at}, category_path[], availability_changed_at}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"6aa93f81441b194af9ae6d8f"}},{"name":"product/similar","description":"The listings Poshmark shows as similar to one listing (usually 16), with the same row fields as `search`.","required_params":["listing_id"],"optional_params":["country","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Poshmark listing id (24 characters, the end of a listing URL) or the full listing URL. Every search row returns it as `listing_id`.","on_invalid":"reject","example":"6aa93f81441b194af9ae6d8f","aliases":["id","product_id","url"]},{"name":"country","type":"enum","required":false,"description":"Poshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — poshmark.com (USD)"},{"value":"ca","label":"Canada — poshmark.ca (CAD)"}],"default":"us","example":"us"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing_id, results[]{listing_id, title, url, brand (as listed), brand_canonical, brand_id, price (number — current listed price), currency, original_price (the seller's stated retail price, null when not stated), discount_from_original_percent, first_listed_price, price_drop_percent, status (available|sold_out|not_for_sale|reserved…), is_sold, sold_at, condition (new_with_tags|not_new_with_tags|boutique|wholesale|like_new|good|fair|null), condition_code, size, size_code, size_system, sizes[]{size, size_code, size_system, quantity_available, quantity_sold}, quantity_available, multi_item, department, category, subcategories[], colors[], style_tags[], shipping_discount (free|discounted|null), image, image_count, like_count, comment_count, share_count, seller{id, username, full_name, url, picture}, listed_at (first published), available_since (when it last became available — what sort=newest follows), publish_count, updated_at, origin_country, available_in[], match (similar|null)}, count, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"6aa93f81441b194af9ae6d8f"}},{"name":"seller/listings","description":"One seller's closet: their for-sale or sold listings with the same row fields and filters as `search` (department, category, brand, size, colour, condition, price, shipping), sorted and paged. Use availability=sold for a seller's sales history.","required_params":["seller"],"optional_params":["seller","country","department","category","brand","size","color","condition","availability","price_min","price_max","shipping","sort","limit","cursor","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Seller username (the closet name in poshmark.com/closet/<username>), the seller id (`seller.id` on every listing), or the closet URL.","on_invalid":"reject","example":"kkkkwwwww","aliases":["username","seller_id","closet","url"]},{"name":"country","type":"enum","required":false,"description":"Poshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — poshmark.com (USD)"},{"value":"ca","label":"Canada — poshmark.ca (CAD)"}],"default":"us","example":"us"},{"name":"department","type":"enum","required":false,"description":"Poshmark department.","on_invalid":"reject","allowed_values":[{"value":"Women","label":"Women"},{"value":"Men","label":"Men"},{"value":"Kids","label":"Kids"},{"value":"Home","label":"Home"},{"value":"Pets","label":"Pets"},{"value":"Electronics","label":"Electronics"}],"example":"Women"},{"name":"category","type":"string","required":false,"description":"Category inside the department, e.g. Women → Dresses, Jackets_&_Coats; Men → Shoes; Home → Kitchen; Electronics → Headphones. Needs `department`. Spaces or underscores both work; an unknown category is rejected with the valid list.","on_invalid":"reject","example":"Dresses"},{"name":"brand","type":"string","required":false,"description":"Brand name as Poshmark lists it (comma-separate up to 10). Matching is case-insensitive. `suggest` returns exact brand names.","on_invalid":"reject","example":"Nike"},{"name":"size","type":"string","required":false,"description":"Size label(s) as sellers enter them, comma-separated: M, XL, 8, 10.5, OS (one size), 32x30.","on_invalid":"reject","example":"M"},{"name":"color","type":"string","required":false,"description":"Colour(s), comma-separated: Red, Pink, Orange, Yellow, Green, Blue, Purple, Gold, Silver, Black, Gray, White, Cream, Brown, Tan.","on_invalid":"reject","example":"Black"},{"name":"condition","type":"string","required":false,"description":"Condition(s), comma-separated: new_with_tags, not_new_with_tags, like_new, good, fair, boutique (new items from Poshmark boutique sellers).","on_invalid":"reject","example":"new_with_tags"},{"name":"availability","type":"enum","required":false,"description":"For-sale listings, or sold ones. A sold listing's price is its last listed price — Poshmark does not publish the amount an accepted offer closed at.","on_invalid":"reject","allowed_values":[{"value":"available","label":"For sale now"},{"value":"sold","label":"Sold listings (last listed price)"}],"default":"available","example":"sold"},{"name":"price_min","type":"number","required":false,"description":"Lowest listed price, in the marketplace currency.","on_invalid":"reject","example":20,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest listed price, in the marketplace currency.","on_invalid":"reject","example":150,"minimum":0},{"name":"shipping","type":"enum","required":false,"description":"Only listings whose seller pays part or all of the shipping.","on_invalid":"reject","allowed_values":[{"value":"free","label":"Free shipping offered by the seller"},{"value":"discounted","label":"Discounted or free shipping"}]},{"name":"sort","type":"enum","required":false,"description":"Order of results. Unknown values are rejected, not ignored.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Poshmark's default ranking"},{"value":"newest","label":"Just in"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"most_liked","label":"Most likes first"},{"value":"price_drop","label":"Recent price drops"}],"default":"relevance"},{"name":"limit","type":"integer","required":false,"description":"Listings per call, 1-100 (Poshmark's own page is 48).","on_invalid":"reject","default":48,"minimum":1,"maximum":100,"aliases":["count","page_size"]},{"name":"cursor","type":"string","required":false,"description":"Continue a previous call: pass back its `next_cursor`. `next_cursor: null` is the end.","on_invalid":"reject","aliases":["next_cursor","page_token"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, url, brand (as listed), brand_canonical, brand_id, price (number — current listed price), currency, original_price (the seller's stated retail price, null when not stated), discount_from_original_percent, first_listed_price, price_drop_percent, status (available|sold_out|not_for_sale|reserved…), is_sold, sold_at, condition (new_with_tags|not_new_with_tags|boutique|wholesale|like_new|good|fair|null), condition_code, size, size_code, size_system, sizes[]{size, size_code, size_system, quantity_available, quantity_sold}, quantity_available, multi_item, department, category, subcategories[], colors[], style_tags[], shipping_discount (free|discounted|null), image, image_count, like_count, comment_count, share_count, seller{id, username, full_name, url, picture}, listed_at (first published), available_since (when it last became available — what sort=newest follows), publish_count, updated_at, origin_country, available_in[], match (similar|null)}, count, next_cursor, total_results (exact matches, capped at 5000), total_results_capped, similar_results_available, similar_rows_dropped, filters{}, country, seller","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller":"kkkkwwwww"}},{"name":"seller/profile","description":"A seller's public Poshmark profile by username, id or closet URL: username, picture, bio, join date, last active date, number of listings (resale, boutique, wholesale), followers and following, items sold as Poshmark displays it, orders shipped and whether the closet is on vacation hold.","required_params":["seller"],"optional_params":["country","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"Seller username (the closet name in poshmark.com/closet/<username>), the seller id (`seller.id` on every listing), or the closet URL.","on_invalid":"reject","example":"kkkkwwwww","aliases":["username","seller_id","closet","url"]},{"name":"country","type":"enum","required":false,"description":"Poshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — poshmark.com (USD)"},{"value":"ca","label":"Canada — poshmark.ca (CAD)"}],"default":"us","example":"us"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"seller{id, username, display_handle, first_name, last_name, full_name, gender, linked_accounts{fb_user_id, gp_user_id, fb_info, pn_v2_info}, url, picture, bio, joined_at, status, home_country, last_active_date, listings_count, resale_listings, boutique_listings, wholesale_listings, followers, following, items_sold_display (Poshmark's own rounded label, e.g. '30+'), orders_shipped, vacation_hold}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller":"kkkkwwwww"}},{"name":"suggest","description":"Poshmark's brand suggestions for a partial brand name — the exact names the `brand` filter matches.","required_params":["query"],"optional_params":["country","limit","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a brand name.","on_invalid":"reject","example":"coach","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Poshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States — poshmark.com (USD)"},{"value":"ca","label":"Canada — poshmark.ca (CAD)"}],"default":"us","example":"us"},{"name":"limit","type":"integer","required":false,"description":"Maximum suggestions, 1-20.","on_invalid":"reject","default":10,"minimum":1,"maximum":20},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{type (brand), id, name}, count, query, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}}]},{"name":"power-no","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"POWER API — power.no, power.dk, power.fi and power.se electronics prices, previous price, warehouse and per-store stock, EAN, specifications, price history and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/power-no/v1","spec_available":true,"actions":[{"name":"search","description":"Search the POWER catalogue of Norway, Denmark, Finland or Sweden by keyword and/or category, brand, price range, stock state, store (click & collect) or campaign, sorted by popularity, price, title, brand or rating. Each row: product id, title, brand, manufacturer SKU, category path, URL, image, price incl. and ex. VAT, previous price with the site's own campaign note, discount, campaigns, warehouse stock units and band, units in stores, click & collect store count, next delivery date, rating, review count, energy class, selling points. Plus the source's total and its facet counts (brands, categories, stores, stock, price range). One of `query`, `category`, `brand` or `campaign_id` is required.","required_params":[],"optional_params":["country","query","category","brand","min_price","max_price","stock","store","campaign_id","sort","page","page_size"],"params":[{"name":"country","type":"enum","required":false,"description":"Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway — power.no (NOK)"},{"value":"dk","label":"Denmark — power.dk (DKK)"},{"value":"fi","label":"Finland — power.fi (EUR)"},{"value":"se","label":"Sweden — power.se (SEK)"}],"default":"no","example":"no","aliases":["market","site"]},{"name":"query","type":"string","required":false,"description":"Search words as typed into the site's search box.","on_invalid":"reject","example":"oled tv","aliases":["q","keyword","keywords","search"]},{"name":"category","type":"string","required":false,"description":"Numeric category id, as a row's category_id / category_path or the `categories` action returns it (1862 = TV on power.no). An unknown id returns 0 rows.","on_invalid":"reject","example":"1862","aliases":["category_id"]},{"name":"brand","type":"string","required":false,"description":"Brand exactly as rows print it (Samsung, LG, Apple …); facets.brands lists the brands of the current result. An unknown brand returns 0 rows.","on_invalid":"reject","example":"Samsung"},{"name":"min_price","type":"number","required":false,"description":"Lowest price incl. VAT, in the country's currency.","on_invalid":"reject","example":3000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price incl. VAT, in the country's currency.","on_invalid":"reject","example":8000,"minimum":0,"aliases":["price_max"]},{"name":"stock","type":"enum","required":false,"description":"Only products in this stock state, as the site's own stock facet names it (facets.stock shows the counts).","on_invalid":"reject","allowed_values":[{"value":"online","label":"in stock for online delivery (WebStock)"},{"value":"click_and_collect","label":"available for click & collect (CnCWebStock)"},{"value":"incoming","label":"on its way in (ComingStock)"}],"aliases":["availability","in_stock"]},{"name":"store","type":"string","required":false,"description":"Only products available for click & collect at this store, written exactly as the `stores` action / facets.stores prints the name.","on_invalid":"reject","example":"POWER Rud","aliases":["store_name"]},{"name":"campaign_id","type":"integer","required":false,"description":"Only products in this campaign (a row's campaigns[].campaign_id).","on_invalid":"reject","example":36026,"aliases":["campaign"]},{"name":"sort","type":"enum","required":false,"description":"popularity (the site's default), price_asc, price_desc, title, brand, rating (the site's own rating order, weighted by review count: 4.89 with 2,311 reviews ranks above 5.0 with 1). Price order follows the site's index and can place a freshly re-priced row out of order (1 of 24 in our measurement).","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"popularity"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"title","label":"title"},{"value":"brand","label":"brand"},{"value":"rating","label":"rating"}],"default":"popularity","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page. The source pages through at most its first 10,000 results (see last_page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-24).","on_invalid":"reject","default":24,"minimum":1,"maximum":24,"aliases":["limit","per_page"]}],"returns":"results[]{product_id, title, brand, brand_id, manufacturer_sku, category_id, category, category_path[], url, image, country, currency, price, price_ex_vat, vat_pct, previous_price, previous_price_kind, previous_price_note, lowest_recent_price, lowest_recent_price_days, campaign_ends, campaign_badge, discount_amount, discount_pct, campaigns[], web_stock_status, warehouse_stock_units, store_stock_units, click_and_collect_store_count, next_delivery_date, next_delivery_confirmed, limited_quantity, can_add_to_cart, sale_starts_note, rating, review_count, energy_class, energy_label_url, product_fiche_url, warranty_months, variant_group, short_description, selling_points[]} + total, page, page_size, last_page, has_more, facets{brands, category_ids, stores, stock, price_range}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"oled tv","country":"no"}},{"name":"product","description":"Full record of one product in one country: everything a search row carries plus EAN, Club bonus amount, cheapest delivery price, full description, all specifications (grouped, with units), stock units per store with store names, variants (colour / size siblings with their ids), all images and videos.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id exactly as a search row returns it in `product_id` (the number after /p- in the product URL; the same id on all four sites). A product URL is accepted too.","on_invalid":"reject","example":"4126338","aliases":["id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway — power.no (NOK)"},{"value":"dk","label":"Denmark — power.dk (DKK)"},{"value":"fi","label":"Finland — power.fi (EUR)"},{"value":"se","label":"Sweden — power.se (SEK)"}],"default":"no","example":"no","aliases":["market","site"]}],"returns":"{…every search row field, ean, vendor_id, club_bonus_amount, cheapest_freight_price, description, specs[]{name, group, value, values[], unit}, store_stock[]{store_id, store_name, city, stock_units}, stores_with_stock, store_stock_units_listed, variants[]{attribute, value, product_id, url, stock_status}, variant_product_ids[], images[], videos[], brand_page, outlet_offer_count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"4126338","country":"no"}},{"name":"price_history","description":"The site's own price-change log for one product in one country: each date the price changed and the new price, newest first.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id exactly as a search row returns it in `product_id` (the number after /p- in the product URL; the same id on all four sites). A product URL is accepted too.","on_invalid":"reject","example":"4126338","aliases":["id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway — power.no (NOK)"},{"value":"dk","label":"Denmark — power.dk (DKK)"},{"value":"fi","label":"Finland — power.fi (EUR)"},{"value":"se","label":"Sweden — power.se (SEK)"}],"default":"no","example":"no","aliases":["market","site"]},{"name":"days","type":"integer","required":false,"description":"How many days back (1-365).","on_invalid":"reject","default":90,"example":90,"minimum":1,"maximum":365}],"returns":"{product_id, country, currency, days, points[]{date, price}, lowest, highest, current}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"4126338","country":"no"}},{"name":"reviews","description":"Customer reviews of one product: rating, title, text, pros and cons, recommendation, language, author nickname, date, verified-purchase badge, helpful votes, photos — plus the rating distribution. Reviews are shared across the POWER sites; `language=local` keeps only the country's own language.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id exactly as a search row returns it in `product_id` (the number after /p- in the product URL; the same id on all four sites). A product URL is accepted too.","on_invalid":"reject","example":"4126338","aliases":["id","sku","url"]},{"name":"country","type":"enum","required":false,"description":"Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway — power.no (NOK)"},{"value":"dk","label":"Denmark — power.dk (DKK)"},{"value":"fi","label":"Finland — power.fi (EUR)"},{"value":"se","label":"Sweden — power.se (SEK)"}],"default":"no","example":"no","aliases":["market","site"]},{"name":"language","type":"enum","required":false,"description":"all (default) or local.","on_invalid":"reject","allowed_values":[{"value":"all","label":"reviews in every language"},{"value":"local","label":"only the country's own language"}],"default":"all","example":"all"},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest first"},{"value":"oldest","label":"oldest first"},{"value":"highest","label":"highest rating first"},{"value":"lowest","label":"lowest rating first"},{"value":"helpful","label":"most helpful first"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"{product_id, total, average_rating, rating_distribution{1..5}, recommended_count, reviews[]{review_id, rating, title, text, pros, cons, recommended, language, author, submitted_at, verified_purchase, helpful_votes, photos[]}, page, page_size, has_more}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"4126338","country":"no"}},{"name":"stores","description":"The chain's stores in one country: store id, name (the value the search `store` filter takes), street, postal code, city, region, coordinates, phone, e-mail, opening hours for the coming days.","required_params":[],"optional_params":["country","city"],"params":[{"name":"country","type":"enum","required":false,"description":"Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway — power.no (NOK)"},{"value":"dk","label":"Denmark — power.dk (DKK)"},{"value":"fi","label":"Finland — power.fi (EUR)"},{"value":"se","label":"Sweden — power.se (SEK)"}],"default":"no","example":"no","aliases":["market","site"]},{"name":"city","type":"string","required":false,"description":"Only stores whose city, region or name contains this text.","on_invalid":"reject","example":"Oslo"}],"returns":"stores[]{store_id, name, street, postal_code, city, region, lat, lng, phone, email, flagship, dealer, opening_hours[]{date, hours}} + total","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"dk"}},{"name":"categories","description":"The category tree of one country: category id (the value the search `category` filter takes), name, parent id, depth and URL.","required_params":[],"optional_params":["country","name"],"params":[{"name":"country","type":"enum","required":false,"description":"Which POWER store: no (power.no), dk (power.dk), fi (power.fi), se (power.se). Prices come in that country's currency.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway — power.no (NOK)"},{"value":"dk","label":"Denmark — power.dk (DKK)"},{"value":"fi","label":"Finland — power.fi (EUR)"},{"value":"se","label":"Sweden — power.se (SEK)"}],"default":"no","example":"no","aliases":["market","site"]},{"name":"name","type":"string","required":false,"description":"Only categories whose name contains this text.","on_invalid":"reject","example":"TV"}],"returns":"categories[]{category_id, name, parent_id, depth, url} + total","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"se"}}]},{"name":"preisjaeger","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Preisjäger API — deals from www.preisjaeger.at (Austria) as JSON: search the community's deals by keyword with sort (relevance, newest, hottest, price, discussed), temperature, price, date and category filters; the trending, new, hottest and discussion feeds; every deal in full (price, comparison price, discount, merchant, voucher code, shipping, temperature, comments, expiry, description); the comments of a deal; and the category list. Prices in EUR. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/preisjaeger/v1","spec_available":true,"actions":[{"name":"search","description":"Search Preisjäger deals by keyword. Sort by relevance, newest, hottest, price or latest comment; filter by temperature, price, posting date, category, expired and local deals. 30 deals a page.","required_params":["query"],"optional_params":["sort","time_frame","min_temperature","max_temperature","min_price","max_price","group_id","hide_expired","hide_local","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search Preisjäger deal titles and voucher codes for.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default for a search)"},{"value":"new","label":"Newest first"},{"value":"hot","label":"Hottest first (highest temperature)"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"discussed","label":"Most recently commented"}],"default":"relevance","example":"hot","aliases":["sort_by","order"]},{"name":"time_frame","type":"enum","required":false,"description":"How far back to search by posting date. The site searches the last 365 days unless told otherwise.","on_invalid":"reject","allowed_values":[{"value":"last_year","label":"Posted in the last 365 days (the site's default)"},{"value":"last_30_days","label":"Last 30 days"},{"value":"last_7_days","label":"Last 7 days"},{"value":"all_time","label":"No date limit"}],"default":"last_year","example":"last_30_days","aliases":["period","posted_within"]},{"name":"min_temperature","type":"integer","required":false,"description":"Only deals at or above this temperature (degrees; the site's own steps are 20, 100 and 500, any whole number works).","on_invalid":"reject","example":100,"minimum":-100000,"maximum":100000,"aliases":["temperature_from","min_temp"]},{"name":"max_temperature","type":"integer","required":false,"description":"Only deals at or below this temperature.","on_invalid":"reject","example":600,"minimum":-100000,"maximum":100000,"aliases":["temperature_to","max_temp"]},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price, in EUR.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price, in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max","price_to"]},{"name":"group_id","type":"string","required":false,"description":"Only one category: a categories row's group_id (or a row's group.group_id).","on_invalid":"reject","example":"1","value_pattern":"\\d{1,12}","aliases":["category_id"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked as expired.","on_invalid":"reject","default":false,"example":true},{"name":"hide_local","type":"boolean","required":false,"description":"Leave out in-store-only (local) deals.","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: total, page, last_page, has_more, filters_applied, suggestions_dropped (a search with no result: the site's filler deals are not returned).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","sort":"new"}},{"name":"deals","description":"The Preisjäger feeds: trending (heating up now), new (every new post), hottest (the hottest of the period) and community discussions. 30 a page.","required_params":[],"optional_params":["list","page"],"params":[{"name":"list","type":"enum","required":false,"description":"Which Preisjäger feed.","on_invalid":"reject","allowed_values":[{"value":"trending","label":"What is heating up now (the site's 'hot' tab)"},{"value":"new","label":"Newest posts first"},{"value":"hottest","label":"The hottest deals of the current period"},{"value":"discussions","label":"Community discussion threads"}],"default":"trending","example":"new","aliases":["feed","tab"]},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: list, total, total_capped (the feeds report 10000 = a cap), page, last_page, has_more, pinned_rows.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"list":"new"}},{"name":"category_deals","description":"The deals of one Preisjäger category, hottest or newest first. The category page's own view hides expired deals and starts at a temperature floor (100° or 180° depending on the site); hide_expired / min_temperature change that and meta.applied_view shows what the page applied.","required_params":["group_slug"],"optional_params":["sort","min_temperature","hide_expired","page"],"params":[{"name":"group_slug","type":"string","required":true,"description":"Category slug: a categories row's group_slug (or a row's group.group_slug), e.g. elektronik, gaming, reisen.","on_invalid":"reject","example":"elektronik","value_pattern":"[a-z0-9][a-z0-9\\-]{0,100}","aliases":["category","group"]},{"name":"sort","type":"enum","required":false,"description":"Order of the category's deals.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hottest first (the category page's default)"},{"value":"new","label":"Newest first"},{"value":"discussed","label":"Most recently commented"}],"default":"hot","example":"new","aliases":["sort_by"]},{"name":"min_temperature","type":"integer","required":false,"description":"Temperature floor. The category page has its own default floor (100° on most sites); meta.applied_view shows what the page applied.","on_invalid":"reject","example":0,"minimum":-100000,"maximum":100000,"aliases":["temperature_from"]},{"name":"hide_expired","type":"boolean","required":false,"description":"The category page hides expired deals by default; false shows them.","on_invalid":"reject","example":false},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: group_slug, sort, applied_view{sort, min_temperature, hide_expired}, total, total_capped, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group_slug":"elektronik"}},{"name":"deal","description":"One deal in full by its id: price (0 = free, null = no price), the price as the site prints it, comparison price and discount, merchant, voucher code, shipping, temperature, status and expiry, every category it is in, the poster, the outbound link, images and the full description.","required_params":["deal_id"],"optional_params":[],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (361295); a www.preisjaeger.at deal URL also works.","on_invalid":"reject","example":"361295","aliases":["id","thread_id","url"]}],"returns":"deal{deal_id, type, title, url, share_url, visit_url, status, is_expired, is_hot, is_new, is_local, is_exclusive, nsfw, temperature, temperature_level, price, is_free, price_display, next_best_price, discount_pct, source_discount_pct, price_discount, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant, link_host, group, groups[], comment_count, posted_by, published_at, created_at, updated_at, starts_at, expires_at, dispatched_from{name, country}, is_national, regions, locations, image_url, images[], description, description_html}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"361295"}},{"name":"comments","description":"The comments of one deal, in the site's own order (most helpful first), with author, time, reactions and reply links.","required_params":["deal_id"],"optional_params":["limit","page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (361295); a www.preisjaeger.at deal URL also works.","on_invalid":"reject","example":"361295","aliases":["id","thread_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Comments per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Comment page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"rows[]: comment_id, deal_id, url, text, html, user{user_id, username}, created_at, reactions{like, funny, helpful…}, is_reply, main_comment_id, parent_comment_id, is_pinned, popular, was_edited, status. meta: total, page, last_page, has_more, order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"361295"}},{"name":"categories","description":"The Preisjäger category list: every main category with its id, slug, deal count and its community-favourite subcategories. group_id goes to search, group_slug to category_deals.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: group_id, name, group_slug, url, deal_count, subcategories[{group_id, name, group_slug}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"pricecharting","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"PriceCharting API — collectible price guide from pricecharting.com: current market price per condition and grade (Loose / CIB / New / Graded for video games; Ungraded, Grade 1-9.5, PSA 10, BGS 10, CGC 10, SGC 10 for Pokémon, Magic, Yu-Gi-Oh!, One Piece and Lorcana cards; 2.0-10 for comic books; VG-MS70 for coins; Funko Pop and LEGO), the monthly price history behind the chart, sales volume, and the completed sales (eBay, Goldin, Heritage, Fanatics) the prices are computed from. Search, product, price history, sold listings, every product of a console or card set, and the set lists. Prices are the site's estimates in USD. No login, no key.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/pricecharting/v1","spec_available":true,"actions":[{"name":"search","description":"Search PriceCharting by name, card number, UPC or ASIN. Each row has the product id, console / set, category and three headline prices with the page's own condition labels. The source returns at most 100 rows (200 with a category filter) and has no further pages; narrow with category / console_id / region.","required_params":["query"],"optional_params":["category","console_id","exclude_variants","region","sort"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for: a product, card, comic, coin or set name, a card number, a UPC or an ASIN (the site's own search box).","on_invalid":"reject","example":"charizard","aliases":["q","keyword","keywords"]},{"name":"category","type":"enum","required":false,"description":"Only one product family. trading-cards covers every card game (Pokémon, Magic, Yu-Gi-Oh!, One Piece, Lorcana, Star Wars, Marvel …).","on_invalid":"reject","allowed_values":[{"value":"video-games","label":"Video games"},{"value":"trading-cards","label":"Trading cards (all card games)"},{"value":"comic-books","label":"Comic books"},{"value":"funko-pops","label":"Funko Pop!"},{"value":"coins","label":"Coins"},{"value":"lego-sets","label":"LEGO sets"}],"example":"trading-cards","aliases":["broad_category"]},{"name":"console_id","type":"string","required":false,"description":"Only one console / card set / comic series: a search row's `console_id` (G4 = Nintendo 64, G10623 = Pokémon Base Set).","on_invalid":"reject","example":"G4","value_pattern":"G\\d{1,9}","aliases":["console_uid","set_id"]},{"name":"exclude_variants","type":"boolean","required":false,"description":"Leave out variants (Player's Choice, 1st Edition, Newsstand …).","on_invalid":"reject","default":false,"example":true},{"name":"region","type":"enum","required":false,"description":"Only one release region (video games): Japan, NTSC (Americas) or PAL.","on_invalid":"reject","allowed_values":[{"value":"japan","label":"Japan"},{"value":"ntsc","label":"NTSC (Americas)"},{"value":"pal","label":"PAL (Europe)"}],"example":"pal","aliases":["region_name"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Most popular first (the site's default)"},{"value":"name","label":"Alphabetical"},{"value":"price-highest","label":"Highest Loose / Ungraded price first (measured: the site orders by the first price, not the PSA 10 / New one)"},{"value":"change-dollar","label":"Biggest price change first"}],"default":"popularity","example":"price-highest"}],"returns":"rows[]: id, name, console_name, console_id, category, image, print_run, prices[3]: {condition (the page's own label for this category — e.g. Loose / New / Complete for games, Ungraded / PSA 10 / Grade 9 for cards, Ungraded / 8.0 / 6.0 for comics, Ungraded / MS66 / MS62 for coins), source_key, price_usd} — the site's list index; on a fast-moving product it can trail the product page (measured 15/18 equal). meta: possibly_truncated (true when the row count hits the source's 100 / 200 cap), filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"charizard","category":"trading-cards"}},{"name":"product","description":"One product in full by its id: every condition / grade the site prices (the Full Price Guide), the headline prices with the last change and the sales volume, release date, publisher, genre, UPC / ASIN / eBay ePID / TCGPlayer id, card or model number, variants and how many sold listings each condition shows.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"`id` of a search or console row, as is (3924 = Super Mario 64 on Nintendo 64). A <console>/<product> path or a pricecharting.com/game/… URL is also accepted.","on_invalid":"reject","example":"3924","aliases":["product_id","url"]}],"returns":"product{id, name, url, category, console_name, console_slug, console_id, image, release_date, release_date_text, genre, publisher, developer, upc, asin, ebay_epid, tcgplayer_id, card_number, model_number, box_number, print_run, description, details{label: value}, variants[{id, name}], images[{url, caption}], population_report{PSA|CGC: [{grade 1-10, population}]} (graded cards; null elsewhere), flags{}, headline_prices[{source_key, condition, price_usd, change_usd, sales_volume}], price_guide[{condition, condition_key, price_usd}], sold_listing_counts{condition: n}, price_basis}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"3924"}},{"name":"price_history","description":"The monthly price history behind the product's chart, one series per condition (the price at each month; the last point is the current month and equals the current price). Months without a price are null.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"`id` of a search or console row, as is (3924 = Super Mario 64 on Nintendo 64). A <console>/<product> path or a pricecharting.com/game/… URL is also accepted.","on_invalid":"reject","example":"3924","aliases":["product_id","url"]}],"returns":"product{id, name, url, category, console_name}, series[{condition, source_key, priced_points, first_month, last_month, latest_price_usd, points[{month (YYYY-MM), timestamp_ms, price_usd}]}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"715593"}},{"name":"sales","description":"The completed sales the site shows for a product (up to 30 per condition, newest first): date, listing title, sold price (for a best-offer sale the accepted price plus the list price), marketplace (eBay, Goldin, Heritage, Fanatics) and the item link.","required_params":["id"],"optional_params":["condition"],"params":[{"name":"id","type":"string","required":true,"description":"`id` of a search or console row, as is (3924 = Super Mario 64 on Nintendo 64). A <console>/<product> path or a pricecharting.com/game/… URL is also accepted.","on_invalid":"reject","example":"3924","aliases":["product_id","url"]},{"name":"condition","type":"string","required":false,"description":"Only the sales of one condition / grade, by the page's own label (Loose, CIB, New, Ungraded, Grade 9, PSA 10, 9.8, MS65 …). A label the product does not have is rejected with the list it has.","on_invalid":"reject","example":"PSA 10","aliases":["grade"]}],"returns":"product{id, name, url, category, console_name}, groups[{condition, source_key, condition_ambiguous, count, sales[{sale_id, date, title, price_usd, best_offer, best_offer_list_price_usd, source, source_label, source_item_id, url}]}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"3924","condition":"CIB"}},{"name":"console","description":"Every product of one console, card set, comic series or coin series with three headline prices and the latest price change, 150 per page.","required_params":["console"],"optional_params":["sort","cursor"],"params":[{"name":"console","type":"string","required":true,"description":"Console / set / series slug: a row's `console_slug` from `consoles` or `console` (nintendo-64, pokemon-base-set, comic-books-amazing-spider-man, coins-morgan-dollar).","on_invalid":"reject","example":"pokemon-base-set","value_pattern":"[a-z0-9][a-z0-9-]{0,120}","aliases":["console_slug","set","set_slug"]},{"name":"sort","type":"enum","required":false,"description":"Order of the set's products.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Most popular first (the site's default)"},{"value":"name","label":"Alphabetical"},{"value":"release-date","label":"By release date"},{"value":"highest-price","label":"Highest price first"},{"value":"lowest-price","label":"Lowest price first (products with no price come first)"},{"value":"change-dollar","label":"Biggest price change first"}],"default":"popularity","example":"highest-price"},{"name":"cursor","type":"integer","required":false,"description":"Paging: pass `meta.next_cursor` of the previous page (150 products per page). 0 / empty = the first page.","on_invalid":"reject","default":0,"example":150,"minimum":0,"maximum":100000,"aliases":["offset"]}],"returns":"rows[]: id, name, console_slug, product_slug, url, category, image, print_run, prices[3]: {condition (the page's own label for this category — e.g. Loose / New / Complete for games, Ungraded / PSA 10 / Grade 9 for cards, Ungraded / 8.0 / 6.0 for comics, Ungraded / MS66 / MS62 for coins), source_key, price_usd} — the site's list index; on a fast-moving product it can trail the product page (measured 15/18 equal), price_change_usd, price_change_pct. meta: next_cursor (null on the last page), has_more, category.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"console":"nintendo-64"}},{"name":"consoles","description":"The consoles / card sets / comic series / coin series the site lists for one category ('Browse Popular …' — the popular list, not every comic series), with the slug the `console` action takes.","required_params":["category"],"optional_params":[],"params":[{"name":"category","type":"enum","required":true,"description":"Which product family's sets / consoles / series to list.","on_invalid":"reject","allowed_values":[{"value":"video-games","label":"Video games, consoles and accessories"},{"value":"pokemon-cards","label":"Pokémon cards"},{"value":"magic-cards","label":"Magic: The Gathering cards"},{"value":"yugioh-cards","label":"Yu-Gi-Oh! cards"},{"value":"one-piece-cards","label":"One Piece cards"},{"value":"lorcana-cards","label":"Disney Lorcana cards"},{"value":"comic-books","label":"Comic books"},{"value":"funko-pops","label":"Funko Pop! figures"},{"value":"lego-sets","label":"LEGO sets"},{"value":"coins","label":"US coins"}],"example":"pokemon-cards"}],"returns":"rows[]: console_slug, name, url. meta: list_title.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"pokemon-cards"}}]},{"name":"pricerunner","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"PriceRunner API — UK, Sweden and Denmark price comparison: search, categories, every shop's price with shipping, product specs, price history and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/pricerunner/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on PriceRunner (pricerunner.com UK, .se Sweden, .dk Denmark). Rows are catalogue products with lowest price, cheapest offer, number of shops, rating, popularity rank and product group. The site narrows a free-text query to the category it guesses (`site_applied_filter`); `auto_category: false` searches the whole catalogue. Filter by brand, category and price (ids come from `filters` and `categories` of an earlier call).","required_params":["query"],"optional_params":["country","page","brand_id","category_filter","price_min","price_max","auto_category"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, e.g. `iphone 15`, `headphones`, `dammsugare`, or a model number.","on_invalid":"reject","example":"iphone 15","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which PriceRunner: uk = pricerunner.com (GBP), se = pricerunner.se (SEK), dk = pricerunner.dk (DKK). Product ids are shared across the three; prices, shops and offers are per market.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — pricerunner.com, GBP"},{"value":"se","label":"Sweden — pricerunner.se, SEK"},{"value":"dk","label":"Denmark — pricerunner.dk, DKK"}],"default":"uk","aliases":["market","site"]},{"name":"page","type":"integer","required":false,"description":"Result page, 48 rows each. A page past the last returns no rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"brand_id","type":"string","required":false,"description":"Brand id from the BRAND entry of `filters` of an earlier call (uk: 162 = Apple).","on_invalid":"reject","example":"162","aliases":["brand"]},{"name":"category_filter","type":"string","required":false,"description":"Category id from `categories[].category_filter` of an earlier search: narrows the search to it.","on_invalid":"reject","example":"100003567-100014541","aliases":["category_facet"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in the market's currency (the site's own price index, matched against the product's lowest price).","on_invalid":"reject","example":300,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in the market's currency.","on_invalid":"reject","example":500,"minimum":0,"aliases":["max_price"]},{"name":"auto_category","type":"boolean","required":false,"description":"Let PriceRunner narrow the query to the category it guesses (its default; `site_applied_filter` says which). false = whole catalogue (headphones: 53 339 instead of 14 781).","on_invalid":"reject","default":true}],"returns":"results[]{row_type, product_id, title, url, description, category{category_id, name}, brand{brand_id, name}, image, lowest_price, cheapest_offer_price, cheapest_offer_merchant_id, price_mismatch, currency, price_per_unit, shop_count, rating, rating_count, popularity_rank, rank_trend, price_drop, ribbon, out_of_stock, condition, classification, product_group{group_id, name, member_count}, instalment} + count + total + page + page_size + has_more + categories[]{category_filter, name} + filters[]{filter_id, name, unit, type, options[]} + site_applied_filter + spelling_suggestion + query + country + currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 15","country":"uk"}},{"name":"category","description":"One PriceRunner category listing (e.g. 1 = Mobile Phones): the same rows as `search`, with sort, brand, price and attribute filters and paging, plus the category's own filter lists with counts.","required_params":["category_id"],"optional_params":["country","page","sort","brand_id","price_min","price_max","attribute_filter"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric PriceRunner category id: the number in /cl/<id>/…, `category.category_id` of a search row or `category_path` of `product`.","on_invalid":"reject","example":"1","aliases":["category","cl"]},{"name":"country","type":"enum","required":false,"description":"Which PriceRunner: uk = pricerunner.com (GBP), se = pricerunner.se (SEK), dk = pricerunner.dk (DKK). Product ids are shared across the three; prices, shops and offers are per market.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — pricerunner.com, GBP"},{"value":"se","label":"Sweden — pricerunner.se, SEK"},{"value":"dk","label":"Denmark — pricerunner.dk, DKK"}],"default":"uk","aliases":["market","site"]},{"name":"page","type":"integer","required":false,"description":"Result page, 48 rows each. A page past the last returns no rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Most popular first (site default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Best rated first"},{"value":"price_drop","label":"Biggest price drop first"},{"value":"name","label":"Alphabetical"}],"default":"popularity"},{"name":"brand_id","type":"string","required":false,"description":"Brand id from the BRAND entry of `filters` of an earlier call (uk: 162 = Apple).","on_invalid":"reject","example":"162","aliases":["brand"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in the market's currency (the site's own price index, matched against the product's lowest price).","on_invalid":"reject","example":300,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in the market's currency.","on_invalid":"reject","example":500,"minimum":0,"aliases":["max_price"]},{"name":"attribute_filter","type":"string","required":false,"description":"One attribute filter as `<filter_id>:<option_id>` from `filters` of an earlier call (uk category 1: 60501678:510242 = Series Apple iPhone 15).","on_invalid":"reject","example":"60501678:510242","value_pattern":"\\d+:\\d+"}],"returns":"results[]{same row shape as search} + count + total + page + page_size + has_more + category{category_id, name, path[], leaf, children[]} + filters[] + sort + country + currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"1","country":"uk"}},{"name":"product","description":"One PriceRunner product: title, brand, category path, image, description, editorial article and FAQ, rating and count, popularity rank in its category, national lowest / highest price and offer count, international lowest price, lowest in-stock price, PriceRunner's price-level verdict with its change, the full spec sheet and every variant of its product group with its own id and price.","required_params":["product_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"string","required":true,"description":"PriceRunner product id: `product_id` of a search / category row, or the number after the dash in a product URL (/pl/1-<id>/…).","on_invalid":"reject","example":"3208336570","aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which PriceRunner: uk = pricerunner.com (GBP), se = pricerunner.se (SEK), dk = pricerunner.dk (DKK). Product ids are shared across the three; prices, shops and offers are per market.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — pricerunner.com, GBP"},{"value":"se","label":"Sweden — pricerunner.se, SEK"},{"value":"dk","label":"Denmark — pricerunner.dk, DKK"}],"default":"uk","aliases":["market","site"]}],"returns":"product{product_id, title, url, description, article, faq[], brand, category, category_path[], image, rating, rating_count, popularity_rank{rank, category}, lowest_price_national, highest_price_national, national_offer_count, lowest_price_international, international_offer_count, lowest_price_in_stock, lowest_price_any_offer, currency, price_level{level, change_absolute, change_percent}, classification, specs[]{group, label, value, description}, variants[]{product_id, title, url, lowest_price, attribute_values, image}, variant_count, meta_title} + lowest_prices{national_with_shipping, national_without_shipping, international_with_shipping, international_without_shipping} + country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"3208336570","country":"uk"}},{"name":"offers","description":"Every shop's offer for one product on PriceRunner: shop (name, id, rating and count, labels, payment methods, return policy), offer title, price, shipping cost, total incl. shipping, campaign price, stock status, delivery days, instalment, attributes, and the click-out link; plus the national / international price summary and the sponsored placements apart. Filter by condition (new, used, refurbished), national or international shops and stock; sort by PriceRunner's recommendation, price, price with shipping or delivery time.","required_params":["product_id"],"optional_params":["country","sort","condition","origin","stock","max_offers"],"params":[{"name":"product_id","type":"string","required":true,"description":"PriceRunner product id: `product_id` of a search / category row, or the number after the dash in a product URL (/pl/1-<id>/…).","on_invalid":"reject","example":"3208336570","aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which PriceRunner: uk = pricerunner.com (GBP), se = pricerunner.se (SEK), dk = pricerunner.dk (DKK). Product ids are shared across the three; prices, shops and offers are per market.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — pricerunner.com, GBP"},{"value":"se","label":"Sweden — pricerunner.se, SEK"},{"value":"dk","label":"Denmark — pricerunner.dk, DKK"}],"default":"uk","aliases":["market","site"]},{"name":"sort","type":"enum","required":false,"description":"Offer order.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"PriceRunner's recommended order (site default)"},{"value":"price","label":"Item price, cheapest first"},{"value":"price_with_shipping","label":"Price incl. shipping, cheapest first"},{"value":"delivery","label":"Fastest delivery first"}],"default":"recommended"},{"name":"condition","type":"enum","required":false,"description":"Which offers by condition (the site's default view is new).","on_invalid":"reject","allowed_values":[{"value":"new","label":"New (and unspecified)"},{"value":"used","label":"Used"},{"value":"refurbished","label":"Refurbished"},{"value":"all","label":"Every condition"}],"default":"new"},{"name":"origin","type":"enum","required":false,"description":"Shops in the market's own country, foreign shops selling into it, or both.","on_invalid":"reject","allowed_values":[{"value":"national","label":"Domestic shops (site default)"},{"value":"international","label":"Foreign shops"},{"value":"all","label":"Both"}],"default":"national"},{"name":"stock","type":"enum","required":false,"description":"Stock filter.","on_invalid":"reject","allowed_values":[{"value":"available","label":"Orderable: in stock, backorder, pre-order, special order, store collection, unknown (site default)"},{"value":"in_stock","label":"In stock only"},{"value":"all","label":"Including out of stock"}],"default":"available"},{"name":"max_offers","type":"integer","required":false,"description":"Cap on the rows returned (PriceRunner sends the whole list in one response).","on_invalid":"reject","default":100,"example":50,"minimum":1,"maximum":300}],"returns":"offers[]{position, offer_id, title, price, shipping_cost, total_price, total_price_source, currency, campaign_price, price_per_unit, stock_status, availability, delivery_days_min, delivery_days_max, instalment, labels[], attributes[], clickout_url, merchant{merchant_id, name, url, country, international_country, rating, rating_count, labels, payment_methods, return_period_days, return_cost, return_policy}} + count + total_offers + cheapest_price + cheapest_total_price + summary{lowest_national, highest_national, national_count, lowest_international, international_count, lowest_in_stock, lowest_any_offer} + sponsored_offers[] + condition_counts + sort + condition + origin + stock","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"3208336570","country":"uk"}},{"name":"price_history","description":"PriceRunner's own price history for one product: the lowest price on each day with the shop that had it, lowest / highest / median in the range. The source's daily lowest spans every condition and contains single days far below the band (mis-matched shop offers); those are kept as published and flagged `suspect_low`.","required_params":["product_id"],"optional_params":["country","time_range","merchant_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"PriceRunner product id: `product_id` of a search / category row, or the number after the dash in a product URL (/pl/1-<id>/…).","on_invalid":"reject","example":"3208336570","aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which PriceRunner: uk = pricerunner.com (GBP), se = pricerunner.se (SEK), dk = pricerunner.dk (DKK). Product ids are shared across the three; prices, shops and offers are per market.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — pricerunner.com, GBP"},{"value":"se","label":"Sweden — pricerunner.se, SEK"},{"value":"dk","label":"Denmark — pricerunner.dk, DKK"}],"default":"uk","aliases":["market","site"]},{"name":"time_range","type":"enum","required":false,"description":"How far back (one point per day).","on_invalid":"reject","allowed_values":[{"value":"1w","label":"Last week"},{"value":"1m","label":"Last month"},{"value":"3m","label":"Last 3 months (site default)"},{"value":"1y","label":"Last year"},{"value":"2y","label":"Last 2 years"},{"value":"all","label":"Everything PriceRunner keeps"}],"default":"3m","aliases":["range"]},{"name":"merchant_id","type":"string","required":false,"description":"Only this shop's line (`merchant.merchant_id` of an `offers` row).","on_invalid":"reject","example":"43870"}],"returns":"product_id + time_range + currency + points[]{date, price, merchant_id, merchant_name, offer_id, suspect_low} + count + first_date + last_date + lowest_in_range{date, price, merchant_name} + lowest_in_range_excluding_suspect + highest_in_range + median_in_range + suspect_point_count + source_lowest + source_highest + merchants_in_chart + identity{requested_product_id, response_product_id, matches}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"3208336570","country":"uk","time_range":"3m"}},{"name":"reviews","description":"Reviews of one product on PriceRunner: user reviews PriceRunner collects from retailers, expert test reviews, or Klarna verified-buyer reviews — score, text, author, source shop or publication, date, language. Paged with `cursor`. `include_summary` adds the overall score, counts and the 1-5 star histogram.","required_params":["product_id"],"optional_params":["country","review_type","limit","cursor","include_summary"],"params":[{"name":"product_id","type":"string","required":true,"description":"PriceRunner product id: `product_id` of a search / category row, or the number after the dash in a product URL (/pl/1-<id>/…).","on_invalid":"reject","example":"3208336570","aliases":["id","pid"]},{"name":"country","type":"enum","required":false,"description":"Which PriceRunner: uk = pricerunner.com (GBP), se = pricerunner.se (SEK), dk = pricerunner.dk (DKK). Product ids are shared across the three; prices, shops and offers are per market.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — pricerunner.com, GBP"},{"value":"se","label":"Sweden — pricerunner.se, SEK"},{"value":"dk","label":"Denmark — pricerunner.dk, DKK"}],"default":"uk","aliases":["market","site"]},{"name":"review_type","type":"enum","required":false,"description":"Which reviews.","on_invalid":"reject","allowed_values":[{"value":"user","label":"User reviews collected from retailers"},{"value":"pro","label":"Expert / magazine test reviews"},{"value":"customer","label":"Klarna verified-buyer reviews"}],"default":"user","aliases":["type"]},{"name":"limit","type":"integer","required":false,"description":"Reviews per call.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` of the previous call, for the next batch.","on_invalid":"reject","example":"prio:10"},{"name":"include_summary","type":"boolean","required":false,"description":"Also return the overall score, counts and star histogram (one more request).","on_invalid":"reject","default":false}],"returns":"reviews[]{date, type, score, score_max, title, text, author, source, source_domain, language, country, reviewed_product, pros, cons, votes_up, votes_down, link} + count + has_more + next_cursor + review_type + summary{score, score_count, user_review_count, pro_review_count, user_score_distribution, pro_score_distribution} (include_summary)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"3208336570","country":"uk"}}]},{"name":"prisjakt","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Prisjakt / PriceSpy API — Nordic, UK and NZ price comparison: search, category listings, every shop's price with shipping, price history and full specs","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/prisjakt/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on one Prisjakt / PriceSpy market. Rows are catalogue products (lowest price, number of offers, rating, category) and, mostly in price-sorted searches, single-shop items Prisjakt has not matched to a product (`row_type: offer`, with the shop and a link to it). Filter by category and brand (ids from the facets this action returns), rating bucket and in-stock. The source lists at most 1000 products per query (`total`); the true match count is `matching_total`.","required_params":["query"],"optional_params":["country","category_filter","brand_id","rating","in_stock_only","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, e.g. `iphone 16`, `dammsugare`, `coffee machine`.","on_invalid":"reject","example":"iphone 16","aliases":["q","keyword","search"]},{"name":"country","type":"enum","required":false,"description":"Which Prisjakt / PriceSpy market: se = prisjakt.nu (SEK), no = prisjakt.no (NOK), fi = hintaopas.fi (EUR), uk = pricespy.co.uk (GBP), nz = pricespy.co.nz (NZD). Product ids are shared across markets; prices, shops and currency come from the market chosen.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — prisjakt.nu, SEK"},{"value":"no","label":"Norway — prisjakt.no, NOK"},{"value":"fi","label":"Finland — hintaopas.fi, EUR"},{"value":"uk","label":"United Kingdom — pricespy.co.uk, GBP"},{"value":"nz","label":"New Zealand — pricespy.co.nz, NZD"}],"default":"se","aliases":["market","site"]},{"name":"category_filter","type":"string","required":false,"description":"Category facet id from `category_facets` (e.g. `pc:horlurar`). An unknown id returns no rows.","on_invalid":"reject","example":"pc:horlurar","aliases":["category_facet"]},{"name":"brand_id","type":"string","required":false,"description":"Brand id from `brand_facets` (e.g. 142 = Apple). An unknown id returns no rows.","on_invalid":"reject","example":"142","aliases":["brand"]},{"name":"rating","type":"enum","required":false,"description":"Rating bucket: products whose user rating is N.x (4 = 4.0-4.99). From `rating_facets`.","on_invalid":"reject","allowed_values":[{"value":"1","label":"1.0-1.99"},{"value":"2","label":"2.0-2.99"},{"value":"3","label":"3.0-3.99"},{"value":"4","label":"4.0-4.99"}],"aliases":["rating_bucket"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only products some shop has in stock.","on_invalid":"reject","default":false,"aliases":["available_only"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Prisjakt's relevance"},{"value":"popularity","label":"Most popular first"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 48 rows per page; the source serves at most 21 pages.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":21}],"returns":"results[]{row_type (product|offer), product_id (product rows), offer_id (offer rows), title, url, image, category{id, name}, category_path[], lowest_price (= the product page headline), lowest_price_any_condition, offer_count, currency, rating, rating_count, deal_percentage, shop{id, name, featured} (offer rows), outbound_url (offer rows)} + total (capped at 1000), pages, matching_total, matching_in_stock, page, has_more, category_facets[]{id, name, count}, brand_facets[]{id, name, count}, rating_facets[]{value, count}, categories[]{category_id, name, url, product_count}, country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 16","country":"se"}},{"name":"category","description":"One category listing on a Prisjakt / PriceSpy market: every product in the category with its lowest price, lowest price including shipping, number of offers, rating and popularity rank, 24 per page. Filter by brand; sort by popularity, price, price including shipping, user-review ranking or name.","required_params":["category_id"],"optional_params":["country","brand_id","sort","page"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric Prisjakt category id: `category.category_id` of `product`, a search row's `category.id`, `categories[]` of `search`, or the number in kategori.php?k=<id> (103 = Mobiltelefoner / Mobile phones).","on_invalid":"reject","example":"103","aliases":["category","k"]},{"name":"country","type":"enum","required":false,"description":"Which Prisjakt / PriceSpy market: se = prisjakt.nu (SEK), no = prisjakt.no (NOK), fi = hintaopas.fi (EUR), uk = pricespy.co.uk (GBP), nz = pricespy.co.nz (NZD). Product ids are shared across markets; prices, shops and currency come from the market chosen.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — prisjakt.nu, SEK"},{"value":"no","label":"Norway — prisjakt.no, NOK"},{"value":"fi","label":"Finland — hintaopas.fi, EUR"},{"value":"uk","label":"United Kingdom — pricespy.co.uk, GBP"},{"value":"nz","label":"New Zealand — pricespy.co.nz, NZD"}],"default":"se","aliases":["market","site"]},{"name":"brand_id","type":"string","required":false,"description":"Numeric brand id (e.g. 142 = Apple).","on_invalid":"reject","example":"142","aliases":["brand"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Most popular first (Prisjakt's default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_incl_shipping_asc","label":"Lowest price including shipping first"},{"value":"user_reviews","label":"Prisjakt's user-review ranking (weighs score and number of reviews; not strictly by score)"},{"value":"name","label":"A to Z"}],"default":"popularity"},{"name":"page","type":"integer","required":false,"description":"Result page, 24 products per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"category{category_id, name, url, product_count, path[]} + results[]{row_type=product, product_id, title, url, brand, image, lowest_price, lowest_price_any_condition, lowest_price_incl_shipping, offer_count, currency, rating, rating_count, popularity_rank_in_category, deal_percentage} + page, has_more, sort_applied, country","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"103","country":"se"}},{"name":"product","description":"One product on a Prisjakt / PriceSpy market: title, brand, category path, image, release date, the lowest price (new) and lowest in any condition, the highest price, number of offers and shops, user rating, popularity rank, every variant with its GTIN / EAN, and the full spec sheet (headline specs marked). The lowest price is checked against three of the source's own witnesses.","required_params":["product_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"integer","required":true,"description":"Prisjakt product id: the `product_id` of a search / category row, or the number in a product URL (…/produkt.php?p=<id>). The same id works on every market.","on_invalid":"reject","example":13854649,"minimum":1,"aliases":["id","p"]},{"name":"country","type":"enum","required":false,"description":"Which Prisjakt / PriceSpy market: se = prisjakt.nu (SEK), no = prisjakt.no (NOK), fi = hintaopas.fi (EUR), uk = pricespy.co.uk (GBP), nz = pricespy.co.nz (NZD). Product ids are shared across markets; prices, shops and currency come from the market chosen.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — prisjakt.nu, SEK"},{"value":"no","label":"Norway — prisjakt.no, NOK"},{"value":"fi","label":"Finland — hintaopas.fi, EUR"},{"value":"uk","label":"United Kingdom — pricespy.co.uk, GBP"},{"value":"nz","label":"New Zealand — pricespy.co.nz, NZD"}],"default":"se","aliases":["market","site"]}],"returns":"product{product_id, title, url, country, brand{id, name, url}, category{category_id, name, url}, category_path[], description, image, image_count, release_date, stock_status, lowest_price (the page's headline price), summary_price, lowest_price_any_condition, cheapest_new_offer, highest_price, currency, price_mismatch, main_offer_count, offer_count, shop_count, rating, rating_count, popularity_rank{overall, in_category}, gtins[], variants[]{variant_id, name, gtin, sku, attributes}, core_specs[], specs[]{id, group, name, value, unit, is_core}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":13854649,"country":"se"}},{"name":"offers","description":"Every shop offer for one product on a Prisjakt / PriceSpy market, in Prisjakt's order (cheapest first, new before used / refurbished): shop (name, rating, marketplace, country), condition, price, shipping cost, price including shipping, delivery days, stock status, original and member price, and the link to the shop. Shipping and the price including shipping are null where the shop publishes no shipping cost.","required_params":["product_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"integer","required":true,"description":"Prisjakt product id: the `product_id` of a search / category row, or the number in a product URL (…/produkt.php?p=<id>). The same id works on every market.","on_invalid":"reject","example":13854649,"minimum":1,"aliases":["id","p"]},{"name":"country","type":"enum","required":false,"description":"Which Prisjakt / PriceSpy market: se = prisjakt.nu (SEK), no = prisjakt.no (NOK), fi = hintaopas.fi (EUR), uk = pricespy.co.uk (GBP), nz = pricespy.co.nz (NZD). Product ids are shared across markets; prices, shops and currency come from the market chosen.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — prisjakt.nu, SEK"},{"value":"no","label":"Norway — prisjakt.no, NOK"},{"value":"fi","label":"Finland — hintaopas.fi, EUR"},{"value":"uk","label":"United Kingdom — pricespy.co.uk, GBP"},{"value":"nz","label":"New Zealand — pricespy.co.nz, NZD"}],"default":"se","aliases":["market","site"]}],"returns":"product{product_id, title, url, country, lowest_price, summary_price, lowest_price_any_condition, cheapest_new_offer, cheapest_new_offer_incl_shipping, highest_price, currency, price_mismatch, offer_count, shop_count} + offers[]{position, offer_id, title, condition (new|used|refurbished), price, shipping_cost, price_incl_shipping, total_mismatch, original_price, member_price, membership_program, price_valid_until, currency, stock_status, availability_date, delivery_days_min, delivery_days_max, carrier, shipping_options[], variant_id, variant, shop{id, name, featured, marketplace, country, market, url, rating, rating_count, review_count_total}, primary_market, outbound_url} + count + by_condition","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":13854649,"country":"se"}},{"name":"price_history","description":"Prisjakt's price history (the price chart) for one product on one market: every change of the lowest price, with its date, the shop that set it and that shop's offer title; plus the lowest and highest price in the range and every shop that appears in the history. A price holds until the next point.","required_params":["product_id"],"optional_params":["country","time_range"],"params":[{"name":"product_id","type":"integer","required":true,"description":"Prisjakt product id: the `product_id` of a search / category row, or the number in a product URL (…/produkt.php?p=<id>). The same id works on every market.","on_invalid":"reject","example":13854649,"minimum":1,"aliases":["id","p"]},{"name":"country","type":"enum","required":false,"description":"Which Prisjakt / PriceSpy market: se = prisjakt.nu (SEK), no = prisjakt.no (NOK), fi = hintaopas.fi (EUR), uk = pricespy.co.uk (GBP), nz = pricespy.co.nz (NZD). Product ids are shared across markets; prices, shops and currency come from the market chosen.","on_invalid":"reject","allowed_values":[{"value":"se","label":"Sweden — prisjakt.nu, SEK"},{"value":"no","label":"Norway — prisjakt.no, NOK"},{"value":"fi","label":"Finland — hintaopas.fi, EUR"},{"value":"uk","label":"United Kingdom — pricespy.co.uk, GBP"},{"value":"nz","label":"New Zealand — pricespy.co.nz, NZD"}],"default":"se","aliases":["market","site"]},{"name":"time_range","type":"enum","required":false,"description":"How far back.","on_invalid":"reject","allowed_values":[{"value":"3m","label":"3 months"},{"value":"6m","label":"6 months"},{"value":"1y","label":"1 year"},{"value":"2y","label":"2 years"},{"value":"all","label":"Since the product was listed"}],"default":"1y","aliases":["range"]}],"returns":"product{product_id, title, url, country, lowest_price_now} + time_range + currency + points[]{date, price, shop{id, name}, offer_title, member_price, paid_membership, shop_still_listed} + count + first_date + last_date + lowest_in_range{price, date, shop} + highest_in_range + history_starts + history_updated + shops_in_history[]{id, name}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":13854649,"country":"se","time_range":"1y"}}]},{"name":"producthunt","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Product Hunt API scraper — daily/weekly/monthly leaderboards, product detail & reviews, launch comments, topic & category feeds, maker profiles, collections, and the discussions forum from producthunt.com (logged-out, no API key)","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/producthunt/v1","spec_available":true,"actions":[{"name":"posts","description":"Today's or historical leaderboard launches (daily/weekly/monthly/yearly).","required_params":[],"optional_params":["date","year","month","day","week","period","page"],"params":[{"name":"period","type":"enum","required":false,"description":"Leaderboard window. Unknown values fall back to the daily board.","on_invalid":"ignore","allowed_values":[{"value":"daily","label":"Daily leaderboard (default)"},{"value":"weekly","label":"Weekly leaderboard"},{"value":"monthly","label":"Monthly leaderboard"},{"value":"yearly","label":"Yearly leaderboard"}],"default":"daily","example":"daily"},{"name":"date","type":"string","required":false,"description":"Leaderboard date (YYYY-MM-DD). Overrides year/month/day when given.","on_invalid":"ignore","example":"2024-06-01"},{"name":"year","type":"integer","required":false,"description":"Leaderboard year (used with month/day/week; defaults to today).","on_invalid":"ignore","example":2024,"minimum":2013},{"name":"month","type":"integer","required":false,"description":"Leaderboard month 1-12 (for daily/monthly periods).","on_invalid":"ignore","example":6,"minimum":1,"maximum":12},{"name":"day","type":"integer","required":false,"description":"Leaderboard day of month 1-31 (for the daily period).","on_invalid":"ignore","example":1,"minimum":1,"maximum":31},{"name":"week","type":"integer","required":false,"description":"ISO week number 1-53 (for the weekly period).","on_invalid":"ignore","example":1,"minimum":1,"maximum":53},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"posts[] (id, slug, name, tagline, upvotes, comments_count, daily/weekly/monthly_rank, topics, product), has_more + next_date/next_page","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"period":"daily"}},{"name":"post","description":"Full launch/product detail by slug: tagline, description, website, makers, hunter, topics, media gallery, external links, review aggregates, alternatives, and launch history.","required_params":["slug"],"optional_params":[],"params":[{"name":"slug","type":"string","required":true,"description":"Launch post or product slug (the segment in producthunt.com/products/<slug> or /posts/<slug>).","on_invalid":"reject","example":"notion"}],"returns":"post{}, product{} (+ ai_review_summary, pro_con_tags), makers[], hunter{}, topics[], media[], links[], alternatives[], launches[], rating_breakdown[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"notion"}},{"name":"reviews","description":"Product reviews by slug: per-question answer text, rating + rating histogram, pro/con tags, and the AI review summary.","required_params":["slug"],"optional_params":["page"],"params":[{"name":"slug","type":"string","required":true,"description":"Product slug (producthunt.com/products/<slug>).","on_invalid":"reject","example":"notion"},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"product{}, rating, reviews_count, rating_breakdown[], reviews[] (question/answer), pro_con_tags[], ai_review_summary, has_more, page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"notion"}},{"name":"topics","description":"Browse Product Hunt topics (interest tags applied to launches).","required_params":[],"optional_params":["page"],"params":[{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"topics[] (id, slug, name, description, followers_count, image_url), has_more, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"topic_posts","description":"Launches filtered by topic slug.","required_params":["slug"],"optional_params":["page"],"params":[{"name":"slug","type":"string","required":true,"description":"Topic slug (the segment in producthunt.com/topics/<slug>).","on_invalid":"reject","example":"artificial-intelligence"},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"posts[] for the topic (same shape as posts), has_more, page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"notion"}},{"name":"categories","description":"Browse Product Hunt product categories (the curated category tree, distinct from topics).","required_params":[],"optional_params":["page"],"params":[{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"categories[] (id, name, path, url, subcategories[]), has_more, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"category","description":"Products and launches inside one product category by slug.","required_params":["slug"],"optional_params":["page"],"params":[{"name":"slug","type":"string","required":true,"description":"Category slug (the segment in producthunt.com/categories/<slug>).","on_invalid":"reject","example":"engineering-development"},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"products[] / posts[] in the category, has_more, page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"notion"}},{"name":"search","description":"Keyword search across Product Hunt — products (default) or makers/users (type=users).","required_params":["query"],"optional_params":["type","page"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search keywords.","on_invalid":"reject","example":"ai","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"What to search: products (default) or users. Unknown values fall back to products.","on_invalid":"ignore","allowed_values":[{"value":"products","label":"Search products/launches (default)"},{"value":"users","label":"Search makers/users"}],"default":"products","example":"products"},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"products[] OR users[] (depending on type), has_more, page","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ai"}},{"name":"collections","description":"Public curated product collections index.","required_params":[],"optional_params":["page"],"params":[{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"collections[] (id, slug, name, description, path, products_count, user), has_more, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"collection","description":"Single collection (its products) by user+collection slug or full path.","required_params":[],"optional_params":["path","username","collection_slug"],"params":[{"name":"path","type":"string","required":false,"description":"Full collection path (e.g. /@user/collections/<slug>). Alternative to username + collection_slug.","on_invalid":"ignore","example":"/@rrhoover/collections/my-tools"},{"name":"username","type":"string","required":false,"description":"Collection owner's username (with/without @). Combine with collection_slug, or pass the full path.","on_invalid":"ignore","example":"rrhoover"},{"name":"collection_slug","type":"string","required":false,"description":"Collection slug — the trailing segment of a collection path.","on_invalid":"ignore","example":"my-tools"}],"returns":"collection{id, slug, name, description, products_count, user, products[]}, products[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"path":"/@rrhoover/collections/my-tools"}},{"name":"user","description":"Maker/user profile plus their submitted launches.","required_params":["username"],"optional_params":["page"],"params":[{"name":"username","type":"string","required":true,"description":"Product Hunt username/handle, with or without @ (the name in producthunt.com/@<username>).","on_invalid":"reject","example":"rrhoover"},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"user{} (id, username, name, headline, followers_count, products_count, is_maker), posts[] (submitted launches), has_more, page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"rrhoover"}},{"name":"discussions","description":"Product Hunt discussions/forum thread feed (popular or newest).","required_params":[],"optional_params":["order","page"],"params":[{"name":"order","type":"enum","required":false,"description":"Discussion feed ordering. Unknown values fall back to popular.","on_invalid":"ignore","allowed_values":[{"value":"popular","label":"Most popular / hot (default)"},{"value":"newest","label":"Newest threads first"}],"default":"popular","example":"popular"},{"name":"page","type":"integer","required":false,"description":"Result page number (1-based). Use meta.next_page to go further.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"threads[] (id, slug, title, description_preview, votes_count, comments_count, user, url), has_more, page","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"order":"popular"}},{"name":"discussion","description":"Single discussion thread with its full nested comment tree.","required_params":["slug"],"optional_params":["forum","path"],"params":[{"name":"slug","type":"string","required":true,"description":"Discussion thread slug — the trailing segment of a producthunt.com/p/<forum>/<slug> URL.","on_invalid":"reject","example":"cursor-or-claude-code"},{"name":"forum","type":"string","required":false,"description":"Discussion forum segment (the part before the thread slug in /p/<forum>/<slug>). Needed unless you pass the full thread path — the thread is looked up inside its forum.","on_invalid":"ignore","example":"cursor"},{"name":"path","type":"string","required":false,"description":"Full collection path (e.g. /@user/collections/<slug>). Alternative to username + collection_slug.","on_invalid":"ignore","example":"/@rrhoover/collections/my-tools"}],"returns":"thread{}, comments[] (nested replies[], votes_count, user, created_at), comments_count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"notion"}}]},{"name":"prom-ua","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Prom.ua API — search Ukraine's multi-seller marketplace and read full products: price, old price, wholesale tiers, availability, seller with rating, city and phone, delivery and payment options, attributes, product and seller reviews, seller catalogues and categories","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/prom-ua/v1","spec_available":true,"actions":[{"name":"search","description":"Search prom.ua by keyword (Ukrainian, Russian or Latin) and/or category with the site's own filters: price range, in stock, discounted, wholesale, pay in parts, Prom-payment, free Smart delivery, delivery method, seller city/region, 4+ star reviews, condition, brand, one seller, and 4 sort orders. Each row is one seller's offer: price as printed, old price, wholesale tiers, availability, rating and review count, the seller (name, city, positive-review % and count) and the model group the same item belongs to across sellers. Needs `query` or `category`.","required_params":[],"optional_params":["query","category","seller_id","min_price","max_price","in_stock","discounted","wholesale","pay_in_parts","prom_payment","free_delivery_smart","delivery","region","rating_4_plus","with_review_media","condition","brand_id","sort","page_size","offset","page","lang"],"params":[{"name":"query","type":"string","required":false,"description":"Search words, e.g. 'iphone 15', 'кавоварка', 'шини 205/55 r16'. Needs query OR category.","on_invalid":"reject","example":"кавоварка рожкова","aliases":["q","keyword","keywords","search_term","search"]},{"name":"category","type":"string","required":false,"description":"Prom.ua category id (`category_id` of any row, or the `categories` action). With query it narrows the search; alone it browses the category. An id prom.ua does not know is rejected.","on_invalid":"reject","example":"5090301","aliases":["category_id"]},{"name":"seller_id","type":"string","required":false,"description":"Only this seller's offers (needs `query`; to list a seller's whole catalogue use the `seller` action).","on_invalid":"reject","example":"3805778","aliases":["company_id"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in UAH (applies to the price the page prints).","on_invalid":"reject","example":2000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in UAH.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_max"]},{"name":"in_stock","type":"boolean","required":false,"description":"Only items marked 'В наявності' (in stock).","on_invalid":"reject","example":true,"aliases":["available"]},{"name":"discounted","type":"boolean","required":false,"description":"Only items with a discount (old price struck through).","on_invalid":"reject","example":true,"aliases":["on_sale"]},{"name":"wholesale","type":"boolean","required":false,"description":"Only items that have wholesale (опт) price tiers.","on_invalid":"reject","example":true},{"name":"pay_in_parts","type":"boolean","required":false,"description":"Only items payable in instalments ('Оплатити частинами').","on_invalid":"reject","example":true},{"name":"prom_payment","type":"boolean","required":false,"description":"Only items with Prom-payment (paid on prom.ua with buyer protection).","on_invalid":"reject","example":true},{"name":"free_delivery_smart","type":"boolean","required":false,"description":"Only items with free delivery for Smart subscribers.","on_invalid":"reject","example":true},{"name":"delivery","type":"enum","required":false,"description":"Only sellers offering this delivery method.","on_invalid":"reject","allowed_values":[{"value":"nova_poshta","label":"Нова Пошта"},{"value":"ukrposhta","label":"Укрпошта"},{"value":"rozetka_delivery","label":"Rozetka shops"},{"value":"pickup","label":"Самовивіз (pickup)"},{"value":"meest_express","label":"Meest ПОШТА"},{"value":"delivery_auto","label":"Delivery"}],"example":"nova_poshta"},{"name":"region","type":"string","required":false,"description":"Only items the seller ships from this city/region (product `ships_from`, which can differ from the seller's own city): prom.ua's region slug (kyiv, lviv, odessa, kharkov, dp = Dnipro, ...). An unknown slug is rejected.","on_invalid":"reject","example":"kyiv","aliases":["city","region_domain"]},{"name":"rating_4_plus","type":"boolean","required":false,"description":"Only items rated 4 stars or more. prom.ua applies it to the model rating (all sellers' reviews of the same item, `model.rating`), not only this offer's own.","on_invalid":"reject","example":true},{"name":"with_review_media","type":"boolean","required":false,"description":"Only items with photo/video buyer reviews.","on_invalid":"reject","example":true},{"name":"condition","type":"enum","required":false,"description":"Item condition (prom.ua's 'Стан' attribute).","on_invalid":"reject","allowed_values":[{"value":"new","label":"Новий"},{"value":"used","label":"Вживаний"},{"value":"refurbished","label":"Відновлений"},{"value":"markdown","label":"Уцінка"}],"example":"new"},{"name":"brand_id","type":"string","required":false,"description":"Brand id (`brand_id` in rows, e.g. 80130 = IPhone as sellers spell it).","on_invalid":"reject","example":"80130","aliases":["manufacturer_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order (prom.ua's own sort bar). With a price sort prom.ua puts the strong matches first and the looser ones after them (`weak_match: true`).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"За рейтингом"},{"value":"popularity","label":"За популярністю"},{"value":"price_asc","label":"Дешевше"},{"value":"price_desc","label":"Дорожче"}],"default":"relevance"},{"name":"page_size","type":"integer","required":false,"description":"Rows per call (default 48, at most 60).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":60},{"name":"offset","type":"integer","required":false,"description":"Rows to skip. prom.ua serves at most ~9 000 results per query; offsets above 8900 are refused.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":8900},{"name":"page","type":"integer","required":false,"description":"Convenience: offset = (page-1) x page_size. Ignored when offset is given.","on_invalid":"reject","example":1,"minimum":1,"maximum":200},{"name":"lang","type":"enum","required":false,"description":"Language of names, attribute labels and availability text: Ukrainian (default) or Russian. Prices and ids do not change.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"Українська"},{"value":"ru","label":"Русский"}],"default":"uk","aliases":["language"]}],"returns":"results[]{product_id, name, url, image, sku, price (the price printed in bold), price_old (struck through), discount_pct, price_is_from ('від'), price_on_request, price_note, currency (UAH), price_usd_source, unit, wholesale_prices[]{price, min_quantity}, selling_type (retail / wholesale / universal), discount_ends, pay_in_parts_monthly, availability (avail / order / not_avail / waiting), availability_text, in_stock, ready_to_ship, stock_ending, available_from, rating, review_count, brand, brand_id, category_id, category_ids[], seller{seller_id, name, url, city, country, positive_pct, review_count, top_seller, return_days, non_returnable}, model{model_id, rating, review_count, offers_count, sellers_count, min_price, max_price, offer_ids[]} (same item from other sellers; rating = reviews of the model across sellers), prosale, weak_match, is_adult} + total, total_is_approximate, offset, next_offset, has_more, corrected_query, query_expansion (when prom.ua widened the words), category, region","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"кавоварка рожкова","in_stock":true}},{"name":"product","description":"Full prom.ua product by product_id or URL: name, description, images, video, brand, GTIN/MPN when the seller filled them, price as printed, old price, discount, 'from' price, wholesale tiers with minimum quantities, minimum order, instalment price, availability, rating and review count, every attribute, category path, warranty, the seller (name, city, phone, website, years on prom.ua, positive-review %, orders delivered, return terms), delivery options with their prices and payment options, the model group across sellers (offer count, seller count, min/max price) and the item's variations.","required_params":[],"optional_params":["product_id","url","lang"],"params":[{"name":"product_id","type":"string","required":false,"description":"Prom.ua product id: the number after `/p` in a product URL (`prom.ua/ua/p3026527730-....html`), returned as `product_id` in every search row. Provide product_id OR url.","on_invalid":"reject","example":"3026527730","aliases":["id","productId","item_id"]},{"name":"url","type":"string","required":false,"description":"A prom.ua product URL; alternative to product_id.","on_invalid":"reject","example":"https://prom.ua/ua/p3026527730-smartfon-apple-iphone.html","aliases":["product_url"]},{"name":"lang","type":"enum","required":false,"description":"Language of names, attribute labels and availability text: Ukrainian (default) or Russian. Prices and ids do not change.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"Українська"},{"value":"ru","label":"Русский"}],"default":"uk","aliases":["language"]}],"returns":"item{product_id, name, url, sku, gtin, mpn, brand, brand_id, price, price_old, discount_pct, price_is_from, price_on_request, price_note, currency, price_usd_source, unit, wholesale_prices[], selling_type, discount_ends, pay_in_parts_monthly, min_order_quantity, min_order_sum, availability, availability_text, in_stock, ready_to_ship, stock_ending, available_from, listed, rating, review_count, orders_count, description, images[], videos[], category{category_id, name, url}, category_ids[], breadcrumbs[]{name, url}, attributes[]{group, name, value, attribute_id}, warranty_months, seller{seller_id, name, url, city, phone, website, years_on_prom, is_operating, last_active, orders_delivered, logo, positive_pct, review_count, top_seller, return_days, non_returnable}, ships_from[], delivery_options[]{type, name, note, via_prom_shipping, free_via_prom_shipping}, payment_options[]{type, name, note}, model{model_id, name, rating, review_count, offers_count, sellers_count, min_price, max_price}, variations[]{product_id, url, attributes{}, availability, ready_to_ship}, is_adult}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://prom.ua/ua/p3026527730-smartfon-apple-iphone.html"}},{"name":"reviews","description":"Buyer reviews of a prom.ua product: star rating, title, text, pros, cons, date, author as prom.ua shows it, verified-purchase flag, likes, photos, video, the seller it was bought from and the comment thread (seller replies flagged), plus the product's total review count and star distribution.","required_params":["product_id"],"optional_params":["sort","sentiment","with_media","verified_only","page","page_size","lang"],"params":[{"name":"product_id","type":"string","required":true,"description":"Prom.ua product id.","on_invalid":"reject","example":"2011334336","aliases":["id","productId","item_id"]},{"name":"sort","type":"enum","required":false,"description":"Review order (prom.ua's own options).","on_invalid":"reject","allowed_values":[{"value":"most_useful","label":"Найкорисніші"},{"value":"newest","label":"Новіші"},{"value":"highest_rating","label":"З високою оцінкою"},{"value":"lowest_rating","label":"З низькою оцінкою"}],"default":"most_useful"},{"name":"sentiment","type":"enum","required":false,"description":"prom.ua's own split: positive = 4-5 stars, negative = 1-3 stars (measured: 9 positive + 1 three-star negative on a 10-review item).","on_invalid":"reject","allowed_values":[{"value":"positive","label":"Позитивні"},{"value":"negative","label":"Негативні"}],"example":"negative"},{"name":"with_media","type":"boolean","required":false,"description":"Only reviews with photos or video.","on_invalid":"reject","example":true},{"name":"verified_only","type":"boolean","required":false,"description":"Only reviews from buyers who purchased on prom.ua.","on_invalid":"reject","example":true},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (at most 50).","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50},{"name":"lang","type":"enum","required":false,"description":"Language of names, attribute labels and availability text: Ukrainian (default) or Russian. Prices and ids do not change.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"Українська"},{"value":"ru","label":"Русский"}],"default":"uk","aliases":["language"]}],"returns":"reviews[]{review_id, product_id, rating, title, text, pros, cons, date, author, verified_purchase, purchase_note, likes, dislikes, photos[], video, seller_id, seller_name, comments[]{date, author, from_seller, text}, url} + total, stars{1..5}, product_name, page, page_size, has_more, sort, sentiment","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"2011334336"}},{"name":"seller","description":"A prom.ua seller (shop) profile and its product catalogue: name, phone, website, city, years on prom.ua, last activity, orders delivered, positive-review %, review counts and star distribution, the review tags buyers chose (fast dispatch, polite seller...), legal name and registry code when the seller published them, opening hours, return policy, and one page of its products with the same filters and rows as search.","required_params":["seller_id"],"optional_params":["min_price","max_price","in_stock","discounted","wholesale","pay_in_parts","prom_payment","free_delivery_smart","delivery","rating_4_plus","with_review_media","condition","brand_id","sort","page_size","offset","page","lang"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Prom.ua seller id (`seller.seller_id` in any row) or a seller URL (`prom.ua/ua/c3805778-boo-svit.html`).","on_invalid":"reject","example":"3805778","aliases":["company_id","shop_id","url"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in UAH (applies to the price the page prints).","on_invalid":"reject","example":2000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in UAH.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_max"]},{"name":"in_stock","type":"boolean","required":false,"description":"Only items marked 'В наявності' (in stock).","on_invalid":"reject","example":true,"aliases":["available"]},{"name":"discounted","type":"boolean","required":false,"description":"Only items with a discount (old price struck through).","on_invalid":"reject","example":true,"aliases":["on_sale"]},{"name":"wholesale","type":"boolean","required":false,"description":"Only items that have wholesale (опт) price tiers.","on_invalid":"reject","example":true},{"name":"pay_in_parts","type":"boolean","required":false,"description":"Only items payable in instalments ('Оплатити частинами').","on_invalid":"reject","example":true},{"name":"prom_payment","type":"boolean","required":false,"description":"Only items with Prom-payment (paid on prom.ua with buyer protection).","on_invalid":"reject","example":true},{"name":"free_delivery_smart","type":"boolean","required":false,"description":"Only items with free delivery for Smart subscribers.","on_invalid":"reject","example":true},{"name":"delivery","type":"enum","required":false,"description":"Only sellers offering this delivery method.","on_invalid":"reject","allowed_values":[{"value":"nova_poshta","label":"Нова Пошта"},{"value":"ukrposhta","label":"Укрпошта"},{"value":"rozetka_delivery","label":"Rozetka shops"},{"value":"pickup","label":"Самовивіз (pickup)"},{"value":"meest_express","label":"Meest ПОШТА"},{"value":"delivery_auto","label":"Delivery"}],"example":"nova_poshta"},{"name":"rating_4_plus","type":"boolean","required":false,"description":"Only items rated 4 stars or more. prom.ua applies it to the model rating (all sellers' reviews of the same item, `model.rating`), not only this offer's own.","on_invalid":"reject","example":true},{"name":"with_review_media","type":"boolean","required":false,"description":"Only items with photo/video buyer reviews.","on_invalid":"reject","example":true},{"name":"condition","type":"enum","required":false,"description":"Item condition (prom.ua's 'Стан' attribute).","on_invalid":"reject","allowed_values":[{"value":"new","label":"Новий"},{"value":"used","label":"Вживаний"},{"value":"refurbished","label":"Відновлений"},{"value":"markdown","label":"Уцінка"}],"example":"new"},{"name":"brand_id","type":"string","required":false,"description":"Brand id (`brand_id` in rows, e.g. 80130 = IPhone as sellers spell it).","on_invalid":"reject","example":"80130","aliases":["manufacturer_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order (prom.ua's own sort bar). With a price sort prom.ua puts the strong matches first and the looser ones after them (`weak_match: true`).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"За рейтингом"},{"value":"popularity","label":"За популярністю"},{"value":"price_asc","label":"Дешевше"},{"value":"price_desc","label":"Дорожче"}],"default":"relevance"},{"name":"page_size","type":"integer","required":false,"description":"Rows per call (default 48, at most 60).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":60},{"name":"offset","type":"integer","required":false,"description":"Rows to skip. prom.ua serves at most ~9 000 results per query; offsets above 8900 are refused.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":8900},{"name":"page","type":"integer","required":false,"description":"Convenience: offset = (page-1) x page_size. Ignored when offset is given.","on_invalid":"reject","example":1,"minimum":1,"maximum":200},{"name":"lang","type":"enum","required":false,"description":"Language of names, attribute labels and availability text: Ukrainian (default) or Russian. Prices and ids do not change.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"Українська"},{"value":"ru","label":"Русский"}],"default":"uk","aliases":["language"]}],"returns":"seller{seller_id, name, url, phone, website, logo, city, years_on_prom, registered_on_prom, is_operating, last_active, orders_delivered, positive_pct, review_count, reviews_in_rating, review_count_incl_product_reviews, rating_counters{}, review_tags[]{tag, type, count, percent}, legal{legal_name, edrpou_or_code, registration_number, legal_address}, schedule[], description, warranty_info, top_seller, return_days, non_returnable, reviews_url} + results[]{product_id, name, url, image, sku, price (the price printed in bold), price_old (struck through), discount_pct, price_is_from ('від'), price_on_request, price_note, currency (UAH), price_usd_source, unit, wholesale_prices[]{price, min_quantity}, selling_type (retail / wholesale / universal), discount_ends, pay_in_parts_monthly, availability (avail / order / not_avail / waiting), availability_text, in_stock, ready_to_ship, stock_ending, available_from, rating, review_count, brand, brand_id, category_id, category_ids[], seller{seller_id, name, url, city, country, positive_pct, review_count, top_seller, return_days, non_returnable}, model{model_id, rating, review_count, offers_count, sellers_count, min_price, max_price, offer_ids[]} (same item from other sellers; rating = reviews of the model across sellers), prosale, weak_match, is_adult} + total, offset, next_offset, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"2916770"}},{"name":"seller_reviews","description":"Reviews of a prom.ua seller (shop): rating, text, date, author, the tags the buyer ticked, the products ordered, photos, the seller's public response and comments.","required_params":["seller_id"],"optional_params":["sort","sentiment","with_text_only","page","page_size","lang"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Prom.ua seller id.","on_invalid":"reject","example":"3805778","aliases":["company_id","shop_id"]},{"name":"sort","type":"enum","required":false,"description":"Review order (prom.ua's own options).","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Спочатку нові"},{"value":"highest_rating","label":"Спочатку позитивні"},{"value":"lowest_rating","label":"Спочатку негативні"},{"value":"most_liked","label":"За кількістю вподобань"},{"value":"most_commented","label":"За кількістю коментарів"}],"default":"newest"},{"name":"sentiment","type":"enum","required":false,"description":"Only positive or only negative reviews (prom.ua's own split).","on_invalid":"reject","allowed_values":[{"value":"positive","label":"Позитивні"},{"value":"negative","label":"Негативні"}],"example":"negative"},{"name":"with_text_only","type":"boolean","required":false,"description":"Only reviews with written text.","on_invalid":"reject","example":true},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (at most 50).","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50},{"name":"lang","type":"enum","required":false,"description":"Language of names, attribute labels and availability text: Ukrainian (default) or Russian. Prices and ids do not change.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"Українська"},{"value":"ru","label":"Русский"}],"default":"uk","aliases":["language"]}],"returns":"reviews[]{review_id, rating, text, date, author, tags[], ordered_products[]{product_id, name}, photos[], seller_response{text, date}, comments[], likes, dislikes} + seller_id, seller_name, positive_pct, review_count, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"2916770"}},{"name":"categories","description":"Prom.ua category tree: without category_id the top-level departments; with it that category's name, alias, URL, its path from the root and its direct sub-categories. Ids work as `category` in search.","required_params":[],"optional_params":["category_id","lang"],"params":[{"name":"category_id","type":"string","required":false,"description":"Category id; omit for the top-level departments.","on_invalid":"reject","example":"50902","aliases":["category","id"]},{"name":"lang","type":"enum","required":false,"description":"Language of names, attribute labels and availability text: Ukrainian (default) or Russian. Prices and ids do not change.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"Українська"},{"value":"ru","label":"Русский"}],"default":"uk","aliases":["language"]}],"returns":"category{category_id, name, alias, url, is_leaf, path[]{category_id, name}} (with category_id) + categories[]{category_id, name, alias, is_leaf}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"50902"}}]},{"name":"promodescuentos","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Promodescuentos API — deals from www.promodescuentos.com (Mexico) as JSON: search the community's deals by keyword with sort (relevance, newest, hottest, price, discussed), temperature, price, date and category filters; the trending, new, hottest and discussion feeds; every deal in full (price, comparison price, discount, merchant, voucher code, shipping, temperature, comments, expiry, description); the comments of a deal; and the category list. Prices in MXN. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/promodescuentos/v1","spec_available":true,"actions":[{"name":"search","description":"Search Promodescuentos deals by keyword. Sort by relevance, newest, hottest, price or latest comment; filter by temperature, price, posting date, category, expired and local deals. 30 deals a page.","required_params":["query"],"optional_params":["sort","time_frame","min_temperature","max_temperature","min_price","max_price","group_id","hide_expired","hide_local","page"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search Promodescuentos deal titles and voucher codes for.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default for a search)"},{"value":"new","label":"Newest first"},{"value":"hot","label":"Hottest first (highest temperature)"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"discussed","label":"Most recently commented"}],"default":"relevance","example":"hot","aliases":["sort_by","order"]},{"name":"time_frame","type":"enum","required":false,"description":"How far back to search by posting date. The site searches the last 365 days unless told otherwise.","on_invalid":"reject","allowed_values":[{"value":"last_year","label":"Posted in the last 365 days (the site's default)"},{"value":"last_30_days","label":"Last 30 days"},{"value":"last_7_days","label":"Last 7 days"},{"value":"all_time","label":"No date limit"}],"default":"last_year","example":"last_30_days","aliases":["period","posted_within"]},{"name":"min_temperature","type":"integer","required":false,"description":"Only deals at or above this temperature (degrees; the site's own steps are 20, 100 and 500, any whole number works).","on_invalid":"reject","example":100,"minimum":-100000,"maximum":100000,"aliases":["temperature_from","min_temp"]},{"name":"max_temperature","type":"integer","required":false,"description":"Only deals at or below this temperature.","on_invalid":"reject","example":600,"minimum":-100000,"maximum":100000,"aliases":["temperature_to","max_temp"]},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price, in MXN.","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min","price_from"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price, in MXN.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max","price_to"]},{"name":"group_id","type":"string","required":false,"description":"Only one category: a categories row's group_id (or a row's group.group_id).","on_invalid":"reject","example":"14","value_pattern":"\\d{1,12}","aliases":["category_id"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked as expired.","on_invalid":"reject","default":false,"example":true},{"name":"hide_local","type":"boolean","required":false,"description":"Leave out in-store-only (local) deals.","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: total, page, last_page, has_more, filters_applied, suggestions_dropped (a search with no result: the site's filler deals are not returned).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","sort":"new"}},{"name":"deals","description":"The Promodescuentos feeds: trending (heating up now), new (every new post), hottest (the hottest of the period) and community discussions. 30 a page.","required_params":[],"optional_params":["list","page"],"params":[{"name":"list","type":"enum","required":false,"description":"Which Promodescuentos feed.","on_invalid":"reject","allowed_values":[{"value":"trending","label":"What is heating up now (the site's 'hot' tab)"},{"value":"new","label":"Newest posts first"},{"value":"hottest","label":"The hottest deals of the current period"},{"value":"discussions","label":"Community discussion threads"}],"default":"trending","example":"new","aliases":["feed","tab"]},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: list, total, total_capped (the feeds report 10000 = a cap), page, last_page, has_more, pinned_rows.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"list":"new"}},{"name":"category_deals","description":"The deals of one Promodescuentos category, hottest or newest first. The category page's own view hides expired deals and starts at a temperature floor (100° or 180° depending on the site); hide_expired / min_temperature change that and meta.applied_view shows what the page applied.","required_params":["group_slug"],"optional_params":["sort","min_temperature","hide_expired","page"],"params":[{"name":"group_slug","type":"string","required":true,"description":"Category slug: a categories row's group_slug (or a row's group.group_slug), e.g. tecnologia, videojuegos, viajes.","on_invalid":"reject","example":"tecnologia","value_pattern":"[a-z0-9][a-z0-9\\-]{0,100}","aliases":["category","group"]},{"name":"sort","type":"enum","required":false,"description":"Order of the category's deals.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hottest first (the category page's default)"},{"value":"new","label":"Newest first"},{"value":"discussed","label":"Most recently commented"}],"default":"hot","example":"new","aliases":["sort_by"]},{"name":"min_temperature","type":"integer","required":false,"description":"Temperature floor. The category page has its own default floor (100° on most sites); meta.applied_view shows what the page applied.","on_invalid":"reject","example":0,"minimum":-100000,"maximum":100000,"aliases":["temperature_from"]},{"name":"hide_expired","type":"boolean","required":false,"description":"The category page hides expired deals by default; false shows them.","on_invalid":"reject","example":false},{"name":"page","type":"integer","required":false,"description":"Page number (30 deals a page); meta.has_more and meta.last_page say how far it goes.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: deal_id, type (Deal / Voucher / Discussion), title, url, share_url, status, is_expired, is_hot, is_pinned, is_local, temperature (degrees, the community vote score), temperature_level, price (null when the list shows no price), price_is_zero_or_missing, next_best_price (the comparison price the poster gave), discount_pct (computed from the two), source_discount_pct, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant{merchant_id, name, url_name}, link_host, group{group_id, name, group_slug}, comment_count, posted_by{user_id, username}, published_at, updated_at, starts_at, expires_at (ISO 8601 UTC), image_url. meta: group_slug, sort, applied_view{sort, min_temperature, hide_expired}, total, total_capped, page, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group_slug":"tecnologia"}},{"name":"deal","description":"One deal in full by its id: price (0 = free, null = no price), the price as the site prints it, comparison price and discount, merchant, voucher code, shipping, temperature, status and expiry, every category it is in, the poster, the outbound link, images and the full description.","required_params":["deal_id"],"optional_params":[],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (1160620); a www.promodescuentos.com deal URL also works.","on_invalid":"reject","example":"1160620","aliases":["id","thread_id","url"]}],"returns":"deal{deal_id, type, title, url, share_url, visit_url, status, is_expired, is_hot, is_new, is_local, is_exclusive, nsfw, temperature, temperature_level, price, is_free, price_display, next_best_price, discount_pct, source_discount_pct, price_discount, discount_type, currency, shipping_free, shipping_price, voucher_code, voucher_code_hidden, merchant, link_host, group, groups[], comment_count, posted_by, published_at, created_at, updated_at, starts_at, expires_at, dispatched_from{name, country}, is_national, regions, locations, image_url, images[], description, description_html}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"1160620"}},{"name":"comments","description":"The comments of one deal, in the site's own order (most helpful first), with author, time, reactions and reply links.","required_params":["deal_id"],"optional_params":["limit","page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"A row's deal_id, as is (1160620); a www.promodescuentos.com deal URL also works.","on_invalid":"reject","example":"1160620","aliases":["id","thread_id","url"]},{"name":"limit","type":"integer","required":false,"description":"Comments per page (1-50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Comment page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"rows[]: comment_id, deal_id, url, text, html, user{user_id, username}, created_at, reactions{like, funny, helpful…}, is_reply, main_comment_id, parent_comment_id, is_pinned, popular, was_edited, status. meta: total, page, last_page, has_more, order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_id":"1160620"}},{"name":"categories","description":"The Promodescuentos category list: every main category with its id, slug, deal count and its community-favourite subcategories. group_id goes to search, group_slug to category_deals.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: group_id, name, group_slug, url, deal_count, subcategories[{group_id, name, group_slug}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"property24","category":{"id":"other","title":"Other"},"title":"Property24 — South Africa property listings (for sale & to rent)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/property24/v1","spec_available":true,"actions":[{"name":"search","description":"Search Property24 listings in any South African province, city, suburb or estate — for sale or to rent — with the portal's own filters. Give a place name in `location` (it is resolved against Property24's own area index) or an exact `area_id` from the `location` action. Returns 22 listings per page with numeric ZAR price, bedrooms, bathrooms, parking, floor and erf size, suburb, street address, agency, photo and the listing URL. Promoted (paid-placement) rows are returned too and are flagged `promoted: true`, so they can be kept or filtered out — they are never silently mixed in.","required_params":["location"],"optional_params":["area_id","area_type","listing_type","property_type","price_min","price_max","bedrooms_min","bathrooms_min","parking_min","size_min","size_max","sort","page","on_show","on_auction","repossessed","retirement"],"params":[{"name":"location","type":"string","required":true,"description":"South African province, city, suburb or estate name, e.g. 'Sea Point', 'Sandton', 'Umhlanga', 'Western Cape'. Resolved against Property24's own area index; if nothing matches the call succeeds with zero rows and `matched: false` rather than guessing a different place. Optional only when `area_id` is given.","on_invalid":"reject","example":"Sea Point","aliases":["q","area","suburb"]},{"name":"area_id","type":"integer","required":false,"description":"Exact Property24 area id from the `location` action. Skips name resolution. Must be sent together with `area_type`, because the same number means a different place in each area level.","on_invalid":"reject","example":11021,"minimum":1},{"name":"area_type","type":"enum","required":false,"description":"Which area level `area_id` belongs to. Required whenever `area_id` is used.","on_invalid":"reject","allowed_values":[{"value":"province","label":"Province"},{"value":"city","label":"City"},{"value":"suburb","label":"Suburb"},{"value":"estate","label":"Estate / complex"}],"default":"suburb","example":"suburb"},{"name":"listing_type","type":"enum","required":false,"description":"Sale listings or rental listings.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"To rent"}],"default":"sale","example":"sale","aliases":["deal","type"]},{"name":"property_type","type":"enum","required":false,"description":"Restrict to one property type. Omit for every type. Bedroom and bathroom filters do not apply to vacant_land, farm, commercial or industrial — Property24 publishes no bedroom count for those.","on_invalid":"reject","allowed_values":[{"value":"house","label":"House"},{"value":"apartment","label":"Apartment / Flat"},{"value":"townhouse","label":"Townhouse"},{"value":"vacant_land","label":"Vacant Land / Plot"},{"value":"farm","label":"Farm"},{"value":"commercial","label":"Commercial Property"},{"value":"industrial","label":"Industrial Property"}],"example":"apartment"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in ZAR (rand). For rentals this is the rent, in the period Property24 publishes it.","on_invalid":"reject","example":1000000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in ZAR (rand).","on_invalid":"reject","example":3000000,"minimum":0,"aliases":["max_price"]},{"name":"bedrooms_min","type":"integer","required":false,"description":"At least this many bedrooms (Property24's own '3+' filter).","on_invalid":"reject","example":3,"minimum":1,"maximum":5,"aliases":["beds","bedrooms"]},{"name":"bathrooms_min","type":"integer","required":false,"description":"At least this many bathrooms.","on_invalid":"reject","example":2,"minimum":1,"maximum":5,"aliases":["baths","bathrooms"]},{"name":"parking_min","type":"integer","required":false,"description":"At least this many parking spaces / garages.","on_invalid":"reject","example":1,"minimum":1,"maximum":5},{"name":"size_min","type":"integer","required":false,"description":"Smallest size in m², using Property24's own size filter (floor size for built property, erf size for land).","on_invalid":"reject","example":100,"minimum":0},{"name":"size_max","type":"integer","required":false,"description":"Largest size in m².","on_invalid":"reject","example":300,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order. 'default' is Property24's own ranking, which puts paid placements first.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Property24 default"},{"value":"price_low","label":"Price — low to high"},{"value":"price_high","label":"Price — high to low"},{"value":"newest","label":"Most recent"},{"value":"type","label":"Property type"},{"value":"size","label":"Size"}],"default":"default","example":"price_low"},{"name":"page","type":"integer","required":false,"description":"1-based result page; 22 listings per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"on_show","type":"boolean","required":false,"description":"Only listings with a show day scheduled.","on_invalid":"reject","default":false,"example":false},{"name":"on_auction","type":"boolean","required":false,"description":"Only listings going to auction.","on_invalid":"reject","default":false,"example":false},{"name":"repossessed","type":"boolean","required":false,"description":"Only bank-repossessed listings.","on_invalid":"reject","default":false,"example":false},{"name":"retirement","type":"boolean","required":false,"description":"Only retirement-village property.","on_invalid":"reject","default":false,"example":false}],"returns":"{area:{area_id,name,parent_name,area_type}, matched, page, page_size, total_pages, listings:[{listing_number,url,title,price:{amount,currency,formatted,source_is_machine_value},bedrooms,bathrooms,parking_spaces,floor_size_m2,erf_size_m2,gross_lettable_area_m2,suburb,address,excerpt,primary_photo_url,agency:{name,profile_url},agent:{name},badges,promoted,boosted}]}. `price.formatted` is Property24's own rendered string, kept next to the parsed number so the two can be compared. A value Property24 does not publish is null.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"Sea Point"}},{"name":"detail","description":"Full record for one Property24 listing, by listing URL or by the listing number a search row returns. Adds what the result tile does not carry: the complete description, the feature list, levies, rates and taxes, price per m², listing date, street address, every photo, map coordinates and the agency. The agent's personal name and phone numbers are returned only with `include_pii`.","required_params":["listing"],"optional_params":[],"params":[{"name":"listing","type":"string","required":true,"description":"A Property24 listing URL (https://www.property24.com/for-sale/…/117658301) or the bare listing number (117658301) from a search row.","on_invalid":"reject","example":"117658301","value_pattern":"(?:https?://[^\\s]+|\\d{5,12})","aliases":["url","listing_number","id"]}],"returns":"{listing_number,url,title,listing_type,price:{amount,currency,formatted},address,property_type,listing_date,bedrooms,bathrooms,parking_spaces,erf_size_m2,floor_size_m2,price_per_m2,levies,rates_and_taxes,pets_allowed,description,features[],photos[],photo_count,latitude,longitude,agency:{name,profile_url},agent:{name,profile_url,phone_numbers},overview{}}. `overview` is Property24's own key/value table, verbatim, for anything not promoted to a named field.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"listing":"117658301"}},{"name":"location","description":"Resolve free text to Property24's own area ids, so a search can be pinned to an exact place instead of a name. Returns the matching provinces, cities, suburbs and estates with their id, level and ready-made for-sale and to-rent search URLs. Property24's metro sub-regions (e.g. 'Pretoria East') are returned with `searchable: false` — they have an id but no working listing route, and are reported rather than silently pointed at another place.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Place name to resolve, e.g. 'Umhlanga', 'Sandton', 'Stellenbosch'.","on_invalid":"reject","example":"Umhlanga","aliases":["q","location","text"]},{"name":"limit","type":"integer","required":false,"description":"Maximum areas to return.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":25}],"returns":"{query, matched, areas:[{area_id,name,parent_name,area_type,searchable,for_sale_url,to_rent_url}]}. `matched:false` with an empty list means Property24's area index has nothing for that text — the endpoint never falls back to an unrelated place.","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Umhlanga"}}]},{"name":"proxibid","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Proxibid API — live US online auctions from proxibid.com: heavy construction and farm equipment, commercial trucks, vehicles, real estate, coins, art, collectibles and estates from hundreds of auction houses. Search open lots and the closed-lot archive, find auctions and auction houses, read an auction's catalogue, and read any lot in full: current bid, opening and minimum bid, the hammer price after the sale (floor or internet), reserve status, seconds left, internet buyer's premium, location, terms, description and photos. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/proxibid/v1","spec_available":true,"actions":[{"name":"search","description":"Search OPEN and upcoming lots by keyword and/or category, with auction type, state, auction house and order. Give query or category (one of them is required; state and seller_name only narrow). Returns the source's own match count (capped at 10,000 by the source, flagged) and facet counts for the next filter.","required_params":[],"optional_params":["query","category","auction_type","state","seller_name","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Keywords, as typed into the site's search box. Matches title and description. Measured: 'excavator' 2,721 open lots, 'tractor' 3,490.","on_invalid":"reject","example":"excavator","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"Category path as the source writes it: a top-level code (HEAVYEQUIPMENT, FARMMACHINERY, COMMERCIALTRUCK, VEHICLE, ARTCOLLECT, ESTATE …) or a sub-category path 'HEAVYEQUIPMENT/EXCAVATOR'. Every response lists the valid next-level paths with their counts in data.facets.categories. A sub-category code on its own ('EXCAVATOR') matches nothing — use the full path. Measured: 'tractor' 3,490 -> 1,760 with FARMMACHINERY (25/25 rows in that category).","on_invalid":"reject","example":"HEAVYEQUIPMENT","value_pattern":"[A-Z0-9]{2,40}(/[A-Z0-9]{2,40}){0,3}","aliases":["category_path"]},{"name":"auction_type","type":"enum","required":false,"description":"Live webcast sales or timed online sales. Measured: 'tractor' 2,898 live + 592 timed = 3,490.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Live webcast sales (lots are hammered during the sale)"},{"value":"timed","label":"Timed online sales (each lot closes at a set time)"}],"example":"timed","aliases":["type","format"]},{"name":"state","type":"string","required":false,"description":"US state or Canadian province, two-letter code (where the sale is held). Needs query or category. Measured: 'tractor' 3,490 -> PA 441, TX 415.","on_invalid":"reject","example":"PA","value_pattern":"[A-Za-z]{2}","aliases":["state_code"]},{"name":"seller_name","type":"string","required":false,"description":"Auction house name, EXACTLY as the source writes it (seller.name of a row, or data.facets.sellers). The match is exact and case-sensitive: 'DeMott' or a lower-cased name return 0. Needs query or category. Measured: 'tractor' 3,490 -> 73.","on_invalid":"reject","example":"DeMott Auction Company Inc","aliases":["auction_house","seller"]},{"name":"sort","type":"enum","required":false,"description":"Result order, the source's own orders only (an unknown order is refused by the source, so it is refused here first).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Source relevance (default)"},{"value":"ending_soon","label":"Soonest closing / sale time first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"}],"default":"relevance","example":"ending_soon","aliases":["sort_by"]},{"name":"page","type":"integer","required":false,"description":"Result page. The source serves at most the first 10,000 matches of any query, so page × page_size cannot pass 10,000 (refused before any request).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (default 25).","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"data.lots[]: lot_id, title, url, description, current_bid, opening_bid, price_is (current_bid|opening_bid|none), bid_count, quantity, currency, category, categories[], image_url, country, sale_starts_at, ends_at (timed lots; null for live webcast lots), status, internal_status, seller{seller_id, name}, auction{auction_id, type, status, starts_at, timezone, url}. data.total, total_capped, total_from_facets, pagination, facets.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"excavator"}},{"name":"sold","description":"Search the CLOSED-lot archive (back to 2010) by keyword and/or category with the same filters. Each row carries the last ONLINE bid; on live webcast sales that is not the hammer price (measured different on 19/19 live lots, equal on 6/6 timed lots) — read the hammer price with lot_status or detail.","required_params":[],"optional_params":["query","category","auction_type","state","seller_name","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Keywords, as typed into the site's search box. Matches title and description. Measured: 'excavator' 2,721 open lots, 'tractor' 3,490.","on_invalid":"reject","example":"excavator","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"Category path as the source writes it: a top-level code (HEAVYEQUIPMENT, FARMMACHINERY, COMMERCIALTRUCK, VEHICLE, ARTCOLLECT, ESTATE …) or a sub-category path 'HEAVYEQUIPMENT/EXCAVATOR'. Every response lists the valid next-level paths with their counts in data.facets.categories. A sub-category code on its own ('EXCAVATOR') matches nothing — use the full path. Measured: 'tractor' 3,490 -> 1,760 with FARMMACHINERY (25/25 rows in that category).","on_invalid":"reject","example":"HEAVYEQUIPMENT","value_pattern":"[A-Z0-9]{2,40}(/[A-Z0-9]{2,40}){0,3}","aliases":["category_path"]},{"name":"auction_type","type":"enum","required":false,"description":"Live webcast sales or timed online sales. Measured: 'tractor' 2,898 live + 592 timed = 3,490.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Live webcast sales (lots are hammered during the sale)"},{"value":"timed","label":"Timed online sales (each lot closes at a set time)"}],"example":"timed","aliases":["type","format"]},{"name":"state","type":"string","required":false,"description":"US state or Canadian province, two-letter code (where the sale is held). Needs query or category. Measured: 'tractor' 3,490 -> PA 441, TX 415.","on_invalid":"reject","example":"PA","value_pattern":"[A-Za-z]{2}","aliases":["state_code"]},{"name":"seller_name","type":"string","required":false,"description":"Auction house name, EXACTLY as the source writes it (seller.name of a row, or data.facets.sellers). The match is exact and case-sensitive: 'DeMott' or a lower-cased name return 0. Needs query or category. Measured: 'tractor' 3,490 -> 73.","on_invalid":"reject","example":"DeMott Auction Company Inc","aliases":["auction_house","seller"]},{"name":"sort","type":"enum","required":false,"description":"Result order, the source's own orders only (an unknown order is refused by the source, so it is refused here first).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Source relevance (default)"},{"value":"oldest","label":"Oldest closing first (the archive goes back to 2010)"},{"value":"price_desc","label":"Highest last online bid first"},{"value":"price_asc","label":"Lowest last online bid first"}],"default":"relevance","example":"price_desc","aliases":["sort_by"]},{"name":"page","type":"integer","required":false,"description":"Result page. The source serves at most the first 10,000 matches of any query, so page × page_size cannot pass 10,000 (refused before any request).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (default 25).","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"data.lots[]: lot_id, title, url, last_online_bid, source_price, hammer_price (always null here), price_is, archive_status (the archive says SOLD for every row), bid_count, sale_starts_at, ends_at, category, seller, auction. data.total, total_capped, pagination, facets.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"john deere 4020","sort":"price_desc"}},{"name":"auctions","description":"Search auctions (sale events) by keyword, with auction type, state, auction house and a category label filter. query is required.","required_params":["query"],"optional_params":["auction_type","state","seller_name","category_label","sort","page","page_size"],"params":[{"name":"query","type":"string","required":true,"description":"Keywords, as typed into the site's search box. Matches title and description. Measured: 'excavator' 2,721 open lots, 'tractor' 3,490.","on_invalid":"reject","example":"excavator","aliases":["q","keyword","search"]},{"name":"auction_type","type":"enum","required":false,"description":"Live webcast sales or timed online sales. Measured: 'tractor' 2,898 live + 592 timed = 3,490.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Live webcast sales (lots are hammered during the sale)"},{"value":"timed","label":"Timed online sales (each lot closes at a set time)"}],"example":"timed","aliases":["type","format"]},{"name":"state","type":"string","required":false,"description":"US state or Canadian province, two-letter code (where the sale is held). Needs query or category. Measured: 'tractor' 3,490 -> PA 441, TX 415.","on_invalid":"reject","example":"PA","value_pattern":"[A-Za-z]{2}","aliases":["state_code"]},{"name":"seller_name","type":"string","required":false,"description":"Auction house name, EXACTLY as the source writes it (seller.name of a row, or data.facets.sellers). The match is exact and case-sensitive: 'DeMott' or a lower-cased name return 0. Needs query or category. Measured: 'tractor' 3,490 -> 73.","on_invalid":"reject","example":"DeMott Auction Company Inc","aliases":["auction_house","seller"]},{"name":"category_label","type":"string","required":false,"description":"Category LABEL exactly as data.facets.categories[].label shows it (this search filters on labels, not codes: a code returns 0). Measured: 'excavator' 61 -> 46 with 'Farm Equipment & Machinery'.","on_invalid":"reject","example":"Farm Equipment & Machinery"},{"name":"sort","type":"enum","required":false,"description":"Result order, the source's own orders only (an unknown order is refused by the source, so it is refused here first).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Source relevance (default)"},{"value":"ending_soon","label":"Earliest start / soonest closing first"}],"default":"relevance","example":"ending_soon","aliases":["sort_by"]},{"name":"page","type":"integer","required":false,"description":"Result page. The source serves at most the first 10,000 matches of any query, so page × page_size cannot pass 10,000 (refused before any request).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (default 25).","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"data.auctions[]: auction_id, title, description, url, type, status, starts_at, ends_at, first_lot_ends_at, timezone, currency, address{street, city, state, postal_code, country}, latitude, longitude, categories[], image_url, seller, deposit_required, has_multiple_buyer_premiums, has_instant_financing, allow_prebidding, bidding_extended. data.total, pagination, facets.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"farm"}},{"name":"sellers","description":"Find auction houses by name.","required_params":["query"],"optional_params":["page","page_size"],"params":[{"name":"query","type":"string","required":true,"description":"Auction-house name or part of it.","on_invalid":"reject","example":"auction","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"Result page. The source serves at most the first 10,000 matches of any query, so page × page_size cannot pass 10,000 (refused before any request).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100 (default 25).","on_invalid":"reject","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"data.sellers[]: seller_id, name, short_name, logo_url, city, state, country, url. data.total, pagination, suggestion.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"auction"}},{"name":"catalog","description":"One auction's catalogue: its lots with current bid, minimum bid, status, seconds left (timed sales) and the lot's attribute table.","required_params":["auction_id"],"optional_params":["sort","page","page_size"],"params":[{"name":"auction_id","type":"string","required":true,"description":"The auction (event) id, the `auction_id` of an auctions row or of a lot's auction block.","on_invalid":"reject","example":"300855","value_pattern":"\\d{3,10}","aliases":["aid","event_id"]},{"name":"sort","type":"enum","required":false,"description":"Catalogue order, the source's own options.","on_invalid":"reject","allowed_values":[{"value":"ending_soon","label":"Soonest closing first (source default)"},{"value":"popular","label":"Most bid-on first"},{"value":"price_desc","label":"Highest price first (current bid, or opening bid when unbid)"},{"value":"price_asc","label":"Lowest price first (current bid, or opening bid when unbid)"}],"default":"ending_soon","example":"popular"},{"name":"page","type":"integer","required":false,"description":"Catalogue page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"enum","required":false,"description":"Lots per page, the source's own choices.","on_invalid":"reject","allowed_values":[{"value":"10","label":"10 lots per page"},{"value":"25","label":"25 lots per page"},{"value":"50","label":"50 lots per page"},{"value":"100","label":"100 lots per page"}],"default":"25","example":"25"}],"returns":"data.lots[]: lot_id, url, title, lot_number, status, current_bid, minimum_bid, bid_count, high_bidder (masked by the source), seconds_remaining, image_url, attributes[]. data.auction, pagination.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"auction_id":"300855"}},{"name":"detail","description":"One lot in full. Open lots: current bid, minimum next bid, masked high bidder, seconds left, reserve status, internet premium, sale order, location, attribute table, description, photos, payment/pickup terms. Closed lots: the sale outcome (sold / passed), the hammer price and whether a floor or an internet bidder won, plus the lot record.","required_params":["lot_id"],"optional_params":[],"params":[{"name":"lot_id","type":"string","required":true,"description":"The lot id, the `lot_id` of a search / sold / catalog row (the number at the end of a proxibid.com lot URL).","on_invalid":"reject","example":"103138111","value_pattern":"\\d{3,12}","aliases":["id","lid"]}],"returns":"data.lot: lot_id, url, title, lot_number, status (open|sold|passed), auction_type, currency, current_bid, minimum_bid, hammer_price, sold_to (floor|internet), high_bidder / winning_bidder (masked by the source), reserve_met, seconds_remaining, bidding_extended, buyers_premium_pct, location, category, attributes[], description, images[], seller, auction, terms. Closed lots add page_price (the figure the archive shows) and price_mismatch.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"lot_id":"102551528"}},{"name":"lot_status","description":"The live bid status of one lot from the source's own bid-widget feed — about 0.5 KB: status, high bid, next bid, seconds left, reserve met, extended bidding; after the sale the hammer price and whether a floor or an internet bidder won.","required_params":["lot_id"],"optional_params":[],"params":[{"name":"lot_id","type":"string","required":true,"description":"The lot id, the `lot_id` of a search / sold / catalog row (the number at the end of a proxibid.com lot URL).","on_invalid":"reject","example":"103138111","value_pattern":"\\d{3,12}","aliases":["id","lid"]}],"returns":"data.status: lot_id, status (open|sold|passed), status_code, high_bid, next_bid, hammer_price, sold_to, winning_bidder, high_bidder, has_bids, seconds_remaining, reserve_met, bidding_extended, instant_purchase, auction_id, seller_id, lot_number.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"lot_id":"102551528"}}]},{"name":"publi24","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Publi24.ro Romania classifieds","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/publi24/v1","spec_available":true,"actions":[{"name":"search","description":"Search Romanian classifieds by native keyword; promoted slots remain labeled. Basic first/second page only.","required_params":["query"],"optional_params":["page"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword text, 1–200 characters.","on_invalid":"reject","example":"iphone","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"One-based basic source page: 1 or 2. Deeper pagination is unqualified.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2}],"returns":"listings: canonical-path listing_id, native source_id, title, visible price amount/currency/display, source_price and disagreement flag, image, location, description excerpt and promoted flag; source total, page/last_page and bounded has_more. Search displays may be converted to RON while detail retains native currency.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","page":1}},{"name":"detail","description":"Resolve the exact native canonical listing path returned as listing_id by search, with no prior cache dependency.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Copy the complete canonical path from search listing_id. Canonical www.publi24.ro HTTPS URLs also accepted. Bare source_id and numeric IDs are not lookup inputs.","on_invalid":"reject","example":"/anunturi/electronice/telefoane-mobile/altele/anunt/cumpar-telefoane-tablete-si-laptopuri/if583d646hh57fgg2gf44ihgee5e83de.html"}],"returns":"Listing identity, title, visible native price plus source disagreement, complete public description, images, published seller name/profile/source type, paired attributes, source location, source availability/business function and optional GTIN/null. Phone reveal, seller inventory, advanced filters and auxiliary routes excluded.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"/anunturi/electronice/telefoane-mobile/altele/anunt/cumpar-telefoane-tablete-si-laptopuri/if583d646hh57fgg2gf44ihgee5e83de.html"}}]},{"name":"publicsurplus","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Public Surplus — US and Canadian public-agency surplus auctions","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/publicsurplus/v1","spec_available":true,"actions":[{"name":"search","description":"Search LIVE Public Surplus auctions — the marketplace US and Canadian cities, counties, school districts, universities, transit agencies and utilities use to sell surplus vehicles, heavy equipment, computers, lab and medical gear, furniture and scrap. Filter by keyword, category, state or province, distance from a ZIP, price band, closing window and listing age. Every row carries the current price, the exact end time in UTC and the seconds left by the source's own clock. All parameters are optional; with none the call browses every live lot.","required_params":[],"optional_params":["query","category_id","state","zip","radius_miles","min_price","max_price","closing_within_hours","listed_within_hours","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword text, 1-200 characters. The source matches it against the lot title AND the description (agency boiler-plate included), so each row says title_matches_query.","on_invalid":"reject","example":"truck","aliases":["q","keyword","search_text"]},{"name":"category_id","type":"integer","required":false,"description":"Public Surplus category id from the categories action — a top-level id (4 Motor Pool, 1 Computers, 17 Heavy Equipment) or a sub-category id (106 Notebooks). Measured to bite: laptop 171 → 159 with category 1, 60 with 106.","on_invalid":"reject","example":4,"minimum":1,"maximum":99999,"aliases":["category","cat_id"]},{"name":"state","type":"string","required":false,"description":"Two-letter US state, territory or Canadian province code of the selling agency, for example TX, CA, ON. 68 codes are accepted; truck went from 245 lots to 24 with CA.","on_invalid":"reject","example":"TX","value_pattern":"[A-Za-z]{2}","aliases":["province","region"]},{"name":"zip","type":"string","required":false,"description":"Five-digit US ZIP to search around. Requires radius_miles.","on_invalid":"reject","example":"85718","value_pattern":"\\d{5}","aliases":["zipcode","zip_code","postal_code"]},{"name":"radius_miles","type":"enum","required":false,"description":"Radius around zip, one of the source's own steps. Measured to bite: truck 245 → 13 within 200 miles of 85718.","on_invalid":"reject","allowed_values":[{"value":"20","label":"20 miles"},{"value":"50","label":"50 miles"},{"value":"100","label":"100 miles"},{"value":"200","label":"200 miles"},{"value":"300","label":"300 miles"},{"value":"400","label":"400 miles"},{"value":"500","label":"500 miles"},{"value":"600","label":"600 miles"},{"value":"700","label":"700 miles"},{"value":"800","label":"800 miles"},{"value":"900","label":"900 miles"},{"value":"1000","label":"1000 miles"}],"example":"200","aliases":["radius","miles"]},{"name":"min_price","type":"number","required":false,"description":"Lowest current price in dollars. Measured to bite: truck 245 → 89 with min 1000.","on_invalid":"reject","example":1000,"minimum":0,"maximum":99999999,"aliases":["low_price"]},{"name":"max_price","type":"number","required":false,"description":"Highest current price in dollars. Measured to bite: truck 245 → 84 with max 100.","on_invalid":"reject","example":5000,"minimum":0,"maximum":99999999,"aliases":["high_price"]},{"name":"closing_within_hours","type":"enum","required":false,"description":"Only lots whose auction closes within this many hours (the source's own steps). Measured: truck 6 h → 1, 24 h → 25, 120 h → 76 of 245.","on_invalid":"reject","allowed_values":[{"value":"1","label":"Closing within 1 hours"},{"value":"6","label":"Closing within 6 hours"},{"value":"24","label":"Closing within 24 hours"},{"value":"120","label":"Closing within 120 hours"},{"value":"240","label":"Closing within 240 hours"}],"example":"24","aliases":["ending_within_hours","end_hours"]},{"name":"listed_within_hours","type":"enum","required":false,"description":"Only lots first listed within this many hours. Measured: truck 168 h → 138 of 245.","on_invalid":"reject","allowed_values":[{"value":"1","label":"Listed within the last 1 hours"},{"value":"24","label":"Listed within the last 24 hours"},{"value":"48","label":"Listed within the last 48 hours"},{"value":"168","label":"Listed within the last 168 hours"}],"example":"168","aliases":["new_within_hours","start_hours"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Each value was verified to reorder the result; the source's auction-number sort reproduced the default and is not published.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"Closing first (the source default)"},{"value":"ending_latest","label":"Closing last"},{"value":"price_high","label":"Current price, high to low"},{"value":"price_low","label":"Current price, low to high"},{"value":"title","label":"Title A to Z"}],"default":"ending_soonest","example":"ending_soonest"},{"name":"page","type":"integer","required":false,"description":"One-based page; 25 lots per page (fixed by the source). Past the last page the source answers with an empty page, reported as page_beyond_last.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400}],"returns":"total (the source's own result count), page, page_size (25), last_page, has_more, page_beyond_last, measured_at_utc (the source's own clock), and listings[]: item_id, auction_id, title, url, current_bid, price_display (the source's string), ends_at (ISO-8601 UTC), seconds_remaining (by the source's clock), ended, source_time_left, state, image_url and, when query is given, title_matches_query. The search page does not name the selling agency or the bid count — detail returns both.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"truck","sort":"ending_soonest"}},{"name":"detail","description":"Everything Public Surplus publishes about one live auction: the selling agency (id, name, logo, storefront), the pick-up address, start and end time (end in UTC plus the source's own label), whether it can extend, bid count, current price, increment, minimum next bid, currency, bid deposit, the high bidder's handle exactly as the source masks it, condition, the agency's full description with its labelled fields (odometer, engine, VIN where typed), every photo, payment methods, shipping terms, buyer's premium and the agency disclaimer.","required_params":["auction_id"],"optional_params":[],"params":[{"name":"auction_id","type":"string","required":true,"description":"The auction number search returns (item_id / auction_id). Closed lots are not public on this source and come back NOT_FOUND.","on_invalid":"reject","example":"4098212","value_pattern":"\\d{1,9}","aliases":["item_id","id","auc"]}],"returns":"item_id, auction_id, title, url, reserve_status, starts_at_local, ends_at (UTC), ends_at_local, ends_at_zone_label, ends_at_offset_hours, seconds_remaining, ended, might_extend, source_time_left, measured_at_utc, seller{seller_id, name, logo_url, storefront_url, listings_url}, pickup_location{name, address, city, state, zip}, region, payment_methods[], online_card_limit, wire_transfer, shipping, contact_public, auction{current_bid, price_display, price_basis (current_bid or opening_price), bid_count, bid_increment, minimum_bid, currency, bid_deposit, high_bidder (source-masked), high_bidder_years_registered, other[]}, condition, description, description_fields[]{label, value}, buyers_premium_percent, images[], image_count, disclaimer, terms_url.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"auction_id":"4098212"}},{"name":"seller_listings","description":"Every live auction one selling agency currently has open, 50 per page — the agency id is detail's seller.seller_id. The way to watch one city, county or university's surplus as it is listed.","required_params":["seller_id"],"optional_params":["page"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"The agency id (the source's orgid), from detail's seller.seller_id.","on_invalid":"reject","example":19311,"minimum":1,"maximum":999999999,"aliases":["orgid","agency_id","org_id"]},{"name":"page","type":"integer","required":false,"description":"One-based page; 50 lots per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400}],"returns":"seller_id, seller_name, page, page_size (50), last_page (from the source's own pager), has_more, page_beyond_last, measured_at_utc and listings[] in the search row shape (without state). The source publishes no total count on this page, so none is invented.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":19311}},{"name":"categories","description":"The Public Surplus category tree with the live lot count on every sub-category, as the site's own all-categories page prints it. Ids are what search's category_id takes.","required_params":[],"optional_params":["flat"],"params":[{"name":"flat","type":"boolean","required":false,"description":"Return every sub-category in one flat list (with parent_id) instead of nested.","on_invalid":"reject","default":false,"example":false}],"returns":"categories[]: id, name, parent_id, live_lot_count (top level = sum of its sub-categories) and children[]; plus top_level_count and total_count.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"flat":false}}]},{"name":"publix","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Publix API scraper — delivery.publix.com product search, categories, BOGO deals, product detail and store locator with each Publix store's price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/publix/v1","spec_available":true,"actions":[{"name":"search","description":"Search delivery.publix.com at one Publix store: regular price (price list), was-price, member/card price and promotions apart, unit price, stock level, brand and size, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in the delivery.publix.com search box ('milk').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"delivery.publix.com pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Publix store prices the results (Publix prices and range differ by store). Default 33801 — then `store_defaulted` is true.","on_invalid":"reject","example":"33801","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Publix store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"21778"}],"returns":"products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"33801"}},{"name":"category","description":"Every product of a delivery.publix.com collection (a category, a brand or a diet collection from `categories`) priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (n-milk-22980 …) or a delivery.publix.com /store/publix/collections/<slug> URL.","on_invalid":"reject","example":"n-milk-22980","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Publix store prices the results (Publix prices and range differ by store). Default 33801 — then `store_defaulted` is true.","on_invalid":"reject","example":"33801","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Publix store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"21778"}],"returns":"collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-22980","postal_code":"33801"}},{"name":"product/detail","description":"One Publix product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price, promotions and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or a delivery.publix.com /store/publix/products/ URL.","on_invalid":"reject","example":"324877","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Publix store prices the results (Publix prices and range differ by store). Default 33801 — then `store_defaulted` is true.","on_invalid":"reject","example":"33801","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Publix store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"21778"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"324877","postal_code":"33801"}},{"name":"categories","description":"The delivery.publix.com category tree (departments and their collections) or one collection's sub-collections; slugs feed `category`.","required_params":[],"optional_params":["slug","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Optional collection slug: returns its sub-collections. Without it: the whole category tree.","on_invalid":"reject","example":"n-milk-22980","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Publix store prices the results (Publix prices and range differ by store). Default 33801 — then `store_defaulted` is true.","on_invalid":"reject","example":"33801","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Publix store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"21778"}],"returns":"collections[]{slug,name,url,children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-22980"}},{"name":"stores","description":"Publix stores around a US ZIP code, nearest first, with address, coordinates, distance and which services delivery.publix.com offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find Publix stores around (nearest first).","on_invalid":"reject","example":"33801","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"33801"}},{"name":"offers","description":"Publix's current deal lists at one store: BOGO (buy one, get one free).","required_params":[],"optional_params":["type","page","per_page","cursor","postal_code","store_id"],"params":[{"name":"type","type":"enum","required":false,"description":"Which deal list: bogo (BOGO (buy one, get one free)).","on_invalid":"reject","allowed_values":[{"value":"bogo","label":"BOGO (buy one, get one free)"}],"default":"bogo"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Publix store prices the results (Publix prices and range differ by store). Default 33801 — then `store_defaulted` is true.","on_invalid":"reject","example":"33801","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Publix store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"21778"}],"returns":"type, collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"33801"}},{"name":"promotions","description":"Which Publix deal lists are live now at one store, each with its name and product count.","required_params":[],"optional_params":["postal_code","store_id"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Publix store prices the results (Publix prices and range differ by store). Default 33801 — then `store_defaulted` is true.","on_invalid":"reject","example":"33801","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Publix store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"21778"}],"returns":"promotions[]{type,name,slug,url,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"33801"}}]},{"name":"q84sale","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"4Sale Kuwait Classifieds (q84sale.com)","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/q84sale/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search across every 4Sale vertical — cars, property, electronics, furniture, animals, jobs and services — with the price, images, district, category and both language versions of each listing. This is the only 4Sale surface that honours a free-text query.","required_params":["query"],"optional_params":["category_id","sort","page","limit","lang","include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text query, exactly as a Kuwaiti buyer would type it. Arabic works best because that is what sellers write: `لاند كروزر` returned 1,825 hits where the Latin spelling `camry` returned 1,477 and `iphone` 1,432. An unknown term honestly returns 0 rows.","on_invalid":"reject","example":"camry","aliases":["q","keyword","search_string"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one 4Sale category id (any level: vertical, group or leaf). Measured to bite: query `camry` gave 1,475 hits unfiltered, 1,335 inside used-cars (2897) and 0 inside mobile phones (99). The 14 top-level vertical SLUGS are also accepted.","on_invalid":"reject","example":2897,"aliases":["category"]},{"name":"sort","type":"enum","required":false,"description":"Result order. `relevance` is 4Sale's own default search order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (site default)"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"}],"default":"relevance","example":"newest","aliases":["sorting"]},{"name":"page","type":"integer","required":false,"description":"1-based result page. `total_pages` in the response is the real last page; asking past it returns zero rows (the source does not repeat the last page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-50). 4Sale returns exactly this many organic rows until the last page.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":50,"aliases":["page_size"]},{"name":"lang","type":"enum","required":false,"description":"Language 4Sale should answer in. Listings are written by Kuwaiti sellers, so most titles and descriptions are Arabic whatever you pick; this chooses which side of the machine translation is returned and which language category and attribute labels use.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Return the seller's display name and phone number. 4Sale publishes both on every listing; they are withheld by default. `seller_id` and `seller_is_business` are always returned.","on_invalid":"reject","default":false,"example":false}],"returns":"{query, total_listings, total_pages, page, limit, sort, listings[], paid_placements[]}. Each listing: id, url, slug, title, title_is_arabic, description + description_translated + description_ar + description_en, price (null when the seller published none) and currency KWD, category_id, district_ids / district_name, published_at and bumped_at (ISO-8601 +03:00), image / thumbnail / thumbnails / images_count, is_premium, is_chat_enabled, status, seller_id, seller_is_business, attributes_raw (decode it with `category_attributes`), and seller_name / seller_phone only when include_pii.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"camry","limit":20,"lang":"en"}},{"name":"category_listings","description":"Browse one 4Sale category end to end, newest-first or by price — the whole Kuwaiti used-car, flat-to-rent or iPhone market as a paged feed. Returns the same listing shape as `search` plus the category names 4Sale attaches here.","required_params":["category_id"],"optional_params":["sort","page","limit","lang","include_pii"],"params":[{"name":"category_id","type":"integer","required":true,"description":"The 4Sale category to browse (any level). Use `suggest` to turn a keyword into a category id, or `category_path` to walk one. The 14 vertical slugs are accepted too (automotive, property, electronics, furniture, jobs …).","on_invalid":"reject","example":2897,"aliases":["category"]},{"name":"sort","type":"enum","required":false,"description":"Result order. `newest` is 4Sale's own browse order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"price_desc","label":"Highest price first"},{"value":"price_asc","label":"Lowest price first"}],"default":"newest","example":"newest","aliases":["sorting"]},{"name":"page","type":"integer","required":false,"description":"1-based result page. `total_pages` in the response is the real last page; asking past it returns zero rows (the source does not repeat the last page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20000},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-50). 4Sale returns exactly this many organic rows until the last page.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":50,"aliases":["page_size"]},{"name":"lang","type":"enum","required":false,"description":"Language 4Sale should answer in. Listings are written by Kuwaiti sellers, so most titles and descriptions are Arabic whatever you pick; this chooses which side of the machine translation is returned and which language category and attribute labels use.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Return the seller's display name and phone number. 4Sale publishes both on every listing; they are withheld by default. `seller_id` and `seller_is_business` are always returned.","on_invalid":"reject","default":false,"example":false}],"returns":"{category_id, total_listings, total_pages, page, limit, sort, listings[], paid_placements[]}. Listing shape as in `search`, and here category_name_en / category_name_ar are filled in by the source.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":2897,"limit":20,"sort":"newest"}},{"name":"listing","description":"One listing in full: the seller's own text and its translation, price, the complete image set, the category breadcrumb, the view count, the publish and bump times, and the category attributes (Year, Mileage, Colour, Brand …) decoded into names and values.","required_params":[],"optional_params":["id","url","include_attributes","lang","include_pii"],"params":[{"name":"id","type":"integer","required":false,"description":"4Sale listing id — the trailing number of any listing URL (`/en/listing/cayenne-21238153` → 21238153). Give this or `url`.","on_invalid":"reject","example":21238153,"aliases":["listing_id","adv_id"]},{"name":"url","type":"string","required":false,"description":"A 4Sale listing URL instead of an id; the id is read out of it.","on_invalid":"reject","example":"https://www.q84sale.com/en/listing/cayenne-21238153"},{"name":"include_attributes","type":"boolean","required":false,"description":"Also download the listing category's attribute dictionary so `attributes` arrives named and decoded (Year, Mileage, Colour, Brand … instead of option ids). Costs one extra upstream call; turn it off if you already hold the dictionary from `category_attributes`.","on_invalid":"reject","default":true,"example":true},{"name":"lang","type":"enum","required":false,"description":"Language 4Sale should answer in. Listings are written by Kuwaiti sellers, so most titles and descriptions are Arabic whatever you pick; this chooses which side of the machine translation is returned and which language category and attribute labels use.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Return the seller's display name and phone number. 4Sale publishes both on every listing; they are withheld by default. `seller_id` and `seller_is_business` are always returned.","on_invalid":"reject","default":false,"example":false}],"returns":"{id, url, slug, title, title_translated, description, description_translated, original_language, price, currency, category_id, category_name, category_path[] (leaf → vertical), vertical, district_id, published_at, created_at, bumped_at, expires_at, view_count, images[], images_count, is_premium, is_paid_placement, is_chat_enabled, status, source_app, seller_id, seller_member_since, seller_status, attributes[] {attribute_id, label, value, raw_value, is_option, unit}, attributes_raw[]}. seller_name / seller_phone only when include_pii. Either `id` or `url` must be given.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":21238153}},{"name":"category_attributes","description":"The filter attributes 4Sale defines for one category, with every drop-down option — the dictionary that turns `attributes_raw` on a listing row into real values, and the list of filters the site itself offers on that category.","required_params":["category_id"],"optional_params":["filterable_only","lang"],"params":[{"name":"category_id","type":"integer","required":true,"description":"The 4Sale category whose filter attributes and option dictionary you want. Used cars (2897) publishes 42 attributes; a leaf model category such as Cayenne (2241) publishes 43, including the ones inherited from its parents.","on_invalid":"reject","example":2897,"aliases":["category"]},{"name":"filterable_only","type":"boolean","required":false,"description":"Return only the attributes 4Sale itself exposes as search filters.","on_invalid":"reject","default":false,"example":false},{"name":"lang","type":"enum","required":false,"description":"Language 4Sale should answer in. Listings are written by Kuwaiti sellers, so most titles and descriptions are Arabic whatever you pick; this chooses which side of the machine translation is returned and which language category and attribute labels use.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{category_id, attribute_count, attributes[]}. Each attribute: attribute_id, label (requested language), label_en, label_ar, type (drop_down / number / text …), unit, is_filterable, is_required, selection_type, min / max, options[] {id, label, label_en, label_ar}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":2897}},{"name":"category_path","description":"A category's ancestor chain in both languages — leaf first up to one of 4Sale's 14 verticals. Use it to label a listing's category_id, or to walk from a model (Cayenne) up to its make and vertical.","required_params":["category_id"],"optional_params":["lang"],"params":[{"name":"category_id","type":"integer","required":true,"description":"Any 4Sale category id; the answer is its chain up to the vertical, leaf first.","on_invalid":"reject","example":2241,"aliases":["category"]},{"name":"lang","type":"enum","required":false,"description":"Language 4Sale should answer in. Listings are written by Kuwaiti sellers, so most titles and descriptions are Arabic whatever you pick; this chooses which side of the machine translation is returned and which language category and attribute labels use.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{category_id, depth, path[]} with the leaf first. Each node: id, parent_id, slug, name (requested language), name_en, name_ar, description_en, description_ar, is_leaf, image. Plus `vertical` {id, slug, name_en, name_ar} when the chain reaches one of the 14 verticals.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":2897}},{"name":"suggest","description":"4Sale's own search autocomplete: the keywords it recognises for what you typed and, for each, the category id and the predefined filters it maps that keyword onto. The cheapest way to turn a word into a category id.","required_params":["query"],"optional_params":["lang"],"params":[{"name":"query","type":"string","required":true,"description":"Partial or complete keyword. 4Sale answers with the keywords it recognises and, for each, the category and predefined filters it maps that keyword to — which is how you turn a word into a `category_id` for `search` or `category_listings`.","on_invalid":"reject","example":"camry","aliases":["q","keyword","search_string"]},{"name":"lang","type":"enum","required":false,"description":"Language 4Sale should answer in. Listings are written by Kuwaiti sellers, so most titles and descriptions are Arabic whatever you pick; this chooses which side of the machine translation is returned and which language category and attribute labels use.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{query, suggestion_count, suggestions[]} — each {keyword, display_name, category_id, predefined_filters} where predefined_filters is the attribute → option-id map 4Sale would apply for that keyword.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"camry"}},{"name":"districts","description":"Kuwait's geography as 4Sale publishes it: the six governorates, or the areas inside one of them. These are the ids that appear as `district_ids` on every listing.","required_params":[],"optional_params":["district_id","lang"],"params":[{"name":"district_id","type":"integer","required":false,"description":"Parent district to expand. 1 (the default) lists Kuwait's six governorates; pass one of those ids (e.g. 2 = Ahmadi) to get its areas.","on_invalid":"reject","default":1,"example":1,"minimum":-1,"maximum":100000,"aliases":["parent_id"]},{"name":"lang","type":"enum","required":false,"description":"Language 4Sale should answer in. Listings are written by Kuwaiti sellers, so most titles and descriptions are Arabic whatever you pick; this chooses which side of the machine translation is returned and which language category and attribute labels use.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{district_id, district_count, districts[]} — each {id, parent_id, level, name (requested language), name_en, name_ar}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"district_id":1}},{"name":"trending","description":"The search terms 4Sale is promoting as trending right now, in Arabic and English — a live read on what Kuwait is shopping for.","required_params":[],"optional_params":["lang"],"params":[{"name":"lang","type":"enum","required":false,"description":"Language 4Sale should answer in. Listings are written by Kuwaiti sellers, so most titles and descriptions are Arabic whatever you pick; this chooses which side of the machine translation is returned and which language category and attribute labels use.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{title, trend_count, trends[]} — each {keyword, keyword_en, keyword_ar}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"lang":"en"}}]},{"name":"qatarliving","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Qatar Living Classifieds, Property, Cars & Deals (qatarliving.com)","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/qatarliving/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse Qatar Living across all eight of its indexes — second-hand items, cars, property, services, merchant deals, news and events — with the price, images, district, geo-coordinates, category tree and every structured attribute the vertical publishes. Free text works in English and Arabic; leave the query out and it becomes a filtered, sorted browse of the whole index, which is also the only way to get an exact count.","required_params":[],"optional_params":["query","vertical","sub_vertical","sort","filters","facets","page","limit","lang","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text, English or Arabic. Optional: leave it out to BROWSE the vertical with filters and a sort instead, which is also the only way to get an exact count (see `returns`).","on_invalid":"reject","example":"land cruiser","aliases":["q","keyword","text"]},{"name":"vertical","type":"enum","required":false,"description":"Which Qatar Living index to read. Listing ids are scoped to the vertical, so the vertical a row came from is the vertical its `listing` call needs.","on_invalid":"reject","allowed_values":[{"value":"classifieds","label":"Classifieds — second-hand items, stores, offers, pre-loved, collectibles"},{"value":"vehicles","label":"Vehicles — cars, rental cars, motorbikes, boats, parts, plates, showrooms"},{"value":"properties","label":"Properties — flats, villas, offices, warehouses, schools, agencies"},{"value":"services","label":"Services — tutors, cleaning, maintenance, moving, tech, finance"},{"value":"deals","label":"Deals — merchant offers, vouchers, buy-1-get-1, discounts"},{"value":"news","label":"News — Qatar Living editorial articles"},{"value":"events","label":"Events — what is on in Doha and Qatar"},{"value":"jobs","label":"Jobs — accepted and documented by the source, but its index is EMPTY (0 documents measured 2026-10-06); the call answers ok with 0 rows and a warning"}],"default":"classifieds","example":"vehicles","aliases":["section"]},{"name":"sub_vertical","type":"enum","required":false,"description":"Narrow a vertical to one of its sections. 🔴 Use the SLUG: `items` (31,381 live), `stores` (3,061), `offers` (2,063), `pre-loved` (85), `collectibles` (76) on classifieds; `residential` (25,509), `commercial` (3,860), `agencies`, `international`, `schools` on properties. The display spellings the same API prints in its own facet (`Items`, `Pre-Loved`) are accepted upstream and then IGNORED, so this engine slugifies what you pass and fails the call if the source did not actually apply it. Every answer reports all the section counts in `section_counts` regardless.","on_invalid":"reject","allowed_values":[{"value":"items","label":"Classifieds: private second-hand items"},{"value":"stores","label":"Classifieds: store listings"},{"value":"offers","label":"Classifieds: store offers"},{"value":"pre-loved","label":"Classifieds: pre-loved / curated resale"},{"value":"collectibles","label":"Classifieds: collectibles"},{"value":"residential","label":"Properties: residential"},{"value":"commercial","label":"Properties: commercial"},{"value":"agencies","label":"Properties: agency pages"},{"value":"international","label":"Properties: international listings"},{"value":"schools","label":"Properties: schools"}],"example":"pre-loved","aliases":["section_name"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match for the query (the default)"},{"value":"newest","label":"Most recently published first"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"soonest","label":"Soonest start date first (events)"},{"value":"expiring_soon","label":"Expiring soonest first (deals)"},{"value":"discount_desc","label":"Biggest discount first (deals)"},{"value":"discount_asc","label":"Smallest discount first (deals)"},{"value":"rating_desc","label":"Highest merchant rating first (deals)"},{"value":"nearest","label":"Closest first — needs filters.geo {lat, lon, radius_km}"}],"default":"relevance","example":"newest","aliases":["order_by"]},{"name":"filters","type":"object","required":false,"description":"Structured filters, exactly as Qatar Living names them — 108 keys across the verticals. Lists for categorical keys, numbers for the min/max ones, booleans for the flags: `category`, `l1_category`, `l2_category`, `sub_vertical`, `brand`, `model`, `condition`, `color`, `location`, `zone`, `price` {min,max}, `is_freebie`, `is_featured`, `verified_only`, `freshness_days`, `date_from`/`date_to` · vehicles: `make`, `trim`, `year_min`/`year_max`/`year_int`, `mileage_max`, `fuel_type`, `gear_type`, `body_type`, `bike_type`, `boat_type`, `wheel_drive`, `seat_count`, `under_warranty`, `is_showroom`, `with_driver` · properties: `purpose`, `property_type`, `real_estate_type`, `bedrooms_min`/`bedrooms_max`, `bathrooms_min`, `furnishing`, `amenities`, `area_sqm_min`/`area_sqm_max`, `rent_frequency`, `ready_to_move`, `has_kahramaa` · deals: `agency_name`, `offer_type`, `sub_category`, `discount_percentage_min`, `is_deal_of_the_day` · geography: `geo` {lat, lon, radius_km}. An unknown key is rejected with the key named. Use the `facets` action to read the values a vertical publishes.","on_invalid":"reject","example":{"make":["Toyota"],"year_min":2022}},{"name":"facets","type":"array","required":false,"description":"Also count these field names over the matching set — the cheapest way to see what a query's results are made of. 🔴 A field this vertical cannot facet on makes the source drop the WHOLE request, and the call then returns INVALID_PARAM naming it.","on_invalid":"reject","example":["category","brand"]},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100. The source documents 200 but returns 100 (measured: page_size 200 and 100 gave byte-identical answers), so 100 is the honest ceiling.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"lang","type":"enum","required":false,"description":"Response language. `ar` puts the Arabic text in the ORDINARY fields (title, category) — it does not fill `title_ar`; the `listing` action is the bilingual one.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic — the Arabic text arrives in the BASE fields"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Include the seller's phone number, WhatsApp number and display name. Withheld by default; every row says whether something was held back (`pii_withheld`). Only the classifieds vertical publishes phone numbers at all.","on_invalid":"reject","default":false,"example":false}],"returns":"{query, vertical, sub_vertical, sort, page, limit, total_matched, total_reported, total_is_relevance_pool, total_pages, has_more, vertical_counts{}, section_counts{}, irrelevant_query, irrelevant_query_message, did_you_mean, facets{}, listings[], similar_listings[], search_id}. 🔴 `total_matched` is the number to trust: on deals, news and events a free-text total is a relevance-pool size (deals returns a flat 500 for every query, nonsense included) and `total_is_relevance_pool` says so. Each listing carries the source's own key set for that vertical — 52 fields on classifieds, 73 on properties, 101 on vehicles — plus id, url, vertical, price (null when none is published), currency QAR, image, images[], images_count, title_is_arabic and pii_withheld. Seller phone/WhatsApp/display name only when include_pii.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"land cruiser","vertical":"vehicles","limit":10}},{"name":"listing","description":"One Qatar Living listing in full, bilingual: the seller's own text and its Arabic or English counterpart, the price, the whole image set, the category breadcrumb, the geo-coordinates and every structured attribute the vertical publishes (make/model/year/mileage/gearbox on a car, bedrooms/bathrooms/area/furnishing/amenities on a flat, merchant/branches/validity/terms on a deal).","required_params":["id"],"optional_params":["vertical","lang","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The listing id from a search row — `items-50156` (classifieds), `9708` (services), `1676` (deals), `306166` (properties), `car_197619` / `boat_360` / `motorbike_1450` (vehicles), `news-…` / `event-…` (editorial).","on_invalid":"reject","example":"items-50156","aliases":["listing_id","item_id"]},{"name":"vertical","type":"enum","required":false,"description":"Which Qatar Living index to read. Listing ids are scoped to the vertical, so the vertical a row came from is the vertical its `listing` call needs.","on_invalid":"reject","allowed_values":[{"value":"classifieds","label":"Classifieds — second-hand items, stores, offers, pre-loved, collectibles"},{"value":"vehicles","label":"Vehicles — cars, rental cars, motorbikes, boats, parts, plates, showrooms"},{"value":"properties","label":"Properties — flats, villas, offices, warehouses, schools, agencies"},{"value":"services","label":"Services — tutors, cleaning, maintenance, moving, tech, finance"},{"value":"deals","label":"Deals — merchant offers, vouchers, buy-1-get-1, discounts"},{"value":"news","label":"News — Qatar Living editorial articles"},{"value":"events","label":"Events — what is on in Doha and Qatar"},{"value":"jobs","label":"Jobs — accepted and documented by the source, but its index is EMPTY (0 documents measured 2026-10-06); the call answers ok with 0 rows and a warning"}],"default":"classifieds","example":"vehicles","aliases":["section"]},{"name":"lang","type":"enum","required":false,"description":"Response language. `ar` puts the Arabic text in the ORDINARY fields (title, category) — it does not fill `title_ar`; the `listing` action is the bilingual one.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic — the Arabic text arrives in the BASE fields"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Include the seller's phone number, WhatsApp number and display name. Withheld by default; every row says whether something was held back (`pii_withheld`). Only the classifieds vertical publishes phone numbers at all.","on_invalid":"reject","default":false,"example":false}],"returns":"{listing{…}}. The row shape of `search` plus the `_ar` counterparts this surface adds — title_ar, description_ar, category_ar and up to 14 more per vertical (make_ar, year_ar, fuel_type_ar, purpose_ar, property_type_ar, furnishing_status_ar, offer_type_ar, claim_rules_ar, venue_ar …). 🔴 Ids are scoped to the vertical: the wrong pairing is NOT_FOUND.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"items-50156"}},{"name":"similar","description":"More listings like this one — Qatar Living's own vector nearest-neighbour search over the listing's text. Give it a car and it returns comparable cars, give it a flat and it returns comparable flats; on news and events it returns related articles inside a recency window.","required_params":["id"],"optional_params":["vertical","limit","months","lang","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The listing id to find look-alikes for.","on_invalid":"reject","example":"items-50156","aliases":["listing_id","item_id"]},{"name":"vertical","type":"enum","required":false,"description":"Which Qatar Living index to read. Listing ids are scoped to the vertical, so the vertical a row came from is the vertical its `listing` call needs.","on_invalid":"reject","allowed_values":[{"value":"classifieds","label":"Classifieds — second-hand items, stores, offers, pre-loved, collectibles"},{"value":"vehicles","label":"Vehicles — cars, rental cars, motorbikes, boats, parts, plates, showrooms"},{"value":"properties","label":"Properties — flats, villas, offices, warehouses, schools, agencies"},{"value":"services","label":"Services — tutors, cleaning, maintenance, moving, tech, finance"},{"value":"deals","label":"Deals — merchant offers, vouchers, buy-1-get-1, discounts"},{"value":"news","label":"News — Qatar Living editorial articles"},{"value":"events","label":"Events — what is on in Doha and Qatar"},{"value":"jobs","label":"Jobs — accepted and documented by the source, but its index is EMPTY (0 documents measured 2026-10-06); the call answers ok with 0 rows and a warning"}],"default":"classifieds","example":"vehicles","aliases":["section"]},{"name":"limit","type":"integer","required":false,"description":"How many look-alikes, 1-50.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50,"aliases":["top"]},{"name":"months","type":"integer","required":false,"description":"News and events only: how far back the look-alike window reaches, 1-24 months.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":24},{"name":"lang","type":"enum","required":false,"description":"Response language. `ar` puts the Arabic text in the ORDINARY fields (title, category) — it does not fill `title_ar`; the `listing` action is the bilingual one.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic — the Arabic text arrives in the BASE fields"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Include the seller's phone number, WhatsApp number and display name. Withheld by default; every row says whether something was held back (`pii_withheld`). Only the classifieds vertical publishes phone numbers at all.","on_invalid":"reject","default":false,"example":false}],"returns":"{id, vertical, count, listings[]} using the `search` row shape. For news and events the source's related-article route is used instead and each row is {id, title} with the article slug where the source gives one.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"items-50156"}},{"name":"suggest","description":"Autocomplete the way Qatar Living's own search box does: the keywords and merchant names it would offer for a partial query, each with the number of listings or offers behind it, in English or Arabic.","required_params":["query"],"optional_params":["vertical","limit","fuzzy","lang"],"params":[{"name":"query","type":"string","required":true,"description":"The partial text a user has typed, 1-100 characters, English or Arabic.","on_invalid":"reject","example":"iph","aliases":["q","keyword","text"]},{"name":"vertical","type":"enum","required":false,"description":"Which Qatar Living index to read. Listing ids are scoped to the vertical, so the vertical a row came from is the vertical its `listing` call needs.","on_invalid":"reject","allowed_values":[{"value":"classifieds","label":"Classifieds — second-hand items, stores, offers, pre-loved, collectibles"},{"value":"vehicles","label":"Vehicles — cars, rental cars, motorbikes, boats, parts, plates, showrooms"},{"value":"properties","label":"Properties — flats, villas, offices, warehouses, schools, agencies"},{"value":"services","label":"Services — tutors, cleaning, maintenance, moving, tech, finance"},{"value":"deals","label":"Deals — merchant offers, vouchers, buy-1-get-1, discounts"},{"value":"news","label":"News — Qatar Living editorial articles"},{"value":"events","label":"Events — what is on in Doha and Qatar"},{"value":"jobs","label":"Jobs — accepted and documented by the source, but its index is EMPTY (0 documents measured 2026-10-06); the call answers ok with 0 rows and a warning"}],"default":"classifieds","example":"vehicles","aliases":["section"]},{"name":"limit","type":"integer","required":false,"description":"How many suggestions, 1-20.","on_invalid":"reject","default":5,"example":6,"minimum":1,"maximum":20,"aliases":["top"]},{"name":"fuzzy","type":"boolean","required":false,"description":"Tolerate typos and partial words. Measured difference on `iph` + classifieds: off → \"used ip phone\" first, on → \"iphone\" first.","on_invalid":"reject","default":false,"example":true},{"name":"lang","type":"enum","required":false,"description":"Response language. `ar` puts the Arabic text in the ORDINARY fields (title, category) — it does not fill `title_ar`; the `listing` action is the bilingual one.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic — the Arabic text arrives in the BASE fields"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{query, vertical, fuzzy, count, suggestions[]}. Each suggestion: text, id, entry_type (keyword | merchant), category, match_count (listings behind a keyword), offer_count (offers behind a merchant), is_popular, popularity_rank, and for a merchant agency_id / agency_slug / logo.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iph","vertical":"classifieds","fuzzy":true,"limit":5}},{"name":"popular_keywords","description":"What Qatar is actually searching for on Qatar Living right now, per vertical — the demand signal behind the marketplace. Measured examples: classifieds fridge / washing machine / wardrobe, vehicles land cruiser / prado / camry, properties studio apartment / 1 BHK / furnished studio, deals buffet / pool access / massage, services babysitting / electrician / ac repair.","required_params":[],"optional_params":["vertical","limit","entry_type","sub_vertical","all_verticals","lang"],"params":[{"name":"vertical","type":"enum","required":false,"description":"Which Qatar Living index to read. Listing ids are scoped to the vertical, so the vertical a row came from is the vertical its `listing` call needs.","on_invalid":"reject","allowed_values":[{"value":"classifieds","label":"Classifieds — second-hand items, stores, offers, pre-loved, collectibles"},{"value":"vehicles","label":"Vehicles — cars, rental cars, motorbikes, boats, parts, plates, showrooms"},{"value":"properties","label":"Properties — flats, villas, offices, warehouses, schools, agencies"},{"value":"services","label":"Services — tutors, cleaning, maintenance, moving, tech, finance"},{"value":"deals","label":"Deals — merchant offers, vouchers, buy-1-get-1, discounts"},{"value":"news","label":"News — Qatar Living editorial articles"},{"value":"events","label":"Events — what is on in Doha and Qatar"},{"value":"jobs","label":"Jobs — accepted and documented by the source, but its index is EMPTY (0 documents measured 2026-10-06); the call answers ok with 0 rows and a warning"}],"default":"classifieds","example":"vehicles","aliases":["section"]},{"name":"limit","type":"integer","required":false,"description":"How many keywords, 1-50.","on_invalid":"reject","default":12,"example":10,"minimum":1,"maximum":50},{"name":"entry_type","type":"enum","required":false,"description":"Keep only one kind of entry: a search keyword, or a merchant name (deals).","on_invalid":"reject","allowed_values":[{"value":"keyword","label":"Search keywords"},{"value":"merchant","label":"Merchant names"}],"example":"keyword"},{"name":"sub_vertical","type":"string","required":false,"description":"Scope the list to one section slug, e.g. `pre-loved`. Falls back to the vertical-wide list when that section has none, so it is always safe to pass.","on_invalid":"reject","example":"pre-loved"},{"name":"all_verticals","type":"boolean","required":false,"description":"Merge every vertical's popular keywords round-robin instead of reading one vertical. Each keyword then says which vertical it belongs to.","on_invalid":"reject","default":false,"example":false},{"name":"lang","type":"enum","required":false,"description":"Response language. `ar` puts the Arabic text in the ORDINARY fields (title, category) — it does not fill `title_ar`; the `listing` action is the bilingual one.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic — the Arabic text arrives in the BASE fields"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{vertical, count, keywords[]}. Each keyword: keyword, id, entry_type, category, match_count, offer_count, vertical (filled when all_verticals is used) and the merchant fields when the entry is a merchant.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"vertical":"vehicles","limit":5}},{"name":"facets","description":"The filter VOCABULARY and the size of every bucket, in one call — the category tree, the car makes and models, the property types and purposes, the brands, conditions, colours and districts a vertical actually publishes, each with its live count. This is the dictionary the `filters` parameter needs, and it doubles as a market snapshot (vehicles: SUV/4x4 4154, Sedan 1131, Petrol 4634, Diesel 69 at capture).","required_params":["facets"],"optional_params":["vertical","query","filters","lang"],"params":[{"name":"facets","type":"array","required":true,"description":"The field names to count. Measured working names — classifieds: category, l1_category, l2_category, brand, condition, color, sub_vertical, ad_type, price_type, location, is_freebie · vehicles: make, model, body_type, fuel_type, gear_type, condition, purpose, year_int · properties: purpose, property_type, category, rent_frequency · services: category, l1_category, location · deals: category, sub_category, offer_type, agency_name · events: category, access_type, location · news: category, author, sub_category. 🔴 A name the vertical cannot facet on (properties `location`, `bedrooms`, `furnishing_status`) makes the source drop the whole request → INVALID_PARAM.","on_invalid":"reject","example":["make","model","body_type"],"aliases":["facet"]},{"name":"vertical","type":"enum","required":false,"description":"Which Qatar Living index to read. Listing ids are scoped to the vertical, so the vertical a row came from is the vertical its `listing` call needs.","on_invalid":"reject","allowed_values":[{"value":"classifieds","label":"Classifieds — second-hand items, stores, offers, pre-loved, collectibles"},{"value":"vehicles","label":"Vehicles — cars, rental cars, motorbikes, boats, parts, plates, showrooms"},{"value":"properties","label":"Properties — flats, villas, offices, warehouses, schools, agencies"},{"value":"services","label":"Services — tutors, cleaning, maintenance, moving, tech, finance"},{"value":"deals","label":"Deals — merchant offers, vouchers, buy-1-get-1, discounts"},{"value":"news","label":"News — Qatar Living editorial articles"},{"value":"events","label":"Events — what is on in Doha and Qatar"},{"value":"jobs","label":"Jobs — accepted and documented by the source, but its index is EMPTY (0 documents measured 2026-10-06); the call answers ok with 0 rows and a warning"}],"default":"classifieds","example":"vehicles","aliases":["section"]},{"name":"query","type":"string","required":false,"description":"Count over the results of this query instead of the whole index.","on_invalid":"reject","example":"","aliases":["q","text"]},{"name":"filters","type":"object","required":false,"description":"Structured filters, exactly as Qatar Living names them — 108 keys across the verticals. Lists for categorical keys, numbers for the min/max ones, booleans for the flags: `category`, `l1_category`, `l2_category`, `sub_vertical`, `brand`, `model`, `condition`, `color`, `location`, `zone`, `price` {min,max}, `is_freebie`, `is_featured`, `verified_only`, `freshness_days`, `date_from`/`date_to` · vehicles: `make`, `trim`, `year_min`/`year_max`/`year_int`, `mileage_max`, `fuel_type`, `gear_type`, `body_type`, `bike_type`, `boat_type`, `wheel_drive`, `seat_count`, `under_warranty`, `is_showroom`, `with_driver` · properties: `purpose`, `property_type`, `real_estate_type`, `bedrooms_min`/`bedrooms_max`, `bathrooms_min`, `furnishing`, `amenities`, `area_sqm_min`/`area_sqm_max`, `rent_frequency`, `ready_to_move`, `has_kahramaa` · deals: `agency_name`, `offer_type`, `sub_category`, `discount_percentage_min`, `is_deal_of_the_day` · geography: `geo` {lat, lon, radius_km}. An unknown key is rejected with the key named. Use the `facets` action to read the values a vertical publishes.","on_invalid":"reject","example":{"make":["Toyota"],"year_min":2022}},{"name":"lang","type":"enum","required":false,"description":"Response language. `ar` puts the Arabic text in the ORDINARY fields (title, category) — it does not fill `title_ar`; the `listing` action is the bilingual one.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic — the Arabic text arrives in the BASE fields"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{vertical, query, total_matched, total_reported, facets{name:[{value, count}]}, vertical_counts{}, section_counts{}}. Counts are the source's own and are taken over the filtered set, so passing `filters` gives conditional counts (models within one make, bedrooms within one district).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"vertical":"vehicles","facets":["make","body_type"]}},{"name":"deals_map","description":"Every merchant offer matching a query as a map pin, one pin per branch and no paging — an offer with four branches becomes four pins with the same offer id and distinct coordinates. The whole of Qatar Living's deals catalogue on a map in a single call.","required_params":[],"optional_params":["query","filters","lang"],"params":[{"name":"query","type":"string","required":false,"description":"Free text to narrow the pins; leave it out for every pin.","on_invalid":"reject","example":"","aliases":["q","text"]},{"name":"filters","type":"object","required":false,"description":"Structured filters, exactly as Qatar Living names them — 108 keys across the verticals. Lists for categorical keys, numbers for the min/max ones, booleans for the flags: `category`, `l1_category`, `l2_category`, `sub_vertical`, `brand`, `model`, `condition`, `color`, `location`, `zone`, `price` {min,max}, `is_freebie`, `is_featured`, `verified_only`, `freshness_days`, `date_from`/`date_to` · vehicles: `make`, `trim`, `year_min`/`year_max`/`year_int`, `mileage_max`, `fuel_type`, `gear_type`, `body_type`, `bike_type`, `boat_type`, `wheel_drive`, `seat_count`, `under_warranty`, `is_showroom`, `with_driver` · properties: `purpose`, `property_type`, `real_estate_type`, `bedrooms_min`/`bedrooms_max`, `bathrooms_min`, `furnishing`, `amenities`, `area_sqm_min`/`area_sqm_max`, `rent_frequency`, `ready_to_move`, `has_kahramaa` · deals: `agency_name`, `offer_type`, `sub_category`, `discount_percentage_min`, `is_deal_of_the_day` · geography: `geo` {lat, lon, radius_km}. An unknown key is rejected with the key named. Use the `facets` action to read the values a vertical publishes.","on_invalid":"reject","example":{"make":["Toyota"],"year_min":2022}},{"name":"lang","type":"enum","required":false,"description":"Response language. `ar` puts the Arabic text in the ORDINARY fields (title, category) — it does not fill `title_ar`; the `listing` action is the bilingual one.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic — the Arabic text arrives in the BASE fields"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{count, pins[]} — each pin: offer_id, lat, lon, image (merchant logo path).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"filters":{"make":["Toyota"],"year_min":2022}}},{"name":"merchants_map","description":"Every merchant whose offers match a query as a map pin, one pin per distinct branch and deduped across that merchant's offers — the merchant footprint behind the deals catalogue, with no paging.","required_params":[],"optional_params":["query","filters","lang"],"params":[{"name":"query","type":"string","required":false,"description":"Free text to narrow the pins; leave it out for every pin.","on_invalid":"reject","example":"","aliases":["q","text"]},{"name":"filters","type":"object","required":false,"description":"Structured filters, exactly as Qatar Living names them — 108 keys across the verticals. Lists for categorical keys, numbers for the min/max ones, booleans for the flags: `category`, `l1_category`, `l2_category`, `sub_vertical`, `brand`, `model`, `condition`, `color`, `location`, `zone`, `price` {min,max}, `is_freebie`, `is_featured`, `verified_only`, `freshness_days`, `date_from`/`date_to` · vehicles: `make`, `trim`, `year_min`/`year_max`/`year_int`, `mileage_max`, `fuel_type`, `gear_type`, `body_type`, `bike_type`, `boat_type`, `wheel_drive`, `seat_count`, `under_warranty`, `is_showroom`, `with_driver` · properties: `purpose`, `property_type`, `real_estate_type`, `bedrooms_min`/`bedrooms_max`, `bathrooms_min`, `furnishing`, `amenities`, `area_sqm_min`/`area_sqm_max`, `rent_frequency`, `ready_to_move`, `has_kahramaa` · deals: `agency_name`, `offer_type`, `sub_category`, `discount_percentage_min`, `is_deal_of_the_day` · geography: `geo` {lat, lon, radius_km}. An unknown key is rejected with the key named. Use the `facets` action to read the values a vertical publishes.","on_invalid":"reject","example":{"make":["Toyota"],"year_min":2022}},{"name":"lang","type":"enum","required":false,"description":"Response language. `ar` puts the Arabic text in the ORDINARY fields (title, category) — it does not fill `title_ar`; the `listing` action is the bilingual one.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"ar","label":"Arabic — the Arabic text arrives in the BASE fields"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{count, pins[]} — each pin: agency_id, lat, lon, logo (merchant logo path).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"filters":{"make":["Toyota"],"year_min":2022}}}]},{"name":"qoo10","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Qoo10 Japan API — search qoo10.jp, read any item (sale, list and coupon / Mega Wari prices, Q-points, shipping, stock and price per option, seller rating), shop listings, ranking 200 and the category tree","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/qoo10/v1","spec_available":true,"actions":[{"name":"search","description":"Search Qoo10 Japan (qoo10.jp) across every shop by keyword, optionally inside one category, a price range (applied by the site to the sale price), in one of the site's five sort orders. 40 organic items per page (sponsored PR rows returned apart), up to 50 pages. Each row: item id, title, brand, sale price (JPY, tax included), struck price and price drop, the coupon price the card advertises (shop coupon / Mega Wari / Mega Debut) with its label, Q-points, rating and review count, free-shipping flag, ship-from country, shop id/name/grade.","required_params":["query"],"optional_params":["category_id","min_price","max_price","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Japanese or English (e.g. `iphone`, `トナーパッド`). Full-width letters are normalised.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"category_id","type":"string","required":false,"description":"Qoo10 category code to search inside: a 9-digit large (1xxxxxxxx) or medium (2xxxxxxxx) code from `categories` or a row's `category_large_id` / `category_medium_id` (220000285 = 保護フィルム). An unknown code returns 0 rows.","on_invalid":"reject","example":"220000285","aliases":["category","cat"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum sale price in JPY. Measured: the site filters on the sale price, not on the coupon price.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum sale price in JPY (sale price, not coupon price).","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own five).","on_invalid":"reject","allowed_values":[{"value":"ranking","label":"ランキング順 ranking (default)"},{"value":"price_asc","label":"価格が安い順 price low to high"},{"value":"price_desc","label":"価格が高い順 price high to low"},{"value":"most_reviewed","label":"レビューが多い順 most reviews"},{"value":"newest","label":"新着順 newest"}],"default":"ranking"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-50 (the site's pager stops at 50).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"results[]{item_id, url, title, brand, brand_no, official_brand, image, price, currency=JPY, price_is_placeholder, struck_price, price_drop, coupon_price, coupon_price_label, coupon_price_type, qpoints, rating, rating_pct, review_count, free_shipping, ships_from, shop_coupon_available, category_large_id, category_medium_id, shop{shop_id, name, grade, grade_label, url}, sponsored} + sponsored[] + page, last_page, has_more, page_clamped, query, filters","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone"}},{"name":"product","description":"One Qoo10 Japan item page: title, brand, condition, the sale price, the seller's list price, discount % and deal type (タイムセール / 今日の特価), the item's recent minimum selling price, the coupon price the page advertises (shop coupon / Mega Wari / Mega Debut / Mega Point) with its label and the page's own price breakdown, Q-points, stock and price delta per option, order limit, shipping fee, carrier and free-over threshold, ship-from country, rating, satisfaction %, review and sales counts, category codes, images and the seller (grade, rating, followers, award).","required_params":[],"optional_params":["item_id","url"],"params":[{"name":"item_id","type":"string","required":false,"description":"Qoo10 item number (goodscode) exactly as a search row's `item_id` returns it. Required unless `url` is given.","on_invalid":"reject","example":"775669909","aliases":["goodscode","id","gd_no"]},{"name":"url","type":"string","required":false,"description":"An item page URL (www.qoo10.jp/g/<number>, /item/<name>/<number> or Goods.aspx?goodscode=<number>).","on_invalid":"reject","example":"https://www.qoo10.jp/g/775669909","aliases":["item_url"]}],"returns":"product{item_id, url, title, brand, brand_no, condition, price, currency, price_is_placeholder, list_price, discount_pct, discount_type, recent_min_price, ld_price, ld_price_is_coupon_price, price_mismatch, coupon_price, coupon_price_label, coupon_price_type, coupons_applied[]{type, amount}, price_breakdown[]{label, value}, mega_point_effective_price, qpoints_max, availability, in_stock, stock_total, order_limit, option_levels, option_levels_read, variants[]{option_id, group, level, name, price_delta, stock, in_stock, image}, addon_options[], options_read, ships_from, ships_from_label, shipping[]{carrier, fee, free_over, condition, ships_from, last_mile}, shipping_fee, free_shipping, delivery_days_guaranteed, rating, rating_ld, satisfaction_pct, review_count, sold_count, category_large_id, category_large_name, category_medium_id, category_small_id, images[], promotion_text, shop{shop_id, name, url, grade, grade_label, rating_pct, rating, followers, award}, shop_read}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"775669909"}},{"name":"shop","description":"Every item one Qoo10 Japan shop sells, 60 per page, in one of the site's five sort orders: the same row fields as `search`.","required_params":["shop_id"],"optional_params":["sort","page"],"params":[{"name":"shop_id","type":"string","required":true,"description":"The shop's id as in www.qoo10.jp/shop/<shop_id> (a search row's `shop.shop_id`), or the shop URL.","on_invalid":"reject","example":"medicube","aliases":["shop","seller","shopdomain"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own five).","on_invalid":"reject","allowed_values":[{"value":"ranking","label":"ランキング順 ranking (default)"},{"value":"price_asc","label":"価格が安い順 price low to high"},{"value":"price_desc","label":"価格が高い順 price high to low"},{"value":"most_reviewed","label":"レビューが多い順 most reviews"},{"value":"newest","label":"新着順 newest"}],"default":"ranking"},{"name":"page","type":"integer","required":false,"description":"Result page, 60 items per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"results[]{same as search} + shop_id, page, last_page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"shop_id":"medicube"}},{"name":"ranking","description":"Qoo10 Japan's ranking 200 (ランキング200), overall or for one of its eleven tabs: rank, item id, title, brand, sale price and struck price, review count, free shipping.","required_params":[],"optional_params":["group"],"params":[{"name":"group","type":"enum","required":false,"description":"Ranking tab.","on_invalid":"reject","allowed_values":[{"value":"all","label":"総合"},{"value":"fashion","label":"ファッション"},{"value":"beauty","label":"ビューティ"},{"value":"supplements","label":"サプリ・ヘルスケア"},{"value":"mens","label":"メンズ・スポーツ"},{"value":"electronics","label":"家電・PC・ゲーム"},{"value":"phones","label":"スマホ・タブレット"},{"value":"home","label":"日用品・生活"},{"value":"food","label":"食品・ドラッグストア"},{"value":"pets","label":"ペットフード・用品"},{"value":"baby","label":"ベビー・キッズ・おもちゃ"},{"value":"kpop","label":"K-POP"}],"default":"all"}],"returns":"results[]{rank, item_id, url, title, brand, image, price, currency, struck_price, review_count, free_shipping} + group, group_name","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"group":"beauty"}},{"name":"categories","description":"The Qoo10 Japan category tree as the site's menu publishes it: 11 groups, their large categories and medium categories with 9-digit codes usable as `search.category_id`.","required_params":[],"optional_params":[],"params":[],"returns":"groups[]{group_id, name, categories[]{category_id, level, name, children[]{category_id, level, name}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}}]},{"name":"rakuma","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Rakuma (Rakuten Fril) — Japan C2C resale marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/rakuma/v1","spec_available":true,"actions":[{"name":"search","description":"Search Rakuma listings by keyword, category or brand, with condition, availability, shipping-payer, seller-kind and price filters. 🔴 At least ONE of `query`, `category_id` or `brand_id` is required (the framework cannot express \"one of\", so it is stated here and in the error message). Returns 40 rows per page with the source's own result total, and both the sold and the on-sale side of the market.","required_params":[],"optional_params":["query","exclude_query","category_id","brand_id","condition","availability","shipping_payer","listing_source","price_min","price_max","sort","order","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as Rakuma's own search box takes it; Japanese works best (ナイキ) but Latin brand names resolve too (NIKE). Matching is loose: an unmatchable keyword still returns token-level matches and the source reports an approximate total of 200 - the response sets `total_results_is_approximate` when that happens. Pass `query`, `category_id` or `brand_id`; at least one is needed.","on_invalid":"reject","example":"ナイキ"},{"name":"exclude_query","type":"string","required":false,"description":"Words to exclude from the keyword match. Measured: excluding GOLF took 1,270,699 results down to 1,226,515 in the same run.","on_invalid":"reject","example":"GOLF","aliases":["excluded_query"]},{"name":"category_id","type":"string","required":false,"description":"Rakuma category id. Use the `categories` action for the 14 top-level ids, or read the id off any `category_path` this API returns (it is the number in fril.jp/category/<id>). Measured: 547 (nylon jackets) took a 1,270,699 keyword result down to 22,812 and 40/40 returned rows carried category 547.","on_invalid":"reject","example":"10005","value_pattern":"^\\d{1,6}$"},{"name":"brand_id","type":"string","required":false,"description":"Rakuma brand id, the number in fril.jp/brand/<id>; it is returned as `brand_id` on every row that has a brand. It intersects with the keyword rather than replacing it (measured: brand 592 alone 742,737, 'sneakers' alone 1,617,601, the two together 444,654).","on_invalid":"reject","example":"592","value_pattern":"^\\d{1,7}$"},{"name":"condition","type":"enum","required":false,"description":"The seller's declared condition grade. Each value was verified by reading the item page's own condition string for items returned under it (18/18 agreed), and the six grades' totals sum to the unfiltered total within 0.005 %.","on_invalid":"reject","allowed_values":[{"value":"new","label":"新品、未使用 - brand new / unused"},{"value":"like_new","label":"未使用に近い - as good as unused"},{"value":"no_noticeable_flaws","label":"目立った傷や汚れなし - no noticeable flaws"},{"value":"slight_flaws","label":"やや傷や汚れあり - slight flaws"},{"value":"visible_flaws","label":"傷や汚れあり - visible flaws"},{"value":"poor","label":"全体的に状態が悪い - poor overall"}],"example":"new"},{"name":"availability","type":"enum","required":false,"description":"A sold listing is an answer, not a 404: it keeps its price and is returned with `is_sold: true`. Measured on one keyword: 253,339 on sale + 1,017,356 sold = 1,270,695 against an unfiltered 1,270,699, and the sold filter returned 40/40 rows flagged sold.","on_invalid":"reject","allowed_values":[{"value":"on_sale","label":"still for sale"},{"value":"sold_out","label":"already sold"}],"example":"on_sale"},{"name":"shipping_payer","type":"enum","required":false,"description":"Who pays the postage. The two values partition the catalogue exactly: 1,225,813 + 44,886 = 1,270,699, the unfiltered total in the same run.","on_invalid":"reject","allowed_values":[{"value":"seller","label":"送料込 - price includes shipping"},{"value":"buyer","label":"着払い - buyer pays shipping on delivery"}],"example":"seller"},{"name":"listing_source","type":"enum","required":false,"description":"Measured: 52,695 + 1,218,000 = 1,270,695 against an unfiltered 1,270,699, and every row returned under `official_shop` carried a business seller type.","on_invalid":"reject","allowed_values":[{"value":"official_shop","label":"Rakuten-vetted official shop / business seller"},{"value":"individual","label":"ordinary private seller"}],"example":"individual"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in yen (JPY has no minor unit - 2080 means ¥2,080). It is a hard bound, not a band: measured min=10000 returned prices 10,600-64,020 and min=10000&max=20000 returned 10,120-19,580.","on_invalid":"reject","example":3000,"minimum":0,"maximum":99999999,"aliases":["min","min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in yen. Measured max=1000 returned prices 300-1,000 and took the total from 1,270,699 to 111,768.","on_invalid":"reject","example":20000,"minimum":0,"maximum":99999999,"aliases":["max","max_price"]},{"name":"sort","type":"enum","required":false,"description":"Rakuma's own four sort keys, taken from the site's own sort links. An unlisted value is rejected here on purpose: upstream, some invalid values return a page with no results at all and others are silently served as `relevance`.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Rakuma's own recommended order (the site default)"},{"value":"newest","label":"most recently listed"},{"value":"price","label":"by price - pair with `order`"},{"value":"likes","label":"most liked"}],"default":"relevance","example":"newest"},{"name":"order","type":"enum","required":false,"description":"Direction for `sort`. `sort=price&order=asc` gave ¥300 rows and `order=desc` gave ¥9,999,999 rows in the same run.","on_invalid":"reject","allowed_values":[{"value":"desc","label":"descending"},{"value":"asc","label":"ascending"}],"default":"desc","example":"asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. Page size is a fixed 40 rows and is not negotiable (per_page/limit/page_size were measured as broken or ignored). Page 100 is the last one that answers - 101 is an HTTP 404 - so at most 4,000 rows are reachable per query however large `total_results` is. Nine sampled pages overlapped by 0 rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"{total_results, total_results_is_approximate, page, page_size, page_max, reachable_rows, rows[{item_id, item_number, url, title, price_jpy, price_display, is_sold, image_url, brand_id, brand_name, category_id, seller_user_id, seller_type, point_rebate_jpy, point_rebate_rate_pct, is_promoted}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"nike","max_results":20}},{"name":"item","description":"One full Rakuma listing: title, the seller's own description, price, condition grade, size, brand, the full category path, every photo, shipping terms and origin region, like and comment counts, Rakuten point rebate, and the seller's shop with its three transaction-review counters. A sold listing is returned with its price and `is_sold: true`, not as NOT_FOUND.","required_params":["item_id"],"optional_params":[],"params":[{"name":"item_id","type":"string","required":true,"description":"The 32-character hex id from a search row's `item_id`, or the full item URL. 🔴 The numeric `item_number` is NOT an address - item.fril.jp/<number> answers HTTP 404 - so it is refused with that reason instead of being sent upstream.","on_invalid":"reject","example":"364d2a7999a8c318b17ed48d7e4572d1","value_pattern":"^(?:https?://[^\\s]+|[0-9a-f]{32})$","aliases":["id","url"]}],"returns":"{item_id, item_number, url, title, description, price_jpy, price_display, currency, is_sold, condition, condition_label_ja, size, brand_id, brand_name, category_path[], shipping_payer, shipping_method, shipping_estimate, ships_from_region, likes_count, comments_count, point_rebate_jpy, point_rebate_rate_pct, images[], seller{shop_id, shop_url, display_name, user_id, is_official_shop, reviews_good, reviews_neutral, reviews_bad}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"item_id":"364d2a7999a8c318b17ed48d7e4572d1"}},{"name":"seller","description":"A Rakuma seller's shop: its shop display name AND its user handle (two different strings upstream), the official-shop badge, the average transaction rating out of 5 with the number of ratings behind it, ratings behind it, the total number of items it has listed, and one page of its current stock (36 rows per page on this surface, measured, with 0 overlap between page 1 and page 2).","required_params":["seller_id"],"optional_params":["page"],"params":[{"name":"seller_id","type":"string","required":true,"description":"The 32-hex shop id returned as `seller.shop_id` by the `item` action, or the full fril.jp/shop/<id> URL. This is NOT the numeric `seller_user_id` that search rows carry - the two are different keys and only the hex one is an address.","on_invalid":"reject","example":"6e4cd5f315802e6d847be71cf6c846ca","value_pattern":"^(?:https?://[^\\s]+|[0-9a-f]{32})$","aliases":["shop_id","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page of the shop's stock, 36 rows per page (this surface renders 36, not 40).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"{seller{shop_id, shop_url, display_name, user_name, user_id, icon_url, is_official_shop, rating, rating_count, rating_scale_max}, listed_item_count, page, page_size, rows[...same row shape as search...]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"seller_id":"6e4cd5f315802e6d847be71cf6c846ca"}},{"name":"categories","description":"Rakuma's category ids and names. With no parameter it returns the 14 top-level departments (no request upstream). With `category_id` it returns that department's child categories with their Japanese names - 13 for menswear, for example. The ids feed `search`'s `category_id`, which is how you get a live item count for one of them.","required_params":[],"optional_params":["category_id"],"params":[{"name":"category_id","type":"string","required":false,"description":"A category id to expand. Omit it for the top-level list.","on_invalid":"reject","example":"10005","value_pattern":"^\\d{1,6}$"}],"returns":"{level, parent_id, parent_name, total_results, categories[{category_id, name}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"10005"}}]},{"name":"rakuten","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Rakuten Ichiba API scraper — Japan e-commerce product search, item detail, full reviews, shop catalog, rankings & genres (rakuten.co.jp)","version":"1.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/rakuten/v1","spec_available":true,"actions":[{"name":"search","description":"Search Rakuten Ichiba by keyword or genre with sort and price filters — returns items with name, price (JPY), shop, points, shipping, rating and images. Paginated.","required_params":[],"optional_params":["keyword","q","genre_id","page","sort","min_price","max_price"],"params":[{"name":"keyword","type":"string","required":false,"description":"Search keyword (Japanese or English). Provide keyword OR genre_id.","on_invalid":"reject","example":"ヘッドホン","aliases":["q"]},{"name":"genre_id","type":"string","required":false,"description":"Rakuten genre id to browse (discover ids via the genres action).","on_invalid":"reject"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"standard","label":"Standard relevance (default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"review","label":"Highest review score"},{"value":"new","label":"Newest first"}],"default":"standard","example":"price_asc"},{"name":"min_price","type":"integer","required":false,"description":"Minimum price filter (JPY).","on_invalid":"ignore","example":1000},{"name":"max_price","type":"integer","required":false,"description":"Maximum price filter (JPY).","on_invalid":"ignore","example":50000}],"returns":"results[] (item_name, item_price JPY, shop, points, shipping_price, review_url, images), page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"keyword":"ヘッドホン"}},{"name":"item","description":"Get a Rakuten Ichiba product's detail — title, price (JPY), brand, shop, rating, images, category breadcrumbs, spec attributes, shipping and points.","required_params":[],"optional_params":["url","item_url","shop_code","item_path","manage_number"],"params":[{"name":"url","type":"string","required":false,"description":"Full Rakuten item URL (the simplest input). Alternative: shop_code + item_path.","on_invalid":"reject","example":"https://item.rakuten.co.jp/seedcoms/10003515-198/","aliases":["item_url"]},{"name":"shop_code","type":"string","required":false,"description":"Rakuten shop code (pair with item_path as an alternative to url).","on_invalid":"reject"},{"name":"item_path","type":"string","required":false,"description":"Item path within the shop (pair with shop_code).","on_invalid":"reject","aliases":["manage_number"]}],"returns":"item{} — item_id, item_name, item_price, brand, shop, review_average/count, image_urls, breadcrumbs[], attributes[], description, free_shipping, variant_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://item.rakuten.co.jp/seedcoms/10003515-198/"}},{"name":"reviews","description":"Get ALL buyer reviews for a Rakuten Ichiba item, paginated (30/page) — rating, title, body, reviewer nickname, age band, sex and reviewer rank, post and order date, helpful count, photos and purpose tags, plus the total review count.","required_params":[],"optional_params":["url","item_url","shop_code","item_path","manage_number","page"],"params":[{"name":"url","type":"string","required":false,"description":"Full Rakuten item URL (the simplest input). Alternative: shop_code + item_path.","on_invalid":"reject","example":"https://item.rakuten.co.jp/seedcoms/10003515-198/","aliases":["item_url"]},{"name":"shop_code","type":"string","required":false,"description":"Rakuten shop code (pair with item_path as an alternative to url).","on_invalid":"reject"},{"name":"item_path","type":"string","required":false,"description":"Item path within the shop (pair with shop_code).","on_invalid":"reject","aliases":["manage_number"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"reviews[] (rating, body, reviewer, posted_at, ordered_at, helpful_count, review_id, title, reviewer_age_range, reviewer_age_suffix, reviewer_sex, reviewer_rank, tags[], images[]), summary{review_average, review_count}, page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://item.rakuten.co.jp/seedcoms/10003515-198/"}},{"name":"variants","description":"Get a Rakuten Ichiba item's SKU variant matrix — every color/size/option combination with its price and images.","required_params":[],"optional_params":["url","item_url","shop_code","item_path","manage_number"],"params":[{"name":"url","type":"string","required":false,"description":"Full Rakuten item URL (the simplest input). Alternative: shop_code + item_path.","on_invalid":"reject","example":"https://item.rakuten.co.jp/seedcoms/10003515-198/","aliases":["item_url"]},{"name":"shop_code","type":"string","required":false,"description":"Rakuten shop code (pair with item_path as an alternative to url).","on_invalid":"reject"},{"name":"item_path","type":"string","required":false,"description":"Item path within the shop (pair with shop_code).","on_invalid":"reject","aliases":["manage_number"]}],"returns":"variants[] {variant_id, selector_values, item_price, images}, selectors[], variant_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://item.rakuten.co.jp/seedcoms/10003515-198/"}},{"name":"shop","description":"List a Rakuten Ichiba shop's catalog by shop_code — every item the shop sells, paginated.","required_params":["shop_code"],"optional_params":["sid","page"],"params":[{"name":"shop_code","type":"string","required":true,"description":"Rakuten shop code (the shop's urlCode, e.g. 'rakuten24').","on_invalid":"reject","example":"rakuten24","aliases":["sid"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"results[] shop catalog items, shop_code, page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"shop_code":"rakuten24"}},{"name":"ranking","description":"Get the Rakuten Ichiba best-seller ranking — overall or for a genre, by day/week/realtime/month.","required_params":[],"optional_params":["genre_id","period","page"],"params":[{"name":"genre_id","type":"string","required":false,"description":"Genre id to rank within ('0' = overall, the default).","on_invalid":"reject","example":"0"},{"name":"period","type":"enum","required":false,"description":"Ranking time window.","on_invalid":"ignore","allowed_values":[{"value":"daily","label":"Daily"},{"value":"weekly","label":"Weekly"},{"value":"realtime","label":"Realtime"},{"value":"monthly","label":"Monthly"}],"default":"daily","example":"weekly"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"results[] ranked items {rank, item_name, item_price, item_url}, genre_id, period","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"genre_id":"0"}},{"name":"genres","description":"Browse the Rakuten Ichiba category (genre) tree — top-level categories, or pass genre_id for a subtree.","required_params":[],"optional_params":["genre_id"],"params":[{"name":"genre_id","type":"string","required":false,"description":"Genre id to read the subtree of (omit for the top-level tree).","on_invalid":"reject"}],"returns":"genres{} — genre tree with children[] {genre_id, name, count, leaf}, genre_id","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"rappi","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Rappi — Latin America delivery & quick-commerce (9 countries)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/rappi/v1","spec_available":true,"actions":[{"name":"restaurant/search","description":"Restaurants deliverable in one city, with that city's own restaurant count and its cuisine taxonomy. Pass `cuisine` to get the site's own complete list for that cuisine.","required_params":["country"],"optional_params":["city","cuisine","sort","limit","offset","min_rating","free_delivery_only","open_now","max_delivery_cost"],"params":[{"name":"country","type":"enum","required":true,"description":"Rappi storefront. Each country is a separate catalogue and currency.","on_invalid":"reject","allowed_values":[{"value":"co","label":"Colombia (www.rappi.com.co)"},{"value":"mx","label":"Mexico (www.rappi.com.mx)"},{"value":"br","label":"Brazil (www.rappi.com.br)"},{"value":"ar","label":"Argentina (www.rappi.com.ar)"},{"value":"cl","label":"Chile (www.rappi.cl)"},{"value":"pe","label":"Peru (www.rappi.com.pe)"},{"value":"uy","label":"Uruguay (www.rappi.com.uy)"},{"value":"ec","label":"Ecuador (www.rappi.com.ec)"},{"value":"cr","label":"Costa Rica (www.rappi.co.cr)"}],"default":"co","example":"co"},{"name":"city","type":"string","required":false,"description":"City slug, e.g. `bogota`, `medellin`, `sao-paulo`. Omit for the country's default city. Use the `cities` action for the live list.","on_invalid":"reject","example":"medellin"},{"name":"cuisine","type":"string","required":false,"description":"Cuisine slug from `cuisine_taxonomy`, e.g. `hamburguesa`, `sushi`, `pizza`. Returns the site's complete list for that cuisine.","on_invalid":"reject","example":"sushi"},{"name":"sort","type":"enum","required":false,"description":"Order the returned rows.","on_invalid":"reject","allowed_values":[{"value":"rating","label":"rating"},{"value":"eta","label":"eta"},{"value":"delivery_cost","label":"delivery_cost"},{"value":"name","label":"name"},{"value":"reviews","label":"reviews"}],"example":"rating"},{"name":"limit","type":"integer","required":false,"description":"Rows to return (1-200).","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":200},{"name":"offset","type":"integer","required":false,"description":"Rows to skip.","on_invalid":"reject","default":0,"minimum":0},{"name":"min_rating","type":"number","required":false,"description":"Keep rows whose catalogue rating is at least this.","on_invalid":"reject","example":4.5,"minimum":0,"maximum":5},{"name":"free_delivery_only","type":"boolean","required":false,"description":"Keep only rows Rappi flags as free shipping.","on_invalid":"reject","default":false},{"name":"open_now","type":"boolean","required":false,"description":"Keep only rows whose status is OPEN.","on_invalid":"reject","default":false},{"name":"max_delivery_cost","type":"number","required":false,"description":"Keep rows whose delivery cost is at most this, in the local currency.","on_invalid":"reject","minimum":0}],"returns":"restaurants[] with store_id, name, url, cuisines, list_rating, list_review_count, delivery_cost, eta_minutes, plus the city record, total_in_city and the cuisine taxonomy.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"co","city":"bogota","limit":10}},{"name":"restaurant/detail","description":"One restaurant's full record and its COMPLETE menu with prices, sections, discounts, rating histogram, schedule and offers.","required_params":["country"],"optional_params":["store_id","url"],"params":[{"name":"country","type":"enum","required":true,"description":"Rappi storefront.","on_invalid":"reject","allowed_values":[{"value":"co","label":"Colombia (www.rappi.com.co)"},{"value":"mx","label":"Mexico (www.rappi.com.mx)"},{"value":"br","label":"Brazil (www.rappi.com.br)"},{"value":"ar","label":"Argentina (www.rappi.com.ar)"},{"value":"cl","label":"Chile (www.rappi.cl)"},{"value":"pe","label":"Peru (www.rappi.com.pe)"},{"value":"uy","label":"Uruguay (www.rappi.com.uy)"},{"value":"ec","label":"Ecuador (www.rappi.com.ec)"},{"value":"cr","label":"Costa Rica (www.rappi.co.cr)"}],"default":"co","example":"co"},{"name":"store_id","type":"integer","required":false,"description":"Rappi restaurant id, as returned by restaurant/search. Ids are namespaced per country.","on_invalid":"reject","example":900044812},{"name":"url","type":"string","required":false,"description":"A rappi.com restaurant URL instead of store_id.","on_invalid":"reject","example":"https://www.rappi.com.co/restaurantes/900044812-home-burgers"}],"returns":"store{…, rating, review_count, rating_histogram, lat, lng, address, currency} and menu{sections[]{items[]{price, original_price, …}}}.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"co","store_id":900044812}},{"name":"store/search","description":"Grocery, pharmacy and retail STORES of one store type. This listing is country-wide: Rappi redirects the city form to the country URL (measured), so it is not city-scoped and says so.","required_params":["country"],"optional_params":["store_type","query","limit","offset"],"params":[{"name":"country","type":"enum","required":true,"description":"Rappi storefront.","on_invalid":"reject","allowed_values":[{"value":"co","label":"Colombia (www.rappi.com.co)"},{"value":"mx","label":"Mexico (www.rappi.com.mx)"},{"value":"br","label":"Brazil (www.rappi.com.br)"},{"value":"ar","label":"Argentina (www.rappi.com.ar)"},{"value":"cl","label":"Chile (www.rappi.cl)"},{"value":"pe","label":"Peru (www.rappi.com.pe)"},{"value":"uy","label":"Uruguay (www.rappi.com.uy)"},{"value":"ec","label":"Ecuador (www.rappi.com.ec)"},{"value":"cr","label":"Costa Rica (www.rappi.co.cr)"}],"default":"co","example":"co"},{"name":"store_type","type":"string","required":false,"description":"Parent store type slug, e.g. `market`, `rappimall-parent`, `super-farma`, `express`, `turbox`.","on_invalid":"reject","default":"market","example":"market"},{"name":"query","type":"string","required":false,"description":"Keep only stores whose name contains this (accent-insensitive).","on_invalid":"reject","example":"makro"},{"name":"limit","type":"integer","required":false,"description":"Rows to return (1-200).","on_invalid":"reject","default":50,"minimum":1,"maximum":200},{"name":"offset","type":"integer","required":false,"description":"Rows to skip.","on_invalid":"reject","default":0,"minimum":0}],"returns":"stores[] with store_id, name, url, store_type, vertical, eta_minutes.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"co"}},{"name":"store/detail","description":"One grocery/retail store's record, its aisle directory with each aisle's product count, and its products with prices. `pages` walks deeper into the aisles.","required_params":["country","store_id"],"optional_params":["pages"],"params":[{"name":"country","type":"enum","required":true,"description":"Rappi storefront.","on_invalid":"reject","allowed_values":[{"value":"co","label":"Colombia (www.rappi.com.co)"},{"value":"mx","label":"Mexico (www.rappi.com.mx)"},{"value":"br","label":"Brazil (www.rappi.com.br)"},{"value":"ar","label":"Argentina (www.rappi.com.ar)"},{"value":"cl","label":"Chile (www.rappi.cl)"},{"value":"pe","label":"Peru (www.rappi.com.pe)"},{"value":"uy","label":"Uruguay (www.rappi.com.uy)"},{"value":"ec","label":"Ecuador (www.rappi.com.ec)"},{"value":"cr","label":"Costa Rica (www.rappi.co.cr)"}],"default":"co","example":"co"},{"name":"store_id","type":"integer","required":true,"description":"Rappi store id from store/search.","on_invalid":"reject","example":900189604},{"name":"pages","type":"integer","required":false,"description":"How many aisle pages to read (1-4). Each page adds more aisles and their products; 1 returns the store's front shelves only.","on_invalid":"reject","default":2,"example":2,"minimum":1,"maximum":4}],"returns":"store{…}, aisle_directory[]{name, product_count} and aisles[]{items[]{product_id, name, price, original_price, sale_type, …}}.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"co","store_id":900044812}},{"name":"cities","description":"The city slugs one country's storefront actually serves, read from Rappi's own published sitemap. These are the values `city` accepts.","required_params":["country"],"optional_params":[],"params":[{"name":"country","type":"enum","required":true,"description":"Rappi storefront.","on_invalid":"reject","allowed_values":[{"value":"co","label":"Colombia (www.rappi.com.co)"},{"value":"mx","label":"Mexico (www.rappi.com.mx)"},{"value":"br","label":"Brazil (www.rappi.com.br)"},{"value":"ar","label":"Argentina (www.rappi.com.ar)"},{"value":"cl","label":"Chile (www.rappi.cl)"},{"value":"pe","label":"Peru (www.rappi.com.pe)"},{"value":"uy","label":"Uruguay (www.rappi.com.uy)"},{"value":"ec","label":"Ecuador (www.rappi.com.ec)"},{"value":"cr","label":"Costa Rica (www.rappi.co.cr)"}],"default":"co","example":"co"}],"returns":"cities[] with slug and url.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"co"}}]},{"name":"realestate-nz","category":{"id":"real-estate","title":"Real Estate"},"title":"realestate.co.nz API scraper (New Zealand) - search NZ homes for sale and for rent, rural, commercial and business listings by region, district or suburb, bedrooms, bathrooms, price, land area, property type and sale method; full listings with address, coordinates, photos, open homes, agents with phone and email, and agency; recently sold properties with sale price, council valuation (CV) and the site's estimate; property sales history; agents and agencies. Prices in NZD. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/realestate-nz/v1","spec_available":true,"actions":[{"name":"search","description":"Search realestate.co.nz listings: homes for sale (default) or for rent, rural, commercial or business. Filter by region, district or suburb (names or ids), price, bedrooms, bathrooms, land and floor area, car parks, property type, sale method (auction, tender, deadline sale, negotiation, asking price …), keyword, open homes, new builds, pets and furnishing for rentals, agent or agency. Every row carries the listing URL, address and coordinates, the price exactly as shown plus the figure in it, sale method and auction/tender/deadline date, bedrooms, bathrooms, land and floor area, photos, open homes, and the listing agents (name, phone, mobile, email) with their agency.","required_params":[],"optional_params":["category","region","district","suburb","include_nearby_suburbs","price_min","price_max","bedrooms_min","bedrooms_max","bathrooms_min","bathrooms_max","land_area_min","land_area_max","floor_area_min","floor_area_max","carparks_min","property_type","sale_method","keyword","open_homes_only","mortgagee_sale","new_construction","coastal_waterfront","swimming_pool","pets_allowed","has_floor_plans","has_videos","has_3d_tour","furnished","price_changed_recently","agent_id","agency_id","sort","page","limit","max_rotations"],"params":[{"name":"category","type":"enum","required":false,"description":"What to search: homes for sale (default) or for rent, rural, commercial sale or lease, businesses. `purpose`=sale|rent also works.","on_invalid":"reject","allowed_values":[{"value":"residential_sale","label":"Residential for sale"},{"value":"residential_rent","label":"Residential for rent (prices per week)"},{"value":"rural_sale","label":"Rural for sale (farms, lifestyle blocks)"},{"value":"commercial_sale","label":"Commercial for sale"},{"value":"commercial_lease","label":"Commercial for lease"},{"value":"business_sale","label":"Business for sale"}],"default":"residential_sale","example":"residential_sale","aliases":["purpose"]},{"name":"region","type":"array","required":false,"description":"Region name or id (Auckland = 35, Wellington, Canterbury, Waikato, Bay of Plenty …). One or several. `locations` lists every region, district and suburb with ids.","on_invalid":"reject","example":"Auckland","aliases":["regions","region_id"]},{"name":"district","type":"array","required":false,"description":"District name or id (Auckland City, North Shore City, Wellington City, Christchurch City …). One or several.","on_invalid":"reject","example":"Auckland City","aliases":["districts","district_id"]},{"name":"suburb","type":"array","required":false,"description":"Suburb name, id or fq_slug. One or several. A name used by several suburbs (e.g. Hillcrest) is chosen by the region/district you also give, otherwise the request lists the candidates. The narrowest level wins: region=Auckland + suburb=Ponsonby searches Ponsonby.","on_invalid":"reject","example":"Ponsonby","aliases":["suburbs","suburb_id"]},{"name":"include_nearby_suburbs","type":"boolean","required":false,"description":"Also include the suburbs the site lists as neighbours of the given suburb(s).","on_invalid":"reject"},{"name":"price_min","type":"number","required":false,"description":"Lowest price, NZD (per week for residential rent). The site filters on the agent's search price, so listings shown as Auction / Negotiation can match.","on_invalid":"reject","example":600000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, NZD (per week for residential rent).","on_invalid":"reject","example":1200000,"minimum":0},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms.","on_invalid":"reject","example":3,"minimum":0,"maximum":20},{"name":"bedrooms_max","type":"integer","required":false,"description":"Most bedrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bathrooms_min","type":"integer","required":false,"description":"Fewest bathrooms.","on_invalid":"reject","example":2,"minimum":0,"maximum":20},{"name":"bathrooms_max","type":"integer","required":false,"description":"Most bathrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"land_area_min","type":"number","required":false,"description":"Smallest land area in square metres (1 ha = 10000).","on_invalid":"reject","minimum":0},{"name":"land_area_max","type":"number","required":false,"description":"Largest land area in square metres.","on_invalid":"reject","minimum":0},{"name":"floor_area_min","type":"number","required":false,"description":"Smallest floor area in square metres.","on_invalid":"reject","minimum":0},{"name":"floor_area_max","type":"number","required":false,"description":"Largest floor area in square metres.","on_invalid":"reject","minimum":0},{"name":"carparks_min","type":"integer","required":false,"description":"Fewest car parks.","on_invalid":"reject","minimum":1,"maximum":20},{"name":"property_type","type":"array","required":false,"description":"One or several property types. Residential sale: house, apartment, townhouse, unit, section, lifestyle_property, lifestyle_section, home_and_income, studio, retirement_living, multiple_properties, carpark, boat_shed. Rent: house, apartment, unit, townhouse, studio, lifestyle_property, holiday_rental, section, retirement_living, carpark, boat_shed. Rural, commercial and business categories have their own types (the error for an unknown type lists them).","on_invalid":"reject","allowed_values":[{"value":"age_care_facilities","label":"Age care facilities"},{"value":"apartment","label":"Apartment"},{"value":"bare_land","label":"Bare land"},{"value":"beauty_and_health","label":"Beauty and health"},{"value":"boat_shed","label":"Boat shed"},{"value":"carpark","label":"Carpark"},{"value":"commercial_land","label":"Commercial land"},{"value":"contractor","label":"Contractor"},{"value":"cropping","label":"Cropping"},{"value":"dairy","label":"Dairy"},{"value":"dairy_and_superette","label":"Dairy and superette"},{"value":"distribution","label":"Distribution"},{"value":"education_and_training","label":"Education and training"},{"value":"finishing","label":"Finishing"},{"value":"forestry","label":"Forestry"},{"value":"franchise","label":"Franchise"},{"value":"grazing","label":"Grazing"},{"value":"high_country","label":"High country"},{"value":"holiday_rental","label":"Holiday rental"},{"value":"home_and_income","label":"Home and income"},{"value":"horticulture","label":"Horticulture"},{"value":"hospitality","label":"Hospitality"},{"value":"hotel_motel_leisure","label":"Hotel motel leisure"},{"value":"hotels_motels_lodges_bnb","label":"Hotels motels lodges bnb"},{"value":"house","label":"House"},{"value":"industrial_buildings","label":"Industrial buildings"},{"value":"industrial_land","label":"Industrial land"},{"value":"industrial_premises","label":"Industrial premises"},{"value":"investment_opportunities","label":"Investment opportunities"},{"value":"leisure_and_entertainment","label":"Leisure and entertainment"},{"value":"lifestyle_property","label":"Lifestyle property"},{"value":"lifestyle_section","label":"Lifestyle section"},{"value":"manufacturing_and_processing","label":"Manufacturing and processing"},{"value":"multiple_properties","label":"Multiple properties"},{"value":"office_building","label":"Office building"},{"value":"office_premises","label":"Office premises"},{"value":"professional","label":"Professional"},{"value":"restaurant_and_cafe","label":"Restaurant and cafe"},{"value":"retail_food_and_beverages","label":"Retail food and beverages"},{"value":"retail_non_food","label":"Retail non food"},{"value":"retail_premises","label":"Retail premises"},{"value":"retail_property","label":"Retail property"},{"value":"retirement_living","label":"Retirement living"},{"value":"section","label":"Section"},{"value":"services_and_professional","label":"Services and professional"},{"value":"showroom","label":"Showroom"},{"value":"specialist_livestock","label":"Specialist livestock"},{"value":"sporting","label":"Sporting"},{"value":"studio","label":"Studio"},{"value":"tourism","label":"Tourism"},{"value":"townhouse","label":"Townhouse"},{"value":"transport_and_automotive","label":"Transport and automotive"},{"value":"unit","label":"Unit"},{"value":"unspecified","label":"Unspecified"},{"value":"viticulture","label":"Viticulture"},{"value":"warehouse","label":"Warehouse"},{"value":"wholesale_and_distribution","label":"Wholesale and distribution"}],"example":"house","aliases":["property_types"]},{"name":"sale_method","type":"array","required":false,"description":"How it is being sold, one or several: price_shown (any listing that shows a price), negotiation, auction, tender, poa, offers, deadline_sale, asking_price, enquiries_over … Not for residential rent.","on_invalid":"reject","allowed_values":[{"value":"price_shown","label":"A price is shown (fixed price, asking price, enquiries over …)"},{"value":"negotiation","label":"By negotiation"},{"value":"auction","label":"Auction"},{"value":"tender","label":"Tender"},{"value":"poa","label":"Price on application"},{"value":"offers","label":"Offers"},{"value":"deadline_sale","label":"Deadline sale"},{"value":"asking_price","label":"Asking price"},{"value":"buyer_budget_from","label":"Buyer budget from"},{"value":"buyer_budget_over","label":"Buyer budget over"},{"value":"buyer_enquiry_over","label":"Buyer enquiry over"},{"value":"buyer_interest_from","label":"Buyer interest from"},{"value":"enquiries_over","label":"Enquiries over"},{"value":"expression_of_interest","label":"Expressions of interest over"},{"value":"negotiable_from","label":"Negotiable from"},{"value":"offers_over","label":"Offers over"}],"example":"auction","aliases":["sale_methods","pricing_method"]},{"name":"keyword","type":"string","required":false,"description":"A word the listing must contain (matched by the site's own keyword filter).","on_invalid":"reject","example":"pool","aliases":["query","q","keywords"]},{"name":"open_homes_only","type":"boolean","required":false,"description":"Only listings with an open home scheduled.","on_invalid":"reject"},{"name":"mortgagee_sale","type":"boolean","required":false,"description":"Only mortgagee sales.","on_invalid":"reject"},{"name":"new_construction","type":"boolean","required":false,"description":"Only new builds.","on_invalid":"reject"},{"name":"coastal_waterfront","type":"boolean","required":false,"description":"Only coastal / waterfront properties.","on_invalid":"reject"},{"name":"swimming_pool","type":"boolean","required":false,"description":"Only properties with a swimming pool.","on_invalid":"reject"},{"name":"pets_allowed","type":"boolean","required":false,"description":"Rentals only: pets allowed.","on_invalid":"reject"},{"name":"has_floor_plans","type":"boolean","required":false,"description":"Only listings with floor plans.","on_invalid":"reject"},{"name":"has_videos","type":"boolean","required":false,"description":"Only listings with a video.","on_invalid":"reject"},{"name":"has_3d_tour","type":"boolean","required":false,"description":"Only listings with a 3D walkthrough.","on_invalid":"reject"},{"name":"furnished","type":"array","required":false,"description":"Rentals only: furnished, unfurnished, partly_furnished (one or several).","on_invalid":"reject","allowed_values":[{"value":"furnished","label":"Furnished"},{"value":"unfurnished","label":"Unfurnished"},{"value":"partly_furnished","label":"Partly furnished"}]},{"name":"price_changed_recently","type":"boolean","required":false,"description":"Only listings whose price changed in the last 28 days (the site's \"pricing changes\" filter; for sale only).","on_invalid":"reject"},{"name":"agent_id","type":"integer","required":false,"description":"Only this agent's listings (every row returns agents[].agent_id).","on_invalid":"reject","example":1861787},{"name":"agency_id","type":"integer","required":false,"description":"Only this agency office's listings (every row returns agency.agency_id).","on_invalid":"reject","aliases":["office_id"]},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"The site's default order (paid featured listings first)"},{"value":"best_match","label":"Best match"},{"value":"latest","label":"Newest listings first"},{"value":"oldest","label":"Oldest listings first"},{"value":"lowest_price","label":"Lowest price first (by the agent's search price, also for listings that show no price)"},{"value":"highest_price","label":"Highest price first (by the agent's search price)"},{"value":"smallest_land","label":"Smallest land area first"},{"value":"largest_land","label":"Largest land area first"}],"default":"featured"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. page x limit can reach 10,000 results.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, url (realestate.co.nz listing page), title, category, category_code, property_type, status (active|sold|withdrawn), address{full_address, display_address, street_number, street_number_suffix, unit_number, street, suburb, district, region, postcode, suburb_fq_slug, latitude, longitude, geo_accuracy, address_published}, price_display (the site's own wording: \"$479,000\", \"Auction\", \"Deadline Sale\", \"Asking Price $698,000\", \"Enquiries Over $540,000\", \"$620 per week\"), price (the figure in that wording, NZD; null when none is shown), price_to (second figure of a range), price_period (week|month|year|sqm for rents and leases), sale_method (fixed_price|negotiation|auction|tender|poa|offers|deadline_sale|asking_price|enquiries_over|…), price_code, currency, auction{date, time, location}, tender{…}, deadline{…}, bedrooms, bathrooms, ensuites, toilets, living_areas, studies, storeys, parking{garage, covered, other}, land_area, land_area_unit (sqm|ha), land_area_m2, floor_area, floor_area_unit, floor_area_m2, title_type (Freehold|Leasehold|Cross Lease|Unit Title|Company), image, images[], image_count, floorplans[], videos[], virtual_tours[], open_homes[]{start, end, is_past}, agents[]{agent_id, name, first_name, last_name, phone, mobile, email, image, agency_name, listing_count, profile_url}, agency{agency_id, name, trading_name, phone, email, website, logo, brand_colour, profile_url}, listed_at, created_at, listing_reference, property_id (→ `property`), is_featured, is_new_construction, is_mortgagee_sale, is_coastal_waterfront, has_swimming_pool, is_private_listing, rates, rates_period; rentals add available_from, pets_allowed, smokers_allowed, bond, max_tenants, furnished, apply_url, viewing_url; private listings add private_owner{name, email, details}}, count, total_results, page, limit, has_more, property_type_counts[]{property_type, count}, filters{} (what was sent, with resolved location ids)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"region":"Auckland","limit":10}},{"name":"listing","description":"One realestate.co.nz listing in full, live or ended (sold / withdrawn listings still resolve): everything a search row has plus the description, price change history, features, in-zone and nearby schools, early-childhood centres, links, and every agent's phone, mobile and email with the agency. include_property=true also attaches the property record (sales history, council valuation, estimate).","required_params":["listing_id"],"optional_params":["include_property","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Listing id (the number in a realestate.co.nz listing URL) or the URL.","on_invalid":"reject","example":"43166838","aliases":["id","url","listing"]},{"name":"include_property","type":"boolean","required":false,"description":"Also return the property record: REINZ sales history, council valuation, the site's estimate, past listings with their prices, latest rental.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, url (realestate.co.nz listing page), title, category, category_code, property_type, status (active|sold|withdrawn), address{full_address, display_address, street_number, street_number_suffix, unit_number, street, suburb, district, region, postcode, suburb_fq_slug, latitude, longitude, geo_accuracy, address_published}, price_display (the site's own wording: \"$479,000\", \"Auction\", \"Deadline Sale\", \"Asking Price $698,000\", \"Enquiries Over $540,000\", \"$620 per week\"), price (the figure in that wording, NZD; null when none is shown), price_to (second figure of a range), price_period (week|month|year|sqm for rents and leases), sale_method (fixed_price|negotiation|auction|tender|poa|offers|deadline_sale|asking_price|enquiries_over|…), price_code, currency, auction{date, time, location}, tender{…}, deadline{…}, bedrooms, bathrooms, ensuites, toilets, living_areas, studies, storeys, parking{garage, covered, other}, land_area, land_area_unit (sqm|ha), land_area_m2, floor_area, floor_area_unit, floor_area_m2, title_type (Freehold|Leasehold|Cross Lease|Unit Title|Company), image, images[], image_count, floorplans[], videos[], virtual_tours[], open_homes[]{start, end, is_past}, agents[]{agent_id, name, first_name, last_name, phone, mobile, email, image, agency_name, listing_count, profile_url}, agency{agency_id, name, trading_name, phone, email, website, logo, brand_colour, profile_url}, listed_at, created_at, listing_reference, property_id (→ `property`), is_featured, is_new_construction, is_mortgagee_sale, is_coastal_waterfront, has_swimming_pool, is_private_listing, rates, rates_period; rentals add available_from, pets_allowed, smokers_allowed, bond, max_tenants, furnished, apply_url, viewing_url; private listings add private_owner{name, email, details}, description, price_history[]{from, to, changed_at}, features{garages, carports, pool, other}, schools[]{name, school_id, in_zone, has_zone, distance, latitude, longitude}, early_childhood[]{…}, broadband, additional_links[], call_to_action_links[], whiteware, furnishing_details, app_share_url}, property{…} (include_property)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"43166838"}},{"name":"property","description":"A property's record on realestate.co.nz (the address, whether or not it is listed now): every REINZ sale with price, date, method and days to sell; council valuations (capital, land and improvements value) over time; the site's estimated value range with its confidence and monthly history; past and current listings with the agent's listing price; the latest rental listing (weekly rent); bedrooms, bathrooms, land and floor area, building age; nearby recent sales.","required_params":["property_id"],"optional_params":["max_rotations"],"params":[{"name":"property_id","type":"string","required":true,"description":"Property id (every listing returns property_id; sold rows too) or a realestate.co.nz/property/... URL.","on_invalid":"reject","example":"hf1bc20mc","aliases":["id","url","short_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"property{property_id, url, address{…}, land_use_code, bedrooms, bathrooms, ensuites, toilets, parking{}, land_area, land_area_unit, land_area_m2, floor_area, floor_area_unit, floor_area_m2, building_age, has_swimming_pool, image, latest_sale{date, price, net_price, price_display, method, days_to_sell, is_settled, property_category, capital_value_at_sale, comments, sale_id}, council_valuation{capital_value, land_value, improvements_value, valuation_date, recorded_at}, estimate{low, mid, high, confidence (1-5), as_of, computed_at}, current_listings[], latest_rent_listing{listing_id, url, title, category, status, listing_price (weekly rent), listed_at, days_listed}, sold_within_last_year, sales_history[], council_valuation_history[], estimate_history[], listing_history[]{listing_id, url, title, category, status, listing_price, listed_at, days_listed, image}, latest_sale_listing, nearby_recent_sales[]{address, property_id, sale_date, sale_price, days_to_sell, bedrooms, bathrooms, floor_area_m2, land_area_m2}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"property_id":"hf1bc20mc"}},{"name":"sold","description":"Recently sold properties in a region, district or suburb, from the REINZ sale records the site publishes: sale price, sale date, sale method, days to sell, plus each property's council valuation, the site's estimate, bedrooms, bathrooms, land and floor area. Filter by sale date, sale price, bedrooms, bathrooms, land and floor area; sort by sale date, sale price or estimate.","required_params":[],"optional_params":["region","district","suburb","sold_after","sold_before","price_min","price_max","bedrooms_min","bedrooms_max","bathrooms_min","bathrooms_max","land_area_min","land_area_max","floor_area_min","floor_area_max","sort","page","limit","max_rotations"],"params":[{"name":"region","type":"array","required":false,"description":"Region name or id (Auckland = 35, Wellington, Canterbury, Waikato, Bay of Plenty …). One or several. `locations` lists every region, district and suburb with ids.","on_invalid":"reject","example":"Auckland","aliases":["regions","region_id"]},{"name":"district","type":"array","required":false,"description":"District name or id (Auckland City, North Shore City, Wellington City, Christchurch City …). One or several.","on_invalid":"reject","example":"Auckland City","aliases":["districts","district_id"]},{"name":"suburb","type":"array","required":false,"description":"Suburb name, id or fq_slug. One or several. A name used by several suburbs (e.g. Hillcrest) is chosen by the region/district you also give, otherwise the request lists the candidates. The narrowest level wins: region=Auckland + suburb=Ponsonby searches Ponsonby.","on_invalid":"reject","example":"Ponsonby","aliases":["suburbs","suburb_id"]},{"name":"sold_after","type":"string","required":false,"description":"Earliest sale date, YYYY-MM-DD (default: one year ago).","on_invalid":"reject","example":"2026-01-01"},{"name":"sold_before","type":"string","required":false,"description":"Latest sale date, YYYY-MM-DD.","on_invalid":"reject"},{"name":"price_min","type":"number","required":false,"description":"Lowest sale price, NZD.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest sale price, NZD.","on_invalid":"reject","minimum":0},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms.","on_invalid":"reject","example":3,"minimum":0,"maximum":20},{"name":"bedrooms_max","type":"integer","required":false,"description":"Most bedrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bathrooms_min","type":"integer","required":false,"description":"Fewest bathrooms.","on_invalid":"reject","example":2,"minimum":0,"maximum":20},{"name":"bathrooms_max","type":"integer","required":false,"description":"Most bathrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"land_area_min","type":"number","required":false,"description":"Smallest land area in square metres (1 ha = 10000).","on_invalid":"reject","minimum":0},{"name":"land_area_max","type":"number","required":false,"description":"Largest land area in square metres.","on_invalid":"reject","minimum":0},{"name":"floor_area_min","type":"number","required":false,"description":"Smallest floor area in square metres.","on_invalid":"reject","minimum":0},{"name":"floor_area_max","type":"number","required":false,"description":"Largest floor area in square metres.","on_invalid":"reject","minimum":0},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"latest_sale","label":"Most recent sale first"},{"value":"oldest_sale","label":"Oldest sale first"},{"value":"highest_sold_price","label":"Highest sale price first"},{"value":"lowest_sold_price","label":"Lowest sale price first"},{"value":"highest_estimate","label":"Highest estimated value first"},{"value":"lowest_estimate","label":"Lowest estimated value first"}],"default":"latest_sale"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. page x limit can reach 10,000 results.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Properties per page, 1-50 (default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{property_id, url, address{…}, land_use_code, bedrooms, bathrooms, parking{}, land_area, land_area_m2, floor_area, floor_area_m2, building_age, image, latest_sale{date, price, price_display, method, days_to_sell, is_settled, …}, council_valuation{capital_value, land_value, improvements_value, valuation_date}, estimate{low, mid, high, confidence, as_of}, current_listings[], latest_rent_listing{…}}, count, total_results (the site caps it at 10,000), page, limit, has_more, filters{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"suburb":"Ahipara","sold_after":"2025-01-01"}},{"name":"locations","description":"realestate.co.nz's own region → district → suburb list with ids: find a place by name (query), list a region's districts or a district's suburbs, or every region. Use the ids or names in search and sold.","required_params":[],"optional_params":["query","region","district","limit","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Place name or part of it; returns matching regions, districts and suburbs.","on_invalid":"reject","example":"Hillcrest","aliases":["q","name"]},{"name":"region","type":"string","required":false,"description":"List this region's districts.","on_invalid":"reject","example":"Auckland"},{"name":"district","type":"string","required":false,"description":"List this district's suburbs.","on_invalid":"reject","example":"North Shore City"},{"name":"limit","type":"integer","required":false,"description":"Most results for a query (1-500).","on_invalid":"reject","default":50,"minimum":1,"maximum":500},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{type (region|district|suburb), id, name, slug, fq_slug, district_id, district, region_id, region}, count, total_matches","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Hillcrest"}},{"name":"agent","description":"A real-estate agent's profile on realestate.co.nz: name, phone, mobile, email, photo, agency, licence class, how many listings they have now / recently / in total, by category and suburb, and the suburbs they work. Their listings: search with agent_id.","required_params":["agent_id"],"optional_params":["max_rotations"],"params":[{"name":"agent_id","type":"string","required":true,"description":"Agent id (search and listing rows return agents[].agent_id) or the realestate.co.nz/agent/... URL.","on_invalid":"reject","example":"1861787","aliases":["id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"agent{agent_id, name, first_name, last_name, phone, mobile, email, image, profile_url, status, is_live, licence_class, agent_number, agency{agency_id, name, …}, agency_ids[], listing_count, recent_listing_count, all_time_listing_count, listings_by_category{}, active_listings[]{suburb, category, sub_type, count}, suburbs[], is_featured, updated_at, salesforce_id, salesforce_contact_id}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"agent_id":"1861787"}},{"name":"agency","description":"A real-estate agency office on realestate.co.nz: name, trading name, phone, email, website, street and postal address, logo, listing counts by category, the suburbs it works, and every agent with phone, mobile and email. Its listings: search with agency_id.","required_params":["agency_id"],"optional_params":["max_rotations"],"params":[{"name":"agency_id","type":"string","required":true,"description":"Agency office id (rows return agency.agency_id) or the realestate.co.nz/office/... URL.","on_invalid":"reject","example":"267139","aliases":["office_id","id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"agency{agency_id, name, trading_name, phone, email, enquiry_email, website, logo, brand_colour, profile_url, physical_address{}, postal_address{}, listing_count, recent_listing_count, all_time_listing_count, listings_by_category{}, categories[], suburbs[], is_property_manager, is_business_broker, subscription_type, updated_at, agents[]{agent_id, name, phone, mobile, email, image, listing_count, profile_url}, agent_count}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"agency_id":"267139"}}]},{"name":"realtor","category":{"id":"real-estate","title":"Real Estate"},"title":"Realtor.com API scraper — US real estate data: for-sale, for-rent and recently-sold listings with full filters (price, beds, baths, property type, sqft, lot, year built, HOA, days-on-market, keywords), complete property detail with RealEstimate value, price & tax history, schools, photos, features and listing agent, multi-source home-value estimates (Collateral Analytics / Quantarium / Cotality), local market trends, location autocomplete and comparable homes — no API key required","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/realtor/v1","spec_available":true,"actions":[{"name":"search","description":"Search Realtor.com listings by location (for sale / for rent / recently sold), with structured filters: price, beds, baths, property type, sqft, lot size, year built, HOA, days-on-market and keywords. Paginate with offset.","required_params":["location"],"optional_params":["status","sort","limit","offset","map_bounds","price_min","price_max","beds_min","beds_max","baths_min","home_type","sqft_min","sqft_max","lot_min","lot_max","year_built_min","year_built_max","max_hoa","days_on_max","keywords"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — a US city, ZIP, neighborhood, county or state ('Austin, TX', '78704', 'Brooklyn, NY', 'TX').","on_invalid":"reject","example":"Austin, TX","aliases":["loc"]},{"name":"status","type":"enum","required":false,"description":"Listing status (synonyms rent/sale/recently_sold also accepted).","on_invalid":"ignore","allowed_values":[{"value":"for_sale","label":"For sale"},{"value":"for_rent","label":"For rent"},{"value":"sold","label":"Recently sold"}],"default":"for_sale","example":"for_sale"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Newest listed"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"sold_date","label":"Most recently sold"}],"default":"newest","example":"newest"},{"name":"limit","type":"integer","required":false,"description":"Listings to return per call (1-200).","on_invalid":"ignore","default":42,"example":42,"minimum":1,"maximum":200},{"name":"offset","type":"integer","required":false,"description":"Pagination offset — skip this many results (page through with offset += limit).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"map_bounds","type":"object","required":false,"description":"Search an exact map viewport {west, east, south, north} in decimal degrees (alternative/addition to location).","on_invalid":"ignore","example":{"west":-97.78,"east":-97.7,"south":30.24,"north":30.3},"aliases":["bounds"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in USD (sale price, or monthly rent for status=for_rent).","on_invalid":"ignore","example":300000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in USD.","on_invalid":"ignore","example":700000,"minimum":0},{"name":"beds_min","type":"integer","required":false,"description":"Minimum bedrooms (3 = 3+).","on_invalid":"ignore","example":3,"minimum":0,"maximum":10,"aliases":["beds"]},{"name":"beds_max","type":"integer","required":false,"description":"Maximum bedrooms.","on_invalid":"ignore","example":5,"minimum":0,"maximum":10},{"name":"baths_min","type":"number","required":false,"description":"Minimum bathrooms (2 = 2+).","on_invalid":"ignore","example":2,"minimum":0,"maximum":10,"aliases":["baths"]},{"name":"home_type","type":"string","required":false,"description":"Property type — one or several comma-separated. One of: single_family, condos, townhomes, multi_family, mobile, land, farm (e.g. 'single_family,condos').","on_invalid":"ignore","example":"single_family"},{"name":"sqft_min","type":"integer","required":false,"description":"Minimum living area in square feet.","on_invalid":"ignore","example":1500,"minimum":0},{"name":"sqft_max","type":"integer","required":false,"description":"Maximum living area in square feet.","on_invalid":"ignore","example":3000,"minimum":0},{"name":"lot_min","type":"integer","required":false,"description":"Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).","on_invalid":"ignore","example":5000,"minimum":0},{"name":"lot_max","type":"integer","required":false,"description":"Maximum lot size in square feet.","on_invalid":"ignore","example":43560,"minimum":0},{"name":"year_built_min","type":"integer","required":false,"description":"Earliest year built.","on_invalid":"ignore","example":2010,"minimum":1800,"maximum":2030},{"name":"year_built_max","type":"integer","required":false,"description":"Latest year built.","on_invalid":"ignore","example":2024,"minimum":1800,"maximum":2030},{"name":"max_hoa","type":"integer","required":false,"description":"Maximum monthly HOA fee in USD.","on_invalid":"ignore","example":100,"minimum":0},{"name":"days_on_max","type":"integer","required":false,"description":"Only listings on Realtor.com at most this many days (7 = new this week).","on_invalid":"ignore","example":7,"minimum":1},{"name":"keywords","type":"string","required":false,"description":"Free-text listing keyword filter, comma-separated ('pool', 'waterfront', 'guest house').","on_invalid":"ignore","example":"pool"}],"returns":"results[]{property_id, url, list_price_usd, status, property_type, beds, baths, sqft, lot_sqft, year_built, realestimate_usd, address_line, city, state_code, postal_code, latitude, longitude, primary_photo_url, flags} + total + count + filters_applied","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX"}},{"name":"detail","description":"Full property record by property_id: RealEstimate value (+ range), price history, tax history, schools (with ratings), photos, interior/exterior feature groups, HOA, status flags, monthly-payment estimate and the listing agent/broker.","required_params":["property_id"],"optional_params":[],"params":[{"name":"property_id","type":"string","required":true,"description":"Realtor.com property id (from a search result's property_id, or the M-code in a listing URL).","on_invalid":"reject","example":"7211899596","aliases":["id"]}],"returns":"property{property_id, address_line, list_price_usd, realestimate_usd, realestimate_range_usd, beds, baths, sqft, lot_sqft, year_built, description_text, hoa_fee_usd, photos[], schools[], price_history[], tax_history[], feature_groups[], flags, advertisers[]} (agent email requires include_pii)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"property_id":"7211899596"}},{"name":"estimates","description":"Multi-source home-value estimates (AVMs) for a property — Realtor.com surfaces several independent valuation models (Collateral Analytics, Quantarium, Cotality/CoreLogic), each with its own value and high/low range. Returns the full set plus the best estimate. The valuation surface for pricing a home.","required_params":["property_id"],"optional_params":[],"params":[{"name":"property_id","type":"string","required":true,"description":"Realtor.com property id (from a search result's property_id, or the M-code in a listing URL).","on_invalid":"reject","example":"7211899596","aliases":["id"]}],"returns":"property_id, estimates[]{source_name, source_type, estimate_usd, estimate_high_usd, estimate_low_usd, date, is_best}, best_estimate{}, count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"property_id":"7211899596"}},{"name":"sold","description":"Recently-sold homes by location (or map bounds), with the same structured filters as search — the comparable-sales surface for valuing a home.","required_params":["location"],"optional_params":["sort","limit","offset","map_bounds","price_min","price_max","beds_min","beds_max","baths_min","home_type","sqft_min","sqft_max","lot_min","lot_max","year_built_min","year_built_max","max_hoa","days_on_max","keywords"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — a US city, ZIP, neighborhood, county or state ('Austin, TX', '78704', 'Brooklyn, NY', 'TX').","on_invalid":"reject","example":"Austin, TX","aliases":["loc"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Newest listed"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"sold_date","label":"Most recently sold"}],"default":"newest","example":"newest"},{"name":"limit","type":"integer","required":false,"description":"Listings to return per call (1-200).","on_invalid":"ignore","default":42,"example":42,"minimum":1,"maximum":200},{"name":"offset","type":"integer","required":false,"description":"Pagination offset — skip this many results (page through with offset += limit).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"map_bounds","type":"object","required":false,"description":"Search an exact map viewport {west, east, south, north} in decimal degrees (alternative/addition to location).","on_invalid":"ignore","example":{"west":-97.78,"east":-97.7,"south":30.24,"north":30.3},"aliases":["bounds"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in USD (sale price, or monthly rent for status=for_rent).","on_invalid":"ignore","example":300000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in USD.","on_invalid":"ignore","example":700000,"minimum":0},{"name":"beds_min","type":"integer","required":false,"description":"Minimum bedrooms (3 = 3+).","on_invalid":"ignore","example":3,"minimum":0,"maximum":10,"aliases":["beds"]},{"name":"beds_max","type":"integer","required":false,"description":"Maximum bedrooms.","on_invalid":"ignore","example":5,"minimum":0,"maximum":10},{"name":"baths_min","type":"number","required":false,"description":"Minimum bathrooms (2 = 2+).","on_invalid":"ignore","example":2,"minimum":0,"maximum":10,"aliases":["baths"]},{"name":"home_type","type":"string","required":false,"description":"Property type — one or several comma-separated. One of: single_family, condos, townhomes, multi_family, mobile, land, farm (e.g. 'single_family,condos').","on_invalid":"ignore","example":"single_family"},{"name":"sqft_min","type":"integer","required":false,"description":"Minimum living area in square feet.","on_invalid":"ignore","example":1500,"minimum":0},{"name":"sqft_max","type":"integer","required":false,"description":"Maximum living area in square feet.","on_invalid":"ignore","example":3000,"minimum":0},{"name":"lot_min","type":"integer","required":false,"description":"Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).","on_invalid":"ignore","example":5000,"minimum":0},{"name":"lot_max","type":"integer","required":false,"description":"Maximum lot size in square feet.","on_invalid":"ignore","example":43560,"minimum":0},{"name":"year_built_min","type":"integer","required":false,"description":"Earliest year built.","on_invalid":"ignore","example":2010,"minimum":1800,"maximum":2030},{"name":"year_built_max","type":"integer","required":false,"description":"Latest year built.","on_invalid":"ignore","example":2024,"minimum":1800,"maximum":2030},{"name":"max_hoa","type":"integer","required":false,"description":"Maximum monthly HOA fee in USD.","on_invalid":"ignore","example":100,"minimum":0},{"name":"days_on_max","type":"integer","required":false,"description":"Only listings on Realtor.com at most this many days (7 = new this week).","on_invalid":"ignore","example":7,"minimum":1},{"name":"keywords","type":"string","required":false,"description":"Free-text listing keyword filter, comma-separated ('pool', 'waterfront', 'guest house').","on_invalid":"ignore","example":"pool"}],"returns":"results[] (same card shape; status=sold, last_sold_price_usd / last_sold_date) + total + count + filters_applied","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX"}},{"name":"market_trends","description":"Local housing-market intelligence for a US city or ZIP — median listing price, median sold price, median price per square foot, median days-on-market and median rent. The market-overview surface for a neighborhood or metro.","required_params":["location"],"optional_params":[],"params":[{"name":"location","type":"string","required":true,"description":"Market area to report on — a US city ('Austin, TX', 'Las Vegas, NV') or a 5-digit ZIP code ('78704').","on_invalid":"reject","example":"Austin, TX","aliases":["loc","area"]}],"returns":"slug_id, location, geo_type, market{median_listing_price_usd, median_sold_price_usd, median_price_per_sqft_usd, median_days_on_market, median_rent_price_usd}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"Austin, TX"}},{"name":"comps","description":"Comparable homes near a property — synthesized from recently-sold and active listings around the subject's coordinates, scored by distance, beds and sqft.","required_params":["property_id"],"optional_params":["radius_miles","max_comps","include_active"],"params":[{"name":"property_id","type":"string","required":true,"description":"Realtor.com property id (from a search result's property_id, or the M-code in a listing URL).","on_invalid":"reject","example":"7211899596","aliases":["id"]},{"name":"radius_miles","type":"number","required":false,"description":"Search radius around the subject in miles.","on_invalid":"ignore","default":2.0,"example":2.0,"minimum":0.25,"maximum":25},{"name":"max_comps","type":"integer","required":false,"description":"How many comparables to return.","on_invalid":"ignore","default":12,"example":12,"minimum":1,"maximum":50},{"name":"include_active","type":"boolean","required":false,"description":"Also include currently-active listings as comps (default: recently-sold only).","on_invalid":"reject","default":false,"example":false}],"returns":"subject{property_id, address_line, list_price_usd, beds, baths, sqft} + comps[]{property_id, address_line, last_sold_price_usd, last_sold_date, list_price_usd, beds, baths, sqft, distance_miles} + radius_miles + method","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":2},"example_params":{"property_id":"7211899596"}},{"name":"autocomplete","description":"Location autocomplete — suggest Realtor.com cities, ZIPs, neighborhoods, counties and schools for a free-text query. Resolve a fuzzy term before searching, or power a search box.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text location to autocomplete — a partial city, ZIP, neighborhood, county or school ('Austi', '787', 'Brookl').","on_invalid":"reject","example":"Austi","aliases":["q","input","location"]},{"name":"limit","type":"integer","required":false,"description":"Max suggestions to return (1-25).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":25}],"returns":"suggestions[]{id, type, name, city, state_code, postal_code, neighborhood, latitude, longitude, geo_id} + count + query","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Austin"}}]},{"name":"recall","category":{"id":"utilities","title":"Utilities & AI"},"title":"EU Product Recall & Safety Alert API — search and track dangerous-product alerts from the EU Safety Gate (RAPEX): search with filters, single alert detail, newest weekly report and the category/risk taxonomy","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/recall/v1","spec_available":true,"actions":[{"name":"eu_recall","description":"One EU Safety Gate (RAPEX) recall/alert by notification id — product, risk, measure, traceability, reacting countries.","required_params":["id"],"optional_params":["language"],"params":[{"name":"id","type":"integer","required":true,"description":"EU Safety Gate notification id (from a safety-gate-alerts URL).","on_invalid":"reject","example":10000308,"aliases":["notification_id"]},{"name":"language","type":"string","required":false,"description":"Preferred language for the EU notification text (e.g. en, de, fr).","on_invalid":"ignore","default":"en","example":"en","aliases":["lang"]}],"returns":"recall{} — normalized EU notification (source=EU Safety Gate)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"id":10000308}},{"name":"eu_recalls","description":"Search/list EU Safety Gate alerts: pages over recent weekly reports (open-data XML) and filters by query, product category, country and risk type, with skip/limit pagination. Each alert carries product, barcode, brand, risk, measures, notifying country and country of origin.","required_params":[],"optional_params":["query","category","country","risk_type","weeks","limit","skip"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text filter over the EU alert's product name/description, brand, category and risk description (case-insensitive substring).","on_invalid":"ignore","example":"toy","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"EU Safety Gate product category to filter on (e.g. Toys, Motor vehicles, Electrical appliances). See the `categories` action for the full enum. Substring match.","on_invalid":"ignore","example":"Toys","aliases":["product_category"]},{"name":"country","type":"string","required":false,"description":"Filter to alerts whose notifying country OR country of origin matches (e.g. Germany, China). Substring, case-insensitive.","on_invalid":"ignore","example":"Germany"},{"name":"risk_type","type":"string","required":false,"description":"Filter by risk type / hazard (e.g. Chemical, Choking, Suffocation, Injuries, Electric shock). Substring over the alert's risk types.","on_invalid":"ignore","example":"Chemical","aliases":["risk"]},{"name":"weeks","type":"integer","required":false,"description":"How many of the most-recent weekly reports to scan (1-12; each carries ~80-100 alerts). Larger = more coverage + more upstream fetches.","on_invalid":"ignore","default":12,"example":8,"aliases":["reports"]},{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 20). Larger values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["maxResults","max_results","count_limit"]},{"name":"skip","type":"integer","required":false,"description":"Pagination offset (skip N results). Page forward with next_skip.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":25000,"aliases":["offset"]}],"returns":"recalls[] (normalized EU alerts), total, reports_scanned, weeks_window, newest_report{}, filters{}, skip, limit, has_more, next_skip","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"Toys","weeks":2,"limit":3}},{"name":"eu_latest","description":"The newest EU Safety Gate weekly report fully expanded into its ~80-100 product alerts (newest-published recalls across the EU/EEA).","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"Results per page (1-100, default 20). Larger values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["maxResults","max_results","count_limit"]}],"returns":"report{reference,week,year,publication_date}, recalls[], total_in_report","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":3}},{"name":"categories","description":"The EU Safety Gate taxonomy: product-category & risk-type enums + the number of countries in the EU country list (reference values for the eu_recalls filters).","required_params":[],"optional_params":[],"params":[],"returns":"eu_product_categories[]{key,name}, eu_risk_types[]{key,name}, eu_countries_count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"reclameaqui","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"ReclameAqui API (Brazil) — company reputation, ratings, statistics and consumer complaints from ReclameAqui","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/reclameaqui/v1","spec_available":true,"actions":[{"name":"company/search","description":"resolve a company by name/slug","required_params":[],"optional_params":["query","slug"],"params":[{"name":"query","type":"string","required":false,"description":"Company name (resolved to a slug) or, for complaints/search, the keyword to match in complaint titles/bodies.","on_invalid":"reject","example":"nubank"},{"name":"slug","type":"string","required":false,"description":"ReclameAqui company shortname/slug (e.g. 'nubank'). Provide this OR query / company_id.","on_invalid":"reject","example":"nubank"}],"returns":"companies[]{name,slug,id,reputation,...} (the resolved company)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nubank"}},{"name":"company/detail","description":"company profile + reputation index","required_params":[],"optional_params":["slug","company_id"],"params":[{"name":"slug","type":"string","required":false,"description":"ReclameAqui company shortname/slug (e.g. 'nubank'). Provide this OR query / company_id.","on_invalid":"reject","example":"nubank"},{"name":"company_id","type":"string","required":false,"description":"ReclameAqui numeric company id (from company/detail or company/search).","on_invalid":"reject","example":"62820"}],"returns":"company{} — profile + reputation index + pageviews; raw payload","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"nubank"}},{"name":"company/stats","description":"reputation metrics + main/performance problems","required_params":[],"optional_params":["slug","company_id"],"params":[{"name":"slug","type":"string","required":false,"description":"ReclameAqui company shortname/slug (e.g. 'nubank'). Provide this OR query / company_id.","on_invalid":"reject","example":"nubank"},{"name":"company_id","type":"string","required":false,"description":"ReclameAqui numeric company id (from company/detail or company/search).","on_invalid":"reject","example":"62820"}],"returns":"stats{pageviews,main_problems,performance_problems_6m}, unavailable[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"nubank"}},{"name":"company/complaints","description":"paginated complaints for a company","required_params":["company_id"],"optional_params":["status","statuses","limit","page_size","date_from","date_to","company_slug","company_name"],"params":[{"name":"company_id","type":"string","required":true,"description":"ReclameAqui numeric company id (from company/detail or company/search).","on_invalid":"reject","example":"62820"},{"name":"status","type":"enum","required":false,"description":"Complaint status to page through (default ANSWERED). Use `statuses` to combine several.","on_invalid":"ignore","allowed_values":[{"value":"ANSWERED","label":"Answered by the company (default)"},{"value":"EVALUATED","label":"Evaluated by the consumer"},{"value":"NOT_ANSWERED","label":"Not answered"},{"value":"PROCESSING","label":"Awaiting / in progress"}],"default":"ANSWERED","example":"ANSWERED"},{"name":"statuses","type":"array","required":false,"description":"Optional list of statuses to fetch (overrides `status`).","on_invalid":"ignore","example":["ANSWERED","EVALUATED"]},{"name":"limit","type":"integer","required":false,"description":"Maximum complaints to return (public cap is 255).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":255},{"name":"page_size","type":"integer","required":false,"description":"Complaints fetched per upstream page (tuning knob).","on_invalid":"ignore","default":5,"example":5,"minimum":1,"maximum":50},{"name":"date_from","type":"string","required":false,"description":"Only include complaints on/after this date (YYYY-MM-DD).","on_invalid":"ignore","example":"2024-01-01"},{"name":"date_to","type":"string","required":false,"description":"Only include complaints on/before this date (YYYY-MM-DD).","on_invalid":"ignore","example":"2024-12-31"},{"name":"company_slug","type":"string","required":false,"description":"Company slug (used to build the complaint URL / label rows).","on_invalid":"reject","example":"nubank"},{"name":"company_name","type":"string","required":false,"description":"Optional company display name to stamp onto returned complaint rows.","on_invalid":"reject","example":"Nubank"}],"returns":"complaints[] (deduplicated, date-filtered; personal data is redacted by default), with meta.stop_reason, pages fetched and cap info","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"company_id":"88850","company_slug":"nubank","limit":10}},{"name":"complaints/search","description":"search complaints by keyword","required_params":["query"],"optional_params":["limit","page_size","date_from","date_to"],"params":[{"name":"query","type":"string","required":true,"description":"Company name (resolved to a slug) or, for complaints/search, the keyword to match in complaint titles/bodies.","on_invalid":"reject","example":"banco"},{"name":"limit","type":"integer","required":false,"description":"Maximum complaints to return (public cap is 255).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":255},{"name":"page_size","type":"integer","required":false,"description":"Complaints fetched per upstream page (tuning knob).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"date_from","type":"string","required":false,"description":"Only include complaints on/after this date (YYYY-MM-DD).","on_invalid":"ignore","example":"2024-01-01"},{"name":"date_to","type":"string","required":false,"description":"Only include complaints on/before this date (YYYY-MM-DD).","on_invalid":"ignore","example":"2024-12-31"}],"returns":"query, complaints[]{title,description,date,company,...}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"query":"banco","limit":10}},{"name":"complaint/detail","description":"single complaint thread (HTML timeline)","required_params":["company_slug","complaint_url_slug"],"optional_params":[],"params":[{"name":"company_slug","type":"string","required":true,"description":"Company slug (used to build the complaint URL / label rows).","on_invalid":"reject","example":"nubank"},{"name":"complaint_url_slug","type":"string","required":true,"description":"The complaint's URL slug (the last path segment of its ReclameAqui page).","on_invalid":"reject","example":"meu-cartao-foi-bloqueado_AbCdEf"}],"returns":"detail{} — the full complaint thread (title, body, timeline, status)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"company_slug":"nubank","complaint_url_slug":"meu-cartao-foi-bloqueado_AbCdEf"}}]},{"name":"reddit","category":{"id":"social","title":"Social Media"},"title":"Reddit API — subreddit posts, comments, search, user profiles, trending & community data from reddit.com (no account required)","version":"0.6.6","pii_redact_default":false,"mint_reusable":null,"base_path":"/reddit/v1","spec_available":true,"actions":[{"name":"subreddit_posts","description":"Posts in a subreddit, ranked by `sort`. Returns title/author/score/comment-count. Supports deep paging (`page`) and `flair` filtering.","required_params":["subreddit"],"optional_params":["sub","sort","time","limit","after","page","cursor","flair","flair_exact","source"],"params":[{"name":"subreddit","type":"string","required":true,"description":"Subreddit name (without 'r/').","on_invalid":"reject","example":"python","aliases":["sub"]},{"name":"sort","type":"enum","required":false,"description":"How posts are ranked.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hot"},{"value":"new","label":"Newest"},{"value":"top","label":"Top"},{"value":"rising","label":"Rising"},{"value":"controversial","label":"Controversial"}],"default":"hot"},{"name":"time","type":"enum","required":false,"description":"Time window — applies ONLY when sort = top or controversial.","on_invalid":"reject","allowed_values":[{"value":"hour","label":"Past hour"},{"value":"day","label":"Past day"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"},{"value":"year","label":"Past year"},{"value":"all","label":"All time"}],"default":"day"},{"name":"limit","type":"integer","required":false,"description":"How many posts to return (1–100).","on_invalid":"reject","default":10,"minimum":1,"maximum":100},{"name":"flair","type":"string","required":false,"description":"Filter to one post flair, e.g. 'Discussion' (case-insensitive, live source only). Matches flairs that CONTAIN the text ('Hiring' also keeps 'Hiring - Open'); set flair_exact=true for the whole flair only.","on_invalid":"ignore","example":"Discussion"},{"name":"flair_exact","type":"boolean","required":false,"description":"With `flair`: keep only posts whose flair is exactly that text (case-insensitive), not flairs that merely contain it.","on_invalid":"ignore","default":false},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"},{"name":"page","type":"integer","required":false,"description":"Deep paging: page 2 returns the NEXT batch after page 1 (server chains cursors for you, 1–20). Live source only — archive sources page via after_utc/before_utc.","on_invalid":"ignore","default":1,"minimum":1,"maximum":20},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore","aliases":["after"]}],"returns":"posts[]{title, author, author_fullname, score, num_comments, created_utc, url, id, video{url, hls_url, dash_url, duration, width, height, has_audio}, gallery[]{url, width, height, type, caption}}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"subreddit":"python","limit":10}},{"name":"multi_subreddit_posts","description":"ONE merged newest-first feed across a whole watchlist of subreddits — pass up to 5000 names in a single call instead of polling each one. Built for near-real-time monitoring: posts show up seconds after they go live, `since_utc` returns only what is new since your last poll.","required_params":["subreddits"],"optional_params":["subs","subreddit","sub","sort","time","limit","since_utc","max_pages","after","cursor"],"params":[{"name":"subreddits","type":"string","required":true,"description":"Subreddit names to merge, comma-separated (no 'r/'). Up to 5000 — long lists are split across parallel fetches for you and returned as one feed.","on_invalid":"reject","example":"python,rust,golang","aliases":["subs","subreddit","sub"]},{"name":"sort","type":"enum","required":false,"description":"How posts are ranked.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Newest"},{"value":"hot","label":"Hot"},{"value":"rising","label":"Rising"},{"value":"top","label":"Top"},{"value":"controversial","label":"Controversial"}],"default":"new"},{"name":"time","type":"enum","required":false,"description":"Time window — applies ONLY when sort = top or controversial.","on_invalid":"reject","allowed_values":[{"value":"hour","label":"Past hour"},{"value":"day","label":"Past day"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"},{"value":"year","label":"Past year"},{"value":"all","label":"All time"}],"default":"day"},{"name":"limit","type":"integer","required":false,"description":"How many posts to return after merging (1–500).","on_invalid":"reject","default":100,"minimum":1,"maximum":500},{"name":"since_utc","type":"integer","required":false,"description":"Polling mode: return ONLY posts created after this unix time. Pass the previous response's newest_utc to get just the new ones.","on_invalid":"ignore"},{"name":"max_pages","type":"integer","required":false,"description":"Fetch this many pages per group (1–5) — raise it when a poll interval is long enough that 100 posts may not cover it.","on_invalid":"reject","default":1,"minimum":1,"maximum":5},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore","aliases":["after"]}],"returns":"posts[]{title, author, author_fullname, subreddit, score, num_comments, created_utc, url, id}, subreddits_requested, shards, newest_utc, oldest_utc","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":5},"example_params":{"subreddits":"python,rust,golang","limit":25}},{"name":"post_comments","description":"Threaded comments for a post. Returns author/body/score per comment.","required_params":["post_id"],"optional_params":["id","url","sort","limit","depth","source"],"params":[{"name":"post_id","type":"string","required":true,"description":"Post ID or full Reddit URL.","on_invalid":"reject","example":"f08dxb","aliases":["id","url"]},{"name":"sort","type":"enum","required":false,"description":"Comment ordering.","on_invalid":"reject","allowed_values":[{"value":"best","label":"Best (Reddit's default)"},{"value":"top","label":"Top"},{"value":"new","label":"Newest"},{"value":"controversial","label":"Controversial"},{"value":"old","label":"Oldest"},{"value":"qa","label":"Q&A"}],"default":"best"},{"name":"limit","type":"integer","required":false,"description":"How many comments (1–500). Up to ~500 per call; the rest of a big thread comes back as more_ids.","on_invalid":"reject","default":50,"minimum":1,"maximum":500},{"name":"depth","type":"integer","required":false,"description":"Comment-tree depth (1–50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"}],"returns":"comments[]{author, author_fullname, body, score, created_utc, depth, id, replies[]}; more_ids[] (a token for EVERY collapsed branch and for the rest of the thread) + has_more: feed more_ids into load_more_comments for the full tree","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"post_id":"f08dxb"}},{"name":"search","description":"Search posts, comments, or users by `q` and/or `subreddit`/`author`. Returns results[]. Comment search reads Reddit's own live comment index. Cursor pagination + `flair` filter apply on the live source. An empty result is confirmed before it is returned (meta.empty_retries). The post-search cursor is an opaque offset token (e.g. `OTk=`), not a `t3_` fullname: pass meta.pagination.next_cursor back unchanged, and de-duplicate by `id` when paging a fast-moving `sort=new` query (new posts shift the offsets).","required_params":[],"optional_params":["q","query","subreddit","sub","author","type","sort","time","limit","flair","after","page","cursor","after_utc","before_utc","include_nsfw","source"],"params":[{"name":"q","type":"string","required":false,"description":"Search text. Provide `q` and/or `subreddit`/`author`.","on_invalid":"reject","example":"async","aliases":["query"]},{"name":"subreddit","type":"string","required":false,"description":"Limit the search to one subreddit (optional).","on_invalid":"reject","example":"python","aliases":["sub"]},{"name":"author","type":"string","required":false,"description":"Limit to one author's content (optional).","on_invalid":"reject","example":"spez"},{"name":"type","type":"enum","required":false,"description":"What to search for.","on_invalid":"reject","allowed_values":[{"value":"post","label":"Posts"},{"value":"comment","label":"Comments"},{"value":"user","label":"People / usernames (live source)"}],"default":"post"},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Omitted = newest first (`new`), whether or not `q` is given; pass `relevance` for Reddit's relevance ranking. For type=comment, `relevance` uses Reddit's default comment ranking and `hot` is not applied; ignored for type=user.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"hot","label":"Hot"},{"value":"new","label":"Newest"},{"value":"top","label":"Top"},{"value":"comments","label":"Most comments"}],"default":"new"},{"name":"time","type":"enum","required":false,"description":"Time window: only results from the past hour, day, week, month or year. Works with every sort. Omitted = all time. For type=comment Reddit's comment search has no window of its own, so it is applied to each comment's date (with sort=new the result is complete; with top/relevance it keeps the in-window part of Reddit's all-time ranking). Not applied to type=user.","on_invalid":"reject","allowed_values":[{"value":"hour","label":"Past hour"},{"value":"day","label":"Past day"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"},{"value":"year","label":"Past year"},{"value":"all","label":"All time"}],"default":"all"},{"name":"limit","type":"integer","required":false,"description":"How many results (1–100).","on_invalid":"reject","default":10,"minimum":1,"maximum":100},{"name":"after_utc","type":"integer","required":false,"description":"Only results created AFTER this unix time (optional). For a rolling window prefer `time`; this bound is applied on top of it, so a page can hold fewer than `limit` results.","on_invalid":"ignore"},{"name":"before_utc","type":"integer","required":false,"description":"Only results created BEFORE this unix time (optional; same note as after_utc).","on_invalid":"ignore"},{"name":"include_nsfw","type":"boolean","required":false,"description":"Include over-18 results. Off by default, as on Reddit: without it Reddit leaves every NSFW result out.","on_invalid":"ignore","default":false},{"name":"flair","type":"string","required":false,"description":"Filter to one post flair, e.g. 'Discussion' (case-insensitive, live source only). Matches flairs that CONTAIN the text ('Hiring' also keeps 'Hiring - Open'); set flair_exact=true for the whole flair only.","on_invalid":"ignore","example":"Discussion"},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"},{"name":"page","type":"integer","required":false,"description":"Deep paging: page 2 returns the NEXT batch after page 1 (server chains cursors for you, 1–20). Live source only — archive sources page via after_utc/before_utc.","on_invalid":"ignore","default":1,"minimum":1,"maximum":20},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore","aliases":["after"]}],"returns":"results[]{title, author, author_fullname, subreddit, score, created_utc, url, id, video{...}, gallery[]{...}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"subreddit":"python","limit":10}},{"name":"user","description":"User profile or content. kind=about returns karma and the profile (display name, bio, banner, NSFW flag); submitted/comments list items (with deep paging), and each comment carries the title and link of the post it was left on. Reddit keeps about the last 1,000 items of a user's listing and leaves removed ones out, so a listing can end before that.","required_params":["username"],"optional_params":["user","name","kind","limit","after","page","cursor","sort","time","source"],"params":[{"name":"username","type":"string","required":true,"description":"Reddit username (without 'u/').","on_invalid":"reject","example":"spez","aliases":["user","name"]},{"name":"kind","type":"enum","required":false,"description":"What to return.","on_invalid":"reject","allowed_values":[{"value":"about","label":"Profile / karma"},{"value":"submitted","label":"Their posts"},{"value":"comments","label":"Their comments"}],"default":"about"},{"name":"limit","type":"integer","required":false,"description":"How many items (for submitted/comments, 1–100).","on_invalid":"reject","default":25,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Ordering (for submitted/comments).","on_invalid":"reject","allowed_values":[{"value":"new","label":"Newest"},{"value":"top","label":"Top"},{"value":"hot","label":"Hot"},{"value":"controversial","label":"Controversial"}],"default":"new"},{"name":"time","type":"enum","required":false,"description":"Time window — applies ONLY when sort = top or controversial.","on_invalid":"reject","allowed_values":[{"value":"hour","label":"Past hour"},{"value":"day","label":"Past day"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"},{"value":"year","label":"Past year"},{"value":"all","label":"All time"}],"default":"all"},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"},{"name":"page","type":"integer","required":false,"description":"Deep paging: page 2 returns the NEXT batch after page 1 (server chains cursors for you, 1–20). Live source only — archive sources page via after_utc/before_utc.","on_invalid":"ignore","default":1,"minimum":1,"maximum":20},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore","aliases":["after"]}],"returns":"user{name, id, link_karma, comment_karma, total_karma, created_utc, icon_img, display_name, bio, banner_img, over_18, ...} (kind=about) or items[] (posts, or comments with post_title / post_permalink / post_url / post_author)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"spez","kind":"about"}},{"name":"subreddit_about","description":"Subreddit metadata: subscribers, description, created date, banner, status, etc. A private, quarantined or banned subreddit is refused by Reddit: the answer is NOT_FOUND with error.detail.status = private | quarantined | banned (a name that never existed has no status).","required_params":["subreddit"],"optional_params":["sub","source"],"params":[{"name":"subreddit","type":"string","required":true,"description":"Subreddit name (without 'r/').","on_invalid":"reject","example":"python","aliases":["sub"]},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"}],"returns":"subreddit{subscribers, title, public_description, created_utc, over18, banner_img, quarantine, status}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"subreddit":"python"}},{"name":"communities","description":"Search subreddits by name/keyword — find communities matching a term, with each one's subscribers, title, description and over-18 flag.","required_params":["q"],"optional_params":["limit","include_nsfw"],"params":[{"name":"q","type":"string","required":true,"description":"Name or keyword to search subreddits for.","on_invalid":"reject","example":"python","aliases":["query","subreddit","sub"]},{"name":"limit","type":"integer","required":false,"description":"Max communities to return (1–100).","on_invalid":"ignore","default":25,"minimum":1,"maximum":100},{"name":"include_nsfw","type":"boolean","required":false,"description":"Include over-18 results. Off by default, as on Reddit: without it Reddit leaves every NSFW result out.","on_invalid":"ignore","default":false}],"returns":"communities[]{name, title, subscribers, public_description, over18, created_utc, banner_img, status}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"\"python\""}},{"name":"trending","description":"Site-wide discovery — hot/popular posts from r/popular or r/all (what's trending across Reddit right now), or the most-popular communities. No subreddit needed.","required_params":[],"optional_params":["scope","kind","sort","time","limit","flair","flair_exact","geo","after","page","source"],"params":[{"name":"scope","type":"enum","required":false,"description":"Which site-wide feed.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"r/popular — curated front page"},{"value":"all","label":"r/all — everything, unfiltered"}],"default":"popular"},{"name":"kind","type":"enum","required":false,"description":"Return trending posts or the most-popular communities.","on_invalid":"reject","allowed_values":[{"value":"posts","label":"Trending posts"},{"value":"communities","label":"Most-popular subreddits"}],"default":"posts"},{"name":"sort","type":"enum","required":false,"description":"How posts are ranked.","on_invalid":"reject","allowed_values":[{"value":"hot","label":"Hot"},{"value":"new","label":"Newest"},{"value":"top","label":"Top"},{"value":"rising","label":"Rising"},{"value":"controversial","label":"Controversial"}],"default":"hot"},{"name":"time","type":"enum","required":false,"description":"Time window — applies ONLY when sort = top or controversial.","on_invalid":"reject","allowed_values":[{"value":"hour","label":"Past hour"},{"value":"day","label":"Past day"},{"value":"week","label":"Past week"},{"value":"month","label":"Past month"},{"value":"year","label":"Past year"},{"value":"all","label":"All time"}],"default":"day"},{"name":"limit","type":"integer","required":false,"description":"How many to return (1–100).","on_invalid":"reject","default":25,"minimum":1,"maximum":100},{"name":"geo","type":"string","required":false,"description":"r/popular for one country, as on reddit.com: a 2-letter code (US, GB, DE, CA, IN…) or GLOBAL for Reddit's 'Everywhere' feed. Reddit's r/popular is per country; omit it and the feed follows the country of the connection. scope=popular only.","on_invalid":"ignore","example":"US","aliases":["country"]},{"name":"flair","type":"string","required":false,"description":"Filter to one post flair, e.g. 'Discussion' (case-insensitive, live source only). Matches flairs that CONTAIN the text ('Hiring' also keeps 'Hiring - Open'); set flair_exact=true for the whole flair only.","on_invalid":"ignore","example":"Discussion"},{"name":"flair_exact","type":"boolean","required":false,"description":"With `flair`: keep only posts whose flair is exactly that text (case-insensitive), not flairs that merely contain it.","on_invalid":"ignore","default":false},{"name":"page","type":"integer","required":false,"description":"Deep paging: page 2 returns the NEXT batch after page 1 (server chains cursors for you, 1–20). Live source only — archive sources page via after_utc/before_utc.","on_invalid":"ignore","default":1,"minimum":1,"maximum":20},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore","aliases":["after"]},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"}],"returns":"posts[]{title, author, author_fullname, subreddit, score, num_comments, ...} (kind=posts) OR communities[]{name, title, subscribers, ...} (kind=communities)","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":2},"example_params":{"scope":"popular","limit":10}},{"name":"user_search","description":"Find Reddit users by name/keyword — people search. Returns matching profiles with karma, display name, bio, banner, NSFW flag and is_employee. (Same as search with type=user.)","required_params":["q"],"optional_params":["query","username","limit","after","source"],"params":[{"name":"q","type":"string","required":true,"description":"Name or keyword to search users for.","on_invalid":"reject","example":"python","aliases":["query","username"]},{"name":"limit","type":"integer","required":false,"description":"How many users to return (1–100).","on_invalid":"reject","default":25,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore","aliases":["after"]},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"}],"returns":"results[]{name, id, link_karma, comment_karma, total_karma, created_utc, display_name, bio, banner_img, over_18, is_employee, ...}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"python","limit":10}},{"name":"load_more_comments","description":"Expand the collapsed 'more comments' nodes from a post_comments call — pass that response's more_ids to reveal the rest of the thread (build the FULL comment tree).","required_params":["post_id","more_ids"],"optional_params":["link_id","id","url","comment_ids","limit","sort","source"],"params":[{"name":"post_id","type":"string","required":true,"description":"The post these comments belong to (ID or Reddit URL).","on_invalid":"reject","example":"f08dxb","aliases":["link_id","id","url"]},{"name":"more_ids","type":"string","required":true,"description":"Comma-separated more_ids from a post_comments response (its top-level more_ids, or a comment's comments[].more_ids). Each call expands the first few and returns the rest, plus any newly collapsed branches, in more_ids. Plain comment IDs also work: each returns that comment with its replies.","on_invalid":"reject","example":"fh0xhez,fgsriwh,fj9b0aj,fgyfmaj,fgss3kw","aliases":["comment_ids","children"]},{"name":"limit","type":"integer","required":false,"description":"Max more_ids to accept per call (1–100).","on_invalid":"reject","default":100,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Comment ordering.","on_invalid":"reject","allowed_values":[{"value":"best","label":"Best (Reddit's default)"},{"value":"top","label":"Top"},{"value":"new","label":"Newest"},{"value":"controversial","label":"Controversial"},{"value":"old","label":"Oldest"},{"value":"qa","label":"Q&A"}],"default":"best"},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"}],"returns":"comments[]{author, author_fullname, body, score, depth, id, parent_id, ...}, more_ids[] (tokens still to expand: feed them back the same way)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"post_id":"f08dxb","more_ids":"fh0xhez,fgsriwh,fj9b0aj,fgyfmaj,fgss3kw"}},{"name":"subreddit_extras","description":"Public subreddit extras: the community's rules and its wiki page index/content. (Moderator list is mod-only on Reddit and is not available logged-out.)","required_params":["subreddit"],"optional_params":["sub","include","wiki_page","source"],"params":[{"name":"subreddit","type":"string","required":true,"description":"Subreddit name (without 'r/').","on_invalid":"reject","example":"python","aliases":["sub"]},{"name":"include","type":"string","required":false,"description":"Which extras to return: 'rules', 'wiki', or both (comma-separated).","on_invalid":"ignore","default":"rules,wiki","example":"rules,wiki"},{"name":"wiki_page","type":"string","required":false,"description":"Fetch ONE wiki page's full content (e.g. 'index', 'faq'). Omit to list available page names.","on_invalid":"ignore","example":"index"},{"name":"source","type":"enum","required":false,"description":"Which Reddit data source to use — 'auto' picks the best source automatically.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Auto (recommended — best freshness and coverage)"},{"value":"live","label":"Live Reddit (most recent data)"},{"value":"arctic","label":"Reddit archive — great coverage for older posts"},{"value":"pullpush","label":"Deep historical archive — best for old or deleted content"}],"default":"auto"}],"returns":"rules[]{short_name, description, kind, ...}, wiki_pages[] (names) OR wiki_page{page, content_md, revision_date, ...}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"subreddit":"python"}}]},{"name":"redfin","category":{"id":"real-estate","title":"Real Estate"},"title":"Redfin API scraper — US real estate data: for-sale, recently-sold and rental listings with full filters (price, beds, baths, property type, square feet, lot size, year built, HOA, days-on-market) and sorting, complete property detail with Redfin Estimate, price & tax history, schools, photos, amenities and listing agent, comparable homes, market stats and location autocomplete","version":"1.3.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/redfin/v1","spec_available":true,"actions":[{"name":"search","description":"Search Redfin listings by location (for sale / recently sold / for rent) with structured filters: price, beds, baths, property type, square feet, lot size, year built, HOA and days-on-market, plus result sorting.","required_params":["location"],"optional_params":["url","status","sort","max_results","sold_within_days","min_price","max_price","min_beds","max_beds","min_baths","max_baths","min_sqft","max_sqft","min_lot_sqft","max_lot_sqft","min_year_built","max_year_built","max_hoa","max_days_on_market","property_types"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — a US city, neighborhood or county ('Austin, TX', 'Brooklyn, NY'). A 'City, ST' or neighborhood is the most reliable; bare 5-digit ZIPs are best-effort (Redfin maps them through autocomplete).","on_invalid":"reject","example":"Austin, TX"},{"name":"status","type":"enum","required":false,"description":"Listing status to search (case-insensitive).","on_invalid":"ignore","allowed_values":[{"value":"for_sale","label":"For sale"},{"value":"sold","label":"Recently sold"},{"value":"for_rent","label":"For rent"}],"default":"for_sale","example":"for_sale"},{"name":"sort","type":"enum","required":false,"description":"Result ordering (default: Redfin-recommended).","on_invalid":"ignore","allowed_values":[{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"newest","label":"Newest (fewest days on market)"},{"value":"oldest","label":"Oldest (most days on market)"},{"value":"sqft_desc","label":"Largest square footage"},{"value":"sqft_asc","label":"Smallest square footage"},{"value":"beds_desc","label":"Most bedrooms"},{"value":"price_per_sqft_asc","label":"$/sqft: low to high"},{"value":"price_per_sqft_desc","label":"$/sqft: high to low"},{"value":"sold_date","label":"Most recently sold (status=sold)"}],"example":"price_asc"},{"name":"max_results","type":"integer","required":false,"description":"How many listings to return. The engine pages internally — no page/cursor needed.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":10000},{"name":"sold_within_days","type":"integer","required":false,"description":"For status=sold: how far back to look (30/90/180/365 typical).","on_invalid":"ignore","default":90,"example":90,"minimum":1,"maximum":1825},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in USD (list price; sold price for status=sold; monthly rent for status=for_rent).","on_invalid":"reject","example":200000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in USD.","on_invalid":"reject","example":600000,"minimum":0},{"name":"min_beds","type":"integer","required":false,"description":"Minimum bedrooms (3 = 3+).","on_invalid":"reject","example":3,"minimum":0,"maximum":20},{"name":"max_beds","type":"integer","required":false,"description":"Maximum bedrooms.","on_invalid":"reject","example":5,"minimum":0,"maximum":20},{"name":"min_baths","type":"number","required":false,"description":"Minimum bathrooms (2 = 2+).","on_invalid":"reject","example":2,"minimum":0,"maximum":20},{"name":"max_baths","type":"number","required":false,"description":"Maximum bathrooms.","on_invalid":"ignore","example":4,"minimum":0,"maximum":20},{"name":"min_sqft","type":"integer","required":false,"description":"Minimum living area in square feet.","on_invalid":"ignore","example":1500,"minimum":0},{"name":"max_sqft","type":"integer","required":false,"description":"Maximum living area in square feet.","on_invalid":"ignore","example":3000,"minimum":0},{"name":"min_lot_sqft","type":"integer","required":false,"description":"Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).","on_invalid":"ignore","example":5000,"minimum":0,"aliases":["min_lot"]},{"name":"max_lot_sqft","type":"integer","required":false,"description":"Maximum lot size in square feet.","on_invalid":"ignore","example":43560,"minimum":0,"aliases":["max_lot"]},{"name":"min_year_built","type":"integer","required":false,"description":"Earliest year the home was built.","on_invalid":"ignore","example":2010,"minimum":1800,"maximum":2035},{"name":"max_year_built","type":"integer","required":false,"description":"Latest year the home was built.","on_invalid":"ignore","example":2024,"minimum":1800,"maximum":2035},{"name":"max_hoa","type":"integer","required":false,"description":"Maximum monthly HOA fee in USD. Homes with no HOA always pass.","on_invalid":"ignore","example":200,"minimum":0},{"name":"max_days_on_market","type":"integer","required":false,"description":"Only listings on Redfin at most this many days (7 = new this week).","on_invalid":"ignore","example":7,"minimum":0,"aliases":["days_on_max"]},{"name":"property_types","type":"array","required":false,"description":"Only these property types (Redfin type codes — pick from the list; applies to for-sale and rentals, not the sold CSV).","on_invalid":"reject","allowed_values":[{"value":1,"label":"Single Family Residential"},{"value":2,"label":"Condo/Co-op"},{"value":3,"label":"Townhouse"},{"value":4,"label":"Multi-Family (2-4 Unit)"},{"value":5,"label":"Vacant Land"},{"value":6,"label":"Other"},{"value":7,"label":"Manufactured"},{"value":8,"label":"Multi-Family (5+ Unit)"}],"example":[1,3]},{"name":"url","type":"string","required":false,"description":"Advanced: a Redfin search URL (alternative to location — the region is read from the URL).","on_invalid":"ignore","example":"https://www.redfin.com/city/30818/TX/Austin"}],"returns":"items[]{property_id, listing_id, url, address_line, city, state_code, postal_code, list_price_usd (or price_usd+sold_date for sold, rent_price for rentals), beds, baths, sqft, lot_sqft, year_built, price_per_sqft_usd, hoa_fee_monthly_usd, property_type, property_type_code, status, latitude, longitude, days_on_market, mls_id, num_photos} + region + status + filters_applied","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX","max_results":30}},{"name":"listing_detail","description":"Everything Redfin holds on one address: the live listing when the home is on the market (status, asking price, days on market, listing agent, description, photos) plus the property record underneath it - up to 17 years of price and tax history, schools, amenities, Redfin Estimate, mortgage and parcel. The current listing is looked up from the property id automatically; pass `listing_id` as well if you already have it and want to skip that step. `meta.is_live_listing` tells you which of the two you got: false means the home is not currently listed and what you see is the property record - the last closed sale.","required_params":["property_id"],"optional_params":["listing_id","url"],"params":[{"name":"property_id","type":"string","required":true,"description":"Redfin property ID — `property_id` from a search result, or the last number in a /home/ URL.","on_invalid":"reject","example":"124719","aliases":["propertyId"]},{"name":"listing_id","type":"string","required":false,"description":"Advanced: Redfin listing ID (pairs with property_id for the exact active listing).","on_invalid":"ignore","aliases":["listingId"]},{"name":"url","type":"string","required":false,"description":"Redfin /home/ property URL (alternative to property_id).","on_invalid":"reject","example":"https://www.redfin.com/TX/Austin/123-Main-St-78745/home/124719"}],"returns":"listing{property_id (always echoed), listing_id (the live listing, when there is one), url, address_line, city, state_code, postal_code, list_price_usd, beds, baths, sqft, lot_sqft, year_built, stories, property_type, status, days_on_market, latitude, longitude, apn, price_history[]{date, price_usd, event, mls_status, source}, tax{roll_year, taxes_due_usd, tax_history[]}, schools[], amenities, agent{...}, photos[], redfin_estimate, mortgage, description} + meta.is_live_listing + meta.listing_id_source (caller | resolved | none)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"property_id":"31287179"}},{"name":"similar","description":"Comparable/similar listings near a property, with the comp price band.","required_params":["property_id"],"optional_params":["listing_id","url"],"params":[{"name":"property_id","type":"string","required":true,"description":"Redfin property ID — `property_id` from a search result, or the last number in a /home/ URL.","on_invalid":"reject","example":"124719","aliases":["propertyId"]},{"name":"listing_id","type":"string","required":false,"description":"Advanced: Redfin listing ID (pairs with property_id for the exact active listing).","on_invalid":"ignore","aliases":["listingId"]},{"name":"url","type":"string","required":false,"description":"Redfin /home/ property URL (alternative to property_id).","on_invalid":"reject","example":"https://www.redfin.com/TX/Austin/123-Main-St-78745/home/124719"}],"returns":"items[]{property_id, address_line, list_price_usd, beds, baths, sqft, url} + count + min_price_usd + max_price_usd + avg_price_per_sqft","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":2},"example_params":{"property_id":"31287179"}},{"name":"autocomplete","description":"Resolve free text to Redfin places / agents / schools / buildings (ids + types).","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free text: a city, neighborhood, address, school or agent name.","on_invalid":"reject","example":"Seattle"}],"returns":"items[]{name, type, region_id, url} + count + query","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Seattle"}},{"name":"market_stats","description":"Derived market snapshot for an area: median list price, $/sqft, days on market, inventory, price band.","required_params":["location"],"optional_params":["url"],"params":[{"name":"location","type":"string","required":true,"description":"The market area — city, ZIP or neighborhood.","on_invalid":"reject","example":"Austin, TX"},{"name":"url","type":"string","required":false,"description":"Advanced: a Redfin search URL instead of location.","on_invalid":"ignore"}],"returns":"market{active_inventory, median_list_price_usd, median_price_per_sqft_usd, median_days_on_market, min_list_price_usd, max_list_price_usd} + region","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX"}}]},{"name":"reed","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Reed.co.uk API — UK jobs scraper: search Reed job postings by keyword, location, salary, distance, job-type, date and remote/hybrid filters; get full job detail (title, company, salary, location, description, contract type, sector, apply link); list all jobs at a company; and browse jobs by sector — from reed.co.uk, no login or API key required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/reed/v1","spec_available":true,"actions":[{"name":"search","description":"Search Reed.co.uk job postings by keyword with optional location, distance, salary range, job-type, date-posted, remote and sort filters. Returns up to 25 jobs per page with title, company, salary, location, dates and a plain-text description.","required_params":["keywords"],"optional_params":["location","distance","job_type","full_time","part_time","graduate","agency","employer","salary_from","salary_to","date_posted","remote","visa_sponsorship","easy_apply","sort","page"],"params":[{"name":"keywords","type":"string","required":true,"description":"What job to search for — a job title, skill or keyword ('python developer', 'registered nurse', 'accountant').","on_invalid":"reject","example":"python developer","aliases":["query","q"]},{"name":"location","type":"string","required":false,"description":"UK town, city or region to search in (free text, e.g. 'London', 'Manchester', 'Birmingham'). Pair with `distance`.","on_invalid":"ignore","example":"London"},{"name":"distance","type":"integer","required":false,"description":"Search radius in miles around the location (Reed bands: 0/1/3/5/10/15/20/30/50).","on_invalid":"ignore","default":10,"example":10,"minimum":0,"maximum":50},{"name":"job_type","type":"enum","required":false,"description":"Restrict to one employment type.","on_invalid":"ignore","allowed_values":[{"value":"permanent","label":"Permanent"},{"value":"temporary","label":"Temporary"},{"value":"contract","label":"Contract"}]},{"name":"full_time","type":"boolean","required":false,"description":"Only full-time jobs.","on_invalid":"ignore"},{"name":"part_time","type":"boolean","required":false,"description":"Only part-time jobs.","on_invalid":"ignore"},{"name":"graduate","type":"boolean","required":false,"description":"Only graduate-level jobs.","on_invalid":"ignore"},{"name":"agency","type":"boolean","required":false,"description":"Only jobs posted by recruitment agencies.","on_invalid":"ignore"},{"name":"employer","type":"boolean","required":false,"description":"Only jobs posted directly by the employer (not an agency).","on_invalid":"ignore"},{"name":"salary_from","type":"integer","required":false,"description":"Minimum annual salary in GBP (Reed banded, e.g. 40000).","on_invalid":"ignore","example":40000,"minimum":0},{"name":"salary_to","type":"integer","required":false,"description":"Maximum annual salary in GBP (Reed banded, e.g. 80000).","on_invalid":"ignore","example":80000,"minimum":0},{"name":"date_posted","type":"enum","required":false,"description":"Only jobs posted within this window.","on_invalid":"ignore","allowed_values":[{"value":"anytime","label":"Anytime"},{"value":"today","label":"Today"},{"value":"lastthreedays","label":"Last three days"},{"value":"lastweek","label":"Last week"},{"value":"lasttwoweeks","label":"Last two weeks"}]},{"name":"remote","type":"enum","required":false,"description":"Filter by working arrangement.","on_invalid":"ignore","allowed_values":[{"value":"remote","label":"Remote"},{"value":"hybrid","label":"Hybrid"},{"value":"onsite","label":"On-site"}]},{"name":"visa_sponsorship","type":"boolean","required":false,"description":"Only jobs offering visa sponsorship.","on_invalid":"ignore"},{"name":"easy_apply","type":"boolean","required":false,"description":"Only Reed 'Easy Apply' jobs.","on_invalid":"ignore"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Best match"},{"value":"date","label":"Most recent"},{"value":"salarydesc","label":"Highest salary"},{"value":"salaryasc","label":"Lowest salary"},{"value":"distance","label":"Nearest"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Result page (25 jobs per page). Page until meta.total_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"jobs[]{job_id, title, url, company, company_slug, location, county, job_type, is_full_time, is_part_time, remote_option, posted_date, expiry_date, salary_from, salary_to, salary_description, currency, sector_top, sector, is_easy_apply, is_promoted, description_text} + total + meta.pagination{page, total_pages, has_more, next_page}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"keywords":"python developer","location":"London"}},{"name":"detail","description":"Full posting for one Reed job by job_id (or a Reed job URL): title, company, salary (range + display), location breakdown (town/county/region/country/postcode/remote), full HTML + plain-text description, contract type, sector, eligibility, dates and breadcrumbs — plus related jobs.","required_params":[],"optional_params":["job_id","url","include_similar"],"params":[{"name":"job_id","type":"string","required":false,"description":"Reed job ID — the number in the job URL (reed.co.uk/jobs/<slug>/<job_id>) or `job_id` from search.","on_invalid":"reject","example":"56531217","aliases":["jobId","id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full Reed job URL.","on_invalid":"ignore","example":"https://www.reed.co.uk/jobs/python-developer/56531217"},{"name":"include_similar","type":"boolean","required":false,"description":"Also return Reed's related/similar jobs for this posting.","on_invalid":"ignore","default":false}],"returns":"job{job_id, title, url, company, company_slug, company_profile_url, description_text, description_html, contract_type, is_full_time, is_part_time, is_agency, location, town, county, region, country, post_code, is_remote, salary_from, salary_to, salary_description, currency, sector, parent_sector, posted_date, expiry_date, breadcrumbs[]} + similar_jobs[] (with include_similar)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"job_id":"57258187"}},{"name":"company-jobs","description":"All public job postings at a specific company on Reed. Pass the company's Reed profile slug, full company URL, or its name; optionally narrow with the same keyword/location/salary/job-type/date filters as search.","required_params":["company"],"optional_params":["keywords","location","distance","job_type","salary_from","salary_to","date_posted","remote","sort","page"],"params":[{"name":"company","type":"string","required":true,"description":"The employer — its Reed company profile slug (the part of reed.co.uk/jobs/<slug>-jobs), a full Reed company URL, or the company name (resolved to a slug automatically). The `company_slug` field on any search result is a valid input.","on_invalid":"reject","example":"reed-specialist-recruitment-limited","aliases":["slug","profile"]},{"name":"keywords","type":"string","required":false,"description":"Optional: also filter the company's jobs by keyword.","on_invalid":"ignore","example":"developer","aliases":["query","q"]},{"name":"location","type":"string","required":false,"description":"UK town, city or region to search in (free text, e.g. 'London', 'Manchester', 'Birmingham'). Pair with `distance`.","on_invalid":"ignore","example":"London"},{"name":"distance","type":"integer","required":false,"description":"Search radius in miles around the location (Reed bands: 0/1/3/5/10/15/20/30/50).","on_invalid":"ignore","default":10,"example":10,"minimum":0,"maximum":50},{"name":"job_type","type":"enum","required":false,"description":"Restrict to one employment type.","on_invalid":"ignore","allowed_values":[{"value":"permanent","label":"Permanent"},{"value":"temporary","label":"Temporary"},{"value":"contract","label":"Contract"}]},{"name":"salary_from","type":"integer","required":false,"description":"Minimum annual salary in GBP (Reed banded, e.g. 40000).","on_invalid":"ignore","example":40000,"minimum":0},{"name":"salary_to","type":"integer","required":false,"description":"Maximum annual salary in GBP (Reed banded, e.g. 80000).","on_invalid":"ignore","example":80000,"minimum":0},{"name":"date_posted","type":"enum","required":false,"description":"Only jobs posted within this window.","on_invalid":"ignore","allowed_values":[{"value":"anytime","label":"Anytime"},{"value":"today","label":"Today"},{"value":"lastthreedays","label":"Last three days"},{"value":"lastweek","label":"Last week"},{"value":"lasttwoweeks","label":"Last two weeks"}]},{"name":"remote","type":"enum","required":false,"description":"Filter by working arrangement.","on_invalid":"ignore","allowed_values":[{"value":"remote","label":"Remote"},{"value":"hybrid","label":"Hybrid"},{"value":"onsite","label":"On-site"}]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Best match"},{"value":"date","label":"Most recent"},{"value":"salarydesc","label":"Highest salary"},{"value":"salaryasc","label":"Lowest salary"},{"value":"distance","label":"Nearest"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Result page (25 jobs per page). Page until meta.total_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"jobs[]{job_id, title, url, company, company_slug, location, county, job_type, is_full_time, is_part_time, remote_option, posted_date, expiry_date, salary_from, salary_to, salary_description, currency, sector_top, sector, is_easy_apply, is_promoted, description_text} + total + meta.pagination{page, total_pages, has_more, next_page} + company","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"reed-specialist-recruitment-limited"}},{"name":"sector","description":"Browse Reed jobs by sector/category (e.g. 'it', 'accountancy', 'healthcare', 'engineering', 'sales', 'marketing'). Optionally scope by location and the same salary/job-type/date/remote filters as search.","required_params":["sector"],"optional_params":["location","distance","job_type","salary_from","salary_to","date_posted","remote","sort","page"],"params":[{"name":"sector","type":"string","required":true,"description":"Reed sector slug — e.g. 'it', 'accountancy', 'healthcare', 'engineering', 'sales', 'marketing', 'education', 'construction', 'hospitality', 'legal'.","on_invalid":"reject","example":"it","aliases":["category"]},{"name":"location","type":"string","required":false,"description":"UK town, city or region to search in (free text, e.g. 'London', 'Manchester', 'Birmingham'). Pair with `distance`.","on_invalid":"ignore","example":"London"},{"name":"distance","type":"integer","required":false,"description":"Search radius in miles around the location (Reed bands: 0/1/3/5/10/15/20/30/50).","on_invalid":"ignore","default":10,"example":10,"minimum":0,"maximum":50},{"name":"job_type","type":"enum","required":false,"description":"Restrict to one employment type.","on_invalid":"ignore","allowed_values":[{"value":"permanent","label":"Permanent"},{"value":"temporary","label":"Temporary"},{"value":"contract","label":"Contract"}]},{"name":"salary_from","type":"integer","required":false,"description":"Minimum annual salary in GBP (Reed banded, e.g. 40000).","on_invalid":"ignore","example":40000,"minimum":0},{"name":"salary_to","type":"integer","required":false,"description":"Maximum annual salary in GBP (Reed banded, e.g. 80000).","on_invalid":"ignore","example":80000,"minimum":0},{"name":"date_posted","type":"enum","required":false,"description":"Only jobs posted within this window.","on_invalid":"ignore","allowed_values":[{"value":"anytime","label":"Anytime"},{"value":"today","label":"Today"},{"value":"lastthreedays","label":"Last three days"},{"value":"lastweek","label":"Last week"},{"value":"lasttwoweeks","label":"Last two weeks"}]},{"name":"remote","type":"enum","required":false,"description":"Filter by working arrangement.","on_invalid":"ignore","allowed_values":[{"value":"remote","label":"Remote"},{"value":"hybrid","label":"Hybrid"},{"value":"onsite","label":"On-site"}]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"default","label":"Best match"},{"value":"date","label":"Most recent"},{"value":"salarydesc","label":"Highest salary"},{"value":"salaryasc","label":"Lowest salary"},{"value":"distance","label":"Nearest"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Result page (25 jobs per page). Page until meta.total_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"jobs[]{job_id, title, url, company, company_slug, location, county, job_type, is_full_time, is_part_time, remote_option, posted_date, expiry_date, salary_from, salary_to, salary_description, currency, sector_top, sector, is_easy_apply, is_promoted, description_text} + total + meta.pagination{page, total_pages, has_more, next_page}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"sector":"it"}}]},{"name":"refurbed","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Refurbed API — live refurbished-electronics marketplace data from refurbed's 24 European storefronts (refurbed.de, .fr, .it, .es, .nl, .co.uk, .ch, .se, .pl, .cz and more). Search or browse the catalogue of refurbished iPhones, Android phones, MacBooks, laptops, tablets, smartwatches, consoles, audio and household appliances, then pull the full product record: price in that country's currency, the new-retail reference price, refurbed's own four appearance grades (Premium / Excellent / Very good / Good) with the price step between them, battery option, every colour and storage variant, full specs, images, rating and the stated warranty and return window. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/refurbed/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse one refurbed storefront. PASS EITHER `query` (free-text keyword) OR `category` (a refurbed category slug) — one of the two is required, and calling with neither returns MISSING_PARAM rather than the whole catalogue. `country` selects the storefront and therefore the price list and the currency. `brand`, `colour`, `price_min`/`price_max` and `sort` are the storefront's own filters and every one of them was measured to change the result total. Each row carries refurbed's own appearance grade letter, the live price, the printed price string the storefront rendered beside it, and the separate new-retail reference price. `meta.total_results` is refurbed's own exact match count for the request, so you can tell a bitten filter from an ignored one. 🔴 refurbed's keyword matching is FUZZY and never says 'no match': the nonsense keyword 'zzqqxxnotathingqq' returned 300 rows on refurbed.de on 2026-10-01. A keyword result is a relevance list, not a containment filter — scope with `category` + `brand` + `price_min`/`price_max` when you need exactness.","required_params":[],"optional_params":["query","category","country","brand","colour","price_min","price_max","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword across the storefront's catalogue (model name, brand, accessory). PASS EITHER `query` OR `category` — with neither you get no results and a MISSING_PARAM telling you so. Combining them is not supported upstream: a category page ignores a keyword, so `category` wins and `meta.warnings` says it.","on_invalid":"ignore","example":"iphone 13","aliases":["q","keyword","search","term"]},{"name":"category","type":"enum","required":false,"description":"Browse one refurbed category instead of searching. These are the storefront's own URL slugs; the live list with labels and parent/child nesting is the `categories` action, which is the right place to look if a slug here is missing.","on_invalid":"reject","allowed_values":[{"value":"smartphones","label":"smartphones"},{"value":"iphones","label":"iphones"},{"value":"samsung-phones","label":"samsung phones"},{"value":"google-phones","label":"google phones"},{"value":"xiaomi-phones","label":"xiaomi phones"},{"value":"oneplus-phones","label":"oneplus phones"},{"value":"oppo-phones","label":"oppo phones"},{"value":"honor-phones","label":"honor phones"},{"value":"huawei-phones","label":"huawei phones"},{"value":"motorola-phones","label":"motorola phones"},{"value":"sony-phones","label":"sony phones"},{"value":"nokia-phones","label":"nokia phones"},{"value":"asus-phones","label":"asus phones"},{"value":"cat-phones","label":"cat phones"},{"value":"doro-phones","label":"doro phones"},{"value":"emporia-phones","label":"emporia phones"},{"value":"microsoft-phones","label":"microsoft phones"},{"value":"smartphones-accessories","label":"smartphones accessories"},{"value":"laptops","label":"laptops"},{"value":"macbooks","label":"macbooks"},{"value":"dell-laptops","label":"dell laptops"},{"value":"lenovo-laptops","label":"lenovo laptops"},{"value":"laptop-accessories","label":"laptop accessories"},{"value":"desktops","label":"desktops"},{"value":"apple-mac","label":"apple mac"},{"value":"dell-desktops","label":"dell desktops"},{"value":"hp-desktops","label":"hp desktops"},{"value":"lenovo-desktops","label":"lenovo desktops"},{"value":"fujitsu-desktops","label":"fujitsu desktops"},{"value":"computer-accessories","label":"computer accessories"},{"value":"a-computer-accessories","label":"a computer accessories"},{"value":"tablets","label":"tablets"},{"value":"ipads","label":"ipads"},{"value":"samsung-tablets","label":"samsung tablets"},{"value":"huawei-tablets","label":"huawei tablets"},{"value":"hp-tablets","label":"hp tablets"},{"value":"acer-tablets","label":"acer tablets"},{"value":"microsoft-tablets","label":"microsoft tablets"},{"value":"sony-tablets","label":"sony tablets"},{"value":"tablet-accessories","label":"tablet accessories"},{"value":"smartwatches","label":"smartwatches"},{"value":"apple-watches","label":"apple watches"},{"value":"smartwatch-accessories","label":"smartwatch accessories"},{"value":"audio","label":"audio"},{"value":"headphones","label":"headphones"},{"value":"speakers","label":"speakers"},{"value":"consoles","label":"consoles"},{"value":"playstation","label":"playstation"},{"value":"xbox","label":"xbox"},{"value":"nintendo","label":"nintendo"},{"value":"console-accessories","label":"console accessories"},{"value":"cameras","label":"cameras"},{"value":"acoustic-guitars","label":"acoustic guitars"},{"value":"electric-guitars","label":"electric guitars"},{"value":"bass-guitars","label":"bass guitars"},{"value":"pedals","label":"pedals"},{"value":"household","label":"household"},{"value":"kitchen","label":"kitchen"},{"value":"kitchen-appliances","label":"kitchen appliances"},{"value":"large-domestic-appliances","label":"large domestic appliances"},{"value":"floorcare","label":"floorcare"},{"value":"air-treatment","label":"air treatment"},{"value":"household-accessories-other","label":"household accessories other"},{"value":"health-beauty","label":"health beauty"},{"value":"beverages","label":"beverages"},{"value":"breakfast","label":"breakfast"},{"value":"garden","label":"garden"},{"value":"lawnmowers","label":"lawnmowers"},{"value":"powertools","label":"powertools"},{"value":"high-pressure-cleaners","label":"high pressure cleaners"},{"value":"chargers-and-charging-cables","label":"chargers and charging cables"}],"example":"smartphones","aliases":["cat","category_slug","c"]},{"name":"country","type":"enum","required":false,"description":"Which refurbed storefront to read. refurbed runs one catalogue, price list and currency PER COUNTRY, so this changes the numbers you get back, not just the language. Every response echoes the country, locale and currency it actually read in `meta`. Each value in this list answered a live search in this release.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (refurbed.de, EUR)"},{"value":"at","label":"Austria (refurbed.at, EUR)"},{"value":"fr","label":"France (refurbed.fr, EUR)"},{"value":"it","label":"Italy (refurbed.it, EUR)"},{"value":"es","label":"Spain (refurbed.es, EUR)"},{"value":"nl","label":"Netherlands (refurbed.nl, EUR)"},{"value":"be","label":"Belgium (refurbed.be, EUR)"},{"value":"ie","label":"Ireland (refurbed.ie, EUR)"},{"value":"gb","label":"United Kingdom (refurbed.co.uk, GBP)"},{"value":"ch","label":"Switzerland (refurbed.ch, CHF)"},{"value":"se","label":"Sweden (refurbed.se, SEK)"},{"value":"dk","label":"Denmark (refurbed.dk, DKK)"},{"value":"pl","label":"Poland (refurbed.pl, PLN)"},{"value":"cz","label":"Czechia (refurbed.cz, CZK)"},{"value":"bg","label":"Bulgaria (refurbed.bg, BGN)"},{"value":"hr","label":"Croatia (refurbed.hr, EUR)"},{"value":"fi","label":"Finland (refurbed.fi, EUR)"},{"value":"pt","label":"Portugal (refurbed.pt, EUR)"},{"value":"sk","label":"Slovakia (refurbed.sk, EUR)"},{"value":"si","label":"Slovenia (refurbed.si, EUR)"},{"value":"lt","label":"Lithuania (refurbed.lt, EUR)"},{"value":"lv","label":"Latvia (refurbed.lv, EUR)"},{"value":"ee","label":"Estonia (refurbed.ee, EUR)"},{"value":"lu","label":"Luxembourg (refurbed.lu, EUR)"}],"default":"de","example":"de","aliases":["market","cc","storefront"]},{"name":"brand","type":"array","required":false,"description":"One or more brands, as refurbed spells them (Apple, Samsung, Google, Xiaomi, Lenovo, HP, Dell, Bosch …). Several values are OR-ed. Measured on /c/smartphones/ 2026-10-01: unfiltered 506 lots, brand=Apple 43, brand=Apple,Samsung 172. A value this storefront does not have comes back as a real zero and `meta.warnings` says the storefront did not recognise it — the live value list per category is the `filters` action.","on_invalid":"ignore","example":"Apple","aliases":["make","manufacturer","brands"]},{"name":"colour","type":"array","required":false,"description":"One or more colour buckets as refurbed groups them (Black, White, Blue, Green, Red, Grey, Silver, Gold, Pink, Purple, Beige, Brown, Orange, Turquoise, Yellow, Multi). Several values are OR-ed. Measured: /c/smartphones/ 506 -> colour=Black 313.","on_invalid":"ignore","example":"Black","aliases":["color","colours","colors"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price to include, in THAT storefront's currency (see `country`). Works on its own. Measured: /c/smartphones/ 506 -> price_min=800 70.","on_invalid":"ignore","example":200,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price to include, in that storefront's currency. Measured: /c/smartphones/ 506 -> price_min=200 + price_max=400 218.","on_invalid":"ignore","example":400,"minimum":0,"aliases":["max_price"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Measured on /c/smartphones/ 2026-10-01: price_asc's first row was 35.66 EUR and price_desc's was 2844.60 EUR, which are exactly the category's own published lowPrice and highPrice.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"refurbed's own default ordering"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"}],"default":"popular","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. refurbed serves 16 rows per page (measured on every page sampled on 2026-10-01) and that page size is the source's, not a parameter. `meta.total_results` is the storefront's own exact match count, and `meta.pagination.has_more` is its own has-more flag.","on_invalid":"ignore","default":1,"minimum":1,"maximum":400}],"returns":"products[]{product_id, model_id, name, url, slug, brand, department, category, subcategory, variant_label, grade, grade_letter, grade_code, price, price_display, price_feed, price_mismatch, price_new_reference, price_new_reference_display, currency, currency_symbol, grade_url_segment, rating, image, tags[], position} + meta{total_results, country, locale, currency, currency_symbol, page_size, filters_requested, filters_applied_by_source, pagination}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone 13","country":"de"}},{"name":"product","description":"The full record for one refurbed offer by `product_id`, in one `country`. Adds everything a result row cannot carry: refurbed's four appearance grades with the exact price step between them and the offer id of each, the battery option, every colour/storage variant with its own price, the complete spec sheet, every image, the product rating with its review count, the stated warranty and return window, shipping cost and the handling/transit day ranges. Optional `grade` opens the same device in another appearance grade. An id that is not live in that storefront answers NOT_FOUND — never an empty success. Pass a search row's `grade_code` as `grade` to land on that exact offer; without it refurbed serves its default grade for the device, which is a different price.","required_params":["product_id","slug"],"optional_params":["country","grade"],"params":[{"name":"product_id","type":"integer","required":true,"description":"refurbed offer id — the digits in a product URL (refurbed.de/en-de/p/iphone-13/14162c/ -> 14162) and the `product_id` of every search row. An id that is not live in that storefront returns NOT_FOUND.","on_invalid":"reject","example":14162,"minimum":1,"aliases":["id","instance_id","offer_id","sku"]},{"name":"country","type":"enum","required":false,"description":"Which refurbed storefront to read. refurbed runs one catalogue, price list and currency PER COUNTRY, so this changes the numbers you get back, not just the language. Every response echoes the country, locale and currency it actually read in `meta`. Each value in this list answered a live search in this release.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (refurbed.de, EUR)"},{"value":"at","label":"Austria (refurbed.at, EUR)"},{"value":"fr","label":"France (refurbed.fr, EUR)"},{"value":"it","label":"Italy (refurbed.it, EUR)"},{"value":"es","label":"Spain (refurbed.es, EUR)"},{"value":"nl","label":"Netherlands (refurbed.nl, EUR)"},{"value":"be","label":"Belgium (refurbed.be, EUR)"},{"value":"ie","label":"Ireland (refurbed.ie, EUR)"},{"value":"gb","label":"United Kingdom (refurbed.co.uk, GBP)"},{"value":"ch","label":"Switzerland (refurbed.ch, CHF)"},{"value":"se","label":"Sweden (refurbed.se, SEK)"},{"value":"dk","label":"Denmark (refurbed.dk, DKK)"},{"value":"pl","label":"Poland (refurbed.pl, PLN)"},{"value":"cz","label":"Czechia (refurbed.cz, CZK)"},{"value":"bg","label":"Bulgaria (refurbed.bg, BGN)"},{"value":"hr","label":"Croatia (refurbed.hr, EUR)"},{"value":"fi","label":"Finland (refurbed.fi, EUR)"},{"value":"pt","label":"Portugal (refurbed.pt, EUR)"},{"value":"sk","label":"Slovakia (refurbed.sk, EUR)"},{"value":"si","label":"Slovenia (refurbed.si, EUR)"},{"value":"lt","label":"Lithuania (refurbed.lt, EUR)"},{"value":"lv","label":"Latvia (refurbed.lv, EUR)"},{"value":"ee","label":"Estonia (refurbed.ee, EUR)"},{"value":"lu","label":"Luxembourg (refurbed.lu, EUR)"}],"default":"de","example":"de","aliases":["market","cc","storefront"]},{"name":"slug","type":"string","required":true,"description":"The product slug, which refurbed requires alongside the id: it is the segment before the id in a product URL (/p/**iphone-13**/14162c/) and the `slug` of every search row. MEASURED 2026-10-01: refurbed answers HTTP 400 for an id with a slug that does not belong to it and has no id-only route, so this cannot be made optional without handing you a handle that does not work.","on_invalid":"reject","example":"iphone-13","value_pattern":"[A-Za-z0-9\\-]{1,80}","aliases":["product_slug"]},{"name":"grade","type":"enum","required":false,"description":"Which appearance grade of the same device to open. These are refurbed's own four appearance categories, not a scale of ours. Omit it and you get the grade the id itself points at; `grade_options` in the response always lists every grade refurbed currently has in stock for that device with its own price difference. refurbed's OWN short forms are accepted too, so a search row's `grade_code` ('aa', '', 'b', 'c') or `grade_letter` ('AA', 'A', 'B', 'C') can be passed straight back to land on exactly the offer that row was about — without it you get refurbed's default grade for that device, which is usually a different price.","on_invalid":"reject","allowed_values":[{"value":"premium","label":"Premium — screen and body identical to new (code aa, letter AA)"},{"value":"excellent","label":"Excellent — screen like new, no scratches from close up (A)"},{"value":"very_good","label":"Very good — no visible screen scratches on, minimal body wear (B)"},{"value":"good","label":"Good — no visible screen scratches on, small body marks (C)"}],"example":"very_good","value_pattern":"(?i)aa|a|b|c","aliases":["condition","appearance","grade_code","grade_letter"]}],"returns":"product{product_id, model_id, name, slug, url, brand, description, breadcrumbs[], price, price_display, price_feed, price_mismatch, currency, price_new_reference, price_new_reference_display, price_valid_until, grade, grade_code, grade_url_segment, grade_options[]{label, selected, price_delta_label, product_id, grade_code, offer_id}, battery, battery_options[], option_groups{}, item_condition, availability, guarantees[], warranty_text, rating, rating_count, shipping_cost, shipping_currency, handling_days_min, handling_days_max, transit_days_min, transit_days_max, return_days, return_fees, specs{}, images[], variants[]{product_id, name, colour, size, price, currency, availability, grade_code, offer_id, url, image}, variant_count} + meta{country, locale, currency}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":14162,"slug":"iphone-13","country":"de"}},{"name":"categories","description":"The live category tree of one storefront, read off its own navigation: every category slug with the label that storefront prints for it. Feed a returned `slug` straight into search's `category`. One request, no product bodies transferred.","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Which refurbed storefront to read. refurbed runs one catalogue, price list and currency PER COUNTRY, so this changes the numbers you get back, not just the language. Every response echoes the country, locale and currency it actually read in `meta`. Each value in this list answered a live search in this release.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (refurbed.de, EUR)"},{"value":"at","label":"Austria (refurbed.at, EUR)"},{"value":"fr","label":"France (refurbed.fr, EUR)"},{"value":"it","label":"Italy (refurbed.it, EUR)"},{"value":"es","label":"Spain (refurbed.es, EUR)"},{"value":"nl","label":"Netherlands (refurbed.nl, EUR)"},{"value":"be","label":"Belgium (refurbed.be, EUR)"},{"value":"ie","label":"Ireland (refurbed.ie, EUR)"},{"value":"gb","label":"United Kingdom (refurbed.co.uk, GBP)"},{"value":"ch","label":"Switzerland (refurbed.ch, CHF)"},{"value":"se","label":"Sweden (refurbed.se, SEK)"},{"value":"dk","label":"Denmark (refurbed.dk, DKK)"},{"value":"pl","label":"Poland (refurbed.pl, PLN)"},{"value":"cz","label":"Czechia (refurbed.cz, CZK)"},{"value":"bg","label":"Bulgaria (refurbed.bg, BGN)"},{"value":"hr","label":"Croatia (refurbed.hr, EUR)"},{"value":"fi","label":"Finland (refurbed.fi, EUR)"},{"value":"pt","label":"Portugal (refurbed.pt, EUR)"},{"value":"sk","label":"Slovakia (refurbed.sk, EUR)"},{"value":"si","label":"Slovenia (refurbed.si, EUR)"},{"value":"lt","label":"Lithuania (refurbed.lt, EUR)"},{"value":"lv","label":"Latvia (refurbed.lv, EUR)"},{"value":"ee","label":"Estonia (refurbed.ee, EUR)"},{"value":"lu","label":"Luxembourg (refurbed.lu, EUR)"}],"default":"de","example":"de","aliases":["market","cc","storefront"]}],"returns":"categories[]{slug, label, url} + meta{country, locale}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"de"}},{"name":"filters","description":"The live filter taxonomy for one search or category: refurbed's own attribute ids and labels (Brand, Storage, Colour, Screen Size, RAM, Operating System, Year of release …), the exact value list of every enum attribute and the min/max of every numeric one, plus the price range and currency symbol of that result set. This is how you discover which values exist in a storefront instead of guessing them. Same required-params rule as search: `query` or `category`.","required_params":[],"optional_params":["query","category","country"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword across the storefront's catalogue (model name, brand, accessory). PASS EITHER `query` OR `category` — with neither you get no results and a MISSING_PARAM telling you so. Combining them is not supported upstream: a category page ignores a keyword, so `category` wins and `meta.warnings` says it.","on_invalid":"ignore","example":"iphone 13","aliases":["q","keyword","search","term"]},{"name":"category","type":"enum","required":false,"description":"Browse one refurbed category instead of searching. These are the storefront's own URL slugs; the live list with labels and parent/child nesting is the `categories` action, which is the right place to look if a slug here is missing.","on_invalid":"reject","allowed_values":[{"value":"smartphones","label":"smartphones"},{"value":"iphones","label":"iphones"},{"value":"samsung-phones","label":"samsung phones"},{"value":"google-phones","label":"google phones"},{"value":"xiaomi-phones","label":"xiaomi phones"},{"value":"oneplus-phones","label":"oneplus phones"},{"value":"oppo-phones","label":"oppo phones"},{"value":"honor-phones","label":"honor phones"},{"value":"huawei-phones","label":"huawei phones"},{"value":"motorola-phones","label":"motorola phones"},{"value":"sony-phones","label":"sony phones"},{"value":"nokia-phones","label":"nokia phones"},{"value":"asus-phones","label":"asus phones"},{"value":"cat-phones","label":"cat phones"},{"value":"doro-phones","label":"doro phones"},{"value":"emporia-phones","label":"emporia phones"},{"value":"microsoft-phones","label":"microsoft phones"},{"value":"smartphones-accessories","label":"smartphones accessories"},{"value":"laptops","label":"laptops"},{"value":"macbooks","label":"macbooks"},{"value":"dell-laptops","label":"dell laptops"},{"value":"lenovo-laptops","label":"lenovo laptops"},{"value":"laptop-accessories","label":"laptop accessories"},{"value":"desktops","label":"desktops"},{"value":"apple-mac","label":"apple mac"},{"value":"dell-desktops","label":"dell desktops"},{"value":"hp-desktops","label":"hp desktops"},{"value":"lenovo-desktops","label":"lenovo desktops"},{"value":"fujitsu-desktops","label":"fujitsu desktops"},{"value":"computer-accessories","label":"computer accessories"},{"value":"a-computer-accessories","label":"a computer accessories"},{"value":"tablets","label":"tablets"},{"value":"ipads","label":"ipads"},{"value":"samsung-tablets","label":"samsung tablets"},{"value":"huawei-tablets","label":"huawei tablets"},{"value":"hp-tablets","label":"hp tablets"},{"value":"acer-tablets","label":"acer tablets"},{"value":"microsoft-tablets","label":"microsoft tablets"},{"value":"sony-tablets","label":"sony tablets"},{"value":"tablet-accessories","label":"tablet accessories"},{"value":"smartwatches","label":"smartwatches"},{"value":"apple-watches","label":"apple watches"},{"value":"smartwatch-accessories","label":"smartwatch accessories"},{"value":"audio","label":"audio"},{"value":"headphones","label":"headphones"},{"value":"speakers","label":"speakers"},{"value":"consoles","label":"consoles"},{"value":"playstation","label":"playstation"},{"value":"xbox","label":"xbox"},{"value":"nintendo","label":"nintendo"},{"value":"console-accessories","label":"console accessories"},{"value":"cameras","label":"cameras"},{"value":"acoustic-guitars","label":"acoustic guitars"},{"value":"electric-guitars","label":"electric guitars"},{"value":"bass-guitars","label":"bass guitars"},{"value":"pedals","label":"pedals"},{"value":"household","label":"household"},{"value":"kitchen","label":"kitchen"},{"value":"kitchen-appliances","label":"kitchen appliances"},{"value":"large-domestic-appliances","label":"large domestic appliances"},{"value":"floorcare","label":"floorcare"},{"value":"air-treatment","label":"air treatment"},{"value":"household-accessories-other","label":"household accessories other"},{"value":"health-beauty","label":"health beauty"},{"value":"beverages","label":"beverages"},{"value":"breakfast","label":"breakfast"},{"value":"garden","label":"garden"},{"value":"lawnmowers","label":"lawnmowers"},{"value":"powertools","label":"powertools"},{"value":"high-pressure-cleaners","label":"high pressure cleaners"},{"value":"chargers-and-charging-cables","label":"chargers and charging cables"}],"example":"smartphones","aliases":["cat","category_slug","c"]},{"name":"country","type":"enum","required":false,"description":"Which refurbed storefront to read. refurbed runs one catalogue, price list and currency PER COUNTRY, so this changes the numbers you get back, not just the language. Every response echoes the country, locale and currency it actually read in `meta`. Each value in this list answered a live search in this release.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany (refurbed.de, EUR)"},{"value":"at","label":"Austria (refurbed.at, EUR)"},{"value":"fr","label":"France (refurbed.fr, EUR)"},{"value":"it","label":"Italy (refurbed.it, EUR)"},{"value":"es","label":"Spain (refurbed.es, EUR)"},{"value":"nl","label":"Netherlands (refurbed.nl, EUR)"},{"value":"be","label":"Belgium (refurbed.be, EUR)"},{"value":"ie","label":"Ireland (refurbed.ie, EUR)"},{"value":"gb","label":"United Kingdom (refurbed.co.uk, GBP)"},{"value":"ch","label":"Switzerland (refurbed.ch, CHF)"},{"value":"se","label":"Sweden (refurbed.se, SEK)"},{"value":"dk","label":"Denmark (refurbed.dk, DKK)"},{"value":"pl","label":"Poland (refurbed.pl, PLN)"},{"value":"cz","label":"Czechia (refurbed.cz, CZK)"},{"value":"bg","label":"Bulgaria (refurbed.bg, BGN)"},{"value":"hr","label":"Croatia (refurbed.hr, EUR)"},{"value":"fi","label":"Finland (refurbed.fi, EUR)"},{"value":"pt","label":"Portugal (refurbed.pt, EUR)"},{"value":"sk","label":"Slovakia (refurbed.sk, EUR)"},{"value":"si","label":"Slovenia (refurbed.si, EUR)"},{"value":"lt","label":"Lithuania (refurbed.lt, EUR)"},{"value":"lv","label":"Latvia (refurbed.lv, EUR)"},{"value":"ee","label":"Estonia (refurbed.ee, EUR)"},{"value":"lu","label":"Luxembourg (refurbed.lu, EUR)"}],"default":"de","example":"de","aliases":["market","cc","storefront"]}],"returns":"price_min, price_max, currency_symbol, attributes[]{attribute_id, name, name_localised, type, values[], min, max} + meta{total_results, country}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"smartphones","country":"de"}},{"name":"compare_countries","description":"The same device's live price in several refurbed storefronts in one call — the question a single-country endpoint cannot answer. Give a `query` (or a `category`) and up to 6 `countries`; the engine reads each storefront's own search page sequentially, inside one wall-clock budget, and returns that storefront's cheapest matching row with its own currency. Storefronts that did not finish inside the budget are COUNTED in `meta.countries_failed` with the reason, never dropped silently.","required_params":["countries"],"optional_params":["query","category","countries"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword across the storefront's catalogue (model name, brand, accessory). PASS EITHER `query` OR `category` — with neither you get no results and a MISSING_PARAM telling you so. Combining them is not supported upstream: a category page ignores a keyword, so `category` wins and `meta.warnings` says it.","on_invalid":"ignore","example":"iphone 13","aliases":["q","keyword","search","term"]},{"name":"category","type":"enum","required":false,"description":"Browse one refurbed category instead of searching. These are the storefront's own URL slugs; the live list with labels and parent/child nesting is the `categories` action, which is the right place to look if a slug here is missing.","on_invalid":"reject","allowed_values":[{"value":"smartphones","label":"smartphones"},{"value":"iphones","label":"iphones"},{"value":"samsung-phones","label":"samsung phones"},{"value":"google-phones","label":"google phones"},{"value":"xiaomi-phones","label":"xiaomi phones"},{"value":"oneplus-phones","label":"oneplus phones"},{"value":"oppo-phones","label":"oppo phones"},{"value":"honor-phones","label":"honor phones"},{"value":"huawei-phones","label":"huawei phones"},{"value":"motorola-phones","label":"motorola phones"},{"value":"sony-phones","label":"sony phones"},{"value":"nokia-phones","label":"nokia phones"},{"value":"asus-phones","label":"asus phones"},{"value":"cat-phones","label":"cat phones"},{"value":"doro-phones","label":"doro phones"},{"value":"emporia-phones","label":"emporia phones"},{"value":"microsoft-phones","label":"microsoft phones"},{"value":"smartphones-accessories","label":"smartphones accessories"},{"value":"laptops","label":"laptops"},{"value":"macbooks","label":"macbooks"},{"value":"dell-laptops","label":"dell laptops"},{"value":"lenovo-laptops","label":"lenovo laptops"},{"value":"laptop-accessories","label":"laptop accessories"},{"value":"desktops","label":"desktops"},{"value":"apple-mac","label":"apple mac"},{"value":"dell-desktops","label":"dell desktops"},{"value":"hp-desktops","label":"hp desktops"},{"value":"lenovo-desktops","label":"lenovo desktops"},{"value":"fujitsu-desktops","label":"fujitsu desktops"},{"value":"computer-accessories","label":"computer accessories"},{"value":"a-computer-accessories","label":"a computer accessories"},{"value":"tablets","label":"tablets"},{"value":"ipads","label":"ipads"},{"value":"samsung-tablets","label":"samsung tablets"},{"value":"huawei-tablets","label":"huawei tablets"},{"value":"hp-tablets","label":"hp tablets"},{"value":"acer-tablets","label":"acer tablets"},{"value":"microsoft-tablets","label":"microsoft tablets"},{"value":"sony-tablets","label":"sony tablets"},{"value":"tablet-accessories","label":"tablet accessories"},{"value":"smartwatches","label":"smartwatches"},{"value":"apple-watches","label":"apple watches"},{"value":"smartwatch-accessories","label":"smartwatch accessories"},{"value":"audio","label":"audio"},{"value":"headphones","label":"headphones"},{"value":"speakers","label":"speakers"},{"value":"consoles","label":"consoles"},{"value":"playstation","label":"playstation"},{"value":"xbox","label":"xbox"},{"value":"nintendo","label":"nintendo"},{"value":"console-accessories","label":"console accessories"},{"value":"cameras","label":"cameras"},{"value":"acoustic-guitars","label":"acoustic guitars"},{"value":"electric-guitars","label":"electric guitars"},{"value":"bass-guitars","label":"bass guitars"},{"value":"pedals","label":"pedals"},{"value":"household","label":"household"},{"value":"kitchen","label":"kitchen"},{"value":"kitchen-appliances","label":"kitchen appliances"},{"value":"large-domestic-appliances","label":"large domestic appliances"},{"value":"floorcare","label":"floorcare"},{"value":"air-treatment","label":"air treatment"},{"value":"household-accessories-other","label":"household accessories other"},{"value":"health-beauty","label":"health beauty"},{"value":"beverages","label":"beverages"},{"value":"breakfast","label":"breakfast"},{"value":"garden","label":"garden"},{"value":"lawnmowers","label":"lawnmowers"},{"value":"powertools","label":"powertools"},{"value":"high-pressure-cleaners","label":"high pressure cleaners"},{"value":"chargers-and-charging-cables","label":"chargers and charging cables"}],"example":"smartphones","aliases":["cat","category_slug","c"]},{"name":"countries","type":"array","required":true,"description":"2 to 6 refurbed country codes, e.g. `de,fr,it`. Same values as the `country` enum of the other actions. More than 6 is rejected so one call cannot outgrow its time budget.","on_invalid":"reject","example":"de,fr,it"}],"returns":"comparisons[]{country, locale, currency, currency_symbol, total_results, cheapest{product_id, name, url, price, price_display, grade_letter, grade_code}} + meta{countries_requested, countries_answered, countries_failed[]}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":5},"example_params":{"countries":"de,fr,it"}}]},{"name":"reverb","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Reverb API — musical instrument marketplace data scraper: guitars, synths, pedals, amps and pro audio from reverb.com with prices in USD, seller and shipping detail, model pages with the lowest new and used asking price, and filters for condition, brand, price band, year and country — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/reverb/v1","spec_available":true,"actions":[{"name":"search","description":"Search Reverb's live marketplace. Every filter offered here was measured to change the result set: price band, condition, brand, category, the seller's country, the country an item ships to, a year range, free shipping, local pickup, preferred sellers and one shop. Rows carry the price in USD (whatever currency the seller lists in), the condition, the year, the shop, the shipping rate per region and the full description.","required_params":[],"optional_params":["query","make","product_type","category_uuid","condition","price_min","price_max","year_min","year_max","item_region","ships_to","shop_id","handmade","free_shipping","local_pickup","preferred_seller","sort","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Free text: a model name, a brand, a serial-era nickname, anything a buyer would type. Optional — leave it out and send a filter instead to browse a whole category or shop.","on_invalid":"ignore","example":"stratocaster","aliases":["q","keyword","term"]},{"name":"make","type":"array","required":false,"description":"Brand name(s), exactly as Reverb spells them (Fender, Gibson, Squier, Boss, Roland). Several values are OR-ed: ['Fender','Gibson'] returned 117 853 guitars against 790 216 unfiltered. 🔴 Reverb matches brand FAMILIES: asking for Squier also returns rows whose own `make` field reads 'Fender' (5 of 24 on a measured page — 'Fender Squier Sonic Stratocaster'). Filter on the row's `make` yourself if you need the strict brand.","on_invalid":"ignore","example":"Fender","aliases":["brand"]},{"name":"product_type","type":"enum","required":false,"description":"Top-level department. Only ONE value is accepted — an array here is a 400 from the source. Use `category_uuid` for a sub-category such as Solid Body.","on_invalid":"reject","allowed_values":[{"value":"electric-guitars","label":"Electric Guitars"},{"value":"acoustic-guitars","label":"Acoustic Guitars"},{"value":"bass-guitars","label":"Bass Guitars"},{"value":"effects-and-pedals","label":"Effects and Pedals"},{"value":"amps","label":"Amps"},{"value":"drums-and-percussion","label":"Drums and Percussion"},{"value":"keyboards-and-synths","label":"Keyboards and Synths"},{"value":"pro-audio","label":"Pro Audio"},{"value":"folk-instruments","label":"Folk Instruments"},{"value":"orchestral-strings","label":"Orchestral Strings"},{"value":"band-and-orchestra","label":"Band and Orchestra"},{"value":"dj-and-lighting-gear","label":"DJ and Lighting Gear"},{"value":"home-audio","label":"Home Audio"},{"value":"parts","label":"Parts"},{"value":"accessories","label":"Accessories"},{"value":"software","label":"Software"}],"example":"electric-guitars"},{"name":"category_uuid","type":"string","required":false,"description":"A sub-category uuid from `categories` — e.g. Electric Guitars / Solid Body narrowed the marketplace to 148 331 listings. 🔴 The category SLUG on its own is silently ignored by the source, which is why this API takes the uuid.","on_invalid":"ignore","example":"e57deb7a-382b-4e18-a008-67d4fbcb2879","aliases":["category"]},{"name":"condition","type":"array","required":false,"description":"Condition grade(s). Several values are OR-ed. 🔴 The source silently ignores a slug it does not know, so this API validates it — and note that Brand New is `new`, not `brand-new`.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Brand New — sold by an authorised dealer or the builder, in its original packaging"},{"value":"b-stock","label":"B-Stock — factory second or open box, sold by a dealer"},{"value":"mint","label":"Mint — essentially new, but opened or played"},{"value":"excellent","label":"Excellent — almost free of blemishes, played with care"},{"value":"very-good","label":"Very Good — light cosmetic wear, fully functional"},{"value":"good","label":"Good — noticeable wear, fully functional"},{"value":"fair","label":"Fair — heavy wear, works"},{"value":"poor","label":"Poor — heavy wear and at least one fault"},{"value":"non-functioning","label":"Non Functioning — for parts or repair"},{"value":"used","label":"Used — everything that is not Brand New or B-Stock"}],"example":"excellent"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in US dollars, inclusive.","on_invalid":"reject","example":1000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in US dollars, inclusive. With price_min=1000 this narrowed 'stratocaster' from 76 993 to 8 390.","on_invalid":"reject","example":2000,"minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Earliest build year the seller stated. 🔴 Only ~49 % of listings state a year, so a year filter also drops every listing with no year.","on_invalid":"reject","example":1960,"minimum":1800,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest build year. 1960-1969 left 770 stratocasters of 76 993.","on_invalid":"reject","example":1969,"minimum":1800,"maximum":2100},{"name":"item_region","type":"string","required":false,"description":"Where the ITEM is, as a two-letter country code (US, GB, DE, JP). US 56 778 vs GB 5 051 on the same search.","on_invalid":"ignore","example":"US"},{"name":"ships_to","type":"string","required":false,"description":"Only listings that ship to this two-letter country code. 🔴 Leave it out and the source answers for 'Everywhere Else', which is NOT the whole marketplace — pinning ships_to=US cut 'stratocaster' from 77 000 to 41 496. The value actually used is echoed in `ships_to` on every response.","on_invalid":"ignore","example":"US"},{"name":"shop_id","type":"integer","required":false,"description":"Only this shop's listings. The NUMERIC id — a shop slug here is silently ignored by the source and hands you the whole marketplace, so use `shop/listings` if you only have a slug.","on_invalid":"reject","example":348730},{"name":"handmade","type":"boolean","required":false,"description":"Only items the seller marked handmade (2 817 of 76 993).","on_invalid":"ignore","example":true},{"name":"free_shipping","type":"boolean","required":false,"description":"Only items that ship free to somewhere (416 of 76 993). 🔴 This is NOT the row's `free_expedited_shipping` flag, which was False on all 8 rows a measured call returned — read `has_free_shipping` and `shipping_rates` to see which region the 0.00 rate is for.","on_invalid":"ignore","example":true},{"name":"local_pickup","type":"boolean","required":false,"description":"Only items offering local pickup (26 252 of 76 993).","on_invalid":"ignore","example":true},{"name":"preferred_seller","type":"boolean","required":false,"description":"Only Reverb Preferred Sellers (48 914 of 76 993).","on_invalid":"ignore","example":true},{"name":"sort","type":"enum","required":false,"description":"Leave empty for Reverb's own relevance order. Only the three orders the source demonstrably applies are offered; it silently ignores any other value. 🔴 The price sort is monotonic in the SELLER's currency, not in the USD you are handed: on a measured `price_desc` page a JPY listing converting to $98,652 came ahead of a USD one at $100,000. Sort by `price_usd` yourself if you need exact USD order.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Most recently published first"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. The source prints `total_pages: 50` on every envelope no matter how large the result is — that cap is cosmetic and this API ignores it: pages 51, 60, 100 and 200 all return real, distinct rows. Read `total_pages` from this response, which is computed from `total`.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-50. 50 is the source's own ceiling; it clamps anything larger instead of refusing it, so this API clamps it too and tells you in `limit`.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"listings[]{listing_id, url, title, make, model, year, finish, condition, condition_slug, price_usd, price_display, currency, original_price_usd, price_drop_percent, listing_currency, categories[], shop_name, shop_id, shop_slug, preferred_seller, inventory, offers_enabled, auction, state, published_at, created_at, free_expedited_shipping, has_free_shipping, local_pickup, shipping_rates[]{region, amount_usd, display}, image, description}, total, page, limit, total_pages, ships_to, filters_applied","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"stratocaster"}},{"name":"listing","description":"One listing in full: everything a search row carries plus the seller's city and country, the shipping rate to every region it ships to, how many people have viewed and watched it, the offer count, the return and shipping policy, whether it is sold as-is, and the model id that links it to Reverb's model page.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The numeric Reverb listing id (98282577), the id-slug form (98282577-fender-stratocaster-…) or a reverb.com/item/… URL. Every search row carries the id and the URL.","on_invalid":"reject","example":"98282577","aliases":["id","url","slug"]}],"returns":"listing{… every search field …, images[], location{city, region, country_code, display}, origin_country_code, handmade, sold_as_is, local_pickup_only, offer_count, views, watches, accepted_payment_methods[], return_policy, shipping_policy, model_id, live}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"66178726"}},{"name":"shop","description":"One seller's record by slug: name, city and country, whether Reverb marks them a Preferred Seller / quick shipper / quick responder, their feedback count and rating, their shipping and payment policy, and whether the shop is on vacation.","required_params":["shop"],"optional_params":[],"params":[{"name":"shop","type":"string","required":true,"description":"The shop slug as it appears in reverb.com/shop/<slug>, or the full shop URL. Search rows carry it as `shop_slug`.","on_invalid":"reject","example":"chicago-music-exchange","aliases":["slug","shop_slug","url"]}],"returns":"shop{shop_id, slug, name, description, url, location{…}, preferred_seller, quick_shipper, quick_responder, on_vacation, feedback_count, rating_percent, website, shipping_policy, payment_policy, avatar}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"shop":"sound-to-parts"}},{"name":"shop/listings","description":"One seller's whole inventory, paged — the same rows as `search`, plus the shop record when you addressed it by slug. This is how a dealer's catalogue is mirrored: a shop with 603 listings is 13 calls at 50 rows a page.","required_params":[],"optional_params":["shop","shop_id","query","condition","price_min","price_max","product_type","sort","page","limit"],"params":[{"name":"shop","type":"string","required":false,"description":"The shop slug. Costs one extra upstream call to resolve the slug to the numeric id the marketplace filter needs; pass `shop_id` instead to skip it.","on_invalid":"ignore","example":"chicago-music-exchange","aliases":["slug","shop_slug","url"]},{"name":"shop_id","type":"integer","required":false,"description":"The numeric shop id, from a search row or from `shop`. One of `shop` / `shop_id` is required.","on_invalid":"reject","example":348730},{"name":"query","type":"string","required":false,"description":"Optional keyword to search inside this seller's inventory.","on_invalid":"ignore","example":"stratocaster","aliases":["q"]},{"name":"condition","type":"array","required":false,"description":"Condition grade(s), same enum as search.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Brand New — sold by an authorised dealer or the builder, in its original packaging"},{"value":"b-stock","label":"B-Stock — factory second or open box, sold by a dealer"},{"value":"mint","label":"Mint — essentially new, but opened or played"},{"value":"excellent","label":"Excellent — almost free of blemishes, played with care"},{"value":"very-good","label":"Very Good — light cosmetic wear, fully functional"},{"value":"good","label":"Good — noticeable wear, fully functional"},{"value":"fair","label":"Fair — heavy wear, works"},{"value":"poor","label":"Poor — heavy wear and at least one fault"},{"value":"non-functioning","label":"Non Functioning — for parts or repair"},{"value":"used","label":"Used — everything that is not Brand New or B-Stock"}],"example":"used"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in US dollars.","on_invalid":"reject","example":500,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in US dollars.","on_invalid":"reject","example":5000,"minimum":0},{"name":"product_type","type":"string","required":false,"description":"Department slug, same values as search.","on_invalid":"ignore","example":"electric-guitars"},{"name":"sort","type":"enum","required":false,"description":"Same three orders as search.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Most recently published first"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. The source prints `total_pages: 50` on every envelope no matter how large the result is — that cap is cosmetic and this API ignores it: pages 51, 60, 100 and 200 all return real, distinct rows. Read `total_pages` from this response, which is computed from `total`.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-50. 50 is the source's own ceiling; it clamps anything larger instead of refusing it, so this API clamps it too and tells you in `limit`.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"listings[] (same shape as search), shop{…} (only when addressed by slug), shop_id, total, page, limit, total_pages","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"shop":"sound-to-parts"}},{"name":"models","description":"Reverb's MODEL pages — one row per instrument model rather than per listing, each with the lowest live asking price for a NEW one, the lowest for a USED one, and how many of each are for sale. This is the closest thing Reverb publishes to a price guide, and it is a snapshot of asks, not of completed sales. 78 791 models are browsable with no keyword at all.","required_params":[],"optional_params":["query","make","product_type","category_uuid","year_min","year_max","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"A model or family name. Omit it to walk the whole model catalogue.","on_invalid":"ignore","example":"les paul","aliases":["q","keyword"]},{"name":"make","type":"array","required":false,"description":"Brand name(s). 'les paul' 1 387 models → 799 for Gibson.","on_invalid":"ignore","example":"Gibson","aliases":["brand"]},{"name":"product_type","type":"string","required":false,"description":"Department slug, same values as search (935 of the 1 387).","on_invalid":"ignore","example":"electric-guitars"},{"name":"category_uuid","type":"string","required":false,"description":"Sub-category uuid from `categories` (919 of the 1 387).","on_invalid":"ignore","example":"e57deb7a-382b-4e18-a008-67d4fbcb2879","aliases":["category"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year.","on_invalid":"reject","example":2000,"minimum":1800,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest model year.","on_invalid":"reject","example":2024,"minimum":1800,"maximum":2100},{"name":"page","type":"integer","required":false,"description":"1-based page number. The source prints `total_pages: 50` on every envelope no matter how large the result is — that cap is cosmetic and this API ignores it: pages 51, 60, 100 and 200 all return real, distinct rows. Read `total_pages` from this response, which is computed from `total`.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-50. 50 is the source's own ceiling; it clamps anything larger instead of refusing it, so this API clamps it too and tells you in `limit`.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"models[]{model_id, slug, url, title, brand, summary, new_low_price_usd, new_low_price_display, new_listings, used_low_price_usd, used_low_price_display, used_listings, category_slug, category_uuid, image}, total, page, limit, total_pages","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"les paul"}},{"name":"model/detail","description":"One model page by numeric id: the lowest new and used asking price, the live count of each, Reverb's own star rating and review count for the model, the description and the image.","required_params":["model_id"],"optional_params":[],"params":[{"name":"model_id","type":"string","required":true,"description":"The numeric model id, from a `models` row (`model_id`) or from a listing's `model_id`. 🔴 The model's slug does NOT work as an id — the source answers 404 for it. Use `models` to look one up by name.","on_invalid":"reject","example":"126164","aliases":["id","csp_id","url"]}],"returns":"model{model_id, slug, url, title, brand, summary, new_low_price_usd, new_listings, used_low_price_usd, used_listings, rating, review_count, category_slug, category_uuid, image}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"model_id":"104711"}},{"name":"model/listings","description":"Every live listing OF one model, not merely matching its name — Reverb keeps a list of the exact product variants behind each model page and this action uses it, so a search for 'Fender American Professional II Stratocaster' that would return 76 000 loose matches returns the 574 that really are one. Two upstream calls: the model page, then its listings.","required_params":["model_id"],"optional_params":["condition","price_min","price_max","sort","page","limit"],"params":[{"name":"model_id","type":"string","required":true,"description":"The numeric model id, from a `models` row (`model_id`) or from a listing's `model_id`. 🔴 The model's slug does NOT work as an id — the source answers 404 for it. Use `models` to look one up by name.","on_invalid":"reject","example":"126164","aliases":["id","csp_id","url"]},{"name":"condition","type":"array","required":false,"description":"Condition grade(s) — this is how you read only the used market for one model.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Brand New — sold by an authorised dealer or the builder, in its original packaging"},{"value":"b-stock","label":"B-Stock — factory second or open box, sold by a dealer"},{"value":"mint","label":"Mint — essentially new, but opened or played"},{"value":"excellent","label":"Excellent — almost free of blemishes, played with care"},{"value":"very-good","label":"Very Good — light cosmetic wear, fully functional"},{"value":"good","label":"Good — noticeable wear, fully functional"},{"value":"fair","label":"Fair — heavy wear, works"},{"value":"poor","label":"Poor — heavy wear and at least one fault"},{"value":"non-functioning","label":"Non Functioning — for parts or repair"},{"value":"used","label":"Used — everything that is not Brand New or B-Stock"}],"example":"used"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in US dollars.","on_invalid":"reject","example":800,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in US dollars.","on_invalid":"reject","example":3000,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Same three orders as search.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Most recently published first"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. The source prints `total_pages: 50` on every envelope no matter how large the result is — that cap is cosmetic and this API ignores it: pages 51, 60, 100 and 200 all return real, distinct rows. Read `total_pages` from this response, which is computed from `total`.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-50. 50 is the source's own ceiling; it clamps anything larger instead of refusing it, so this API clamps it too and tells you in `limit`.","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":50,"aliases":["per_page"]}],"returns":"listings[] (same shape as search), model{model_id, title, brand, new_low_price_usd, used_low_price_usd}, total, page, limit, total_pages","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"model_id":"104711"}},{"name":"categories","description":"Reverb's whole category tree, flattened: 320 categories with the uuid that `search` and `models` take as `category_uuid`, the department slug that `product_type` takes, and the human name. One call, and it barely changes.","required_params":[],"optional_params":["product_type","query"],"params":[{"name":"product_type","type":"string","required":false,"description":"Only the sub-categories of this department.","on_invalid":"ignore","example":"electric-guitars","aliases":["root"]},{"name":"query","type":"string","required":false,"description":"Only categories whose name contains this text.","on_invalid":"ignore","example":"pedal","aliases":["q"]}],"returns":"categories[]{category_uuid, name, full_name, slug, product_type, root_uuid, listable}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"product_type":"electric-guitars"}},{"name":"conditions","description":"The condition grades Reverb uses, with the slug each filter takes and Reverb's own definition of the grade. 🔴 Note that Brand New's slug is `new`, not `brand-new`.","required_params":[],"optional_params":[],"params":[],"returns":"conditions[]{slug, name, description, filterable}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"brand","description":"One brand record by slug: its Reverb id, its canonical name — which is the spelling the `make` filter wants — and its header images. There is no brand INDEX to walk: the source's `/brands` route answers with an empty list whatever you ask it.","required_params":["brand"],"optional_params":[],"params":[{"name":"brand","type":"string","required":true,"description":"The brand slug as it appears in reverb.com/brand/<slug> — lowercase, hyphenated ('fender', 'gibson', 'electro-harmonix').","on_invalid":"reject","example":"fender","aliases":["slug","make","url"]}],"returns":"brand{brand_id, name, slug, url, image}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"fender"}}]},{"name":"rewe","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"REWE API — German supermarket prices per market: shelf price, offers, base price (Grundpreis), Pfand, GTIN, nutrition and ingredients for REWE Lieferservice and Abholservice","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/rewe/v1","spec_available":true,"actions":[{"name":"search","description":"Search REWE's online shop AS ONE MARKET SELLS IT: price, regular price and discount, offer end date, base price per kg/l, Pfand, pack size, GTIN, brand, tags, category, sponsored flag. `query` is required; filters: category, attribute, brand; sort; paging.","required_params":["query"],"optional_params":["zip_code","market_id","service","category","attribute","brand","sort","page","per_page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed in the REWE shop (German works best).","on_invalid":"reject","example":"milch","aliases":["q","keyword","search","term"]},{"name":"zip_code","type":"string","required":false,"description":"German post code (PLZ, 5 digits). REWE prices and assortment belong to ONE market: with `service=delivery` the delivery market of this PLZ, with `service=pickup` the nearest pickup market. Give `zip_code` OR `market_id`; with neither, Köln 50667 is used and a warning says so.","on_invalid":"reject","example":"50667","aliases":["zip","plz","postal_code","postcode"]},{"name":"market_id","type":"string","required":false,"description":"A REWE market id (wwIdent) exactly as the `markets` action returns it (pickup[].market_id or delivery.market_id). Use with the matching `service`.","on_invalid":"reject","example":"3200008","aliases":["wwIdent","market","market_code"]},{"name":"service","type":"enum","required":false,"description":"Which REWE service the prices are for. The same product can cost differently (measured: Alpro oat drink 1,49 € pickup vs 2,49 € delivery, same PLZ).","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"Abholservice — collect in a market"},{"value":"delivery","label":"Lieferservice — home delivery"}],"default":"pickup","aliases":["service_type"]},{"name":"category","type":"string","required":false,"description":"Category slug as the `categories` action or a row's facets return it (e.g. kaese-eier-molkerei, milch, frischmilch).","on_invalid":"reject","example":"frischmilch","aliases":["category_slug","categorySlug"]},{"name":"attribute","type":"enum","required":false,"description":"One product attribute filter: discounted (on offer), organic (Bio), regional, vegan, new, cool (chilled), frozen, glutenfree, lactosefree, loyalty_bonus (PAYBACK bonus).","on_invalid":"reject","allowed_values":[{"value":"discounted","label":"discounted"},{"value":"organic","label":"organic"},{"value":"regional","label":"regional"},{"value":"vegan","label":"vegan"},{"value":"new","label":"new"},{"value":"cool","label":"cool"},{"value":"frozen","label":"frozen"},{"value":"glutenfree","label":"glutenfree"},{"value":"lactosefree","label":"lactosefree"},{"value":"loyalty_bonus","label":"loyalty_bonus"}],"aliases":["filter"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as REWE prints it (e.g. ja!, REWE Bio, Alpro).","on_invalid":"reject","example":"ja!"},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · name_asc · topseller.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"topseller","label":"topseller"}],"default":"relevance","aliases":["sorting","sort_by"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). REWE serves rows up to number 10,000: page × per_page ≤ 10000.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100. REWE adds its sponsored rows ON TOP of this number (10 → 16 rows measured); they come flagged `sponsored`.","on_invalid":"reject","default":40,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"market{market_id, service, zip_code, resolved_from}, query, filters, sort, total, total_pages, total_exact, source_total_capped (REWE's own counter stops at 10,000; total then comes from REWE's merchant count), page, has_more, returned, sponsored_returned, results[]{rank, product_id (-> product.product_id), name, brand, gtin, listing_id, available_in_market, price, regular_price, on_offer, discount_percent, offer_valid_to (YYYY-MM-DD, the last day of the offer), currency, deposit (Pfand, NOT included in price), pack_size, grammage_text, base_price, base_unit, base_price_source (rewe = REWE's own figure; computed = price / pack quantity where REWE prints none, e.g. 1 kg packs; null = none), base_price_text, base_price_text_matches, order_limit, tags[], category_path, category_id, has_variants, merchant, merchant_type, sponsored, duplicate_of_rank (rank of an earlier row of the same product on this page; REWE shows some products twice, once sponsored), image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"milch","zip_code":"50667"}},{"name":"category","description":"List one REWE category (slug from `categories`) in one market, with the same row fields and filters as `search`.","required_params":["category"],"optional_params":["zip_code","market_id","service","attribute","brand","sort","page","per_page"],"params":[{"name":"zip_code","type":"string","required":false,"description":"German post code (PLZ, 5 digits). REWE prices and assortment belong to ONE market: with `service=delivery` the delivery market of this PLZ, with `service=pickup` the nearest pickup market. Give `zip_code` OR `market_id`; with neither, Köln 50667 is used and a warning says so.","on_invalid":"reject","example":"50667","aliases":["zip","plz","postal_code","postcode"]},{"name":"market_id","type":"string","required":false,"description":"A REWE market id (wwIdent) exactly as the `markets` action returns it (pickup[].market_id or delivery.market_id). Use with the matching `service`.","on_invalid":"reject","example":"3200008","aliases":["wwIdent","market","market_code"]},{"name":"service","type":"enum","required":false,"description":"Which REWE service the prices are for. The same product can cost differently (measured: Alpro oat drink 1,49 € pickup vs 2,49 € delivery, same PLZ).","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"Abholservice — collect in a market"},{"value":"delivery","label":"Lieferservice — home delivery"}],"default":"pickup","aliases":["service_type"]},{"name":"category","type":"string","required":false,"description":"Category slug as the `categories` action or a row's facets return it (e.g. kaese-eier-molkerei, milch, frischmilch).","on_invalid":"reject","example":"frischmilch","aliases":["category_slug","categorySlug"]},{"name":"attribute","type":"enum","required":false,"description":"One product attribute filter: discounted (on offer), organic (Bio), regional, vegan, new, cool (chilled), frozen, glutenfree, lactosefree, loyalty_bonus (PAYBACK bonus).","on_invalid":"reject","allowed_values":[{"value":"discounted","label":"discounted"},{"value":"organic","label":"organic"},{"value":"regional","label":"regional"},{"value":"vegan","label":"vegan"},{"value":"new","label":"new"},{"value":"cool","label":"cool"},{"value":"frozen","label":"frozen"},{"value":"glutenfree","label":"glutenfree"},{"value":"lactosefree","label":"lactosefree"},{"value":"loyalty_bonus","label":"loyalty_bonus"}],"aliases":["filter"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as REWE prints it (e.g. ja!, REWE Bio, Alpro).","on_invalid":"reject","example":"ja!"},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · name_asc · topseller.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"topseller","label":"topseller"}],"default":"relevance","aliases":["sorting","sort_by"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). REWE serves rows up to number 10,000: page × per_page ≤ 10000.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100. REWE adds its sponsored rows ON TOP of this number (10 → 16 rows measured); they come flagged `sponsored`.","on_invalid":"reject","default":40,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"market{market_id, service, zip_code, resolved_from}, query, filters, sort, total, total_pages, total_exact, source_total_capped (REWE's own counter stops at 10,000; total then comes from REWE's merchant count), page, has_more, returned, sponsored_returned, results[]{rank, product_id (-> product.product_id), name, brand, gtin, listing_id, available_in_market, price, regular_price, on_offer, discount_percent, offer_valid_to (YYYY-MM-DD, the last day of the offer), currency, deposit (Pfand, NOT included in price), pack_size, grammage_text, base_price, base_unit, base_price_source (rewe = REWE's own figure; computed = price / pack quantity where REWE prints none, e.g. 1 kg packs; null = none), base_price_text, base_price_text_matches, order_limit, tags[], category_path, category_id, has_variants, merchant, merchant_type, sponsored, duplicate_of_rank (rank of an earlier row of the same product on this page; REWE shows some products twice, once sponsored), image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"frischmilch","zip_code":"50667"}},{"name":"offers","description":"REWE online-shop offers (Angebote) of one market: every discounted product with offer price, regular price, discount % and offer end date. Narrow with `query`, `category` or `brand`.","required_params":[],"optional_params":["zip_code","market_id","service","query","category","brand","sort","page","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Optional search words inside the offers.","on_invalid":"reject","example":"kaffee","aliases":["q","keyword","search","term"]},{"name":"zip_code","type":"string","required":false,"description":"German post code (PLZ, 5 digits). REWE prices and assortment belong to ONE market: with `service=delivery` the delivery market of this PLZ, with `service=pickup` the nearest pickup market. Give `zip_code` OR `market_id`; with neither, Köln 50667 is used and a warning says so.","on_invalid":"reject","example":"50667","aliases":["zip","plz","postal_code","postcode"]},{"name":"market_id","type":"string","required":false,"description":"A REWE market id (wwIdent) exactly as the `markets` action returns it (pickup[].market_id or delivery.market_id). Use with the matching `service`.","on_invalid":"reject","example":"3200008","aliases":["wwIdent","market","market_code"]},{"name":"service","type":"enum","required":false,"description":"Which REWE service the prices are for. The same product can cost differently (measured: Alpro oat drink 1,49 € pickup vs 2,49 € delivery, same PLZ).","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"Abholservice — collect in a market"},{"value":"delivery","label":"Lieferservice — home delivery"}],"default":"pickup","aliases":["service_type"]},{"name":"category","type":"string","required":false,"description":"Category slug as the `categories` action or a row's facets return it (e.g. kaese-eier-molkerei, milch, frischmilch).","on_invalid":"reject","example":"frischmilch","aliases":["category_slug","categorySlug"]},{"name":"brand","type":"string","required":false,"description":"Exact brand name as REWE prints it (e.g. ja!, REWE Bio, Alpro).","on_invalid":"reject","example":"ja!"},{"name":"sort","type":"enum","required":false,"description":"relevance · price_asc · price_desc · name_asc · topseller.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"name_asc","label":"name_asc"},{"value":"topseller","label":"topseller"}],"default":"relevance","aliases":["sorting","sort_by"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). REWE serves rows up to number 10,000: page × per_page ≤ 10000.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000},{"name":"per_page","type":"integer","required":false,"description":"Products per page, 1-100. REWE adds its sponsored rows ON TOP of this number (10 → 16 rows measured); they come flagged `sponsored`.","on_invalid":"reject","default":40,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"market{market_id, service, zip_code, resolved_from}, query, filters, sort, total, total_pages, total_exact, source_total_capped (REWE's own counter stops at 10,000; total then comes from REWE's merchant count), page, has_more, returned, sponsored_returned, results[]{rank, product_id (-> product.product_id), name, brand, gtin, listing_id, available_in_market, price, regular_price, on_offer, discount_percent, offer_valid_to (YYYY-MM-DD, the last day of the offer), currency, deposit (Pfand, NOT included in price), pack_size, grammage_text, base_price, base_unit, base_price_source (rewe = REWE's own figure; computed = price / pack quantity where REWE prints none, e.g. 1 kg packs; null = none), base_price_text, base_price_text_matches, order_limit, tags[], category_path, category_id, has_variants, merchant, merchant_type, sponsored, duplicate_of_rank (rank of an earlier row of the same product on this page; REWE shows some products twice, once sponsored), image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"zip_code":"10115"}},{"name":"categories","description":"The category tree of one market with product counts: top level, or the children of `category`. Slugs feed `category` / `search`.","required_params":[],"optional_params":["zip_code","market_id","service","category"],"params":[{"name":"zip_code","type":"string","required":false,"description":"German post code (PLZ, 5 digits). REWE prices and assortment belong to ONE market: with `service=delivery` the delivery market of this PLZ, with `service=pickup` the nearest pickup market. Give `zip_code` OR `market_id`; with neither, Köln 50667 is used and a warning says so.","on_invalid":"reject","example":"50667","aliases":["zip","plz","postal_code","postcode"]},{"name":"market_id","type":"string","required":false,"description":"A REWE market id (wwIdent) exactly as the `markets` action returns it (pickup[].market_id or delivery.market_id). Use with the matching `service`.","on_invalid":"reject","example":"3200008","aliases":["wwIdent","market","market_code"]},{"name":"service","type":"enum","required":false,"description":"Which REWE service the prices are for. The same product can cost differently (measured: Alpro oat drink 1,49 € pickup vs 2,49 € delivery, same PLZ).","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"Abholservice — collect in a market"},{"value":"delivery","label":"Lieferservice — home delivery"}],"default":"pickup","aliases":["service_type"]},{"name":"category","type":"string","required":false,"description":"Parent category slug; omit for the top level.","on_invalid":"reject","example":"kaese-eier-molkerei","aliases":["category_slug","parent"]}],"returns":"market{...}, parent, total_products (distinct products; REWE's counter stops at 10,000, then REWE's merchant count is used), total_products_exact, source_total_capped, categories[]{slug, name, count, children[]{slug, name, count, children[]}} (counts overlap: one product can sit in several categories, they do not sum to the total)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"zip_code":"50667"}},{"name":"product","description":"One REWE product in one market by the `product_id` a search row returns: price, regular price, discount, Pfand, base price, buyable flag and order limit, GTIN, brand, legal product name, description, ingredients, allergens and every label attribute, nutrition table, manufacturer, breadcrumb, images — and which market the page actually priced it for.","required_params":["product_id"],"optional_params":["zip_code","market_id","service"],"params":[{"name":"product_id","type":"string","required":true,"description":"The numeric product id a search row returns, or its https://www.rewe.de/shop/p/<slug>/<id> URL.","on_invalid":"reject","example":"2235048","aliases":["id","nan","url","product_url"]},{"name":"zip_code","type":"string","required":false,"description":"German post code (PLZ, 5 digits). REWE prices and assortment belong to ONE market: with `service=delivery` the delivery market of this PLZ, with `service=pickup` the nearest pickup market. Give `zip_code` OR `market_id`; with neither, Köln 50667 is used and a warning says so.","on_invalid":"reject","example":"50667","aliases":["zip","plz","postal_code","postcode"]},{"name":"market_id","type":"string","required":false,"description":"A REWE market id (wwIdent) exactly as the `markets` action returns it (pickup[].market_id or delivery.market_id). Use with the matching `service`.","on_invalid":"reject","example":"3200008","aliases":["wwIdent","market","market_code"]},{"name":"service","type":"enum","required":false,"description":"Which REWE service the prices are for. The same product can cost differently (measured: Alpro oat drink 1,49 € pickup vs 2,49 € delivery, same PLZ).","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"Abholservice — collect in a market"},{"value":"delivery","label":"Lieferservice — home delivery"}],"default":"pickup","aliases":["service_type"]}],"returns":"requested_market{market_id, service, zip_code, resolved_from}, served_market_matches_request, product{product_id, article_id, gtin, listing_id, name, regulated_name, brand, description, price, regular_price, on_offer, discount_percent, offer_valid_to (YYYY-MM-DD, last day), currency, deposit, deposit_type, pack_size, grammage_text, base_price, base_unit, base_price_source, base_price_text, is_buyable, order_limit, tags[], organic, new, category_ids[], category_slug, breadcrumb[], images[], nutrition[]{state, per, nutrients[]{code, name, value, unit, precision}}, attributes[]{group, name, label, value}, ingredients, manufacturer{name, address}, merchant, packaging, served_market{market_id, service}, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"2235048","zip_code":"50667"}},{"name":"markets","description":"REWE markets for a German post code: whether home delivery is offered and by which market, and the pickup markets nearest first with address, distance and coordinates. The market ids feed every other action.","required_params":["zip_code"],"optional_params":[],"params":[{"name":"zip_code","type":"string","required":true,"description":"German post code (PLZ, 5 digits).","on_invalid":"reject","example":"50667","aliases":["zip","plz","postal_code","postcode"]}],"returns":"zip_code, delivery{available, market_id}, pickup_available, pickup[]{market_id, name, company_name, street, house_number, zip_code, city, distance_m, lat, lon, pickup_variant, is_pickup_station}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"zip_code":"50667"}}]},{"name":"ricardo","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Ricardo API scraper - Switzerland's #1 marketplace (ricardo.ch): auction and fixed-price article search with the current asking price, buy-now price, bid count, condition, shipping and pickup, seller and promoted flags; the live bid ladder and full bid history for any article; the seller's listings; the category tree; and keyword suggestions. Swiss francs, de/fr/it. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ricardo/v1","spec_available":true,"actions":[{"name":"search","description":"Search ricardo.ch by keyword and/or category: article id, title, image, condition, the current asking price (next bid) and buy-now price in CHF, bid count, closing time, shipping cost and pickup location, seller id and promoted/highlight flags. Filter by offer type (auction / buy-now), condition, shipping or pickup, price range, location (zip + radius), seller type and 'has bids'; sort by relevance, ending soon, newest, price or bids. Promoted 'Top-Angebot' rows are dropped and counted; a misspelling returns its matches plus the site's spelling suggestion.","required_params":[],"optional_params":["query","category","offer_type","condition","shipping","seller_type","price_min","price_max","zip_code","radius","with_bids_only","sort","page","include_sponsored","language","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword as typed into ricardo's search box (de/fr/it).","on_invalid":"reject","example":"velo","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"A ricardo category: its slug (velos-82249), a /c/<slug>/ URL, or a numeric id (resolved to the slug for `language`). `categories` and search rows list them. Combine with query to search within a category.","on_invalid":"reject","example":"velos-82249","aliases":["category_slug","category_id"]},{"name":"offer_type","type":"enum","required":false,"description":"auction, fixed_price or auction_with_buynow.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"auction"},{"value":"fixed_price","label":"fixed_price"},{"value":"auction_with_buynow","label":"auction_with_buynow"}]},{"name":"condition","type":"array","required":false,"description":"One or more of new, like_new, used, defective, antique.","on_invalid":"reject","allowed_values":[{"value":"new","label":"new"},{"value":"like_new","label":"like_new"},{"value":"used","label":"used"},{"value":"defective","label":"defective"},{"value":"antique","label":"antique"}]},{"name":"shipping","type":"enum","required":false,"description":"free_shipping, paid_shipping or pickup.","on_invalid":"reject","allowed_values":[{"value":"free_shipping","label":"free_shipping"},{"value":"paid_shipping","label":"paid_shipping"},{"value":"pickup","label":"pickup"}]},{"name":"seller_type","type":"enum","required":false,"description":"private, private_commercial or dealer.","on_invalid":"reject","allowed_values":[{"value":"private","label":"private"},{"value":"dealer","label":"dealer"}]},{"name":"price_min","type":"number","required":false,"description":"Lowest item price in CHF (bid or buy-now).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest item price in CHF.","on_invalid":"reject","example":500,"minimum":0},{"name":"zip_code","type":"string","required":false,"description":"Swiss postcode to search around (with radius).","on_invalid":"reject","example":"8001"},{"name":"radius","type":"integer","required":false,"description":"Kilometres around zip_code.","on_invalid":"reject","minimum":0,"maximum":200,"aliases":["range"]},{"name":"with_bids_only","type":"boolean","required":false,"description":"Only auctions that already have at least one bid.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Order. Only orderings measured to change the results are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"ricardo's own relevance (default)"},{"value":"ending_soon","label":"Closing soonest first"},{"value":"newest","label":"Most recently listed first"},{"value":"price_asc","label":"Cheapest item price first"},{"value":"price_desc","label":"Most expensive item price first"},{"value":"most_bids","label":"Most bids first"},{"value":"total_price_asc","label":"Cheapest incl. shipping first"},{"value":"total_price_desc","label":"Most expensive incl. shipping first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based (60 articles per page). A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"include_sponsored","type":"boolean","required":false,"description":"ricardo promotes 'Top-Angebot' articles at the top, ignoring the sort. They are dropped by default and counted in sponsored_dropped; true returns them with is_promoted: true. count is the organic rows.","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"Site language for titles and category slugs: de, fr or it (ricardo.ch is Swiss).","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"}],"default":"de","example":"de","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Cloudflare challenges (1-6).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8}],"returns":"articles[]{article_id, title, url, image, thumbnail, category_id, condition (new|like_new|used|defective|antique), currency (CHF), offer_type (auction|fixed_price|auction_with_buynow), is_auction, is_buy_now, next_bid_price (the current ASKING price / next bid, CHF; NOT the current highest bid), current_bid (null on rows - use article/bids), bids_count, has_bids, buy_now_price, can_make_offer, money_guard, start_date, end_date, created_date, seller_id, brand, size, product_type, co2_savings, shipping[]{method (pickup|shipping|freight), cost, currency, zip_code, city}, pickup_location{zip_code, city}, is_promoted, promo_tier, highlight}, count, total_results, sponsored_dropped, spellcheck{from,to,corrected_total}, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"velo"}},{"name":"seller/articles","description":"Every live article a ricardo seller currently has listed, by seller nickname - same rows as search, with the same filters and sorts. ricardo does not publish a browser-free seller rating/score.","required_params":["seller"],"optional_params":["offer_type","condition","shipping","price_min","price_max","sort","page","include_sponsored","language","max_rotations"],"params":[{"name":"seller","type":"string","required":true,"description":"The seller's ricardo nickname (a search/bids row's seller nickname).","on_invalid":"reject","example":"JBMNT2020","aliases":["seller_nickname","nickname"]},{"name":"offer_type","type":"enum","required":false,"description":"auction, fixed_price or auction_with_buynow.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"auction"},{"value":"fixed_price","label":"fixed_price"},{"value":"auction_with_buynow","label":"auction_with_buynow"}]},{"name":"condition","type":"array","required":false,"description":"One or more of new, like_new, used, defective, antique.","on_invalid":"reject","allowed_values":[{"value":"new","label":"new"},{"value":"like_new","label":"like_new"},{"value":"used","label":"used"},{"value":"defective","label":"defective"},{"value":"antique","label":"antique"}]},{"name":"shipping","type":"enum","required":false,"description":"free_shipping, paid_shipping or pickup.","on_invalid":"reject","allowed_values":[{"value":"free_shipping","label":"free_shipping"},{"value":"paid_shipping","label":"paid_shipping"},{"value":"pickup","label":"pickup"}]},{"name":"price_min","type":"number","required":false,"description":"Lowest item price in CHF (bid or buy-now).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest item price in CHF.","on_invalid":"reject","example":500,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Order. Only orderings measured to change the results are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"ricardo's own relevance (default)"},{"value":"ending_soon","label":"Closing soonest first"},{"value":"newest","label":"Most recently listed first"},{"value":"price_asc","label":"Cheapest item price first"},{"value":"price_desc","label":"Most expensive item price first"},{"value":"most_bids","label":"Most bids first"},{"value":"total_price_asc","label":"Cheapest incl. shipping first"},{"value":"total_price_desc","label":"Most expensive incl. shipping first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based (60 articles per page). A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"include_sponsored","type":"boolean","required":false,"description":"ricardo promotes 'Top-Angebot' articles at the top, ignoring the sort. They are dropped by default and counted in sponsored_dropped; true returns them with is_promoted: true. count is the organic rows.","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"Site language for titles and category slugs: de, fr or it (ricardo.ch is Swiss).","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"}],"default":"de","example":"de","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Cloudflare challenges (1-6).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8}],"returns":"articles[]{article_id, title, url, image, thumbnail, category_id, condition (new|like_new|used|defective|antique), currency (CHF), offer_type (auction|fixed_price|auction_with_buynow), is_auction, is_buy_now, next_bid_price (the current ASKING price / next bid, CHF; NOT the current highest bid), current_bid (null on rows - use article/bids), bids_count, has_bids, buy_now_price, can_make_offer, money_guard, start_date, end_date, created_date, seller_id, brand, size, product_type, co2_savings, shipping[]{method (pickup|shipping|freight), cost, currency, zip_code, city}, pickup_location{zip_code, city}, is_promoted, promo_tier, highlight}, count, total_results, sponsored_dropped, spellcheck{from,to,corrected_total}, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"seller":"JBMNT2020"}},{"name":"article/bids","description":"The live bid ladder and full bid history for one article: current highest bid, start price, next minimum bid, bid increment, bid count, the time left, and every bid (amount, masked bidder nick, time, winning/autobid) - all in CHF. This is ricardo's auction core; the rich static record (description, photo gallery, seller score) is not available browser-free (see the docs).","required_params":["article_id"],"optional_params":["language","max_rotations"],"params":[{"name":"article_id","type":"string","required":true,"description":"The ricardo article id (the number in an article URL), or the URL itself.","on_invalid":"reject","example":"1308678306","aliases":["id","offer_id","url"]},{"name":"language","type":"enum","required":false,"description":"Site language for titles and category slugs: de, fr or it (ricardo.ch is Swiss).","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"}],"default":"de","example":"de","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Cloudflare challenges (1-6).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8}],"returns":"article_id, currency (CHF), current_bid (highest bid, null if none), start_price, next_minimum_bid, bid_increment, maximum_bid, bids_count, has_bids, end_date, remaining_time_seconds, is_open, bids[]{bid_id, amount, currency, time, bidder (masked), is_winning, is_autobid, transaction_method}","cacheable":true,"cache_ttl_seconds":30,"pricing":{"mode":"flat","credits":1},"example_params":{"article_id":"1308678306"}},{"name":"categories","description":"ricardo's category tree in the chosen language: id, name, slug, parent id and top-level flag. Use a slug (or id) as search's category. Filter by parent_id, or top_level for the top categories only.","required_params":[],"optional_params":["parent_id","top_level","language","max_rotations"],"params":[{"name":"parent_id","type":"integer","required":false,"description":"Only categories directly under this category id.","on_invalid":"reject","example":38399,"minimum":1},{"name":"top_level","type":"boolean","required":false,"description":"Only the ~28 top-level categories.","on_invalid":"reject","default":false},{"name":"language","type":"enum","required":false,"description":"Site language for titles and category slugs: de, fr or it (ricardo.ch is Swiss).","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"}],"default":"de","example":"de","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Cloudflare challenges (1-6).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8}],"returns":"categories[]{category_id, name, display_name, slug, parent_id, is_top_level}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":3},"example_params":{"top_level":true}},{"name":"suggest","description":"ricardo's own keyword suggestions for the start of a search term, each with the category it points to when ricardo attaches one.","required_params":["query"],"optional_params":["language","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a keyword.","on_invalid":"reject","example":"velo","aliases":["q","keyword"]},{"name":"language","type":"enum","required":false,"description":"Site language for titles and category slugs: de, fr or it (ricardo.ch is Swiss).","on_invalid":"reject","allowed_values":[{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"it","label":"Italian"}],"default":"de","example":"de","aliases":["lang","locale"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many fresh exits to try when Cloudflare challenges (1-6).","on_invalid":"ignore","default":5,"minimum":1,"maximum":8}],"returns":"suggestions[]{label, type, category_id, category_name, category_slug}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"velo"}}]},{"name":"rightmove","category":{"id":"real-estate","title":"Real Estate"},"title":"Rightmove API scraper — UK property data: for-sale, to-rent, commercial and student listings with full filters (price, beds, baths, property type, size, radius, added-within, sort, furnishing), complete property detail (price, EPC, floorplans, key features, nearest stations, agent), estate-agent branch profiles, Land-Registry sold prices and location autocomplete — no API key required","version":"1.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/rightmove/v1","spec_available":true,"actions":[{"name":"location_search","description":"resolve a text location to a Rightmove locationIdentifier (LOS typeahead)","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text place to resolve (town, postcode, station, region).","on_invalid":"reject","example":"London","aliases":["location"]},{"name":"limit","type":"integer","required":false,"description":"Max location matches to return.","on_invalid":"ignore","default":10,"example":10,"minimum":1}],"returns":"matches[] (location_identifier/id/type/display_name), count. Rightmove's typeahead accepts only letters, digits and spaces, so any other character in `query` (comma, full stop, hyphen, apostrophe, ampersand, brackets) is replaced with a space before the lookup; when that happens the response carries `query_as_sent` and `query_normalised: true`. This is what makes a display_name from this very endpoint usable as the next query.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"London"}},{"name":"search","description":"Search UK property listings by location (for sale / to rent / commercial / student) with structured filters: price, beds, baths, property type, size, radius, added-within, sort, and (rent) furnishing & let-type. Paginate with index/max_pages.","required_params":[],"optional_params":["location","location_identifier","channel","for_rent","price_min","price_max","beds_min","beds_max","baths_min","property_type","sqft_min","sqft_max","radius","added_within_days","sort","furnished","let_type","must_have","dont_show","include_sstc","max_pages","fetch_all","index","filters"],"params":[{"name":"location","type":"string","required":false,"description":"Free-text location (auto-resolved to a Rightmove locationIdentifier). Provide this OR location_identifier.","on_invalid":"ignore","example":"London","aliases":["query"]},{"name":"location_identifier","type":"string","required":false,"description":"A Rightmove locationIdentifier from location_search (e.g. REGION^87490, OUTCODE^2522, BRANCH^45021). Provide this OR location.","on_invalid":"ignore","example":"REGION^87490","aliases":["locationIdentifier"]},{"name":"channel","type":"enum","required":false,"description":"Rightmove channel to search (default buy). Canonical values + the listed aliases are accepted; any other value is rejected with this list.","on_invalid":"reject","allowed_values":[{"value":"buy","label":"For sale"},{"value":"rent","label":"To rent"},{"value":"new_homes","label":"New homes"},{"value":"commercial_sale","label":"Commercial for sale"},{"value":"commercial_rent","label":"Commercial to rent"},{"value":"student","label":"Student accommodation"},{"value":"for_sale","label":"= buy"},{"value":"sale","label":"= buy"},{"value":"to_rent","label":"= rent"},{"value":"lettings","label":"= rent"},{"value":"commercial","label":"= commercial_sale"},{"value":"new_build","label":"= new_homes"}],"default":"buy","example":"buy"},{"name":"for_rent","type":"boolean","required":false,"description":"Shortcut: true selects the rent channel when `channel` is not set.","on_invalid":"ignore","example":false},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in GBP (sale price, or monthly rent for channel=rent).","on_invalid":"ignore","example":400000,"minimum":0,"aliases":["min_price","minPrice"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in GBP (sale price, or monthly rent for channel=rent).","on_invalid":"ignore","example":800000,"minimum":0,"aliases":["max_price","maxPrice"]},{"name":"beds_min","type":"integer","required":false,"description":"Minimum bedrooms (2 = 2+; use 0 for studios).","on_invalid":"ignore","example":2,"minimum":0,"maximum":10,"aliases":["beds","min_bedrooms","minBedrooms"]},{"name":"beds_max","type":"integer","required":false,"description":"Maximum bedrooms.","on_invalid":"ignore","example":4,"minimum":0,"maximum":10,"aliases":["max_bedrooms","maxBedrooms"]},{"name":"baths_min","type":"integer","required":false,"description":"Minimum bathrooms (2 = 2+).","on_invalid":"ignore","example":2,"minimum":0,"maximum":10,"aliases":["baths","min_bathrooms","minBathrooms"]},{"name":"property_type","type":"string","required":false,"description":"Property type — one or several comma-separated. One of: detached, semi-detached, terraced, flat, bungalow, land, park-home (e.g. 'detached,semi-detached'). 'apartment'=flat.","on_invalid":"ignore","example":"flat","aliases":["property_types","home_type","propertyTypes"]},{"name":"sqft_min","type":"integer","required":false,"description":"Minimum floor area in square FEET.","on_invalid":"ignore","example":800,"minimum":0,"aliases":["min_size","minSize"]},{"name":"sqft_max","type":"integer","required":false,"description":"Maximum floor area in square feet.","on_invalid":"ignore","example":2000,"minimum":0,"aliases":["max_size","maxSize"]},{"name":"radius","type":"number","required":false,"description":"Search radius in MILES around the location (0=this area only; 0.25/0.5/1/3/5/10/15/20/30/40).","on_invalid":"ignore","example":1.0,"minimum":0,"maximum":40,"aliases":["radius_miles"]},{"name":"added_within_days","type":"integer","required":false,"description":"Only listings added within the last N days (1=last 24h, 7=this week, 14, 30...).","on_invalid":"ignore","example":7,"minimum":1,"aliases":["max_days_since_added","maxDaysSinceAdded"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering (default = Rightmove's relevance/featured order).","on_invalid":"ignore","allowed_values":[{"value":"newest","label":"Newest listed"},{"value":"oldest","label":"Oldest listed"},{"value":"price_high","label":"Price: high to low"},{"value":"price_low","label":"Price: low to high"}],"example":"newest"},{"name":"furnished","type":"enum","required":false,"description":"RENT only: furnishing type.","on_invalid":"ignore","allowed_values":[{"value":"furnished","label":"Furnished"},{"value":"unfurnished","label":"Unfurnished"},{"value":"partFurnished","label":"Part furnished"},{"value":"furnishedOrUnfurnished","label":"Either"}],"example":"furnished","aliases":["furnish_type","furnishTypes"]},{"name":"let_type","type":"enum","required":false,"description":"RENT only: let duration.","on_invalid":"ignore","allowed_values":[{"value":"longTerm","label":"Long term let"},{"value":"shortTerm","label":"Short term let"}],"example":"longTerm","aliases":["letType"]},{"name":"must_have","type":"enum","required":false,"description":"Require a feature (one of garden/parking/newHome/retirement/auction).","on_invalid":"ignore","allowed_values":[{"value":"garden","label":"Garden"},{"value":"parking","label":"Parking"},{"value":"newHome","label":"New home"},{"value":"retirement","label":"Retirement"},{"value":"auction","label":"Auction"}],"example":"garden","aliases":["mustHave"]},{"name":"dont_show","type":"enum","required":false,"description":"Exclude a listing class (newHome/retirement/sharedOwnership/auction).","on_invalid":"ignore","allowed_values":[{"value":"newHome","label":"Hide new homes"},{"value":"retirement","label":"Hide retirement"},{"value":"sharedOwnership","label":"Hide shared ownership"},{"value":"auction","label":"Hide auctions"}],"example":"retirement","aliases":["hide","dontShow"]},{"name":"include_sstc","type":"boolean","required":false,"description":"Include Sold STC / Under Offer listings (buy channel). Default false.","on_invalid":"ignore","example":false,"aliases":["includeSSTC"]},{"name":"max_pages","type":"integer","required":false,"description":"How many 24-result pages to fetch and merge (ignored when fetch_all=true).","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"fetch_all","type":"boolean","required":false,"description":"Fetch every page up to Rightmove's ~1,000-result cap (overrides max_pages).","on_invalid":"ignore","example":false},{"name":"index","type":"integer","required":false,"description":"Starting result offset; increments by 24 per page (0, 24, 48, ...).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"filters","type":"object","required":false,"description":"Advanced escape-hatch: extra raw Rightmove query params as a key->value map, merged AFTER (and overriding) the typed filters above. Only needed for niche params not exposed as first-class fields.","on_invalid":"ignore","example":{"maxFloorLevel":0}}],"returns":"items[] (property_id/price_amount/price_display/bedrooms/bathrooms/lat/lon/agent/...), count, channel, result_count (true market total), filters_applied, pages_fetched, stop_reason","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"London"}},{"name":"property_detail","description":"Full property record: price (+£/sqft), description, key features, tenure & lease years, living costs (council tax band, service charge, ground rent), structured features (utilities/heating/parking/garden/flood-risk), images, floorplans, EPC graphs, sizings, nearest stations, street-view coords and the listing agent.","required_params":["property_id"],"optional_params":[],"params":[{"name":"property_id","type":"string","required":true,"description":"Rightmove property id (the digits in a /properties/<id> URL or a search result's property_id).","on_invalid":"reject","example":"148711631","aliases":["id"]}],"returns":"listing{} — description, key_features[], price(+£/sqft), tenure, years_remaining_on_lease, living_costs{council_tax_band, annual_service_charge, annual_ground_rent}, features{}, images[], floorplans[], epc_graphs[], sizings[], nearest_stations[], street_view{}, shared_ownership{}, agent{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"property_id":"148711631"}},{"name":"agent","description":"estate-agent branch profile (+ that branch's live listings via BRANCH^id)","required_params":[],"optional_params":["branch_url","branch_id","max_pages"],"params":[{"name":"branch_url","type":"string","required":false,"description":"An estate-agent branch landing-page URL (full or path). Provide this OR branch_id.","on_invalid":"ignore","example":"/estate-agents/agent/Aspire/Clapham-45021.html","aliases":["branch_profile_url"]},{"name":"branch_id","type":"integer","required":false,"description":"Rightmove branch id — lists that branch's live stock via BRANCH^id. Provide this OR branch_url.","on_invalid":"ignore","example":45021,"aliases":["id"]},{"name":"max_pages","type":"integer","required":false,"description":"How many 24-result pages to fetch and merge (ignored when fetch_all=true).","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"agent{} (branch_display_name/company_name/telephones/total_properties_for_sale/...); with branch_id also returns that branch's listings[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"branch_url":"/estate-agents/agent/Aspire/Clapham-45021.html"}},{"name":"similar","description":"listings similar to a property (same area + price/bedroom band)","required_params":["property_id"],"optional_params":[],"params":[{"name":"property_id","type":"string","required":true,"description":"Rightmove property id (the digits in a /properties/<id> URL or a search result's property_id).","on_invalid":"reject","example":"148711631","aliases":["id"]}],"returns":"items[] (comparable listings, same shape as search), count, source_property_id, similar_url","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"property_id":"148711631"}},{"name":"sold_prices","description":"sold/transaction history: by location (search) or per-property (detail_url|uuid). Land-Registry sold data with full per-address transaction history. Area mode pages with `page` (25 rows/page, different rows on every page).","required_params":[],"optional_params":["location","detail_url","uuid","page"],"params":[{"name":"location","type":"string","required":false,"description":"Area for sold-price history (postcode/outcode/town, e.g. 'SW9', 'KT2 5HF'). Provide this OR detail_url/uuid.","on_invalid":"ignore","example":"SW9","aliases":["query"]},{"name":"detail_url","type":"string","required":false,"description":"A house-prices detail URL for one property's sold history (alternative to location).","on_invalid":"ignore","example":"https://www.rightmove.co.uk/house-prices/details/e1dea6e6"},{"name":"uuid","type":"string","required":false,"description":"A house-prices detail uuid for one property's sold history (alternative to location).","on_invalid":"ignore","example":"e1dea6e6"},{"name":"page","type":"integer","required":false,"description":"1-based page of sold-price results (area mode), 25 rows per page. Each page returns different transactions. The reachable depth is capped per area (returned as `page_cap` / `max_records`, e.g. 40 pages = 1,000 rows for a busy London outcode) — that cap is usually SMALLER than `total_reported`; a page past it returns no rows and `page_clamped: true`. Narrow the area to reach more history.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"area mode: items[] (address/property_type/transactions[]/latest_price/lat/lon), count, page, page_size (25), page_cap (last reachable page for this area), max_records (page_cap x 25 — how much of the history paging can actually reach), page_clamped (true when `page` is past page_cap: no rows are returned rather than repeating the last page), total_reported (every transaction the area has, usually LARGER than max_records), pagination; per-property mode (detail_url|uuid): listing{} with full transactions[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"SW9"}}]},{"name":"ripley","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Ripley API — Chile and Peru department store + Mercado Ripley: search, categories, normal / internet / Tarjeta Ripley prices, seller, stock, specs and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ripley/v1","spec_available":true,"actions":[{"name":"search","description":"Search Ripley (simple.ripley.cl Chile or simple.ripley.com.pe Peru) — Ripley's own stock and the Mercado Ripley marketplace shops. One page of 48 products with the three prices kept apart (normal crossed price, internet price, Tarjeta Ripley card price), discount %, seller and whether it is Ripley or a marketplace shop, rating, review count, image, colours and variant SKUs; plus brand counts, price range and the source's filter facets. Sponsored ads come in a separate `sponsored` list. Filters: brand, seller_type, min_price, max_price; sort; page. `query` is required.","required_params":["query"],"optional_params":["country","page","sort","brand","seller_type","min_price","max_price"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the Ripley search box (Spanish: notebook, zapatillas, televisor, sofá).","on_invalid":"reject","example":"notebook","aliases":["q","keyword","term","search"]},{"name":"country","type":"enum","required":false,"description":"cl = simple.ripley.cl (Chile, CLP), pe = simple.ripley.com.pe (Peru, PEN).","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — simple.ripley.cl (CLP)"},{"value":"pe","label":"Peru — simple.ripley.com.pe (PEN)"}],"default":"cl","aliases":["site","market"]},{"name":"page","type":"integer","required":false,"description":"Result page (48 organic products per page).","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"relevance | price_low | price_high | rating.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (the site's default)"},{"value":"price_low","label":"Lowest price first"},{"value":"price_high","label":"Highest price first"},{"value":"rating","label":"Best rated first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled as the `facets.brands` list shows it.","on_invalid":"reject","example":"HP","aliases":["marca"]},{"name":"seller_type","type":"enum","required":false,"description":"ripley = sold by Ripley itself; marketplace = Mercado Ripley shops.","on_invalid":"reject","allowed_values":[{"value":"ripley","label":"Sold by Ripley"},{"value":"marketplace","label":"Sold by a marketplace shop (Mercado Ripley)"}],"aliases":["sold_by"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest price, in the local currency. The source compares its lowest payable price (the Tarjeta Ripley card price when there is one), so a row can carry a `price` outside the range.","on_invalid":"reject","minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Highest price, in the local currency. Same rule as min_price: measured 2026-10-15, 4 of 48 rows had price 509 990-549 990 over max 500 000 with card_price 489 990-499 990 inside.","on_invalid":"reject","minimum":0}],"returns":"total, page, page_size (48 organic rows), last_page, has_more, returned, products[]{id, parent_id, name, brand, url, price (internet), normal_price, internet_price, card_price (Tarjeta Ripley), discount_pct, currency, in_stock_index, seller, seller_legal_name, seller_type (ripley|marketplace), rating, review_count, category_code, image, colors, variant_count, variant_skus}, sponsored[] (ads, same shape, NOT filtered by the source), facets{brands, price_range, filters}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"notebook"}},{"name":"category","description":"Browse one Ripley category by its path (e.g. tecno/computacion/notebooks) — the same rows, prices, filters, sort and facets as `search`, without a keyword. Paths come from `categories` or from the site's own category URL. `category` is required.","required_params":["category"],"optional_params":["country","page","sort","brand","seller_type","min_price","max_price"],"params":[{"name":"category","type":"string","required":true,"description":"Category path as `categories` returns it, or a full simple.ripley.cl / simple.ripley.com.pe category URL.","on_invalid":"reject","example":"tecno/computacion/notebooks","aliases":["path","category_path","url"]},{"name":"country","type":"enum","required":false,"description":"cl = simple.ripley.cl (Chile, CLP), pe = simple.ripley.com.pe (Peru, PEN).","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — simple.ripley.cl (CLP)"},{"value":"pe","label":"Peru — simple.ripley.com.pe (PEN)"}],"default":"cl","aliases":["site","market"]},{"name":"page","type":"integer","required":false,"description":"Result page (48 organic products per page).","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"relevance | price_low | price_high | rating.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (the site's default)"},{"value":"price_low","label":"Lowest price first"},{"value":"price_high","label":"Highest price first"},{"value":"rating","label":"Best rated first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled as the `facets.brands` list shows it.","on_invalid":"reject","example":"HP","aliases":["marca"]},{"name":"seller_type","type":"enum","required":false,"description":"ripley = sold by Ripley itself; marketplace = Mercado Ripley shops.","on_invalid":"reject","allowed_values":[{"value":"ripley","label":"Sold by Ripley"},{"value":"marketplace","label":"Sold by a marketplace shop (Mercado Ripley)"}],"aliases":["sold_by"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest price, in the local currency. The source compares its lowest payable price (the Tarjeta Ripley card price when there is one), so a row can carry a `price` outside the range.","on_invalid":"reject","minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Highest price, in the local currency. Same rule as min_price: measured 2026-10-15, 4 of 48 rows had price 509 990-549 990 over max 500 000 with card_price 489 990-499 990 inside.","on_invalid":"reject","minimum":0}],"returns":"total, page, page_size (48 organic rows), last_page, has_more, returned, products[]{id, parent_id, name, brand, url, price (internet), normal_price, internet_price, card_price (Tarjeta Ripley), discount_pct, currency, in_stock_index, seller, seller_legal_name, seller_type (ripley|marketplace), rating, review_count, category_code, image, colors, variant_count, variant_skus}, sponsored[] (ads, same shape, NOT filtered by the source), facets{brands, price_range, filters}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"tecno/computacion/notebooks"}},{"name":"categories","description":"The Ripley category tree (Chile or Peru): departments and their sub-categories with the `path` to pass to `category`.","required_params":[],"optional_params":["country","depth"],"params":[{"name":"country","type":"enum","required":false,"description":"cl = Chile, pe = Peru.","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — simple.ripley.cl (CLP)"},{"value":"pe","label":"Peru — simple.ripley.com.pe (PEN)"}],"default":"cl","aliases":["site","market"]},{"name":"depth","type":"integer","required":false,"description":"Levels of children to include (1-4).","on_invalid":"reject","default":2,"minimum":1,"maximum":4}],"returns":"categories[]{id, name, path, child_count, children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{}},{"name":"product","description":"One Ripley product by SKU (a search row's `id`), parent id or product URL: the three prices kept apart — normal (crossed), internet and Tarjeta Ripley card price — with discount %, stock, EAN, brand, model, part number, seller (Ripley or the marketplace shop) with its legal name and tax id, category path, rating and review count, all images, description, the full specification sheet, every variant with its own SKU, prices and stock, and extended-warranty offers. Optional `commune`: delivery options for that commune (one extra request). One of `id` or `url` is required.","required_params":[],"optional_params":["id","url","country","commune"],"params":[{"name":"id","type":"string","required":false,"description":"SKU as search rows return it (`id`), or the parent id (ending in P).","on_invalid":"reject","example":"2000403871267","aliases":["sku","product_id","parent_id"]},{"name":"url","type":"string","required":false,"description":"A simple.ripley.cl / simple.ripley.com.pe product URL (the trailing ...<sku>p is read).","on_invalid":"reject","aliases":["product_url","link"]},{"name":"country","type":"enum","required":false,"description":"cl = Chile, pe = Peru (taken from the URL when one is given).","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — simple.ripley.cl (CLP)"},{"value":"pe","label":"Peru — simple.ripley.com.pe (PEN)"}],"default":"cl","aliases":["site","market"]},{"name":"commune","type":"string","required":false,"description":"Numeric commune / district code for delivery options (Chile 13101 = Santiago, Peru 150101 = Lima).","on_invalid":"reject","example":"13101","aliases":["comuna","locality","distrito"]}],"returns":"id, parent_id, name, brand, model, part_number, ean, url, price, normal_price, internet_price, card_price, discount_pct, card_discount_pct, currency, in_stock, seller, seller_legal_name, seller_tax_id, seller_type, category_path, rating, review_count, description, images, colors, specifications, variants[], extended_warranties[], delivery[] (with commune)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"2000403871267"}},{"name":"reviews","description":"Customer reviews of one Ripley product: rating, title, text, author nickname, location, date and photos, plus the average, the rating histogram and the totals. Paged; sort newest / oldest / rating_high / rating_low / with_media. `id` is required.","required_params":["id"],"optional_params":["country","page","limit","sort"],"params":[{"name":"id","type":"string","required":true,"description":"SKU or parent id of the product (search row `id`).","on_invalid":"reject","example":"2000403871267","aliases":["sku","product_id","parent_id"]},{"name":"country","type":"enum","required":false,"description":"cl = Chile, pe = Peru.","on_invalid":"reject","allowed_values":[{"value":"cl","label":"Chile — simple.ripley.cl (CLP)"},{"value":"pe","label":"Peru — simple.ripley.com.pe (PEN)"}],"default":"cl","aliases":["site","market"]},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Reviews per page (1-50).","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"newest | oldest | rating_high | rating_low | with_media.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest"},{"value":"oldest","label":"Oldest"},{"value":"rating_high","label":"HighestRating"},{"value":"rating_low","label":"LowestRating"},{"value":"with_media","label":"MediaSort"}],"default":"newest"}],"returns":"id, total, rating_count, average_rating, histogram, page, limit, returned, has_more, reviews[]{rating, title, text, author, location, created_at, media}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"2000403871267"}}]},{"name":"rohlik","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Rohlik API — online grocery prices from rohlik.cz, knuspr.de, gurkerl.at, kifli.hu and sezamo.ro: price, regular price, unit price, Xtra member price kept apart, multi-buy deals, clearance offers, stock, brand, origin, EAN, ingredients, allergens and nutrition","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/rohlik/v1","spec_available":true,"actions":[{"name":"search","description":"Search one shop of the Rohlik group (CZ / DE / AT / HU / RO) like its search box: price a non-member pays, regular price, unit price, the Xtra member price kept apart, multi-buy and mix-and-match deals, same-day-delivery discount, clearance offer, stock, brand and origin per product.","required_params":["query"],"optional_params":["country","page","page_size","sort","brand","on_sale"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the shop's search box, in the shop's language (mléko, Milch, tej, lapte).","on_invalid":"reject","example":"mléko","aliases":["q","keyword","search","term"]},{"name":"country","type":"enum","required":false,"description":"Which shop of the group. Product and category ids belong to one shop.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — rohlik.cz (CZK)"},{"value":"de","label":"Germany — knuspr.de (EUR)"},{"value":"at","label":"Austria — gurkerl.at (EUR)"},{"value":"hu","label":"Hungary — kifli.hu (HUF)"},{"value":"ro","label":"Romania — sezamo.ro (RON)"}],"default":"cz","aliases":["market","shop"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-60 (default 24).","on_invalid":"reject","default":24,"minimum":1,"maximum":60,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (the shop's four sorts; they order by the price the shop displays, which can be a member price).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The shop's recommended order"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"unit_price_asc","label":"Unit price: low to high"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, as the brand_slug of a row gives it (e.g. miil, meggle, olma). An unknown brand answers NOT_FOUND.","on_invalid":"reject","example":"miil"},{"name":"on_sale","type":"boolean","required":false,"description":"Only products the shop lists under its 'Akce' (on sale) filter.","on_invalid":"reject","default":false,"aliases":["on_promotion","deals_only"]}],"returns":"query, country, shop, total, page, page_size, returned, has_more, products[]{rank, product_id, title, brand, brand_slug, amount_text, package_amount, package_unit, unit, sold_by ('unit' | 'weight'), price_is_estimate, price, original_price, discount_pct, price_valid_till, unit_price (per `unit`), currency, display_price, display_price_is_member_price, member_price (Xtra / Premium), member_price_program, member_price_welcome_offer, same_day_delivery_price, multi_buy[]{kind ('multi_buy' | 'mix_and_match'), min_quantity, price_each, unit_price, label, bundle_id, valid_till, promotion_id}, clearance{price, reason, pieces_left, promotion_id}, promotions[]{promotion_id, type, kind, min_quantity, price, unit_price, original_price, valid_till, active, welcome_price, bundle_id, label, description, reason}, in_stock, availability, unavailability_reason, max_order_quantity, expected_replenishment, shelf_life{average_days, minimal_days, best_before}, warehouse_id, premium_only, country_of_origin[], country_of_origin_codes[], main_category_id, badges[], archived, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"mléko","country":"cz"}},{"name":"category","description":"Every product of one category (department or aisle) of one shop, paged, with the same rows, sorts and filters as search.","required_params":["category_id"],"optional_params":["country","page","page_size","sort","brand","on_sale"],"params":[{"name":"category_id","type":"string","required":true,"description":"Category id from the `categories` action or a row's main_category_id / a product's breadcrumbs (e.g. 300105001 Mléko a mléčné nápoje), or a /c300105001-… URL.","on_invalid":"reject","example":"300105001","aliases":["category","categoryId"]},{"name":"country","type":"enum","required":false,"description":"Which shop of the group. Product and category ids belong to one shop.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — rohlik.cz (CZK)"},{"value":"de","label":"Germany — knuspr.de (EUR)"},{"value":"at","label":"Austria — gurkerl.at (EUR)"},{"value":"hu","label":"Hungary — kifli.hu (HUF)"},{"value":"ro","label":"Romania — sezamo.ro (RON)"}],"default":"cz","aliases":["market","shop"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-60 (default 24).","on_invalid":"reject","default":24,"minimum":1,"maximum":60,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (the shop's four sorts; they order by the price the shop displays, which can be a member price).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The shop's recommended order"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"unit_price_asc","label":"Unit price: low to high"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, as the brand_slug of a row gives it (e.g. miil, meggle, olma). An unknown brand answers NOT_FOUND.","on_invalid":"reject","example":"miil"},{"name":"on_sale","type":"boolean","required":false,"description":"Only products the shop lists under its 'Akce' (on sale) filter.","on_invalid":"reject","default":false,"aliases":["on_promotion","deals_only"]}],"returns":"category_id, country, shop, total, page, page_size, returned, has_more, products[]{rank, product_id, title, brand, brand_slug, amount_text, package_amount, package_unit, unit, sold_by ('unit' | 'weight'), price_is_estimate, price, original_price, discount_pct, price_valid_till, unit_price (per `unit`), currency, display_price, display_price_is_member_price, member_price (Xtra / Premium), member_price_program, member_price_welcome_offer, same_day_delivery_price, multi_buy[]{kind ('multi_buy' | 'mix_and_match'), min_quantity, price_each, unit_price, label, bundle_id, valid_till, promotion_id}, clearance{price, reason, pieces_left, promotion_id}, promotions[]{promotion_id, type, kind, min_quantity, price, unit_price, original_price, valid_till, active, welcome_price, bundle_id, label, description, reason}, in_stock, availability, unavailability_reason, max_order_quantity, expected_replenishment, shelf_life{average_days, minimal_days, best_before}, warehouse_id, premium_only, country_of_origin[], country_of_origin_codes[], main_category_id, badges[], archived, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"300105001","country":"cz"}},{"name":"promotions","description":"The shop's promotion shelves: `sales` = every product with a current price cut or deal (the shop's 'Cenové trháky'), `last_minute` = the near-expiry / damaged-pack clearance shelf ('Zachraň a ušetři'); optionally inside one category, for one brand.","required_params":[],"optional_params":["country","kind","category_id","page","page_size","sort","brand"],"params":[{"name":"country","type":"enum","required":false,"description":"Which shop of the group. Product and category ids belong to one shop.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — rohlik.cz (CZK)"},{"value":"de","label":"Germany — knuspr.de (EUR)"},{"value":"at","label":"Austria — gurkerl.at (EUR)"},{"value":"hu","label":"Hungary — kifli.hu (HUF)"},{"value":"ro","label":"Romania — sezamo.ro (RON)"}],"default":"cz","aliases":["market","shop"]},{"name":"kind","type":"enum","required":false,"description":"Which promotion shelf.","on_invalid":"reject","allowed_values":[{"value":"sales","label":"Price cuts and deals"},{"value":"last_minute","label":"Near-expiry / damaged-pack clearance"}],"default":"sales"},{"name":"category_id","type":"string","required":false,"description":"Category id from the `categories` action or a row's main_category_id / a product's breadcrumbs (e.g. 300105001 Mléko a mléčné nápoje), or a /c300105001-… URL.","on_invalid":"reject","example":"300105001","aliases":["category","categoryId"]},{"name":"page","type":"integer","required":false,"description":"Page number, from 1. Past the last page the answer is an empty page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-60 (default 24).","on_invalid":"reject","default":24,"minimum":1,"maximum":60,"aliases":["limit"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results (the shop's four sorts; they order by the price the shop displays, which can be a member price).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The shop's recommended order"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"unit_price_asc","label":"Unit price: low to high"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, as the brand_slug of a row gives it (e.g. miil, meggle, olma). An unknown brand answers NOT_FOUND.","on_invalid":"reject","example":"miil"}],"returns":"kind, category_id, country, shop, total, page, page_size, returned, has_more, products[]{rank, product_id, title, brand, brand_slug, amount_text, package_amount, package_unit, unit, sold_by ('unit' | 'weight'), price_is_estimate, price, original_price, discount_pct, price_valid_till, unit_price (per `unit`), currency, display_price, display_price_is_member_price, member_price (Xtra / Premium), member_price_program, member_price_welcome_offer, same_day_delivery_price, multi_buy[]{kind ('multi_buy' | 'mix_and_match'), min_quantity, price_each, unit_price, label, bundle_id, valid_till, promotion_id}, clearance{price, reason, pieces_left, promotion_id}, promotions[]{promotion_id, type, kind, min_quantity, price, unit_price, original_price, valid_till, active, welcome_price, bundle_id, label, description, reason}, in_stock, availability, unavailability_reason, max_order_quantity, expected_replenishment, shelf_life{average_days, minimal_days, best_before}, warehouse_id, premium_only, country_of_origin[], country_of_origin_codes[], main_category_id, badges[], archived, image, url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"cz","kind":"sales"}},{"name":"product","description":"One product by the `product_id` a row returns: every price and deal (as search) plus EAN, description, ingredients, allergens, nutrition table per portion, shelf life, country of origin, breadcrumbs and images.","required_params":["product_id"],"optional_params":["country"],"params":[{"name":"product_id","type":"string","required":true,"description":"The `product_id` exactly as a row returns it (e.g. 1319937), or the product's URL on the shop.","on_invalid":"reject","example":"1319937","aliases":["id","url","product_url"]},{"name":"country","type":"enum","required":false,"description":"Which shop of the group. Product and category ids belong to one shop.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — rohlik.cz (CZK)"},{"value":"de","label":"Germany — knuspr.de (EUR)"},{"value":"at","label":"Austria — gurkerl.at (EUR)"},{"value":"hu","label":"Hungary — kifli.hu (HUF)"},{"value":"ro","label":"Romania — sezamo.ro (RON)"}],"default":"cz","aliases":["market","shop"]}],"returns":"country, shop, product{product_id, title, brand, brand_slug, ean, amount_text, package_amount, package_unit, unit, sold_by, price_is_estimate, price, original_price, discount_pct, price_valid_till, unit_price (per `unit`), currency, display_price, display_price_is_member_price, member_price (Xtra / Premium), member_price_program, member_price_welcome_offer, same_day_delivery_price, multi_buy[]{kind ('multi_buy' | 'mix_and_match'), min_quantity, price_each, unit_price, label, bundle_id, valid_till, promotion_id}, clearance{price, reason, pieces_left, promotion_id}, promotions[]{promotion_id, type, kind, min_quantity, price, unit_price, original_price, valid_till, active, welcome_price, bundle_id, label, description, reason}, in_stock, availability, unavailability_reason, max_order_quantity, shelf_life{…}, warehouse_id, premium_only, country_of_origin[], countries[], description, ingredients[]{title, type, ingredients[]}, ingredients_text, allergens[], allergens_may_contain[], nutrition[]{portion, values{energyKJ, energyKCal, fats, saturatedFats, carbohydrates, sugars, protein, salt, fiber: {amount, unit}}}, advice_for_safe_use, information[], breadcrumbs[]{category_id, name, level}, social_proof[], seller_id, main_category_id, badges[], images[], url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"1319937","country":"cz"}},{"name":"categories","description":"The shop's category tree: without `category_id` the top-level departments with their sub-category ids; with it, that category's sub-categories with names.","required_params":[],"optional_params":["country","category_id"],"params":[{"name":"country","type":"enum","required":false,"description":"Which shop of the group. Product and category ids belong to one shop.","on_invalid":"reject","allowed_values":[{"value":"cz","label":"Czechia — rohlik.cz (CZK)"},{"value":"de","label":"Germany — knuspr.de (EUR)"},{"value":"at","label":"Austria — gurkerl.at (EUR)"},{"value":"hu","label":"Hungary — kifli.hu (HUF)"},{"value":"ro","label":"Romania — sezamo.ro (RON)"}],"default":"cz","aliases":["market","shop"]},{"name":"category_id","type":"string","required":false,"description":"Category id from the `categories` action or a row's main_category_id / a product's breadcrumbs (e.g. 300105001 Mléko a mléčné nápoje), or a /c300105001-… URL.","on_invalid":"reject","example":"300105001","aliases":["category","categoryId"]}],"returns":"country, shop, category_id, returned, categories[]{category_id, name, slug, url, subcategory_ids[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"cz"}}]},{"name":"rozetka","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Rozetka API — search Ukraine's largest online store and marketplace and read products with UAH price, old price, card price, stock, seller, specs and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/rozetka/v1","spec_available":true,"actions":[{"name":"search","description":"Search Rozetka products by keyword with the site's own filters: category id, seller (Rozetka itself or marketplace sellers), price range in UAH, brand, delivery (ready to ship / pickup in Rozetka stores), Smart subscription, and price sort. Each row: product id, title, URL, brand, price and crossed-out price in UAH, discount, stock state, who sells it (Rozetka or the marketplace seller's name and star rating), condition, category, short specs, image, rating, review and question counts. Plus Rozetka's own total, the brands and categories of the result set.","required_params":["query"],"optional_params":["category","seller","min_price","max_price","brand","delivery","smart_subscription","sort","page","lang"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed into Rozetka's search box: Ukrainian, Russian or English, model numbers. Full-width characters are normalised. Rozetka would turn a broad word such as 'ноутбук' into a category page; this action always returns the product search itself.","on_invalid":"reject","example":"навушники","aliases":["q","text","keyword","keywords"]},{"name":"category","type":"string","required":false,"description":"Rozetka category id (digits) from this action's `categories` list or a row's category.id, e.g. 146229 (phone cases). A category that does not occur in the search is rejected with the ones that do.","on_invalid":"reject","example":"146229","aliases":["category_id","section_id"]},{"name":"seller","type":"enum","required":false,"description":"Only products sold by Rozetka itself, or only products of marketplace sellers.","on_invalid":"reject","allowed_values":[{"value":"rozetka","label":"Sold by Rozetka"},{"value":"marketplace","label":"Marketplace sellers"}]},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in UAH.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in UAH.","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_max"]},{"name":"brand","type":"string","required":false,"description":"Brand slug from this action's `brands` list (e.g. apple, samsung). Several brands comma-separated match any of them (samsung,lg).","on_invalid":"reject","example":"apple","aliases":["producer","brands"]},{"name":"delivery","type":"enum","required":false,"description":"Delivery filter Rozetka offers on search.","on_invalid":"reject","allowed_values":[{"value":"ready_to_ship","label":"Ready to ship (Готовий до відправлення)"},{"value":"rozetka_store_pickup","label":"Delivery to Rozetka stores (Доставка в магазини ROZETKA)"}]},{"name":"smart_subscription","type":"boolean","required":false,"description":"true = only products covered by the Rozetka Smart subscription (free delivery).","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order. Rozetka's search applies only these three.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 60 rows each. Rozetka serves at most 1,000 rows (17 pages) per search.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":17},{"name":"lang","type":"enum","required":false,"description":"Language of titles, category names and characteristic labels: Ukrainian (default) or Russian — Rozetka publishes both.","on_invalid":"reject","allowed_values":[{"value":"ua","label":"Ukrainian"},{"value":"ru","label":"Russian"}],"default":"ua"}],"returns":"results[]{product_id, title, url, brand, brand_slug, price, old_price, discount_pct, currency (UAH), source_usd_price, sell_status, in_stock, condition, sold_by (rozetka|marketplace), seller_id, merchant_id, seller_name, seller_stars, seller_url, category{id,title,url}, category_ids[], group_id, short_specs, image, smart_subscription, bonus_uah, rating{average, rated_count, review_count, question_count, distribution}} + total, total_reachable, pages, page, has_more, page_clamped, brands[]{slug,name,count}, categories[]{id,title,count,parent_id}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"навушники","seller":"rozetka"}},{"name":"product","description":"Full Rozetka product by product_id: title, brand, manufacturer code, current and crossed-out price in UAH, the Rozetka Card price when one is shown, stock state, pre-order flag, condition (new / refurbished / markdown), the seller (Rozetka or the marketplace seller's name and rating), category path, characteristics, description, warranty and return terms, colour/size variants each with its own price and stock, images and the rating with its 1-5 distribution.","required_params":["product_id"],"optional_params":["lang"],"params":[{"name":"product_id","type":"string","required":true,"description":"Rozetka product id exactly as a search row returns it (digits, e.g. 621368348). A rozetka.com.ua/…/p621368348/ product URL is accepted too.","on_invalid":"reject","example":"621368348","aliases":["id","goods_id","url","item_id"]},{"name":"lang","type":"enum","required":false,"description":"Language of titles, category names and characteristic labels: Ukrainian (default) or Russian — Rozetka publishes both.","on_invalid":"reject","allowed_values":[{"value":"ua","label":"Ukrainian"},{"value":"ru","label":"Russian"}],"default":"ua"}],"returns":"product{product_id, title, url, brand, brand_slug, brand_id, article, price, old_price, discount_pct, source_discount_pct, currency, card_price{price, label}, source_usd_price, sell_status, in_stock, status, is_preorder, condition, is_markdown, cart_quantity, seller{seller_id, merchant_id, sold_by, name, rank, votes, logo}, category{id,title,url}, category_ids[], breadcrumbs[], group_id, short_specs, characteristics[]{group, name, key, values[]}, description, warranty[], variants[]{product_id, is_current, title, url, options{}, price, old_price, sell_status, in_stock, seller_id, condition, image}, smart_subscription, images[], rating{average, rated_count, review_count, question_count, distribution}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"621368348"}},{"name":"reviews","description":"Buyer reviews (or buyer questions) of a Rozetka product: rating 1-5, text, pros, cons, verified-buyer flag, date, helpful votes, photo/video links and the seller's or Rozetka's replies. Order by newest, verified buyers first, photo/video reviews first, or most helpful; filter by star rating. 36 per page. Plus the product's review total and 1-5 distribution.","required_params":["product_id"],"optional_params":["type","sort","rating","page","lang"],"params":[{"name":"product_id","type":"string","required":true,"description":"Rozetka product id exactly as a search row returns it (digits, e.g. 621368348). A rozetka.com.ua/…/p621368348/ product URL is accepted too.","on_invalid":"reject","example":"621368348","aliases":["id","goods_id","url","item_id"]},{"name":"type","type":"enum","required":false,"description":"Reviews (відгуки) or buyer questions (питання).","on_invalid":"reject","allowed_values":[{"value":"reviews","label":"Reviews"},{"value":"questions","label":"Questions"}],"default":"reviews"},{"name":"sort","type":"enum","required":false,"description":"Order (Rozetka's own options). These reorder; they do not remove reviews.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"from_buyers","label":"Verified buyers first"},{"value":"with_media","label":"Reviews with photos or videos first"},{"value":"most_helpful","label":"Most helpful"}],"default":"newest"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with this star rating (1-5).","on_invalid":"reject","example":5,"minimum":1,"maximum":5,"aliases":["stars","mark"]},{"name":"page","type":"integer","required":false,"description":"Review page. Rozetka serves a fixed 36 reviews per page (it ignores any other page size).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"lang","type":"enum","required":false,"description":"Language of titles, category names and characteristic labels: Ukrainian (default) or Russian — Rozetka publishes both.","on_invalid":"reject","allowed_values":[{"value":"ua","label":"Ukrainian"},{"value":"ru","label":"Russian"}],"default":"ua"}],"returns":"reviews[]{review_id, type, author, rating, text, pros, cons, from_buyer, date, helpful_yes, helpful_no, attachments[], replies[]{author, text, is_seller, date}, seller_id} + summary{review_count, buyer_review_count, average, average_exact, rated_count, distribution, question_count}, page, page_size (36), pages, has_more, page_clamped","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"621368348"}},{"name":"prices","description":"Price, stock, seller type and rating for up to 60 Rozetka products in ONE call (Rozetka's own multi-product endpoint): current and crossed-out price in UAH, discount, stock state, sold by Rozetka or a marketplace seller (with the seller's name), category, rating and review count. Ids Rozetka does not know are listed in not_found.","required_params":["product_ids"],"optional_params":["lang"],"params":[{"name":"product_ids","type":"string","required":true,"description":"Up to 60 product ids, comma-separated or as a list, exactly as search rows return them.","on_invalid":"reject","example":"621368348,409254135","aliases":["ids","product_id"]},{"name":"lang","type":"enum","required":false,"description":"Language of titles, category names and characteristic labels: Ukrainian (default) or Russian — Rozetka publishes both.","on_invalid":"reject","allowed_values":[{"value":"ua","label":"Ukrainian"},{"value":"ru","label":"Russian"}],"default":"ua"}],"returns":"products[]{product_id, title, url, price, old_price, discount_pct, currency, sell_status, in_stock, sold_by, seller_id, merchant_id, seller_name, seller_stars, seller_url, category, rating{}} + not_found[], requested","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_ids":"621368348,409254135"}}]},{"name":"ruten","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Ruten Taiwan product search and detail","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/ruten/v1","spec_available":true,"actions":[{"name":"search","description":"Search native Ruten Taiwan fixed-price listings; current TWD minimum/range, images and source seller ID.","required_params":["query"],"optional_params":["page","max_results"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword in the original listing language; maximum100 characters.","on_invalid":"reject","example":"iphone","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based source result page. Basic first and second pages qualified; deep coverage is not guaranteed.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"max_results","type":"integer","required":false,"description":"Source page size1..24. Keep it constant while paging.","on_invalid":"reject","default":12,"minimum":1,"maximum":24,"aliases":["limit"]}],"returns":"results[{product_id,title,price,price_range,buy_now_price,current_bid=null,currency,images,seller,stock_quantity,stock_status,available}], count, page, page_size, source_total, source_limit, has_more, excluded_unqualified","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone","max_results":3}},{"name":"product_detail","description":"Resolve a fresh native Ruten fixed-price search ID to source detail; TWD price range, images, seller, location, condition and published description.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"Identity from search, or its https://www.ruten.com.tw/item/<id>/ URL. Native fixed-price scope only.","on_invalid":"reject","example":"22526947132485","aliases":["id","url","item_id"]}],"returns":"product{product_id,title,price,price_range,buy_now_price,current_bid=null,currency,images,description,location,condition_code,seller,stock_quantity,available,source_has_stock,availability_conflict,jsonld_price,price_conflict,gtin?,isbn?}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"22526947132485"}}]},{"name":"sainsburys","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Sainsbury's API — UK groceries, shelf and Nectar prices","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/sainsburys/v1","spec_available":true,"actions":[{"name":"search","description":"Search the public UK online grocery assortment by keyword and page. Page size varies; pages above the live ceiling are explicitly clamped to the final page. No unverified source filters.","required_params":["query"],"optional_params":["country","page"],"params":[{"name":"query","type":"string","required":true,"description":"Grocery search term, for example milk, cheese or apples.","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"country","type":"enum","required":false,"description":"Public storefront market; UK only.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom"}],"default":"uk","example":"uk"},{"name":"page","type":"integer","required":false,"description":"Positive page number. Values above last_page return the final page with page_clamped=true; stop when has_more=false.","on_invalid":"reject","default":1,"example":1,"minimum":1}],"returns":"products[], total, returned, unparsed_rows, requested_page, page, last_page, page_clamped, has_more and next_page. Products carry product_uid, URL, EANs, GBP shelf and separate Nectar prices, unit prices, promotions and source availability. price_gbp is null when the source publishes no price for that product (measured 3.5 percent of rows, often still is_available true); the row is still returned. unparsed_rows counts rows dropped because id or name was missing.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk"}},{"name":"product/detail","description":"Read the public product page by the source slug id or URL returned by search. Numeric product_uid is a separate legacy identifier and not a resolver.","required_params":[],"optional_params":["id","url","country"],"params":[{"name":"id","type":"string","required":false,"description":"Source URL slug id returned by search; required unless url is supplied.","on_invalid":"reject","example":"oatly-oat-drink-barista-edition-long-life-1l"},{"name":"url","type":"string","required":false,"description":"Sainsbury's gol-ui/product URL returned by search; required unless id is supplied.","on_invalid":"reject","example":"https://www.sainsburys.co.uk/gol-ui/product/oatly-oat-drink-barista-edition-long-life-1l"},{"name":"country","type":"enum","required":false,"description":"Public storefront market; UK only.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom"}],"default":"uk","example":"uk"}],"returns":"product with search fields plus complete cleaned product_details, nutrition_tables, descriptions, label notices, full-size images, brand, breadcrumbs and product classifications.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.sainsburys.co.uk/gol-ui/product/oatly-oat-drink-barista-edition-long-life-1l"}}]},{"name":"samsclub","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Sam's Club API — live samsclub.com data: product search with member prices, Instant Savings, unit prices and stock; one item in full with the in-club, delivery and shipping price of a chosen club, in-club stock count and aisle, UPC, model, specifications and ratings; and the clubs near a ZIP code. No login, no membership, no API key.","version":"1.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/samsclub/v1","spec_available":true,"actions":[{"name":"search","description":"Search samsclub.com by keyword with the site's own sort and price filter. Rows carry the card price, was-price and Instant Savings, unit price, stock status, pickup/delivery/shipping flags, rating and review count and SNAP flag; the site's paid tiles come in a separate `sponsored` list. Without `club_id` prices are the site's default club (named in `data.club`, `store_defaulted: true`); with `club_id` they are that club's in-club prices and assortment (`data.club.source: requested`).","required_params":["query"],"optional_params":["page","sort","min_price","max_price","club_id"],"params":[{"name":"query","type":"string","required":true,"description":"Search text as typed into samsclub.com's own search box. The site's search is semantic: a nonsense term still returns a few loosely related items ('zzqqxxyyqqvv' -> 8), so read `total` rather than expecting 0.","on_invalid":"reject","example":"paper towels","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"Result page (about 40-50 items each; 'chicken' 166 results -> 4 pages, no product repeated across pages 1-3; the sponsored tiles come apart in `sponsored`).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":25},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own sort keys. Unknown values are refused (the site silently falls back to best match).","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"Best match (default)"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"}],"default":"best_match","example":"price_low"},{"name":"min_price","type":"number","required":false,"description":"Lowest card price in USD. Applied by the site to the products ('chicken' 166 -> 13 for 20-30, every product row in range); the site's paid tiles ignore it and are returned apart in `sponsored`.","on_invalid":"reject","example":20,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest card price in USD (see min_price).","on_invalid":"reject","example":30,"minimum":0,"aliases":["price_max"]},{"name":"club_id","type":"string","required":false,"description":"Optional. Sam's Club club (store) number from the `clubs` action: the rows are then that club's assortment and in-club prices (the same price the club's item page shows). Without it the search is answered for the site's default club, exactly as before (`store_defaulted: true`).","on_invalid":"reject","example":"8165","aliases":["store_id","club"]}],"returns":"data.products[]: item_id, product_id, name, url, image, price, price_display, was_price, savings_amount, savings_text, price_type (MEMBER = Instant Savings), unit_price, price_range, currency, availability, availability_text, fulfillment[], pickup_club_id, rating, review_count, department, product_type, category_path_id, snap_eligible, badges[], promotions[], sponsored (false), rank (organic position), grid_position. data.sponsored[]: the site's paid tiles on this page, same row shape with sponsored true, never in products or total (they repeat on every page and ignore the price filter). data.total = organic results (exact on a one-page answer, else the site's count minus this page's ads with total_is_exact false); data.total_reported_by_site; data.pagination {page, last_page, has_more}; data.club {club_id, postal_code, state, source: site_default | exit_location | requested; postal_code and state are null for a requested club}; data.store_defaulted (false when club_id was given).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"paper towels"}},{"name":"product","description":"One Sam's Club item in full for a chosen club (or the site's default club): headline price plus the in-club, delivery and shipping price separately, was-price and savings, unit price, stock per fulfillment option with the in-club quantity, aisle location, item number, UPC, brand, model, specifications, description, images, rating breakdown and top reviews.","required_params":["item_id"],"optional_params":["club_id"],"params":[{"name":"item_id","type":"string","required":true,"description":"Sam's Club item id: the number at the end of the item URL (samsclub.com/ip/<name>/<item_id>) and the `item_id` of a search row.","on_invalid":"reject","example":"19863669143","aliases":["id","us_item_id","product_id"]},{"name":"club_id","type":"string","required":false,"description":"Sam's Club club (store) number from the `clubs` action. Price, in-club stock count and aisle location are that club's. Without it the site's default club is used and `store_defaulted` is true.","on_invalid":"reject","example":"8165","aliases":["store_id","club"]}],"returns":"data.product: item_id, product_id, item_number, name, brand, model, upc, url, price, price_display, was_price, savings_amount, unit_price, currency, channel_prices[] {channel PICKUP|DELIVERY|SHIPPING, price, was_price, savings_amount, unit_price, item_number, max_order_quantity}, availability, fulfillment_options[] {type, availability, available_quantity, max_order_quantity, low_stock, speed, location}, aisle_location, club_name, order_limit, member_limit, sales_unit, snap_eligible, rating, review_count, rating_breakdown, recommended_percentage, reviews_with_text, top_reviews[], short_description, description, highlights[], specifications[] {label, value}, category_path[], images[], promotions[]. data.club {club_id, name, postal_code}; data.store_defaulted.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"13624255116","club_id":"8165"}},{"name":"clubs","description":"Sam's Club clubs near a US ZIP code, nearest first: club number, name, address, distance, time zone, pickup services and opening hours.","required_params":["zip_code"],"optional_params":[],"params":[{"name":"zip_code","type":"string","required":true,"description":"5-digit US ZIP code; clubs are returned nearest first.","on_invalid":"reject","example":"75231","aliases":["zip","postal_code"]}],"returns":"data.clubs[]: club_id, name, distance_miles, address, city, state, postal_code, country, latitude, longitude, time_zone, services[], selectable_online, open_24_hours, hours[] {day, open, close, closed}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"zip_code":"75231"}}]},{"name":"sauto","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Sauto.cz API scraper — search Seznam's Czech vehicle marketplace (~121 000 live ads across cars, vans, trucks, motorcycles, quads, trailers, campers, machinery and buses): make/model, price, mileage, power, engine size, fuel, gearbox, colour, drivetrain, dealer-vs-private, region/district and seven sorts, plus the full detail document with VIN, equipment list, roadworthiness date and every photo. Prices are the source's own CZK integers; an ad priced 'by agreement' returns null, not a fake zero. Every filter Sauto can silently drop is proved against a same-run control before the answer is returned. No account, public logged-out data only; the seller phone number and dealer contacts come back as Sauto publishes them.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/sauto/v1","spec_available":true,"actions":[{"name":"search","description":"Search Sauto listings. Everything is optional — with no filters at all it returns the newest cars (category `osobni`). 🔴 Sauto applies `make`/`model` only inside a category and drops an unknown make or model in silence with HTTP 200, so this action re-runs the identical query without that filter in the same call and raises INVALID_PARAM when the source's own total did not move. Paid 'topped' ads come back in the position Sauto puts them, flagged `promoted: true`.","required_params":[],"optional_params":["category","query","make","model","condition","fuel","gearbox","body","color","drive","seller_type","dealer_id","price_min","price_max","mileage_min","mileage_max","power_min","power_max","engine_volume_min","engine_volume_max","seats_min","seats_max","region_id","district_id","sort","page","page_size"],"params":[{"name":"category","type":"enum","required":false,"description":"Sauto's own vehicle section. The numeric id (838…846) is accepted too. `make`, `model` and `body` are only applied inside a category, which is why one is always sent.","on_invalid":"reject","allowed_values":[{"value":"osobni","label":"Osobní"},{"value":"uzitkova","label":"Užitková"},{"value":"nakladni","label":"Nákladní"},{"value":"motorky","label":"Motorky"},{"value":"ctyrkolky","label":"Čtyřkolky"},{"value":"privesy-navesy","label":"Přívěsy a návěsy"},{"value":"obytne","label":"Obytné"},{"value":"pracovni-stroje","label":"Pracovní stroje"},{"value":"autobusy","label":"Autobusy"}],"default":"osobni","example":"osobni","value_pattern":"8(3[89]|4[0-6])","aliases":["vehicle_type","category_id"]},{"name":"query","type":"string","required":false,"description":"Free-text phrase, passed to Sauto's own `phrase` search over the ad title and variant.","on_invalid":"reject","example":"octavia combi","aliases":["phrase","keywords","q","search"]},{"name":"make","type":"string","required":false,"description":"Manufacturer, as Sauto's own url slug (`skoda`, `bmw`, `mercedes-benz`). Call the `filters` action with filter=manufacturer_cb for the live list. A make Sauto does not know is rejected, not silently ignored.","on_invalid":"reject","example":"skoda","value_pattern":"[a-z0-9][a-z0-9\\- ]{0,40}","aliases":["manufacturer","brand"]},{"name":"model","type":"string","required":false,"description":"Model slug, e.g. `octavia`, `rada-3`. Requires `make` (Sauto keys models under the make). Call `filters` with filter=model_cb&make=<make> for the live list.","on_invalid":"reject","example":"octavia","value_pattern":"[a-z0-9][a-z0-9\\- ]{0,40}"},{"name":"condition","type":"enum","required":false,"description":"Vehicle condition, Sauto's own value.","on_invalid":"reject","allowed_values":[{"value":"nove","label":"new"},{"value":"ojete","label":"used"},{"value":"havarovane","label":"damaged"},{"value":"predvadeci","label":"demonstrator"},{"value":"veteran","label":"classic"}],"example":"ojete","value_pattern":"\\d{1,4}"},{"name":"fuel","type":"enum","required":false,"description":"Fuel type.","on_invalid":"reject","allowed_values":[{"value":"benzin","label":"petrol"},{"value":"nafta","label":"diesel"},{"value":"lpg-benzin","label":"LPG + petrol"},{"value":"elektro","label":"electric"},{"value":"hybridni","label":"hybrid"},{"value":"cng-benzin","label":"CNG + petrol"},{"value":"ethanol","label":"ethanol"},{"value":"jine","label":"other"},{"value":"vodik","label":"hydrogen"}],"example":"nafta","value_pattern":"\\d{1,4}"},{"name":"gearbox","type":"enum","required":false,"description":"Transmission.","on_invalid":"reject","allowed_values":[{"value":"manualni","label":"manual"},{"value":"poloautomaticka","label":"semi-automatic"},{"value":"automaticka","label":"automatic"},{"value":"variator","label":"variator (motorcycles only)"}],"example":"automaticka","value_pattern":"\\d{1,4}"},{"name":"body","type":"string","required":false,"description":"Body style, Sauto's own slug. The vocabulary differs per category (cars: hatchback, sedanlimuzina, kombi, suv, kupe, kabriolet, van, mpv, terenni, pick-up, liftback, roadster, cuv; motorcycles: skutr, nakedbike, enduro, chopper…), so outside `osobni` it is resolved against that category's live codebook. Call `filters` with filter=vehicle_body_cb for the list.","on_invalid":"reject","example":"kombi","value_pattern":"[a-z0-9\\-]{2,30}|\\d{1,4}","aliases":["body_type","vehicle_body"]},{"name":"color","type":"enum","required":false,"description":"Exterior colour.","on_invalid":"reject","allowed_values":[{"value":"bila","label":"white"},{"value":"cerna","label":"black"},{"value":"seda","label":"grey"},{"value":"stribrna","label":"silver"},{"value":"modra","label":"blue"},{"value":"cervena","label":"red"},{"value":"zelena","label":"green"},{"value":"hneda","label":"brown"},{"value":"bezova","label":"beige"},{"value":"zluta","label":"yellow"},{"value":"oranzova","label":"orange"},{"value":"vinova","label":"burgundy"},{"value":"ruzova","label":"pink"},{"value":"fialova","label":"purple"},{"value":"zlata","label":"gold"},{"value":"bronzova","label":"bronze"},{"value":"jina","label":"other"}],"example":"cerna","value_pattern":"\\d{1,4}"},{"name":"drive","type":"enum","required":false,"description":"Drivetrain.","on_invalid":"reject","allowed_values":[{"value":"4x4","label":"all-wheel drive"},{"value":"pohon-prednich-kol","label":"front-wheel drive"},{"value":"pohon-zadnich-kol","label":"rear-wheel drive"}],"example":"4x4","value_pattern":"\\d{1,4}"},{"name":"seller_type","type":"enum","required":false,"description":"Who is selling.","on_invalid":"reject","allowed_values":[{"value":"soukromy","label":"private seller"},{"value":"autobazar","label":"dealer"}],"example":"autobazar","value_pattern":"\\d{1,4}","aliases":["vendor","seller"]},{"name":"dealer_id","type":"integer","required":false,"description":"Only this dealership's stock. The id is the `dealer.id` of any listing it sells.","on_invalid":"reject","example":12881554,"minimum":1,"aliases":["premise_id"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, in CZK.","on_invalid":"reject","example":100000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price, in CZK. Ads priced 'by agreement' carry no number and drop out of a price band — that is Sauto's behaviour, not a parse gap.","on_invalid":"reject","example":500000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading, in km.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_mileage","tachometer_from","km_min"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading, in km.","on_invalid":"reject","example":150000,"minimum":0,"aliases":["max_mileage","tachometer_to","km_max"]},{"name":"power_min","type":"integer","required":false,"description":"Lowest engine power, in kW (Sauto's own unit; 100 kW ≈ 136 hp).","on_invalid":"reject","example":100,"minimum":0,"aliases":["min_power","kw_min"]},{"name":"power_max","type":"integer","required":false,"description":"Highest engine power, in kW.","on_invalid":"reject","example":300,"minimum":0,"aliases":["max_power","kw_max"]},{"name":"engine_volume_min","type":"integer","required":false,"description":"Smallest engine displacement, in cm³.","on_invalid":"reject","example":1600,"minimum":0,"aliases":["min_engine_volume","ccm_min"]},{"name":"engine_volume_max","type":"integer","required":false,"description":"Largest engine displacement, in cm³.","on_invalid":"reject","example":2500,"minimum":0,"aliases":["max_engine_volume","ccm_max"]},{"name":"seats_min","type":"integer","required":false,"description":"Fewest seats.","on_invalid":"reject","example":5,"minimum":1,"aliases":["min_seats","capacity_from"]},{"name":"seats_max","type":"integer","required":false,"description":"Most seats.","on_invalid":"reject","example":7,"minimum":1,"aliases":["max_seats","capacity_to"]},{"name":"region_id","type":"integer","required":false,"description":"Czech region (kraj) id, as printed in every listing's `locality.region_id`. Sauto has no radius search and no postcode filter — region or district is the whole locality vocabulary it offers.","on_invalid":"reject","example":8,"minimum":1},{"name":"district_id","type":"integer","required":false,"description":"Czech district (okres) id, as printed in every listing's `locality.district_id`. Cannot be combined with region_id.","on_invalid":"reject","example":43,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest ad first (Sauto's default)"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"},{"value":"mileage_asc","label":"lowest mileage first"},{"value":"mileage_desc","label":"highest mileage first"},{"value":"year_asc","label":"oldest vehicle first"},{"value":"year_desc","label":"newest vehicle first"}],"default":"newest","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. Sauto stops answering past offset 10 000, so the last reachable page is 10000 / page_size.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Listings per page, 1-100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"category, total_results, page, page_size, has_more, next_page, applied (the filters Sauto actually honoured) and listings[] with id, url, title, variant, make/model/category {value,name,seo_name}, price, price_currency (CZK), price_kind (fixed|by_agreement|absent), mileage_km, fuel, gearbox, manufacturing_date, in_operation_date, locality (region/district/municipality + ids), dealer {id,name,seo_name,logo,url,phones,emails,web — contacts null on search}, seller_type, user (a private seller's block as Sauto sends it), image, image_count, promoted, home_delivery, cebia_verified, dealer_reference, created_at, updated_at. Body, colour, power, engine size, VIN and equipment are NOT in Sauto's search document — call `listing` for those.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"osobni"}},{"name":"listing","description":"The full detail document of one Sauto ad: description, condition, body, colour, drivetrain, engine power and displacement, doors, seats, airbags, VIN, roadworthiness (STK) expiry, service book, VAT treatment, the complete equipment list with its categories, every photo, and the seller's phone number and the dealer's phones, e-mails and website as Sauto publishes them. Takes the numeric id or a sauto.cz detail url.","required_params":[],"optional_params":["id","url"],"params":[{"name":"id","type":"integer","required":false,"description":"Sauto item id — the number at the end of every detail url, and the `id` of every search hit. Give this or `url`.","on_invalid":"reject","example":211075173,"minimum":1,"aliases":["item_id","listing_id","ad_id"]},{"name":"url","type":"string","required":false,"description":"A sauto.cz detail link; the id is read off the end of it. Give this or `id`.","on_invalid":"reject","example":"https://www.sauto.cz/osobni/detail/skoda/karoq/211075173","value_pattern":"https?://[^\\s]{10,300}","aliases":["link","listing_url"]}],"returns":"Every search field plus description, condition, body, color, color_type, drive, aircondition, euro_level, certification, country_of_origin, gearbox_levels, engine_power_kw, engine_volume_ccm, doors, seats, airbags, vin, stk_date, service_book, first_owner, price_original, price_without_vat, price_is_without_vat, price_is_vat_deductible, cebia_smart_code_url, images[], videos[], equipment[] {value,name,category}, equipment_count, status, valid_to, deal_type, phone and dont_show_phone (as Sauto publishes them). A field Sauto does not publish for that ad comes back null.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.sauto.cz/osobni/detail/skoda/karoq/211075173"}},{"name":"filters","description":"The resolver for `search`: Sauto's own codebooks, per category. With no `filter` it lists every filter that category publishes (name_id + Czech label + whether the search endpoint honours it). With a `filter` it returns that codebook's values — makes, models, body styles, colours, equipment codes — each with the seo slug `search` expects. Needed because the body and model vocabularies are different for cars, motorcycles and trucks.","required_params":[],"optional_params":["category","filter","make","page","page_size"],"params":[{"name":"category","type":"enum","required":false,"description":"Which section's codebooks to read.","on_invalid":"reject","allowed_values":[{"value":"osobni","label":"Osobní"},{"value":"uzitkova","label":"Užitková"},{"value":"nakladni","label":"Nákladní"},{"value":"motorky","label":"Motorky"},{"value":"ctyrkolky","label":"Čtyřkolky"},{"value":"privesy-navesy","label":"Přívěsy a návěsy"},{"value":"obytne","label":"Obytné"},{"value":"pracovni-stroje","label":"Pracovní stroje"},{"value":"autobusy","label":"Autobusy"}],"default":"osobni","example":"osobni","value_pattern":"8(3[89]|4[0-6])","aliases":["vehicle_type"]},{"name":"filter","type":"string","required":false,"description":"A filter `name_id` from this action's own no-filter listing, e.g. manufacturer_cb, model_cb, vehicle_body_cb, color_cb, equipment_cb. Omit it to see the list.","on_invalid":"reject","example":"manufacturer_cb","value_pattern":"[a-z_]{3,40}","aliases":["name_id","codebook"]},{"name":"make","type":"string","required":false,"description":"Only with filter=model_cb: keep just this manufacturer's models. Sauto has no server-side parent filter, so the full model codebook is read and matched on each value's own parent.","on_invalid":"reject","example":"skoda","value_pattern":"[a-z0-9][a-z0-9\\- ]{0,40}","aliases":["manufacturer","parent"]},{"name":"page","type":"integer","required":false,"description":"1-based page over a codebook's values.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Values per page, 1-1000.","on_invalid":"reject","default":200,"example":200,"minimum":1,"maximum":1000,"aliases":["limit"]}],"returns":"Without `filter`: category and filters[] with name_id, label, codebook_id, multiselect and search_supported. With `filter`: category, filter, total_values, page, page_size, has_more and values[] with value (what `search` takes), seo_name, name, and parent {value,name} for models.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"osobni"}}]},{"name":"savemart","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Save Mart API scraper — shop.savemart.com product search, categories, Weekly Ad, Member Prices and Sales, product detail and store locator with each Save Mart store's price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/savemart/v1","spec_available":true,"actions":[{"name":"search","description":"Search shop.savemart.com at one Save Mart store: regular price (price list), was-price, member/card price and promotions apart, unit price, stock level, brand and size, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in the shop.savemart.com search box ('milk').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"shop.savemart.com pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Save Mart store prices the results (Save Mart prices and range differ by store). Default 95354 — then `store_defaulted` is true.","on_invalid":"reject","example":"95354","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Save Mart store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34678"}],"returns":"products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"95354"}},{"name":"category","description":"Every product of a shop.savemart.com collection (a category, a brand or a diet collection from `categories`) priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (n-milk-17790 …) or a shop.savemart.com /store/savemart/collections/<slug> URL.","on_invalid":"reject","example":"n-milk-17790","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Save Mart store prices the results (Save Mart prices and range differ by store). Default 95354 — then `store_defaulted` is true.","on_invalid":"reject","example":"95354","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Save Mart store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34678"}],"returns":"collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-17790","postal_code":"95354"}},{"name":"product/detail","description":"One Save Mart product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price, promotions and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or a shop.savemart.com /store/savemart/products/ URL.","on_invalid":"reject","example":"20227964","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Save Mart store prices the results (Save Mart prices and range differ by store). Default 95354 — then `store_defaulted` is true.","on_invalid":"reject","example":"95354","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Save Mart store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34678"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"20227964","postal_code":"95354"}},{"name":"categories","description":"The shop.savemart.com category tree (departments and their collections) or one collection's sub-collections; slugs feed `category`.","required_params":[],"optional_params":["slug","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Optional collection slug: returns its sub-collections. Without it: the whole category tree.","on_invalid":"reject","example":"n-milk-17790","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Save Mart store prices the results (Save Mart prices and range differ by store). Default 95354 — then `store_defaulted` is true.","on_invalid":"reject","example":"95354","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Save Mart store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34678"}],"returns":"collections[]{slug,name,url,children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-milk-17790"}},{"name":"stores","description":"Save Mart stores around a US ZIP code, nearest first, with address, coordinates, distance and which services shop.savemart.com offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find Save Mart stores around (nearest first).","on_invalid":"reject","example":"95354","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"postal_code":"95354"}},{"name":"offers","description":"Save Mart's current deal lists at one store: Weekly Ad, Member Prices, Sales.","required_params":[],"optional_params":["type","page","per_page","cursor","postal_code","store_id"],"params":[{"name":"type","type":"enum","required":false,"description":"Which deal list: weekly_ad (Weekly Ad), member_prices (Member Prices), sales (Sales).","on_invalid":"reject","allowed_values":[{"value":"weekly_ad","label":"Weekly Ad"},{"value":"member_prices","label":"Member Prices"},{"value":"sales","label":"Sales"}],"default":"weekly_ad"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Save Mart store prices the results (Save Mart prices and range differ by store). Default 95354 — then `store_defaulted` is true.","on_invalid":"reject","example":"95354","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Save Mart store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34678"}],"returns":"type, collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"95354"}},{"name":"promotions","description":"Which Save Mart deal lists are live now at one store, each with its name and product count.","required_params":[],"optional_params":["postal_code","store_id"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Save Mart store prices the results (Save Mart prices and range differ by store). Default 95354 — then `store_defaulted` is true.","on_invalid":"reject","example":"95354","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Save Mart store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"34678"}],"returns":"promotions[]{type,name,slug,url,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"95354"}}]},{"name":"sbazar","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Sbazar.cz API scraper — search Seznam.cz's Czech classifieds marketplace (~1.9 M live ads): keyword and category search with price band, seller/shop filter and four sorts, full ad detail with every photo and the complete description, and the live 451-node category tree with per-category ad counts. Prices are returned in CZK with the source's own integer beside every number, and 'price on request' ads return null instead of the fake zero the source publishes. No account, public logged-out data only; ad text is returned as the seller wrote it.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/sbazar/v1","spec_available":true,"actions":[{"name":"search","description":"Search Sbazar classifieds by keyword and/or category, with a CZK price band, seller/shop filter, buyer-protection and orderable flags, four sorts and paging. At least one of query, category_id, user_id or premise_id must be given (the source would otherwise return its entire catalogue). Every narrowing filter is checked against an unfiltered control in the same call and the effect is reported in meta.filters_verified, because Sbazar drops filter names it does not know without saying so. Paid 'topped' ads are returned where Sbazar puts them and flagged `promoted: true` rather than hidden.","required_params":[],"optional_params":["query","category_id","price_min","price_max","sort","user_id","premise_id","buyer_protection_only","orderable_only","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword Sbazar matches against ad titles and bodies (its own `phrase` filter). Optional when `category_id`, `user_id` or `premise_id` is given — at least ONE of those four is required, because an unfiltered search returns the whole ~1.9 M-ad catalogue.","on_invalid":"reject","example":"iphone","aliases":["phrase","keyword","q"]},{"name":"category_id","type":"string","required":false,"description":"Sbazar category, given either as its numeric id (237) or as its SEO slug ('237-iphone', or plain 'iphone'). A parent category includes every descendant (measured: id 1 'Auto-moto' returns ads filed under its child categories). Call `categories` for the live list. At least one of query, category_id, user_id or premise_id is required.","on_invalid":"reject","example":"237","value_pattern":"\\d{1,7}|[0-9a-z\\-]{2,60}","aliases":["category","categoryId"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price to include, a whole number of CZK. Sbazar's own price field is a whole number of koruna. 🔴 A price band does NOT exclude 'Dohodou' (price on request) ads — the source keeps them inside any band (measured: 4 of 20 rows in a 20 000-25 000 CZK band). They come back with `price: null` and `price_kind: \"by_agreement\"`, so drop them on that flag if you need a priced-only list.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price to include, a whole number of CZK. Sbazar's own price field is a whole number of koruna. 🔴 A price band does NOT exclude 'Dohodou' (price on request) ads — the source keeps them inside any band (measured: 4 of 20 rows in a 20 000-25 000 CZK band). They come back with `price: null` and `price_kind: \"by_agreement\"`, so drop them on that flag if you need a priced-only list.","on_invalid":"reject","example":25000,"minimum":0,"aliases":["price_to"]},{"name":"sort","type":"enum","required":false,"description":"Result order. These four are the ONLY orders Sbazar actually applies — it answers HTTP 200 to any other sort string and then returns its default order, so an unknown value is rejected here rather than silently ignored. There is no oldest-first: ascending by creation date does not work at the source.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Sbazar's own default order (paid 'topped' ads included in place)"},{"value":"newest","label":"Newest first, by the ad's creation date"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"default":"relevance","example":"newest"},{"name":"user_id","type":"integer","required":false,"description":"Return only ads of this Sbazar user (the `seller.user_id` every search row carries). One of the four filters that can stand alone.","on_invalid":"reject","example":35029510,"minimum":1},{"name":"premise_id","type":"integer","required":false,"description":"Return only ads of this business/shop account (the `seller.business_id` on rows posted by a registered premise).","on_invalid":"reject","example":13992966,"minimum":1},{"name":"buyer_protection_only","type":"boolean","required":false,"description":"True returns only ads sold with Sbazar's buyer protection. A small slice of the catalogue (measured 28 ads site-wide on 2026-09-30).","on_invalid":"reject","default":false,"example":true},{"name":"orderable_only","type":"boolean","required":false,"description":"True returns only ads that can be ordered and paid through Sbazar rather than arranged with the seller (26 ads site-wide, measured).","on_invalid":"reject","default":false,"example":true},{"name":"page","type":"integer","required":false,"description":"1-based page. Sbazar's paging window is 10 000 rows, so page x page_size must stay at or below that; beyond it the source answers HTTP 422 and this engine rejects the request.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Ads per page, 1-100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"query/category echo, total_results, page, page_size, has_more and listings[] with listing_id, url, title, price, price_currency, price_kind (fixed|zero|by_agreement|absent), price_raw (the source's own integer), image, category_id, category, category_seo_name, locality{municipality, quarter, district, region, zip, …}, posted_date, updated_date, promoted, is_reserved, buyer_protection, is_orderable, source, phone_obfuscated, dont_show_phone and seller{user_id, shop_name, shop_url, shop_page, verification, portrait_url, unique_url, is_business, business_id, business_name}.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}},{"name":"listing","description":"Full detail of one Sbazar ad: complete description, every photo, price, locality, category, status and the seller's public shop identity. Accepts the ad URL or the numeric listing_id. The ad text is returned as written (contacts typed into it included); Sbazar's API does not publish the seller's phone number itself.","required_params":[],"optional_params":["listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Numeric ad id, as `search` returns it in `listing_id`. Give this OR `url` — at least one is required.","on_invalid":"reject","example":"234318630","value_pattern":"\\d{1,12}","aliases":["item_id","id"]},{"name":"url","type":"string","required":false,"description":"Full Sbazar ad address, exactly as `search` returns it. The ad id is read out of it. Give this OR `listing_id`.","on_invalid":"reject","example":"https://www.sbazar.cz/dan.mlynar/detail/234318630-apple-iphone-16-pro"}],"returns":"everything `search` returns for a row, plus description, images[], image_count, video_count, status, valid_to and price_original.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.sbazar.cz/dan.mlynar/detail/234318630-apple-iphone-16-pro"}},{"name":"categories","description":"Sbazar's live category tree — 451 categories over 3 levels, each with the number of ads currently filed under it. This is the resolver `search` needs: a numeric category_id is what the search filter takes. With a `category_id` it returns that category plus its direct children.","required_params":[],"optional_params":["category_id"],"params":[{"name":"category_id","type":"string","required":false,"description":"Sbazar category, given either as its numeric id (237) or as its SEO slug ('237-iphone', or plain 'iphone'). A parent category includes every descendant (measured: id 1 'Auto-moto' returns ads filed under its child categories). Call `categories` for the live list. Omit to get the whole 451-node tree.","on_invalid":"reject","example":"237","value_pattern":"\\d{1,7}|[0-9a-z\\-]{2,60}","aliases":["category","categoryId"]}],"returns":"total_categories and categories[] with category_id, name, seo_name, level, parent_id, listing_count and url; with a category_id, also category{} and children[].","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"237"}}]},{"name":"seek","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"SEEK API — Australia jobs scraper: search SEEK (seek.com.au) job postings by keyword, location, salary, work-type, date and remote/hybrid filters; get full job detail (title, company, salary, location, description, work arrangement, posted/expiry dates, apply link, employer profile); list all jobs at a company; and browse jobs by classification/category — from Australia's #1 job board, no login or API key required","version":"1.0.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/seek/v1","spec_available":true,"actions":[{"name":"search","description":"Search SEEK (seek.com.au) job postings by keyword with optional location, salary range, work-type, work-arrangement (remote/hybrid/on-site), date-posted, classification and sort filters. Returns up to 20 jobs per page with title, company, salary, location, dates and a teaser.","required_params":["keywords"],"optional_params":["location","job_type","work_arrangement","salary_from","salary_to","date_posted","classification","subclassification","sort","page"],"params":[{"name":"keywords","type":"string","required":true,"description":"What job to search for — a job title, skill or keyword ('software developer', 'registered nurse', 'accountant').","on_invalid":"reject","example":"software developer","aliases":["query","q"]},{"name":"location","type":"string","required":false,"description":"Australian/NZ location to search in — a city, suburb or city+state ('Sydney NSW', 'Melbourne VIC', 'Brisbane QLD', 'Perth WA'). Free text; the state suffix sharpens the match.","on_invalid":"ignore","example":"Sydney NSW"},{"name":"job_type","type":"enum","required":false,"description":"Restrict to one work type.","on_invalid":"ignore","allowed_values":[{"value":"full_time","label":"Full time"},{"value":"part_time","label":"Part time"},{"value":"contract","label":"Contract/Temp"},{"value":"casual","label":"Casual/Vacation"}]},{"name":"work_arrangement","type":"enum","required":false,"description":"Filter by working arrangement.","on_invalid":"ignore","allowed_values":[{"value":"onsite","label":"On-site"},{"value":"remote","label":"Remote"},{"value":"hybrid","label":"Hybrid"}],"aliases":["remote"]},{"name":"salary_from","type":"integer","required":false,"description":"Minimum annual salary in AUD (e.g. 100000).","on_invalid":"ignore","example":100000,"minimum":0},{"name":"salary_to","type":"integer","required":false,"description":"Maximum annual salary in AUD (e.g. 150000).","on_invalid":"ignore","example":150000,"minimum":0},{"name":"date_posted","type":"enum","required":false,"description":"Only jobs listed within this window.","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Today"},{"value":"last3days","label":"Last 3 days"},{"value":"lastweek","label":"Last 7 days"},{"value":"lasttwoweeks","label":"Last 14 days"},{"value":"lastmonth","label":"Last 31 days"}]},{"name":"classification","type":"string","required":false,"description":"Narrow to a SEEK classification — its numeric id (e.g. 6281 = Information & Communication Technology) from a job's classifications[].classification_id.","on_invalid":"ignore","example":"6281"},{"name":"subclassification","type":"string","required":false,"description":"Narrow to a SEEK sub-classification numeric id (e.g. 6287 = Developers/Programmers).","on_invalid":"ignore","example":"6287"},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"date","label":"Most recent"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (20 jobs per page). Page until meta.pagination.total_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"jobs[]{job_id, title, url, company, advertiser_id, location, locations[], salary_label, currency, work_types[], work_arrangement, classifications[], bullet_points[], teaser, posted_date, posted_relative, is_featured, logo_url, company_url, role_id} + total + meta.pagination{page, total_pages, has_more, next_page}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"keywords":"developer","location":"Sydney NSW"}},{"name":"detail","description":"Full posting for one SEEK job by job_id (or a SEEK job URL): title, company, salary, location breakdown (suburb/state/postcode/country), full HTML + plain-text description, work types, work arrangement, classifications, bullet points, posted & expiry dates, apply/share link, and the employer's company profile (industry, size, website, rating, review count).","required_params":[],"optional_params":["job_id","url"],"params":[{"name":"job_id","type":"string","required":false,"description":"SEEK job ID — the number in the job URL (seek.com.au/job/<job_id>) or `job_id` from search.","on_invalid":"reject","example":"92851167","aliases":["jobId","id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a full SEEK job URL.","on_invalid":"ignore","example":"https://www.seek.com.au/job/92851167"}],"returns":"job{job_id, title, url, share_link, description_text, description_html, abstract, company, advertiser_id, advertiser_verified, company_url, salary_label, currency, location, country, state, suburb, post_code, work_types[], work_arrangements[], classifications[], bullet_points[], posted_date, expires_at, is_expired, status, logo_url, company_profile{name, industry, size, website, rating, review_count, url}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"job_id":"92851167"}},{"name":"company-jobs","description":"All public job postings at a specific company on SEEK. Pass the company's numeric advertiser id (the `advertiser_id` field on any search/detail result), its SEEK company slug, a full SEEK company URL, or its name; optionally narrow with the same keyword/location/salary/work-type/date filters as search.","required_params":["company"],"optional_params":["keywords","location","job_type","work_arrangement","salary_from","salary_to","date_posted","sort","page"],"params":[{"name":"company","type":"string","required":true,"description":"The employer — its SEEK numeric advertiser id (best; the `advertiser_id` on any search result), a SEEK company slug, a full SEEK company URL, or the company name (resolved to a slug automatically).","on_invalid":"reject","example":"2852","aliases":["advertiser_id","slug","profile"]},{"name":"keywords","type":"string","required":false,"description":"Optional: also filter the company's jobs by keyword.","on_invalid":"ignore","example":"developer","aliases":["query","q"]},{"name":"location","type":"string","required":false,"description":"Australian/NZ location to search in — a city, suburb or city+state ('Sydney NSW', 'Melbourne VIC', 'Brisbane QLD', 'Perth WA'). Free text; the state suffix sharpens the match.","on_invalid":"ignore","example":"Sydney NSW"},{"name":"job_type","type":"enum","required":false,"description":"Restrict to one work type.","on_invalid":"ignore","allowed_values":[{"value":"full_time","label":"Full time"},{"value":"part_time","label":"Part time"},{"value":"contract","label":"Contract/Temp"},{"value":"casual","label":"Casual/Vacation"}]},{"name":"work_arrangement","type":"enum","required":false,"description":"Filter by working arrangement.","on_invalid":"ignore","allowed_values":[{"value":"onsite","label":"On-site"},{"value":"remote","label":"Remote"},{"value":"hybrid","label":"Hybrid"}],"aliases":["remote"]},{"name":"salary_from","type":"integer","required":false,"description":"Minimum annual salary in AUD (e.g. 100000).","on_invalid":"ignore","example":100000,"minimum":0},{"name":"salary_to","type":"integer","required":false,"description":"Maximum annual salary in AUD (e.g. 150000).","on_invalid":"ignore","example":150000,"minimum":0},{"name":"date_posted","type":"enum","required":false,"description":"Only jobs listed within this window.","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Today"},{"value":"last3days","label":"Last 3 days"},{"value":"lastweek","label":"Last 7 days"},{"value":"lasttwoweeks","label":"Last 14 days"},{"value":"lastmonth","label":"Last 31 days"}]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"date","label":"Most recent"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (20 jobs per page). Page until meta.pagination.total_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"jobs[]{job_id, title, url, company, advertiser_id, location, locations[], salary_label, currency, work_types[], work_arrangement, classifications[], bullet_points[], teaser, posted_date, posted_relative, is_featured, logo_url, company_url, role_id} + total + meta.pagination{page, total_pages, has_more, next_page}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"2852"}},{"name":"classification","description":"Browse SEEK jobs by classification/category — either a SEEK classification numeric id (e.g. 6281 = Information & Communication Technology) or a category slug ('information-communication-technology', 'healthcare-medical', 'trades-services', 'accounting', 'sales', 'education-training'). Optionally scope by location and the same salary/work-type/date filters as search.","required_params":["classification"],"optional_params":["location","job_type","work_arrangement","salary_from","salary_to","date_posted","sort","page"],"params":[{"name":"classification","type":"string","required":true,"description":"SEEK classification — numeric id (e.g. '6281' = Information & Communication Technology, '1203' = Healthcare & Medical) or a category slug ('information-communication-technology', 'healthcare-medical', 'trades-services', 'accounting').","on_invalid":"reject","example":"6281","aliases":["category","id"]},{"name":"location","type":"string","required":false,"description":"Australian/NZ location to search in — a city, suburb or city+state ('Sydney NSW', 'Melbourne VIC', 'Brisbane QLD', 'Perth WA'). Free text; the state suffix sharpens the match.","on_invalid":"ignore","example":"Sydney NSW"},{"name":"job_type","type":"enum","required":false,"description":"Restrict to one work type.","on_invalid":"ignore","allowed_values":[{"value":"full_time","label":"Full time"},{"value":"part_time","label":"Part time"},{"value":"contract","label":"Contract/Temp"},{"value":"casual","label":"Casual/Vacation"}]},{"name":"work_arrangement","type":"enum","required":false,"description":"Filter by working arrangement.","on_invalid":"ignore","allowed_values":[{"value":"onsite","label":"On-site"},{"value":"remote","label":"Remote"},{"value":"hybrid","label":"Hybrid"}],"aliases":["remote"]},{"name":"salary_from","type":"integer","required":false,"description":"Minimum annual salary in AUD (e.g. 100000).","on_invalid":"ignore","example":100000,"minimum":0},{"name":"salary_to","type":"integer","required":false,"description":"Maximum annual salary in AUD (e.g. 150000).","on_invalid":"ignore","example":150000,"minimum":0},{"name":"date_posted","type":"enum","required":false,"description":"Only jobs listed within this window.","on_invalid":"ignore","allowed_values":[{"value":"today","label":"Today"},{"value":"last3days","label":"Last 3 days"},{"value":"lastweek","label":"Last 7 days"},{"value":"lasttwoweeks","label":"Last 14 days"},{"value":"lastmonth","label":"Last 31 days"}]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"date","label":"Most recent"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (20 jobs per page). Page until meta.pagination.total_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"jobs[]{job_id, title, url, company, advertiser_id, location, locations[], salary_label, currency, work_types[], work_arrangement, classifications[], bullet_points[], teaser, posted_date, posted_relative, is_featured, logo_url, company_url, role_id} + total + meta.pagination{page, total_pages, has_more, next_page}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"classification":"6281"}}]},{"name":"selency","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Selency — vintage & design furniture marketplace (EU)","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/selency/v1","spec_available":true,"actions":[{"name":"search","description":"Search selency's 335,938 live second-hand vintage and design furniture listings with the source's own filters: free text, the 3-level category tree, style/period, material, colour, designer, the seller's country, the French department, price and list-price bounds, discount depth, width, height, depth and weight in real units, lot size, quality grade, and the negotiable / discounted / professional-seller / ambassador / handmade / authenticated / retail / trade-price flags. Every listing is a one-off, so every row carries its own price in EUR, its own measured dimensions, the country it ships from and the delivery methods its seller supports. `total` is exact up to 10,000 rows and an estimate above that — each response says which, in `total_is_exact`.","required_params":[],"optional_params":["query","language","category","style","material","color","designer","country","department","region","collection","quality_mark","min_price","max_price","min_list_price","max_list_price","min_discount","min_width","max_width","min_height","max_height","min_depth","max_depth","min_weight","max_weight","min_batch_quantity","max_batch_quantity","negotiable","discounted","pro_seller","ambassador_seller","min_seller_rating","min_seller_reviews","handmade","authenticated","retail","pro_price","trade_program","delivery","seller","published_after","published_before","sort","page","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text over listing titles. The source's own search is language-aware, so pair it with `language`: 'coffee table' finds English titles, 'table basse' French ones.","on_invalid":"reject","example":"art deco brass table lamp","aliases":["q","keywords","search"]},{"name":"language","type":"enum","required":false,"description":"Which of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English — the en_GB catalogue (selency.co.uk / selency.nl)"},{"value":"fr","label":"French — the fr_FR catalogue (selency.fr), the source's primary one"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"category","type":"array","required":false,"description":"Category, as a slug from the categories action — a root (furniture, seating, lighting, decor, tableware, art, linens-soft-furnishings, garden-accessories, kids / meubles, chaises, eclairer, decorer, art-de-la-table, art, linge-de-maison, mobilier-de-jardin-terrasse, kids-enfant-vintage), or any of the 65 second-level or 126 third-level slugs (coffee-table, bedside-lamp-and-table-lamp, plaster-bust ...). Either language's slug is accepted and a numeric category id works too. Repeatable: several categories are OR-ed. Resolved against selency's own tree before the search is sent, because the source answers an unknown value with HTTP 200 and ZERO rows rather than an error.","on_invalid":"reject","example":["coffee-table"],"aliases":["categories","category_slug","category_id"]},{"name":"style","type":"array","required":false,"description":"Style / period, selency's own 16 values. This is the field that carries the era: art-deco 20,892, mid-century 13,334, space-age 3,924, art-nouveau 3,719, brutalist 4,258, seventies 2,040, memphis 826, modernist-bauhaus 5,424. Language-free (the slug is identical on both indices), unlike the human label, which is translated.","on_invalid":"reject","allowed_values":[{"value":"vintage","label":"vintage"},{"value":"classic","label":"classic"},{"value":"world-s-craft","label":"world s craft"},{"value":"scandinavian","label":"scandinavian"},{"value":"art-deco","label":"art deco"},{"value":"design","label":"design"},{"value":"contemporary","label":"contemporary"},{"value":"mid-century","label":"mid century"},{"value":"industrial","label":"industrial"},{"value":"modernist-bauhaus","label":"modernist bauhaus"},{"value":"bohemia","label":"bohemia"},{"value":"brutalist","label":"brutalist"},{"value":"space-age","label":"space age"},{"value":"art-nouveau","label":"art nouveau"},{"value":"seventies","label":"seventies"},{"value":"memphis","label":"memphis"}],"example":["art-deco"],"aliases":["period"]},{"name":"material","type":"array","required":false,"description":"Material, selency's own 51 values — including the woods it separates by species (oak 8,779, teak 7,083, walnut 4,023, mahogany 2,922, rosewood 1,631, elm-burl) and the stones (marble 2,299, travertine 659, granite 527, slate). Language-free.","on_invalid":"reject","allowed_values":[{"value":"wood","label":"wood"},{"value":"ceramics-porcelain-and-earthenware","label":"ceramics porcelain and earthenware"},{"value":"glass-and-crystal","label":"glass and crystal"},{"value":"wool-cotton","label":"wool cotton"},{"value":"metal","label":"metal"},{"value":"linen","label":"linen"},{"value":"brass","label":"brass"},{"value":"paper","label":"paper"},{"value":"oak","label":"oak"},{"value":"teak","label":"teak"},{"value":"fabric","label":"fabric"},{"value":"chrome","label":"chrome"},{"value":"canvas","label":"canvas"},{"value":"leather","label":"leather"},{"value":"rattan-and-wicker","label":"rattan and wicker"},{"value":"iron","label":"iron"},{"value":"plastic","label":"plastic"},{"value":"walnut","label":"walnut"},{"value":"silver-plated-metal","label":"silver plated metal"},{"value":"aluminium","label":"aluminium"},{"value":"opaline","label":"opaline"},{"value":"bronze","label":"bronze"},{"value":"mahogany","label":"mahogany"},{"value":"bamboo","label":"bamboo"},{"value":"terracotta","label":"terracotta"},{"value":"marble","label":"marble"},{"value":"stone-and-plaster","label":"stone and plaster"},{"value":"stainless-steel","label":"stainless steel"},{"value":"rosewood","label":"rosewood"},{"value":"velvet","label":"velvet"},{"value":"plexiglass","label":"plexiglass"},{"value":"resin","label":"resin"},{"value":"silver-material","label":"silver material"},{"value":"leatherette","label":"leatherette"},{"value":"copper","label":"copper"},{"value":"fiberglass","label":"fiberglass"},{"value":"melting","label":"melting"},{"value":"travertine","label":"travertine"},{"value":"granite","label":"granite"},{"value":"bakelite","label":"bakelite"},{"value":"enamelled-sheet","label":"enamelled sheet"},{"value":"formica","label":"formica"},{"value":"jute","label":"jute"},{"value":"rope","label":"rope"},{"value":"concrete","label":"concrete"},{"value":"skin","label":"skin"},{"value":"slate","label":"slate"},{"value":"elm-burl","label":"elm burl"},{"value":"zinc","label":"zinc"},{"value":"feather","label":"feather"},{"value":"terrazo","label":"terrazo"}],"example":["teak"]},{"name":"color","type":"array","required":false,"description":"Colour, selency's own 23 values. Language-free.","on_invalid":"reject","allowed_values":[{"value":"multicolour","label":"multicolour"},{"value":"wooden","label":"wooden"},{"value":"brown","label":"brown"},{"value":"white","label":"white"},{"value":"transparent","label":"transparent"},{"value":"black","label":"black"},{"value":"golden","label":"golden"},{"value":"beige","label":"beige"},{"value":"blue","label":"blue"},{"value":"silver","label":"silver"},{"value":"green","label":"green"},{"value":"red","label":"red"},{"value":"grey","label":"grey"},{"value":"orange","label":"orange"},{"value":"pink","label":"pink"},{"value":"yellow","label":"yellow"},{"value":"printed","label":"printed"},{"value":"ecru","label":"ecru"},{"value":"burgundy","label":"burgundy"},{"value":"purple","label":"purple"},{"value":"turquoise","label":"turquoise"},{"value":"midnight-blue","label":"midnight blue"},{"value":"terracotta","label":"terracotta"}],"example":["golden"],"aliases":["colour"]},{"name":"designer","type":"array","required":false,"description":"Designer or manufacturer, exactly as selency publishes the name ('Paulin, Pierre', 'Jacobsen, Arne', 'Eames, Charles et Ray', 'Thonet, Michael', 'Ducaroy, Michel', 'Artemide', 'Stilnovo'). Call the facets action with facet=designer for the full list with counts. Sparse by nature: 5 of 200 sampled listings name one.","on_invalid":"reject","example":["Paulin, Pierre"]},{"name":"country","type":"array","required":false,"description":"The country the seller ships FROM — selency is EU-wide: FR 208,250, NL 19,793, BE 15,446, PL 14,053, IT 13,969, DE 13,914, TR 12,247, CZ 7,248, MA 5,859, ES 5,615, GB 5,006, DK 4,193 and 22 more. This is NOT a shipping destination and nothing in this API depends on where the call is made from.","on_invalid":"reject","allowed_values":[{"value":"FR","label":"FR"},{"value":"NL","label":"NL"},{"value":"BE","label":"BE"},{"value":"PL","label":"PL"},{"value":"IT","label":"IT"},{"value":"DE","label":"DE"},{"value":"TR","label":"TR"},{"value":"CZ","label":"CZ"},{"value":"MA","label":"MA"},{"value":"ES","label":"ES"},{"value":"GB","label":"GB"},{"value":"DK","label":"DK"},{"value":"HU","label":"HU"},{"value":"SI","label":"SI"},{"value":"SE","label":"SE"},{"value":"AT","label":"AT"},{"value":"SK","label":"SK"},{"value":"PT","label":"PT"},{"value":"CH","label":"CH"},{"value":"MC","label":"MC"},{"value":"LU","label":"LU"},{"value":"LV","label":"LV"},{"value":"RO","label":"RO"},{"value":"US","label":"US"},{"value":"TN","label":"TN"},{"value":"GE","label":"GE"},{"value":"LT","label":"LT"},{"value":"IE","label":"IE"},{"value":"NO","label":"NO"},{"value":"FI","label":"FI"},{"value":"EE","label":"EE"},{"value":"IN","label":"IN"},{"value":"GR","label":"GR"},{"value":"BG","label":"BG"}],"example":["FR"],"aliases":["ships_from"]},{"name":"department","type":"array","required":false,"description":"French department, as a 2-digit code: 75 Paris (18,099), 59 Nord (11,377), 44 Loire-Atlantique (7,229), 78 Yvelines (6,433), 33 Gironde (5,055) ... 94 codes in all. Filled on 94 of 200 sampled listings, because only French sellers carry one.","on_invalid":"reject","example":["75"],"value_pattern":"\\d{1,2}(\\|\\|.+)?"},{"name":"region","type":"enum","required":false,"description":"The source's `region` tag. It is a one-value field on this source: measured over the whole 335,936-row catalogue it carries 'Ile-de-France' and nothing else (filled on 25 of 200 sampled rows), so in practice it is a 'greater Paris' switch. Published as the single-value filter it measurably is, rather than implied to be a full region taxonomy.","on_invalid":"reject","allowed_values":[{"value":"Ile-de-France","label":"Greater Paris — 44,602 listings"}],"example":"Ile-de-France"},{"name":"collection","type":"array","required":false,"description":"A curated selency collection. One collection exists on the source today, and the attribute is present ONLY on the French index — send language=fr with it, or the English index returns nothing.","on_invalid":"reject","allowed_values":[{"value":"Produits a 200 balles","label":"Under-200-euro pick, 2,863 listings"}],"example":["Produits a 200 balles"]},{"name":"quality_mark","type":"array","required":false,"description":"selency's own listing-quality grade, with its own label taken from the source's own string. ⚠️ It grades the LISTING (photos, description, completeness), not the item's physical condition: every listing on this source is second-hand `UsedCondition` and there is no condition ladder to filter on.","on_invalid":"reject","allowed_values":[{"value":"excellent","label":"3 stars - Excellent (61,046)"},{"value":"good","label":"2 stars - Good (229,790)"},{"value":"basic","label":"1 star - Basic (45,100)"}],"example":["excellent"]},{"name":"min_price","type":"number","required":false,"description":"Lowest effective price in EUR (the discounted price when there is one). Prices are EUR on every country surface; there is no second price list and nothing here is converted.","on_invalid":"reject","example":200,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest effective price in EUR.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["price_max"]},{"name":"min_list_price","type":"number","required":false,"description":"Lowest price BEFORE any discount. Use this when you want the seller's original ask rather than today's price.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_list_price","type":"number","required":false,"description":"Highest price before any discount.","on_invalid":"reject","example":5000,"minimum":0},{"name":"min_discount","type":"integer","required":false,"description":"Minimum discount percentage off the list price. 20,829 listings are 30% off or more; 58,709 carry any discount at all.","on_invalid":"reject","example":30,"minimum":0,"maximum":100},{"name":"min_width","type":"number","required":false,"description":"Minimum width in CENTIMETRES.","on_invalid":"reject","example":50,"minimum":0},{"name":"max_width","type":"number","required":false,"description":"Maximum width in CENTIMETRES. ⚠️ A listing whose seller left a dimension blank carries 0 upstream (measured: width 0 on 10,664 listings, height 0 on 11,946, weight 0 on 25,396) — this engine returns those as null, but a `max_*` filter will still match them, because upstream 0 really is less than your ceiling. Pair it with the matching `min_*` to exclude them.","on_invalid":"reject","example":120,"minimum":0},{"name":"min_height","type":"number","required":false,"description":"Minimum height in CENTIMETRES.","on_invalid":"reject","example":40,"minimum":0},{"name":"max_height","type":"number","required":false,"description":"Maximum height in CENTIMETRES (see max_width about blank = 0).","on_invalid":"reject","example":80,"minimum":0},{"name":"min_depth","type":"number","required":false,"description":"Minimum depth in CENTIMETRES.","on_invalid":"reject","example":30,"minimum":0},{"name":"max_depth","type":"number","required":false,"description":"Maximum depth in CENTIMETRES (see max_width about blank = 0).","on_invalid":"reject","example":60,"minimum":0},{"name":"min_weight","type":"number","required":false,"description":"Minimum weight in KILOGRAMMES.","on_invalid":"reject","example":1,"minimum":0},{"name":"max_weight","type":"number","required":false,"description":"Maximum weight in KILOGRAMMES — the practical proxy for 'something a courier can actually take' (see max_width about blank = 0).","on_invalid":"reject","example":20,"minimum":0},{"name":"min_batch_quantity","type":"integer","required":false,"description":"Minimum number of pieces in the lot. 1 on 253,697 listings; 2 on 35,536, 3 on 8,224, 4 on 9,849, 6 on 8,494, 8 on 14,437. Set 2 to get only sets (chairs, glasses, plates).","on_invalid":"reject","example":2,"minimum":1,"maximum":8},{"name":"max_batch_quantity","type":"integer","required":false,"description":"Maximum number of pieces in the lot.","on_invalid":"reject","example":8,"minimum":1,"maximum":8},{"name":"negotiable","type":"boolean","required":false,"description":"Only listings where selency accepts an offer (263,427 of 335,936), or only those where it does not. The detail action also returns `reserved_price_eur` where the seller has pre-agreed a floor.","on_invalid":"reject","example":true},{"name":"discounted","type":"boolean","required":false,"description":"Only listings whose price has been cut (58,709).","on_invalid":"reject","example":true},{"name":"pro_seller","type":"boolean","required":false,"description":"Only professional sellers (245,251) or only private individuals. The seller action proves which: a professional shop carries a real company registration number, a private one carries null.","on_invalid":"reject","example":true},{"name":"ambassador_seller","type":"boolean","required":false,"description":"Only selency 'ambassador' sellers (103,381).","on_invalid":"reject","example":true},{"name":"min_seller_rating","type":"number","required":false,"description":"Minimum seller rating out of 5. The distribution is top-heavy: 180,014 listings sit with a 5.0 seller and 220,634 with 4.9 or better, so this bites hardest below 4.5.","on_invalid":"reject","example":4.9,"minimum":0,"maximum":5},{"name":"min_seller_reviews","type":"integer","required":false,"description":"Minimum number of reviews the seller has collected.","on_invalid":"reject","example":25,"minimum":0},{"name":"handmade","type":"boolean","required":false,"description":"Only handmade pieces (35,189).","on_invalid":"reject","example":true},{"name":"authenticated","type":"boolean","required":false,"description":"Only pieces whose authenticity selency has approved (9,059 of 335,936) — the scarcest flag on the source and the one that matters for designer attribution.","on_invalid":"reject","example":true},{"name":"retail","type":"boolean","required":false,"description":"Only new/retail stock rather than second-hand. Rare on this source: 536 listings.","on_invalid":"reject","example":true},{"name":"pro_price","type":"boolean","required":false,"description":"Only listings that publish a trade (pro-buyer) price (104,332).","on_invalid":"reject","example":true},{"name":"trade_program","type":"boolean","required":false,"description":"Only listings inside selency's trade programme (85,161).","on_invalid":"reject","example":true},{"name":"delivery","type":"array","required":false,"description":"Keep only listings offering a delivery method. These are the METHODS a seller supports, not a price: the price per destination comes from the detail action's delivery grid, and `colissimo` is published on just 7 listings so do not build on it.","on_invalid":"reject","allowed_values":[{"value":"selency","label":"Carrier managed by selency — 124,706 listings"},{"value":"seller","label":"Delivered by the seller — 67,546"},{"value":"cocolis","label":"Cocolis co-shipping — 83,073"},{"value":"mondial_relay","label":"Mondial Relay parcel — 102,188"},{"value":"custom","label":"Seller's own custom arrangement — 103,922"},{"value":"colissimo","label":"Colissimo — 7 listings, effectively retired"}],"example":["selency"]},{"name":"seller","type":"array","required":false,"description":"Shop id, from any listing's `seller.shop_id` or from the seller action. Repeatable.","on_invalid":"reject","example":["cdf0b8d42d44333a9185a1616ac08878"],"aliases":["shop","shop_id"]},{"name":"published_after","type":"string","required":false,"description":"Only listings published on or after this date (YYYY-MM-DD). selency publishes roughly 1,600 a day: 8,036 listings carried a publish date inside the five days before 2026-10-08.","on_invalid":"reject","example":"2026-10-01","aliases":["since","listed_after"]},{"name":"published_before","type":"string","required":false,"description":"Only listings published on or before this date (YYYY-MM-DD).","on_invalid":"reject","example":"2026-10-08","aliases":["until"]},{"name":"sort","type":"enum","required":false,"description":"The source's own four orderings (it publishes three sort replicas beside its default index). Anything else is refused with the list, because the source would ignore it and silently answer in relevance order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"selency's own ranking — reproducible between two identical calls, and freshness-weighted"},{"value":"newest","label":"Most recently published first"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page. The reachable window is 10,000 rows per ordering: past it the source returns an EMPTY page rather than repeating its last one (measured: with 100 rows per page, page 99 is full and pages 100, 101 and 120 are all empty), and meta.stop_reason says window_reached. To go deeper, narrow the filters or change `sort`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100. The source honours up to 1,000 (3.44 MB raw) and clamps there; this engine caps at 100 (347 KB raw, 0.6 s) to stay inside the gateway's request budget.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["per_page","limit","max_results"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{total, total_is_exact, page, page_size, pages, window_rows, language, sort, query, listings[{id, sku, url, title, currency, price_eur, list_price_eur, special_price_eur, pro_price_eur, discount_pct, is_discounted, is_negotiable, is_retail, is_handmade, is_authenticated, quality_mark, quality_label, batch_quantity, category{level1..3, slug_level1..3}, color, material, style, designer, dimensions_cm{width, height, depth}, weight_kg, image, published_at, ships_from{country, region, department_code, department}, delivery_methods{...}, seller{shop_id, name, is_pro, is_ambassador, rating, reviews_count, commission_pct}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"art deco brass lamp","language":"en","sort":"relevance","page_size":20}},{"name":"detail","description":"One listing in full, from selency's own keyless product API: the seller's description in BOTH languages (one call returns both), every photo, the material / colour / style / designer records with their own slugs and labels, width, height and depth in centimetres and weight in kilogrammes, the full price block (list, current, pro-buyer, the seller's pre-agreed reserve where it exists, the marketplace fee and the seller payout), the category with its ancestors, the seller's shop record including whether it is a registered business or a private individual, and — kept strictly separate from the price — the delivery grid the seller published, with each offer stamped with the destination it is priced for.","required_params":["id"],"optional_params":["language","include_delivery","include_breadcrumb","include_story","include_seller_stats","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The listing's SKU as the URL shows it (H5H72TBH), its internal id, or the full product URL. A delisted or unknown listing answers a clean NOT_FOUND.","on_invalid":"reject","example":"H5H72TBH","aliases":["sku","product","product_id","url"]},{"name":"language","type":"enum","required":false,"description":"Which of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English — the en_GB catalogue (selency.co.uk / selency.nl)"},{"value":"fr","label":"French — the fr_FR catalogue (selency.fr), the source's primary one"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"include_delivery","type":"boolean","required":false,"description":"Also return the per-listing delivery grid. The prices in it are the seller's own per-destination figures and do NOT depend on where this call is made from (verified byte-identical from six exit countries). selency's own carrier option publishes no price and comes back as null, not 0.","on_invalid":"reject","default":true,"example":true},{"name":"include_breadcrumb","type":"boolean","required":false,"description":"Also return the listing's full category path.","on_invalid":"reject","default":true,"example":true},{"name":"include_story","type":"boolean","required":false,"description":"Also return selency's editorial 'story' record (history, tips, fact). Usually empty: it exists for curated pieces only.","on_invalid":"reject","default":false,"example":false},{"name":"include_seller_stats","type":"boolean","required":false,"description":"Also return the seller's rating, review count, live and sold counts and days open.","on_invalid":"reject","default":true,"example":true},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{listing{id, sku, url, title, title_fr, title_en, description, description_fr, description_en, quality_mark, quality_label, color, material, material_group, style, designer, dimensions_cm, weight_kg, pricing{list_price_eur, special_price_eur, reserved_price_eur, pro_price_eur, is_negotiable, marketplace_fee_eur, seller_payout_eur}, images[], image_count, category{}, published_at, updated_at, seller{kind, is_business, business_id, country, is_ambassador, statistics{rating, reviews_count, listings_live, listings_sold}}}, delivery_options[{provider, label, price_eur, price_published, lead_time, destination_country, destination_region, destination_special_zone, destination_places[], parcel{}}], breadcrumb[], story{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"H5H72TBH","language":"en","include_delivery":true}},{"name":"similar","description":"The listings selency itself considers closest to a given one, with its own similarity distance on each. This is the practical substitute for comparable sold prices on a source where every piece is unique and nothing is kept after it sells: it answers 'what else like this is on the market, and at what price'. The source caps the set at 20 and reports `total: 20` whatever the real number is, so that cap is declared rather than passed off as a count.","required_params":["id"],"optional_params":["language","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The listing's SKU, internal id, or product URL.","on_invalid":"reject","example":"H5H72TBH","aliases":["sku","product","product_id","url"]},{"name":"language","type":"enum","required":false,"description":"Which of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English — the en_GB catalogue (selency.co.uk / selency.nl)"},{"value":"fr","label":"French — the fr_FR catalogue (selency.fr), the source's primary one"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{listing_id, sku, count, capped_at, listings[{id, sku, url, title, title_fr, title_en, price_eur, list_price_eur, is_negotiable, quality_mark, quality_label, similarity_distance, image}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"H5H72TBH","language":"en"}},{"name":"categories","description":"selency's own category tree — 9 roots, 65 second-level and 126 third-level nodes — with each node's French and English name AND slug side by side, its parent, its examples text and its image. This is where the `category` parameter's values come from, and why that parameter never has to be guessed: the source answers an unknown category value with HTTP 200 and zero rows rather than an error.","required_params":[],"optional_params":["language","category","depth","include_pii"],"params":[{"name":"language","type":"enum","required":false,"description":"Which of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English — the en_GB catalogue (selency.co.uk / selency.nl)"},{"value":"fr","label":"French — the fr_FR catalogue (selency.fr), the source's primary one"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"category","type":"string","required":false,"description":"Return only this branch (a slug in either language, or a category id). Omit for the whole tree.","on_invalid":"reject","example":"furniture","aliases":["category_slug","category_id","parent"]},{"name":"depth","type":"integer","required":false,"description":"How many levels to return. The source's tree is exactly 3 deep.","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":3},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{count, node_count, depth, language, categories[{id, category_id, level, name, slug, name_fr, name_en, slug_fr, slug_en, examples, parent_id, image, child_count, children[]}]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"language":"en","category":"seating","depth":3}},{"name":"facets","description":"The source's own filter values with its own counts, for any scope you can search — the whole catalogue, a category, a free-text query, or any combination of the search filters. Use it to discover the 200+ filterable designer names, the 94 French departments, the 51 materials or the price range inside a category before you search. ⚠️ The counts are selency's own counters and they are exact only while the set is small: measured against the number of rows the same filter actually returns, they agreed to the row on 19 of 26 country filters (up to 7,248 rows) and then drifted by up to 13.5% above roughly 10,000 — so treat a large count as an estimate.","required_params":[],"optional_params":["facet","query","language","category","style","material","color","designer","country","department","region","collection","quality_mark","min_price","max_price","negotiable","discounted","pro_seller","max_values","include_pii"],"params":[{"name":"facet","type":"array","required":false,"description":"Which filter dimensions to describe. Default: category_level1, style, material, color, country, designer, quality_mark and price. `price` and `width` come back as min/max/avg statistics rather than a value list.","on_invalid":"reject","allowed_values":[{"value":"batch_quantity","label":"batch quantity"},{"value":"category_level1","label":"category level1"},{"value":"category_level2","label":"category level2"},{"value":"category_level3","label":"category level3"},{"value":"collection","label":"collection"},{"value":"color","label":"color"},{"value":"country","label":"country"},{"value":"department","label":"department"},{"value":"designer","label":"designer"},{"value":"material","label":"material"},{"value":"price","label":"price"},{"value":"quality_mark","label":"quality mark"},{"value":"region","label":"region"},{"value":"seller","label":"seller"},{"value":"seller_rating","label":"seller rating"},{"value":"style","label":"style"},{"value":"width","label":"width"}],"example":["designer","material"],"aliases":["facets","attributes"]},{"name":"query","type":"string","required":false,"description":"Scope the counts to a free-text search.","on_invalid":"reject","example":"art deco","aliases":["q"]},{"name":"language","type":"enum","required":false,"description":"Which of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English — the en_GB catalogue (selency.co.uk / selency.nl)"},{"value":"fr","label":"French — the fr_FR catalogue (selency.fr), the source's primary one"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"category","type":"array","required":false,"description":"Category, as a slug from the categories action — a root (furniture, seating, lighting, decor, tableware, art, linens-soft-furnishings, garden-accessories, kids / meubles, chaises, eclairer, decorer, art-de-la-table, art, linge-de-maison, mobilier-de-jardin-terrasse, kids-enfant-vintage), or any of the 65 second-level or 126 third-level slugs (coffee-table, bedside-lamp-and-table-lamp, plaster-bust ...). Either language's slug is accepted and a numeric category id works too. Repeatable: several categories are OR-ed. Resolved against selency's own tree before the search is sent, because the source answers an unknown value with HTTP 200 and ZERO rows rather than an error.","on_invalid":"reject","example":["coffee-table"],"aliases":["categories","category_slug","category_id"]},{"name":"style","type":"array","required":false,"description":"Scope the counts to these styles.","on_invalid":"reject","allowed_values":[{"value":"vintage","label":"vintage"},{"value":"classic","label":"classic"},{"value":"world-s-craft","label":"world s craft"},{"value":"scandinavian","label":"scandinavian"},{"value":"art-deco","label":"art deco"},{"value":"design","label":"design"},{"value":"contemporary","label":"contemporary"},{"value":"mid-century","label":"mid century"},{"value":"industrial","label":"industrial"},{"value":"modernist-bauhaus","label":"modernist bauhaus"},{"value":"bohemia","label":"bohemia"},{"value":"brutalist","label":"brutalist"},{"value":"space-age","label":"space age"},{"value":"art-nouveau","label":"art nouveau"},{"value":"seventies","label":"seventies"},{"value":"memphis","label":"memphis"}],"example":["art-deco"]},{"name":"material","type":"array","required":false,"description":"Scope the counts to these materials.","on_invalid":"reject","allowed_values":[{"value":"wood","label":"wood"},{"value":"ceramics-porcelain-and-earthenware","label":"ceramics porcelain and earthenware"},{"value":"glass-and-crystal","label":"glass and crystal"},{"value":"wool-cotton","label":"wool cotton"},{"value":"metal","label":"metal"},{"value":"linen","label":"linen"},{"value":"brass","label":"brass"},{"value":"paper","label":"paper"},{"value":"oak","label":"oak"},{"value":"teak","label":"teak"},{"value":"fabric","label":"fabric"},{"value":"chrome","label":"chrome"},{"value":"canvas","label":"canvas"},{"value":"leather","label":"leather"},{"value":"rattan-and-wicker","label":"rattan and wicker"},{"value":"iron","label":"iron"},{"value":"plastic","label":"plastic"},{"value":"walnut","label":"walnut"},{"value":"silver-plated-metal","label":"silver plated metal"},{"value":"aluminium","label":"aluminium"},{"value":"opaline","label":"opaline"},{"value":"bronze","label":"bronze"},{"value":"mahogany","label":"mahogany"},{"value":"bamboo","label":"bamboo"},{"value":"terracotta","label":"terracotta"},{"value":"marble","label":"marble"},{"value":"stone-and-plaster","label":"stone and plaster"},{"value":"stainless-steel","label":"stainless steel"},{"value":"rosewood","label":"rosewood"},{"value":"velvet","label":"velvet"},{"value":"plexiglass","label":"plexiglass"},{"value":"resin","label":"resin"},{"value":"silver-material","label":"silver material"},{"value":"leatherette","label":"leatherette"},{"value":"copper","label":"copper"},{"value":"fiberglass","label":"fiberglass"},{"value":"melting","label":"melting"},{"value":"travertine","label":"travertine"},{"value":"granite","label":"granite"},{"value":"bakelite","label":"bakelite"},{"value":"enamelled-sheet","label":"enamelled sheet"},{"value":"formica","label":"formica"},{"value":"jute","label":"jute"},{"value":"rope","label":"rope"},{"value":"concrete","label":"concrete"},{"value":"skin","label":"skin"},{"value":"slate","label":"slate"},{"value":"elm-burl","label":"elm burl"},{"value":"zinc","label":"zinc"},{"value":"feather","label":"feather"},{"value":"terrazo","label":"terrazo"}],"example":["teak"]},{"name":"color","type":"array","required":false,"description":"Scope the counts to these colours.","on_invalid":"reject","allowed_values":[{"value":"multicolour","label":"multicolour"},{"value":"wooden","label":"wooden"},{"value":"brown","label":"brown"},{"value":"white","label":"white"},{"value":"transparent","label":"transparent"},{"value":"black","label":"black"},{"value":"golden","label":"golden"},{"value":"beige","label":"beige"},{"value":"blue","label":"blue"},{"value":"silver","label":"silver"},{"value":"green","label":"green"},{"value":"red","label":"red"},{"value":"grey","label":"grey"},{"value":"orange","label":"orange"},{"value":"pink","label":"pink"},{"value":"yellow","label":"yellow"},{"value":"printed","label":"printed"},{"value":"ecru","label":"ecru"},{"value":"burgundy","label":"burgundy"},{"value":"purple","label":"purple"},{"value":"turquoise","label":"turquoise"},{"value":"midnight-blue","label":"midnight blue"},{"value":"terracotta","label":"terracotta"}],"example":["brown"],"aliases":["colour"]},{"name":"designer","type":"array","required":false,"description":"Scope the counts to these designers.","on_invalid":"reject","example":["Paulin, Pierre"]},{"name":"country","type":"array","required":false,"description":"Scope the counts to these seller countries.","on_invalid":"reject","allowed_values":[{"value":"FR","label":"FR"},{"value":"NL","label":"NL"},{"value":"BE","label":"BE"},{"value":"PL","label":"PL"},{"value":"IT","label":"IT"},{"value":"DE","label":"DE"},{"value":"TR","label":"TR"},{"value":"CZ","label":"CZ"},{"value":"MA","label":"MA"},{"value":"ES","label":"ES"},{"value":"GB","label":"GB"},{"value":"DK","label":"DK"},{"value":"HU","label":"HU"},{"value":"SI","label":"SI"},{"value":"SE","label":"SE"},{"value":"AT","label":"AT"},{"value":"SK","label":"SK"},{"value":"PT","label":"PT"},{"value":"CH","label":"CH"},{"value":"MC","label":"MC"},{"value":"LU","label":"LU"},{"value":"LV","label":"LV"},{"value":"RO","label":"RO"},{"value":"US","label":"US"},{"value":"TN","label":"TN"},{"value":"GE","label":"GE"},{"value":"LT","label":"LT"},{"value":"IE","label":"IE"},{"value":"NO","label":"NO"},{"value":"FI","label":"FI"},{"value":"EE","label":"EE"},{"value":"IN","label":"IN"},{"value":"GR","label":"GR"},{"value":"BG","label":"BG"}],"example":["FR"]},{"name":"department","type":"array","required":false,"description":"Scope the counts to these French departments.","on_invalid":"reject","example":["75"],"value_pattern":"\\d{1,2}(\\|\\|.+)?"},{"name":"region","type":"enum","required":false,"description":"Scope the counts to the source's single region value.","on_invalid":"reject","allowed_values":[{"value":"Ile-de-France","label":"Greater Paris"}],"example":"Ile-de-France"},{"name":"collection","type":"array","required":false,"description":"Scope the counts to a curated collection (language=fr).","on_invalid":"reject","allowed_values":[{"value":"Produits a 200 balles","label":"Under-200-euro pick"}],"example":["Produits a 200 balles"]},{"name":"quality_mark","type":"array","required":false,"description":"Scope the counts to these listing-quality grades.","on_invalid":"reject","allowed_values":[{"value":"excellent","label":"3 stars"},{"value":"good","label":"2 stars"},{"value":"basic","label":"1 star"}],"example":["excellent"]},{"name":"min_price","type":"number","required":false,"description":"Scope the counts to this price floor in EUR.","on_invalid":"reject","example":200,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Scope the counts to this price ceiling in EUR.","on_invalid":"reject","example":2000,"minimum":0},{"name":"negotiable","type":"boolean","required":false,"description":"Scope the counts to negotiable listings.","on_invalid":"reject","example":true},{"name":"discounted","type":"boolean","required":false,"description":"Scope the counts to discounted listings.","on_invalid":"reject","example":true},{"name":"pro_seller","type":"boolean","required":false,"description":"Scope the counts to professional sellers.","on_invalid":"reject","example":true},{"name":"max_values","type":"integer","required":false,"description":"How many values per facet. The source's own cap is 1,000; the designer facet needs more than 200 to be complete.","on_invalid":"reject","default":100,"example":200,"minimum":1,"maximum":1000},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{total, total_is_exact, counts_exact_up_to, scope, language, facets{<name>: [{value, label, source_count}]}, statistics{<name>: {min, max, avg, sum}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"facet":["designer","material","style","price"],"category":["coffee-table"],"language":"en","max_values":200}},{"name":"seller","description":"A seller's public shop record: whether it is a registered business (with its company registration number) or a private individual, the country it ships from, its ambassador and trade-programme status, how long it has been open, its rating, review count and live and sold listing counts — and optionally its current listings and the reviews buyers left. Selency publishes a display name it has already reduced to a first name and a surname initial, and no address, phone or e-mail anywhere on this surface.","required_params":["id"],"optional_params":["language","include_listings","include_reviews","page","page_size","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"Shop id — either the id a listing's `seller.shop_id` carries, the UUID the detail action returns, or the id in a /shops/... URL. All three forms are accepted.","on_invalid":"reject","example":"f78ddb78d13c333397f8cead352db7d4","aliases":["shop","shop_id","seller","url"]},{"name":"language","type":"enum","required":false,"description":"Which of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English — the en_GB catalogue (selency.co.uk / selency.nl)"},{"value":"fr","label":"French — the fr_FR catalogue (selency.fr), the source's primary one"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"include_listings","type":"boolean","required":false,"description":"Also return the shop's current listings.","on_invalid":"reject","default":true,"example":true},{"name":"include_reviews","type":"boolean","required":false,"description":"Also return the reviews buyers left, with rating, comment, date, the listing they refer to and the buyer's first name and surname as the source's payload carries them.","on_invalid":"reject","default":false,"example":false},{"name":"page","type":"integer","required":false,"description":"1-based page. The reachable window is 10,000 rows per ordering: past it the source returns an EMPTY page rather than repeating its last one (measured: with 100 rows per page, page 99 is full and pages 100, 101 and 120 are all empty), and meta.stop_reason says window_reached. To go deeper, narrow the filters or change `sort`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100. The source honours up to 1,000 (3.44 MB raw) and clamps there; this engine caps at 100 (347 KB raw, 0.6 s) to stay inside the gateway's request budget.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["per_page","limit","max_results"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{seller{shop_id, legacy_shop_id, url, kind, is_business, business_id, country, is_ambassador, has_trade_program, created_at, statistics{rating, reviews_count, listings_live, listings_sold, days_open}}, listings[], listings_total, reviews[], reviews_total}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"f78ddb78d13c333397f8cead352db7d4","include_listings":true,"language":"en","page_size":20}},{"name":"suggest","description":"selency's own query suggestions — 29,301 of them — each with the popularity the source assigns it and the catalogue page it points at. This is the source's real demand signal: what people actually type, in its own words, per language.","required_params":[],"optional_params":["query","language","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Prefix or term to complete. Omit for the most popular suggestions overall.","on_invalid":"reject","example":"table","aliases":["q","prefix"]},{"name":"language","type":"enum","required":false,"description":"Which of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).","on_invalid":"reject","allowed_values":[{"value":"en","label":"English — the en_GB catalogue (selency.co.uk / selency.nl)"},{"value":"fr","label":"French — the fr_FR catalogue (selency.fr), the source's primary one"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"page_size","type":"integer","required":false,"description":"How many suggestions to return, 1-50.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit","max_results"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{count, total, query, language, suggestions[{query, popularity, page_type, url}]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"table","language":"fr","page_size":20}}]},{"name":"sellpy","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Sellpy API — live data from sellpy.com, the H&M-backed Swedish managed second-hand fashion marketplace, across its 12 national storefronts and 24 shipping countries. Every row is ONE physical garment that exists exactly once, photographed, measured, condition-graded and priced by Sellpy itself: brand, type, model, size, colours, materials, fabric, pattern, the centimetre measurements of the actual garment and the WRITTEN-DOWN defects with the spot they are on. Search ~11M live items with 29 measured filters (down to heel height and measured waist), read the full item record in ten languages, walk the 325-node category tree, resolve brand tokens, read the storefront's real search log, and find garments by MEANING with Sellpy's own vector service. Prices are per market and are separate price lists, not conversions — `detail` returns all twelve side by side. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/sellpy/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse one Sellpy market. Every garment is unique, so a row is a specific item and not a product line: it carries its own size, its own condition grade, the centimetres Sellpy measured on it and the defects Sellpy wrote down. 29 filters are offered and every single one was measured biting against the same unfiltered control in the same run (brand Gucci, 2,139 rows, exact count) — the four source attributes that look like filters and silently match nothing are NOT offered. The storefront's own availability gate is always applied, so a row is never returned with a missing price for your market; on brand Gucci that gate removed 21% of the indexed rows for EU and 26% for RO. Paging stops at the source's 2,400-result ceiling, which the engine clamps and reports rather than letting it quietly empty.","required_params":["market"],"optional_params":["query","language","sort","page","per_page","min_price","max_price","category","exclude_reserved","circle_listings","last_chance_only","facets","max_facet_values","include_all_market_prices","brand","type","model","color","material","material_group","fabric","pattern","condition","size","season","style","brand_group","demography","segment","item_language","neckline","sleeve_length","garment_length","pants_length","waist_rise","defect_type","warehouse","sale_type","waist_cm","inner_leg_cm","height_cm","width_cm","length_cm","heel_height_cm"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Sellpy storefront to read. This is the one parameter you cannot get wrong: it picks BOTH the price list and the live assortment. Measured on brand Gucci, 2,712 indexed items were sellable as 2,139 in EU, 2,170 in SE, 2,155 in CZ and 2,005 in RO, and the engine always applies the storefront's own gate (`price_<market> > 0`) so a row is never returned with a missing price. The seven euro markets (EU, DE, AT, NL, BE, FI, FR) share ONE euro price — identical on 50/50 cross-checked items — while SEK, DKK, PLN, CZK and RON are separate rounded price lists, not conversions (SEK ran 10.00-12.50 per EUR across 50 items).","on_invalid":"reject","allowed_values":[{"value":"EU","label":"European Union (the international storefront) · EUR"},{"value":"SE","label":"Sweden · SEK"},{"value":"DE","label":"Germany · EUR"},{"value":"AT","label":"Austria · EUR"},{"value":"NL","label":"Netherlands · EUR"},{"value":"BE","label":"Belgium · EUR"},{"value":"FI","label":"Finland · EUR"},{"value":"FR","label":"France · EUR"},{"value":"DK","label":"Denmark · DKK"},{"value":"PL","label":"Poland · PLN"},{"value":"CZ","label":"Czechia · CZK"},{"value":"RO","label":"Romania · RON"}],"default":"EU","example":"SE","aliases":["region","country","site","locale"]},{"name":"query","type":"string","required":false,"description":"Free-text search over Sellpy's own index: brand, type, model, colour, material and the AI keywords Sellpy writes for each garment. Leave it empty to browse the whole market with filters only — and note that an empty query is what makes `price_asc`/`price_desc` a STRICT order (with a text query the index ranks textual relevance first and only then price; `meta.sort_is_strict` tells you which you got).","on_invalid":"reject","example":"vintage levi's denim jacket","aliases":["q","keyword","keywords","text"]},{"name":"language","type":"enum","required":false,"description":"The language the item words come back in (type, colour, condition, pattern, defect names, category path). Defaults to the market's own language, which is what sellpy.com shows there. Only a language whose index actually carries your market's price is accepted — `en` carries all twelve, `nl` carries NL and BE, `de` carries DE and AT, `fr` carries FR and BE, and the rest carry one each — so an impossible pair is rejected instead of being served another country's price. Pick `en` with `market: \"SE\"` to read Swedish stock in English with every market's price attached.","on_invalid":"reject","allowed_values":[{"value":"sv","label":"Swedish — the base language of the item record"},{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"nl","label":"Dutch"},{"value":"fr","label":"French"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"cs","label":"Czech"},{"value":"ro","label":"Romanian"}],"example":"en","aliases":["lang","metadata_language"]},{"name":"sort","type":"enum","required":false,"description":"Row order, using the storefront's own four index replicas. `price_desc` needs care at the source: that replica is a VIRTUAL one and returned ONE row for the query 'nike shoes' until relevant-sort was switched off — the engine always switches it off, so you get the full page (144200, 56000, 47300 ... EUR cents in the measured run).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Sellpy's own relevance ranking (the storefront default)"},{"value":"newest","label":"most recently put on sale first"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"most expensive first"}],"default":"relevance","example":"price_asc","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Zero-based page. The source caps paging at 2,400 results no matter how many items match: page 1199 at 2 per page still returned rows, pages 1200 and 2000 returned ZERO rows with `nbPages: 0` (it empties, it does not repeat). The engine clamps to that cap and warns; past it, narrow the query instead.","on_invalid":"reject","default":0,"example":1,"minimum":0,"aliases":["p","page_number"]},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, 1-100. `page * per_page + per_page` may not exceed the source's 2400-result ceiling.","on_invalid":"reject","default":24,"example":48,"minimum":1,"maximum":100,"aliases":["hits_per_page","limit","page_size"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in the MARKET'S OWN currency and MAJOR units (20 = EUR 20.00 on a euro market, 20 SEK on `SE`). Never minor units: the source stores 4850 for EUR 48.50 and the engine does the conversion for you. On the EU surface the index's own stats put the live price band at EUR 2.99 - 11,906.00, mean 23.73.","on_invalid":"reject","example":20,"minimum":0,"aliases":["price_min","priceMin"]},{"name":"max_price","type":"number","required":false,"description":"Highest price, same units as `min_price`.","on_invalid":"reject","example":60,"minimum":0,"aliases":["price_max","priceMax"]},{"name":"category","type":"string","required":false,"description":"Restrict to one node of Sellpy's own category tree, written exactly as the tree prints it with ' > ' between levels — `Women`, `Women > Clothing`, `Women > Clothing > Pants & Jeans`, `Women > Clothing > Pants & Jeans > Jeans`. The depth you pass picks the level it filters on. The words are in the market's language ('Kvinna' on `SE`), and the `categories` action returns the whole tree with live counts.","on_invalid":"reject","example":"Women > Clothing > Pants & Jeans","aliases":["category_path","cat","path"]},{"name":"exclude_reserved","type":"boolean","required":false,"description":"Drop items already in somebody's cart. The source keeps them in the index (93 of 2,139 live Gucci items were reserved), and sellpy.com itself shows them, so the default matches the storefront. Every row carries `is_reserved` either way.","on_invalid":"reject","default":false,"example":true,"aliases":["hide_reserved","available_only"]},{"name":"circle_listings","type":"enum","required":false,"description":"Sellpy has two kinds of listing: the managed one (Sellpy does the photography, grading, pricing, storage and shipping) and 'Circle', where a private person ships directly. MEASURED, and the number is the point: 334,685 Circle items exist in the index, but `p2p:true` plus the EU gate matched ZERO (exact) while `p2p:true` plus the SE gate matched 29,051 (exact). Circle is a SWEDEN-ONLY surface today, so `only` returns nothing outside `market: \"SE\"` and this engine says so instead of letting it look broken. Every row carries `is_circle_listing`.","on_invalid":"reject","allowed_values":[{"value":"include","label":"both Sellpy-handled and Circle items (the storefront default)"},{"value":"exclude","label":"only items Sellpy itself photographed, graded and stores"},{"value":"only","label":"only Circle items, which a private person ships directly"}],"default":"include","example":"exclude","aliases":["p2p","circle"]},{"name":"last_chance_only","type":"boolean","required":false,"description":"Only items the storefront flags as about to leave the market.","on_invalid":"reject","default":false,"example":true,"aliases":["last_chance"]},{"name":"facets","type":"array","required":false,"description":"Also return the value counts of these facets for the SAME search, so one call gives you rows plus the shape of what matched. Numeric facets (`price`, `pants_length`, `waist_cm`, `inner_leg_cm`, `height_cm`, `width_cm`, `length_cm`, `heel_height_cm`) come back with min/max/avg/sum as well as value counts, and ONLY those eight do: the source hands out a stats block for any facet with numeric-looking values, which on `brand` produced min 0 / max 6397 on one market and min -417 on another, so it is dropped. `model` is not here on purpose: it FILTERS (model 501 -> 9,904 items) but the source never returns facet values for it.","on_invalid":"reject","allowed_values":[{"value":"brand","label":"brand"},{"value":"type","label":"type"},{"value":"color","label":"color"},{"value":"material","label":"material"},{"value":"material_group","label":"material_group"},{"value":"fabric","label":"fabric"},{"value":"pattern","label":"pattern"},{"value":"condition","label":"condition"},{"value":"size","label":"size"},{"value":"season","label":"season"},{"value":"style","label":"style"},{"value":"brand_group","label":"brand_group"},{"value":"demography","label":"demography"},{"value":"segment","label":"segment"},{"value":"item_language","label":"item_language"},{"value":"neckline","label":"neckline"},{"value":"sleeve_length","label":"sleeve_length"},{"value":"garment_length","label":"garment_length"},{"value":"pants_length","label":"pants_length"},{"value":"waist_rise","label":"waist_rise"},{"value":"defect_type","label":"defect_type"},{"value":"warehouse","label":"warehouse"},{"value":"sale_type","label":"sale_type"},{"value":"category_lvl0","label":"category_lvl0"},{"value":"category_lvl1","label":"category_lvl1"},{"value":"category_lvl2","label":"category_lvl2"},{"value":"category_lvl3","label":"category_lvl3"},{"value":"waist_cm","label":"waist_cm"},{"value":"inner_leg_cm","label":"inner_leg_cm"},{"value":"height_cm","label":"height_cm"},{"value":"width_cm","label":"width_cm"},{"value":"length_cm","label":"length_cm"},{"value":"heel_height_cm","label":"heel_height_cm"},{"value":"price","label":"price"}],"example":["brand","condition","size"],"aliases":["facet","facet_names"]},{"name":"max_facet_values","type":"integer","required":false,"description":"How many values to return per facet, 1-1000. Raise it when you are walking the source's own vocabulary rather than drawing a sidebar: the live size facet alone holds over 200 distinct tokens and the brand facet thousands.","on_invalid":"reject","default":20,"example":100,"minimum":1,"maximum":1000,"aliases":["max_values_per_facet"]},{"name":"include_all_market_prices","type":"boolean","required":false,"description":"Keep `prices_by_market` on every row. It is filled with whatever the chosen language index carries: all twelve markets on `en`, two on `nl`/`de`/`fr`, one on the rest. Set it false to drop the block from the payload.","on_invalid":"reject","default":true,"example":false,"aliases":["all_prices","all_market_prices"]},{"name":"include_pii","type":"boolean","required":false,"description":"Add the seller's opaque Sellpy id (`seller_ref`) and their intake-bag id to each row. Off by default: sellpy.com never shows who sent an item, Sellpy is the party selling it, and the id is the only thing on this source that links items to one private person. Sellpy employee ids attached to photos and warehouse steps are stripped in every case and this flag does not bring them back.","on_invalid":"reject","default":false},{"name":"brand","type":"array","required":false,"description":"Keep only these brands, as the source spells them. Use the `brands` action for the exact string: `Levi's` matches 0 items. Several values are OR-ed. Measured: Gucci 2,139 of the EU surface.","on_invalid":"reject","example":["Levi Strauss & Co"],"aliases":["brands"]},{"name":"type","type":"array","required":false,"description":"Garment type in the market's language: Sneakers, Jeans, Dress, Belt, Sunglasses... Measured on a 2,139-row control: Sneakers 144.","on_invalid":"reject","example":["Sneakers"],"aliases":["types","garment_type"]},{"name":"model","type":"array","required":false,"description":"Model or line name. This one FILTERS but has no facet values at the source (`501` -> 9,904 items, `Gazelle` -> 1,241), so there is no value list to browse — pass a name you know.","on_invalid":"reject","example":["501"],"aliases":["models"]},{"name":"color","type":"array","required":false,"description":"Colour in the market's language. Measured: Black 828 of 2,139.","on_invalid":"reject","example":["Black"],"aliases":["colors","colour","colours"]},{"name":"material","type":"array","required":false,"description":"Declared material. Measured: Leather 431 of 2,139.","on_invalid":"reject","example":["Leather"],"aliases":["materials"]},{"name":"material_group","type":"array","required":false,"description":"Sellpy's own material grouping, which adds families and purity labels on top of the raw material ('Natural fibers', 'Synthetic Fibers', '100% Cotton'). Measured: 100% Cotton 150 of 2,139.","on_invalid":"reject","example":["100% Cotton"],"aliases":["material_groups","material_family"]},{"name":"fabric","type":"array","required":false,"description":"Fabric construction: Denim, Fine knit, Velvet, Corduroy, Tweed... Measured: Denim 46 of 2,139.","on_invalid":"reject","example":["Denim"],"aliases":["fabrics"]},{"name":"pattern","type":"array","required":false,"description":"Surface pattern in the market's language: Monochrome, Print, Striped, Floral, Checked, Pinstripe, Chevron. Measured on the control: Monochrome 349, Print 156, Striped 48, Floral 22 of 2,139.","on_invalid":"reject","example":["Striped"],"aliases":["patterns"]},{"name":"condition","type":"array","required":false,"description":"Sellpy's own grade, assigned by Sellpy, not by the seller. The live EU surface splits Very good 4.12M / Good 3.70M / Acceptable 1.20M / New 1.09M; 'Poor' exists in tiny numbers. The value is in the market's own language ('Bra' on SE, 'Sehr gut' on DE), which is why every row also carries `condition_rank` 1-5 and `condition_label_en` — the ladder was read off all ten language indexes, so neither is ever null just because you left English.","on_invalid":"reject","example":["New","Very good"],"aliases":["conditions","grade"]},{"name":"size","type":"array","required":false,"description":"Sellpy's size token, AUDIENCE-SCALE-VALUE: `WMN-INT-M`, `WMN-EU-38`, `MEN-INT-L`, `SHOES-EU-37.5`, `PANTS-INCH-27`, `CHILD-CM-98`, `BELTS-CM-85`, plus `NO SIZE` and `ONE SIZE`. Every row returns it split into audience / scale / value as well as raw. Measured: SHOES-EU-38 54 of 2,139.","on_invalid":"reject","example":["WMN-INT-M"],"aliases":["sizes"]},{"name":"season","type":"array","required":false,"description":"Measured on the control: Spring 931, Summer 899, Fall 385, Winter 231.","on_invalid":"reject","example":["Summer"],"aliases":["seasons"]},{"name":"style","type":"array","required":false,"description":"Sellpy's own style tag: chic, casual, vintage, urban, minimalist, glamour, athleisure... Measured: chic 1,045 of 2,139.","on_invalid":"reject","example":["chic"],"aliases":["styles","style_tag"]},{"name":"brand_group","type":"array","required":false,"description":"Sellpy's brand grouping — 'Luxury & High-End', 'Denim', 'American Fashion Heritage', 'Athletic & Sportswear'. Measured: Luxury & High-End 2,121 of the 2,139 Gucci rows.","on_invalid":"reject","example":["Luxury & High-End"],"aliases":["brand_groups"]},{"name":"demography","type":"array","required":false,"description":"The source's own audience label in the market's language: Women, Men, Girls, Boys, Unisex (Adults), Unisex (Kids). Measured: Men 307 of 2,139. `segment` is the coarser, language-free version.","on_invalid":"reject","example":["Men"],"aliases":["demographies","gender","audience"]},{"name":"segment","type":"array","required":false,"description":"The language-free audience bucket: women, men, children, unisex, things. Prefer this one when you query several markets.","on_invalid":"reject","example":["women"],"aliases":["segments"]},{"name":"item_language","type":"array","required":false,"description":"The language of a BOOK or other printed item, not the language the listing is written in (the top-level `language` does that, and the two were deliberately given different names so neither can silently swallow the other). Measured inside the 'Other items' tree: Swedish 32,610, German 23,930, English 10,343.","on_invalid":"reject","example":["Swedish"],"aliases":["book_language","printed_language"]},{"name":"neckline","type":"array","required":false,"description":"Measured: Round neck 117, V-neck 37 of the control.","on_invalid":"reject","example":["V-neck"],"aliases":["necklines"]},{"name":"sleeve_length","type":"array","required":false,"description":"Measured: Long sleeves 172, Short sleeves 89, Sleeveless 29, Three-quarter sleeve 8.","on_invalid":"reject","example":["Long sleeves"],"aliases":["sleeve"]},{"name":"garment_length","type":"array","required":false,"description":"Midi / Mini / Maxi. Measured: Midi 58 of the control.","on_invalid":"reject","example":["Midi"],"aliases":["length_class"]},{"name":"pants_length","type":"array","required":false,"description":"The trouser length label the source prints, as a STRING of inches: 32, 30, 34, 28... Measured on the Jeans tree: '32' 42,868.","on_invalid":"reject","example":["32"],"aliases":["inseam_label"]},{"name":"waist_rise","type":"array","required":false,"description":"High / Medium / Low. Measured on the Jeans tree: High 24,336, Medium 7,550, Low 5,338.","on_invalid":"reject","example":["High"],"aliases":["rise"]},{"name":"defect_type","type":"array","required":false,"description":"Sellpy inspects every garment and WRITES DOWN what is wrong with it, so you can filter on the flaw: Light dirt, Scratched, Dirty, Worn, Lightly scratched, Discoloration, Stain, Lightly worn. Measured: Stain 107 of 2,139. Each row returns the full defect list with the spot on the garment.","on_invalid":"reject","example":["Stain"],"aliases":["defect","defects"]},{"name":"warehouse","type":"array","required":false,"description":"Which Sellpy warehouse holds the item — the live EU surface splits K / M / J. It is the source's own single-letter code and it moves delivery time, nothing else.","on_invalid":"reject","example":["K"],"aliases":["warehouses","storage_site"]},{"name":"sale_type","type":"array","required":false,"description":"How the item is being sold: `regular`, `influencer` (a curated celebrity/creator wardrobe), `business` or `upcycle`. Measured on the live EU surface: regular 11,310,613, influencer 118,245, business 65,280, upcycle 70 — so `influencer` is the one worth asking for and it really is a separate sub-catalogue.","on_invalid":"reject","example":["influencer"],"aliases":["sale_types"]},{"name":"waist_cm","type":"string","required":false,"description":"Waist in centimetres, as Sellpy MEASURED the actual garment (not a size label). Grammar: `76` exact, `70-80` band, `>=80`, `<=70`. Measured: 70-80 -> 84 of the 2,139-row control; the index's own stats put live waists at 50-200 cm, mean 77.2.","on_invalid":"reject","example":"70-80","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["waist"]},{"name":"inner_leg_cm","type":"string","required":false,"description":"Measured inner leg length in cm, same grammar as `waist_cm`. Measured: 70-90 -> 57 of the control.","on_invalid":"reject","example":"70-90","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["inner_leg","inseam_cm"]},{"name":"height_cm","type":"string","required":false,"description":"Measured height of the item in cm (bags, shoes, objects). Measured: 20-40 -> 80 of the control.","on_invalid":"reject","example":"20-40","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["height"]},{"name":"width_cm","type":"string","required":false,"description":"Measured width in cm. Measured: 20-40 -> 110 of the control.","on_invalid":"reject","example":"20-40","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["width"]},{"name":"length_cm","type":"string","required":false,"description":"Measured length in cm. Measured: 20-40 -> 6 of the control.","on_invalid":"reject","example":"20-40","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["length"]},{"name":"heel_height_cm","type":"string","required":false,"description":"Measured heel height in cm — the filter nobody else has. Measured: >=8 -> 117 of the control.","on_invalid":"reject","example":">=8","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["heel","heel_height"]}],"returns":"items[]{item_id, url, title, brand, model, type, category_path, category_levels[], segment, demography, condition, condition_rank, condition_label_en, size{raw,scope,scale,value,is_unsized}, sizes[], colors[], materials[], material_groups[], fabric, pattern, seasons[], details[], measurements_cm{}, defects[]{type,location,category,defect_id}, price{amount,amount_minor,currency,display}, price_market, price_missing_in_market, prices_by_market{}, price_drop{was,show_until_ms}, is_reserved, is_for_sale, is_last_chance, is_circle_listing, sale_type, sales_channel, favourite_count, weight_kg, warehouse_code, first_offered_at, sale_started_at, created_at, updated_at, images[], style_tags[], brand_groups[], concepts[], keywords[], brand_profile{}, detail_params{}} + facets{} + facet_stats{} + seller{} + meta{market, country, currency, language, index, sort, sort_is_strict, page, per_page, page_count, total{value,is_exact,note}, pagination_cap, market_gate, filters_applied{}, price_range{min,max}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"market":"SE","query":"jeans","sort":"price_asc","per_page":24}},{"name":"detail","description":"The complete record of one garment, from BOTH of the source's own back ends in one call: Sellpy's item database and its search index. That means the item's metadata translated into TEN languages, every photograph with the photo TYPE Sellpy shot it as (the robot turntable frames, the brand tag, the sole, the seam, the fabric close-up, the size label and one frame per DEFECT), the full measured defect list, the centimetre measurements, weight in kilos, Sellpy's own sellability score for the item, the intake / photographed / listed timestamps, the warehouse and shelf it sits on — and the price in ALL TWELVE markets at once, which is the only way to see that the seven euro storefronts share one price while SEK, DKK, PLN, CZK and RON are separate rounded lists (one measured item: EUR 48.50 / SEK 580 / DKK 390 / PLN 230 / CZK 1,250 / RON 280). Sellpy employee ids attached to the photos and the warehouse steps are stripped. An unknown id is NOT_FOUND. `language` changes the item's own words here (type, condition, colour, pattern, defect names) because they come from the record's ten translations; the AI keywords and concepts come from the English index, which is the only one carrying every market's price.","required_params":["market","item_id"],"optional_params":["language"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Sellpy storefront to read. This is the one parameter you cannot get wrong: it picks BOTH the price list and the live assortment. Measured on brand Gucci, 2,712 indexed items were sellable as 2,139 in EU, 2,170 in SE, 2,155 in CZ and 2,005 in RO, and the engine always applies the storefront's own gate (`price_<market> > 0`) so a row is never returned with a missing price. The seven euro markets (EU, DE, AT, NL, BE, FI, FR) share ONE euro price — identical on 50/50 cross-checked items — while SEK, DKK, PLN, CZK and RON are separate rounded price lists, not conversions (SEK ran 10.00-12.50 per EUR across 50 items).","on_invalid":"reject","allowed_values":[{"value":"EU","label":"European Union (the international storefront) · EUR"},{"value":"SE","label":"Sweden · SEK"},{"value":"DE","label":"Germany · EUR"},{"value":"AT","label":"Austria · EUR"},{"value":"NL","label":"Netherlands · EUR"},{"value":"BE","label":"Belgium · EUR"},{"value":"FI","label":"Finland · EUR"},{"value":"FR","label":"France · EUR"},{"value":"DK","label":"Denmark · DKK"},{"value":"PL","label":"Poland · PLN"},{"value":"CZ","label":"Czechia · CZK"},{"value":"RO","label":"Romania · RON"}],"default":"EU","example":"SE","aliases":["region","country","site","locale"]},{"name":"item_id","type":"string","required":true,"description":"A Sellpy item id — the 10-character code in the item url (`sellpy.com/item/GWXZAXqIpE`). Every `search` row returns it as `item_id` and as a ready-made `detail_params`. An id that does not exist answers NOT_FOUND (the source's own Parse error 101), not an empty success.","on_invalid":"reject","example":"GWXZAXqIpE","value_pattern":"[A-Za-z0-9]{6,20}","aliases":["id","objectId","item"]},{"name":"language","type":"enum","required":false,"description":"The language the item words come back in (type, colour, condition, pattern, defect names, category path). Defaults to the market's own language, which is what sellpy.com shows there. Only a language whose index actually carries your market's price is accepted — `en` carries all twelve, `nl` carries NL and BE, `de` carries DE and AT, `fr` carries FR and BE, and the rest carry one each — so an impossible pair is rejected instead of being served another country's price. Pick `en` with `market: \"SE\"` to read Swedish stock in English with every market's price attached.","on_invalid":"reject","allowed_values":[{"value":"sv","label":"Swedish — the base language of the item record"},{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"nl","label":"Dutch"},{"value":"fr","label":"French"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"cs","label":"Czech"},{"value":"ro","label":"Romanian"}],"example":"en","aliases":["lang","metadata_language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Add the seller's opaque Sellpy id (`seller_ref`) and their intake-bag id to each row. Off by default: sellpy.com never shows who sent an item, Sellpy is the party selling it, and the id is the only thing on this source that links items to one private person. Sellpy employee ids attached to photos and warehouse steps are stripped in every case and this flag does not bring them back.","on_invalid":"reject","default":false}],"returns":"item{item_id, url, title, brand, model, type, category_path, category_levels[], segment, demography, condition, condition_rank, condition_label_en, size{raw,scope,scale,value,is_unsized}, sizes[], colors[], materials[], material_groups[], fabric, pattern, seasons[], details[], measurements_cm{}, defects[]{type,location,category,defect_id}, price{amount,amount_minor,currency,display}, price_market, price_missing_in_market, prices_by_market{}, price_drop{was,show_until_ms}, is_reserved, is_for_sale, is_last_chance, is_circle_listing, sale_type, sales_channel, favourite_count, weight_kg, warehouse_code, first_offered_at, sale_started_at, created_at, updated_at, images[], style_tags[], brand_groups[], concepts[], keywords[], brand_profile{}, detail_params{}, headline, photos[]{url,type,photographed_at,defect_id}, photo_types[], metadata_language, metadata_by_language{}, item_status, processing_status, warehouse_shelf, production_site, photographed_at, listed_at, intake_at, processed_at, presale_actions_required[], presale_actions_done[], sellability_estimate{}, seller{}} + meta{market, currency, language, markets_priced, price_witness_agrees, sources[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"market":"EU","item_id":"GWXZAXqIpE"}},{"name":"similar","description":"Sellpy's own vector model, the one that powers 'you might also like' and its semantic search — reached directly. Give it item ids and it returns the nearest garments with their scores; give it free-text phrases and it finds items by MEANING, which is a different thing from the keyword search in `search` ('black leather biker jacket' works without those words appearing anywhere). The ids come back resolved into full rows, priced for your market. Two measured honesty notes: the service IGNORES its own region argument (`SE`, `EU` and a nonsense `XX` returned identical lists) so the engine applies the market gate itself and tells you how many neighbours survived it, and an unknown item id gets HTTP 200 with an empty list, which is answered here as NOT_FOUND.","required_params":["market"],"optional_params":["item_ids","item_id","text","count","language","exclude_reserved","include_all_market_prices"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Sellpy storefront to read. This is the one parameter you cannot get wrong: it picks BOTH the price list and the live assortment. Measured on brand Gucci, 2,712 indexed items were sellable as 2,139 in EU, 2,170 in SE, 2,155 in CZ and 2,005 in RO, and the engine always applies the storefront's own gate (`price_<market> > 0`) so a row is never returned with a missing price. The seven euro markets (EU, DE, AT, NL, BE, FI, FR) share ONE euro price — identical on 50/50 cross-checked items — while SEK, DKK, PLN, CZK and RON are separate rounded price lists, not conversions (SEK ran 10.00-12.50 per EUR across 50 items).","on_invalid":"reject","allowed_values":[{"value":"EU","label":"European Union (the international storefront) · EUR"},{"value":"SE","label":"Sweden · SEK"},{"value":"DE","label":"Germany · EUR"},{"value":"AT","label":"Austria · EUR"},{"value":"NL","label":"Netherlands · EUR"},{"value":"BE","label":"Belgium · EUR"},{"value":"FI","label":"Finland · EUR"},{"value":"FR","label":"France · EUR"},{"value":"DK","label":"Denmark · DKK"},{"value":"PL","label":"Poland · PLN"},{"value":"CZ","label":"Czechia · CZK"},{"value":"RO","label":"Romania · RON"}],"default":"EU","example":"SE","aliases":["region","country","site","locale"]},{"name":"item_ids","type":"array","required":false,"description":"Up to 10 item ids to find neighbours for, in one request. Use this OR `text`.","on_invalid":"reject","example":["GWXZAXqIpE"],"aliases":["ids","items"]},{"name":"item_id","type":"string","required":true,"description":"A Sellpy item id — the 10-character code in the item url (`sellpy.com/item/GWXZAXqIpE`). Every `search` row returns it as `item_id` and as a ready-made `detail_params`. An id that does not exist answers NOT_FOUND (the source's own Parse error 101), not an empty success.","on_invalid":"reject","example":"GWXZAXqIpE","value_pattern":"[A-Za-z0-9]{6,20}","aliases":["id","objectId","item"]},{"name":"text","type":"array","required":false,"description":"Up to 5 free-text phrases to find garments for by MEANING rather than by keyword — Sellpy's own vector service, the one its app uses. 'black leather jacket' returned ten scored neighbours in the measured run. Use this OR `item_ids`.","on_invalid":"reject","example":["black leather biker jacket"],"aliases":["texts","phrase","description"]},{"name":"count","type":"integer","required":false,"description":"Neighbours to ask the vector service for, per input. Some of them will not be on sale in your market (the service ignores its own `region` argument — `SE`, `EU` and the nonsense `XX` returned identical lists), so the engine re-checks each one against the market and reports `ids_returned` vs `rows_in_market`.","on_invalid":"reject","default":20,"example":10,"minimum":1,"maximum":50,"aliases":["n","n_items","limit"]},{"name":"language","type":"enum","required":false,"description":"The language the item words come back in (type, colour, condition, pattern, defect names, category path). Defaults to the market's own language, which is what sellpy.com shows there. Only a language whose index actually carries your market's price is accepted — `en` carries all twelve, `nl` carries NL and BE, `de` carries DE and AT, `fr` carries FR and BE, and the rest carry one each — so an impossible pair is rejected instead of being served another country's price. Pick `en` with `market: \"SE\"` to read Swedish stock in English with every market's price attached.","on_invalid":"reject","allowed_values":[{"value":"sv","label":"Swedish — the base language of the item record"},{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"nl","label":"Dutch"},{"value":"fr","label":"French"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"cs","label":"Czech"},{"value":"ro","label":"Romanian"}],"example":"en","aliases":["lang","metadata_language"]},{"name":"exclude_reserved","type":"boolean","required":false,"description":"Drop items already in somebody's cart. The source keeps them in the index (93 of 2,139 live Gucci items were reserved), and sellpy.com itself shows them, so the default matches the storefront. Every row carries `is_reserved` either way.","on_invalid":"reject","default":false,"example":true,"aliases":["hide_reserved","available_only"]},{"name":"include_all_market_prices","type":"boolean","required":false,"description":"Keep `prices_by_market` on every row. It is filled with whatever the chosen language index carries: all twelve markets on `en`, two on `nl`/`de`/`fr`, one on the rest. Set it false to drop the block from the payload.","on_invalid":"reject","default":true,"example":false,"aliases":["all_prices","all_market_prices"]},{"name":"include_pii","type":"boolean","required":false,"description":"Add the seller's opaque Sellpy id (`seller_ref`) and their intake-bag id to each row. Off by default: sellpy.com never shows who sent an item, Sellpy is the party selling it, and the id is the only thing on this source that links items to one private person. Sellpy employee ids attached to photos and warehouse steps are stripped in every case and this flag does not bring them back.","on_invalid":"reject","default":false}],"returns":"groups[]{input, input_kind, scores{item_id: score}, items[]{item_id, url, title, brand, model, type, category_path, category_levels[], segment, demography, condition, condition_rank, condition_label_en, size{raw,scope,scale,value,is_unsized}, sizes[], colors[], materials[], material_groups[], fabric, pattern, seasons[], details[], measurements_cm{}, defects[]{type,location,category,defect_id}, price{amount,amount_minor,currency,display}, price_market, price_missing_in_market, prices_by_market{}, price_drop{was,show_until_ms}, is_reserved, is_for_sale, is_last_chance, is_circle_listing, sale_type, sales_channel, favourite_count, weight_kg, warehouse_code, first_offered_at, sale_started_at, created_at, updated_at, images[], style_tags[], brand_groups[], concepts[], keywords[], brand_profile{}, detail_params{}}} + meta{market, ids_returned, rows_in_market, dropped_not_in_market, region_argument_is_ignored}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"market":"EU","text":["black leather biker jacket"],"count":12}},{"name":"categories","description":"Sellpy's whole category tree with a LIVE item count on every node, in the market's own language — four levels, measured at 5 / 25 / 178 / 325 nodes on the EU surface, in one request. The counts come from the same gated search the `search` action runs, so they describe what is actually buyable in that country today (and the top-level words change with the market: 'Women' on EU, 'Kvinna' on SE). Counts on the broad nodes are the source's own estimates and every node says so.","required_params":["market"],"optional_params":["parent","depth","language","query"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Sellpy storefront to read. This is the one parameter you cannot get wrong: it picks BOTH the price list and the live assortment. Measured on brand Gucci, 2,712 indexed items were sellable as 2,139 in EU, 2,170 in SE, 2,155 in CZ and 2,005 in RO, and the engine always applies the storefront's own gate (`price_<market> > 0`) so a row is never returned with a missing price. The seven euro markets (EU, DE, AT, NL, BE, FI, FR) share ONE euro price — identical on 50/50 cross-checked items — while SEK, DKK, PLN, CZK and RON are separate rounded price lists, not conversions (SEK ran 10.00-12.50 per EUR across 50 items).","on_invalid":"reject","allowed_values":[{"value":"EU","label":"European Union (the international storefront) · EUR"},{"value":"SE","label":"Sweden · SEK"},{"value":"DE","label":"Germany · EUR"},{"value":"AT","label":"Austria · EUR"},{"value":"NL","label":"Netherlands · EUR"},{"value":"BE","label":"Belgium · EUR"},{"value":"FI","label":"Finland · EUR"},{"value":"FR","label":"France · EUR"},{"value":"DK","label":"Denmark · DKK"},{"value":"PL","label":"Poland · PLN"},{"value":"CZ","label":"Czechia · CZK"},{"value":"RO","label":"Romania · RON"}],"default":"EU","example":"SE","aliases":["region","country","site","locale"]},{"name":"parent","type":"string","required":false,"description":"Return only the part of the tree under this node, written with ' > ' between levels. Empty returns the whole tree.","on_invalid":"reject","example":"Women","aliases":["under","category","path"]},{"name":"depth","type":"integer","required":false,"description":"How many levels deep to go. The full tree is 4 levels and measured 5 / 25 / 178 / 325 nodes on the EU surface.","on_invalid":"reject","default":4,"example":2,"minimum":1,"maximum":4,"aliases":["levels","max_depth"]},{"name":"language","type":"enum","required":false,"description":"The language the item words come back in (type, colour, condition, pattern, defect names, category path). Defaults to the market's own language, which is what sellpy.com shows there. Only a language whose index actually carries your market's price is accepted — `en` carries all twelve, `nl` carries NL and BE, `de` carries DE and AT, `fr` carries FR and BE, and the rest carry one each — so an impossible pair is rejected instead of being served another country's price. Pick `en` with `market: \"SE\"` to read Swedish stock in English with every market's price attached.","on_invalid":"reject","allowed_values":[{"value":"sv","label":"Swedish — the base language of the item record"},{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"nl","label":"Dutch"},{"value":"fr","label":"French"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"cs","label":"Czech"},{"value":"ro","label":"Romanian"}],"example":"en","aliases":["lang","metadata_language"]},{"name":"query","type":"string","required":false,"description":"Free-text search over Sellpy's own index: brand, type, model, colour, material and the AI keywords Sellpy writes for each garment. Leave it empty to browse the whole market with filters only — and note that an empty query is what makes `price_asc`/`price_desc` a STRICT order (with a text query the index ranks textual relevance first and only then price; `meta.sort_is_strict` tells you which you got).","on_invalid":"reject","example":"vintage levi's denim jacket","aliases":["q","keyword","keywords","text"]},{"name":"include_pii","type":"boolean","required":false,"description":"Add the seller's opaque Sellpy id (`seller_ref`) and their intake-bag id to each row. Off by default: sellpy.com never shows who sent an item, Sellpy is the party selling it, and the id is the only thing on this source that links items to one private person. Sellpy employee ids attached to photos and warehouse steps are stripped in every case and this flag does not bring them back.","on_invalid":"reject","default":false}],"returns":"tree[]{name, path, level, item_count, item_count_is_exact, children[]} + flat[]{path, level, item_count} + meta{market, language, levels, node_count, counts_are_estimates}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"EU","depth":2}},{"name":"facets","description":"The shape of any slice of the catalogue: pick the facets you want and get their values with counts, plus min/max/average for the numeric ones, for exactly the same search `search` would run. This is how you discover the source's own vocabulary before you filter on it — the brand tokens, the size tokens, the defect names, the style tags — and how you measure a market (one request returned the live price band EUR 2.99-11,906.00, mean 23.73, and waists 50-200 cm, mean 77.2). 34 facets are offered; `model` is deliberately absent because the source filters on it but never returns its values.","required_params":["market","facets"],"optional_params":["query","language","max_facet_values","category","min_price","max_price","exclude_reserved","circle_listings","last_chance_only","brand","type","model","color","material","material_group","fabric","pattern","condition","size","season","style","brand_group","demography","segment","item_language","neckline","sleeve_length","garment_length","pants_length","waist_rise","defect_type","warehouse","sale_type","waist_cm","inner_leg_cm","height_cm","width_cm","length_cm","heel_height_cm"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Sellpy storefront to read. This is the one parameter you cannot get wrong: it picks BOTH the price list and the live assortment. Measured on brand Gucci, 2,712 indexed items were sellable as 2,139 in EU, 2,170 in SE, 2,155 in CZ and 2,005 in RO, and the engine always applies the storefront's own gate (`price_<market> > 0`) so a row is never returned with a missing price. The seven euro markets (EU, DE, AT, NL, BE, FI, FR) share ONE euro price — identical on 50/50 cross-checked items — while SEK, DKK, PLN, CZK and RON are separate rounded price lists, not conversions (SEK ran 10.00-12.50 per EUR across 50 items).","on_invalid":"reject","allowed_values":[{"value":"EU","label":"European Union (the international storefront) · EUR"},{"value":"SE","label":"Sweden · SEK"},{"value":"DE","label":"Germany · EUR"},{"value":"AT","label":"Austria · EUR"},{"value":"NL","label":"Netherlands · EUR"},{"value":"BE","label":"Belgium · EUR"},{"value":"FI","label":"Finland · EUR"},{"value":"FR","label":"France · EUR"},{"value":"DK","label":"Denmark · DKK"},{"value":"PL","label":"Poland · PLN"},{"value":"CZ","label":"Czechia · CZK"},{"value":"RO","label":"Romania · RON"}],"default":"EU","example":"SE","aliases":["region","country","site","locale"]},{"name":"facets","type":"array","required":false,"description":"Also return the value counts of these facets for the SAME search, so one call gives you rows plus the shape of what matched. Numeric facets (`price`, `pants_length`, `waist_cm`, `inner_leg_cm`, `height_cm`, `width_cm`, `length_cm`, `heel_height_cm`) come back with min/max/avg/sum as well as value counts, and ONLY those eight do: the source hands out a stats block for any facet with numeric-looking values, which on `brand` produced min 0 / max 6397 on one market and min -417 on another, so it is dropped. `model` is not here on purpose: it FILTERS (model 501 -> 9,904 items) but the source never returns facet values for it.","on_invalid":"reject","allowed_values":[{"value":"brand","label":"brand"},{"value":"type","label":"type"},{"value":"color","label":"color"},{"value":"material","label":"material"},{"value":"material_group","label":"material_group"},{"value":"fabric","label":"fabric"},{"value":"pattern","label":"pattern"},{"value":"condition","label":"condition"},{"value":"size","label":"size"},{"value":"season","label":"season"},{"value":"style","label":"style"},{"value":"brand_group","label":"brand_group"},{"value":"demography","label":"demography"},{"value":"segment","label":"segment"},{"value":"item_language","label":"item_language"},{"value":"neckline","label":"neckline"},{"value":"sleeve_length","label":"sleeve_length"},{"value":"garment_length","label":"garment_length"},{"value":"pants_length","label":"pants_length"},{"value":"waist_rise","label":"waist_rise"},{"value":"defect_type","label":"defect_type"},{"value":"warehouse","label":"warehouse"},{"value":"sale_type","label":"sale_type"},{"value":"category_lvl0","label":"category_lvl0"},{"value":"category_lvl1","label":"category_lvl1"},{"value":"category_lvl2","label":"category_lvl2"},{"value":"category_lvl3","label":"category_lvl3"},{"value":"waist_cm","label":"waist_cm"},{"value":"inner_leg_cm","label":"inner_leg_cm"},{"value":"height_cm","label":"height_cm"},{"value":"width_cm","label":"width_cm"},{"value":"length_cm","label":"length_cm"},{"value":"heel_height_cm","label":"heel_height_cm"},{"value":"price","label":"price"}],"example":["brand","condition","size"],"aliases":["facet","facet_names"]},{"name":"query","type":"string","required":false,"description":"Free-text search over Sellpy's own index: brand, type, model, colour, material and the AI keywords Sellpy writes for each garment. Leave it empty to browse the whole market with filters only — and note that an empty query is what makes `price_asc`/`price_desc` a STRICT order (with a text query the index ranks textual relevance first and only then price; `meta.sort_is_strict` tells you which you got).","on_invalid":"reject","example":"vintage levi's denim jacket","aliases":["q","keyword","keywords","text"]},{"name":"language","type":"enum","required":false,"description":"The language the item words come back in (type, colour, condition, pattern, defect names, category path). Defaults to the market's own language, which is what sellpy.com shows there. Only a language whose index actually carries your market's price is accepted — `en` carries all twelve, `nl` carries NL and BE, `de` carries DE and AT, `fr` carries FR and BE, and the rest carry one each — so an impossible pair is rejected instead of being served another country's price. Pick `en` with `market: \"SE\"` to read Swedish stock in English with every market's price attached.","on_invalid":"reject","allowed_values":[{"value":"sv","label":"Swedish — the base language of the item record"},{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"nl","label":"Dutch"},{"value":"fr","label":"French"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"cs","label":"Czech"},{"value":"ro","label":"Romanian"}],"example":"en","aliases":["lang","metadata_language"]},{"name":"max_facet_values","type":"integer","required":false,"description":"How many values to return per facet, 1-1000. Raise it when you are walking the source's own vocabulary rather than drawing a sidebar: the live size facet alone holds over 200 distinct tokens and the brand facet thousands.","on_invalid":"reject","default":20,"example":100,"minimum":1,"maximum":1000,"aliases":["max_values_per_facet"]},{"name":"category","type":"string","required":false,"description":"Restrict to one node of Sellpy's own category tree, written exactly as the tree prints it with ' > ' between levels — `Women`, `Women > Clothing`, `Women > Clothing > Pants & Jeans`, `Women > Clothing > Pants & Jeans > Jeans`. The depth you pass picks the level it filters on. The words are in the market's language ('Kvinna' on `SE`), and the `categories` action returns the whole tree with live counts.","on_invalid":"reject","example":"Women > Clothing > Pants & Jeans","aliases":["category_path","cat","path"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in the MARKET'S OWN currency and MAJOR units (20 = EUR 20.00 on a euro market, 20 SEK on `SE`). Never minor units: the source stores 4850 for EUR 48.50 and the engine does the conversion for you. On the EU surface the index's own stats put the live price band at EUR 2.99 - 11,906.00, mean 23.73.","on_invalid":"reject","example":20,"minimum":0,"aliases":["price_min","priceMin"]},{"name":"max_price","type":"number","required":false,"description":"Highest price, same units as `min_price`.","on_invalid":"reject","example":60,"minimum":0,"aliases":["price_max","priceMax"]},{"name":"exclude_reserved","type":"boolean","required":false,"description":"Drop items already in somebody's cart. The source keeps them in the index (93 of 2,139 live Gucci items were reserved), and sellpy.com itself shows them, so the default matches the storefront. Every row carries `is_reserved` either way.","on_invalid":"reject","default":false,"example":true,"aliases":["hide_reserved","available_only"]},{"name":"circle_listings","type":"enum","required":false,"description":"Sellpy has two kinds of listing: the managed one (Sellpy does the photography, grading, pricing, storage and shipping) and 'Circle', where a private person ships directly. MEASURED, and the number is the point: 334,685 Circle items exist in the index, but `p2p:true` plus the EU gate matched ZERO (exact) while `p2p:true` plus the SE gate matched 29,051 (exact). Circle is a SWEDEN-ONLY surface today, so `only` returns nothing outside `market: \"SE\"` and this engine says so instead of letting it look broken. Every row carries `is_circle_listing`.","on_invalid":"reject","allowed_values":[{"value":"include","label":"both Sellpy-handled and Circle items (the storefront default)"},{"value":"exclude","label":"only items Sellpy itself photographed, graded and stores"},{"value":"only","label":"only Circle items, which a private person ships directly"}],"default":"include","example":"exclude","aliases":["p2p","circle"]},{"name":"last_chance_only","type":"boolean","required":false,"description":"Only items the storefront flags as about to leave the market.","on_invalid":"reject","default":false,"example":true,"aliases":["last_chance"]},{"name":"include_pii","type":"boolean","required":false,"description":"Add the seller's opaque Sellpy id (`seller_ref`) and their intake-bag id to each row. Off by default: sellpy.com never shows who sent an item, Sellpy is the party selling it, and the id is the only thing on this source that links items to one private person. Sellpy employee ids attached to photos and warehouse steps are stripped in every case and this flag does not bring them back.","on_invalid":"reject","default":false},{"name":"brand","type":"array","required":false,"description":"Keep only these brands, as the source spells them. Use the `brands` action for the exact string: `Levi's` matches 0 items. Several values are OR-ed. Measured: Gucci 2,139 of the EU surface.","on_invalid":"reject","example":["Levi Strauss & Co"],"aliases":["brands"]},{"name":"type","type":"array","required":false,"description":"Garment type in the market's language: Sneakers, Jeans, Dress, Belt, Sunglasses... Measured on a 2,139-row control: Sneakers 144.","on_invalid":"reject","example":["Sneakers"],"aliases":["types","garment_type"]},{"name":"model","type":"array","required":false,"description":"Model or line name. This one FILTERS but has no facet values at the source (`501` -> 9,904 items, `Gazelle` -> 1,241), so there is no value list to browse — pass a name you know.","on_invalid":"reject","example":["501"],"aliases":["models"]},{"name":"color","type":"array","required":false,"description":"Colour in the market's language. Measured: Black 828 of 2,139.","on_invalid":"reject","example":["Black"],"aliases":["colors","colour","colours"]},{"name":"material","type":"array","required":false,"description":"Declared material. Measured: Leather 431 of 2,139.","on_invalid":"reject","example":["Leather"],"aliases":["materials"]},{"name":"material_group","type":"array","required":false,"description":"Sellpy's own material grouping, which adds families and purity labels on top of the raw material ('Natural fibers', 'Synthetic Fibers', '100% Cotton'). Measured: 100% Cotton 150 of 2,139.","on_invalid":"reject","example":["100% Cotton"],"aliases":["material_groups","material_family"]},{"name":"fabric","type":"array","required":false,"description":"Fabric construction: Denim, Fine knit, Velvet, Corduroy, Tweed... Measured: Denim 46 of 2,139.","on_invalid":"reject","example":["Denim"],"aliases":["fabrics"]},{"name":"pattern","type":"array","required":false,"description":"Surface pattern in the market's language: Monochrome, Print, Striped, Floral, Checked, Pinstripe, Chevron. Measured on the control: Monochrome 349, Print 156, Striped 48, Floral 22 of 2,139.","on_invalid":"reject","example":["Striped"],"aliases":["patterns"]},{"name":"condition","type":"array","required":false,"description":"Sellpy's own grade, assigned by Sellpy, not by the seller. The live EU surface splits Very good 4.12M / Good 3.70M / Acceptable 1.20M / New 1.09M; 'Poor' exists in tiny numbers. The value is in the market's own language ('Bra' on SE, 'Sehr gut' on DE), which is why every row also carries `condition_rank` 1-5 and `condition_label_en` — the ladder was read off all ten language indexes, so neither is ever null just because you left English.","on_invalid":"reject","example":["New","Very good"],"aliases":["conditions","grade"]},{"name":"size","type":"array","required":false,"description":"Sellpy's size token, AUDIENCE-SCALE-VALUE: `WMN-INT-M`, `WMN-EU-38`, `MEN-INT-L`, `SHOES-EU-37.5`, `PANTS-INCH-27`, `CHILD-CM-98`, `BELTS-CM-85`, plus `NO SIZE` and `ONE SIZE`. Every row returns it split into audience / scale / value as well as raw. Measured: SHOES-EU-38 54 of 2,139.","on_invalid":"reject","example":["WMN-INT-M"],"aliases":["sizes"]},{"name":"season","type":"array","required":false,"description":"Measured on the control: Spring 931, Summer 899, Fall 385, Winter 231.","on_invalid":"reject","example":["Summer"],"aliases":["seasons"]},{"name":"style","type":"array","required":false,"description":"Sellpy's own style tag: chic, casual, vintage, urban, minimalist, glamour, athleisure... Measured: chic 1,045 of 2,139.","on_invalid":"reject","example":["chic"],"aliases":["styles","style_tag"]},{"name":"brand_group","type":"array","required":false,"description":"Sellpy's brand grouping — 'Luxury & High-End', 'Denim', 'American Fashion Heritage', 'Athletic & Sportswear'. Measured: Luxury & High-End 2,121 of the 2,139 Gucci rows.","on_invalid":"reject","example":["Luxury & High-End"],"aliases":["brand_groups"]},{"name":"demography","type":"array","required":false,"description":"The source's own audience label in the market's language: Women, Men, Girls, Boys, Unisex (Adults), Unisex (Kids). Measured: Men 307 of 2,139. `segment` is the coarser, language-free version.","on_invalid":"reject","example":["Men"],"aliases":["demographies","gender","audience"]},{"name":"segment","type":"array","required":false,"description":"The language-free audience bucket: women, men, children, unisex, things. Prefer this one when you query several markets.","on_invalid":"reject","example":["women"],"aliases":["segments"]},{"name":"item_language","type":"array","required":false,"description":"The language of a BOOK or other printed item, not the language the listing is written in (the top-level `language` does that, and the two were deliberately given different names so neither can silently swallow the other). Measured inside the 'Other items' tree: Swedish 32,610, German 23,930, English 10,343.","on_invalid":"reject","example":["Swedish"],"aliases":["book_language","printed_language"]},{"name":"neckline","type":"array","required":false,"description":"Measured: Round neck 117, V-neck 37 of the control.","on_invalid":"reject","example":["V-neck"],"aliases":["necklines"]},{"name":"sleeve_length","type":"array","required":false,"description":"Measured: Long sleeves 172, Short sleeves 89, Sleeveless 29, Three-quarter sleeve 8.","on_invalid":"reject","example":["Long sleeves"],"aliases":["sleeve"]},{"name":"garment_length","type":"array","required":false,"description":"Midi / Mini / Maxi. Measured: Midi 58 of the control.","on_invalid":"reject","example":["Midi"],"aliases":["length_class"]},{"name":"pants_length","type":"array","required":false,"description":"The trouser length label the source prints, as a STRING of inches: 32, 30, 34, 28... Measured on the Jeans tree: '32' 42,868.","on_invalid":"reject","example":["32"],"aliases":["inseam_label"]},{"name":"waist_rise","type":"array","required":false,"description":"High / Medium / Low. Measured on the Jeans tree: High 24,336, Medium 7,550, Low 5,338.","on_invalid":"reject","example":["High"],"aliases":["rise"]},{"name":"defect_type","type":"array","required":false,"description":"Sellpy inspects every garment and WRITES DOWN what is wrong with it, so you can filter on the flaw: Light dirt, Scratched, Dirty, Worn, Lightly scratched, Discoloration, Stain, Lightly worn. Measured: Stain 107 of 2,139. Each row returns the full defect list with the spot on the garment.","on_invalid":"reject","example":["Stain"],"aliases":["defect","defects"]},{"name":"warehouse","type":"array","required":false,"description":"Which Sellpy warehouse holds the item — the live EU surface splits K / M / J. It is the source's own single-letter code and it moves delivery time, nothing else.","on_invalid":"reject","example":["K"],"aliases":["warehouses","storage_site"]},{"name":"sale_type","type":"array","required":false,"description":"How the item is being sold: `regular`, `influencer` (a curated celebrity/creator wardrobe), `business` or `upcycle`. Measured on the live EU surface: regular 11,310,613, influencer 118,245, business 65,280, upcycle 70 — so `influencer` is the one worth asking for and it really is a separate sub-catalogue.","on_invalid":"reject","example":["influencer"],"aliases":["sale_types"]},{"name":"waist_cm","type":"string","required":false,"description":"Waist in centimetres, as Sellpy MEASURED the actual garment (not a size label). Grammar: `76` exact, `70-80` band, `>=80`, `<=70`. Measured: 70-80 -> 84 of the 2,139-row control; the index's own stats put live waists at 50-200 cm, mean 77.2.","on_invalid":"reject","example":"70-80","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["waist"]},{"name":"inner_leg_cm","type":"string","required":false,"description":"Measured inner leg length in cm, same grammar as `waist_cm`. Measured: 70-90 -> 57 of the control.","on_invalid":"reject","example":"70-90","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["inner_leg","inseam_cm"]},{"name":"height_cm","type":"string","required":false,"description":"Measured height of the item in cm (bags, shoes, objects). Measured: 20-40 -> 80 of the control.","on_invalid":"reject","example":"20-40","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["height"]},{"name":"width_cm","type":"string","required":false,"description":"Measured width in cm. Measured: 20-40 -> 110 of the control.","on_invalid":"reject","example":"20-40","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["width"]},{"name":"length_cm","type":"string","required":false,"description":"Measured length in cm. Measured: 20-40 -> 6 of the control.","on_invalid":"reject","example":"20-40","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["length"]},{"name":"heel_height_cm","type":"string","required":false,"description":"Measured heel height in cm — the filter nobody else has. Measured: >=8 -> 117 of the control.","on_invalid":"reject","example":">=8","value_pattern":"(>=|<=)?\\d{1,3}(\\.\\d+)?(-\\d{1,3}(\\.\\d+)?)?","aliases":["heel","heel_height"]}],"returns":"facets{name: {value: count}} + facet_stats{name: {min,max,avg,sum}} + meta{market, language, matched{value,is_exact}, facets_requested[], facets_empty[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"DE","language":"en","category":"Women > Clothing","facets":["brand","condition","price"]}},{"name":"brands","description":"Resolve brand names the way the source spells them, with both counts that matter. This action is not a convenience, it is a correctness tool: filtering on `Levi's` returns zero items because the real tokens are `Levi Strauss & Co` and `Levi's Premium`. Each row gives the exact string, whether it is a sub-brand, Sellpy's LIFETIME item counter and — in one extra request for the whole page — how many are actually on sale in your market now. Those two numbers are not interchangeable: Gucci reads 43,466 lifetime and 2,139 live. `similar_to` additionally asks Sellpy's brand-similarity model for neighbours of a brand.","required_params":["market"],"optional_params":["query","similar_to","with_live_counts","limit","language"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Sellpy storefront to read. This is the one parameter you cannot get wrong: it picks BOTH the price list and the live assortment. Measured on brand Gucci, 2,712 indexed items were sellable as 2,139 in EU, 2,170 in SE, 2,155 in CZ and 2,005 in RO, and the engine always applies the storefront's own gate (`price_<market> > 0`) so a row is never returned with a missing price. The seven euro markets (EU, DE, AT, NL, BE, FI, FR) share ONE euro price — identical on 50/50 cross-checked items — while SEK, DKK, PLN, CZK and RON are separate rounded price lists, not conversions (SEK ran 10.00-12.50 per EUR across 50 items).","on_invalid":"reject","allowed_values":[{"value":"EU","label":"European Union (the international storefront) · EUR"},{"value":"SE","label":"Sweden · SEK"},{"value":"DE","label":"Germany · EUR"},{"value":"AT","label":"Austria · EUR"},{"value":"NL","label":"Netherlands · EUR"},{"value":"BE","label":"Belgium · EUR"},{"value":"FI","label":"Finland · EUR"},{"value":"FR","label":"France · EUR"},{"value":"DK","label":"Denmark · DKK"},{"value":"PL","label":"Poland · PLN"},{"value":"CZ","label":"Czechia · CZK"},{"value":"RO","label":"Romania · RON"}],"default":"EU","example":"SE","aliases":["region","country","site","locale"]},{"name":"query","type":"string","required":false,"description":"Prefix or fragment of a brand name. Leave it empty to walk the whole brand list (the source pages that index to 1,000 rows). This action exists because guessing the token fails: `Levi's` matches 0 items, `Levi Strauss & Co` matches 814,658 lifetime and `Levi's Premium` 64,208.","on_invalid":"reject","example":"levi","aliases":["q","prefix","brand"]},{"name":"similar_to","type":"string","required":false,"description":"Ask Sellpy's own brand-similarity model which brands sit next to this one. 'Nike' returned Nike Air Max, Nike Training, Nike Sportswear, Nike Running, NIKE DRI-FIT, Nike Air Jordan, Nike Pro, The Nike Tee and Adidas, in `similar_brands`. On its own it also seeds the brand lookup, so you get this brand and its sub-brands in `brands` at the same time; pass `query` to look somewhere else instead.","on_invalid":"reject","example":"Nike","aliases":["like","similar_brand"]},{"name":"with_live_counts","type":"boolean","required":false,"description":"Also return how many items of each returned brand are ON SALE in your market right now, in one extra request for the whole page. Worth leaving on: the index's own `freq` is a LIFETIME counter and overstates availability by about 20x (Gucci: lifetime 43,466 vs 2,139 live in EU). `live_count_is_exact` says whether the source answered exactly or estimated.","on_invalid":"reject","default":true,"example":false,"aliases":["live_counts"]},{"name":"limit","type":"integer","required":false,"description":"Rows per requested surface, 1-50. On `suggest` the limit applies to each requested kind separately, and on `brands` it is also the number of brands the live-count sub-queries cover, so keep it modest when `with_live_counts` is on.","on_invalid":"reject","default":10,"example":20,"minimum":1,"maximum":50,"aliases":["per_kind","n"]},{"name":"language","type":"enum","required":false,"description":"The language the item words come back in (type, colour, condition, pattern, defect names, category path). Defaults to the market's own language, which is what sellpy.com shows there. Only a language whose index actually carries your market's price is accepted — `en` carries all twelve, `nl` carries NL and BE, `de` carries DE and AT, `fr` carries FR and BE, and the rest carry one each — so an impossible pair is rejected instead of being served another country's price. Pick `en` with `market: \"SE\"` to read Swedish stock in English with every market's price attached.","on_invalid":"reject","allowed_values":[{"value":"sv","label":"Swedish — the base language of the item record"},{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"nl","label":"Dutch"},{"value":"fr","label":"French"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"cs","label":"Czech"},{"value":"ro","label":"Romanian"}],"example":"en","aliases":["lang","metadata_language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Add the seller's opaque Sellpy id (`seller_ref`) and their intake-bag id to each row. Off by default: sellpy.com never shows who sent an item, Sellpy is the party selling it, and the id is the only thing on this source that links items to one private person. Sellpy employee ids attached to photos and warehouse steps are stripped in every case and this flag does not bring them back.","on_invalid":"reject","default":false}],"returns":"brands[]{brand, brand_id, is_sub_brand, lifetime_item_count, live_item_count, live_count_is_exact} + similar_brands[] + meta{market, query, total_matching_brands, brand_index_page_cap}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"EU","query":"levi","limit":10}},{"name":"suggest","description":"Autocomplete straight out of the storefront's own suggestion indexes, including the one that is really a SEARCH LOG: `queries` returns the phrases Sellpy's shoppers actually typed, each with its popularity and an item-count estimate, per language ('jeans' scored 1,023 on the English surface and 27,187 on the Swedish one, where 'jeansjacka' and 'jeansskjorta' also surface). `entities` returns brand and category entities with the storefront url that opens them, `brands` the brand names with lifetime counts, and `types` the garment-type autocomplete — which is SWEDISH ONLY whatever market you ask for, because the source keeps it on a shared language-less application, and this engine says so rather than pretending it localises.","required_params":["market","query"],"optional_params":["kinds","limit","language"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Sellpy storefront to read. This is the one parameter you cannot get wrong: it picks BOTH the price list and the live assortment. Measured on brand Gucci, 2,712 indexed items were sellable as 2,139 in EU, 2,170 in SE, 2,155 in CZ and 2,005 in RO, and the engine always applies the storefront's own gate (`price_<market> > 0`) so a row is never returned with a missing price. The seven euro markets (EU, DE, AT, NL, BE, FI, FR) share ONE euro price — identical on 50/50 cross-checked items — while SEK, DKK, PLN, CZK and RON are separate rounded price lists, not conversions (SEK ran 10.00-12.50 per EUR across 50 items).","on_invalid":"reject","allowed_values":[{"value":"EU","label":"European Union (the international storefront) · EUR"},{"value":"SE","label":"Sweden · SEK"},{"value":"DE","label":"Germany · EUR"},{"value":"AT","label":"Austria · EUR"},{"value":"NL","label":"Netherlands · EUR"},{"value":"BE","label":"Belgium · EUR"},{"value":"FI","label":"Finland · EUR"},{"value":"FR","label":"France · EUR"},{"value":"DK","label":"Denmark · DKK"},{"value":"PL","label":"Poland · PLN"},{"value":"CZ","label":"Czechia · CZK"},{"value":"RO","label":"Romania · RON"}],"default":"EU","example":"SE","aliases":["region","country","site","locale"]},{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far — a prefix is enough. It is matched against the real search log, so 'jean' already reaches 'jeansjacka' and 'jeanskjol' on the Swedish surface.","on_invalid":"reject","example":"jeans","aliases":["q","prefix","term"]},{"name":"kinds","type":"array","required":false,"description":"Which suggestion surfaces to return. `queries` is the interesting one: it is the real search log, so `jeans` came back with popularity 1,023 on the English surface and 27,187 on the Swedish one.","on_invalid":"reject","allowed_values":[{"value":"queries","label":"real searches Sellpy's shoppers ran, with popularity and an item-count estimate per query"},{"value":"entities","label":"brand and category entities with the storefront url that opens them"},{"value":"brands","label":"brand names with their lifetime item counts"},{"value":"types","label":"garment-type autocomplete — SWEDISH ONLY whatever market you ask for, because it lives on the shared language-less application"}],"default":["queries","entities","brands"],"example":["queries"],"aliases":["kind","sources"]},{"name":"limit","type":"integer","required":false,"description":"Rows per requested surface, 1-50. On `suggest` the limit applies to each requested kind separately, and on `brands` it is also the number of brands the live-count sub-queries cover, so keep it modest when `with_live_counts` is on.","on_invalid":"reject","default":10,"example":20,"minimum":1,"maximum":50,"aliases":["per_kind","n"]},{"name":"language","type":"enum","required":false,"description":"The language the item words come back in (type, colour, condition, pattern, defect names, category path). Defaults to the market's own language, which is what sellpy.com shows there. Only a language whose index actually carries your market's price is accepted — `en` carries all twelve, `nl` carries NL and BE, `de` carries DE and AT, `fr` carries FR and BE, and the rest carry one each — so an impossible pair is rejected instead of being served another country's price. Pick `en` with `market: \"SE\"` to read Swedish stock in English with every market's price attached.","on_invalid":"reject","allowed_values":[{"value":"sv","label":"Swedish — the base language of the item record"},{"value":"en","label":"English"},{"value":"de","label":"German"},{"value":"nl","label":"Dutch"},{"value":"fr","label":"French"},{"value":"da","label":"Danish"},{"value":"fi","label":"Finnish"},{"value":"pl","label":"Polish"},{"value":"cs","label":"Czech"},{"value":"ro","label":"Romanian"}],"example":"en","aliases":["lang","metadata_language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Add the seller's opaque Sellpy id (`seller_ref`) and their intake-bag id to each row. Off by default: sellpy.com never shows who sent an item, Sellpy is the party selling it, and the id is the only thing on this source that links items to one private person. Sellpy employee ids attached to photos and warehouse steps are stripped in every case and this flag does not bring them back.","on_invalid":"reject","default":false}],"returns":"queries[]{query, popularity, word_count, matching_items_estimate} + entities[]{title, kind, query_terms[], url} + brands[]{brand, lifetime_item_count, is_sub_brand} + types[]{value, type, brand, lifetime_item_count} + meta{market, language, kinds[], types_language}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"SE","query":"jeans","limit":8}}]},{"name":"seloger","category":{"id":"real-estate","title":"Real Estate"},"title":"SeLoger API scraper — France's largest real-estate portal: property search by town or postcode, keywords, price, surface, rooms, transaction and property type, and the full listing (price, price per m², surface, rooms, energy and GHG class, heating, charges, fees, photos, agency). No account, no browser.","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/seloger/v1","spec_available":true,"actions":[{"name":"search","description":"Search SeLoger (seloger.com) property listings for sale or rent in France: price, price per m², surface, land, rooms, bedrooms, floor, energy class, building year, condition, town, postcode, district, department and region, agency (name, SIREN), photos and a description excerpt. Filter by transaction, property type, town or postcode, keywords in the description, price, surface, rooms, bedrooms and new build; sort by relevance, newest, price, price per m² or surface; paginated.","required_params":["transaction"],"optional_params":["query","property_type","city","zipcode","price_min","price_max","surface_min","surface_max","rooms_min","rooms_max","bedrooms_min","new_build","sort","page","limit","include_pii","max_rotations"],"params":[{"name":"transaction","type":"enum","required":true,"description":"sale or rent.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"For rent"}],"example":"sale"},{"name":"query","type":"string","required":false,"description":"Keywords searched in the listing description by SeLoger itself (comma-separate several; all must match).","on_invalid":"reject","example":"piscine"},{"name":"property_type","type":"array","required":false,"description":"One or more of apartment, house, land, parking, building, office. Default: all of them.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"apartment"},{"value":"house","label":"house"},{"value":"land","label":"land"},{"value":"parking","label":"parking"},{"value":"building","label":"building"},{"value":"office","label":"office"}]},{"name":"city","type":"string","required":false,"description":"Town name, e.g. Bordeaux, Lyon, Paris.","on_invalid":"reject","example":"Bordeaux"},{"name":"zipcode","type":"string","required":false,"description":"5-digit French postcode (takes precedence over city). Without city or zipcode the search covers all of France.","on_invalid":"reject","example":"33000"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent for rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent for rentals).","on_invalid":"reject","minimum":0},{"name":"surface_min","type":"number","required":false,"description":"Smallest surface, m².","on_invalid":"reject","minimum":0},{"name":"surface_max","type":"number","required":false,"description":"Largest surface, m².","on_invalid":"reject","minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Fewest rooms (pièces).","on_invalid":"reject","minimum":1,"maximum":20},{"name":"rooms_max","type":"integer","required":false,"description":"Most rooms (pièces).","on_invalid":"reject","minimum":1,"maximum":20},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms.","on_invalid":"reject","minimum":1,"maximum":20},{"name":"new_build","type":"boolean","required":false,"description":"Sales only. true: new-build only; false: resale and life-annuity only.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"relevance, newest, price_asc, price_desc, price_per_m2_asc, price_per_m2_desc, surface_asc or surface_desc.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"newest","label":"newest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"price_per_m2_asc","label":"price_per_m2_asc"},{"value":"price_per_m2_desc","label":"price_per_m2_desc"},{"value":"surface_asc","label":"surface_asc"},{"value":"surface_desc","label":"surface_desc"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (SeLoger serves the first 10,000 results of a search).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 50.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":50},{"name":"include_pii","type":"boolean","required":false,"description":"Also return the advertiser's phone number and a private owner's name.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":6}],"returns":"listings[]{ad_id, legacy_id, title, url, status, price, currency, price_not_published, published_at, updated_at, location{city, zipcode, district, department, region, country, latitude, longitude, address_published}, seller{type, account_type, name, siren, address, website, profile_url, has_phone}, thumbnail, image_count, images[], description, description_is_excerpt, property{property_type, property_subtype, transaction, is_new_build, surface_m2, land_surface_m2, rooms, bedrooms, bathrooms, shower_rooms, toilets, floor, floors_in_building, elevator, balcony, terrace, garden, pool, cellar, parking, features[], energy_class, energy_class_status, ghg_class, energy_consumption_kwh_m2, ghg_emissions_kg_m2, annual_energy_cost_min, annual_energy_cost_max, heating_type, heating_energy, building_year, condition, orientation, furnished, available_from, price_per_m2, rent_excluding_charges, monthly_charges, charges_included, security_deposit, rental_fees, agency_fees_paid_by, agency_fees, agency_fees_pct, price_excluding_fees, estimated_notary_fees, annual_condo_charges, condo_lots, virtual_tour_url, …}}, count, total, page, limit, has_more, sort_applied, location_applied{place_id, name, type}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"transaction":"sale","city":"Bordeaux"}},{"name":"listing","description":"One SeLoger listing by id or URL: price, price per m², surface, land, rooms, bedrooms, bathrooms, shower rooms, toilets, floor, elevator, balcony, terrace, cellar, parking, energy (DPE) and GHG class with kWh and CO2 figures and the annual energy bill range, heating, building year, condition, furnished, charges, deposit, agency and notary fees, co-ownership charges and lots, transaction and property type, town, postcode, district, photos, virtual tour, full description, publication date and the agency (name, SIREN, address, website).","required_params":["ad_id"],"optional_params":["include_pii","max_rotations"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The SeLoger listing id (e.g. 263ZS4QSLYGF), the numeric legacy id (e.g. 283831497) or the full listing URL.","on_invalid":"reject","example":"263ZS4QSLYGF","aliases":["url","id"]},{"name":"include_pii","type":"boolean","required":false,"description":"Also return the advertiser's phone number and a private owner's name.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":4,"minimum":1,"maximum":6}],"returns":"listing{ad_id, legacy_id, title, url, status, price, currency, price_not_published, published_at, updated_at, location{city, zipcode, district, department, region, country, latitude, longitude, address_published}, seller{type, account_type, name, siren, address, website, profile_url, has_phone}, thumbnail, image_count, images[], description, description_is_excerpt, property{property_type, property_subtype, transaction, is_new_build, surface_m2, land_surface_m2, rooms, bedrooms, bathrooms, shower_rooms, toilets, floor, floors_in_building, elevator, balcony, terrace, garden, pool, cellar, parking, features[], energy_class, energy_class_status, ghg_class, energy_consumption_kwh_m2, ghg_emissions_kg_m2, annual_energy_cost_min, annual_energy_cost_max, heating_type, heating_energy, building_year, condition, orientation, furnished, available_from, price_per_m2, rent_excluding_charges, monthly_charges, charges_included, security_deposit, rental_fees, agency_fees_paid_by, agency_fees, agency_fees_pct, price_excluding_fees, estimated_notary_fees, annual_condo_charges, condo_lots, virtual_tour_url, …}, reference}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"ad_id":"263ZS4QSLYGF"}}]},{"name":"sephora","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Sephora API — search sephora.com for makeup, skincare, haircare, fragrance and beauty tools, and pull one product in full: the whole image gallery, every shade/size variant with its own Sephora SKU id, price and stock, the specification attributes, ingredients, brand, availability, star rating and the top customer reviews with their text inline — no API key or account required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/sephora/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Sephora catalog. Give a `query` ('mascara', 'vitamin c serum', 'dior lipstick', 'rare beauty blush') and get back 60 products per page, each with Sephora's own product id and default SKU id, brand, price (both ends when Sephora quotes a range), sale flag, star rating, review count, how many shades the product has, the image set, and Sephora's own merchandising flags (bestseller, new, limited edition, Sephora exclusive, same-day/pickup eligibility). Narrow by price band, sort by rating, price or newest. The live facet vocabulary Sephora publishes for your query comes back in `facets`, and the category counts and its own related searches come with it.","required_params":["query"],"optional_params":["max_results","page","sort","price_min","price_max","brand"],"params":[{"name":"query","type":"string","required":true,"description":"What to search sephora.com for — a category ('mascara', 'vitamin c serum', 'perfume'), a brand ('rare beauty'), a brand + category ('dior lipstick') or a product name. Sephora runs this through its own NLP search, so it is forgiving of phrasing. ⚠ It is forgiving to a fault: Sephora's search NEVER returns zero — a nonsense query still comes back with ~56 loosely-matched products (measured). Read `search.keyword` and judge the rows; do not treat a non-empty response as proof the term matched.","on_invalid":"reject","example":"vitamin c serum","aliases":["q","keyword","term","text","search"]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-300). Sephora paginates 60 per page; asking for more fetches the following pages automatically, up to five.","on_invalid":"ignore","default":60,"example":60,"minimum":1,"maximum":300,"aliases":["limit","max","count"]},{"name":"page","type":"integer","required":false,"description":"Which result page to start from (1-based, 60 products per page). Page until `meta.pagination.has_more` is false. Sephora repeats a small number of sponsored rows across pages; those are de-duplicated by `product_id` before you see them.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Result ordering, using Sephora's own sort tokens. Only the five listed here were MEASURED to change the ordering — Sephora's code also defines BEST_SELLING, EXCLUSIVE and BRAND_NAME, and all three return the identical default order on this endpoint, so they are deliberately not offered rather than accepted and ignored. An unknown value is rejected, not silently dropped (Sephora itself silently ignores it).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Sephora's own relevance ranking (default)"},{"value":"top_rated","label":"Highest customer rating first"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"newest","label":"Newest first"}],"example":"price_low","aliases":["order","sort_by"]},{"name":"price_min","type":"number","required":false,"description":"Only products priced at or above this, in US dollars. This is Sephora's own `pl`/`ph` filter and it is the ONE filter this endpoint applies at all. ⚠ It NARROWS hard but it is not a strict predicate: 'foundation' goes 191 → 39 with price_max=25, and 8 of those 39 are priced entirely above $25 (verified variant-by-variant — they do not have a cheaper size). Those rows are passed through rather than dropped, and `meta.filters.applied[].rows_outside_band` counts them for the call you actually made.","on_invalid":"reject","example":25,"minimum":0,"maximum":100000,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Only products priced at or below this, in US dollars. Sephora prices a multi-shade product as a RANGE ('$16.00 - $25.00'); the filter is Sephora's own and it decides how a range is matched, not us. Same caveat as `price_min`: it narrows hard but lets some out-of-band rows through, and `meta.filters` counts them.","on_invalid":"reject","example":50,"minimum":0,"maximum":100000,"aliases":["max_price"]},{"name":"brand","type":"string","required":false,"description":"Keep only products from this brand, matched against the `brand` on each row (case-insensitive, exact then 'contains'). ⚠ HONEST NOTE: this is applied BY THIS ENGINE to the pages it fetched, not by Sephora. Sephora publishes a Brand facet on this endpoint and then ignores it — every brand value returns the identical unfiltered 191 results (measured, both bracket spellings, with and without its NLP engine). So `meta.pagination.total_results` stays Sephora's unfiltered number and `meta.filters` reports exactly what was dropped and by whom. The live brand vocabulary for your query is in `facets`.","on_invalid":"ignore","example":"Rare Beauty","aliases":["brand_name"]}],"returns":"products[]{product_id, sku_id, name, brand, url, price, price_max, price_display, sale_price, currency, in_stock (always null: Sephora search publishes no stock; use `price`), on_sale, on_sale_label, rating, review_count, variant_count, image, images[]{url, url_250, alt}, is_sponsored, is_new, is_bestseller, is_limited_edition, is_limited_time_offer, is_online_only, is_sephora_exclusive, is_app_exclusive, ships_to_home, same_day_eligible, next_day_eligible, store_pickup_eligible} + search{keyword, total_results, engine, categories[]{name, category_id, level, product_count}, related_searches[]} + facets[]{name, type, values[]{label, query_fragment, status}}. meta.pagination{page, per_page, total_results, returned, has_more, next_page}; meta.filters{applied, note}. Honest caveats, all measured: Sephora's NLP search NEVER returns zero — a nonsense query still yields ~56 loosely-related products, so judge the rows rather than the count; `price` is the LOW end when Sephora quotes a range and `price_display` is its own string verbatim; `rating`/`review_count` arrive from Sephora as strings here and as numbers on the product page and are pinned to float/int in both; `variant_count` is Sephora's `moreColors` and counts shades, which for a single-shade product is 1; search rows carry NO per-shade price, stock, ingredients or reviews — that is what `product_detail` is for; and `facets` is returned because it is real published data about your query, NOT because it filters — this endpoint ignores every facet value except the price band (proven in the BUILD-LOG), which is why `price_min`/`price_max` are the only upstream filters offered and `brand` says plainly that it is applied here rather than by Sephora. Even the price band is a narrowing filter rather than a strict predicate, so `meta.filters.applied[].rows_outside_band` reports how many rows of YOUR result set fall outside the band you asked for.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"mascara","max_results":30}},{"name":"price","description":"Re-check ONE shade's price and stock, cheaply. Give it the Sephora SKU id you already hold and it returns the current price, the regular price, whether that shade is in stock and whether Sephora is flagging it as nearly gone — and nothing else: no description, images, ingredients, shade matrix or reviews. Built for refreshing a catalogue you already have rather than discovering products. It reads Sephora's own SKU-scoped route instead of the whole product document, so it costs a fraction of `product_detail` — measured live on ten products in ten categories: 7.9-14.3 KB against 59.9-421.5 KB for a full `product_detail` (5.2x-45.9x), or 32.5-350.5 KB with its reviews switched off (2.9x-38.1x). The saving grows with the shade count, because the product document carries every sibling shade and this one carries yours. Pass a `sku_id` for that cheap route. If you hold only a `product_id` (or a product URL with no `?skuId=`), pass that instead: Sephora's primary/default shade is priced by reading the product document — honest note, that costs like `product_detail` (the whole document is read), NOT like the cheap SKU route, because Sephora prices and stocks each shade and size separately (a 49-shade foundation had 9 shades sold out while the product was on sale), so the SKU route stays the right tool whenever you can name the shade.","required_params":[],"optional_params":["sku_id","product_id","url"],"params":[{"name":"sku_id","type":"string","required":false,"description":"Sephora's own SKU id for the ONE shade or size you want re-priced — digits only, exactly as `search` and `product_detail` publish it (`2837375`). This is the CHEAPEST route: it reads Sephora's SKU-scoped document (~8-14 KB) rather than the whole product. Give it whenever you have it, because Sephora prices and stocks every shade and size separately — the same lipstick can be on sale in one shade and sold out in the next. A SKU Sephora does not have returns NOT_FOUND. Not strictly required: if you have only a `product_id` (or a product URL with no `?skuId=`), pass that instead and Sephora's primary/default shade is priced from the product document. You may also pass a sephora.com URL carrying `?skuId=…` here or in `url`.","on_invalid":"ignore","example":"2837375","aliases":["skuId","sku","variant_id"]},{"name":"product_id","type":"string","required":false,"description":"Sephora's own product id (`P477838`). It plays TWO roles. (1) On its own, with no `sku_id`, it is a LOOKUP KEY: the product's primary/default shade is priced by reading the product document — use this when you hold a product id but no sku. This costs like `product_detail` (the product document is read), not like the cheap SKU route. (2) Alongside a `sku_id` it is a SAFETY CHECK: the call fails with NOT_FOUND if Sephora files that SKU under a different product, so a drifted catalogue is caught instead of quietly writing another product's price into it.","on_invalid":"ignore","example":"P477838","aliases":["id","productId","product","pid"]},{"name":"url","type":"string","required":false,"description":"A sephora.com product URL carrying `?skuId=…` — an alternative to `sku_id`. A URL without a `skuId` cannot be priced, because it names a product rather than a purchasable shade.","on_invalid":"ignore","example":"https://www.sephora.com/product/mac-cosmetics-macximal-sleek-satin-lipstick-P513655?skuId=2837375","aliases":["product_url","link"]}],"returns":"product_id, sku_id, variant_label, variant_type, current_price, regular_price, currency, on_sale, in_stock, is_low_stock. `current_price` is what a shopper pays now and `regular_price` is the struck-through one; when Sephora prints a single price the two are equal. `in_stock` is null — NEVER false — when Sephora states nothing, because silence is not an out-of-stock claim; the same rule applies to `on_sale` and `is_low_stock`. `variant_label` is Sephora's own name for the shade or size ('Stone', '1.7oz/50ml') so you can see the answer is about the variant you meant. `regular_price_max`/`current_price_max` appear only when Sephora prints a range for that SKU. Honest caveats: (1) an unknown SKU returns NOT_FOUND — measured, Sephora's SKU route rejects a SKU it does not have rather than substituting a default shade, and the response is additionally checked against the SKU that was asked for; (2) pass `product_id` too and a SKU that has moved to a different product fails with NOT_FOUND instead of silently repricing the wrong item; (3) stock is a BOOLEAN, because Sephora publishes no unit count anywhere; (4) there is no `condition` field — Sephora is a first-party retailer of new goods with no marketplace and no used stock; (5) every value is read from the same Sephora keys `product_detail` reads for the same SKU, so the two actions agree by construction — verified live on 13 SKUs including on-sale and out-of-stock ones.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"sku_id":"2837375"}},{"name":"product_detail","description":"Get one Sephora product in full, by its product id (or its sephora.com URL). One call returns: the complete image gallery; the complete variant matrix — one row per shade/size with Sephora's own SKU id, that variant's price, sale price, in-stock flag, low-stock flag, swatch, image and URL; the specification set Sephora publishes (size, the structured attribute map — coverage, finish, formulation, skin type, skin concerns, ingredient preferences —, the highlight badges with their explanations, the full ingredient list and the how-to-use copy); the brand with its id and page; availability and price range; the star rating with its distribution; and the top customer reviews with their full text, titles, dates, helpfulness votes, reviewer skin-tone/skin-type/eye/age context and photos. It also returns the product's UPC/EAN barcodes, which Sephora's own product API does not publish anywhere.","required_params":["product_id"],"optional_params":["url","sku_id","include_reviews","reviews_limit","reviews_sort","reviews_offset","include_variant_images"],"params":[{"name":"product_id","type":"string","required":true,"description":"Sephora's own product id — the `P…` code at the end of every sephora.com/product/… URL and the `product_id` on every `search` row. A 'P' followed by 5-9 digits (`P427418`, and 8-digit ones like `P87985432` are real). Always a string, taken verbatim; never hashed, composed or re-derived. You may pass the full product URL in `url` instead of this.","on_invalid":"reject","example":"P427418","aliases":["id","productId","product","pid"]},{"name":"url","type":"string","required":false,"description":"A full sephora.com product URL — an alternative to `product_id`. A `?skuId=` on the URL is honoured and selects that shade as `selected_variant`.","on_invalid":"ignore","example":"https://www.sephora.com/product/the-ordinary-deciem-granactive-retinoid-2-emulsion-P427418","aliases":["product_url","link"]},{"name":"sku_id","type":"string","required":false,"description":"Which shade/size to return as `selected_variant`. Sephora's own SKU id, exactly as `search` and the variant rows publish it (digits only). Omit to get the SKU Sephora shows by default. Every variant comes back either way — this only moves the `is_selected` flag. An id that does not belong to the product fails with NOT_FOUND and lists the ones that do; it never quietly returns a different shade.","on_invalid":"ignore","example":"2837375","aliases":["skuId","sku","variant_id"]},{"name":"include_reviews","type":"boolean","required":false,"description":"Return the product's top customer reviews inline, with full text, title, star rating, date, helpfulness votes, reviewer skin-tone/skin-type/eye/age context and photo URLs — plus the rating distribution and the product's UPC/EAN codes. Costs one extra upstream call (~27 KB at the default limit). Set false to skip it.","on_invalid":"ignore","default":true,"aliases":["with_reviews","reviews"]},{"name":"reviews_limit","type":"integer","required":false,"description":"How many reviews to embed (0-100). 100 is the upstream ceiling — bisected, 101 is refused. 0 keeps the summary (total, average, rating distribution, UPC/EAN) and returns no review bodies. Reviews are ~2.5 KB each, so this is the main lever on response size.","on_invalid":"ignore","default":8,"example":8,"minimum":0,"maximum":100,"aliases":["review_limit","top_reviews"]},{"name":"reviews_sort","type":"enum","required":false,"description":"Which reviews count as 'top'. These are exactly the five options Sephora's own review widget offers, with the same underlying sort keys — read out of the product payload's own `reviewFilters`, not invented.","on_invalid":"reject","allowed_values":[{"value":"most_helpful","label":"Most Helpful (Sephora's default)"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"highest_rating","label":"Highest rating first"},{"value":"lowest_rating","label":"Lowest rating first"}],"default":"most_helpful","example":"newest","aliases":["review_sort"]},{"name":"reviews_offset","type":"integer","required":false,"description":"Skip this many reviews before returning `reviews_limit` of them — page through a product's full review history (`review_summary.total_reviews` tells you how many there are; some products have more than 17 000).","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":10000},{"name":"include_variant_images","type":"boolean","required":false,"description":"By default every variant carries its swatch and its own main image, and the FULL gallery is returned once at product level. Set true to also get each variant's complete alternate-image set — no extra request, just a much larger response (a 60-shade foundation carries about nine images per shade).","on_invalid":"ignore","default":false,"aliases":["all_variant_images"]}],"returns":"product{product_id, name, headline, brand, brand_id, brand_url, brand_description, url, category, category_id, breadcrumbs[]{name, url}, product_type, description, description_html, short_description, short_description_html, quick_look, seo_title, seo_description, loves_count, related_links[]} + images[]{url, url_250, alt} + specifications{size, variation_type, variation_type_label, attributes{<sephora attribute>: [values]}, highlights[]{id, name, description, icon}, ingredients, ingredients_html, how_to_use, how_to_use_html, warnings, is_electronic, hawaii_hazmat} + availability{in_stock, in_stock_variant_count, variant_count, is_low_stock, price_min, price_max, currency, ships_to_home, store_pickup_eligible, same_day_eligible, is_online_only, is_returnable, free_shipping_message} + rating{average, review_count, best_rating, average_schema_org, review_count_schema_org} + variants[]{sku_id, is_selected, variation_type, variation_type_label, variation_value, variation_description, size, sku_type, price, price_max, price_display, sale_price, value_price, currency, on_sale, in_stock, is_low_stock, availability_schema_org, price_schema_org, max_purchase_quantity, swatch_text, swatch_image, image, images[], url, is_new, is_limited_edition, is_limited_time_offer, is_sephora_exclusive, is_online_only, is_returnable, is_free_shipping, free_shipping_message, is_replenishment_eligible, store_pickup_eligible, same_day_eligible} + selected_variant{…same…} + reviews[]{review_id, title, text, rating, rating_range, is_recommended, submitted_at, updated_at, author, author_id, location, helpful_votes, unhelpful_votes, total_votes, comment_count, is_syndicated, is_featured, is_ratings_only, badges[], pros, cons, reviewer_context{}, secondary_ratings{}, photos[]{url, thumbnail}, bazaarvoice_product_id, reviewed_product_name} + review_summary{total_reviews, returned, average_rating, recommended_count, rating_distribution{}, with_photos} + gtins{upcs[], eans[], isbns[], mpns[], model_numbers[]}. Honest caveats, every one measured across ten product categories: (1) Sephora publishes NO shipping weight and NO product dimensions anywhere in this payload — the only physical figure is the fill volume ('1.7 oz / 50 mL') inside `specifications.size`, which is contents, not parcel weight; do not compute shipping from it. (2) `gtins` is PRODUCT-level and family-wide, not per-variant: a 51-shade lipstick returns 51 EANs with no mapping from EAN to `sku_id`, because the source publishes no such mapping. It comes from the catalogue feed Sephora sends its reviews provider, so it needs `include_reviews` (the same single call). (3) Stock is a BOOLEAN — `in_stock` plus Sephora's own `is_low_stock` — because Sephora publishes no unit count; a caller needing quantities will not find them here. (4) `variants` is one row per real SKU: single-shade products legitimately return exactly one (hair tools 0/3 had a shade matrix; mascara, perfume, moisturizer and shampoo 4/4 did). (5) Per-variant price IS returned verbatim and is never copied down from the product; where a variant has no sale price the field is null, not filled in. (6) `description`, `short_description`, `ingredients` and `how_to_use` are HTML at source and are published BOTH ways — stripped, and raw in the `_html` twin. (7) `reviews[].author` is the reviewer's public Bazaarvoice display nickname and `author_id` their stable id there. The gateway's redactor removes emails and phone numbers, NOT display names — so the switch for a caller who does not want that data is `include_reviews=false`. (8) `bazaarvoice_matches_product_id` in meta tells you when Sephora's reviews provider filed this product's reviews under a sibling id.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"P427418"}}]},{"name":"sharafdg","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Sharaf DG API — UAE, Bahrain and Oman electronics prices, discounts, sellers, store stock, specifications and reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/sharafdg/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Sharaf DG catalogue (UAE, Bahrain or Oman) by keyword and/or category or brand, with price range, in-stock, store, seller and on-sale filters and three sorts. Each row: sku, product id, model number, title, brand, URL, image, price, price before discount, discount, in-stock flag, number of stores with stock, seller (Sharaf DG or a marketplace seller), offer count, shipping fee, rating, review count, category path, tags, key specs. Plus the source's own total and whether that total is exact. Either `query`, `category` or `brand` is required.","required_params":[],"optional_params":["country","query","category","brand","min_price","max_price","in_stock","store","seller","on_sale","sort","page","page_size"],"params":[{"name":"country","type":"enum","required":false,"description":"Which store: ae (UAE, prices in AED), bh (Bahrain, BHD, 3 decimals), om (Oman, OMR, 3 decimals).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"UAE — uae.sharafdg.com (AED)"},{"value":"bh","label":"Bahrain — bahrain.sharafdg.com (BHD)"},{"value":"om","label":"Oman — oman.sharafdg.com (OMR)"}],"default":"ae","example":"ae","aliases":["market","site"]},{"name":"query","type":"string","required":false,"description":"Search words as typed into the site's search box.","on_invalid":"reject","example":"iphone 17","aliases":["q","keyword","keywords","search"]},{"name":"category","type":"string","required":false,"description":"Category exactly as the `categories` action (or a row's category_path) prints it: a top level (Computing) or a path (Computing > Laptops). An unknown category returns 0 rows.","on_invalid":"reject","example":"Computing > Laptops","aliases":["category_path"]},{"name":"brand","type":"string","required":false,"description":"Brand exactly as rows print it (Apple, Samsung, Lenovo …). An unknown brand returns 0 rows.","on_invalid":"reject","example":"Samsung"},{"name":"min_price","type":"number","required":false,"description":"Lowest price (the price you pay) in the country's currency.","on_invalid":"reject","example":1000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price (the price you pay) in the country's currency.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_max"]},{"name":"in_stock","type":"boolean","required":false,"description":"true (default, as the site lists) = only products in stock; false = include out-of-stock products.","on_invalid":"reject","default":true},{"name":"store","type":"string","required":false,"description":"Only products in stock at this store, by name exactly as the `stores` action prints it.","on_invalid":"reject","example":"Dubai Mall","aliases":["store_name"]},{"name":"seller","type":"string","required":false,"description":"Only products offered by this seller, exactly as rows print it (Sharaf DG itself or a marketplace seller).","on_invalid":"reject","example":"Sharaf DG","aliases":["merchant"]},{"name":"on_sale","type":"boolean","required":false,"description":"true = only products the site marks with a discount percentage.","on_invalid":"reject","aliases":["discounted"]},{"name":"sort","type":"enum","required":false,"description":"Order. The price sorts are the site's own and can return fewer results than relevance for a keyword (they keep only the closest matches).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (the site's default)"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page (see last_page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":24,"minimum":1,"maximum":100,"aliases":["limit","per_page"]}],"returns":"results[]{sku, product_id, item_code, model_number, title, brand, url, image, country, currency, price, price_before_discount, regular_price, regular_price_below_price, discount_percent, discount_amount, discount_label, in_stock, stores_in_stock_count, seller, seller_code, marketplace, offer_count, shipping_fee, rating, review_count, category, category_path, product_type, tags[], key_specs{}, updated_at} + total, total_is_exact, page, page_size, last_page, has_more, sort","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"samsung tv","country":"ae"}},{"name":"product","description":"Full record of one product in one country: title, brand, sku, product id, model number, price, price before discount, discount, every seller's offer (price, regular price, shipping fee, default / best flags), stock per store with pickup and delivery flags, the full specification table, key specs, description, summary, images, rating and review count, category path, tags.","required_params":["sku"],"optional_params":[],"params":[{"name":"sku","type":"string","required":false,"description":"The product code exactly as a search row returns it in `sku` (the 'Item S600982431' code the site prints), or a row's `product_id` (759456), or a product URL.","on_invalid":"reject","example":"S600982431","aliases":["id","product_id","main_sku","url"]},{"name":"country","type":"enum","required":false,"description":"Which store: ae (UAE, prices in AED), bh (Bahrain, BHD, 3 decimals), om (Oman, OMR, 3 decimals).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"UAE — uae.sharafdg.com (AED)"},{"value":"bh","label":"Bahrain — bahrain.sharafdg.com (BHD)"},{"value":"om","label":"Oman — oman.sharafdg.com (OMR)"}],"default":"ae","example":"ae","aliases":["market","site"]}],"returns":"{…every search row field, description, summary, images[], specifications[]{group, name, value}, offers[]{seller, seller_code, marketplace, price, regular_price, sale_price, is_default, is_best, active, tier, shipping_fee, free_shipping_threshold, free_shipping, promo_text, fulfilment_center}, store_stock[]{store_id, store_name, in_stock, active, store_pickup, home_delivery, seller_code, lat, lng}, stores_with_stock[], categories_all[], created_at}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"S600982431","country":"ae"}},{"name":"reviews","description":"The review feed the product page shows: user reviews (syndicated from other retailers and Sharaf DG's own) or expert reviews, each with date, title, text, author, score, source and pros/cons for experts, plus the product's overall rating (out of 5), review counts and the 1-5 star distribution. Paged with `cursor`.","required_params":["sku"],"optional_params":["country","type","cursor"],"params":[{"name":"sku","type":"string","required":false,"description":"The product code exactly as a search row returns it in `sku`.","on_invalid":"reject","example":"S600982431","aliases":["id","main_sku"]},{"name":"type","type":"enum","required":false,"description":"Which feed: user (default) or pro (expert reviews).","on_invalid":"reject","allowed_values":[{"value":"user","label":"User reviews"},{"value":"pro","label":"Expert reviews"}],"default":"user","example":"user"},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous page, to read the next page.","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"The store the sku belongs to (ae, bh, om). The review feed is the same widget for all three; country is used to tell an unknown sku from a product that has no reviews yet.","on_invalid":"reject","allowed_values":[{"value":"ae","label":"UAE — uae.sharafdg.com (AED)"},{"value":"bh","label":"Bahrain — bahrain.sharafdg.com (BHD)"},{"value":"om","label":"Oman — oman.sharafdg.com (OMR)"}],"default":"ae","example":"ae","aliases":["market","site"]}],"returns":"{sku, rating, score_10, user_review_count, expert_review_count, user_star_distribution{}, expert_star_distribution{}, type, reviews[]{type, date, title, text, author, score, score_max, rating, source, source_domain, language, country, product_reviewed, pros, cons, votes_up, votes_down, link}, next_cursor}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"sku":"S600982431"}},{"name":"categories","description":"The category tree with the number of in-stock products in each category — the exact values the search `category` filter accepts. Top level by default, or the children of `parent`.","required_params":[],"optional_params":["country","parent"],"params":[{"name":"country","type":"enum","required":false,"description":"Which store: ae (UAE, prices in AED), bh (Bahrain, BHD, 3 decimals), om (Oman, OMR, 3 decimals).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"UAE — uae.sharafdg.com (AED)"},{"value":"bh","label":"Bahrain — bahrain.sharafdg.com (BHD)"},{"value":"om","label":"Oman — oman.sharafdg.com (OMR)"}],"default":"ae","example":"ae","aliases":["market","site"]},{"name":"parent","type":"string","required":false,"description":"List the sub-categories of this category (exactly as printed).","on_invalid":"reject","example":"Computing"}],"returns":"categories[]{category, name, level, count} + total","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ae"}},{"name":"stores","description":"The stores that currently hold stock, with the number of in-stock products each one carries (the values the search `store` filter accepts).","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Which store: ae (UAE, prices in AED), bh (Bahrain, BHD, 3 decimals), om (Oman, OMR, 3 decimals).","on_invalid":"reject","allowed_values":[{"value":"ae","label":"UAE — uae.sharafdg.com (AED)"},{"value":"bh","label":"Bahrain — bahrain.sharafdg.com (BHD)"},{"value":"om","label":"Oman — oman.sharafdg.com (OMR)"}],"default":"ae","example":"ae","aliases":["market","site"]}],"returns":"stores[]{store_name, products_in_stock} + total","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ae"}}]},{"name":"shein","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Shein — product search, product detail and price/stock refresh","version":"0.3.4","pii_redact_default":false,"mint_reusable":null,"base_path":"/shein/v1","spec_available":true,"actions":[{"name":"search","description":"Return JSON product cards from the selected storefront with local prices, currency and product URLs. Global and regional search support page=1 and up to 40 results. US search retains pagination. Source totals can exceed returned rows; there is no automatic regional pagination. Global is the default.","required_params":["query"],"optional_params":["market","max_results","page","limit","category_id"],"params":[{"name":"query","type":"string","required":true,"description":"Search phrase.","on_invalid":"ignore","example":"summer dress"},{"name":"market","type":"enum","required":false,"description":"Select the storefront and its local currency.","on_invalid":"reject","allowed_values":[{"value":"global","label":"Global (www.shein.com)"},{"value":"us","label":"United States"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"kw","label":"Kuwait (KWD)"}],"default":"global","aliases":["region","country"]},{"name":"max_results","type":"integer","required":false,"description":"Global: at most 40 results on page 1. US: auto-paginate up to 600 results.","on_invalid":"ignore","default":40,"minimum":1,"maximum":600},{"name":"page","type":"integer","required":false,"description":"Result page. Empty page = end of list.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Global: 1-40 results. US: 1-120 per page. Default 40 in the playground.","on_invalid":"ignore","default":40,"minimum":1,"maximum":120},{"name":"category_id","type":"string","required":false,"description":"Optional Shein category id -- the number in a /-c-<id>.html URL (1727 = Women Short Dresses), or the URL itself. Restricts the search to that category and its sub-categories (measured: query=women returns 14963 matches unfiltered and 9092 with category_id=2030). US storefront only; a keyword is still required.","on_invalid":"ignore","example":"1727","aliases":["cat_id","category","category_url"]}],"returns":"results[]{goods_id, name, url, price, list_price, discount_pct, currency_code, image, images[], rating, reviews_count, colors[], fit_true_size_pct, category, brand, store_name, in_stock, price_test_applied} + query + page + has_next. price_test_applied has the same meaning as on product/detail for the session that served the listing: true when Shein's price-test discount is inside the card price, false when it is not, null when the card does not say. Cards carry no base_price: Shein does not publish the pre-promotion price on the listing, so read it from product/detail. Global also returns pagination_supported=false + source_has_more. meta.result_count is Shein's own total match count, and meta.rows_withheld_by_source counts rows Shein listed as matches but refused to serve card data for on this page (0 in the normal case). With category_id the response echoes category_id and meta carries category_leaf_ids","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"query":"summer dress","max_results":20}},{"name":"product/detail","description":"Read a complete selected regional product page in its local currency, by product id or URL. Includes current page prices, all published SKUs with size and stock, total stock, images, and available size charts, attributes and description. These fields are included by default. sizes[] carries each size's price, list_price and base_price next to its stock. Shein runs price tests: two shopper sessions can see different promotional prices for the same product. price is the offer of the session that read the page; base_price (the price before any promotion) and list_price are the same for every session, and price_test_applied tells whether the test discount is in price. When price_source is listing_card, the product page price failed verification and price, list_price and price_test_applied come from Shein's own listing for the product; base_price, promotion_discount and the per-size prices are then null, never taken from the rejected page (meta.price_fields_withheld lists them). Shein shows stock up to 20 per SKU: a stock of 20 means 20 or more (stock_is_minimum / total_stock_is_minimum). colors[] lists the colour variants with name, goods_id and swatch image. Optional fields/exclude shape the response; the raw source blocks are about 95% of its size. Unavailable global SKU prices are null and sku_prices_complete is false. Missing product prices return an error without additional price lookup requests. Prices can change; no global product is successful without a verified positive product price. Global is the default; an explicit market wins, otherwise a product URL selects its storefront. NOT_FOUND means the selected storefront returned a product 404. UPSTREAM_HTTP with error.detail.reason=global_offer_price_unavailable means a complete priced offer could not be supplied; it does not mean the product is free or permanently removed. These outcomes are not retried within the call. Transient failures remain retryable; inspect error.retryable. Billing: failed calls are not charged, including NOT_FOUND (error.detail.reason=product_not_found, also when the product is absent from the selected market only).","required_params":[],"optional_params":["market","url","fields","exclude"],"params":[{"name":"goods_id","type":"string","required":false,"description":"Product id. Supply either goods_id or a product URL.","on_invalid":"ignore","example":"387752092","aliases":["id","product_id"]},{"name":"url","type":"string","required":false,"description":"Full product URL (alternative to goods_id).","on_invalid":"ignore","example":"https://us.shein.com/x-p-387752092.html"},{"name":"market","type":"enum","required":false,"description":"Explicit market takes precedence. Otherwise infer from the product URL; id-only defaults to global. Global uses www.shein.com in USD; availability and shipping are destination-dependent. An unavailable global product price returns an error without additional price lookup requests.","on_invalid":"ignore","allowed_values":[{"value":"global","label":"Global (www.shein.com)"},{"value":"us","label":"United States"},{"value":"uk","label":"United Kingdom (www.shein.co.uk, GBP)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"kw","label":"Kuwait (KWD)"}],"default":"global","aliases":["region","country"]},{"name":"fields","type":"array","required":false,"description":"Return only these product keys (goods_id is always kept). Optional; the default is the full record. Applied keys are echoed in meta.field_selection.","on_invalid":"ignore","example":["price","list_price","sizes"]},{"name":"exclude","type":"array","required":false,"description":"Drop these product keys. The raw source blocks (sale_attributes, skus, price_details, product_details, image_details, color_images, size_chart) are about 95% of a detail response; their useful values are already typed in sizes[], colors[], attributes[] and the price fields.","on_invalid":"ignore","example":["sale_attributes","skus","price_details","product_details","image_details","color_images","size_chart"]}],"returns":"product{goods_id, goods_sn, name, price, price_display, list_price, base_price, promotion_discount, price_test_applied, currency_code, in_stock, total_stock, total_stock_is_minimum, brand (US), sizes[]{size, size_local, in_stock, stock, stock_is_minimum, sku_code, price, list_price, base_price}, colors[]{name, goods_id, image, url, is_current}, color, skus[], images[], color_names[], url, size_chart, sale_attributes, price_details, product_details, image_details, color_images, attributes[], description, price_source?, price_basis?, sku_prices_complete?}. Optional descriptive fields depend on what the source publishes.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"goods_id":"387752092","market":"us"}},{"name":"price","description":"Read current price and stock from the selected regional product page in its local currency. Returns only price and availability fields, including total stock. Prices reflect the offer at retrieval time and can change. It reads the same product page as product/detail. Shein runs price tests, so price can differ between sessions; base_price (before any promotion) is the same for every session and is the stable value for change detection. When price_source is listing_card, price and list_price come from Shein's own listing and base_price and promotion_discount are null (the product page price failed verification). Missing product prices return an error without additional price lookup requests. Global is the default; an explicit market wins, otherwise a product URL selects its storefront. NOT_FOUND means the selected storefront returned a product 404. UPSTREAM_HTTP with error.detail.reason=global_offer_price_unavailable means a complete priced offer could not be supplied; it does not mean the product is free or permanently removed. These outcomes are not retried within the call. Transient failures remain retryable; inspect error.retryable. Billing: failed calls are not charged, including NOT_FOUND (error.detail.reason=product_not_found, also when the product is absent from the selected market only).","required_params":[],"optional_params":["market","url"],"params":[{"name":"goods_id","type":"string","required":false,"description":"Product id. Supply either goods_id or a product URL.","on_invalid":"ignore","example":"387752092","aliases":["id","product_id"]},{"name":"url","type":"string","required":false,"description":"Full product URL (alternative to goods_id).","on_invalid":"ignore"},{"name":"market","type":"enum","required":false,"description":"Explicit market takes precedence. Otherwise infer from the product URL; id-only defaults to global. Global uses www.shein.com in USD; availability and shipping are destination-dependent. An unavailable global product price returns an error without additional price lookup requests.","on_invalid":"ignore","allowed_values":[{"value":"global","label":"Global (www.shein.com)"},{"value":"us","label":"United States"},{"value":"uk","label":"United Kingdom (www.shein.co.uk, GBP)"},{"value":"de","label":"Germany (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"se","label":"Sweden (SEK)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"sa","label":"Saudi Arabia (SAR)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"kw","label":"Kuwait (KWD)"}],"default":"global","aliases":["region","country"]}],"returns":"product{goods_id, price, price_display, list_price, base_price, promotion_discount, price_test_applied, discount_pct, currency_code, in_stock, total_stock, total_stock_is_minimum, url, price_source?, price_basis?, sku_prices_complete?}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"goods_id":"387752092","market":"us"}},{"name":"category/browse","description":"Shein refuses its category shelf for API clients, so this action reports that plainly instead of returning an empty or invented shelf. Measured 2026-09-25: the shelf endpoint refuses every request for a category id while the search endpoint answers normally in the same second from the same client, and the category page itself answers with a challenge. The error is not retryable, is never charged, and names the working route: call `search` with a keyword plus the same id as `category_id`, which returns the same product cards restricted to that category and its sub-categories. A keyword is required because Shein serves no products for a keyword-less category request.","required_params":["category_id"],"optional_params":["market","url","page","limit"],"params":[{"name":"category_id","type":"string","required":true,"description":"Shein category id (the number in a /-c-<id>.html URL), or pass the category URL. Pass it to `search` as `category_id` together with a keyword.","on_invalid":"ignore","example":"1727","aliases":["cat_id","category","category_url","url"]},{"name":"market","type":"enum","required":false,"description":"Which Shein storefront to read. Prices and availability are per-storefront.","on_invalid":"ignore","allowed_values":[{"value":"us","label":"us.shein.com — United States"},{"value":"uk","label":"uk.shein.com — United Kingdom"},{"value":"de","label":"de.shein.com — Germany"},{"value":"fr","label":"fr.shein.com — France"},{"value":"es","label":"es.shein.com — Spain"},{"value":"it","label":"it.shein.com — Italy"}],"default":"us","aliases":["region","country"]},{"name":"page","type":"integer","required":false,"description":"Result page. Empty page = end of list.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (max 120).","on_invalid":"ignore","default":100,"minimum":1,"maximum":120}],"returns":"never returns rows; TARGET_BLOCKED with detail{category_id, reason, use_instead{action, params}} pointing at search + category_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"1727"}}]},{"name":"shixian","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Shixian (实现网) remote-work brief API — China's freelance/remote contract board in clean JSON. Every brief carries the client's own CNY budget, the project duration, the complete requirement text, hiring city, role category, applicant count and poster profile. Keyword search, paginated board, single-brief detail. No login, no token, no China exit required.","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/shixian/v1","spec_available":true,"actions":[{"name":"search","description":"Find remote-work briefs by keyword — the ones that mention 爬虫 (scraping), 数据采集 (data collection), API, 小程序 or any term you care about — each with the client's published CNY budget, duration, full requirement text and applicant count. 🔴 shixian publishes no job-search endpoint (its own `keyword=` parameter is accepted and ignored — verified: a nonsense keyword still returns the full front page), so this action scans the board pages and matches here; the response states exactly how many pages and briefs were scanned.","required_params":["q"],"optional_params":["match","fields","pages","limit","city","category","type","sort"],"params":[{"name":"q","type":"string","required":true,"description":"Search term, Chinese or English — e.g. '爬虫' (web scraping), '数据采集' (data collection), 'API', '小程序' (WeChat mini program), 'AI', 'Python'. 🔴 shixian has NO job-search endpoint (its `keyword=` parameter is accepted and ignored — measured: a nonsense keyword still returns the full front page), so this is matched HERE against the briefs on the pages scanned. Every response says so in `note`.","on_invalid":"ignore","example":"爬虫","aliases":["query","keyword","search","term"]},{"name":"match","type":"enum","required":false,"description":"How strictly a multi-word query must match. Chinese queries have no spaces, so for them 'any' and 'all' behave identically and 'phrase' is the same as a plain substring search.","on_invalid":"ignore","allowed_values":[{"value":"any","label":"Keep a brief if it contains ANY whitespace-separated token of the query. Default."},{"value":"all","label":"Keep a brief only if it contains EVERY token of the query."},{"value":"phrase","label":"Keep a brief only if it contains the query as an exact substring (spaces included)."}],"default":"any","example":"all","aliases":["match_mode"]},{"name":"fields","type":"enum","required":false,"description":"Which part of the brief the query is matched against. The board ships the COMPLETE requirement text in the listing HTML, so 'description' searches the real body, not a teaser.","on_invalid":"ignore","allowed_values":[{"value":"both","label":"Match against the title AND the full requirement text (default)."},{"value":"title","label":"Match against the job title only — far stricter, use for role names."},{"value":"description","label":"Match against the requirement text only."}],"default":"both","example":"both","aliases":["search_in","scope"]},{"name":"pages","type":"integer","required":false,"description":"How many board pages to scan before matching (1–25, default 5). Each page is 20 briefs and roughly 100 KB upstream, so the default reads ~100 briefs and the ceiling ~500. Scanning stops early once `limit` matches are found. Narrow with `category`/`city`/`type` before raising this.","on_invalid":"ignore","default":5,"example":5,"minimum":1,"maximum":25,"aliases":["scan_pages","depth","max_pages"]},{"name":"limit","type":"integer","required":false,"description":"How many matching briefs to return (1–200, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":200,"aliases":["max_results","count","size"]},{"name":"city","type":"enum","required":false,"description":"Hiring city / province, as the board's own slug. The filter genuinely bites (measured: 'shanghai' shared 1 of 20 ids with the unfiltered board, 'beijing' 9 of 20). 🔴 An UNKNOWN slug is silently ignored upstream and would hand you the unfiltered board, so anything outside this list is rejected here instead. Cannot be combined with `type` — they are separate routes on the site.","on_invalid":"reject","allowed_values":[{"value":"all","label":"全国 — nationwide, no city filter (default)"},{"value":"beijing","label":"北京 Beijing"},{"value":"shanghai","label":"上海 Shanghai"},{"value":"shenzhen","label":"深圳 Shenzhen"},{"value":"hangzhou","label":"杭州 Hangzhou"},{"value":"guangzhou","label":"广州 Guangzhou"},{"value":"chengdu","label":"成都 Chengdu"},{"value":"nanjing","label":"南京 Nanjing"},{"value":"xian","label":"西安 Xi'an"},{"value":"hubei","label":"湖北 Hubei province"},{"value":"xiamen","label":"厦门 Xiamen"},{"value":"shandong","label":"山东 Shandong province"},{"value":"suzhou","label":"苏州 Suzhou"},{"value":"zhengzhou","label":"郑州 Zhengzhou"},{"value":"fuzhou","label":"福州 Fuzhou"},{"value":"changsha","label":"长沙 Changsha"},{"value":"chongqing","label":"重庆 Chongqing"},{"value":"tianjin","label":"天津 Tianjin"},{"value":"ningbo","label":"宁波 Ningbo"},{"value":"remote","label":"远程 remote-only bucket — measured EMPTY (0 rows); the board is remote-first anyway, so use type=part-time / type=full-time instead"},{"value":"qita","label":"其它 elsewhere in China"}],"default":"all","example":"beijing","aliases":["location","region"]},{"name":"category","type":"enum","required":false,"description":"Role category. Measured bite against the unfiltered board: 'ui' shared 0 of 20 ids, 'ios' 1 of 20, 'backend' 5 of 20. Unknown values are rejected here because the site ignores them silently. Cannot be combined with `type`.","on_invalid":"reject","allowed_values":[{"value":"all","label":"全部 — every role (default)"},{"value":"backend","label":"后端工程师 backend engineer"},{"value":"frontend","label":"前端工程师 frontend engineer"},{"value":"full_stack","label":"全栈 full-stack"},{"value":"ios","label":"iOS工程师 iOS engineer"},{"value":"android","label":"Android工程师 Android engineer"},{"value":"ui","label":"UI设计师 UI designer"},{"value":"pm","label":"产品经理 product manager"},{"value":"operator","label":"运营/编辑 ops / editorial"},{"value":"tester","label":"测试 QA"},{"value":"others","label":"其它 everything else"}],"default":"all","example":"backend","aliases":["role","job_category","discipline"]},{"name":"type","type":"enum","required":false,"description":"Contract shape. 🔴 On shixian this is a DIFFERENT route from the city/role board (/jobs/full-time vs /job/<city>/<role>), so it cannot be combined with `city` or `category` — passing both is rejected with INVALID_PARAM rather than silently dropping one.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Both remote full-time and remote part-time (default)"},{"value":"full-time","label":"远程全职 — remote full-time contracts. Budget is quoted per MONTH and the row also carries a per-workday rate (e.g. 900元 / 8小时)."},{"value":"part-time","label":"远程兼职 — remote part-time / project gigs. Budget is the whole engagement over the quoted 工期 (duration)."}],"default":"all","example":"full-time","aliases":["job_type","employment","contract"]},{"name":"sort","type":"enum","required":false,"description":"Board ordering / shortlist. 'nobody' is the interesting one for lead generation — briefs nobody has applied to yet: it shares only 1 of 20 ids with the default board, and `applicant_count` is null on 20/20 of its rows, which is the filter proving itself twice over.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The board's own default order (default)"},{"value":"last","label":"最新职位 — newest postings first"},{"value":"nobody","label":"无人投递 — briefs nobody has applied to yet (least competition)"},{"value":"accept_remote","label":"接受远程 — postings explicitly flagged as accepting remote workers"}],"default":"default","example":"last","aliases":["filter","order","order_by"]}],"returns":"jobs[]{id, title, url, job_type, description, budget{amount,currency,period,label,raw}, rate{amount,currency,per,raw}, duration{days,raw}, employer{id,url,avatar}, published_relative, published_approx_iso, published_approx_days_ago, applicant_count}, returned, matched, jobs_scanned, pages_scanned, query, match, note","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"爬虫","pages":6}},{"name":"jobs","description":"One page of the shixian board — 20 remote-work briefs with the complete requirement text and the client's published CNY budget on every row. Filter by city, role category, contract shape or the board's own shortlists (newest, zero-applicant, accepts-remote) and page through roughly 3,200 live briefs.","required_params":[],"optional_params":["page","limit","city","category","type","sort"],"params":[{"name":"page","type":"integer","required":false,"description":"Which board page to return (1–300). Each page holds 20 briefs and consecutive pages share NO ids (measured: p1/p2, p2/p3 and p1/p3 overlap = 0). The unfiltered board bottoms out around page 164 (~3,200 live briefs) and a filtered one much sooner; past the end the site serves an empty page and this action returns NOT_FOUND rather than an empty success.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":300,"aliases":["p","page_number"]},{"name":"limit","type":"integer","required":false,"description":"How many briefs to return (1–20, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":20,"aliases":["max_results","count","size"]},{"name":"city","type":"enum","required":false,"description":"Hiring city / province, as the board's own slug. The filter genuinely bites (measured: 'shanghai' shared 1 of 20 ids with the unfiltered board, 'beijing' 9 of 20). 🔴 An UNKNOWN slug is silently ignored upstream and would hand you the unfiltered board, so anything outside this list is rejected here instead. Cannot be combined with `type` — they are separate routes on the site.","on_invalid":"reject","allowed_values":[{"value":"all","label":"全国 — nationwide, no city filter (default)"},{"value":"beijing","label":"北京 Beijing"},{"value":"shanghai","label":"上海 Shanghai"},{"value":"shenzhen","label":"深圳 Shenzhen"},{"value":"hangzhou","label":"杭州 Hangzhou"},{"value":"guangzhou","label":"广州 Guangzhou"},{"value":"chengdu","label":"成都 Chengdu"},{"value":"nanjing","label":"南京 Nanjing"},{"value":"xian","label":"西安 Xi'an"},{"value":"hubei","label":"湖北 Hubei province"},{"value":"xiamen","label":"厦门 Xiamen"},{"value":"shandong","label":"山东 Shandong province"},{"value":"suzhou","label":"苏州 Suzhou"},{"value":"zhengzhou","label":"郑州 Zhengzhou"},{"value":"fuzhou","label":"福州 Fuzhou"},{"value":"changsha","label":"长沙 Changsha"},{"value":"chongqing","label":"重庆 Chongqing"},{"value":"tianjin","label":"天津 Tianjin"},{"value":"ningbo","label":"宁波 Ningbo"},{"value":"remote","label":"远程 remote-only bucket — measured EMPTY (0 rows); the board is remote-first anyway, so use type=part-time / type=full-time instead"},{"value":"qita","label":"其它 elsewhere in China"}],"default":"all","example":"beijing","aliases":["location","region"]},{"name":"category","type":"enum","required":false,"description":"Role category. Measured bite against the unfiltered board: 'ui' shared 0 of 20 ids, 'ios' 1 of 20, 'backend' 5 of 20. Unknown values are rejected here because the site ignores them silently. Cannot be combined with `type`.","on_invalid":"reject","allowed_values":[{"value":"all","label":"全部 — every role (default)"},{"value":"backend","label":"后端工程师 backend engineer"},{"value":"frontend","label":"前端工程师 frontend engineer"},{"value":"full_stack","label":"全栈 full-stack"},{"value":"ios","label":"iOS工程师 iOS engineer"},{"value":"android","label":"Android工程师 Android engineer"},{"value":"ui","label":"UI设计师 UI designer"},{"value":"pm","label":"产品经理 product manager"},{"value":"operator","label":"运营/编辑 ops / editorial"},{"value":"tester","label":"测试 QA"},{"value":"others","label":"其它 everything else"}],"default":"all","example":"backend","aliases":["role","job_category","discipline"]},{"name":"type","type":"enum","required":false,"description":"Contract shape. 🔴 On shixian this is a DIFFERENT route from the city/role board (/jobs/full-time vs /job/<city>/<role>), so it cannot be combined with `city` or `category` — passing both is rejected with INVALID_PARAM rather than silently dropping one.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Both remote full-time and remote part-time (default)"},{"value":"full-time","label":"远程全职 — remote full-time contracts. Budget is quoted per MONTH and the row also carries a per-workday rate (e.g. 900元 / 8小时)."},{"value":"part-time","label":"远程兼职 — remote part-time / project gigs. Budget is the whole engagement over the quoted 工期 (duration)."}],"default":"all","example":"full-time","aliases":["job_type","employment","contract"]},{"name":"sort","type":"enum","required":false,"description":"Board ordering / shortlist. 'nobody' is the interesting one for lead generation — briefs nobody has applied to yet: it shares only 1 of 20 ids with the default board, and `applicant_count` is null on 20/20 of its rows, which is the filter proving itself twice over.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The board's own default order (default)"},{"value":"last","label":"最新职位 — newest postings first"},{"value":"nobody","label":"无人投递 — briefs nobody has applied to yet (least competition)"},{"value":"accept_remote","label":"接受远程 — postings explicitly flagged as accepting remote workers"}],"default":"default","example":"last","aliases":["filter","order","order_by"]}],"returns":"jobs[]{id, title, url, job_type, job_type_en, description, budget{amount,currency,period,label,raw}, rate{amount,currency,per,raw}, duration{days,raw}, employer{id,url,avatar}, published_relative, published_approx_iso, published_approx_days_ago, applicant_count}, returned, page, page_size, filters{city,category,type,sort}, source_url","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"job","description":"One brief in full: the complete requirement text straight out of the page's own schema.org block, the client's budget, the hiring city and role, the project type, workdays per month, how many people have applied, how many have viewed it, and the poster's public marketplace profile (display name, location, team size, funding stage, product and team blurbs) — the profile fields the board hides behind a login wall on the list page.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"The brief to fetch: a numeric job id (1192790804) or a full URL (https://shixian.com/jobs/1192790804).","on_invalid":"ignore","example":"1192790804","aliases":["job_id","url","job"]}],"returns":"job{id, title, url, job_type, description, budget, project_type, workdays_per_month, work_mode, city{name,slug}, category{name,slug}, employer{id,name,url,avatar,location,team_size,funding_stage,product_intro,team_intro}, published_relative, published_approx_iso, applicant_count, view_count}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1192790804"}},{"name":"filters","description":"The board's own filter taxonomy, read live off the site: every city slug, every role-category slug, the contract shapes and the sort modes, each with its Chinese label. Use it to discover the exact values `search` and `jobs` accept — the site silently ignores a slug it does not know, so a typo would otherwise return the unfiltered board.","required_params":[],"optional_params":[],"params":[],"returns":"cities[]{slug,name_zh}, categories[]{slug,name_zh}, types[]{slug,label}, sorts[]{slug,label}, page_size, max_page, board_end_measured","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"shopflix","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Shopflix.gr API — Greek marketplace data scraper: product search, category browsing, full product detail with specs, every merchant's price and stock for one product, customer reviews and the category tree from shopflix.gr — no API key, no login","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/shopflix/v1","spec_available":true,"actions":[{"name":"search","description":"Search Shopflix by keyword. Returns the product grid with the Shopflix price, the cheapest and dearest merchant price for that product, how many merchants carry it, the category path, rating and the sku you feed to `product` and `offers`. 🔴 Shopflix cannot be searched by barcode: its search index covers product name, sku, merchant name and spec values only — an EAN returns 0 rows. Rows do carry a `gtin13` when one can be recovered from the product's own images (about 30% of rows, far higher in toys and TVs), so you can join results onto an EAN catalogue.","required_params":["query"],"optional_params":["category_id","brand","merchant","min_price","max_price","sort","page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Words to search for, Greek or English. Greek terms match far more of this catalogue than English ones. A barcode/EAN is NOT a valid query here — the source does not index it.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","term"]},{"name":"category_id","type":"string","required":false,"description":"Narrow to one category. Numeric id (24 = Smartphones) or a shopflix.gr /c/<id>/<slug> URL. Get ids from `categories`.","on_invalid":"ignore","example":"24","value_pattern":"\\d+|https?://.*","aliases":["category","cid"]},{"name":"brand","type":"string","required":false,"description":"Exact manufacturer name as Shopflix spells it (e.g. Apple, Samsung, LEGO).","on_invalid":"ignore","example":"Apple","aliases":["manufacturer"]},{"name":"merchant","type":"string","required":false,"description":"Exact merchant/shop name as Shopflix spells it (e.g. Techaway, Frogs.gr). This matches the products that merchant is the recommended seller for — use `offers` to see every seller of one product.","on_invalid":"ignore","example":"Techaway","aliases":["vendor","shop","seller"]},{"name":"min_price","type":"number","required":false,"description":"Keep only products whose Shopflix price is at least this many euros.","on_invalid":"ignore","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Keep only products whose Shopflix price is at most this many euros.","on_invalid":"ignore","example":1000,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Each value maps to one of Shopflix's own sort indexes.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (Shopflix's own ranking)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"popularity","label":"Most popular first"},{"value":"rating","label":"Best rated first"},{"value":"discount","label":"Biggest discount first"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based result page. Shopflix's index stops paging past roughly 1 000 rows per query, so `page` × `limit` above that returns empty.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-50 (default 24).","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":50}],"returns":"products[]{sku, abstract_sku, product_id, title, url, price_eur, list_price_eur, discount_pct, price_min_eur, price_max_eur, merchant_count, merchant_name, shipping_lead_time, rating, review_count, category_path[], gtin13, images[], price_band_stale}, total, page, limit, pages, query. `price_eur` is Shopflix's own headline price; `price_min_eur`/`price_max_eur`/`merchant_count` come from the index's per-merchant price map, which can lag the headline — `price_band_stale` is true on the rows where the two disagree (4 of 240 rows measured 2026-10-06).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone"}},{"name":"category","description":"Browse one Shopflix category without a keyword — same rows as `search`. Take the id from `categories`, from a search row's URL, or from any shopflix.gr /c/<id>/ link.","required_params":["category_id"],"optional_params":["query","brand","merchant","min_price","max_price","sort","page","limit"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric category id (24 = Smartphones) or a shopflix.gr /c/<id>/<slug> URL.","on_invalid":"reject","example":"24","value_pattern":"\\d+|https?://.*","aliases":["category","cid","url"]},{"name":"query","type":"string","required":false,"description":"Optional keyword to narrow the category.","on_invalid":"ignore","example":"samsung","aliases":["q"]},{"name":"brand","type":"string","required":false,"description":"Exact manufacturer name as Shopflix spells it (e.g. Apple, Samsung, LEGO).","on_invalid":"ignore","example":"Apple","aliases":["manufacturer"]},{"name":"merchant","type":"string","required":false,"description":"Exact merchant/shop name as Shopflix spells it (e.g. Techaway, Frogs.gr). This matches the products that merchant is the recommended seller for — use `offers` to see every seller of one product.","on_invalid":"ignore","example":"Techaway","aliases":["vendor","shop","seller"]},{"name":"min_price","type":"number","required":false,"description":"Keep only products whose Shopflix price is at least this many euros.","on_invalid":"ignore","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Keep only products whose Shopflix price is at most this many euros.","on_invalid":"ignore","example":1000,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Each value maps to one of Shopflix's own sort indexes.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (Shopflix's own ranking)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"popularity","label":"Most popular first"},{"value":"rating","label":"Best rated first"},{"value":"discount","label":"Biggest discount first"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based result page. Shopflix's index stops paging past roughly 1 000 rows per query, so `page` × `limit` above that returns empty.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-50 (default 24).","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":50}],"returns":"products[] (same shape as search), total, page, limit, pages, category_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"24"}},{"name":"product","description":"One product in full: title, description, every technical specification row, images, manufacturer part number, shipping weight and box dimensions, rating and review count, category. `gtin13` is the barcode recovered from the product's own images when one is recoverable; `ean_published` is the source's own barcode field, which Shopflix leaves empty on the products measured.","required_params":["sku"],"optional_params":[],"params":[{"name":"sku","type":"string","required":true,"description":"The Shopflix sku (SF-202747804) or a shopflix.gr /p/<sku>/<slug> product URL. Take it from `search`.","on_invalid":"reject","example":"SF-202747804","value_pattern":"SFA?-\\d+|https?://.*","aliases":["product_id","id","url"]}],"returns":"product{sku, abstract_sku, product_id, title, subtitle, url, brand, description, gtin13, ean_published, mpn, isbn, rating, review_count, is_discontinued, shipping_weight_kg, shipping_dimensions_cm{height,width,depth}, category_id, category_name, images[], specs[]{group, name, value}, video_id}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"SF-202747804"}},{"name":"offers","description":"Every merchant selling one product. Returns TWO lists on purpose: `offers[]` is the named merchant offers Shopflix publishes (shop name, shop rating, price, shipping fee, stock quantity, instalments) and is capped at 5 by the source; `merchant_prices[]` is EVERY merchant's price for that product, which the search index knows but without shop names. `merchant_count` is the real number of sellers.","required_params":["sku"],"optional_params":[],"params":[{"name":"sku","type":"string","required":true,"description":"The Shopflix sku or a product URL.","on_invalid":"reject","example":"SF-202747804","value_pattern":"SFA?-\\d+|https?://.*","aliases":["product_id","id","url"]}],"returns":"sku, merchant_count, offers_named, price_min_eur, price_max_eur, offers[]{merchant, merchant_reference, merchant_rating, merchant_rating_count, merchant_url, price_eur, list_price_eur, discount_pct, shipping_fee_eur, shipping_lead_time_days, in_stock, stock_quantity, max_instalments}, merchant_prices[]{merchant_reference, price_eur, list_price_eur, shipping_lead_time, offer_reference}, index_prices_stale. `offers[]` is live; `merchant_prices[]` is the search index's snapshot and can lag it, which `index_prices_stale` reports.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"SF-202747804"}},{"name":"reviews","description":"Customer reviews for one product, with the rating breakdown Shopflix publishes. Reviews are keyed on the ABSTRACT sku (SFA-…); a concrete sku (SF-…) is accepted and resolved for you.","required_params":["sku"],"optional_params":["page","limit","sort","min_rating","verified_only","with_media"],"params":[{"name":"sku","type":"string","required":true,"description":"Shopflix sku, abstract (SFA-…) or concrete (SF-…), or a product URL.","on_invalid":"reject","example":"SFA-104712587","value_pattern":"SFA?-\\d+|https?://.*","aliases":["product_id","id","url"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"created_desc","label":"Newest first"},{"value":"created_asc","label":"Oldest first"},{"value":"rating_desc","label":"Highest rating first"},{"value":"rating_asc","label":"Lowest rating first"}],"default":"created_desc","example":"created_desc"},{"name":"min_rating","type":"integer","required":false,"description":"Keep only reviews with at least this star rating (1-5).","on_invalid":"ignore","example":4,"minimum":1,"maximum":5},{"name":"verified_only","type":"boolean","required":false,"description":"Keep only reviews from a verified Shopflix purchase.","on_invalid":"ignore","default":false,"example":true},{"name":"with_media","type":"boolean","required":false,"description":"Keep only reviews that carry customer photos.","on_invalid":"ignore","default":false,"example":false},{"name":"page","type":"integer","required":false,"description":"1-based result page. Shopflix's index stops paging past roughly 1 000 rows per query, so `page` × `limit` above that returns empty.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-50 (default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50}],"returns":"reviews[]{review_id, rating, title, text, author, author_id, author_email (as sent; usually null at the source), order_ref, created_at, verified_purchase, recommended, product_sku, product_title, media_count}, total, average_rating, page, limit, sku","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"sku":"SFA-104712587"}},{"name":"categories","description":"Shopflix's category tree — the ids `search` and `category` take. Called without a query it returns the full published navigation (every department and its children, with parent and depth). Called with a query it searches the category index by name.","required_params":[],"optional_params":["query","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Optional category name to look up, Greek or English. Omit it for the whole published tree.","on_invalid":"ignore","example":"smartphone","aliases":["q","name"]},{"name":"limit","type":"integer","required":false,"description":"Maximum categories to return (1-1000).","on_invalid":"ignore","default":200,"example":200,"minimum":1,"maximum":1000}],"returns":"categories[]{category_id, name, url, level, parent} (tree) or {category_id, name, url, child_count} (search), total, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"smartphone"}},{"name":"suggest","description":"Shopflix's own search autocomplete: the real queries its shoppers type, with how many products each one matches. A cheap way to find the Greek wording that actually has a catalogue behind it before spending a `search` call.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"A prefix or partial word, Greek or English.","on_invalid":"reject","example":"iph","aliases":["q","prefix","term"]},{"name":"limit","type":"integer","required":false,"description":"Maximum suggestions to return (1-50).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"suggestions[]{query, product_count, popularity}, total, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iph"}}]},{"name":"shopgoodwill","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ShopGoodwill — US Goodwill charity auction marketplace","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/shopgoodwill/v1","spec_available":true,"actions":[{"name":"search","description":"Search LIVE ShopGoodwill listings — the US Goodwill charity auction marketplace, 650k+ open lots across 163 regional Goodwill sellers. Every row carries the auction facts that matter more than the price: current high bid, bid count, resolved end time and minimum next bid. Give query, or category_id, or seller_id (at least one of the three). The source serves a fixed 40 rows per page.","required_params":[],"optional_params":["query","category_id","seller_id","listing_type","min_price","max_price","pickup_only","exclude_pickup_only","one_cent_shipping_only","ships_to_canada","international_shipping_only","search_descriptions","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword text, 1-200 characters, matched against listing titles. At least one of query, category_id or seller_id is required.","on_invalid":"reject","example":"vintage camera","aliases":["q","search_text","keyword"]},{"name":"category_id","type":"integer","required":false,"description":"Numeric ShopGoodwill category ID from the categories action (for example 10 = Clothing, 99 = Books, 15 = Art).","on_invalid":"reject","example":15,"minimum":1,"maximum":999999,"aliases":["category"]},{"name":"seller_id","type":"integer","required":false,"description":"Numeric regional Goodwill seller ID from the sellers action (for example 6 = Wooster OH, 2 = Santa Ana CA).","on_invalid":"reject","example":6,"minimum":1,"maximum":999999,"aliases":["seller"]},{"name":"listing_type","type":"enum","required":false,"description":"Restrict to one sale format. Omit for every format.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Bid-only auctions"},{"value":"buy_now","label":"Fixed-price buy-now listings"},{"value":"auction_with_buy_now","label":"Auctions that also carry a buy-now price"}],"example":"auction"},{"name":"min_price","type":"number","required":false,"description":"Lowest current price in USD, inclusive. Measured to bite: coin with min_price 100 returned 40 rows whose cheapest row was exactly 100.00.","on_invalid":"reject","example":25,"minimum":0,"maximum":999999,"aliases":["low_price"]},{"name":"max_price","type":"number","required":false,"description":"Highest current price in USD, inclusive.","on_invalid":"reject","example":200,"minimum":0,"maximum":999999,"aliases":["high_price"]},{"name":"pickup_only","type":"boolean","required":false,"description":"Only lots that must be collected in person from the Goodwill location.","on_invalid":"reject","default":false,"example":false},{"name":"exclude_pickup_only","type":"boolean","required":false,"description":"Drop the local-pickup-only lots and keep everything that ships.","on_invalid":"reject","default":false,"example":false},{"name":"one_cent_shipping_only","type":"boolean","required":false,"description":"Only lots in the source's one-cent-shipping promotion.","on_invalid":"reject","default":false,"example":false},{"name":"ships_to_canada","type":"boolean","required":false,"description":"Only lots the seller will ship to Canada.","on_invalid":"reject","default":false,"example":false},{"name":"international_shipping_only","type":"boolean","required":false,"description":"Only lots with international shipping offered.","on_invalid":"reject","default":false,"example":false},{"name":"search_descriptions","type":"boolean","required":false,"description":"Widen the keyword match from the title into the listing description.","on_invalid":"reject","default":false,"example":false},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Each value was verified to actually reorder the result against two control queries.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"Ending soonest (source default)"},{"value":"ending_latest","label":"Ending latest"},{"value":"most_bids","label":"Most bids first"},{"value":"fewest_bids","label":"Fewest bids first"},{"value":"price_low","label":"Current price, low to high"},{"value":"price_high","label":"Current price, high to low"}],"default":"ending_soonest","example":"most_bids"},{"name":"page","type":"integer","required":false,"description":"One-based result page; the source serves a fixed 40 rows per page. last_page in the response is the final page that carries rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000}],"returns":"total (the source's own result count, uncapped), page, page_size 40, last_page, has_more, page_beyond_last, and listings[]: item_id, title, url, listing_type (auction / buy_now / auction_with_buy_now), current_price with price_basis (current_high_bid or fixed_price), currency USD, bid_count, starting_price, minimum_next_bid, buy_now_price, shipping_price, ends_at (ISO-8601 with the US Pacific offset), ends_at_local (the source's raw naive string), ends_at_is_placeholder, starts_at, seconds_remaining, ended, seller_id, category_id, category_name, quantity, is_stock_item, part_number and image_url. Measured on 373 rows over ten queries: every field above is populated except buy_now_price (100/373, only the buy-now formats) and part_number (13/373); quantity was 1 and is_stock_item false on all 373, because charity lots are one-of-a-kind.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"vintage camera","sort":"most_bids","page":1}},{"name":"sold","description":"Closed ShopGoodwill auctions — the same rows after the hammer, where current_price is the FINAL price the lot sold for and bid_count is the bidding that got it there. A sold-price comparable set for second-hand pricing. Covers a window of up to 30 days back from ending_before.","required_params":[],"optional_params":["query","category_id","seller_id","days_back","ending_before","listing_type","min_price","max_price","search_descriptions","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword text, 1-200 characters. At least one of query, category_id or seller_id is required.","on_invalid":"reject","example":"coin","aliases":["q","search_text","keyword"]},{"name":"category_id","type":"integer","required":false,"description":"Numeric category ID from the categories action.","on_invalid":"reject","example":15,"minimum":1,"maximum":999999,"aliases":["category"]},{"name":"seller_id","type":"integer","required":false,"description":"Numeric seller ID from the sellers action.","on_invalid":"reject","example":6,"minimum":1,"maximum":999999,"aliases":["seller"]},{"name":"days_back","type":"integer","required":false,"description":"How many days before ending_before to include. The source accepts 1 to 30.","on_invalid":"reject","default":7,"example":7,"minimum":1,"maximum":30},{"name":"ending_before","type":"string","required":false,"description":"Latest auction end date to include, as YYYY-MM-DD. Defaults to today in US Pacific, the source's own clock.","on_invalid":"reject","example":"2026-10-06","value_pattern":"\\d{4}-\\d{2}-\\d{2}","aliases":["end_date"]},{"name":"listing_type","type":"enum","required":false,"description":"Restrict to one sale format.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Bid-only auctions"},{"value":"buy_now","label":"Fixed-price buy-now listings"},{"value":"auction_with_buy_now","label":"Auctions that also carried a buy-now price"}],"example":"auction"},{"name":"min_price","type":"number","required":false,"description":"Lowest final price in USD, inclusive.","on_invalid":"reject","example":20,"minimum":0,"maximum":999999,"aliases":["low_price"]},{"name":"max_price","type":"number","required":false,"description":"Highest final price in USD, inclusive.","on_invalid":"reject","example":500,"minimum":0,"maximum":999999,"aliases":["high_price"]},{"name":"search_descriptions","type":"boolean","required":false,"description":"Widen the keyword match into the listing description.","on_invalid":"reject","default":false,"example":false},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"reject","allowed_values":[{"value":"ending_soonest","label":"Ended earliest first (source default)"},{"value":"ending_latest","label":"Ended most recently first"},{"value":"most_bids","label":"Most bids first"},{"value":"fewest_bids","label":"Fewest bids first"},{"value":"price_low","label":"Final price, low to high"},{"value":"price_high","label":"Final price, high to low"}],"default":"ending_soonest","example":"price_high"},{"name":"page","type":"integer","required":false,"description":"One-based result page; 40 rows per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000}],"returns":"Same listing shape as search, with current_price carrying the FINAL sale price, price_basis final_price, source_remaining_time 'Auction Ended', ended true and seconds_remaining 0; plus total, page, page_size 40, last_page, has_more and the window echoed as days_back and ending_before.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"coin","days_back":7,"sort":"price_high"}},{"name":"detail","description":"Full public detail for one lot by the item_id search returns: description, every gallery image, the auction clock, the reserve state, the bid increment, shipping and handling, the pickup address of the Goodwill that listed it, and the complete public bid log.","required_params":["item_id"],"optional_params":[],"params":[{"name":"item_id","type":"string","required":true,"description":"Numeric ShopGoodwill item ID as returned by search or sold.","on_invalid":"reject","example":"279091159","aliases":["id","itemId","listing_id"]}],"returns":"Every search field plus description and description_html, keywords, images[] and thumbnails[], category_path[] with IDs, bid_increment, max_quantity, has_reserve / reserve_met / reserve_price, handling_price, weight_lb, ships_internationally, pickup_only and pickup_location (street, city, state, zip, hours), seller (id, company_name, slug, shipper, url), seller_terms, shipping_policy, source_server_time, current_price_disagrees_with_bid_log, and bid_history with standing_bids[] and bid_log[] (source-masked bidder names, amounts, timestamps, retracted flag).","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"278936844"}},{"name":"bids","description":"The public bid log for one lot on its own: every bid placed with the source-masked bidder handle, the amount, the resulting price and the timestamp, plus the reserve state and whether the auction has closed. Works on live auctions as well as closed ones.","required_params":["item_id"],"optional_params":[],"params":[{"name":"item_id","type":"string","required":true,"description":"Numeric ShopGoodwill item ID as returned by search or sold.","on_invalid":"reject","example":"279091159","aliases":["id","itemId","listing_id"]}],"returns":"item_id, title, url, current_price, bid_count, bidder_count, auction_closed, has_reserve, reserve_met, reserve_price, ends_at, standing_bids[] (one row per bidder: bidder, amount, placed_at, quantity_won) and bid_log[] in time order (bidder, bid_amount, price_after_bid, placed_at, retracted, high_bidder_after, server_ip, bid_ip_address — both as the source sends them). Timestamps are published both resolved (placed_at) and raw (placed_at_local).","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"item_id":"278936844"}},{"name":"categories","description":"The ShopGoodwill category taxonomy as the site's own search publishes it: two levels, 29 top-level departments and 239 subcategories, each with the numeric category_id the search action takes.","required_params":[],"optional_params":["top_level_only"],"params":[{"name":"top_level_only","type":"boolean","required":false,"description":"Return only the 29 departments without their subcategories.","on_invalid":"reject","default":false,"example":false}],"returns":"categories[]: category_id, name, slug, level, parent_id, subcategory_count and nested subcategories[] with the same shape; plus top_level_count and total_count. The source's openItemCount is not published because it was 0 on all 268 nodes.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"top_level_only":false}},{"name":"sellers","description":"The directory of regional Goodwill organisations selling on the site (163 measured), with the numeric seller_id the search action takes and the US state and city each one ships and allows pickup from.","required_params":[],"optional_params":["state","query"],"params":[{"name":"state","type":"string","required":false,"description":"Two-letter US state code; filtered by this engine over the source's full directory, which carries no state parameter of its own.","on_invalid":"reject","example":"OH","value_pattern":"[A-Za-z]{2}"},{"name":"query","type":"string","required":false,"description":"Case-insensitive substring of the city or the organisation name; filtered by this engine over the source's full directory.","on_invalid":"reject","example":"Santa Ana","aliases":["q"]}],"returns":"sellers[]: seller_id, organisation, state, city, label and url; plus total (the source's full directory size) and returned (after any engine-side state/query filter).","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"state":"OH"}},{"name":"seller","description":"The public profile of one regional Goodwill seller: organisation name, mailing address, mission statement, return policy and customer service note.","required_params":["seller_id"],"optional_params":[],"params":[{"name":"seller_id","type":"integer","required":true,"description":"Numeric seller ID from the sellers action.","on_invalid":"reject","example":6,"minimum":1,"maximum":999999,"aliases":["id","seller"]}],"returns":"seller_id, organisation, street, city, state, zip, customer_service, mission_statement, return_policy and url. Fields the source publishes empty are returned as null, never as an empty string.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":6}},{"name":"seller_items","description":"The listings one regional Goodwill seller currently has open, as the site's own seller storefront shows them.","required_params":["seller_id"],"optional_params":[],"params":[{"name":"seller_id","type":"integer","required":true,"description":"Numeric seller ID from the sellers action.","on_invalid":"reject","example":6,"minimum":1,"maximum":999999,"aliases":["id","seller"]}],"returns":"seller_id, returned and listings[]: item_id, title, url, current_price, currency, bid_count, minimum_next_bid, buy_now_price, listing_type, ends_at and ends_at_local, starts_at, category_id, category_name, image_url. This storefront surface returns a short, source-chosen slice (5 rows for 5 of 5 sellers measured) and carries no paging handle; use search with seller_id for the full, pageable set.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":6}}]},{"name":"shopify","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Shopify Store API — browse products, variants, prices, and collections from any public Shopify store (no API key required)","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/shopify/v1","spec_available":true,"actions":[{"name":"products","description":"Paginated product catalog from any public Shopify store: title, vendor, variants, prices, inventory status, tags, and images.","required_params":["store"],"optional_params":["page","limit","max_items","vendor","product_type","tag","tags","title_contains","sku_contains","min_price","max_price","only_on_sale","only_in_stock","new_arrivals_days"],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Items per page (1–250; larger values are capped at 250).","on_invalid":"ignore","default":50,"minimum":1,"maximum":250},{"name":"max_items","type":"integer","required":false,"description":"Auto-walk pages until this many items are collected (overrides single-page mode; recommended when using filters).","on_invalid":"ignore","minimum":1},{"name":"vendor","type":"string","required":false,"description":"Only products whose vendor/brand contains this text (filter, post-fetch).","on_invalid":"ignore","example":"Allbirds"},{"name":"product_type","type":"string","required":false,"description":"Only products whose type contains this text (filter, post-fetch).","on_invalid":"ignore","example":"Shoes"},{"name":"tags","type":"string","required":false,"description":"Only products carrying at least one of these tags (comma-separated or a list; filter, post-fetch).","on_invalid":"ignore","example":"wool,summer","aliases":["tag"]},{"name":"title_contains","type":"string","required":false,"description":"Only products whose title contains this text (filter, post-fetch).","on_invalid":"ignore","example":"runner"},{"name":"sku_contains","type":"string","required":false,"description":"Only products with a variant SKU containing this text (filter, post-fetch).","on_invalid":"ignore"},{"name":"min_price","type":"number","required":false,"description":"Only products priced at or above this (store currency; post-fetch).","on_invalid":"ignore","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Only products priced at or below this (store currency; post-fetch).","on_invalid":"ignore","minimum":0},{"name":"only_on_sale","type":"boolean","required":false,"description":"Only products with at least one discounted variant.","on_invalid":"ignore","default":false},{"name":"only_in_stock","type":"boolean","required":false,"description":"Only products with at least one available variant.","on_invalid":"ignore","default":false},{"name":"new_arrivals_days","type":"integer","required":false,"description":"Only products published within the last N days.","on_invalid":"ignore","example":30,"minimum":1}],"returns":"products[]{id, title, handle, vendor, type, tags[], description, options[], variants[]{id, title, price, sku, available, compare_at_price, on_sale, discount_percent, inventory}, images[], price_min, price_max, available, on_sale, max_discount_percent, featured_image, url} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"allbirds.com","limit":5}},{"name":"product","description":"Full detail for a single Shopify product by its handle (URL slug) or product page URL: title, vendor, variants, prices, images, and inventory.","required_params":["store","handle"],"optional_params":[],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"},{"name":"handle","type":"string","required":true,"description":"Product handle — the slug in the product URL (…/products/<handle>); a full product URL also works.","on_invalid":"reject","example":"mens-tree-runners-mist"}],"returns":"product{…same shape as products[] items}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"allbirds.com","handle":"mens-tree-runners-mist"}},{"name":"collections","description":"Paginated list of public collections from a Shopify store: collection id, title, handle, description, and cover image.","required_params":["store"],"optional_params":["page","limit","max_items"],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Items per page (1–250; larger values are capped at 250).","on_invalid":"ignore","default":50,"minimum":1,"maximum":250},{"name":"max_items","type":"integer","required":false,"description":"Auto-walk pages until this many items are collected (overrides single-page mode; recommended when using filters).","on_invalid":"ignore","minimum":1}],"returns":"collections[]{id, title, handle, description_html, updated_at, image, url} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"kith.com","limit":5}},{"name":"collection_products","description":"Paginated products within a specific Shopify collection — same product shape as the products action, filterable and sortable.","required_params":["store","handle"],"optional_params":["page","limit","max_items","sort_by","vendor","product_type","tag","tags","title_contains","sku_contains","min_price","max_price","only_on_sale","only_in_stock","new_arrivals_days"],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"},{"name":"handle","type":"string","required":true,"description":"Collection handle — the slug in the collection URL (…/collections/<handle>); take it from the collections action. A full collection URL also works.","on_invalid":"reject","example":"all"},{"name":"sort_by","type":"enum","required":false,"description":"Requested ordering — passed to the store's collection endpoint, but MANY stores ignore it (theme-dependent); ordering is not guaranteed. Aliases like priceAsc/newest are also accepted.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price-ascending","label":"Price: low to high"},{"value":"price-descending","label":"Price: high to low"},{"value":"created-descending","label":"Newest"},{"value":"best-selling","label":"Best selling"},{"value":"title-ascending","label":"Title A–Z"}]},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Items per page (1–250; larger values are capped at 250).","on_invalid":"ignore","default":50,"minimum":1,"maximum":250},{"name":"max_items","type":"integer","required":false,"description":"Auto-walk pages until this many items are collected (overrides single-page mode; recommended when using filters).","on_invalid":"ignore","minimum":1},{"name":"vendor","type":"string","required":false,"description":"Only products whose vendor/brand contains this text (filter, post-fetch).","on_invalid":"ignore","example":"Allbirds"},{"name":"product_type","type":"string","required":false,"description":"Only products whose type contains this text (filter, post-fetch).","on_invalid":"ignore","example":"Shoes"},{"name":"tags","type":"string","required":false,"description":"Only products carrying at least one of these tags (comma-separated or a list; filter, post-fetch).","on_invalid":"ignore","example":"wool,summer","aliases":["tag"]},{"name":"title_contains","type":"string","required":false,"description":"Only products whose title contains this text (filter, post-fetch).","on_invalid":"ignore","example":"runner"},{"name":"sku_contains","type":"string","required":false,"description":"Only products with a variant SKU containing this text (filter, post-fetch).","on_invalid":"ignore"},{"name":"min_price","type":"number","required":false,"description":"Only products priced at or above this (store currency; post-fetch).","on_invalid":"ignore","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Only products priced at or below this (store currency; post-fetch).","on_invalid":"ignore","minimum":0},{"name":"only_on_sale","type":"boolean","required":false,"description":"Only products with at least one discounted variant.","on_invalid":"ignore","default":false},{"name":"only_in_stock","type":"boolean","required":false,"description":"Only products with at least one available variant.","on_invalid":"ignore","default":false},{"name":"new_arrivals_days","type":"integer","required":false,"description":"Only products published within the last N days.","on_invalid":"ignore","example":30,"minimum":1}],"returns":"products[]{id, title, handle, vendor, type, tags[], description, options[], variants[]{id, title, price, sku, available, compare_at_price, on_sale, discount_percent, inventory}, images[], price_min, price_max, available, on_sale, max_discount_percent, featured_image, url} — products of ONE collection (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"allbirds.com","handle":"mens-tree-runners-mist"}},{"name":"search","description":"Predictive search across a Shopify store: matching products (title, price, variants, image) plus optional collection, page, and autocomplete query suggestions.","required_params":["store","query"],"optional_params":["limit","page","max_items","resource_types","resources","vendor","product_type","tag","tags","min_price","max_price","only_on_sale","only_in_stock"],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"},{"name":"query","type":"string","required":true,"description":"What to search for in the store.","on_invalid":"reject","example":"wool"},{"name":"limit","type":"integer","required":false,"description":"Results per page (1–250; larger values are capped at 250).","on_invalid":"ignore","default":10,"minimum":1,"maximum":250},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"max_items","type":"integer","required":false,"description":"Auto-walk pages until this many items are collected (overrides single-page mode; recommended when using filters).","on_invalid":"ignore","minimum":1},{"name":"resource_types","type":"string","required":false,"description":"Comma-separated suggest resources to include: product, collection, page, query (default product). 'query' returns the store's autocomplete search-term suggestions.","on_invalid":"ignore","example":"product,collection","aliases":["resources"]},{"name":"vendor","type":"string","required":false,"description":"Only products whose vendor/brand contains this text (filter, post-fetch).","on_invalid":"ignore","example":"Allbirds"},{"name":"product_type","type":"string","required":false,"description":"Only products whose type contains this text (filter, post-fetch).","on_invalid":"ignore","example":"Shoes"},{"name":"tags","type":"string","required":false,"description":"Only products carrying at least one of these tags (comma-separated or a list; filter, post-fetch).","on_invalid":"ignore","example":"wool,summer","aliases":["tag"]},{"name":"min_price","type":"number","required":false,"description":"Only products priced at or above this (store currency; post-fetch).","on_invalid":"ignore","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Only products priced at or below this (store currency; post-fetch).","on_invalid":"ignore","minimum":0},{"name":"only_on_sale","type":"boolean","required":false,"description":"Only products with at least one discounted variant.","on_invalid":"ignore","default":false},{"name":"only_in_stock","type":"boolean","required":false,"description":"Only products with at least one available variant.","on_invalid":"ignore","default":false}],"returns":"products[]{id, title, handle, vendor, type, tags[], description, options[], variants[]{id, title, price, sku, available, compare_at_price, on_sale, discount_percent, inventory}, images[], price_min, price_max, available, on_sale, max_discount_percent, featured_image, url} — predictive product matches for `query`; plus collections[], pages[], query_suggestions[] when requested via resource_types (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"allbirds.com","query":"wool"}},{"name":"recommendations","description":"Related or complementary products that a Shopify store recommends for a given product — the store's own 'you may also like' / 'goes well with' set, same rich product shape.","required_params":["store","handle"],"optional_params":["intent","limit"],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"},{"name":"handle","type":"string","required":true,"description":"Product handle — the slug in the product URL (…/products/<handle>); a full product URL also works.","on_invalid":"reject","example":"mens-tree-runners-mist"},{"name":"intent","type":"enum","required":false,"description":"Which Shopify recommendation set to return. 'related' = similar products (works on every store); 'complementary' = goes-well-with picks (only on stores that configured Search & Discovery — falls back to related).","on_invalid":"ignore","allowed_values":[{"value":"related","label":"Similar products"},{"value":"complementary","label":"Complementary / goes-well-with"}],"default":"related"},{"name":"limit","type":"integer","required":false,"description":"How many recommended products to return (1–250).","on_invalid":"ignore","default":10,"minimum":1,"maximum":250}],"returns":"products[]{id, title, handle, vendor, type, tags[], description, options[], variants[]{id, title, price, sku, available, compare_at_price, on_sale, discount_percent, inventory}, images[], price_min, price_max, available, on_sale, max_discount_percent, featured_image, url} — the store's recommended products for the given product (meta.intent shows which set was returned)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"allbirds.com","handle":"mens-tree-runners-mist","limit":4}},{"name":"collection","description":"Metadata for a single Shopify collection by handle: title, description, cover image, published/updated dates, and product count.","required_params":["store","handle"],"optional_params":[],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"},{"name":"handle","type":"string","required":true,"description":"Collection handle — the slug in the collection URL (…/collections/<handle>). A full collection URL also works.","on_invalid":"reject","example":"all"}],"returns":"collection{id, title, handle, description, description_html, image, products_count, published_at, updated_at, url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"allbirds.com","handle":"mens-tree-runners-mist"}},{"name":"pages","description":"Content pages published on a Shopify store (About, FAQ, Shipping, size guides, etc.): title, handle, URL, and HTML/plain-text body.","required_params":["store"],"optional_params":["page","limit","max_items"],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3…).","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Items per page (1–250; larger values are capped at 250).","on_invalid":"ignore","default":50,"minimum":1,"maximum":250},{"name":"max_items","type":"integer","required":false,"description":"Auto-walk pages until this many items are collected (overrides single-page mode; recommended when using filters).","on_invalid":"ignore","minimum":1}],"returns":"pages[]{id, title, handle, url, body_html, body_text, published_at, updated_at} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"allbirds.com"}},{"name":"store_info","description":"Rich profile for a Shopify store: name, currency, country/city, product & collection counts, accepted card brands, social links, myshopify domain, and platform confirmation.","required_params":["store"],"optional_params":[],"params":[{"name":"store","type":"string","required":true,"description":"Shopify store domain or URL (e.g. allbirds.com or https://shop.example.com) — works for ANY Shopify-powered store.","on_invalid":"reject","example":"allbirds.com"}],"returns":"platform + store + name + domain + myshopify_domain + currency + money_format + country + city + province + ships_to_countries[] + published_products_count + published_collections_count + card_brands[] + socials[] + description + raw{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"store":"allbirds.com"}}]},{"name":"sidelineswap","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"SidelineSwap — used sporting goods marketplace (US)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/sidelineswap/v1","spec_available":true,"actions":[{"name":"search","description":"Search SidelineSwap's used and new sporting-goods listings across 36 sports (450,265 live listings measured 2026-10-07), or the 2,086,728 SOLD listings with the price they actually transacted at. Filter by sport or category, brand, model, condition, handedness, pro-stock vs retail, price, seller type, seller region, US ZIP proximity and the source's own category-specific attributes (hockey-stick flex, curve pattern, stick length, ski boot size, soccer size…). Needs no account and no key. Pass at least one of query, category, model or seller unless you really want the whole catalogue.","required_params":[],"optional_params":["query","category","detail","condition","hand","pro_stock","brand","model","min_price","max_price","state","item_type","seller_option","seller_location","superlative","seller","near_zip","sort","page","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over listing titles. The source's own key is `q`; `query`, `keywords`, `search` and `term` are silently DROPPED upstream (measured: 450,268 rows instead of 20,711), so this engine always sends the one that works.","on_invalid":"reject","example":"bauer proto2 hockey stick","aliases":["q","keywords","search"]},{"name":"category","type":"string","required":false,"description":"Sport or category. Either a top-level sport slug — apparel, athlete-bundles, baseball, basketball, bikes, bowling, disc-golf, electronics-gaming-esports, equestrian, fencing, field-hockey-category, figure-skating, fishing, fitness, fitness-trackers-wearables, football, footwear, golf, hike-camp, hockey, inline-roller, lacrosse, memorabilia, motocross, other-others, paintball, skateboarding, skiing, snowboarding, snowshoe, soccer, softball, surf-wake-water, tennis-racquet-sports, womens-lacrosse, wrestling — or a numeric category id from the categories action (deeper categories such as hockey Sticks = 110023 only have an id). A numeric id is checked against the source's own taxonomy first, because sidelineswap answers HTTP 200 and THE WHOLE CATALOGUE for an id it does not know.","on_invalid":"reject","example":"hockey","aliases":["sport","category_id"]},{"name":"detail","type":"array","required":false,"description":"Category-specific attribute ids, from the filters action — this is where the vertical values live: hockey-stick Flex, Pattern/curve, Stick Length, Is This Stick Cut, Stick Pack, Age Group, ski Boot Size, soccer Size, golf Gender, Country of Manufacture. Repeatable. Requires category, because the ids are scoped to a category and every id is validated against that category's own taxonomy before the search is sent. Age group is here rather than as its own parameter because its ids differ per sport (hockey Senior 23077, baseball Adult 23076, baseball Tee Ball 24029).","on_invalid":"reject","example":[76,29871],"aliases":["detail_ids","attributes"]},{"name":"condition","type":"array","required":false,"description":"The source's own two condition tiers. Global ids, verified identical across 8 sports (New 31 / Used 17).","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used","label":"Used"}],"example":["used"]},{"name":"hand","type":"array","required":false,"description":"Handedness, for the categories that carry it (hockey sticks, golf clubs, baseball/softball gloves). Measured to bite: 12,137 left vs 7,119 right of 19,238 hockey sticks, and 6/6 returned rows carried Hand=Right in their own attribute block.","on_invalid":"reject","allowed_values":[{"value":"left","label":"Left-handed"},{"value":"right","label":"Right-handed"}],"example":["right"]},{"name":"pro_stock","type":"array","required":false,"description":"Pro-stock vs retail. This is a real market split on this source: 22,148 of 86,649 hockey listings are pro stock.","on_invalid":"reject","allowed_values":[{"value":"pro_stock","label":"Pro stock — team-issued, not a retail SKU"},{"value":"retail","label":"Retail product"}],"example":["pro_stock"]},{"name":"brand","type":"array","required":false,"description":"Brand ids from the filters action (hockey: Bauer 68, CCM 69, Warrior 2). Repeatable. Note the source uses `brand` here and `brand_id` on the models action — the engine sends each the name that one accepts.","on_invalid":"reject","example":[68],"aliases":["brand_ids"]},{"name":"model","type":"integer","required":false,"description":"A model id from the models action, e.g. 266943 = Bauer Proto2 Hockey Stick. CANNOT be combined with brand, detail, condition, hand or pro_stock: the source silently ignores all of them when model is set, so the engine rejects that combination instead of reporting a filter that did nothing. min_price, max_price, state and sort do still work with it.","on_invalid":"reject","example":266943,"aliases":["model_id"]},{"name":"min_price","type":"number","required":false,"description":"Lowest asking price in USD, inclusive.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest asking price in USD, inclusive.","on_invalid":"reject","example":400,"minimum":0,"aliases":["price_max"]},{"name":"state","type":"enum","required":false,"description":"Which side of the market to read. The three modes are exactly additive, measured on hockey sticks: available 19,245 + sold 149,405 = all 168,650.","on_invalid":"reject","allowed_values":[{"value":"available","label":"Live listings only (the source's default; a handful of just-sold rows can still appear — meta.sold_rows_in_available counts them)"},{"value":"sold","label":"SOLD listings only, with the price they actually transacted at"},{"value":"all","label":"Live and sold together (measured to be exactly the sum of the two)"}],"default":"available","example":"available"},{"name":"item_type","type":"array","required":false,"description":"Listing-type flags the source itself facets on. Measured inside hockey: price_drop 6,441 of 86,649; us_free_shipping 872; auction 17.","on_invalid":"reject","allowed_values":[{"value":"accepts_offers","label":"Accepts Offers"},{"value":"auction","label":"Auction"},{"value":"canada_free_shipping","label":"Canada Free Shipping"},{"value":"expedited_shipping","label":"Expedited Shipping"},{"value":"price_drop","label":"Price Drop"},{"value":"recently_sold","label":"Recently Sold"},{"value":"us_free_shipping","label":"Us Free Shipping"}],"example":["price_drop"]},{"name":"seller_option","type":"array","required":false,"description":"Seller-type flags. Measured inside hockey: shop (business) 41,498; pro_seller 31,546; locker (individual) 45,150; charity 903.","on_invalid":"reject","allowed_values":[{"value":"charity","label":"Charity"},{"value":"curated","label":"Curated"},{"value":"elite","label":"Elite"},{"value":"fast_shipper","label":"Fast Shipper"},{"value":"locker","label":"Locker"},{"value":"pro_seller","label":"Pro Seller"},{"value":"pro_stock_reseller","label":"Pro Stock Reseller"},{"value":"shop","label":"Shop"},{"value":"sidelineswap_athlete","label":"Sidelineswap Athlete"},{"value":"verified_athlete","label":"Verified Athlete"}],"example":["shop"]},{"name":"seller_location","type":"array","required":false,"description":"Where the seller ships from. Measured inside hockey: canada 18,372; us_midwest 23,727; us_northeast 21,673.","on_invalid":"reject","allowed_values":[{"value":"canada","label":"CANADA"},{"value":"us","label":"US"},{"value":"us_midwest","label":"US MIDWEST"},{"value":"us_northeast","label":"US NORTHEAST"},{"value":"us_south","label":"US SOUTH"},{"value":"us_west","label":"US WEST"}],"example":["canada"]},{"name":"superlative","type":"array","required":false,"description":"The source's own editorial picks. Measured inside hockey: rare_find 4,294; best_seller 4,462; new_release 14.","on_invalid":"reject","allowed_values":[{"value":"rare_find","label":"Rare Find"},{"value":"best_seller","label":"Best Seller"},{"value":"new_release","label":"New Release"}],"example":["rare_find"]},{"name":"seller","type":"string","required":false,"description":"One seller's listings, by marketplace USERNAME (a numeric value returns 0 rows upstream and is refused here).","on_invalid":"reject","example":"WestProStock","aliases":["username"]},{"name":"near_zip","type":"string","required":false,"description":"5-digit US ZIP code; the source re-ranks and narrows to sellers near it (measured: 66,402 of 450,265 for 20146).","on_invalid":"reject","example":"20146","value_pattern":"\\d{5}","aliases":["close_to","zip"]},{"name":"sort","type":"enum","required":false,"description":"The source's own six orders. An unknown value is silently ignored upstream (relevance order, full catalogue), so this is a closed list. Relevance order is NOT stable between calls — use newest or a price order when you need a repeatable page.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Recommended — the source's own default order"},{"value":"newest","label":"Newest listings first"},{"value":"last_updated","label":"Most recently updated first"},{"value":"trending","label":"Trending / most popular first"},{"value":"price_desc","label":"Price: high to low"},{"value":"price_asc","label":"Price: low to high"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. Past the last page the source answers an EMPTY page with has_more=false — it does not repeat the last page (measured: hockey-stick pages 963, 964 and 1000 all came back empty and byte-identical).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-200 (the source's own default is 20; 20 rows measured 28.7 KB / 1.2 s, 200 rows 285 KB / 2.3 s).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":200,"aliases":["per_page","limit"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: sidelineswap publishes a marketplace username, region and badge/feedback totals and no personal contact detail, so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{query, total, page, page_size, last_page, has_more, state, sort, filters_applied{}, sold_rows_in_available, items[{id, name, state, price_usd, list_price_usd, retail_price_usd, discount_vs_retail_pct, condition{id,slug,name}, sport, category_slug, url, image{}, seller{id,username,url,emblems,badges,feedback_score,feedback_count,avatar_url}, favorites, views, label, sold_via_offer, listed_at, updated_at}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"110023","detail":[76],"condition":["used"],"min_price":50,"sort":"price_asc","page_size":20}},{"name":"detail","description":"One listing in full, as the item page publishes it: the seller's own description, every category-specific attribute as its OWN field (flex, pattern, hand, stick length, age group, boot size…), condition tier, asking price against retail price, parcel dimensions and weight, shipping and delivery estimate, all photos, offer and auto-price-drop settings, and the full seller block with badges and feedback totals. Works for sold listings too, where `price_usd` is the transacted price and `sold_via_offer` says whether it went through an accepted offer.","required_params":["id"],"optional_params":["include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"Listing id, or the full sidelineswap.com listing URL (the id is the number at the start of the last path segment). Works for sold listings too, where price_usd is the price it transacted at.","on_invalid":"reject","example":"12755098","aliases":["item_id","listing_id","url"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: sidelineswap publishes a marketplace username, region and badge/feedback totals and no personal contact detail, so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{item{id, uuid, name, state, description, price_usd, list_price_usd, retail_price_usd, discount_vs_retail_pct, condition{}, attributes[{slug,name,values[{id,slug,name}]}], attributes_flat{}, sport, category_slug, categories[], brand, model{id,name,display_name,gtin,mpn,url}, gtin, mpn, quantity, accepts_offers, sold_via_offer, auto_price_drop, auto_price_drop_min_usd, bundle, superlative_label, favorites, interested_count, views, google_product_category, shipping{}, parcel{}, buyer_protection_available, actions[], images[], seller{}, url, listed_at, updated_at, noindex}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"12755098"}},{"name":"comps","description":"Sold-price comparables: what gear of this kind ACTUALLY sold for on SidelineSwap, not what it is being asked for. Reads the source's sold side (2,086,728 sold listings) for one model, category or search term and returns min / p25 / median / p75 / max / mean over the sample plus the live-side statistics for the same query, so an asking price can be read against the transacted ones. Each sold row keeps its own price, condition, date and whether the sale went through an accepted offer. Pass at least one of model, category or query.","required_params":[],"optional_params":["model","category","query","detail","brand","condition","sample_size","min_price","max_price","include_rows","include_pii"],"params":[{"name":"model","type":"integer","required":false,"description":"A model id from the models action — the sharpest comparable set, e.g. 266943 = Bauer Proto2 Hockey Stick (912 sold, 252 live).","on_invalid":"reject","example":266943,"aliases":["model_id"]},{"name":"category","type":"string","required":false,"description":"Sport or category. Either a top-level sport slug — apparel, athlete-bundles, baseball, basketball, bikes, bowling, disc-golf, electronics-gaming-esports, equestrian, fencing, field-hockey-category, figure-skating, fishing, fitness, fitness-trackers-wearables, football, footwear, golf, hike-camp, hockey, inline-roller, lacrosse, memorabilia, motocross, other-others, paintball, skateboarding, skiing, snowboarding, snowshoe, soccer, softball, surf-wake-water, tennis-racquet-sports, womens-lacrosse, wrestling — or a numeric category id from the categories action (deeper categories such as hockey Sticks = 110023 only have an id). A numeric id is checked against the source's own taxonomy first, because sidelineswap answers HTTP 200 and THE WHOLE CATALOGUE for an id it does not know.","on_invalid":"reject","example":"hockey","aliases":["sport","category_id"]},{"name":"query","type":"string","required":false,"description":"Free-text narrowing, same key as search.","on_invalid":"reject","example":"bauer proto2","aliases":["q"]},{"name":"detail","type":"array","required":false,"description":"Category-specific attribute ids, from the filters action — this is where the vertical values live: hockey-stick Flex, Pattern/curve, Stick Length, Is This Stick Cut, Stick Pack, Age Group, ski Boot Size, soccer Size, golf Gender, Country of Manufacture. Repeatable. Requires category, because the ids are scoped to a category and every id is validated against that category's own taxonomy before the search is sent. Age group is here rather than as its own parameter because its ids differ per sport (hockey Senior 23077, baseball Adult 23076, baseball Tee Ball 24029). Not available together with model.","on_invalid":"reject","example":[76]},{"name":"brand","type":"array","required":false,"description":"Brand ids from the filters action. Not available together with model.","on_invalid":"reject","example":[68]},{"name":"condition","type":"array","required":false,"description":"Condition tier. Not available together with model.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used","label":"Used"}],"example":["used"]},{"name":"sample_size","type":"integer","required":false,"description":"How many sold listings to read for the statistics, 1-200. The statistics describe THIS SAMPLE; `total_sold` is the source's full count and is usually much larger, so sold_sample_size is always reported next to it.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":200},{"name":"min_price","type":"number","required":false,"description":"Drop sold rows below this USD price before computing statistics.","on_invalid":"reject","example":50,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Drop sold rows above this USD price before computing statistics.","on_invalid":"reject","example":2000,"minimum":0},{"name":"include_rows","type":"boolean","required":false,"description":"Return the individual sold listings alongside the statistics.","on_invalid":"reject","default":true,"example":true},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: sidelineswap publishes a marketplace username, region and badge/feedback totals and no personal contact detail, so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{filters_applied{}, total_sold, sold_sample_size, sold_price_stats{count,min_usd,p25_usd,median_usd,p75_usd,max_usd,mean_usd}, total_available, available_sample_size, available_price_stats{}, median_sold_vs_available_pct, sold_items[], available_items[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"model":266943,"sample_size":60}},{"name":"categories","description":"SidelineSwap's own category tree: 36 listable top-level sports and 806 nodes in all. This is where the numeric category ids that search, comps, filters and models take come from. Call it with no parameters for the sports, or with a sport to walk into it (hockey has 16 children).","required_params":[],"optional_params":["category","depth","include_pii"],"params":[{"name":"category","type":"string","required":false,"description":"Limit the tree to one sport slug or category id. Omit it for all 36 sports.","on_invalid":"reject","example":"hockey","aliases":["sport","category_id"]},{"name":"depth","type":"integer","required":false,"description":"How many levels of children to include. 0 = the nodes themselves, 1 = one level of children (the default), 4 = the whole subtree.","on_invalid":"reject","default":1,"example":1,"minimum":0,"maximum":4},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: sidelineswap publishes a marketplace username, region and badge/feedback totals and no personal contact detail, so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{count, categories[{id, slug, name, full_name, listable, child_count, url, children[…]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"hockey","depth":1}},{"name":"filters","description":"The attribute taxonomy SidelineSwap itself uses for one category — the lookup table behind the `detail` parameter of search and comps. For hockey sticks it returns 13 groups including Flex (88 values), Pattern (64 curves), Stick Length (48), Hand, Age Group, Pro Stock, Is This Stick Cut, Stick Pack and Brand (65); for skiing it returns Boot Size; for soccer, Size. Each value carries the id to pass back. Which groups exist depends on the category, which is why this is a per-category lookup and not one global list.","required_params":["category"],"optional_params":["include_pii"],"params":[{"name":"category","type":"string","required":true,"description":"Sport or category. Either a top-level sport slug — apparel, athlete-bundles, baseball, basketball, bikes, bowling, disc-golf, electronics-gaming-esports, equestrian, fencing, field-hockey-category, figure-skating, fishing, fitness, fitness-trackers-wearables, football, footwear, golf, hike-camp, hockey, inline-roller, lacrosse, memorabilia, motocross, other-others, paintball, skateboarding, skiing, snowboarding, snowshoe, soccer, softball, surf-wake-water, tennis-racquet-sports, womens-lacrosse, wrestling — or a numeric category id from the categories action (deeper categories such as hockey Sticks = 110023 only have an id). A numeric id is checked against the source's own taxonomy first, because sidelineswap answers HTTP 200 and THE WHOLE CATALOGUE for an id it does not know.","on_invalid":"reject","example":"110023","aliases":["sport","category_id"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: sidelineswap publishes a marketplace username, region and badge/feedback totals and no personal contact detail, so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{category_id, count, groups[{slug, name, required, value_count, values[{id, slug, name}]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"110023"}},{"name":"models","description":"The model catalogue for a category: the named products SidelineSwap groups listings under, with the brand, the source's own GTIN/MPN where it has them, how many are available and how many have sold, and the model's live price range. This is where the `model` id for search and comps comes from. Note the source wants `brand_id` on this endpoint while search wants `brand` — the engine sends each the name that one actually accepts; `brand` here is ignored upstream and would quietly return every brand's models.","required_params":["category"],"optional_params":["brand","query","include_pii"],"params":[{"name":"category","type":"string","required":true,"description":"Sport or category. Either a top-level sport slug — apparel, athlete-bundles, baseball, basketball, bikes, bowling, disc-golf, electronics-gaming-esports, equestrian, fencing, field-hockey-category, figure-skating, fishing, fitness, fitness-trackers-wearables, football, footwear, golf, hike-camp, hockey, inline-roller, lacrosse, memorabilia, motocross, other-others, paintball, skateboarding, skiing, snowboarding, snowshoe, soccer, softball, surf-wake-water, tennis-racquet-sports, womens-lacrosse, wrestling — or a numeric category id from the categories action (deeper categories such as hockey Sticks = 110023 only have an id). A numeric id is checked against the source's own taxonomy first, because sidelineswap answers HTTP 200 and THE WHOLE CATALOGUE for an id it does not know.","on_invalid":"reject","example":"110023","aliases":["sport","category_id"]},{"name":"brand","type":"integer","required":false,"description":"One brand id from the filters action (hockey: Bauer 68, CCM 69). Measured: narrows hockey-stick models from 250 across many brands to 196 Bauer models.","on_invalid":"reject","example":68,"aliases":["brand_id"]},{"name":"query","type":"string","required":false,"description":"Free-text narrowing on the model name (measured: 'proto' inside hockey sticks → 3 models, 4.8 KB instead of 355 KB).","on_invalid":"reject","example":"proto","aliases":["q"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: sidelineswap publishes a marketplace username, region and badge/feedback totals and no personal contact detail, so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{category_id, count, models[{id, name, display_name, brand, brand_id, category, category_id, gtin, mpn, available_count, sold_count, price_min_usd, price_max_usd, expert_pick, popular, description, url}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"110023","brand":68,"query":"proto"}},{"name":"seller","description":"A seller's public marketplace profile: username, badges and emblems, feedback score with the positive/neutral/negative split, sales and follower counts, the region and country they ship from, and their live/sold/draft listing counts. Optionally their current listings and their received feedback comments. Public profile data only — the source publishes no name, street address, phone or e-mail on this surface and this engine does not go looking for any.","required_params":["username"],"optional_params":["include_items","include_feedback","page_size","include_pii"],"params":[{"name":"username","type":"string","required":true,"description":"Marketplace username, or the numeric user id, or the profile URL.","on_invalid":"reject","example":"WestProStock","aliases":["seller","user","id"]},{"name":"include_items","type":"boolean","required":false,"description":"Also return the seller's current live listings.","on_invalid":"reject","default":true,"example":true},{"name":"include_feedback","type":"boolean","required":false,"description":"Also return the feedback comments buyers left, with rating and date.","on_invalid":"reject","default":false,"example":false},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-200 (the source's own default is 20; 20 rows measured 28.7 KB / 1.2 s, 200 rows 285 KB / 2.3 s).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":200,"aliases":["per_page","limit"]},{"name":"include_pii","type":"boolean","required":false,"description":"Kept for contract compatibility. It changes nothing here: sidelineswap publishes a marketplace username, region and badge/feedback totals and no personal contact detail, so there is nothing to hold back.","on_invalid":"reject","default":false,"example":false}],"returns":"{seller{id, uuid, username, url, avatar_url, cover_url, emblems, badges, feedback{score,count,count_positive,count_neutral,count_negative}, feedback_avg, sales_count, follower_count, following_count, ships_from_country, ships_from_region, item_count{available,sold,draft,removed}, power_seller, ambassador, indexable, on_vacation}, items[], feedback_comments[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"WestProStock","include_items":true}}]},{"name":"sitejabber","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Sitejabber API — business reviews, ratings and TrustScore scraper: overall star rating, total review count, 5-to-1-star rating distribution, sub-ratings (service, value, shipping, returns, quality), and every customer review with rating, text, date, country, verified status, helpful votes and the business's reply — by domain, plus business search and category browse from Sitejabber.com (SmartCustomer), no API key required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/sitejabber/v1","spec_available":true,"actions":[{"name":"reviews","description":"Get a business's customer reviews from Sitejabber by domain — paginated, 20 per page. Each review has the 1-5 star rating, title, full text, the five sub-ratings (service, value, shipping, returns, quality), date, the reviewer's country, verified status, products used, helpful/not-helpful vote counts and the business's reply. Page with `page` until meta.pagination.has_more is false.","required_params":["domain"],"optional_params":["page"],"params":[{"name":"domain","type":"string","required":true,"description":"The business's website domain on Sitejabber, e.g. 'amazon.com' or 'nike.com' (a full sitejabber.com/reviews/<domain> URL also works).","on_invalid":"reject","example":"amazon.com","aliases":["company","company_domain","business","url","site"]},{"name":"page","type":"integer","required":false,"description":"Page number. Reviews are 20 per page — page until meta.pagination.has_more is false (meta.pagination.total tells you the total review count).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"reviews[]{review_id, review_no, rating, title, text, tip, sub_ratings, date, experience_date, is_verified, helpful_votes, not_helpful_votes, comment_count, products_used, reviewer_name*, reviewer_country*, business_reply, photo_count, url} + business{name, domain, rating, review_count} + meta.pagination{page, per_page, total, has_more, next_page} (*reviewer name/country redacted by default; pass include_pii=true for full data)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":1},"example_params":{"domain":"amazon.com"}},{"name":"aggregate","description":"The rating summary for a business by domain (no individual reviews) — overall star rating, total review count, the 5★→1★ rating distribution, and the five sub-rating averages (service, value, shipping, returns, quality). Cheaper than `reviews` when you only need the score.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The business's website domain on Sitejabber, e.g. 'amazon.com' or 'nike.com' (a full sitejabber.com/reviews/<domain> URL also works).","on_invalid":"reject","example":"amazon.com","aliases":["company","company_domain","business","url","site"]}],"returns":"business{name, domain, rating, review_count, sub_ratings} + rating_distribution{5_star..1_star} + total_reviews","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"amazon.com"}},{"name":"detail","description":"The full business profile on Sitejabber by domain — name, website, founded year, industry, the AI summary of what customers say, categories, overall rating, total review count, sub-rating breakdown and the rating distribution.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"The business's website domain on Sitejabber, e.g. 'amazon.com' or 'nike.com' (a full sitejabber.com/reviews/<domain> URL also works).","on_invalid":"reject","example":"amazon.com","aliases":["company","company_domain","business","url","site"]}],"returns":"business{business_id, name, domain, website, title, description, ai_summary, founded, subindustry, categories[], rating, review_count, sub_ratings, views} + rating_distribution{5_star..1_star} + similar_businesses[]{name, domain}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"nike.com"}},{"name":"search","description":"Search Sitejabber for businesses by name or keyword — returns matching businesses with name, domain, overall rating, total review count, industry and AI summary. 28 per page.","required_params":["query"],"optional_params":["page"],"params":[{"name":"query","type":"string","required":true,"description":"The business name or keyword to search for (e.g. 'amazon', 'shoes', 'vpn').","on_invalid":"reject","example":"amazon","aliases":["q","name"]},{"name":"page","type":"integer","required":false,"description":"Page number. Reviews are 20 per page — page until meta.pagination.has_more is false (meta.pagination.total tells you the total review count).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"businesses[]{business_id, name, domain, website, rating, review_count, subindustry, categories[]} + meta.pagination{page, total, has_more, next_page}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"amazon"}},{"name":"category","description":"Browse the businesses listed in a Sitejabber category — returns each business's name, domain, rating, review count and industry, ranked. 10 per page; paginate with `page`. Pick a top-level category from the list, or pass any deeper sub-category slug from a sitejabber.com/categories/<slug> URL (e.g. 'banking', 'insurance', 'web-hosting', 'dating') — those work too.","required_params":["category"],"optional_params":["page"],"params":[{"name":"category","type":"enum","required":true,"description":"The Sitejabber category. Choose a top-level slug from the list, or type any deeper sub-category slug from a sitejabber.com/categories/<slug> URL — those resolve too.","on_invalid":"ignore","allowed_values":[{"value":"shopping","label":"Shopping"},{"value":"clothing-fashion","label":"Clothing & Fashion"},{"value":"computers-technology","label":"Computers & Technology"},{"value":"beauty","label":"Beauty"},{"value":"health","label":"Health"},{"value":"home-garden","label":"Home & Garden"},{"value":"food-drink","label":"Food & Drink"},{"value":"travel","label":"Travel"},{"value":"finance","label":"Finance"},{"value":"cryptocurrency","label":"Cryptocurrency"},{"value":"business","label":"Business"},{"value":"education","label":"Education"},{"value":"entertainment","label":"Entertainment"},{"value":"autos-vehicles","label":"Autos & Vehicles"},{"value":"real-estate","label":"Real Estate"},{"value":"pets-animals","label":"Pets & Animals"},{"value":"baby-kids","label":"Baby & Kids"},{"value":"sports","label":"Sports"},{"value":"hobbies-interests","label":"Hobbies & Interests"},{"value":"art-design","label":"Art & Design"},{"value":"relationships","label":"Relationships"},{"value":"jobs","label":"Jobs"},{"value":"law-government","label":"Law & Government"},{"value":"news","label":"News"},{"value":"science","label":"Science"},{"value":"society","label":"Society"},{"value":"reference","label":"Reference"},{"value":"black-owned","label":"Black-Owned"}],"example":"shopping","aliases":["slug","category_slug"]},{"name":"page","type":"integer","required":false,"description":"Page number. Reviews are 20 per page — page until meta.pagination.has_more is false (meta.pagination.total tells you the total review count).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"businesses[]{business_id, name, domain, rating, review_count, subindustry, categories[]} + category{slug} + meta.pagination{page, total, has_more, next_page}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"shopping"}}]},{"name":"skelbiu","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Skelbiu.lt — Lithuania classifieds (cars, real estate, electronics, jobs)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/skelbiu/v1","spec_available":true,"actions":[{"name":"search","description":"Search Skelbiu.lt adverts by text and/or category, with city, price range, private/business seller, verified-identity and buy-now filters and three sort orders. Returns the site's own total, the private/business split and up to 24 adverts per page.","required_params":[],"optional_params":["query","category_id","city_id","min_price","max_price","seller_type","verified_only","buy_now","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search, as typed into the site's search box (at most 50 characters, the site's own limit). Lithuanian words match best. Either `query` or `category_id` is required.","on_invalid":"reject","example":"dviratis","aliases":["q","keywords","keyword"]},{"name":"category_id","type":"integer","required":false,"description":"Skelbiu category id from the `categories` action (e.g. 31 = cars, 41 = flats for sale, 53 = job offers). Either `query` or `category_id` is required.","on_invalid":"reject","example":31,"aliases":["category"]},{"name":"city_id","type":"integer","required":false,"description":"One city or district id from the `cities` action (465 = Vilnius, 43 = Kaunas, 119 = Klaipėda).","on_invalid":"reject","example":465,"aliases":["city","cities"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR (the advert's own price).","on_invalid":"reject","example":100,"aliases":["price_min","cost_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR (the advert's own price).","on_invalid":"reject","example":300,"aliases":["price_max","cost_max"]},{"name":"seller_type","type":"enum","required":false,"description":"Private or business sellers. Rows of a filtered search carry `seller_type`; the site does not print the seller type anywhere else.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All sellers"},{"value":"private","label":"Private sellers"},{"value":"business","label":"Businesses"}],"default":"all"},{"name":"verified_only","type":"boolean","required":false,"description":"Only adverts from sellers with a confirmed identity.","on_invalid":"reject","default":false},{"name":"buy_now","type":"boolean","required":false,"description":"Only adverts that can be bought online with the site's own secure checkout.","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"Order. When omitted the site's default applies: relevance for a text query, recently renewed for a category.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant first"},{"value":"newest","label":"Newest first"},{"value":"renewed","label":"Recently renewed first"}]},{"name":"page","type":"integer","required":false,"description":"Result page, up to 24 adverts each. The site serves at most 200 pages (4,800 adverts) per query; page 201 does not exist.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"total (the site's own count), total_capped, seller_counts{all,private,business}, page, last_page, has_more, listings[]{listing_id, url, title, price_eur, price_text, price_per_m2_eur, price_change_pct, salary_text, employer, buy_now, location, renewed_text, renewed_date, params[], description_snippet, image, stars, highlighted, status (sold|reserved|null), seller_type}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"dviratis"}},{"name":"listing","description":"One Skelbiu.lt advert in full: price (with the page's structured price as a second witness), price change, category path, every specification row, features, description, photos, view and bookmark counts, renewal date, buy-now fees and the seller block as printed.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Advert id from a `search` row (`listing_id`), or the advert URL.","on_invalid":"reject","example":"87611454","aliases":["id","url"]}],"returns":"listing_id, url, title, price_eur, price_text, price_ld_json, price_mismatch, currency, price_change_pct, price_per_m2_eur, salary_text, buy_now, buy_now_secure_fee_eur, buy_now_delivery_from_eur, location, category_path[], breadcrumbs[], chips[], details{}, features[], description, images[], views, views_approx, views_text, bookmarks, stars, renewed_text, renewed_date, seller{display_name, registered_text, registered_month, ads_posted, identity_verified, all_ads_url, all_ads_count, company_name}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"87611454"}},{"name":"categories","description":"The Skelbiu.lt category tree with live advert counts: top level, or the children of one category. Ids feed `search` `category_id`.","required_params":[],"optional_params":["parent_id"],"params":[{"name":"parent_id","type":"integer","required":false,"description":"Category id whose children to list (1 = transport, 2 = real estate). Omit for the top level.","on_invalid":"reject","example":1,"aliases":["category_id"]}],"returns":"parent_id, parent_title, categories[]{category_id, title, level, parent_path, count, subcategories_text, has_buy_now}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"parent_id":1}},{"name":"cities","description":"Every Lithuanian city and district Skelbiu.lt filters by, with its id for `search` `city_id`.","required_params":[],"optional_params":[],"params":[],"returns":"cities[]{city_id, name, major}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"skroutz","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Skroutz API scraper — Greek price comparison: search products and categories, read the full product record, get EVERY Greek merchant's offer (price, shipping, shop rating, delivery date, stock, coupons, checkout route) for one product, its price history, reviews and Q&A, and any shop's public profile and reviews on skroutz.gr. Prices in EUR. No account, no browser.","version":"0.2.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/skroutz/v1","spec_available":true,"actions":[{"name":"search","description":"Search skroutz.gr by keyword and get the matching products: Skroutz product id, title, image, the price skroutz prints on the card (the offer it FEATURES, which is not always the cheapest one — measured 120,00 € on a card whose cheapest merchant offer was 108,99 €; null when the card shows a variant range instead, with the endpoints in price_from/price_to), the customer rating and review count, the category and skroutz's own key-spec summary, plus badges (Best Seller…), installments, the featured offer and organic rank. Use the returned `product_id` with `product/offers` to get every Greek shop's price for that product.","required_params":["query"],"optional_params":["page","sort","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for on skroutz.gr. Greek keywords match best, but brand and model names ('teka gfh 73', 'iphone 15 128gb') work directly. Skroutz often answers a broad keyword with one of its own category or brand pages — `search_mode` and `resolved_url` tell you when that happened.","on_invalid":"reject","example":"teka gfh 73","aliases":["q","keyword","keyphrase"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-BASED. Skroutz returns 56-60 products per page and the exact number varies, so read `count` rather than assuming a page size; `total_results` tells you how many products exist.","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Listing order — exactly skroutz's five. There is no separate 'popularity' order on skroutz (measured: order_by=popularity returns the 'recommended' order unchanged), so 'recommended' is the ranking to read a product's position in its category from.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"skroutz's default ranking (Προτεινόμενα) — the order shoppers see"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Newest first"},{"value":"rating","label":"Best rated first"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{product_id, title, url, image, price (number — the price skroutz shows on the card, i.e. the offer it features; NOT guaranteed to be the cheapest merchant, and null when the card shows a variant range instead), price_display (exactly what the card printed), price_from, price_to (the endpoints when skroutz printed a variant range), variant_family (true when this card covers a family of sibling products), price_before_discount, currency=EUR, rating (number), review_count, rating_scale (null — skroutz publishes no rating maximum anywhere), category, category_url, key_specs, delivery, promoted}, count, total_results, duplicate_cards_dropped (sponsored cards repeated inside the organic grid), search_mode ('keyword' | 'resolved' when skroutz answered the keyword with one of its own category/brand pages), resolved_title, resolved_url, query (meta.pagination for paging). 0.2.0 also on every row: badge{type,text,tooltip} (e.g. best_seller, new_arrival), secondary_badge (e.g. an extra merchant coupon), deal_badge, best_of_year_badge, installments, delivery_estimate, delivery_text, variations_count, variations_label, buy_on_skroutz (sold through skroutz checkout), featured_offer_id (the offer whose price the card prints — joins product/offers `offer_id`), featured_shop_name (only when skroutz prints it), sponsored_by ('brand'|'merchant'|'ad'|null), highlight_review{review_id, rating, text, author, helpfulness, url}, is_upcoming, is_obsolete, is_bundle, position (1-based on this page), organic_rank (rank among NON-ad cards in skroutz's ordering across pages; null when the product appears only as an ad). Page: total_pages, listing_total (skroutz's own result count for the listing), sort (the ordering skroutz applied), breadcrumb[]{title,url}, listing_category{id,name,url,parent_url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"teka gfh 73"}},{"name":"category/products","description":"Every product in one skroutz category, in skroutz's own order (default: 'recommended', the ranking shoppers see — or by price, newest, rating). Each row carries its organic rank in that order, so you can read where a product stands in its category, plus the same fields as `search`.","required_params":["category"],"optional_params":["sort","page","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"skroutz category id — the number in a category URL (https://www.skroutz.gr/c/1705/Smartwatches.html → 1705) — or the URL itself. product/detail returns it as `category_id`.","on_invalid":"reject","example":"1705","aliases":["category_id","url"]},{"name":"sort","type":"enum","required":false,"description":"Listing order — exactly skroutz's five. There is no separate 'popularity' order on skroutz (measured: order_by=popularity returns the 'recommended' order unchanged), so 'recommended' is the ranking to read a product's position in its category from.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"skroutz's default ranking (Προτεινόμενα) — the order shoppers see"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Newest first"},{"value":"rating","label":"Best rated first"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-BASED. Skroutz returns 56-60 products per page and the exact number varies, so read `count` rather than assuming a page size; `total_results` tells you how many products exist.","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[] (same row shape as `search`, incl. organic_rank and position), count, total_results, total_pages, listing_total (skroutz's own result count for the listing), sort (the ordering skroutz applied), breadcrumb[]{title,url}, listing_category{id,name,url,parent_url}, category_id, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"1705"}},{"name":"product/detail","description":"The full Skroutz product record by `product_id` (or product URL): title, brand, description, image gallery, manufacturer part number, model and colour, the price skroutz features on the page and the buy-box behind it, the customer rating with its review count, per-star breakdown, per-aspect review bars and skroutz's review summary, the category, colour/size variants with their 'from' prices, badges, how many users own it, and the complete technical specification grouped exactly as skroutz groups it. include_manufacturer=true adds the EAN and the EU manufacturer/responsible-shop block.","required_params":["product_id"],"optional_params":["include_manufacturer","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Skroutz product (SKU) id — the number in the product URL (https://www.skroutz.gr/s/809/…html → 809). A full product URL is also accepted. Every `search` row returns it as `product_id`.","on_invalid":"reject","example":"809","aliases":["id","sku","sku_id","url"]},{"name":"include_manufacturer","type":"boolean","required":false,"description":"true adds the EU product-safety block skroutz publishes on the page: the EAN barcode, the manufacturer (name, address, contact), the legal entity of each EU-responsible shop and the safety information — 2 extra small requests (~30-50 KB).","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, title, brand, url, description (skroutz's own product text, null when it has none), images[], mpn, model, color, price (number — the offer skroutz FEATURES on the product page; it is one of the real merchant prices but not necessarily the cheapest), price_display, price_min (null — the product page publishes no band, call product/offers), price_max (null — same reason), offer_count (null — same reason), currency=EUR, availability, condition, rating (number), review_count, rating_scale (null — skroutz publishes no maximum), rating_breakdown{'1'..'5': count}, category, category_url, specs[]{group, attributes{name: value}}, 0.2.0: category_id, badges[], key_features[], top_specs[]{name,value}, buybox{offer_id, shop_id, shop_name, shop_rating, shop_rating_count, shop_rating_source ('shop'|'skroutz_hub'), shop_location, stock, price, price_display, shipping_cost, shipping_display, delivery_estimate, delivery_date, delivery_date_latest, express, same_day_delivery, offering_type, fulfilled_by_skroutz, installments{monthly, months, display}}, min_cart_price (cheapest price buyable THROUGH skroutz checkout), variants[]{group, product_id, label, url, image, price_from, price_display, selected}, review_aspects[]{aspect, percent, sentiment}, review_summary, review_summary_ai_generated, owners_count (skroutz's 'N users own this product'), videos[], price_history_available, international_urls{ro,de,bg,cy}; with include_manufacturer=true: ean, manufacturer{name,address,contact}, eu_responsible_persons[]{shop_name, legal_name, address, website, email (as printed, e.g. info[AT]shop.gr)}, safety_information}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"809"}},{"name":"product/offers","description":"Every Greek merchant offer for one product — the price comparison itself, in a single request. For the given `product_id` you get one row per shop: the shop with its Skroutz id, name, storefront link, star rating and how many reviews it rests on, its town, the price (numeric and formatted), the price before a running coupon and the discount, the shipping fee and the total, the promised delivery date, declared stock, and the merchant's own listing title — plus how it is sold (skroutz checkout or the shop's site, Skroutz HUB fulfilment), where it ships from, the delivery window as dates, next-day cut-off, coupons with their codes and terms. Rows are ordered cheapest first. skroutz's own delivery / pickup / checkout / free-shipping filters and its 'fastest' ordering are available.","required_params":["product_id"],"optional_params":["sort","include_product","delivery_tomorrow","availability","store_pickup","buy_on_skroutz","free_shipping","official_reseller","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Skroutz product (SKU) id — the number in the product URL (https://www.skroutz.gr/s/809/…html → 809). A full product URL is also accepted. Every `search` row returns it as `product_id`.","on_invalid":"reject","example":"809","aliases":["id","sku","sku_id","url"]},{"name":"sort","type":"enum","required":false,"description":"Order skroutz is asked for. Only the orderings skroutz.gr actually honours are accepted; anything else is rejected rather than silently ignored. (The site's fourth ordering, 'nearest shop', needs a shopper location and is not offered here.) The rows are returned cheapest-first by `price` as before; `site_position` on each row keeps skroutz's own order for the requested sort (use it with sort=fastest).","on_invalid":"reject","allowed_values":[{"value":"price","label":"Cheapest item price first (skroutz's own default)"},{"value":"final_price","label":"Cheapest price INCLUDING shipping first"},{"value":"fastest","label":"Fastest delivery first (skroutz's 'Γρηγορότερο')"}],"default":"price"},{"name":"include_product","type":"boolean","required":false,"description":"false (default) keeps this a single 105 KB request and returns the product block skroutz publishes on the merchant table itself (id, brand, category, price band, offer count) with `title` null. true fetches the product page as well so `product.title`, images, rating and specs are filled in — one extra request, ~200 KB.","on_invalid":"ignore","default":false},{"name":"delivery_tomorrow","type":"boolean","required":false,"description":"Only shops that deliver TOMORROW (skroutz's 'Αύριο' filter).","on_invalid":"ignore","default":false},{"name":"availability","type":"enum","required":false,"description":"skroutz's own availability filter. The live label and count of each level for THIS product come back in `filter_options`.","on_invalid":"reject","allowed_values":[{"value":"1","label":"skroutz availability level 1 — the stricter one (6 of 30 shops on the reference product)"},{"value":"2","label":"skroutz availability level 2 — labelled 'έως 8 ημέρες' (up to 8 days) on the site"}]},{"name":"store_pickup","type":"boolean","required":false,"description":"Only shops that offer pickup from their physical store.","on_invalid":"ignore","default":false},{"name":"buy_on_skroutz","type":"boolean","required":false,"description":"Only offers you can buy THROUGH skroutz checkout (skroutz's 'Αγορά μέσω Skroutz').","on_invalid":"ignore","default":false},{"name":"free_shipping","type":"boolean","required":false,"description":"skroutz's own 'Δωρεάν μεταφορικά' filter. ⚠️ skroutz applies it to the shop's own-site fee: a shop that ships free via skroutz checkout but charges on its own site is excluded (3 of 24 such rows on the reference product).","on_invalid":"ignore","default":false},{"name":"official_reseller","type":"boolean","required":false,"description":"Only shops skroutz lists as official resellers of the brand.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, title (null unless include_product=true), brand, category, url, price_min, price_max (the REAL band, computed from the merchant rows below), price_min_display, price_max_display, currency=EUR, offer_count, offer_count_published (skroutz's own '14 Καταστήματα' figure), rating, review_count, rating_scale (null)} + offers[]{position, offer_id, seller{id, name, url, rating (null for a shop skroutz has not rated), rating_count, location, store_pickup, official_reseller, 0.2.0: rating_source ('shop' | 'skroutz_hub' — on HUB-fulfilled rows skroutz shows Skroutz HUB's rating instead of the shop's), rating_count_display (as printed, e.g. '1.9K'), logo, greca_trustmark}, price (number — the price AFTER any running coupon), price_display, price_before_discount, discount, currency=EUR, shipping_cost, shipping_display, free_shipping, total_price, delivery_estimate, stock, stock_quantity (null when the shop declares a band like '5+'), offer_url, offer_title, brand, promoted, product_id, 0.2.0: site_position (skroutz's own order for the requested sort), buy_on_skroutz, redirects_to_shop, checkout ('skroutz'|'shop_site'|'both'), shipping_method ('home_delivery'|'skroutz_point' — shipping_cost is the fee of THIS method), shipping_note, home_delivery_cost, shop_site_shipping_cost (fee when buying on the shop's own site), fulfilled_by_skroutz (Skroutz HUB), ships_from (country, when abroad), ships_from_abroad, delivery_label, delivery_date_from, delivery_date_to (ISO, derived from the printed text in Greek local time), dispatch_days ('ready to ship in N days'), next_day_order_cutoff (ISO UTC), same_day_delivery, max_order_quantity (most units skroutz lets you put in the cart), promotions[]{type, title, subtitle, headline, code, amount, percent, min_basket, valid_until, valid_until_display, terms[]}, skroutz_plus_free_shipping, featured, buy_box (true on the buy-box offer; null unless include_product=true)} + count, cheapest, most_expensive, filter_options[]{group, label, count, param} (skroutz's own filter drawer for this product), filters_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"809"}},{"name":"product/price_history","description":"skroutz's price-history chart for one product, as data: the lowest price per day with the shop that had it, skroutz's popularity curve and the number of shops selling it per day — for the last month, 3 months, 6 months or all history.","required_params":["product_id"],"optional_params":["period","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Skroutz product (SKU) id — the number in the product URL (https://www.skroutz.gr/s/809/…html → 809). A full product URL is also accepted. Every `search` row returns it as `product_id`.","on_invalid":"reject","example":"809","aliases":["id","sku","sku_id","url"]},{"name":"period","type":"enum","required":false,"description":"Which window of skroutz's price chart to return (the chart's own four buttons). 'all' = 546 daily points (~18 months) on every product measured 2026-11-02.","on_invalid":"reject","allowed_values":[{"value":"1m","label":"last month"},{"value":"3m","label":"last 3 months"},{"value":"6m","label":"last 6 months"},{"value":"all","label":"everything skroutz keeps"}],"default":"all"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product_id, period, lowest_price[]{date, price (null on a day skroutz marks unavailable), available, shop_name}, lowest_price_min, lowest_price_max, lowest_price_current, popularity[]{date, value — skroutz's own popularity index; the site draws it with NO axis or unit, so read it as relative, higher = more popular}, shop_count[]{date, shop_count}, shop_count_current, all_time{lowest_price{min,max}, popularity{min,max}, shop_count{min,max}}, shop_offering (raw, only when skroutz sends it), points, currency=EUR","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"50645554"}},{"name":"product/reviews","description":"The public customer reviews of one product, newest or most helpful first, optionally only certain star values: rating, full text, date, author, verified purchase, helpful votes, the reviewer's pros / so-so / cons tags, photos and videos, and which variant the review was written on.","required_params":["product_id"],"optional_params":["offset","sort","rating","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Skroutz product (SKU) id — the number in the product URL (https://www.skroutz.gr/s/809/…html → 809). A full product URL is also accepted. Every `search` row returns it as `product_id`.","on_invalid":"reject","example":"809","aliases":["id","sku","sku_id","url"]},{"name":"offset","type":"integer","required":false,"description":"How many reviews to skip. skroutz returns 30 on the first page (offset 0) and 10 per page after that; pass the response's `next_offset` to continue.","on_invalid":"ignore","default":0,"minimum":0,"maximum":100000},{"name":"sort","type":"enum","required":false,"description":"Review order — skroutz's two orderings.","on_invalid":"reject","allowed_values":[{"value":"recent","label":"Newest first (skroutz default)"},{"value":"helpful","label":"Most helpful first"}],"default":"recent"},{"name":"rating","type":"array","required":false,"description":"Only reviews with these star values, e.g. [5,4] or '3,2,1' (skroutz's own rating filter). Empty = all.","on_invalid":"reject","allowed_values":[{"value":"1","label":"1 star"},{"value":"2","label":"2 stars"},{"value":"3","label":"3 stars"},{"value":"4","label":"4 stars"},{"value":"5","label":"5 stars"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product_id, reviews[]{review_id, rating, text, date (ISO), date_display, author, author_url, author_avatar, author_badge, verified_purchase, helpful_votes, helpfulness, pros[], so_so[], cons[], images[], videos[], variant_note, best_pick, demoted (skroutz's own flag), has_replies, warning}, count, offset, next_offset, has_more, sort, rating_filter","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"809"}},{"name":"product/questions","description":"The public Q&A of one product: every question with its author, date, whether the author bought it, the number of replies and the latest reply.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Skroutz product (SKU) id — the number in the product URL (https://www.skroutz.gr/s/809/…html → 809). A full product URL is also accepted. Every `search` row returns it as `product_id`.","on_invalid":"reject","example":"809","aliases":["id","sku","sku_id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product_id, questions[]{id, text, date, author, author_url, verified_purchase, replies_count, latest_reply{id, text, date, author, author_url, verified_purchase}, replies[] (when skroutz inlines them), url}, count, total_questions (skroutz's own count), complete (count == total_questions; the engine follows skroutz's 'more questions' paging)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"809"}},{"name":"shop/detail","description":"A skroutz shop's public profile: rating and review count, positive/negative split, orders per week through skroutz, years on skroutz, categories, physical stores, official-reseller brands, marketplace-only flag, contact details, payment methods and the company's legal data (name, registered address, GEMI number).","required_params":["shop_id"],"optional_params":["max_rotations"],"params":[{"name":"shop_id","type":"string","required":true,"description":"skroutz shop id — the number in a shop URL (https://www.skroutz.gr/shop/7388/EasyOffers → 7388) or the URL. product/offers returns it as `seller.id`.","on_invalid":"reject","example":"7388","aliases":["id","seller_id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"shop{shop_id, name, url, products_url, operated_categories[], area, shop_types[], marketplace_only, has_physical_store, stores[], official_reseller, official_reseller_brands[], rating, rating_count, positive_reviews{count, percent}, negative_reviews{count, percent}, strong_points[], weekly_orders (as printed, e.g. '500+'), weekly_orders_min, years_on_skroutz (e.g. '5+'), years_on_skroutz_min, contact{website, phone, email (as printed)}, payment_methods[], company{legal_name, address, gemi_number, vat_number}, image, review_pages}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"shop_id":"7388"}},{"name":"shop/reviews","description":"A skroutz shop's public reviews, 20 per page, optionally only positive or only negative: author, date, text, the aspect tags, whether it was a purchase through skroutz and whether the buyer would buy again.","required_params":["shop_id"],"optional_params":["page","impression","max_rotations"],"params":[{"name":"shop_id","type":"string","required":true,"description":"skroutz shop id — the number in a shop URL (https://www.skroutz.gr/shop/7388/EasyOffers → 7388) or the URL. product/offers returns it as `seller.id`.","on_invalid":"reject","example":"7388","aliases":["id","seller_id","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-BASED. Skroutz returns 56-60 products per page and the exact number varies, so read `count` rather than assuming a page size; `total_results` tells you how many products exist.","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"impression","type":"enum","required":false,"description":"skroutz's own positive/negative filter on shop reviews.","on_invalid":"reject","allowed_values":[{"value":"positive","label":"Only positive reviews"},{"value":"negative","label":"Only negative reviews"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"shop_id, shop_name, reviews[]{review_id, sentiment, author, author_url, date, text, purchased_via_skroutz, aspects[], would_buy_again}, count, page, total_pages, impression","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"shop_id":"7388"}},{"name":"shop/products","description":"The products a shop sells through skroutz, page by page, with the same row fields as `search`.","required_params":["shop_id"],"optional_params":["page","max_rotations"],"params":[{"name":"shop_id","type":"string","required":true,"description":"skroutz shop id — the number in a shop URL (https://www.skroutz.gr/shop/7388/EasyOffers → 7388) or the URL. product/offers returns it as `seller.id`.","on_invalid":"reject","example":"7388","aliases":["id","seller_id","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-BASED. Skroutz returns 56-60 products per page and the exact number varies, so read `count` rather than assuming a page size; `total_results` tells you how many products exist.","on_invalid":"ignore","default":1,"minimum":1,"maximum":200},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[] (same row shape as `search`), count, total_results, total_pages, listing_total (skroutz's own result count for the listing), sort (the ordering skroutz applied), breadcrumb[]{title,url}, listing_category{id,name,url,parent_url}, shop_id, page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"shop_id":"7388"}}]},{"name":"slickdeals","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Slickdeals API — live slickdeals.net deals: search with the site's own filters (price, discount, store, category, brand, rating, date, expired), one deal in full with price, list price, store, coupon code, shipping note, deal score, views, comments and the store link, the comments page by page, the Frontpage / Popular / Hot Deals / Fire Deals feeds, and category / store / brand ids with deal counts. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/slickdeals/v1","spec_available":true,"actions":[{"name":"search","description":"Search Slickdeals deals by keyword (or list every deal) with the site's own sort and filters. 40 deals per page, the site stops at 1000 results (25 pages).","required_params":[],"optional_params":["query","page","sort","min_price","max_price","min_discount","store_id","category_id","brand_id","rating","posted_within_days","hide_expired","forum_id"],"params":[{"name":"query","type":"string","required":false,"description":"Search text as typed into slickdeals.net's search box. Optional: without it the search lists every deal (newest first) and the filters still apply.","on_invalid":"reject","example":"instant pot","aliases":["q","keyword","search","searchTerm"]},{"name":"page","type":"integer","required":false,"description":"Result page, 40 deals each. The site stops at page 25 (1000 deals); with sort=relevance its pages can repeat deals and run out early, sort=recent pages cleanly through every result ('instant pot' 388/388 unique).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":25},{"name":"sort","type":"enum","required":false,"description":"Result order, the site's own sort keys. Default relevance with a query, recent without. Unknown values are refused (the site silently falls back to relevance).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (default with a query)"},{"value":"recent","label":"Newest first (default without a query)"},{"value":"popular","label":"Highest deal score first"},{"value":"last_comment_activity","label":"Most recent comment first"},{"value":"price_low","label":"Price low to high (deals without a price come first)"},{"value":"price_high","label":"Price high to low"}],"example":"recent"},{"name":"min_price","type":"number","required":false,"description":"Lowest deal price in USD, applied by the site ('instant pot' 388 -> 191 for 50-100). Deals without a numeric price are left out by a price filter.","on_invalid":"reject","example":50,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest deal price in USD (see min_price; 'instant pot' max 60 -> 164).","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_max"]},{"name":"min_discount","type":"integer","required":false,"description":"Only deals at least this many percent off the list price, by the site's own discount figure ('instant pot' 388 -> 107 for 50).","on_invalid":"reject","example":50,"minimum":1,"maximum":99,"aliases":["discount"]},{"name":"store_id","type":"string","required":false,"description":"Slickdeals store id, or several comma-separated (any of them). 1 = Amazon, 439 = Walmart, 92 = Best Buy, 201 = Target, 9393 = Woot!; the `categories` action lists the stores with deal counts for any query. A deal tagged with several stores matches each of them, so a row's merchant can be another store (Walmart filter: 2 of 20 rows had Amazon as the deal's store).","on_invalid":"reject","example":"1","value_pattern":"\\d{1,9}(,\\d{1,9}){0,9}","aliases":["store","merchant_id"]},{"name":"category_id","type":"string","required":false,"description":"Slickdeals category id, or several comma-separated. 40 = Tech & Electronics, 286 = Home & Home Improvement, 9 = Computers, 285 = Clothing & Accessories, 7702 = Free Shipping; the `categories` action lists ids with counts and drills into subcategories. An id the site does not know returns 0 deals.","on_invalid":"reject","example":"40","value_pattern":"\\d{1,9}(,\\d{1,9}){0,9}","aliases":["category"]},{"name":"brand_id","type":"string","required":false,"description":"Slickdeals brand id, or several comma-separated (3378 = Apple, 4632 = Instant Pot); listed with counts by the `categories` action.","on_invalid":"reject","example":"3378","value_pattern":"\\d{1,9}(,\\d{1,9}){0,9}","aliases":["brand"]},{"name":"rating","type":"enum","required":false,"description":"The site's rating filter. firedeal / frontpage / popular keep only deals with that badge ('instant pot': 21 / 61 / 160 of 388). The thumbs levels are the site's labels, not literal vote counts: '5+' kept deals scoring 14 and up, '3+' 6 and up, '1+' 2 and up in the measured sample.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All deals"},{"value":"firedeal","label":"Fire deals"},{"value":"frontpage","label":"Frontpage deals"},{"value":"popular","label":"Popular deals"},{"value":"5","label":"5+ thumbs (site label)"},{"value":"4","label":"4+ thumbs (site label)"},{"value":"3","label":"3+ thumbs (site label)"},{"value":"2","label":"2+ thumbs (site label)"},{"value":"1","label":"1+ thumbs (site label)"}],"example":"frontpage"},{"name":"posted_within_days","type":"enum","required":false,"description":"Only deals posted in this window. The site's default is the past 3 years; 'all' searches every year ('instant pot': 30 days 17, 1 year 153, 3 years 388, all time 1000+).","on_invalid":"reject","allowed_values":[{"value":"1","label":"Past 24 hours"},{"value":"7","label":"Past week"},{"value":"30","label":"Past month"},{"value":"90","label":"Past 3 months"},{"value":"365","label":"Past year"},{"value":"1095","label":"Past 3 years (site default)"},{"value":"all","label":"All time"}],"example":"30","aliases":["days","date"]},{"name":"hide_expired","type":"boolean","required":false,"description":"Leave out deals the community marked expired ('instant pot' 388 -> 43).","on_invalid":"reject","example":true},{"name":"forum_id","type":"integer","required":false,"description":"Only deals from one forum: 9 = Hot Deals (community posts), 4 = Freebies, 10 = Coupons, 30 = Deal Talk, 54 = Free Digital Goods, 177 = Marketplace Deals.","on_invalid":"reject","example":9,"minimum":1}],"returns":"data.deals[]: deal_id, title, url, share_url, image_url, price, price_type (fixed|from|each|or_less|free|other), price_is_from, price_text, list_price, next_best_price (= list_price), list_price_text, discount_pct (from the card prices), source_discount_pct (the site's own figure), currency, extra_info ('+ Free S&H'), shipping_free, shipping_price, merchant {merchant_id, name}, score (net thumbs), comment_count, view_count, is_expired, is_frontpage, is_popular, is_fire, is_new, has_rebate, badge, forum_id, forum, posted_by {username}, published_at, last_comment_at, frontpage_post_id. data.total (the site's count), total_capped (true at 1000), data.pagination {page, last_page, has_more}, data.query (the applied filters).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"instant pot","sort":"recent"}},{"name":"deal","description":"One Slickdeals deal in full: price and list price, store, coupon code(s), shipping note, deal score, views, comment count, expired flag, the 'Get Deal' link (optionally followed to the store page), description, categories, brand, images, poster, and the first page of comments.","required_params":["deal_id"],"optional_params":["resolve_store_url"],"params":[{"name":"deal_id","type":"string","required":true,"description":"The deal's id (`deal_id` from search or a feed), or a deal URL (https://slickdeals.net/f/20171283-...).","on_invalid":"reject","example":"20171283","aliases":["thread_id","id","url","deal_url"]},{"name":"resolve_store_url","type":"boolean","required":false,"description":"Also follow the deal's 'Get Deal' link once and return where it lands (`store_url`, e.g. the amazon.com product page; the site's own affiliate parameters are part of that address). One extra request.","on_invalid":"reject","default":false,"example":true}],"returns":"data.deal: deal_id, title, url, share_url, price, price_type, price_is_from, price_text, list_price, next_best_price, list_price_text, discount_pct, currency, extra_info, shipping_free, shipping_price, voucher_code, voucher_codes[], merchant {merchant_id, name, url_name}, link_host, deal_link, deal_link_text, store_url and store_redirect_url (with resolve_store_url), asin, score, view_count, comment_count, is_expired, is_fire, deal_type, forum_id, forum, category {category_id, name, url}, categories[] {name, path, url}, brand {brand_id, name}, images[], description, editor_notes, links[] {text, url}, posted_by {user_id, username, reputation, deals_posted, join_date, rank, is_staff}, deal_editor, published_at, edited_at, updated_at, summary, breadcrumbs[], related_searches[]. data.comments[] (first page, see the comments action), data.comments_page {page, last_page, has_more}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"deal_id":"20171283"}},{"name":"comments","description":"The comments on one Slickdeals deal, page by page (15 top-level comments per page, with their replies), oldest first as on the site.","required_params":["deal_id"],"optional_params":["page"],"params":[{"name":"deal_id","type":"string","required":true,"description":"The deal's id (`deal_id` from search or a feed), or a deal URL (https://slickdeals.net/f/20171283-...).","on_invalid":"reject","example":"20171283","aliases":["thread_id","id","url","deal_url"]},{"name":"page","type":"integer","required":false,"description":"Comment page, 15 top-level comments each (replies are nested in between). `last_page` in the answer says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500}],"returns":"data.comments[]: comment_id, text, posted_at, url, author {user_id, username, title, join_date, post_count, badges[]}, reactions {like, funny, helpful, notHelpful}, is_threaded_reply. data.comment_count, data.page, data.last_page, data.has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"deal_id":"20053761","page":2}},{"name":"feed","description":"The Slickdeals home page lists: Frontpage (editor-picked), Popular (voted up by the community), Hot Deals (newest community posts) and Fire Deals, with cursor paging.","required_params":[],"optional_params":["feed","cursor","show_expired"],"params":[{"name":"feed","type":"enum","required":false,"description":"Which list, as on the slickdeals.net home page tabs.","on_invalid":"reject","allowed_values":[{"value":"frontpage","label":"Frontpage: deals picked by Slickdeals editors (one day per page)"},{"value":"popular","label":"Popular: community deals voted up"},{"value":"hot_deals","label":"Hot Deals: newest community posts"},{"value":"fire_deals","label":"Fire Deals: the handful currently marked fire (one page)"}],"default":"frontpage","example":"popular"},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous page of the same feed; omit for the first page.","on_invalid":"reject","example":"2","aliases":["next_cursor"]},{"name":"show_expired","type":"boolean","required":false,"description":"Include deals marked expired (Frontpage: 137 -> 146 rows on the first page, 9 of them expired). Default as on the site: expired deals hidden.","on_invalid":"reject","example":true}],"returns":"data.deals[]: the same row as search. data.feed, data.headline, data.next_cursor, data.has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"feed":"popular"}},{"name":"categories","description":"Slickdeals category, store and brand ids with deal counts, as the site's search sidebar lists them (about 10 per group, largest first): for all deals or for a query, and drilled into a category's subcategories. Use the ids in search.","required_params":[],"optional_params":["query","category_id","posted_within_days"],"params":[{"name":"query","type":"string","required":false,"description":"Optional search text: the facets then count deals matching it.","on_invalid":"reject","example":"laptop","aliases":["q","keyword","search"]},{"name":"category_id","type":"string","required":false,"description":"Drill into one category: its subcategories are listed under it.","on_invalid":"reject","example":"40","value_pattern":"\\d{1,9}","aliases":["category","parent_id"]},{"name":"posted_within_days","type":"enum","required":false,"description":"Window the counts cover; default all time.","on_invalid":"reject","allowed_values":[{"value":"1","label":"Past 24 hours"},{"value":"7","label":"Past week"},{"value":"30","label":"Past month"},{"value":"90","label":"Past 3 months"},{"value":"365","label":"Past year"},{"value":"1095","label":"Past 3 years (site default)"},{"value":"all","label":"All time"}],"default":"all","example":"all","aliases":["days"]}],"returns":"data.categories[] {category_id, name, deal_count, selected, children[]}, data.stores[] {store_id, name, deal_count}, data.brands[] {brand_id, name, deal_count}, data.discount_buckets[] {min_discount, label, deal_count}, data.price_range {min, max}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"40"}}]},{"name":"snapchat","category":{"id":"social","title":"Social Media"},"title":"Snapchat Public Data API scraper — public profiles, stories, highlights, AR lenses and Spotlight videos from snapchat.com without login: display name, snapcode, subscriber count, bio, website, verified badge, public story snaps, curated and Spotlight highlights, a creator's lenses, the trending Spotlight feed with engagement stats, and lens directory/detail — no API key or account required","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/snapchat/v1","spec_available":true,"actions":[{"name":"profile","description":"Full public Snapchat profile by username: display name, snapcode, subscriber count, bio, website, verified badge, profile picture, business id, related/suggested accounts, plus flags for whether the account has a live story and saved highlights.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"Snapchat public username — the name in snapchat.com/add/<username> (with or without a leading @). Public creator/brand accounts only.","on_invalid":"reject","example":"kyliejenner","aliases":["user","handle"]}],"returns":"profile{username, display_name, bio, subscriber_count, website_url, profile_pic, snapcode_url, is_verified, category, publisher_type, business_profile_id, has_story, has_curated_highlights, has_spotlight_highlights, created_at_ms, related_accounts[]}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"kyliejenner"}},{"name":"story","description":"The account's current public story — the live snaps (image/video media URLs, timestamps, titles) that the profile is publicly broadcasting right now.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"Snapchat public username — the name in snapchat.com/add/<username> (with or without a leading @). Public creator/brand accounts only.","on_invalid":"reject","example":"kyliejenner","aliases":["user","handle"]},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). The page is sliced; omit for all.","on_invalid":"ignore","example":25,"minimum":1,"maximum":100}],"returns":"story{story_id, thumbnail_url, snap_count, snaps[]{snap_id, media_type, media_url, media_preview_url, timestamp_sec, title}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"kyliejenner"}},{"name":"highlights","description":"The account's saved public highlight stories (curated highlights + Spotlight highlights), each with its snaps. First page (the SSR page serves the first batch; deeper pagination is not exposed to logged-out clients).","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"Snapchat public username — the name in snapchat.com/add/<username> (with or without a leading @). Public creator/brand accounts only.","on_invalid":"reject","example":"kyliejenner","aliases":["user","handle"]},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). The page is sliced; omit for all.","on_invalid":"ignore","example":25,"minimum":1,"maximum":100}],"returns":"curated_highlights[]{story_id, title, thumbnail_url, snap_count, snaps[]}, spotlight_highlights[]{story_id, thumbnail_url, snap_count, snaps[]}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"kyliejenner"}},{"name":"lenses","description":"The creator's own public AR lenses listed on their profile: name, preview image/video, icon, unlock URL and scannable UUID.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"Snapchat public username — the name in snapchat.com/add/<username> (with or without a leading @). Public creator/brand accounts only.","on_invalid":"reject","example":"kyliejenner","aliases":["user","handle"]},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). The page is sliced; omit for all.","on_invalid":"ignore","example":25,"minimum":1,"maximum":100}],"returns":"lenses[]{lens_id, scannable_uuid, name, creator_display_name, preview_image_url, preview_video_url, icon_url, unlock_url, is_official}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"kyliejenner"}},{"name":"spotlight","description":"The public trending Spotlight feed — ~25 popular Spotlight videos with engagement stats (views, shares, comments, boosts), creator, AI-generated title/description/keywords and media URLs. No input needed; returns what Snapchat is surfacing now.","required_params":[],"optional_params":[],"params":[{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). The page is sliced; omit for all.","on_invalid":"ignore","example":25,"minimum":1,"maximum":100}],"returns":"stories[]{story_id, url, thumbnail_url, name, description, view_count, share_count, comment_count, boost_count, duration_ms, creator, ai_title, ai_keywords[], snaps[]}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":25}},{"name":"spotlight_detail","description":"Full metadata for one public Spotlight video by its story id (from a spotlight result's story_id or a snapchat.com/spotlight/<id> URL): name, description, view count, duration, dimensions, creator and media URL.","required_params":["story_id"],"optional_params":[],"params":[{"name":"story_id","type":"string","required":true,"description":"Spotlight story id (the code in snapchat.com/spotlight/<id>). A full Spotlight URL is also accepted.","on_invalid":"reject","example":"W7_EDlXWTBiXAEEniNoMPwAAYa2l2eW9jZ3F5AZpsBHb6","aliases":["id","url"]}],"returns":"video{name, description, thumbnail_url, content_url, view_count, duration_ms, width, height, creator, upload_date_ms}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"story_id":"W7_EDlXWTBiXAEEniNoMPwAAYa2l2eW9jZ3F5AZpsBHb6"}},{"name":"lens_directory","description":"Snapchat's public top/trending AR lens directory: the featured lenses plus the lens category list. First page (the SSR catalog serves the first ~25; deeper cursor pagination is not exposed to logged-out clients).","required_params":[],"optional_params":[],"params":[{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). The page is sliced; omit for all.","on_invalid":"ignore","example":25,"minimum":1,"maximum":100}],"returns":"lenses[]{lens_id, scannable_uuid, name, creator_display_name, preview_image_url, icon_url, unlock_url, is_official, search_tags[]}, categories[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":25}},{"name":"lens_detail","description":"Detail for one public AR lens by its scannable UUID (from a lens result's scannable_uuid or a snapchat.com/lens/<uuid> URL): name, creator, preview media, unlock URL, the Spotlight videos that use this lens, and related lenses.","required_params":["uuid"],"optional_params":[],"params":[{"name":"uuid","type":"string","required":true,"description":"Lens scannable UUID (the code in snapchat.com/lens/<uuid>). A full lens URL is also accepted.","on_invalid":"reject","example":"565e7595ec4e4a0da689762b127308ef","aliases":["scannable_uuid","lens","url"]}],"returns":"lens{lens_id, scannable_uuid, name, creator_display_name, preview_image_url, preview_video_url, icon_url, unlock_url, spotlights_using_lens[], more_lenses[]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"uuid":"565e7595ec4e4a0da689762b127308ef"}}]},{"name":"snkrdunk","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"SNKRDUNK API — live Japanese trading-card and sneaker marketplace data scraper: card search, product detail, every live listing with its grade (PSA 10, A-D) and price in USD, the floor price per grade for daily price tracking, a 30-product batch lookup and full brand catalogues from snkrdunk.com — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/snkrdunk/v1","spec_available":true,"actions":[{"name":"search","description":"Search SNKRDUNK by keyword. Returns trading cards (and, when `include_sneakers` is on, sneakers) with the current floor price, the live listing count and the id you feed into every other action. `total` is the source's own match count, so you can page through a whole set.","required_params":["query"],"optional_params":["page","limit","include_sneakers"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for: a card name, set, character, sneaker model or product number ('charizard', 'umbreon vmax', 'one piece op-01').","on_invalid":"reject","example":"charizard","aliases":["q","keyword","term"]},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100). The source refuses more than 100.","on_invalid":"ignore","default":30,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"include_sneakers","type":"boolean","required":false,"description":"Also return the sneaker matches. Off by default, because the trading-card half is what this endpoint is for.","on_invalid":"ignore","default":false}],"returns":"results[]{product_id, code, url, name, product_number, min_price_usd, listing_count, offer_count, released_at, image, is_trading_card}, sneakers[] (optional), total, page, limit","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"pikachu"}},{"name":"product/detail","description":"One product record by id, code or URL: name, product number, brand, the current floor price, how many listings are live and the images. Optionally merges the floor price per grade and the other prints of the same card in the SAME call.","required_params":["product_id"],"optional_params":["include_prices","include_variations"],"params":[{"name":"product_id","type":"string","required":false,"description":"The product to read. Accepts the numeric id (107574), the site code (SW---107574) or a snkrdunk.com product URL.","on_invalid":"reject","example":107574,"aliases":["id","code","url","trading_card_id"]},{"name":"include_prices","type":"boolean","required":false,"description":"Also return the floor price per grade (one extra upstream call).","on_invalid":"ignore","default":false},{"name":"include_variations","type":"boolean","required":false,"description":"Also return the other prints/variants of this card.","on_invalid":"ignore","default":false}],"returns":"product{product_id, code, url, name, product_number, brand, min_price_usd, listing_count, offer_count, image, images} + prices_by_condition[] (optional) + variations[] (optional)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"107574"}},{"name":"product/listings","description":"Every live listing on one product: price in USD, grade (PSA 10, A, B, C, D), whether it is still for sale and an opaque listing id. This is the order book a pricing model reads, and the only place the source publishes individual asks.","required_params":["product_id"],"optional_params":["page","limit","sort","only_on_sale"],"params":[{"name":"product_id","type":"string","required":false,"description":"The product to read. Accepts the numeric id (107574), the site code (SW---107574) or a snkrdunk.com product URL.","on_invalid":"reject","example":107574,"aliases":["id","code","url","trading_card_id"]},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100). The source refuses more than 100.","on_invalid":"ignore","default":30,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"sort","type":"string","required":false,"description":"`latest` for newest first, anything else for the source's own order. Measured: these are the only two orders the source actually applies.","on_invalid":"ignore","allowed_values":[{"value":"latest","label":"Newest listings first"},{"value":"default","label":"The source's own ordering"}],"default":"default","example":"latest","aliases":["sort_type"]},{"name":"only_on_sale","type":"boolean","required":false,"description":"Only listings that are still for sale. Default false, which also returns recently sold ones (each carries `is_sold`).","on_invalid":"ignore","default":false}],"returns":"listings[]{listing_id, price_usd, price_display, currency, condition, condition_note, size, is_sold, is_new, image}, product{product_id, code, url, name} (identity only — this envelope carries no floor price or listing count; use product/detail for those), page, limit","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"107574"}},{"name":"prices_by_condition","description":"The current floor price for each grade of one card (PSA 10, A, B, C, D and the rest). One small call per card, which is what a daily price tracker stores.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"The product to read. Accepts the numeric id (107574), the site code (SW---107574) or a snkrdunk.com product URL.","on_invalid":"reject","example":107574,"aliases":["id","code","url","trading_card_id"]}],"returns":"prices[]{condition_id, condition, min_price_usd, min_price_display}, product_id","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"107574"}},{"name":"products/batch","description":"Up to 30 products in ONE call: name, floor price, listing count and image for each. This is how a catalogue of thousands is refreshed without spending a call per card. Ids that no longer exist are simply absent from the answer.","required_params":["product_ids"],"optional_params":[],"params":[{"name":"product_ids","type":"array","required":true,"description":"Up to 30 product ids, codes or URLs. Accepts a JSON array or a comma-separated string.","on_invalid":"reject","example":[107574,882281],"maximum":30,"aliases":["ids","identifiers","codes"]}],"returns":"products[]{product_id, code, url, name, min_price_usd, listing_count, image}, requested, returned, missing[] (min_price_display is null here: the batch rows carry the number, not the formatted string)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_ids":[107574,128265]}},{"name":"product/variations","description":"The other prints and variants of the same card (or the other colourways of a sneaker), each with its own id and floor price.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":false,"description":"The product to read. Accepts the numeric id (107574), the site code (SW---107574) or a snkrdunk.com product URL.","on_invalid":"reject","example":107574,"aliases":["id","code","url","trading_card_id"]}],"returns":"variations[]{product_id, code, url, name, min_price_usd, image}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"107574"}},{"name":"browse","description":"Walk the used trading-card market: every card with a live listing, filtered by brand and category, newest first or in the source's own order. Use it to build a catalogue without a keyword.","required_params":[],"optional_params":["brand","category_id","page","limit","sort","only_on_sale"],"params":[{"name":"brand","type":"string","required":false,"description":"Brand slug ('pokemon', 'one-piece', 'yu-gi-oh'). Omit for all.","on_invalid":"ignore","example":"pokemon","aliases":["brand_id","brand_slug"]},{"name":"category_id","type":"integer","required":false,"description":"Category id from brand/detail. Omit for all categories.","on_invalid":"ignore","example":25},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100). The source refuses more than 100.","on_invalid":"ignore","default":30,"minimum":1,"maximum":100,"aliases":["per_page"]},{"name":"sort","type":"string","required":false,"description":"`latest` for newest first, anything else for the source's own order. Measured: these are the only two orders the source actually applies.","on_invalid":"ignore","allowed_values":[{"value":"latest","label":"Newest listings first"},{"value":"default","label":"The source's own ordering"}],"default":"default","example":"latest","aliases":["sort_type"]},{"name":"only_on_sale","type":"boolean","required":false,"description":"Only listings that are still for sale. Default false, which also returns recently sold ones (each carries `is_sold`).","on_invalid":"ignore","default":false}],"returns":"cards[]{listing_id, trading_card_id, url, name, price_usd, condition, is_sold, image}, page, limit","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"pokemon"}},{"name":"brand/products","description":"One brand's catalogue, paged: every product SNKRDUNK carries for that brand with its floor price and listing count. With `department=tradingCard` this is the route that builds a card database set by set.","required_params":["brand"],"optional_params":["department","page","limit"],"params":[{"name":"brand","type":"string","required":true,"description":"Brand slug exactly as it appears in a snkrdunk URL. Trading cards: pokemon, yu-gi-oh, onepiece, dragonball, mtg. Sneakers and apparel use their own slugs ('nike', 'supreme', 'air-jordan', 'newbalance').","on_invalid":"reject","example":"pokemon","aliases":["brand_id","brand_slug"]},{"name":"department","type":"string","required":false,"description":"Which half of the marketplace to read.","on_invalid":"ignore","allowed_values":[{"value":"tradingCard","label":"Trading cards"},{"value":"sneaker","label":"Sneakers"},{"value":"streetwear","label":"Apparel and collectibles"}],"default":"tradingCard"},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100). The source refuses more than 100.","on_invalid":"ignore","default":30,"minimum":1,"maximum":100,"aliases":["per_page"]}],"returns":"results[]{product_id, code, url, name, product_number, min_price_usd, listing_count, released_at, image}, brand, page, limit","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"pokemon","department":"tradingCard"}},{"name":"brand/detail","description":"One brand record and the category ids under it — the ids `browse` takes.","required_params":["brand"],"optional_params":[],"params":[{"name":"brand","type":"string","required":true,"description":"Brand slug exactly as it appears in a snkrdunk URL. Trading cards: pokemon, yu-gi-oh, onepiece, dragonball, mtg. Sneakers and apparel use their own slugs ('nike', 'supreme', 'air-jordan', 'newbalance').","on_invalid":"reject","example":"pokemon","aliases":["brand_id","brand_slug"]}],"returns":"brand{id, name}, categories[]{id, name, title}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"brand":"pokemon"}},{"name":"conditions","description":"The grade enum the marketplace uses (A, B, C, D and the PSA grades), with the id and key behind each label. The values `condition` fields come back as.","required_params":[],"optional_params":[],"params":[],"returns":"conditions[]{id, name, key}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"sok","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ŞOK Market API scraper — Turkish discount grocery chain (sokmarket.com.tr): search ŞOK's online grocery shelf and ŞOK Ekstra, browse the category tree, list the weekly \"Haftanın Fırsatları\" deals and ŞOK's campaigns with their products, and read one product — price, struck price and discount, stock, brand, origin, net quantity, ingredients, allergens, storage condition, nutrition table and package dimensions. Prices in TRY, scoped to a named ŞOK store. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/sok/v1","spec_available":true,"actions":[{"name":"search","description":"Search ŞOK by keyword in either shop — `market` (the online grocery shelf) or `ekstra` (electronics, home, fashion) — with ŞOK's own sort orders and optional category, brand and price filters. Each row carries the product id, title, brand, URL, images, the store's price, ŞOK's struck price and discount where one exists, stock, the full category path and any campaign badge the product carries.","required_params":["query"],"optional_params":["channel","page","page_size","sort","category_id","brand_id","min_price","max_price","only_campaign_products","store_id","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for on ŞOK's shelf, in Turkish. ŞOK matches words literally: it does not correct typos and does not pad an unmatched query with unrelated products, so a misspelling returns nothing.","on_invalid":"reject","example":"çikolata","aliases":["q","keyword"]},{"name":"channel","type":"enum","required":false,"description":"Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices.","on_invalid":"reject","allowed_values":[{"value":"market","label":"ŞOK Market — the online grocery shelf"},{"value":"ekstra","label":"ŞOK Ekstra / İste Gelsin — electronics, home, fashion"}],"default":"market"},{"name":"page","type":"integer","required":false,"description":"Zero-based page number (ŞOK's own numbering).","on_invalid":"reject","default":0,"minimum":0,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-500 (default 100).","on_invalid":"reject","default":100,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"The four sort orders ŞOK's own search supports.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"ŞOK's own recommended order (Önerilen Sıralama)"},{"value":"relevance_asc","label":"ŞOK's recommended order, reversed"},{"value":"price_asc","label":"Cheapest first (Fiyatı Artan)"},{"value":"price_desc","label":"Most expensive first (Fiyatı Azalan)"}],"default":"relevance"},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one ŞOK category id (from the `categories` action or the number at the end of a category URL, …-c-460).","on_invalid":"reject","example":460},{"name":"brand_id","type":"integer","required":false,"description":"Restrict to one ŞOK brand id (the `brand_id` on any row).","on_invalid":"reject","example":6},{"name":"min_price","type":"number","required":false,"description":"Only products priced at or above this, in TRY.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Only products priced at or below this, in TRY.","on_invalid":"reject","example":100,"minimum":0},{"name":"only_campaign_products","type":"boolean","required":false,"description":"Only products carrying a ŞOK campaign badge (ŞOK's own \"Kampanyalı Ürünler\" filter).","on_invalid":"reject","default":false},{"name":"store_id","type":"string","required":false,"description":"Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from.","on_invalid":"reject","example":"13412"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-10, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":10}],"returns":"results[]{position, product_id, sku_id, offer_id, channel, store_id, title, brand, brand_id, url, image, images[], price (number, TRY), price_before_discount (ŞOK's struck price — null when ŞOK publishes none for that product, which is the case for about 92 % of the shelf), discount_percent (null unless a struck price exists; never estimated), currency=TRY, unit_price (always null — ŞOK publishes no unit price for any product), in_stock, private_label (a ŞOK own-brand product), sales_unit (EACH/KG), min_order_quantity, max_order_quantity, quantity_increment, category, category_id, category_path[{id, name, url}], campaigns[{campaign_id, title, url, starts_on, ends_on}] (starts_on/ends_on are always null — ŞOK publishes no campaign dates), badges[{campaign_id, title, text, display_type}], store_sku_code (ŞOK's internal article number, not a barcode)}, count, total_results, total_pages, page, page_size, has_more, channel, store_id, query, sort, filters_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"süt","channel":"market"}},{"name":"category/products","description":"Browse one ŞOK category — every product ŞOK lists in it, paged, with the same fields as search and the same optional brand, price and campaign filters. Category ids come from the `categories` action or from the number at the end of a ŞOK category URL.","required_params":["category_id"],"optional_params":["channel","page","page_size","sort","brand_id","min_price","max_price","only_campaign_products","store_id","max_rotations"],"params":[{"name":"category_id","type":"integer","required":true,"description":"The ŞOK category to browse — an id from the `categories` action or the number at the end of a category URL (…-c-460 → 460).","on_invalid":"reject","example":460},{"name":"channel","type":"enum","required":false,"description":"Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices.","on_invalid":"reject","allowed_values":[{"value":"market","label":"ŞOK Market — the online grocery shelf"},{"value":"ekstra","label":"ŞOK Ekstra / İste Gelsin — electronics, home, fashion"}],"default":"market"},{"name":"page","type":"integer","required":false,"description":"Zero-based page number (ŞOK's own numbering).","on_invalid":"reject","default":0,"minimum":0,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-500 (default 100).","on_invalid":"reject","default":100,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"The four sort orders ŞOK's own search supports.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"ŞOK's own recommended order (Önerilen Sıralama)"},{"value":"relevance_asc","label":"ŞOK's recommended order, reversed"},{"value":"price_asc","label":"Cheapest first (Fiyatı Artan)"},{"value":"price_desc","label":"Most expensive first (Fiyatı Azalan)"}],"default":"relevance"},{"name":"brand_id","type":"integer","required":false,"description":"Restrict to one ŞOK brand id (the `brand_id` on any row).","on_invalid":"reject","example":6},{"name":"min_price","type":"number","required":false,"description":"Only products priced at or above this, in TRY.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Only products priced at or below this, in TRY.","on_invalid":"reject","example":100,"minimum":0},{"name":"only_campaign_products","type":"boolean","required":false,"description":"Only products carrying a ŞOK campaign badge (ŞOK's own \"Kampanyalı Ürünler\" filter).","on_invalid":"reject","default":false},{"name":"store_id","type":"string","required":false,"description":"Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from.","on_invalid":"reject","example":"13412"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-10, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":10}],"returns":"results[]{position, product_id, sku_id, offer_id, channel, store_id, title, brand, brand_id, url, image, images[], price (number, TRY), price_before_discount (ŞOK's struck price — null when ŞOK publishes none for that product, which is the case for about 92 % of the shelf), discount_percent (null unless a struck price exists; never estimated), currency=TRY, unit_price (always null — ŞOK publishes no unit price for any product), in_stock, private_label (a ŞOK own-brand product), sales_unit (EACH/KG), min_order_quantity, max_order_quantity, quantity_increment, category, category_id, category_path[{id, name, url}], campaigns[{campaign_id, title, url, starts_on, ends_on}] (starts_on/ends_on are always null — ŞOK publishes no campaign dates), badges[{campaign_id, title, text, display_type}], store_sku_code (ŞOK's internal article number, not a barcode)}, count, total_results, total_pages, page, page_size, has_more, channel, store_id, category_id, sort, filters_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":460}},{"name":"categories","description":"ŞOK's whole category tree for a shop — every category with its id, name, level, parent and URL, nested — plus the shortcuts ŞOK links from its own front page (its weekly deal page, new products, gluten-free and so on). Use the ids with `category/products`.","required_params":[],"optional_params":["channel","max_depth","store_id","max_rotations"],"params":[{"name":"channel","type":"enum","required":false,"description":"Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices.","on_invalid":"reject","allowed_values":[{"value":"market","label":"ŞOK Market — the online grocery shelf"},{"value":"ekstra","label":"ŞOK Ekstra / İste Gelsin — electronics, home, fashion"}],"default":"market"},{"name":"max_depth","type":"integer","required":false,"description":"How many levels of the category tree to return (1-6).","on_invalid":"reject","default":3,"minimum":1,"maximum":6},{"name":"store_id","type":"string","required":false,"description":"Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from.","on_invalid":"reject","example":"13412"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-10, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":10}],"returns":"categories[{category_id, name, level, parent_id, url, children[…]}], category_count, shortcuts[{title, url, kind}], channel, store_id","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"channel":"market"}},{"name":"product/detail","description":"One ŞOK product by id or URL: the store's price, ŞOK's struck price and discount where one exists, stock, brand, own-brand flag, images, the full category path, campaign badges, the product description, country of origin, net quantity, ingredients, allergen warning, storage condition, usage instructions, the nutrition table and the package dimensions ŞOK publishes.","required_params":[],"optional_params":["product_id","url","channel","store_id","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"The ŞOK product id — the number at the end of a product URL (…-p-5834 → 5834). Give this or `url`.","on_invalid":"reject","example":"5834","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"A ŞOK product page URL, instead of `product_id`.","on_invalid":"reject","example":"https://www.sokmarket.com.tr/mis-uht-sut-yarim-yagli-1-l-p-5834"},{"name":"channel","type":"enum","required":false,"description":"Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices.","on_invalid":"reject","allowed_values":[{"value":"market","label":"ŞOK Market — the online grocery shelf"},{"value":"ekstra","label":"ŞOK Ekstra / İste Gelsin — electronics, home, fashion"}],"default":"market"},{"name":"store_id","type":"string","required":false,"description":"Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from.","on_invalid":"reject","example":"13412"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-10, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":10}],"returns":"product{position, product_id, sku_id, offer_id, channel, store_id, title, brand, brand_id, url, image, images[], price (number, TRY), price_before_discount (ŞOK's struck price — null when ŞOK publishes none for that product, which is the case for about 92 % of the shelf), discount_percent (null unless a struck price exists; never estimated), currency=TRY, unit_price (always null — ŞOK publishes no unit price for any product), in_stock, private_label (a ŞOK own-brand product), sales_unit (EACH/KG), min_order_quantity, max_order_quantity, quantity_increment, category, category_id, category_path[{id, name, url}], campaigns[{campaign_id, title, url, starts_on, ends_on}] (starts_on/ends_on are always null — ŞOK publishes no campaign dates), badges[{campaign_id, title, text, display_type}], store_sku_code (ŞOK's internal article number, not a barcode), description, country_of_origin, net_quantity, ingredients, allergen_warning, storage_condition, usage_instructions, other_warnings, food_business_operator, company_registration_number, nutrition_facts[{code, name, value, order}], dimensions{length, width, height, weight, length_unit, weight_unit}, specifications[{name, value}], vat_rate, refund_allowed, variant_id, seller_code}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"5834"}},{"name":"campaigns","description":"The products of a ŞOK campaign listing. `weekly_deals` (the default) is ŞOK's own deal page — every product it currently sells below its struck price, with both prices and the discount. `badge_campaigns` is ŞOK's \"Kampanyalı Ürünler\" filter (1 Alana 1 Bedava, 50 TL ve üzeri…). `campaign` returns one named campaign's products together with its terms; `promotion_group` and `product_group` return ŞOK's own grouped listings.","required_params":[],"optional_params":["campaign","campaign_id","group_id","channel","page","page_size","store_id","max_rotations"],"params":[{"name":"campaign","type":"enum","required":false,"description":"Which ŞOK campaign listing to return. `weekly_deals` is the deal page ŞOK links from its own front page.","on_invalid":"reject","allowed_values":[{"value":"weekly_deals","label":"Haftanın Fırsatları — every product ŞOK currently sells below its own struck price"},{"value":"badge_campaigns","label":"Products carrying a ŞOK campaign badge (1 Alana 1 Bedava, 50 TL ve üzeri…)"},{"value":"campaign","label":"One named campaign — pass its campaign_id"},{"value":"promotion_group","label":"One ŞOK promotion group — pass its group_id"},{"value":"product_group","label":"One ŞOK product group — pass its group_id"}],"default":"weekly_deals"},{"name":"campaign_id","type":"string","required":false,"description":"Required with campaign=campaign: a campaign id from the `campaigns/list` action.","on_invalid":"reject","example":"c940b153-87b4-49d7-b73a-aa86b21a2f26"},{"name":"group_id","type":"string","required":false,"description":"Required with campaign=promotion_group or campaign=product_group: the id at the end of the group's URL (…-pgrp-<id> / …-sgrp-<id>).","on_invalid":"reject","example":"191552"},{"name":"channel","type":"enum","required":false,"description":"Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices.","on_invalid":"reject","allowed_values":[{"value":"market","label":"ŞOK Market — the online grocery shelf"},{"value":"ekstra","label":"ŞOK Ekstra / İste Gelsin — electronics, home, fashion"}],"default":"market"},{"name":"page","type":"integer","required":false,"description":"Zero-based page number (ŞOK's own numbering).","on_invalid":"reject","default":0,"minimum":0,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-500 (default 100).","on_invalid":"reject","default":100,"minimum":1,"maximum":500},{"name":"store_id","type":"string","required":false,"description":"Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from.","on_invalid":"reject","example":"13412"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-10, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":10}],"returns":"results[]{position, product_id, sku_id, offer_id, channel, store_id, title, brand, brand_id, url, image, images[], price (number, TRY), price_before_discount (ŞOK's struck price — null when ŞOK publishes none for that product, which is the case for about 92 % of the shelf), discount_percent (null unless a struck price exists; never estimated), currency=TRY, unit_price (always null — ŞOK publishes no unit price for any product), in_stock, private_label (a ŞOK own-brand product), sales_unit (EACH/KG), min_order_quantity, max_order_quantity, quantity_increment, category, category_id, category_path[{id, name, url}], campaigns[{campaign_id, title, url, starts_on, ends_on}] (starts_on/ends_on are always null — ŞOK publishes no campaign dates), badges[{campaign_id, title, text, display_type}], store_sku_code (ŞOK's internal article number, not a barcode)}, count, total_results, total_pages, page, page_size, has_more, channel, store_id, campaign, campaign_id, campaign_title, campaign_url, terms (ŞOK's own campaign conditions as text — the only place a campaign date appears, and only as prose), starts_on (null), ends_on (null)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"campaign":"weekly_deals"}},{"name":"campaigns/list","description":"ŞOK's campaign catalogue: every campaign currently running with its id, title, conditions, page URL and artwork, plus the campaign groups ŞOK sorts them into. Feed a campaign_id back into the `campaigns` action to get that campaign's products.","required_params":[],"optional_params":["channel","group_id","page","store_id","max_rotations"],"params":[{"name":"channel","type":"enum","required":false,"description":"Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices.","on_invalid":"reject","allowed_values":[{"value":"market","label":"ŞOK Market — the online grocery shelf"},{"value":"ekstra","label":"ŞOK Ekstra / İste Gelsin — electronics, home, fashion"}],"default":"market"},{"name":"group_id","type":"string","required":false,"description":"Only list campaigns in one ŞOK campaign group (an id from this action's own `groups` list).","on_invalid":"reject","example":"172"},{"name":"page","type":"integer","required":false,"description":"Zero-based page number (ŞOK's own numbering).","on_invalid":"reject","default":0,"minimum":0,"maximum":500},{"name":"store_id","type":"string","required":false,"description":"Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from.","on_invalid":"reject","example":"13412"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-10, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":10}],"returns":"campaigns[{campaign_id, title, description, url, product_count, starts_on (null), ends_on (null), images[]}], count, total_results, page, has_more, groups[{group_id, name, url}], channel, store_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"group_id":"172"}},{"name":"suggest","description":"ŞOK's own search autocomplete for a partial keyword: the search terms and category suggestions the site offers while the shopper types.","required_params":["query"],"optional_params":["channel","store_id","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far (2+ characters).","on_invalid":"reject","example":"çiko","aliases":["q","keyword"]},{"name":"channel","type":"enum","required":false,"description":"Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices.","on_invalid":"reject","allowed_values":[{"value":"market","label":"ŞOK Market — the online grocery shelf"},{"value":"ekstra","label":"ŞOK Ekstra / İste Gelsin — electronics, home, fashion"}],"default":"market"},{"name":"store_id","type":"string","required":false,"description":"Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from.","on_invalid":"reject","example":"13412"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-10, default 5).","on_invalid":"ignore","default":5,"minimum":1,"maximum":10}],"returns":"suggestions[] (search terms), categories[{name, url}], products[] (when ŞOK returns any), count, channel, store_id, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"sut"}}]},{"name":"sports-data","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Sports Data API — live scores, fixtures, standings, teams, players & odds (ESPN + SofaScore)","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/sports-data/v1","spec_available":true,"actions":[{"name":"scores","description":"Live and final scores for a league — pass a date (YYYYMMDD) or range to get scores for any day; omit it for today/in-play games.","required_params":["sport","league"],"optional_params":["date","dates"],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"},{"name":"date","type":"string","required":false,"description":"Date filter, ESPN format YYYYMMDD (or a range 'YYYYMMDD-YYYYMMDD'). Omit for today / live.","on_invalid":"ignore","example":"20260115","aliases":["dates"]}],"returns":"events[] (scoreboard: teams, score, status, competition), count","cacheable":true,"cache_ttl_seconds":30,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"soccer","league":"eng.1","dates":"20260301-20260331"}},{"name":"fixtures","description":"Upcoming fixtures and the match schedule for a league, by date or date range (same event shape as scores).","required_params":["sport","league"],"optional_params":["date","dates"],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"},{"name":"date","type":"string","required":false,"description":"Date filter, ESPN format YYYYMMDD (or a range 'YYYYMMDD-YYYYMMDD'). Omit for today / live.","on_invalid":"ignore","example":"20260115","aliases":["dates"]}],"returns":"events[] (schedule by date/range), count","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"soccer","league":"eng.1","dates":"20260301-20260331"}},{"name":"standings","description":"Full league table / standings with wins, losses, points and per-team stats (soccer leagues accept a season year).","required_params":["sport","league"],"optional_params":["season"],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025}],"returns":"league, season, standings[]{rank,team,played,wins,draws,losses,points}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"basketball","league":"nba"}},{"name":"team","description":"Every team in a league, or one team's detail (record, next game, logo) when you pass a team_id.","required_params":["sport","league"],"optional_params":["team_id"],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"},{"name":"team_id","type":"string","required":false,"description":"ESPN team id — get it from the `team` action's teams[].team_id for the same sport/league (e.g. 13 = NBA Denver Nuggets).","on_invalid":"reject","example":"13"}],"returns":"teams[] for the league, OR a single team{} when team_id is given","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"basketball","league":"nba"}},{"name":"roster","description":"A team's full roster / squad with jersey, position, age, height, weight and nationality for each player.","required_params":["sport","league","team_id"],"optional_params":[],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"},{"name":"team_id","type":"string","required":true,"description":"ESPN team id — get it from the `team` action's teams[].team_id for the same sport/league (e.g. 13 = NBA Denver Nuggets).","on_invalid":"reject","example":"13"}],"returns":"roster{} — squad with player fields, player_count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"basketball","league":"nba","team_id":"13"}},{"name":"summary","description":"Full match summary: boxscore, per-player stats, lineups, play-by-play count, head-to-head, win probability and odds.","required_params":["sport","league","event_id"],"optional_params":[],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"},{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"boxscore + player stats + play-by-play + H2H + win-probability + lineups + pickcenter","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":2},"example_params":{"sport":"baseball","league":"mlb","event_id":"401815591"}},{"name":"odds","description":"Betting odds (moneyline, spread, over/under) — for one game by event_id, or every scheduled game in the league that has odds.","required_params":["sport","league"],"optional_params":["event_id","dates"],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"},{"name":"event_id","type":"string","required":false,"description":"Optional ESPN event id: returns the closing line for that one game; omit to list every scheduled game that currently has odds.","on_invalid":"reject","example":"401815591"},{"name":"date","type":"string","required":false,"description":"Date filter, ESPN format YYYYMMDD (or a range 'YYYYMMDD-YYYYMMDD'). Omit for today / live.","on_invalid":"ignore","example":"20260115","aliases":["dates"]}],"returns":"events_with_odds[] (or odds[] for one event_id): moneyline/spread/total, count","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"baseball","league":"mlb","event_id":"401815591"}},{"name":"news","description":"Latest news headlines and articles for a league.","required_params":["sport","league"],"optional_params":[],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"}],"returns":"league, articles[] (headlines), count","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"basketball","league":"nba"}},{"name":"search","description":"Look up a team or player by name across all sports (returns ids, badges, league, country) — start here when you only have a name.","required_params":["query"],"optional_params":["type"],"params":[{"name":"query","type":"string","required":true,"description":"Search text for a team/player/tournament/manager/referee.","on_invalid":"reject","example":"Messi","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"What to look up in the (thesportsdb) search. Defaults to team.","on_invalid":"ignore","allowed_values":[{"value":"team","label":"Teams"},{"value":"player","label":"Players"}],"default":"team","example":"player"}],"returns":"type, query, results[] (teams or players from thesportsdb), count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Arsenal","type":"team"}},{"name":"injuries","description":"Current injury report for a league, grouped by team, with each player's status and detail.","required_params":["sport","league"],"optional_params":[],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"}],"returns":"league, teams[]{team, injuries[]{player,position,status,date,detail}}, count","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"basketball","league":"nba"}},{"name":"team_schedule","description":"One team's full season schedule and results (every game the team plays, unlike league-wide fixtures).","required_params":["sport","league","team_id"],"optional_params":["season"],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"},{"name":"team_id","type":"string","required":true,"description":"ESPN team id — get it from the `team` action's teams[].team_id for the same sport/league (e.g. 13 = NBA Denver Nuggets).","on_invalid":"reject","example":"13"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025}],"returns":"team, season, events[] (same shape as scores/fixtures), count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"basketball","league":"nba","team_id":"13"}},{"name":"conferences","description":"A league's conference / division structure (the directory of groups and sub-groups, e.g. college conferences).","required_params":["sport","league"],"optional_params":[],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"},{"name":"league","type":"enum","required":true,"description":"League key (e.g. nba, nfl, mlb, nhl, eng.1, esp.1, ita.1, ger.1, fra.1, uefa.champions, usa.1) or a raw ESPN segment ('bra.1') / cricket series id. SofaScore actions also accept a numeric tournament id.","on_invalid":"ignore","allowed_values":[{"value":"nba","label":"NBA"},{"value":"wnba","label":"WNBA"},{"value":"ncaam","label":"NCAA Men's Basketball"},{"value":"ncaaw","label":"NCAA Women's Basketball"},{"value":"nfl","label":"NFL"},{"value":"ncaaf","label":"NCAA Football"},{"value":"mlb","label":"MLB"},{"value":"college-baseball","label":"NCAA Baseball"},{"value":"nhl","label":"NHL"},{"value":"atp","label":"ATP"},{"value":"wta","label":"WTA"},{"value":"eng.1","label":"English Premier League"},{"value":"eng.2","label":"EFL Championship"},{"value":"esp.1","label":"Spanish La Liga"},{"value":"ita.1","label":"Italian Serie A"},{"value":"ger.1","label":"German Bundesliga"},{"value":"fra.1","label":"French Ligue 1"},{"value":"ned.1","label":"Dutch Eredivisie"},{"value":"por.1","label":"Portuguese Primeira Liga"},{"value":"usa.1","label":"Major League Soccer"},{"value":"mex.1","label":"Liga MX"},{"value":"bra.1","label":"Brazilian Serie A"},{"value":"uefa.champions","label":"UEFA Champions League"},{"value":"uefa.europa","label":"UEFA Europa League"},{"value":"fifa.world","label":"FIFA World Cup"},{"value":"ipl","label":"Indian Premier League"},{"value":"bbl","label":"Big Bash League"},{"value":"sheffield-shield","label":"Sheffield Shield"},{"value":"county-championship","label":"County Championship Div One"},{"value":"cricket-world-cup","label":"ICC Cricket World Cup"}],"example":"eng.1"}],"returns":"league, groups[]{name,abbreviation,is_conference,children[] (nested conferences/divisions)}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"basketball","league":"ncaam"}},{"name":"leagues","description":"Directory of every supported league/competition (key, name, sport) — call this first to discover the league keys the other actions take.","required_params":[],"optional_params":["sport"],"params":[{"name":"sport","type":"enum","required":false,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"example":"soccer"}],"returns":"sport, leagues[]{league (key to pass to other actions), name, sport}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"soccer"}},{"name":"entity_search","description":"search players/teams/tournaments/managers/referees → SofaScore ids","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search text for a team/player/tournament/manager/referee.","on_invalid":"reject","example":"Messi","aliases":["q"]}],"returns":"query, results[]{type,id,name,slug,sport,country}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Haaland"}},{"name":"live_events","description":"all in-play events for a sport","required_params":["sport"],"optional_params":[],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"default":"football","example":"football"}],"returns":"sport, events[] (in-play, unified brief), count","cacheable":true,"cache_ttl_seconds":15,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"soccer"}},{"name":"scheduled_events","description":"all scheduled events for a sport on a date","required_params":["sport","date"],"optional_params":[],"params":[{"name":"sport","type":"enum","required":true,"description":"Sport family (ESPN path). Required with a raw league segment; a known league key (e.g. 'nba') can resolve the sport on its own.","on_invalid":"ignore","allowed_values":[{"value":"baseball","label":"Baseball"},{"value":"basketball","label":"Basketball"},{"value":"cricket","label":"Cricket"},{"value":"football","label":"Football"},{"value":"hockey","label":"Hockey"},{"value":"soccer","label":"Soccer"},{"value":"tennis","label":"Tennis"}],"default":"football","example":"football"},{"name":"date","type":"string","required":true,"description":"Date filter, ESPN format YYYYMMDD (or a range 'YYYYMMDD-YYYYMMDD'). Omit for today / live.","on_invalid":"ignore","example":"20260115","aliases":["dates"]}],"returns":"sport, date, events[] (scheduled, unified brief), count","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"sport":"soccer","date":"20260115"}},{"name":"tournament_seasons","description":"Every season available for a competition (season id + year) — use the id to scope season-specific calls.","required_params":["league"],"optional_params":[],"params":[{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"}],"returns":"unique_tournament_id, seasons[]{season_id,name,year}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"league":"eng.1"}},{"name":"match_statistics","description":"detailed match stats (possession/shots/xG)","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"per-period stat groups (possession/shots/xG/...) keyed by period","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":2},"example_params":{"event_id":"14025079"}},{"name":"match_lineups","description":"lineups + per-player ratings & stats","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"confirmed, home/away{formation, players[]{rating,minutes,goals,...}, missing[]}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":2},"example_params":{"event_id":"14025079"}},{"name":"match_momentum","description":"attack-momentum graph","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"momentum[]{minute,value}, period_minutes, periods","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"14025079"}},{"name":"match_incidents","description":"goal/card/sub timeline","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"event_id, items[] (goal/card/sub timeline), count","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"14025079"}},{"name":"match_best_players","description":"best player per team","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"home/away best player {name,rating,label}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"401815591"}},{"name":"match_h2h","description":"head-to-head duel record","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"team_duel{home_wins,away_wins,draws}, manager_duel","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"14025079"}},{"name":"match_managers","description":"both managers for a match","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"home/away manager {manager_id,name}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"401815591"}},{"name":"match_odds","description":"multi-market odds for a match","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"event_id, markets[]{market,choices[]{name,odds,...}}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":2},"example_params":{"event_id":"401815591"}},{"name":"match_player_heatmap","description":"a player's touch heatmap in a match","required_params":["event_id","player_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"},{"name":"player_id","type":"string","required":true,"description":"SofaScore player id (e.g. 839956 = Erling Haaland). Resolve unknown players from a SofaScore player URL or a team_squad result.","on_invalid":"reject","example":"839956"}],"returns":"points[]{x,y}, count (a player's touch heatmap in the match)","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"401815591","player_id":"839956"}},{"name":"match_player_shotmap","description":"a player's shotmap in a match","required_params":["event_id","player_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"},{"name":"player_id","type":"string","required":true,"description":"SofaScore player id (e.g. 839956 = Erling Haaland). Resolve unknown players from a SofaScore player URL or a team_squad result.","on_invalid":"reject","example":"839956"}],"returns":"shots[]{player,shot_type,x,y,xg,minute}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"401815591","player_id":"839956"}},{"name":"match_average_positions","description":"average player positions on the pitch","required_params":["event_id"],"optional_params":[],"params":[{"name":"event_id","type":"string","required":true,"description":"ESPN event/game id — take it from the `event_id` of any scores, fixtures or team_schedule result for the same sport/league.","on_invalid":"reject","example":"401815591"}],"returns":"home/away[]{player,avg_x,avg_y,touches}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"event_id":"14025079"}},{"name":"player","description":"Player profile: current team, position, market value, preferred foot, height, date of birth and contract — by SofaScore player id.","required_params":["player_id"],"optional_params":[],"params":[{"name":"player_id","type":"string","required":true,"description":"SofaScore player id (e.g. 839956 = Erling Haaland). Resolve unknown players from a SofaScore player URL or a team_squad result.","on_invalid":"reject","example":"839956"}],"returns":"player profile {name,team,position,value,foot,contract,...}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"player_id":"839956"}},{"name":"player_season_stats","description":"player's season statistics in a league","required_params":["player_id","league"],"optional_params":["season","type"],"params":[{"name":"player_id","type":"string","required":true,"description":"SofaScore player id (e.g. 839956 = Erling Haaland). Resolve unknown players from a SofaScore player URL or a team_squad result.","on_invalid":"reject","example":"839956"},{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"type","type":"enum","required":false,"description":"Stat split. Other SofaScore split keys are accepted but a wrong one 404s.","on_invalid":"ignore","allowed_values":[{"value":"overall","label":"All competitions"},{"value":"home","label":"Home only"},{"value":"away","label":"Away only"}],"default":"overall","example":"overall"},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"team, statistics{} for the season","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"player_id":"839956","league":"eng.1","season_id":"61627"}},{"name":"player_heatmap","description":"player's season heatmap","required_params":["player_id","league"],"optional_params":["season"],"params":[{"name":"player_id","type":"string","required":true,"description":"SofaScore player id (e.g. 839956 = Erling Haaland). Resolve unknown players from a SofaScore player URL or a team_squad result.","on_invalid":"reject","example":"839956"},{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"points[]{x,y}, count (season heatmap)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"player_id":"839956","league":"eng.1"}},{"name":"player_attributes","description":"player attribute radar (att/tech/tac/def/cre)","required_params":["player_id"],"optional_params":[],"params":[{"name":"player_id","type":"string","required":true,"description":"SofaScore player id (e.g. 839956 = Erling Haaland). Resolve unknown players from a SofaScore player URL or a team_squad result.","on_invalid":"reject","example":"839956"}],"returns":"player + position_average attribute radars","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"player_id":"839956"}},{"name":"player_transfers","description":"A player's full transfer history (from/to club, fee, date) by SofaScore player id.","required_params":["player_id"],"optional_params":[],"params":[{"name":"player_id","type":"string","required":true,"description":"SofaScore player id (e.g. 839956 = Erling Haaland). Resolve unknown players from a SofaScore player URL or a team_squad result.","on_invalid":"reject","example":"839956"}],"returns":"transfers[]{from,to,fee,date}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"player_id":"839956"}},{"name":"player_recent","description":"player's recent matches","required_params":["player_id"],"optional_params":[],"params":[{"name":"player_id","type":"string","required":true,"description":"SofaScore player id (e.g. 839956 = Erling Haaland). Resolve unknown players from a SofaScore player URL or a team_squad result.","on_invalid":"reject","example":"839956"}],"returns":"player_id, recent_matches[] (unified brief), count","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"player_id":"839956"}},{"name":"team_details","description":"Team profile: manager, venue, founding year and recent pregame form — by SofaScore team id.","required_params":["team_id"],"optional_params":[],"params":[{"name":"team_id","type":"string","required":true,"description":"SofaScore team id (NOT the ESPN id) — e.g. 17 = Manchester City, 42 = Arsenal. Resolve unknown teams via a SofaScore team URL.","on_invalid":"reject","example":"17"}],"returns":"team profile {name,manager,venue,founded,pregame_form,...}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"team_id":"17"}},{"name":"team_squad","description":"A club's full current squad (every player with id, position, value) by SofaScore team id.","required_params":["team_id"],"optional_params":[],"params":[{"name":"team_id","type":"string","required":true,"description":"SofaScore team id (NOT the ESPN id) — e.g. 17 = Manchester City, 42 = Arsenal. Resolve unknown teams via a SofaScore team URL.","on_invalid":"reject","example":"17"}],"returns":"team_id, squad[] (players), count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"team_id":"17"}},{"name":"team_transfers","description":"A club's transfers in and out (player, club, fee, date) by SofaScore team id.","required_params":["team_id"],"optional_params":[],"params":[{"name":"team_id","type":"string","required":true,"description":"SofaScore team id (NOT the ESPN id) — e.g. 17 = Manchester City, 42 = Arsenal. Resolve unknown teams via a SofaScore team URL.","on_invalid":"reject","example":"17"}],"returns":"transfers{in[],out[]}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"team_id":"17"}},{"name":"team_season_stats","description":"team's season statistics in a league","required_params":["team_id","league"],"optional_params":["season","type"],"params":[{"name":"team_id","type":"string","required":true,"description":"SofaScore team id (NOT the ESPN id) — e.g. 17 = Manchester City, 42 = Arsenal. Resolve unknown teams via a SofaScore team URL.","on_invalid":"reject","example":"17"},{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"type","type":"enum","required":false,"description":"Stat split. Other SofaScore split keys are accepted but a wrong one 404s.","on_invalid":"ignore","allowed_values":[{"value":"overall","label":"All competitions"},{"value":"home","label":"Home only"},{"value":"away","label":"Away only"}],"default":"overall","example":"overall"},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"statistics{} for the team's season","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"team_id":"17","league":"eng.1","season_id":"61627"}},{"name":"team_form","description":"team recent form + next/prev event","required_params":["team_id"],"optional_params":[],"params":[{"name":"team_id","type":"string","required":true,"description":"SofaScore team id (NOT the ESPN id) — e.g. 17 = Manchester City, 42 = Arsenal. Resolve unknown teams via a SofaScore team URL.","on_invalid":"reject","example":"17"}],"returns":"recent[]{result}, next_event, previous_event","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"team_id":"13"}},{"name":"team_goal_distributions","description":"goals scored/conceded by match period","required_params":["team_id","league"],"optional_params":["season"],"params":[{"name":"team_id","type":"string","required":true,"description":"SofaScore team id (NOT the ESPN id) — e.g. 17 = Manchester City, 42 = Arsenal. Resolve unknown teams via a SofaScore team URL.","on_invalid":"reject","example":"17"},{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"distributions[] (goals scored/conceded by match period)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"team_id":"13","league":"eng.1"}},{"name":"season_standings","description":"SofaScore league table for a competition (overall / home / away splits) with goals for/against and goal difference.","required_params":["league"],"optional_params":["season","type"],"params":[{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"type","type":"enum","required":false,"description":"Which standings table to return.","on_invalid":"ignore","allowed_values":[{"value":"total","label":"Overall table"},{"value":"home","label":"Home table"},{"value":"away","label":"Away table"}],"default":"total","example":"total"},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"standings[] tables{rows[]} (overall/home/away split, any season), count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"league":"eng.1"}},{"name":"season_top_players","description":"season leaders by category","required_params":["league"],"optional_params":["season","type"],"params":[{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"type","type":"enum","required":false,"description":"Split for the season leaders.","on_invalid":"ignore","allowed_values":[{"value":"overall","label":"Overall"},{"value":"home","label":"Home"},{"value":"away","label":"Away"}],"default":"overall","example":"overall"},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"top_players{category:[{player,team,value}]}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"league":"eng.1","season_id":"61627"}},{"name":"season_top_teams","description":"season top teams by category","required_params":["league"],"optional_params":["season","type"],"params":[{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"type","type":"enum","required":false,"description":"Split for the season leaders.","on_invalid":"ignore","allowed_values":[{"value":"overall","label":"Overall"},{"value":"home","label":"Home"},{"value":"away","label":"Away"}],"default":"overall","example":"overall"},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"top_teams{category:[{team,value}]}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"league":"eng.1","season_id":"61627"}},{"name":"team_of_week","description":"team of the week (round or rounds list)","required_params":["league"],"optional_params":["season","round_id"],"params":[{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"round_id","type":"string","required":false,"description":"Specific round id; omit to list the available rounds.","on_invalid":"ignore","example":"1"},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"the round's TOTW {formation,players[]} OR the rounds[] list","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"league":"eng.1"}},{"name":"power_rankings","description":"season power rankings","required_params":["league"],"optional_params":["season","round_id"],"params":[{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"round_id","type":"string","required":false,"description":"Specific round id; omit to list the available rounds.","on_invalid":"ignore","example":"1"},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"rankings[]{rank,team,points,change} (or rounds list)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"league":"eng.1"}},{"name":"cup_tree","description":"knockout bracket / cup tree","required_params":["league"],"optional_params":["season"],"params":[{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"},{"name":"season","type":"integer","required":false,"description":"Season year (soccer standings need it; default current season).","on_invalid":"ignore","example":2025},{"name":"season_id","type":"string","required":false,"description":"Explicit SofaScore season id (skips season resolution).","on_invalid":"ignore","example":"61627"}],"returns":"cup_trees[]{rounds[]{blocks[]}}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"league":"eng.1"}},{"name":"tournament_details","description":"Competition metadata: country, tier, and the clubs with the most titles — by league key.","required_params":["league"],"optional_params":[],"params":[{"name":"league","type":"string","required":true,"description":"League key (e.g. 'eng.1', 'nba'), a raw name to search, or a SofaScore numeric unique-tournament id.","on_invalid":"reject","example":"eng.1"}],"returns":"tournament meta {name,country,tier,titles,...}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"league":"eng.1"}},{"name":"manager","description":"Manager profile and full club-by-club career history (matches, wins, points) by SofaScore manager id.","required_params":["manager_id"],"optional_params":[],"params":[{"name":"manager_id","type":"string","required":true,"description":"SofaScore manager id (from entity_search).","on_invalid":"reject","example":"794075"}],"returns":"manager profile + career[] history","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"manager_id":"794075"}},{"name":"referee","description":"referee details + per-tournament stats","required_params":["referee_id"],"optional_params":[],"params":[{"name":"referee_id","type":"string","required":true,"description":"SofaScore referee id (from entity_search).","on_invalid":"reject","example":"111815"}],"returns":"referee profile + by_tournament[] stats","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"referee_id":"65702"}},{"name":"rankings","description":"World rankings — FIFA men's football, or ATP / WTA tennis (set type; defaults to FIFA).","required_params":[],"optional_params":["type"],"params":[{"name":"type","type":"enum","required":false,"description":"Which world ranking to return. Closed set: fifa, atp, wta (a wrong value returns INVALID_PARAM).","on_invalid":"reject","allowed_values":[{"value":"fifa","label":"FIFA men"},{"value":"atp","label":"ATP tennis"},{"value":"wta","label":"WTA tennis"}],"default":"fifa","example":"fifa"}],"returns":"type, rankings[]{rank,name,points,previous_rank,country}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"fifa"}}]},{"name":"sportscardspro","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"SportsCardsPro API — sports card price guide from sportscardspro.com: current market price per grade (Ungraded, Grade 1-9.5, PSA 10, BGS 10, BGS 10 Black, CGC 10, SGC 10, TAG 10) for baseball, basketball, football, hockey, soccer, racing, wrestling, UFC, boxing, golf and tennis cards, the monthly price history, the PSA / CGC population report, and the individual completed sales (eBay, Goldin, Heritage, Fanatics) behind the prices. Search, card, price history, sold listings, every card of a set, and the set lists. USD. No login, no key.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/sportscardspro/v1","spec_available":true,"actions":[{"name":"search","description":"Search SportsCardsPro by player, set, year or card number. Each row has the card id, set, sport and its Ungraded, PSA 10 and Grade 9 prices. The source returns at most 100 rows and has no further pages; narrow with sport / set_id / rookies_only.","required_params":["query"],"optional_params":["sport","rookies_only","exclude_variants","set_id","sort"],"params":[{"name":"query","type":"string","required":true,"description":"Player, set, year or card number words (the site's own search box).","on_invalid":"reject","example":"michael jordan 1986 fleer","aliases":["q","keyword","keywords"]},{"name":"sport","type":"enum","required":false,"description":"Only one sport.","on_invalid":"reject","allowed_values":[{"value":"baseball-cards","label":"Baseball"},{"value":"basketball-cards","label":"Basketball"},{"value":"football-cards","label":"Football"},{"value":"hockey-cards","label":"Hockey"},{"value":"racing-cards","label":"Racing"},{"value":"soccer-cards","label":"Soccer"},{"value":"ufc-cards","label":"UFC"},{"value":"wrestling-cards","label":"Wrestling"},{"value":"golf-cards","label":"Golf"},{"value":"tennis-cards","label":"Tennis"},{"value":"boxing-cards","label":"Boxing"}],"example":"basketball-cards","aliases":["category"]},{"name":"rookies_only","type":"boolean","required":false,"description":"Only rookie cards.","on_invalid":"reject","default":false,"example":true},{"name":"exclude_variants","type":"boolean","required":false,"description":"Leave out parallels / variants (Refractor, Prizm colours, [Rookie] …).","on_invalid":"reject","default":false,"example":true},{"name":"set_id","type":"string","required":false,"description":"Only one set: a search row's set_id (G47190 = 1984 Star basketball).","on_invalid":"reject","example":"G47190","value_pattern":"G\\d{1,9}","aliases":["console_id"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Most popular first (the site's default)"},{"value":"name","label":"Alphabetical"},{"value":"price-highest","label":"Highest Ungraded price first (the site orders by the first price)"},{"value":"change-dollar","label":"Biggest price change first"}],"default":"popularity","example":"price-highest"}],"returns":"rows[]: id, name, set_name, set_id, category (sport), image, print_run, prices[3]: {condition (Ungraded / PSA 10 / Grade 9), source_key, price_usd} — the site's list index; on a fast-moving card it can trail the card page. meta: possibly_truncated (100 rows = the source's cap), rows_outside_sport, filters_applied, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"michael jordan","sport":"basketball-cards"}},{"name":"card","description":"One card in full by its id: the price of every grade the site tracks (Full Price Guide), the headline grades with their last change and sales volume, the PSA and CGC population report by grade, card number, rookie flag, eBay ePID, images and how many sold listings each grade shows.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"`id` of a search or set row, as is (3225905 = 1984 Star Michael Jordan #101). A <set>/<card> path or a sportscardspro.com/game/… URL also works.","on_invalid":"reject","example":"3225905","aliases":["card_id","product_id","url"]}],"returns":"card{id, name, url, category, set_name, set_slug, set_id, image, genre, card_number, print_run, ebay_epid, details{label: value}, images[], population_report{PSA|CGC: [{grade 1-10, population}]}, headline_prices[{source_key, condition, price_usd, change_usd, sales_volume}], price_guide[{condition, condition_key, price_usd}], sold_listing_counts{condition: n}, price_basis}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"3225905"}},{"name":"price_history","description":"The monthly price history behind the card's chart, one series per headline grade (Ungraded, Grade 7, 8, 9, 9.5, PSA 10); the last point is the current month and equals the current price. Months without a price are null.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"`id` of a search or set row, as is (3225905 = 1984 Star Michael Jordan #101). A <set>/<card> path or a sportscardspro.com/game/… URL also works.","on_invalid":"reject","example":"3225905","aliases":["card_id","product_id","url"]}],"returns":"card{id, name, url, category, set_name}, series[{condition, source_key, priced_points, first_month, last_month, latest_price_usd, points[{month (YYYY-MM), timestamp_ms, price_usd}]}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"3225905"}},{"name":"sales","description":"The completed sales the site shows for a card, per grade (up to 30 per grade, newest first): date, listing title, sold price (best-offer: accepted price plus list price), marketplace and the item link.","required_params":["id"],"optional_params":["condition"],"params":[{"name":"id","type":"string","required":true,"description":"`id` of a search or set row, as is (3225905 = 1984 Star Michael Jordan #101). A <set>/<card> path or a sportscardspro.com/game/… URL also works.","on_invalid":"reject","example":"3225905","aliases":["card_id","product_id","url"]},{"name":"condition","type":"string","required":false,"description":"Only the sales of one grade, by the page's own label (Ungraded, Grade 1 … Grade 9.5, PSA 10, BGS 10, CGC 10, SGC 10 …). A label the card does not have is rejected with the list it has.","on_invalid":"reject","example":"Grade 9","aliases":["grade"]}],"returns":"card{id, name, url, category, set_name}, groups[{condition, source_key, condition_ambiguous, count, sales[{sale_id, date, title, price_usd, best_offer, best_offer_list_price_usd, source, source_label, source_item_id, url}]}]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"3225905","condition":"Grade 7"}},{"name":"set","description":"Every card of one set with its Ungraded, PSA 10 and Grade 9 prices and the latest price change, 150 per page.","required_params":["set"],"optional_params":["sort","cursor"],"params":[{"name":"set","type":"string","required":true,"description":"Set slug: a sets row's set_slug or a card's set_slug (basketball-cards-1984-star, baseball-cards-1952-topps).","on_invalid":"reject","example":"basketball-cards-1986-fleer","value_pattern":"[a-z0-9][a-z0-9-]{0,120}","aliases":["set_slug","console","console_slug"]},{"name":"sort","type":"enum","required":false,"description":"Order of the set's cards.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Most popular first (the site's default)"},{"value":"name","label":"Alphabetical"},{"value":"release-date","label":"By release date"},{"value":"highest-price","label":"Highest price first"},{"value":"lowest-price","label":"Lowest price first (products with no price come first)"},{"value":"change-dollar","label":"Biggest price change first"}],"default":"popularity","example":"highest-price"},{"name":"cursor","type":"integer","required":false,"description":"Paging: pass meta.next_cursor of the previous page (150 cards per page).","on_invalid":"reject","default":0,"example":150,"minimum":0,"maximum":100000,"aliases":["offset"]}],"returns":"rows[]: id, name, set_slug, product_slug, url, category, image, print_run, prices[3]: {condition (Ungraded / PSA 10 / Grade 9), source_key, price_usd} — the site's list index; on a fast-moving card it can trail the card page, price_change_usd, price_change_pct. meta: next_cursor, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"set":"basketball-cards-1984-star"}},{"name":"sets","description":"The popular sets the site lists for one sport (with the slug the `set` action takes), plus the sport's most popular players and card brands.","required_params":["sport"],"optional_params":[],"params":[{"name":"sport","type":"enum","required":true,"description":"Which sport's sets to list.","on_invalid":"reject","allowed_values":[{"value":"baseball-cards","label":"Baseball"},{"value":"basketball-cards","label":"Basketball"},{"value":"football-cards","label":"Football"},{"value":"hockey-cards","label":"Hockey"},{"value":"racing-cards","label":"Racing"},{"value":"soccer-cards","label":"Soccer"},{"value":"ufc-cards","label":"UFC"},{"value":"wrestling-cards","label":"Wrestling"},{"value":"golf-cards","label":"Golf"},{"value":"tennis-cards","label":"Tennis"},{"value":"boxing-cards","label":"Boxing"}],"example":"basketball-cards","aliases":["category"]}],"returns":"rows[]: set_slug, name, url. data.popular_players[{name, query, url}], data.brands[{name, url}]. meta: list_title.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sport":"basketball-cards"}}]},{"name":"sprouts","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Sprouts API scraper — shop.sprouts.com product search, categories, Weekly Ad deals, product detail and store locator with each Sprouts store's price. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/sprouts/v1","spec_available":true,"actions":[{"name":"search","description":"Search shop.sprouts.com at one Sprouts store: regular price (price list), was-price, member/card price and promotions apart, unit price, stock level, brand and size, in the site's own result order.","required_params":["query"],"optional_params":["page","per_page","include_unmatched","cursor","postal_code","store_id"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as typed in the shop.sprouts.com search box ('milk').","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"include_unmatched","type":"boolean","required":false,"description":"shop.sprouts.com pads a no-match search with unrelated products and does not flag them. Every row carries `matches_query`; false (default) drops a page on which no row shares a word with the query (counted in `unmatched_dropped`), true keeps it.","on_invalid":"reject","default":false},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Sprouts store prices the results (Sprouts prices and range differ by store). Default 85004 — then `store_defaulted` is true.","on_invalid":"reject","example":"85004","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Sprouts store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"25673"}],"returns":"products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, unmatched_dropped, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), query, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","postal_code":"85004"}},{"name":"category","description":"Every product of a shop.sprouts.com collection (a category, a brand or a diet collection from `categories`) priced at one store.","required_params":["slug"],"optional_params":["page","per_page","cursor","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":true,"description":"Collection slug from `categories` (n-dairy …) or a shop.sprouts.com /store/sprouts/collections/<slug> URL.","on_invalid":"reject","example":"n-dairy","aliases":["collection","url"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Sprouts store prices the results (Sprouts prices and range differ by store). Default 85004 — then `store_defaulted` is true.","on_invalid":"reject","example":"85004","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Sprouts store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"25673"}],"returns":"collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, per_page, last_page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-dairy","postal_code":"85004"}},{"name":"product/detail","description":"One Sprouts product: name, brand, size, category, ingredients, directions, warnings, images, rating — and its price, unit price, promotions and stock at one store.","required_params":["product_id"],"optional_params":["postal_code","store_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (every row's `product_id`) or a shop.sprouts.com /store/sprouts/products/ URL.","on_invalid":"reject","example":"17857780","aliases":["id","url"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Sprouts store prices the results (Sprouts prices and range differ by store). Default 85004 — then `store_defaulted` is true.","on_invalid":"reject","example":"85004","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Sprouts store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"25673"}],"returns":"product{product_id,name,brand,size,category{id,name},url,description,details,ingredients,directions,nutrition_text,warnings,other_sections[],images[],breadcrumb[],rating,rating_count,currency}, price, retailer_item (the store's row) or null + retailer_item_note when this store does not list it, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"17857780","postal_code":"85004"}},{"name":"categories","description":"The shop.sprouts.com category tree (departments and their collections) or one collection's sub-collections; slugs feed `category`.","required_params":[],"optional_params":["slug","postal_code","store_id"],"params":[{"name":"slug","type":"string","required":false,"description":"Optional collection slug: returns its sub-collections. Without it: the whole category tree.","on_invalid":"reject","example":"n-dairy","aliases":["collection"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Sprouts store prices the results (Sprouts prices and range differ by store). Default 85004 — then `store_defaulted` is true.","on_invalid":"reject","example":"85004","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Sprouts store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"25673"}],"returns":"collections[]{slug,name,url,children[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"slug":"n-dairy"}},{"name":"stores","description":"Sprouts stores around a US ZIP code, nearest first, with address, coordinates, distance and which services shop.sprouts.com offers there.","required_params":["postal_code"],"optional_params":["page","limit"],"params":[{"name":"postal_code","type":"string","required":true,"description":"US ZIP code to find Sprouts stores around (nearest first).","on_invalid":"reject","example":"85004","aliases":["zip","zip_code"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Stores per page (1-100, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":100}],"returns":"stores[]{store_id,name,street,city_state_zip,postal_code,latitude,longitude,distance_miles,service_types[],services_text,unavailable_text}, count, total, page, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"postal_code":"85004"}},{"name":"offers","description":"Sprouts's current deal lists at one store: Weekly Ad.","required_params":[],"optional_params":["type","page","per_page","cursor","postal_code","store_id"],"params":[{"name":"type","type":"enum","required":false,"description":"Which deal list: weekly_ad (Weekly Ad).","on_invalid":"reject","allowed_values":[{"value":"weekly_ad","label":"Weekly Ad"}],"default":"weekly_ad"},{"name":"page","type":"integer","required":false,"description":"1-based page. The site's order can shift between calls, so reading page by page can repeat or skip a product; for a complete scan follow `next_cursor` instead. A page past the end is INVALID_PARAM; read `last_page`/`has_more`.","on_invalid":"reject","default":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Products per page (1-40, default 20).","on_invalid":"reject","default":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous answer, sent WITH the same query/slug/type, store parameters and per_page (and no `page`). Returns the next page without products already returned: rows the site moved are dropped and counted in `duplicates_dropped`, the page is filled from the rest of the current list (`skipped_recovered` = products offset paging would have skipped).","on_invalid":"reject","example":"","aliases":["next_cursor"]},{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Sprouts store prices the results (Sprouts prices and range differ by store). Default 85004 — then `store_defaulted` is true.","on_invalid":"reject","example":"85004","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Sprouts store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"25673"}],"returns":"type, collection{id,name,slug,url}, products[]{product_id, item_id, name, brand, size, url, image, currency, price (regular price), price_display, original_price, discount_percent, savings, loyalty_price (member/card price, apart from price), loyalty_label, unit_price_text, price_is_estimate, estimated_weight_text, promotions[]{label,type,coupon} (BOGO, multi-buy, digital coupons), deal_terms, on_sale, buy_one_get_one, available, stock_level, stock_label, likely_out_of_stock, sold_by, dietary[], store_brand, badge, service_type, matches_query (search), retailer{shop_id,service_type,retailer_location_id}}, count, total, page, has_more, next_cursor, duplicates_dropped (cursor), skipped_recovered (cursor), store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"85004"}},{"name":"promotions","description":"Which Sprouts deal lists are live now at one store, each with its name and product count.","required_params":[],"optional_params":["postal_code","store_id"],"params":[{"name":"postal_code","type":"string","required":false,"description":"US ZIP code whose Sprouts store prices the results (Sprouts prices and range differ by store). Default 85004 — then `store_defaulted` is true.","on_invalid":"reject","example":"85004","aliases":["zip","zip_code"]},{"name":"store_id","type":"string","required":false,"description":"Optional Sprouts store id from `stores` (wins over postal_code for the store choice).","on_invalid":"reject","example":"25673"}],"returns":"promotions[]{type,name,slug,url,product_count,available}, store{store_id,name,street,city_state_zip,latitude,longitude}, service_type, postal_code, store_defaulted, currency","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"postal_code":"85004"}}]},{"name":"ss-lv","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"SS.com Latvia Classifieds — cars, flats, jobs, electronics (ss.com / ss.lv)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ss-lv/v1","spec_available":true,"actions":[{"name":"search","description":"Search all of SS.com, Latvia's largest classifieds site, by text: every matching advert across cars, property, electronics, jobs and every other section, with its category, price in EUR, region, thumbnail and advert code. Narrow by deal type (sell, buy, rent out, swap).","required_params":["query"],"optional_params":["deal_type","page","lang","include_pii"],"params":[{"name":"query","type":"string","required":true,"description":"Words to find anywhere on SS.com, in any language sellers write (Latvian, Russian, English brand names). Matches the advert text and its category names.","on_invalid":"reject","example":"iphone 13","aliases":["q","keyword","text"]},{"name":"deal_type","type":"enum","required":false,"description":"Deal type, the site's own segment: sell, buy, hand_over (rent out / let), remove (will rent), change (swap), -other. Search also knows spareparts, give, make, services, repair, found, lost, refilling. The category's own list comes back from `categories`.","on_invalid":"reject","allowed_values":[{"value":"sell","label":"sell"},{"value":"buy","label":"buy"},{"value":"hand_over","label":"hand_over"},{"value":"remove","label":"remove"},{"value":"change","label":"change"},{"value":"-other","label":"-other"},{"value":"spareparts","label":"spareparts"},{"value":"give","label":"give"},{"value":"make","label":"make"},{"value":"services","label":"services"},{"value":"repair","label":"repair"},{"value":"found","label":"found"},{"value":"lost","label":"lost"},{"value":"refilling","label":"refilling"}],"example":"sell"},{"name":"page","type":"integer","required":false,"description":"1-based page. `last_page` in the answer is the source's own last page; asking past it returns 0 rows with `page_clamped: true` (SS.com itself would silently serve page 1 again).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"lang","type":"enum","required":false,"description":"Language of the site's own labels (category names, attribute names, deal type). The advert text is always the seller's own words, usually Latvian or Russian.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"lv","label":"Latvian"},{"value":"ru","label":"Russian"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for fleet compatibility. Nothing is withheld: the seller block is returned as SS.com prints it (the site itself masks the last phone digits).","on_invalid":"reject","default":false,"example":false}],"returns":"{query, deal_type, page, last_page, has_more, page_clamped, count, last_page_is_cap, listings[]}. 🔴 SS.com stops a text search at 50 pages (1,500 adverts): `last_page_is_cap` says when that ceiling was hit. Each listing: id (the advert code `listing` takes), code (same), ad_number (SS.com's numeric advert number), url, title (the opening of the advert text), highlighted (paid highlight), category_path, category_names[], category_id, region, price, currency, price_period, price_text, image, thumbnail, columns{}. 30 rows a page; SS.com publishes no total count, `last_page` is its own.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 13"}},{"name":"browse","description":"Page through one SS.com category exactly as the site lists it — a car make or model, flats in one Riga district, one phone brand, one job type — with the category's own table columns (model, year, engine, mileage for cars; street, rooms, m², floor, series, price per m² for flats). Filter by deal type, posting period, price and any filter the category's own form offers.","required_params":["category"],"optional_params":["deal_type","period","price_min","price_max","filters","page","lang","include_pii"],"params":[{"name":"category","type":"string","required":true,"description":"A SS.com category path, exactly as in the site's URLs: transport/cars/bmw, real-estate/flats/riga/centre, electronics/phones/mobile-phones/apple, work/are-required. A full ss.com list URL is accepted too. Walk the tree with `categories`.","on_invalid":"reject","example":"transport/cars/bmw","aliases":["path","category_path"]},{"name":"deal_type","type":"enum","required":false,"description":"Deal type, the site's own segment: sell, buy, hand_over (rent out / let), remove (will rent), change (swap), -other. Search also knows spareparts, give, make, services, repair, found, lost, refilling. The category's own list comes back from `categories`.","on_invalid":"reject","allowed_values":[{"value":"sell","label":"sell"},{"value":"buy","label":"buy"},{"value":"hand_over","label":"hand_over"},{"value":"remove","label":"remove"},{"value":"change","label":"change"},{"value":"-other","label":"-other"},{"value":"spareparts","label":"spareparts"},{"value":"give","label":"give"},{"value":"make","label":"make"},{"value":"services","label":"services"},{"value":"repair","label":"repair"},{"value":"found","label":"found"},{"value":"lost","label":"lost"},{"value":"refilling","label":"refilling"}],"example":"sell"},{"name":"period","type":"enum","required":false,"description":"Only adverts posted today, in the last 2 days or the last 5 days (the site's own counts for each come back from `categories`).","on_invalid":"reject","allowed_values":[{"value":"today","label":"Today"},{"value":"2days","label":"Last 2 days"},{"value":"5days","label":"Last 5 days"}],"example":"2days"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR.","on_invalid":"reject","example":1000},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR.","on_invalid":"reject","example":5000},{"name":"filters","type":"object","required":false,"description":"Any other filter the category's own filter form offers, by its `key` from `categories` (e.g. year_min, year_max, gearbox, fuel_type, rooms_min, area_max, series). Range keys take a value from the form's own list; select keys take the option label or its value. Every filter is verified on the returned page — a filter SS.com did not apply fails the call instead of returning the unfiltered list.","on_invalid":"reject","example":{"year_min":"2015"}},{"name":"page","type":"integer","required":false,"description":"1-based page. `last_page` in the answer is the source's own last page; asking past it returns 0 rows with `page_clamped: true` (SS.com itself would silently serve page 1 again).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"lang","type":"enum","required":false,"description":"Language of the site's own labels (category names, attribute names, deal type). The advert text is always the seller's own words, usually Latvian or Russian.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"lv","label":"Latvian"},{"value":"ru","label":"Russian"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for fleet compatibility. Nothing is withheld: the seller block is returned as SS.com prints it (the site itself masks the last phone digits).","on_invalid":"reject","default":false,"example":false}],"returns":"{category, deal_type, period, filters_applied{}, page, last_page, has_more, page_clamped, count, columns[], listings[]} — listing rows as in `search`, with `columns` keyed by the category's own column titles and price_per_m2 on property. Page size is the source's (60 on car makes, 30 elsewhere). A category that only lists sub-categories returns them in `subcategories`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"transport/cars/bmw"}},{"name":"listing","description":"One SS.com advert in full: the seller's whole text, every attribute the category collects (make, year, engine, gearbox, mileage, colour, body, inspection date for a car; city, district, street, rooms, area, floor, series, house type for a flat), the full equipment list, every photo, the price with its notes, map coordinates, the posting date, unique visits, and the seller block (company, address, working hours, logo, masked phone).","required_params":["id"],"optional_params":["include_stats","lang","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The advert: its code (the letters before .html, e.g. cfjjkm), its path, or its full ss.com / ss.lv URL. Pass a search / browse row's `id` unchanged (its numeric `ad_number` cannot be opened).","on_invalid":"reject","example":"cfjjkm","aliases":["url","code"]},{"name":"include_stats","type":"boolean","required":false,"description":"Also read the advert's unique-visit count and the number of adverts on the same phone (one extra small request). Default true.","on_invalid":"reject","default":true,"example":true},{"name":"lang","type":"enum","required":false,"description":"Language of the site's own labels (category names, attribute names, deal type). The advert text is always the seller's own words, usually Latvian or Russian.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"lv","label":"Latvian"},{"value":"ru","label":"Russian"}],"default":"en","example":"en","aliases":["language"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for fleet compatibility. Nothing is withheld: the seller block is returned as SS.com prints it (the site itself masks the last phone digits).","on_invalid":"reject","default":false,"example":false}],"returns":"{listing{id (advert code, same as the row's id), code, ad_number, url, breadcrumbs[], category_path, deal_type_label, description, attributes[{id, label, value, hidden}], attributes_by_label{}, equipment[{group, item, primary}], price, currency, price_period, price_text, price_per_m2, price_notes, price_source_variable, price_mismatch, images[], image, latitude, longitude, published_at, published_text, views, ads_with_same_phone, ads_with_same_email, seller{phone_masked[], company, place, address, address_latitude, address_longitude, working_hours, logo}, hidden_fields[]}}. Fields SS.com shows only after an 'I'm not a robot' check (the full phone, VIN, registration number) are listed in hidden_fields.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"cfjjkm"}},{"name":"categories","description":"Walk SS.com's category tree: the sub-categories of any section with their paths (and advert counts where the site prints them), the deal types the category offers, how many adverts were posted today / in 2 days / in 5 days, and the category's full filter vocabulary — the keys `browse` accepts.","required_params":[],"optional_params":["category","lang"],"params":[{"name":"category","type":"string","required":false,"description":"Category path to open; leave empty for the site's top-level sections.","on_invalid":"reject","example":"transport/cars","aliases":["path","category_path"]},{"name":"lang","type":"enum","required":false,"description":"Language of the site's own labels (category names, attribute names, deal type). The advert text is always the seller's own words, usually Latvian or Russian.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"lv","label":"Latvian"},{"value":"ru","label":"Russian"}],"default":"en","example":"en","aliases":["language"]}],"returns":"{category, title, subcategories[{name, path, url, count}], deal_types[], periods[{period, label, count}], filters[{key, label, kind, bound, options[]}], columns[], has_listings, last_page}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"transport/cars"}}]},{"name":"ssense","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"SSENSE API scraper — the luxury & streetwear retailer (ssense.com): search menswear, womenswear and everything-else in 235 shipping countries with local prices, read the full product (every size with real stock and GTIN, composition, made-in, final-sale and the duties line), batch prices, designer autocomplete and the designer directory. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ssense/v1","spec_available":true,"actions":[{"name":"search","description":"Search SSENSE in any shipping country by keyword, designer or category, with the site's own sorts and the sale listing. Each row: product id, SKU, designer, name, the price a shopper pays in that country's currency, the struck price + discount %, in-stock flag, category ids and image. Totals and optional facets (designers, category tree with counts, colours, sizes). A query with no genuine match returns empty (padding counted in fallback_results_dropped).","required_params":[],"optional_params":["country","language","gender","query","sort","page","designer_id","category_id","on_sale","include_facets","include_fallback_results"],"params":[{"name":"country","type":"enum","required":false,"description":"Shipping country (ISO-2; 'uk' is accepted for gb). Prices, the currency and the duties/taxes line follow it. 235 countries. Default us.","on_invalid":"reject","allowed_values":[{"value":"ad","label":"AD (USD)"},{"value":"ae","label":"AE (USD)"},{"value":"af","label":"AF (USD)"},{"value":"ag","label":"AG (USD)"},{"value":"ai","label":"AI (USD)"},{"value":"al","label":"AL (USD)"},{"value":"am","label":"AM (USD)"},{"value":"ao","label":"AO (USD)"},{"value":"aq","label":"AQ (USD)"},{"value":"ar","label":"AR (USD)"},{"value":"as","label":"AS (USD)"},{"value":"at","label":"AT (EUR)"},{"value":"au","label":"AU (AUD)"},{"value":"aw","label":"AW (USD)"},{"value":"az","label":"AZ (USD)"},{"value":"ba","label":"BA (USD)"},{"value":"bb","label":"BB (USD)"},{"value":"bd","label":"BD (USD)"},{"value":"be","label":"BE (EUR)"},{"value":"bf","label":"BF (USD)"},{"value":"bg","label":"BG (USD)"},{"value":"bh","label":"BH (USD)"},{"value":"bi","label":"BI (USD)"},{"value":"bj","label":"BJ (USD)"},{"value":"bm","label":"BM (USD)"},{"value":"bn","label":"BN (USD)"},{"value":"bo","label":"BO (USD)"},{"value":"br","label":"BR (USD)"},{"value":"bs","label":"BS (USD)"},{"value":"bt","label":"BT (USD)"},{"value":"bv","label":"BV (USD)"},{"value":"bw","label":"BW (USD)"},{"value":"by","label":"BY (USD)"},{"value":"bz","label":"BZ (USD)"},{"value":"ca","label":"CA (CAD)"},{"value":"cc","label":"CC (USD)"},{"value":"cd","label":"CD (USD)"},{"value":"cf","label":"CF (USD)"},{"value":"cg","label":"CG (USD)"},{"value":"ch","label":"CH (EUR)"},{"value":"ci","label":"CI (USD)"},{"value":"ck","label":"CK (USD)"},{"value":"cl","label":"CL (USD)"},{"value":"cm","label":"CM (USD)"},{"value":"cn","label":"CN (USD)"},{"value":"co","label":"CO (USD)"},{"value":"cr","label":"CR (USD)"},{"value":"cv","label":"CV (USD)"},{"value":"cw","label":"CW (USD)"},{"value":"cx","label":"CX (USD)"},{"value":"cy","label":"CY (EUR)"},{"value":"cz","label":"CZ (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"dj","label":"DJ (USD)"},{"value":"dk","label":"DK (EUR)"},{"value":"dm","label":"DM (USD)"},{"value":"do","label":"DO (USD)"},{"value":"dz","label":"DZ (USD)"},{"value":"ec","label":"EC (USD)"},{"value":"ee","label":"EE (EUR)"},{"value":"eg","label":"EG (USD)"},{"value":"eh","label":"EH (USD)"},{"value":"er","label":"ER (USD)"},{"value":"es","label":"ES (EUR)"},{"value":"et","label":"ET (USD)"},{"value":"fi","label":"FI (EUR)"},{"value":"fj","label":"FJ (USD)"},{"value":"fk","label":"FK (USD)"},{"value":"fm","label":"FM (USD)"},{"value":"fo","label":"FO (USD)"},{"value":"fr","label":"FR (EUR)"},{"value":"ga","label":"GA (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"gd","label":"GD (USD)"},{"value":"ge","label":"GE (USD)"},{"value":"gf","label":"GF (USD)"},{"value":"gh","label":"GH (USD)"},{"value":"gi","label":"GI (USD)"},{"value":"gl","label":"GL (USD)"},{"value":"gm","label":"GM (USD)"},{"value":"gn","label":"GN (USD)"},{"value":"gp","label":"GP (USD)"},{"value":"gq","label":"GQ (USD)"},{"value":"gr","label":"GR (EUR)"},{"value":"gs","label":"GS (USD)"},{"value":"gt","label":"GT (USD)"},{"value":"gu","label":"GU (USD)"},{"value":"gw","label":"GW (USD)"},{"value":"gy","label":"GY (USD)"},{"value":"hk","label":"HK (HKD)"},{"value":"hm","label":"HM (USD)"},{"value":"hn","label":"HN (USD)"},{"value":"hr","label":"HR (USD)"},{"value":"ht","label":"HT (USD)"},{"value":"hu","label":"HU (EUR)"},{"value":"id","label":"ID (USD)"},{"value":"ie","label":"IE (EUR)"},{"value":"il","label":"IL (USD)"},{"value":"in","label":"IN (USD)"},{"value":"io","label":"IO (USD)"},{"value":"iq","label":"IQ (USD)"},{"value":"is","label":"IS (USD)"},{"value":"it","label":"IT (EUR)"},{"value":"jm","label":"JM (USD)"},{"value":"jo","label":"JO (USD)"},{"value":"jp","label":"JP (JPY)"},{"value":"ke","label":"KE (USD)"},{"value":"kg","label":"KG (USD)"},{"value":"kh","label":"KH (USD)"},{"value":"ki","label":"KI (USD)"},{"value":"km","label":"KM (USD)"},{"value":"kn","label":"KN (USD)"},{"value":"kr","label":"KR (USD)"},{"value":"kw","label":"KW (USD)"},{"value":"ky","label":"KY (USD)"},{"value":"kz","label":"KZ (USD)"},{"value":"la","label":"LA (USD)"},{"value":"lb","label":"LB (USD)"},{"value":"lc","label":"LC (USD)"},{"value":"li","label":"LI (USD)"},{"value":"lk","label":"LK (USD)"},{"value":"lr","label":"LR (USD)"},{"value":"ls","label":"LS (USD)"},{"value":"lt","label":"LT (EUR)"},{"value":"lu","label":"LU (EUR)"},{"value":"lv","label":"LV (EUR)"},{"value":"ly","label":"LY (USD)"},{"value":"ma","label":"MA (USD)"},{"value":"mc","label":"MC (USD)"},{"value":"md","label":"MD (USD)"},{"value":"me","label":"ME (USD)"},{"value":"mg","label":"MG (USD)"},{"value":"mh","label":"MH (USD)"},{"value":"mk","label":"MK (USD)"},{"value":"ml","label":"ML (USD)"},{"value":"mm","label":"MM (USD)"},{"value":"mn","label":"MN (USD)"},{"value":"mo","label":"MO (USD)"},{"value":"mp","label":"MP (USD)"},{"value":"mq","label":"MQ (USD)"},{"value":"mr","label":"MR (USD)"},{"value":"ms","label":"MS (USD)"},{"value":"mt","label":"MT (EUR)"},{"value":"mu","label":"MU (USD)"},{"value":"mv","label":"MV (USD)"},{"value":"mw","label":"MW (USD)"},{"value":"mx","label":"MX (USD)"},{"value":"my","label":"MY (USD)"},{"value":"mz","label":"MZ (USD)"},{"value":"na","label":"NA (USD)"},{"value":"nc","label":"NC (USD)"},{"value":"ne","label":"NE (USD)"},{"value":"nf","label":"NF (USD)"},{"value":"ng","label":"NG (USD)"},{"value":"ni","label":"NI (USD)"},{"value":"nl","label":"NL (EUR)"},{"value":"no","label":"NO (EUR)"},{"value":"np","label":"NP (USD)"},{"value":"nr","label":"NR (USD)"},{"value":"nu","label":"NU (USD)"},{"value":"nz","label":"NZ (USD)"},{"value":"om","label":"OM (USD)"},{"value":"pa","label":"PA (USD)"},{"value":"pe","label":"PE (USD)"},{"value":"pf","label":"PF (USD)"},{"value":"pg","label":"PG (USD)"},{"value":"ph","label":"PH (USD)"},{"value":"pk","label":"PK (USD)"},{"value":"pl","label":"PL (EUR)"},{"value":"pm","label":"PM (USD)"},{"value":"pn","label":"PN (USD)"},{"value":"pr","label":"PR (USD)"},{"value":"ps","label":"PS (USD)"},{"value":"pt","label":"PT (EUR)"},{"value":"pw","label":"PW (USD)"},{"value":"py","label":"PY (USD)"},{"value":"qa","label":"QA (USD)"},{"value":"re","label":"RE (USD)"},{"value":"ro","label":"RO (USD)"},{"value":"rs","label":"RS (USD)"},{"value":"ru","label":"RU (USD)"},{"value":"rw","label":"RW (USD)"},{"value":"sa","label":"SA (USD)"},{"value":"sb","label":"SB (USD)"},{"value":"sc","label":"SC (USD)"},{"value":"se","label":"SE (EUR)"},{"value":"sg","label":"SG (USD)"},{"value":"sh","label":"SH (USD)"},{"value":"si","label":"SI (EUR)"},{"value":"sj","label":"SJ (USD)"},{"value":"sk","label":"SK (EUR)"},{"value":"sl","label":"SL (USD)"},{"value":"sm","label":"SM (USD)"},{"value":"sn","label":"SN (USD)"},{"value":"so","label":"SO (USD)"},{"value":"sr","label":"SR (USD)"},{"value":"st","label":"ST (USD)"},{"value":"sv","label":"SV (USD)"},{"value":"sx","label":"SX (USD)"},{"value":"sz","label":"SZ (USD)"},{"value":"tc","label":"TC (USD)"},{"value":"td","label":"TD (USD)"},{"value":"tf","label":"TF (USD)"},{"value":"tg","label":"TG (USD)"},{"value":"th","label":"TH (USD)"},{"value":"tj","label":"TJ (USD)"},{"value":"tk","label":"TK (USD)"},{"value":"tm","label":"TM (USD)"},{"value":"tn","label":"TN (USD)"},{"value":"to","label":"TO (USD)"},{"value":"tr","label":"TR (USD)"},{"value":"tt","label":"TT (USD)"},{"value":"tv","label":"TV (USD)"},{"value":"tw","label":"TW (USD)"},{"value":"tz","label":"TZ (USD)"},{"value":"ua","label":"UA (USD)"},{"value":"ug","label":"UG (USD)"},{"value":"um","label":"UM (USD)"},{"value":"us","label":"US (USD)"},{"value":"uy","label":"UY (USD)"},{"value":"uz","label":"UZ (USD)"},{"value":"va","label":"VA (USD)"},{"value":"vc","label":"VC (USD)"},{"value":"ve","label":"VE (USD)"},{"value":"vg","label":"VG (USD)"},{"value":"vi","label":"VI (USD)"},{"value":"vn","label":"VN (USD)"},{"value":"vu","label":"VU (USD)"},{"value":"wf","label":"WF (USD)"},{"value":"ws","label":"WS (USD)"},{"value":"ye","label":"YE (USD)"},{"value":"yt","label":"YT (USD)"},{"value":"za","label":"ZA (USD)"},{"value":"zm","label":"ZM (USD)"},{"value":"zw","label":"ZW (USD)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions, composition and made-in, and of the keyword index (search 'manteau' with language=fr). Independent of country. Default en.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"ja","label":"Japanese"},{"value":"zh","label":"Chinese"},{"value":"ko","label":"Korean"}],"default":"en","example":"fr"},{"name":"gender","type":"enum","required":false,"description":"SSENSE department. The site searches one department at a time. Default men.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Menswear"},{"value":"women","label":"Womenswear"},{"value":"everything-else","label":"Everything Else (home, pets, kids, lifestyle)"}],"default":"men","example":"women"},{"name":"query","type":"string","required":false,"description":"Keyword. Optional when designer_id or category_id is given, or with on_sale.","on_invalid":"reject","example":"moncler jacket","aliases":["q","keyword"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Default: the site's own (relevance for a keyword, latest arrivals otherwise).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"Latest arrivals"},{"value":"trending","label":"Trending"},{"value":"price_asc","label":"Price low→high"},{"value":"price_desc","label":"Price high→low"},{"value":"discount_desc","label":"Discount high→low"},{"value":"discount_asc","label":"Discount low→high"}],"example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page (120 rows a page, fixed by SSENSE).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500},{"name":"designer_id","type":"string","required":false,"description":"SSENSE designer id (rows return brand_id; the designers action lists them all). Comma-separate several.","on_invalid":"reject","example":"115","aliases":["brand_id"]},{"name":"category_id","type":"string","required":false,"description":"SSENSE category id (from include_facets or product/detail breadcrumb), e.g. 178 men's jackets & coats. Comma-separate several.","on_invalid":"reject","example":"178"},{"name":"on_sale","type":"boolean","required":false,"description":"Only the sale listing.","on_invalid":"reject","default":false},{"name":"include_facets","type":"boolean","required":false,"description":"Also return facets: designers, the category tree with counts, colours and sizes available for this listing.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When a query matches nothing, SSENSE fills the page with unrelated products. By default they are dropped (fallback_results_dropped counts them); true returns them apart in fallback_results.","on_invalid":"reject","default":false}],"returns":"results[]{product_id, sku, url, brand, brand_id, name, gender, category_ids[], price, was_price, discount_percent, on_sale, currency, in_stock, image}, count, total_results, total_pages, page, page_size, has_more, page_out_of_range, query, gender, on_sale, sort, designer_id, category_id, country, language, currency, site_currency_code, keyword_matches_on_page, fallback_results_dropped, facets{designers,categories,colors,sizes}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"us","query":"jacket"}},{"name":"product/detail","description":"The full SSENSE product by id or URL in a shipping country: SKU, designer, name, description with its detail bullets and supplier colour, composition, made-in, gender, category breadcrumb, the price with struck price, discount %, final-sale flag and the duties/taxes line shown for that country, every size with its size system, SKU, GTIN, real stock quantity and low-stock flag, garment measurements, the model's size and measurements, listing date and images.","required_params":[],"optional_params":["country","language","product_id","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Shipping country (ISO-2; 'uk' is accepted for gb). Prices, the currency and the duties/taxes line follow it. 235 countries. Default us.","on_invalid":"reject","allowed_values":[{"value":"ad","label":"AD (USD)"},{"value":"ae","label":"AE (USD)"},{"value":"af","label":"AF (USD)"},{"value":"ag","label":"AG (USD)"},{"value":"ai","label":"AI (USD)"},{"value":"al","label":"AL (USD)"},{"value":"am","label":"AM (USD)"},{"value":"ao","label":"AO (USD)"},{"value":"aq","label":"AQ (USD)"},{"value":"ar","label":"AR (USD)"},{"value":"as","label":"AS (USD)"},{"value":"at","label":"AT (EUR)"},{"value":"au","label":"AU (AUD)"},{"value":"aw","label":"AW (USD)"},{"value":"az","label":"AZ (USD)"},{"value":"ba","label":"BA (USD)"},{"value":"bb","label":"BB (USD)"},{"value":"bd","label":"BD (USD)"},{"value":"be","label":"BE (EUR)"},{"value":"bf","label":"BF (USD)"},{"value":"bg","label":"BG (USD)"},{"value":"bh","label":"BH (USD)"},{"value":"bi","label":"BI (USD)"},{"value":"bj","label":"BJ (USD)"},{"value":"bm","label":"BM (USD)"},{"value":"bn","label":"BN (USD)"},{"value":"bo","label":"BO (USD)"},{"value":"br","label":"BR (USD)"},{"value":"bs","label":"BS (USD)"},{"value":"bt","label":"BT (USD)"},{"value":"bv","label":"BV (USD)"},{"value":"bw","label":"BW (USD)"},{"value":"by","label":"BY (USD)"},{"value":"bz","label":"BZ (USD)"},{"value":"ca","label":"CA (CAD)"},{"value":"cc","label":"CC (USD)"},{"value":"cd","label":"CD (USD)"},{"value":"cf","label":"CF (USD)"},{"value":"cg","label":"CG (USD)"},{"value":"ch","label":"CH (EUR)"},{"value":"ci","label":"CI (USD)"},{"value":"ck","label":"CK (USD)"},{"value":"cl","label":"CL (USD)"},{"value":"cm","label":"CM (USD)"},{"value":"cn","label":"CN (USD)"},{"value":"co","label":"CO (USD)"},{"value":"cr","label":"CR (USD)"},{"value":"cv","label":"CV (USD)"},{"value":"cw","label":"CW (USD)"},{"value":"cx","label":"CX (USD)"},{"value":"cy","label":"CY (EUR)"},{"value":"cz","label":"CZ (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"dj","label":"DJ (USD)"},{"value":"dk","label":"DK (EUR)"},{"value":"dm","label":"DM (USD)"},{"value":"do","label":"DO (USD)"},{"value":"dz","label":"DZ (USD)"},{"value":"ec","label":"EC (USD)"},{"value":"ee","label":"EE (EUR)"},{"value":"eg","label":"EG (USD)"},{"value":"eh","label":"EH (USD)"},{"value":"er","label":"ER (USD)"},{"value":"es","label":"ES (EUR)"},{"value":"et","label":"ET (USD)"},{"value":"fi","label":"FI (EUR)"},{"value":"fj","label":"FJ (USD)"},{"value":"fk","label":"FK (USD)"},{"value":"fm","label":"FM (USD)"},{"value":"fo","label":"FO (USD)"},{"value":"fr","label":"FR (EUR)"},{"value":"ga","label":"GA (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"gd","label":"GD (USD)"},{"value":"ge","label":"GE (USD)"},{"value":"gf","label":"GF (USD)"},{"value":"gh","label":"GH (USD)"},{"value":"gi","label":"GI (USD)"},{"value":"gl","label":"GL (USD)"},{"value":"gm","label":"GM (USD)"},{"value":"gn","label":"GN (USD)"},{"value":"gp","label":"GP (USD)"},{"value":"gq","label":"GQ (USD)"},{"value":"gr","label":"GR (EUR)"},{"value":"gs","label":"GS (USD)"},{"value":"gt","label":"GT (USD)"},{"value":"gu","label":"GU (USD)"},{"value":"gw","label":"GW (USD)"},{"value":"gy","label":"GY (USD)"},{"value":"hk","label":"HK (HKD)"},{"value":"hm","label":"HM (USD)"},{"value":"hn","label":"HN (USD)"},{"value":"hr","label":"HR (USD)"},{"value":"ht","label":"HT (USD)"},{"value":"hu","label":"HU (EUR)"},{"value":"id","label":"ID (USD)"},{"value":"ie","label":"IE (EUR)"},{"value":"il","label":"IL (USD)"},{"value":"in","label":"IN (USD)"},{"value":"io","label":"IO (USD)"},{"value":"iq","label":"IQ (USD)"},{"value":"is","label":"IS (USD)"},{"value":"it","label":"IT (EUR)"},{"value":"jm","label":"JM (USD)"},{"value":"jo","label":"JO (USD)"},{"value":"jp","label":"JP (JPY)"},{"value":"ke","label":"KE (USD)"},{"value":"kg","label":"KG (USD)"},{"value":"kh","label":"KH (USD)"},{"value":"ki","label":"KI (USD)"},{"value":"km","label":"KM (USD)"},{"value":"kn","label":"KN (USD)"},{"value":"kr","label":"KR (USD)"},{"value":"kw","label":"KW (USD)"},{"value":"ky","label":"KY (USD)"},{"value":"kz","label":"KZ (USD)"},{"value":"la","label":"LA (USD)"},{"value":"lb","label":"LB (USD)"},{"value":"lc","label":"LC (USD)"},{"value":"li","label":"LI (USD)"},{"value":"lk","label":"LK (USD)"},{"value":"lr","label":"LR (USD)"},{"value":"ls","label":"LS (USD)"},{"value":"lt","label":"LT (EUR)"},{"value":"lu","label":"LU (EUR)"},{"value":"lv","label":"LV (EUR)"},{"value":"ly","label":"LY (USD)"},{"value":"ma","label":"MA (USD)"},{"value":"mc","label":"MC (USD)"},{"value":"md","label":"MD (USD)"},{"value":"me","label":"ME (USD)"},{"value":"mg","label":"MG (USD)"},{"value":"mh","label":"MH (USD)"},{"value":"mk","label":"MK (USD)"},{"value":"ml","label":"ML (USD)"},{"value":"mm","label":"MM (USD)"},{"value":"mn","label":"MN (USD)"},{"value":"mo","label":"MO (USD)"},{"value":"mp","label":"MP (USD)"},{"value":"mq","label":"MQ (USD)"},{"value":"mr","label":"MR (USD)"},{"value":"ms","label":"MS (USD)"},{"value":"mt","label":"MT (EUR)"},{"value":"mu","label":"MU (USD)"},{"value":"mv","label":"MV (USD)"},{"value":"mw","label":"MW (USD)"},{"value":"mx","label":"MX (USD)"},{"value":"my","label":"MY (USD)"},{"value":"mz","label":"MZ (USD)"},{"value":"na","label":"NA (USD)"},{"value":"nc","label":"NC (USD)"},{"value":"ne","label":"NE (USD)"},{"value":"nf","label":"NF (USD)"},{"value":"ng","label":"NG (USD)"},{"value":"ni","label":"NI (USD)"},{"value":"nl","label":"NL (EUR)"},{"value":"no","label":"NO (EUR)"},{"value":"np","label":"NP (USD)"},{"value":"nr","label":"NR (USD)"},{"value":"nu","label":"NU (USD)"},{"value":"nz","label":"NZ (USD)"},{"value":"om","label":"OM (USD)"},{"value":"pa","label":"PA (USD)"},{"value":"pe","label":"PE (USD)"},{"value":"pf","label":"PF (USD)"},{"value":"pg","label":"PG (USD)"},{"value":"ph","label":"PH (USD)"},{"value":"pk","label":"PK (USD)"},{"value":"pl","label":"PL (EUR)"},{"value":"pm","label":"PM (USD)"},{"value":"pn","label":"PN (USD)"},{"value":"pr","label":"PR (USD)"},{"value":"ps","label":"PS (USD)"},{"value":"pt","label":"PT (EUR)"},{"value":"pw","label":"PW (USD)"},{"value":"py","label":"PY (USD)"},{"value":"qa","label":"QA (USD)"},{"value":"re","label":"RE (USD)"},{"value":"ro","label":"RO (USD)"},{"value":"rs","label":"RS (USD)"},{"value":"ru","label":"RU (USD)"},{"value":"rw","label":"RW (USD)"},{"value":"sa","label":"SA (USD)"},{"value":"sb","label":"SB (USD)"},{"value":"sc","label":"SC (USD)"},{"value":"se","label":"SE (EUR)"},{"value":"sg","label":"SG (USD)"},{"value":"sh","label":"SH (USD)"},{"value":"si","label":"SI (EUR)"},{"value":"sj","label":"SJ (USD)"},{"value":"sk","label":"SK (EUR)"},{"value":"sl","label":"SL (USD)"},{"value":"sm","label":"SM (USD)"},{"value":"sn","label":"SN (USD)"},{"value":"so","label":"SO (USD)"},{"value":"sr","label":"SR (USD)"},{"value":"st","label":"ST (USD)"},{"value":"sv","label":"SV (USD)"},{"value":"sx","label":"SX (USD)"},{"value":"sz","label":"SZ (USD)"},{"value":"tc","label":"TC (USD)"},{"value":"td","label":"TD (USD)"},{"value":"tf","label":"TF (USD)"},{"value":"tg","label":"TG (USD)"},{"value":"th","label":"TH (USD)"},{"value":"tj","label":"TJ (USD)"},{"value":"tk","label":"TK (USD)"},{"value":"tm","label":"TM (USD)"},{"value":"tn","label":"TN (USD)"},{"value":"to","label":"TO (USD)"},{"value":"tr","label":"TR (USD)"},{"value":"tt","label":"TT (USD)"},{"value":"tv","label":"TV (USD)"},{"value":"tw","label":"TW (USD)"},{"value":"tz","label":"TZ (USD)"},{"value":"ua","label":"UA (USD)"},{"value":"ug","label":"UG (USD)"},{"value":"um","label":"UM (USD)"},{"value":"us","label":"US (USD)"},{"value":"uy","label":"UY (USD)"},{"value":"uz","label":"UZ (USD)"},{"value":"va","label":"VA (USD)"},{"value":"vc","label":"VC (USD)"},{"value":"ve","label":"VE (USD)"},{"value":"vg","label":"VG (USD)"},{"value":"vi","label":"VI (USD)"},{"value":"vn","label":"VN (USD)"},{"value":"vu","label":"VU (USD)"},{"value":"wf","label":"WF (USD)"},{"value":"ws","label":"WS (USD)"},{"value":"ye","label":"YE (USD)"},{"value":"yt","label":"YT (USD)"},{"value":"za","label":"ZA (USD)"},{"value":"zm","label":"ZM (USD)"},{"value":"zw","label":"ZW (USD)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions, composition and made-in, and of the keyword index (search 'manteau' with language=fr). Independent of country. Default en.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"ja","label":"Japanese"},{"value":"zh","label":"Chinese"},{"value":"ko","label":"Korean"}],"default":"en","example":"fr"},{"name":"product_id","type":"string","required":false,"description":"SSENSE product id (the number at the end of a product URL; search rows return it).","on_invalid":"reject","example":"18731811","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"An ssense.com product URL instead of product_id. Its /<language>-<country>/ locale sets country and language unless they are given.","on_invalid":"reject","example":"https://www.ssense.com/en-us/men/product/heliot-emil/black-vertebrae-jacket/18731811","aliases":["product_url"]}],"returns":"product{product_id, sku, url, brand, brand_id, brand_slug, name, gender, description, details[], supplier_color, composition, made_in, category_id, breadcrumb[{category_id,name,slug,level}], price, was_price, discount_percent, on_sale, price_source, final_sale, currency, site_currency_code, duties{type,label}, in_stock, stock_quantity, sizes[{size_id,size,size_label,size_system,sku,gtin,available,stock_quantity,low_stock,measurements[]}], size_count, sizes_available, model{size_worn,measurements[]}, listed_at, images[], image}, country, language","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"gb","product_id":"18731811"}},{"name":"product/prices","description":"Current SSENSE prices for up to 50 product ids in one call for a shipping country: price, struck price, discount %, final-sale flag and currency per id; unknown ids are listed apart.","required_params":["product_ids"],"optional_params":["country"],"params":[{"name":"product_ids","type":"string","required":true,"description":"Up to 50 SSENSE product ids, comma-separated (or a list).","on_invalid":"reject","example":"18731811,18530841","aliases":["ids"]},{"name":"country","type":"enum","required":false,"description":"Shipping country (ISO-2; 'uk' is accepted for gb). Prices, the currency and the duties/taxes line follow it. 235 countries. Default us.","on_invalid":"reject","allowed_values":[{"value":"ad","label":"AD (USD)"},{"value":"ae","label":"AE (USD)"},{"value":"af","label":"AF (USD)"},{"value":"ag","label":"AG (USD)"},{"value":"ai","label":"AI (USD)"},{"value":"al","label":"AL (USD)"},{"value":"am","label":"AM (USD)"},{"value":"ao","label":"AO (USD)"},{"value":"aq","label":"AQ (USD)"},{"value":"ar","label":"AR (USD)"},{"value":"as","label":"AS (USD)"},{"value":"at","label":"AT (EUR)"},{"value":"au","label":"AU (AUD)"},{"value":"aw","label":"AW (USD)"},{"value":"az","label":"AZ (USD)"},{"value":"ba","label":"BA (USD)"},{"value":"bb","label":"BB (USD)"},{"value":"bd","label":"BD (USD)"},{"value":"be","label":"BE (EUR)"},{"value":"bf","label":"BF (USD)"},{"value":"bg","label":"BG (USD)"},{"value":"bh","label":"BH (USD)"},{"value":"bi","label":"BI (USD)"},{"value":"bj","label":"BJ (USD)"},{"value":"bm","label":"BM (USD)"},{"value":"bn","label":"BN (USD)"},{"value":"bo","label":"BO (USD)"},{"value":"br","label":"BR (USD)"},{"value":"bs","label":"BS (USD)"},{"value":"bt","label":"BT (USD)"},{"value":"bv","label":"BV (USD)"},{"value":"bw","label":"BW (USD)"},{"value":"by","label":"BY (USD)"},{"value":"bz","label":"BZ (USD)"},{"value":"ca","label":"CA (CAD)"},{"value":"cc","label":"CC (USD)"},{"value":"cd","label":"CD (USD)"},{"value":"cf","label":"CF (USD)"},{"value":"cg","label":"CG (USD)"},{"value":"ch","label":"CH (EUR)"},{"value":"ci","label":"CI (USD)"},{"value":"ck","label":"CK (USD)"},{"value":"cl","label":"CL (USD)"},{"value":"cm","label":"CM (USD)"},{"value":"cn","label":"CN (USD)"},{"value":"co","label":"CO (USD)"},{"value":"cr","label":"CR (USD)"},{"value":"cv","label":"CV (USD)"},{"value":"cw","label":"CW (USD)"},{"value":"cx","label":"CX (USD)"},{"value":"cy","label":"CY (EUR)"},{"value":"cz","label":"CZ (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"dj","label":"DJ (USD)"},{"value":"dk","label":"DK (EUR)"},{"value":"dm","label":"DM (USD)"},{"value":"do","label":"DO (USD)"},{"value":"dz","label":"DZ (USD)"},{"value":"ec","label":"EC (USD)"},{"value":"ee","label":"EE (EUR)"},{"value":"eg","label":"EG (USD)"},{"value":"eh","label":"EH (USD)"},{"value":"er","label":"ER (USD)"},{"value":"es","label":"ES (EUR)"},{"value":"et","label":"ET (USD)"},{"value":"fi","label":"FI (EUR)"},{"value":"fj","label":"FJ (USD)"},{"value":"fk","label":"FK (USD)"},{"value":"fm","label":"FM (USD)"},{"value":"fo","label":"FO (USD)"},{"value":"fr","label":"FR (EUR)"},{"value":"ga","label":"GA (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"gd","label":"GD (USD)"},{"value":"ge","label":"GE (USD)"},{"value":"gf","label":"GF (USD)"},{"value":"gh","label":"GH (USD)"},{"value":"gi","label":"GI (USD)"},{"value":"gl","label":"GL (USD)"},{"value":"gm","label":"GM (USD)"},{"value":"gn","label":"GN (USD)"},{"value":"gp","label":"GP (USD)"},{"value":"gq","label":"GQ (USD)"},{"value":"gr","label":"GR (EUR)"},{"value":"gs","label":"GS (USD)"},{"value":"gt","label":"GT (USD)"},{"value":"gu","label":"GU (USD)"},{"value":"gw","label":"GW (USD)"},{"value":"gy","label":"GY (USD)"},{"value":"hk","label":"HK (HKD)"},{"value":"hm","label":"HM (USD)"},{"value":"hn","label":"HN (USD)"},{"value":"hr","label":"HR (USD)"},{"value":"ht","label":"HT (USD)"},{"value":"hu","label":"HU (EUR)"},{"value":"id","label":"ID (USD)"},{"value":"ie","label":"IE (EUR)"},{"value":"il","label":"IL (USD)"},{"value":"in","label":"IN (USD)"},{"value":"io","label":"IO (USD)"},{"value":"iq","label":"IQ (USD)"},{"value":"is","label":"IS (USD)"},{"value":"it","label":"IT (EUR)"},{"value":"jm","label":"JM (USD)"},{"value":"jo","label":"JO (USD)"},{"value":"jp","label":"JP (JPY)"},{"value":"ke","label":"KE (USD)"},{"value":"kg","label":"KG (USD)"},{"value":"kh","label":"KH (USD)"},{"value":"ki","label":"KI (USD)"},{"value":"km","label":"KM (USD)"},{"value":"kn","label":"KN (USD)"},{"value":"kr","label":"KR (USD)"},{"value":"kw","label":"KW (USD)"},{"value":"ky","label":"KY (USD)"},{"value":"kz","label":"KZ (USD)"},{"value":"la","label":"LA (USD)"},{"value":"lb","label":"LB (USD)"},{"value":"lc","label":"LC (USD)"},{"value":"li","label":"LI (USD)"},{"value":"lk","label":"LK (USD)"},{"value":"lr","label":"LR (USD)"},{"value":"ls","label":"LS (USD)"},{"value":"lt","label":"LT (EUR)"},{"value":"lu","label":"LU (EUR)"},{"value":"lv","label":"LV (EUR)"},{"value":"ly","label":"LY (USD)"},{"value":"ma","label":"MA (USD)"},{"value":"mc","label":"MC (USD)"},{"value":"md","label":"MD (USD)"},{"value":"me","label":"ME (USD)"},{"value":"mg","label":"MG (USD)"},{"value":"mh","label":"MH (USD)"},{"value":"mk","label":"MK (USD)"},{"value":"ml","label":"ML (USD)"},{"value":"mm","label":"MM (USD)"},{"value":"mn","label":"MN (USD)"},{"value":"mo","label":"MO (USD)"},{"value":"mp","label":"MP (USD)"},{"value":"mq","label":"MQ (USD)"},{"value":"mr","label":"MR (USD)"},{"value":"ms","label":"MS (USD)"},{"value":"mt","label":"MT (EUR)"},{"value":"mu","label":"MU (USD)"},{"value":"mv","label":"MV (USD)"},{"value":"mw","label":"MW (USD)"},{"value":"mx","label":"MX (USD)"},{"value":"my","label":"MY (USD)"},{"value":"mz","label":"MZ (USD)"},{"value":"na","label":"NA (USD)"},{"value":"nc","label":"NC (USD)"},{"value":"ne","label":"NE (USD)"},{"value":"nf","label":"NF (USD)"},{"value":"ng","label":"NG (USD)"},{"value":"ni","label":"NI (USD)"},{"value":"nl","label":"NL (EUR)"},{"value":"no","label":"NO (EUR)"},{"value":"np","label":"NP (USD)"},{"value":"nr","label":"NR (USD)"},{"value":"nu","label":"NU (USD)"},{"value":"nz","label":"NZ (USD)"},{"value":"om","label":"OM (USD)"},{"value":"pa","label":"PA (USD)"},{"value":"pe","label":"PE (USD)"},{"value":"pf","label":"PF (USD)"},{"value":"pg","label":"PG (USD)"},{"value":"ph","label":"PH (USD)"},{"value":"pk","label":"PK (USD)"},{"value":"pl","label":"PL (EUR)"},{"value":"pm","label":"PM (USD)"},{"value":"pn","label":"PN (USD)"},{"value":"pr","label":"PR (USD)"},{"value":"ps","label":"PS (USD)"},{"value":"pt","label":"PT (EUR)"},{"value":"pw","label":"PW (USD)"},{"value":"py","label":"PY (USD)"},{"value":"qa","label":"QA (USD)"},{"value":"re","label":"RE (USD)"},{"value":"ro","label":"RO (USD)"},{"value":"rs","label":"RS (USD)"},{"value":"ru","label":"RU (USD)"},{"value":"rw","label":"RW (USD)"},{"value":"sa","label":"SA (USD)"},{"value":"sb","label":"SB (USD)"},{"value":"sc","label":"SC (USD)"},{"value":"se","label":"SE (EUR)"},{"value":"sg","label":"SG (USD)"},{"value":"sh","label":"SH (USD)"},{"value":"si","label":"SI (EUR)"},{"value":"sj","label":"SJ (USD)"},{"value":"sk","label":"SK (EUR)"},{"value":"sl","label":"SL (USD)"},{"value":"sm","label":"SM (USD)"},{"value":"sn","label":"SN (USD)"},{"value":"so","label":"SO (USD)"},{"value":"sr","label":"SR (USD)"},{"value":"st","label":"ST (USD)"},{"value":"sv","label":"SV (USD)"},{"value":"sx","label":"SX (USD)"},{"value":"sz","label":"SZ (USD)"},{"value":"tc","label":"TC (USD)"},{"value":"td","label":"TD (USD)"},{"value":"tf","label":"TF (USD)"},{"value":"tg","label":"TG (USD)"},{"value":"th","label":"TH (USD)"},{"value":"tj","label":"TJ (USD)"},{"value":"tk","label":"TK (USD)"},{"value":"tm","label":"TM (USD)"},{"value":"tn","label":"TN (USD)"},{"value":"to","label":"TO (USD)"},{"value":"tr","label":"TR (USD)"},{"value":"tt","label":"TT (USD)"},{"value":"tv","label":"TV (USD)"},{"value":"tw","label":"TW (USD)"},{"value":"tz","label":"TZ (USD)"},{"value":"ua","label":"UA (USD)"},{"value":"ug","label":"UG (USD)"},{"value":"um","label":"UM (USD)"},{"value":"us","label":"US (USD)"},{"value":"uy","label":"UY (USD)"},{"value":"uz","label":"UZ (USD)"},{"value":"va","label":"VA (USD)"},{"value":"vc","label":"VC (USD)"},{"value":"ve","label":"VE (USD)"},{"value":"vg","label":"VG (USD)"},{"value":"vi","label":"VI (USD)"},{"value":"vn","label":"VN (USD)"},{"value":"vu","label":"VU (USD)"},{"value":"wf","label":"WF (USD)"},{"value":"ws","label":"WS (USD)"},{"value":"ye","label":"YE (USD)"},{"value":"yt","label":"YT (USD)"},{"value":"za","label":"ZA (USD)"},{"value":"zm","label":"ZM (USD)"},{"value":"zw","label":"ZW (USD)"}],"default":"us","example":"gb"}],"returns":"prices[{product_id, price, was_price, discount_percent, on_sale, price_source, final_sale, currency, site_currency_code}], count, not_found[], country","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"us","product_ids":"18731811"}},{"name":"suggest","description":"SSENSE designer autocomplete for a partial name in one department: each matching designer with its id, slug and URL, and the categories it sells in with their ids and URLs.","required_params":["query"],"optional_params":["country","language","gender","on_sale"],"params":[{"name":"query","type":"string","required":true,"description":"At least 2 characters of a designer name.","on_invalid":"reject","example":"monc","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Shipping country (ISO-2; 'uk' is accepted for gb). Prices, the currency and the duties/taxes line follow it. 235 countries. Default us.","on_invalid":"reject","allowed_values":[{"value":"ad","label":"AD (USD)"},{"value":"ae","label":"AE (USD)"},{"value":"af","label":"AF (USD)"},{"value":"ag","label":"AG (USD)"},{"value":"ai","label":"AI (USD)"},{"value":"al","label":"AL (USD)"},{"value":"am","label":"AM (USD)"},{"value":"ao","label":"AO (USD)"},{"value":"aq","label":"AQ (USD)"},{"value":"ar","label":"AR (USD)"},{"value":"as","label":"AS (USD)"},{"value":"at","label":"AT (EUR)"},{"value":"au","label":"AU (AUD)"},{"value":"aw","label":"AW (USD)"},{"value":"az","label":"AZ (USD)"},{"value":"ba","label":"BA (USD)"},{"value":"bb","label":"BB (USD)"},{"value":"bd","label":"BD (USD)"},{"value":"be","label":"BE (EUR)"},{"value":"bf","label":"BF (USD)"},{"value":"bg","label":"BG (USD)"},{"value":"bh","label":"BH (USD)"},{"value":"bi","label":"BI (USD)"},{"value":"bj","label":"BJ (USD)"},{"value":"bm","label":"BM (USD)"},{"value":"bn","label":"BN (USD)"},{"value":"bo","label":"BO (USD)"},{"value":"br","label":"BR (USD)"},{"value":"bs","label":"BS (USD)"},{"value":"bt","label":"BT (USD)"},{"value":"bv","label":"BV (USD)"},{"value":"bw","label":"BW (USD)"},{"value":"by","label":"BY (USD)"},{"value":"bz","label":"BZ (USD)"},{"value":"ca","label":"CA (CAD)"},{"value":"cc","label":"CC (USD)"},{"value":"cd","label":"CD (USD)"},{"value":"cf","label":"CF (USD)"},{"value":"cg","label":"CG (USD)"},{"value":"ch","label":"CH (EUR)"},{"value":"ci","label":"CI (USD)"},{"value":"ck","label":"CK (USD)"},{"value":"cl","label":"CL (USD)"},{"value":"cm","label":"CM (USD)"},{"value":"cn","label":"CN (USD)"},{"value":"co","label":"CO (USD)"},{"value":"cr","label":"CR (USD)"},{"value":"cv","label":"CV (USD)"},{"value":"cw","label":"CW (USD)"},{"value":"cx","label":"CX (USD)"},{"value":"cy","label":"CY (EUR)"},{"value":"cz","label":"CZ (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"dj","label":"DJ (USD)"},{"value":"dk","label":"DK (EUR)"},{"value":"dm","label":"DM (USD)"},{"value":"do","label":"DO (USD)"},{"value":"dz","label":"DZ (USD)"},{"value":"ec","label":"EC (USD)"},{"value":"ee","label":"EE (EUR)"},{"value":"eg","label":"EG (USD)"},{"value":"eh","label":"EH (USD)"},{"value":"er","label":"ER (USD)"},{"value":"es","label":"ES (EUR)"},{"value":"et","label":"ET (USD)"},{"value":"fi","label":"FI (EUR)"},{"value":"fj","label":"FJ (USD)"},{"value":"fk","label":"FK (USD)"},{"value":"fm","label":"FM (USD)"},{"value":"fo","label":"FO (USD)"},{"value":"fr","label":"FR (EUR)"},{"value":"ga","label":"GA (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"gd","label":"GD (USD)"},{"value":"ge","label":"GE (USD)"},{"value":"gf","label":"GF (USD)"},{"value":"gh","label":"GH (USD)"},{"value":"gi","label":"GI (USD)"},{"value":"gl","label":"GL (USD)"},{"value":"gm","label":"GM (USD)"},{"value":"gn","label":"GN (USD)"},{"value":"gp","label":"GP (USD)"},{"value":"gq","label":"GQ (USD)"},{"value":"gr","label":"GR (EUR)"},{"value":"gs","label":"GS (USD)"},{"value":"gt","label":"GT (USD)"},{"value":"gu","label":"GU (USD)"},{"value":"gw","label":"GW (USD)"},{"value":"gy","label":"GY (USD)"},{"value":"hk","label":"HK (HKD)"},{"value":"hm","label":"HM (USD)"},{"value":"hn","label":"HN (USD)"},{"value":"hr","label":"HR (USD)"},{"value":"ht","label":"HT (USD)"},{"value":"hu","label":"HU (EUR)"},{"value":"id","label":"ID (USD)"},{"value":"ie","label":"IE (EUR)"},{"value":"il","label":"IL (USD)"},{"value":"in","label":"IN (USD)"},{"value":"io","label":"IO (USD)"},{"value":"iq","label":"IQ (USD)"},{"value":"is","label":"IS (USD)"},{"value":"it","label":"IT (EUR)"},{"value":"jm","label":"JM (USD)"},{"value":"jo","label":"JO (USD)"},{"value":"jp","label":"JP (JPY)"},{"value":"ke","label":"KE (USD)"},{"value":"kg","label":"KG (USD)"},{"value":"kh","label":"KH (USD)"},{"value":"ki","label":"KI (USD)"},{"value":"km","label":"KM (USD)"},{"value":"kn","label":"KN (USD)"},{"value":"kr","label":"KR (USD)"},{"value":"kw","label":"KW (USD)"},{"value":"ky","label":"KY (USD)"},{"value":"kz","label":"KZ (USD)"},{"value":"la","label":"LA (USD)"},{"value":"lb","label":"LB (USD)"},{"value":"lc","label":"LC (USD)"},{"value":"li","label":"LI (USD)"},{"value":"lk","label":"LK (USD)"},{"value":"lr","label":"LR (USD)"},{"value":"ls","label":"LS (USD)"},{"value":"lt","label":"LT (EUR)"},{"value":"lu","label":"LU (EUR)"},{"value":"lv","label":"LV (EUR)"},{"value":"ly","label":"LY (USD)"},{"value":"ma","label":"MA (USD)"},{"value":"mc","label":"MC (USD)"},{"value":"md","label":"MD (USD)"},{"value":"me","label":"ME (USD)"},{"value":"mg","label":"MG (USD)"},{"value":"mh","label":"MH (USD)"},{"value":"mk","label":"MK (USD)"},{"value":"ml","label":"ML (USD)"},{"value":"mm","label":"MM (USD)"},{"value":"mn","label":"MN (USD)"},{"value":"mo","label":"MO (USD)"},{"value":"mp","label":"MP (USD)"},{"value":"mq","label":"MQ (USD)"},{"value":"mr","label":"MR (USD)"},{"value":"ms","label":"MS (USD)"},{"value":"mt","label":"MT (EUR)"},{"value":"mu","label":"MU (USD)"},{"value":"mv","label":"MV (USD)"},{"value":"mw","label":"MW (USD)"},{"value":"mx","label":"MX (USD)"},{"value":"my","label":"MY (USD)"},{"value":"mz","label":"MZ (USD)"},{"value":"na","label":"NA (USD)"},{"value":"nc","label":"NC (USD)"},{"value":"ne","label":"NE (USD)"},{"value":"nf","label":"NF (USD)"},{"value":"ng","label":"NG (USD)"},{"value":"ni","label":"NI (USD)"},{"value":"nl","label":"NL (EUR)"},{"value":"no","label":"NO (EUR)"},{"value":"np","label":"NP (USD)"},{"value":"nr","label":"NR (USD)"},{"value":"nu","label":"NU (USD)"},{"value":"nz","label":"NZ (USD)"},{"value":"om","label":"OM (USD)"},{"value":"pa","label":"PA (USD)"},{"value":"pe","label":"PE (USD)"},{"value":"pf","label":"PF (USD)"},{"value":"pg","label":"PG (USD)"},{"value":"ph","label":"PH (USD)"},{"value":"pk","label":"PK (USD)"},{"value":"pl","label":"PL (EUR)"},{"value":"pm","label":"PM (USD)"},{"value":"pn","label":"PN (USD)"},{"value":"pr","label":"PR (USD)"},{"value":"ps","label":"PS (USD)"},{"value":"pt","label":"PT (EUR)"},{"value":"pw","label":"PW (USD)"},{"value":"py","label":"PY (USD)"},{"value":"qa","label":"QA (USD)"},{"value":"re","label":"RE (USD)"},{"value":"ro","label":"RO (USD)"},{"value":"rs","label":"RS (USD)"},{"value":"ru","label":"RU (USD)"},{"value":"rw","label":"RW (USD)"},{"value":"sa","label":"SA (USD)"},{"value":"sb","label":"SB (USD)"},{"value":"sc","label":"SC (USD)"},{"value":"se","label":"SE (EUR)"},{"value":"sg","label":"SG (USD)"},{"value":"sh","label":"SH (USD)"},{"value":"si","label":"SI (EUR)"},{"value":"sj","label":"SJ (USD)"},{"value":"sk","label":"SK (EUR)"},{"value":"sl","label":"SL (USD)"},{"value":"sm","label":"SM (USD)"},{"value":"sn","label":"SN (USD)"},{"value":"so","label":"SO (USD)"},{"value":"sr","label":"SR (USD)"},{"value":"st","label":"ST (USD)"},{"value":"sv","label":"SV (USD)"},{"value":"sx","label":"SX (USD)"},{"value":"sz","label":"SZ (USD)"},{"value":"tc","label":"TC (USD)"},{"value":"td","label":"TD (USD)"},{"value":"tf","label":"TF (USD)"},{"value":"tg","label":"TG (USD)"},{"value":"th","label":"TH (USD)"},{"value":"tj","label":"TJ (USD)"},{"value":"tk","label":"TK (USD)"},{"value":"tm","label":"TM (USD)"},{"value":"tn","label":"TN (USD)"},{"value":"to","label":"TO (USD)"},{"value":"tr","label":"TR (USD)"},{"value":"tt","label":"TT (USD)"},{"value":"tv","label":"TV (USD)"},{"value":"tw","label":"TW (USD)"},{"value":"tz","label":"TZ (USD)"},{"value":"ua","label":"UA (USD)"},{"value":"ug","label":"UG (USD)"},{"value":"um","label":"UM (USD)"},{"value":"us","label":"US (USD)"},{"value":"uy","label":"UY (USD)"},{"value":"uz","label":"UZ (USD)"},{"value":"va","label":"VA (USD)"},{"value":"vc","label":"VC (USD)"},{"value":"ve","label":"VE (USD)"},{"value":"vg","label":"VG (USD)"},{"value":"vi","label":"VI (USD)"},{"value":"vn","label":"VN (USD)"},{"value":"vu","label":"VU (USD)"},{"value":"wf","label":"WF (USD)"},{"value":"ws","label":"WS (USD)"},{"value":"ye","label":"YE (USD)"},{"value":"yt","label":"YT (USD)"},{"value":"za","label":"ZA (USD)"},{"value":"zm","label":"ZM (USD)"},{"value":"zw","label":"ZW (USD)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions, composition and made-in, and of the keyword index (search 'manteau' with language=fr). Independent of country. Default en.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"ja","label":"Japanese"},{"value":"zh","label":"Chinese"},{"value":"ko","label":"Korean"}],"default":"en","example":"fr"},{"name":"gender","type":"enum","required":false,"description":"SSENSE department. The site searches one department at a time. Default men.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Menswear"},{"value":"women","label":"Womenswear"},{"value":"everything-else","label":"Everything Else (home, pets, kids, lifestyle)"}],"default":"men","example":"women"},{"name":"on_sale","type":"boolean","required":false,"description":"Only the sale listing.","on_invalid":"reject","default":false}],"returns":"suggestions[{designer_id, name, slug, url, categories[{category_id,name,slug,url}]}], count, query, gender, country, language","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"us","query":"monc"}},{"name":"designers","description":"The SSENSE designer directory: every designer per department with its id, name, slug and URL.","required_params":[],"optional_params":["country","language","gender"],"params":[{"name":"country","type":"enum","required":false,"description":"Shipping country (ISO-2; 'uk' is accepted for gb). Prices, the currency and the duties/taxes line follow it. 235 countries. Default us.","on_invalid":"reject","allowed_values":[{"value":"ad","label":"AD (USD)"},{"value":"ae","label":"AE (USD)"},{"value":"af","label":"AF (USD)"},{"value":"ag","label":"AG (USD)"},{"value":"ai","label":"AI (USD)"},{"value":"al","label":"AL (USD)"},{"value":"am","label":"AM (USD)"},{"value":"ao","label":"AO (USD)"},{"value":"aq","label":"AQ (USD)"},{"value":"ar","label":"AR (USD)"},{"value":"as","label":"AS (USD)"},{"value":"at","label":"AT (EUR)"},{"value":"au","label":"AU (AUD)"},{"value":"aw","label":"AW (USD)"},{"value":"az","label":"AZ (USD)"},{"value":"ba","label":"BA (USD)"},{"value":"bb","label":"BB (USD)"},{"value":"bd","label":"BD (USD)"},{"value":"be","label":"BE (EUR)"},{"value":"bf","label":"BF (USD)"},{"value":"bg","label":"BG (USD)"},{"value":"bh","label":"BH (USD)"},{"value":"bi","label":"BI (USD)"},{"value":"bj","label":"BJ (USD)"},{"value":"bm","label":"BM (USD)"},{"value":"bn","label":"BN (USD)"},{"value":"bo","label":"BO (USD)"},{"value":"br","label":"BR (USD)"},{"value":"bs","label":"BS (USD)"},{"value":"bt","label":"BT (USD)"},{"value":"bv","label":"BV (USD)"},{"value":"bw","label":"BW (USD)"},{"value":"by","label":"BY (USD)"},{"value":"bz","label":"BZ (USD)"},{"value":"ca","label":"CA (CAD)"},{"value":"cc","label":"CC (USD)"},{"value":"cd","label":"CD (USD)"},{"value":"cf","label":"CF (USD)"},{"value":"cg","label":"CG (USD)"},{"value":"ch","label":"CH (EUR)"},{"value":"ci","label":"CI (USD)"},{"value":"ck","label":"CK (USD)"},{"value":"cl","label":"CL (USD)"},{"value":"cm","label":"CM (USD)"},{"value":"cn","label":"CN (USD)"},{"value":"co","label":"CO (USD)"},{"value":"cr","label":"CR (USD)"},{"value":"cv","label":"CV (USD)"},{"value":"cw","label":"CW (USD)"},{"value":"cx","label":"CX (USD)"},{"value":"cy","label":"CY (EUR)"},{"value":"cz","label":"CZ (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"dj","label":"DJ (USD)"},{"value":"dk","label":"DK (EUR)"},{"value":"dm","label":"DM (USD)"},{"value":"do","label":"DO (USD)"},{"value":"dz","label":"DZ (USD)"},{"value":"ec","label":"EC (USD)"},{"value":"ee","label":"EE (EUR)"},{"value":"eg","label":"EG (USD)"},{"value":"eh","label":"EH (USD)"},{"value":"er","label":"ER (USD)"},{"value":"es","label":"ES (EUR)"},{"value":"et","label":"ET (USD)"},{"value":"fi","label":"FI (EUR)"},{"value":"fj","label":"FJ (USD)"},{"value":"fk","label":"FK (USD)"},{"value":"fm","label":"FM (USD)"},{"value":"fo","label":"FO (USD)"},{"value":"fr","label":"FR (EUR)"},{"value":"ga","label":"GA (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"gd","label":"GD (USD)"},{"value":"ge","label":"GE (USD)"},{"value":"gf","label":"GF (USD)"},{"value":"gh","label":"GH (USD)"},{"value":"gi","label":"GI (USD)"},{"value":"gl","label":"GL (USD)"},{"value":"gm","label":"GM (USD)"},{"value":"gn","label":"GN (USD)"},{"value":"gp","label":"GP (USD)"},{"value":"gq","label":"GQ (USD)"},{"value":"gr","label":"GR (EUR)"},{"value":"gs","label":"GS (USD)"},{"value":"gt","label":"GT (USD)"},{"value":"gu","label":"GU (USD)"},{"value":"gw","label":"GW (USD)"},{"value":"gy","label":"GY (USD)"},{"value":"hk","label":"HK (HKD)"},{"value":"hm","label":"HM (USD)"},{"value":"hn","label":"HN (USD)"},{"value":"hr","label":"HR (USD)"},{"value":"ht","label":"HT (USD)"},{"value":"hu","label":"HU (EUR)"},{"value":"id","label":"ID (USD)"},{"value":"ie","label":"IE (EUR)"},{"value":"il","label":"IL (USD)"},{"value":"in","label":"IN (USD)"},{"value":"io","label":"IO (USD)"},{"value":"iq","label":"IQ (USD)"},{"value":"is","label":"IS (USD)"},{"value":"it","label":"IT (EUR)"},{"value":"jm","label":"JM (USD)"},{"value":"jo","label":"JO (USD)"},{"value":"jp","label":"JP (JPY)"},{"value":"ke","label":"KE (USD)"},{"value":"kg","label":"KG (USD)"},{"value":"kh","label":"KH (USD)"},{"value":"ki","label":"KI (USD)"},{"value":"km","label":"KM (USD)"},{"value":"kn","label":"KN (USD)"},{"value":"kr","label":"KR (USD)"},{"value":"kw","label":"KW (USD)"},{"value":"ky","label":"KY (USD)"},{"value":"kz","label":"KZ (USD)"},{"value":"la","label":"LA (USD)"},{"value":"lb","label":"LB (USD)"},{"value":"lc","label":"LC (USD)"},{"value":"li","label":"LI (USD)"},{"value":"lk","label":"LK (USD)"},{"value":"lr","label":"LR (USD)"},{"value":"ls","label":"LS (USD)"},{"value":"lt","label":"LT (EUR)"},{"value":"lu","label":"LU (EUR)"},{"value":"lv","label":"LV (EUR)"},{"value":"ly","label":"LY (USD)"},{"value":"ma","label":"MA (USD)"},{"value":"mc","label":"MC (USD)"},{"value":"md","label":"MD (USD)"},{"value":"me","label":"ME (USD)"},{"value":"mg","label":"MG (USD)"},{"value":"mh","label":"MH (USD)"},{"value":"mk","label":"MK (USD)"},{"value":"ml","label":"ML (USD)"},{"value":"mm","label":"MM (USD)"},{"value":"mn","label":"MN (USD)"},{"value":"mo","label":"MO (USD)"},{"value":"mp","label":"MP (USD)"},{"value":"mq","label":"MQ (USD)"},{"value":"mr","label":"MR (USD)"},{"value":"ms","label":"MS (USD)"},{"value":"mt","label":"MT (EUR)"},{"value":"mu","label":"MU (USD)"},{"value":"mv","label":"MV (USD)"},{"value":"mw","label":"MW (USD)"},{"value":"mx","label":"MX (USD)"},{"value":"my","label":"MY (USD)"},{"value":"mz","label":"MZ (USD)"},{"value":"na","label":"NA (USD)"},{"value":"nc","label":"NC (USD)"},{"value":"ne","label":"NE (USD)"},{"value":"nf","label":"NF (USD)"},{"value":"ng","label":"NG (USD)"},{"value":"ni","label":"NI (USD)"},{"value":"nl","label":"NL (EUR)"},{"value":"no","label":"NO (EUR)"},{"value":"np","label":"NP (USD)"},{"value":"nr","label":"NR (USD)"},{"value":"nu","label":"NU (USD)"},{"value":"nz","label":"NZ (USD)"},{"value":"om","label":"OM (USD)"},{"value":"pa","label":"PA (USD)"},{"value":"pe","label":"PE (USD)"},{"value":"pf","label":"PF (USD)"},{"value":"pg","label":"PG (USD)"},{"value":"ph","label":"PH (USD)"},{"value":"pk","label":"PK (USD)"},{"value":"pl","label":"PL (EUR)"},{"value":"pm","label":"PM (USD)"},{"value":"pn","label":"PN (USD)"},{"value":"pr","label":"PR (USD)"},{"value":"ps","label":"PS (USD)"},{"value":"pt","label":"PT (EUR)"},{"value":"pw","label":"PW (USD)"},{"value":"py","label":"PY (USD)"},{"value":"qa","label":"QA (USD)"},{"value":"re","label":"RE (USD)"},{"value":"ro","label":"RO (USD)"},{"value":"rs","label":"RS (USD)"},{"value":"ru","label":"RU (USD)"},{"value":"rw","label":"RW (USD)"},{"value":"sa","label":"SA (USD)"},{"value":"sb","label":"SB (USD)"},{"value":"sc","label":"SC (USD)"},{"value":"se","label":"SE (EUR)"},{"value":"sg","label":"SG (USD)"},{"value":"sh","label":"SH (USD)"},{"value":"si","label":"SI (EUR)"},{"value":"sj","label":"SJ (USD)"},{"value":"sk","label":"SK (EUR)"},{"value":"sl","label":"SL (USD)"},{"value":"sm","label":"SM (USD)"},{"value":"sn","label":"SN (USD)"},{"value":"so","label":"SO (USD)"},{"value":"sr","label":"SR (USD)"},{"value":"st","label":"ST (USD)"},{"value":"sv","label":"SV (USD)"},{"value":"sx","label":"SX (USD)"},{"value":"sz","label":"SZ (USD)"},{"value":"tc","label":"TC (USD)"},{"value":"td","label":"TD (USD)"},{"value":"tf","label":"TF (USD)"},{"value":"tg","label":"TG (USD)"},{"value":"th","label":"TH (USD)"},{"value":"tj","label":"TJ (USD)"},{"value":"tk","label":"TK (USD)"},{"value":"tm","label":"TM (USD)"},{"value":"tn","label":"TN (USD)"},{"value":"to","label":"TO (USD)"},{"value":"tr","label":"TR (USD)"},{"value":"tt","label":"TT (USD)"},{"value":"tv","label":"TV (USD)"},{"value":"tw","label":"TW (USD)"},{"value":"tz","label":"TZ (USD)"},{"value":"ua","label":"UA (USD)"},{"value":"ug","label":"UG (USD)"},{"value":"um","label":"UM (USD)"},{"value":"us","label":"US (USD)"},{"value":"uy","label":"UY (USD)"},{"value":"uz","label":"UZ (USD)"},{"value":"va","label":"VA (USD)"},{"value":"vc","label":"VC (USD)"},{"value":"ve","label":"VE (USD)"},{"value":"vg","label":"VG (USD)"},{"value":"vi","label":"VI (USD)"},{"value":"vn","label":"VN (USD)"},{"value":"vu","label":"VU (USD)"},{"value":"wf","label":"WF (USD)"},{"value":"ws","label":"WS (USD)"},{"value":"ye","label":"YE (USD)"},{"value":"yt","label":"YT (USD)"},{"value":"za","label":"ZA (USD)"},{"value":"zm","label":"ZM (USD)"},{"value":"zw","label":"ZW (USD)"}],"default":"us","example":"gb"},{"name":"language","type":"enum","required":false,"description":"Language of names, descriptions, composition and made-in, and of the keyword index (search 'manteau' with language=fr). Independent of country. Default en.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"ja","label":"Japanese"},{"value":"zh","label":"Chinese"},{"value":"ko","label":"Korean"}],"default":"en","example":"fr"},{"name":"gender","type":"enum","required":false,"description":"Only this department's designer list. Default: all three.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Menswear"},{"value":"women","label":"Womenswear"},{"value":"everything-else","label":"Everything Else"}],"example":"women"}],"returns":"designers[{designer_id, name, slug, gender, url}], count, counts_by_gender, country, language","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"gb"}}]},{"name":"ssg","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"SSG API — SSG.COM (쓱닷컴) Korea: E-mart, Traders, Shinsegae Mall search, prices, stock, delivery and reviews","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ssg/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on SSG.COM across E-mart, Traders, early-morning delivery, Shinsegae Mall, department store and marketplace sellers. Each row: regular price, discounted price, unit price, member and card benefit, stock count, sold-out flag, mall and who sells it, the delivering E-mart store, delivery type (쓱배송 / 새벽배송) and promise, rating and review count. Filters: mall, sort (7), price range, delivery type, benefit, sold-out exclusion, category, page.","required_params":["query"],"optional_params":["mall","sort","min_price","max_price","delivery","benefit","exclude_sold_out","category_id","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword (Korean or English), e.g. 우유, 라면, 노트북. Full-width or styled characters are normalised with NFKC before sending.","on_invalid":"reject","example":"우유","aliases":["q","keyword"]},{"name":"mall","type":"enum","required":false,"description":"The catalogue of one SSG mall (the site's own mall filter). A mall's catalogue also carries goods cross-listed from another mall (E-mart and Traders show Shinsegae-mall goods, more of them under price sorts), so each row keeps its own `mall` / `sold_by` and meta.off_mall_rows counts them. For E-mart store goods only use delivery=ssg_delivery; for early-morning goods delivery=early_morning.","on_invalid":"reject","allowed_values":[{"value":"emart","label":"이마트 (E-mart)"},{"value":"traders","label":"트레이더스 (Traders)"},{"value":"shinsegae","label":"신세계몰 (Shinsegae Mall)"},{"value":"department","label":"신세계백화점 (department store)"},{"value":"early_morning","label":"새벽배송 (SSG early-morning delivery)"}],"example":"emart"},{"name":"sort","type":"enum","required":false,"description":"Sort order (the site's own sorts).","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"추천순 (default)"},{"value":"sales","label":"판매량순"},{"value":"price_asc","label":"낮은가격순"},{"value":"price_desc","label":"높은가격순"},{"value":"discount","label":"할인율순"},{"value":"newest","label":"신상품순"},{"value":"reviews","label":"리뷰많은순"}],"default":"recommended","example":"price_asc"},{"name":"min_price","type":"integer","required":false,"description":"Lowest shown price in KRW (the site's own price range filter on the card price).","on_invalid":"reject","example":3000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Highest shown price in KRW.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["price_max"]},{"name":"delivery","type":"enum","required":false,"description":"Delivery / channel filter (배송).","on_invalid":"reject","allowed_values":[{"value":"ssg_delivery","label":"쓱배송 주간배송 (E-mart same-day)"},{"value":"early_morning","label":"새벽배송 (early morning)"},{"value":"traders_delivery","label":"트레이더스 배송"},{"value":"store_pickup","label":"매장픽업"},{"value":"today_dispatch","label":"오늘출발"},{"value":"department","label":"백화점상품"},{"value":"department_quick","label":"백화점 퀵배송"},{"value":"domestic_only","label":"해외직구 제외"},{"value":"overseas_direct","label":"해외직구"}],"example":"early_morning"},{"name":"benefit","type":"enum","required":false,"description":"Benefit filter (혜택).","on_invalid":"reject","allowed_values":[{"value":"free_shipping","label":"무료배송"},{"value":"discounted","label":"할인상품"},{"value":"department_sale","label":"백화점세일"},{"value":"n_plus_1","label":"N+1"},{"value":"flyer","label":"전단상품"}],"example":"discounted"},{"name":"exclude_sold_out","type":"boolean","required":false,"description":"Leave out sold-out products (품절제외).","on_invalid":"reject","example":true},{"name":"category_id","type":"string","required":false,"description":"SSG display category id (digits), from the `categories` action or a search facet, e.g. 6000094123 흰우유.","on_invalid":"reject","example":"6000094123","aliases":["category","ctgId"]},{"name":"page","type":"integer","required":false,"description":"Result page, 40 rows per page, 1-100.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100}],"returns":"results[] {item_id, site_no, mall, mall_name, title, full_title, brand, url, image, images[], price (regular), discount_price, discount_percent, source_discount_rate, coupon_applied, price_from, currency, unit_price, unit, member_benefit_krw, card_discount_texts[], multi_buy_texts[], rental, monthly_fee_text, stock_qty, sold_out, min_order_qty, max_order_qty, sold_by (emart|traders|ssg|seller), vendor_id, store_no, store_name, store_defaulted, delivery_types[], delivery_promise, shipping_text, early_morning_available, early_morning_stock_qty, rating, review_count, badges[] {type, text}, ad_marked} + total (the site's count) + page + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"우유"}},{"name":"product","description":"One SSG item by id: its live listing record (regular / discounted / unit price, member and card benefits, stock count, mall, seller kind and vendor id, delivering store, delivery type and promise, early-morning availability and stock) plus its review summary (average rating, total, photo / video counts, attribute percentages, the site's AI summary) and every other mall listing of the same item.","required_params":["item_id"],"optional_params":["site_no"],"params":[{"name":"item_id","type":"string","required":true,"description":"SSG item id (10-13 digits), exactly as `item_id` in search rows, or an ssg.com item URL (…itemView.ssg?itemId=…).","on_invalid":"reject","example":"1000277628967","aliases":["id","itemId","url"]},{"name":"site_no","type":"string","required":false,"description":"The row's `site_no` when the same item is listed in several malls (e.g. 6001 E-mart vs 7009 early-morning; price and stock can differ per listing). Default: the listing the site returns first.","on_invalid":"reject","example":"6001"}],"returns":"product {item_id, site_no, mall, mall_name, title, full_title, brand, url, image, images[], price (regular), discount_price, discount_percent, source_discount_rate, coupon_applied, price_from, currency, unit_price, unit, member_benefit_krw, card_discount_texts[], multi_buy_texts[], rental, monthly_fee_text, stock_qty, sold_out, min_order_qty, max_order_qty, sold_by (emart|traders|ssg|seller), vendor_id, store_no, store_name, store_defaulted, delivery_types[], delivery_promise, shipping_text, early_morning_available, early_morning_stock_qty, rating, review_count, badges[] {type, text}, ad_marked, review_summary {average_rating, total, photo_review_count, video_review_count, attribute_summary[], ai_summary, positive_ratio_percent}} + other_listings[] (other listings of the same item the lookup returned)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"1000277628967"}},{"name":"reviews","description":"Buyer reviews of one SSG item, 30 per page: rating, text, date, masked buyer id, option, store, attribute answers (taste, packaging, freshness …), photos; plus the total, average and attribute percentages.","required_params":["item_id"],"optional_params":["site_no","sort","filter","page"],"params":[{"name":"item_id","type":"string","required":true,"description":"SSG item id (10-13 digits), exactly as `item_id` in search rows, or an ssg.com item URL (…itemView.ssg?itemId=…).","on_invalid":"reject","example":"1000277628967","aliases":["id","itemId","url"]},{"name":"site_no","type":"string","required":false,"description":"The row's `site_no` when the same item is listed in several malls (e.g. 6001 E-mart vs 7009 early-morning; price and stock can differ per listing). Default: the listing the site returns first.","on_invalid":"reject","example":"6001"},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"추천순"},{"value":"newest","label":"최신순"},{"value":"rating_high","label":"평점높은순"},{"value":"rating_low","label":"평점낮은순"}],"default":"recommended","example":"newest"},{"name":"filter","type":"enum","required":false,"description":"Only photo or video reviews.","on_invalid":"reject","allowed_values":[{"value":"all","label":"전체"},{"value":"photo","label":"포토"},{"value":"video","label":"동영상"}],"default":"all","example":"photo"},{"name":"page","type":"integer","required":false,"description":"Review page (30 per page).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"results[] {review_id, rating, text, date, author, option, store_name, site_no, review_type, attributes[] {group, value}, images[], has_video} + total + average_rating + photo_review_count + video_review_count + attribute_summary[] + ai_summary + page + has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"1000277628967"}},{"name":"categories","description":"The SSG category tree around one display category: the category, its parent, its sub-categories, its sibling categories, the top-level departments, the category's brands and item count. Use a returned `category_id` as `category_id` in search.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"SSG display category id (digits), e.g. 6000092898 우유/유제품. Level-1 and deeper ids work; the top-level department ids in `top_level` are landing pages the source does not serve here.","on_invalid":"reject","example":"6000092898","aliases":["category","dispCtgId"]}],"returns":"category {category_id, name, level, url} + parent + children[] + siblings[] + top_level[] + brands[] {brand_id, name} + item_count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"6000092898"}}]},{"name":"stackoverflow","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Stack Overflow API — Q&A data scraper: questions, answers, tags, users, badges, search","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/stackoverflow/v1","spec_available":true,"actions":[{"name":"questions","description":"Paginated questions by sort/tag; returns score, tags, body, owner/link attribution.","required_params":[],"optional_params":["site","sort","tag","tags","page","pagesize","filter"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"tag","type":"string","required":false,"description":"Optional tag filter (one tag, or several joined by ';' for AND).","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (questions: id, title, body, score, tags, owner→author, link), site, attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"sort":"votes"}},{"name":"question","description":"Single question by id plus paginated answers.","required_params":["id"],"optional_params":["site","page","pagesize","filter"],"params":[{"name":"id","type":"string","required":true,"description":"Question id (or semicolon/comma-joined ids for batch routes).","on_invalid":"reject","example":"11227809","aliases":["ids"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"votes"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"question{} (the question) + answers[] (sorted, default votes), site, attribution; meta has question_*/answers_* pagination.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"answers","description":"Answer details by id/ids, or recent answers when no id is supplied.","required_params":[],"optional_params":["id","ids","site","sort","page","pagesize","filter"],"params":[{"name":"id","type":"string","required":false,"description":"Optional answer id(s) joined by ';'/','; omit for recent answers.","on_invalid":"reject","example":"11227902","aliases":["ids"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (answers: id, body, score, is_accepted, owner→author, link), site, attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"sort":"votes"}},{"name":"user","description":"User profile by id/ids.","required_params":["id"],"optional_params":["site"],"params":[{"name":"id","type":"string","required":true,"description":"Stack Exchange user id (or several joined by ';' or ',').","on_invalid":"reject","example":"22656","aliases":["ids"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"}],"returns":"items[] (user profiles: id, display_name, reputation, badges, link), site, attribution.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":22656}},{"name":"user_questions","description":"Paginated questions for a user.","required_params":["id"],"optional_params":["site","page","pagesize","sort","filter"],"params":[{"name":"id","type":"string","required":true,"description":"Stack Exchange user id (or several joined by ';' or ',').","on_invalid":"reject","example":"22656","aliases":["ids"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (this user's questions), site, attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"user_answers","description":"Paginated answers for a user.","required_params":["id"],"optional_params":["site","page","pagesize","sort","filter"],"params":[{"name":"id","type":"string","required":true,"description":"Stack Exchange user id (or several joined by ';' or ',').","on_invalid":"reject","example":"22656","aliases":["ids"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (this user's answers), site, attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"user_tags","description":"Paginated tag activity for a user.","required_params":["id"],"optional_params":["site","page","pagesize","sort"],"params":[{"name":"id","type":"string","required":true,"description":"Stack Exchange user id (or several joined by ';' or ',').","on_invalid":"reject","example":"22656","aliases":["ids"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"popular"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"items[] (tags this user is active in, with counts), site, attribution; meta has has_more/page/pagesize.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"user_badges","description":"Paginated badges for a user.","required_params":["id"],"optional_params":["site","page","pagesize","sort"],"params":[{"name":"id","type":"string","required":true,"description":"Stack Exchange user id (or several joined by ';' or ',').","on_invalid":"reject","example":"22656","aliases":["ids"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"rank"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"items[] (badges earned by this user), site, attribution; meta has has_more/page/pagesize.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"search","description":"Advanced full-text/tag search, paginated.","required_params":["q"],"optional_params":["site","tags","tagged","sort","page","pagesize","filter"],"params":[{"name":"q","type":"string","required":true,"description":"Free-text search query (matched against title and body).","on_invalid":"reject","example":"async await","aliases":["query"]},{"name":"tag","type":"string","required":false,"description":"Optional tag filter (one tag, or several joined by ';' for AND).","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"relevance"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (matching questions: title, body, score, tags, owner→author, link), site, attribution; meta has pagination.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"async await"}},{"name":"tags","description":"Paginated Stack Exchange tags.","required_params":[],"optional_params":["site","sort","page","pagesize"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"popular"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100}],"returns":"items[] (tags: name, count, is_moderator_only, has_synonyms), site, attribution; meta has has_more/page/pagesize.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"tag_questions","description":"Paginated questions for a tag.","required_params":["tag"],"optional_params":["site","sort","page","pagesize","filter"],"params":[{"name":"tag","type":"string","required":true,"description":"Exact tag name (e.g. 'python', 'c++').","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (questions carrying this tag), site, attribution; meta has has_more/page/pagesize.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"tag":"python"}},{"name":"tag_info","description":"Tag info by tag name.","required_params":["tag"],"optional_params":["site"],"params":[{"name":"tag","type":"string","required":true,"description":"Exact tag name (e.g. 'python', 'c++').","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"}],"returns":"items[] (single tag info: name, count, synonyms, is_moderator_only), site, attribution.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"tag":"python"}},{"name":"comments","description":"Paginated comments for post id/ids.","required_params":["id"],"optional_params":["site","page","pagesize","sort","filter"],"params":[{"name":"id","type":"string","required":true,"description":"Post/answer/comment id (or several joined by ';' or ',').","on_invalid":"reject","example":"11227809","aliases":["ids"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (comments on the post(s): body, score, owner→author, link), site, attribution; meta has has_more/page/pagesize.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"answer_comments","description":"Comments left on one or more answers, by answer id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target answer id; join several with ';' or ','.","on_invalid":"reject","example":"11227902","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227902}},{"name":"answer_questions","description":"The questions that the given answers belong to, by answer id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target answer id; join several with ';' or ','.","on_invalid":"reject","example":"11227902","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227902}},{"name":"badges","description":"All badges on the site, ranked bronze/silver/gold.","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"rank"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"badge","description":"Badge details by badge id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target badge id (1 = Teacher); join several with ';' or ','.","on_invalid":"reject","example":"1","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"rank"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":9}},{"name":"badge_name","description":"Named badges (the ones with a fixed name, e.g. 'Nice Answer').","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"rank"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"pagesize":30}},{"name":"badge_recipients","description":"Recently awarded badges across the site, with the users who earned them.","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"rank"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"badge_recipients_by_ids","description":"Recent recipients of specific badges, by badge id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target badge id (1 = Teacher); join several with ';' or ','.","on_invalid":"reject","example":"1","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"rank"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":9}},{"name":"badge_tags","description":"Tag-based badges (badges earned for activity within a tag).","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"rank"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"collectives","description":"All Stack Overflow Collectives (curated communities like 'Google Cloud').","required_params":[],"optional_params":["site","page","pagesize","order"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"collective","description":"Details for a Collective by its slug.","required_params":["slugs"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"slugs","type":"string","required":true,"description":"Stack Overflow Collective slug (e.g. 'google-cloud'); join several with ';'.","on_invalid":"reject","example":"google-cloud","aliases":["slug"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"slugs":"google-cloud"}},{"name":"collective_questions","description":"Questions associated with a Collective.","required_params":["slugs"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"slugs","type":"string","required":true,"description":"Stack Overflow Collective slug (e.g. 'google-cloud'); join several with ';'.","on_invalid":"reject","example":"google-cloud","aliases":["slug"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"slugs":"google-cloud"}},{"name":"collective_answers","description":"Answers associated with a Collective.","required_params":["slugs"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"slugs","type":"string","required":true,"description":"Stack Overflow Collective slug (e.g. 'google-cloud'); join several with ';'.","on_invalid":"reject","example":"google-cloud","aliases":["slug"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"slugs":"google-cloud","pagesize":20}},{"name":"collective_tags","description":"Tags that belong to a Collective.","required_params":["slugs"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"slugs","type":"string","required":true,"description":"Stack Overflow Collective slug (e.g. 'google-cloud'); join several with ';'.","on_invalid":"reject","example":"google-cloud","aliases":["slug"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"popular"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"slugs":"google-cloud"}},{"name":"collective_users","description":"Members of a Collective, by reputation.","required_params":["slugs"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"slugs","type":"string","required":true,"description":"Stack Overflow Collective slug (e.g. 'google-cloud'); join several with ';'.","on_invalid":"reject","example":"google-cloud","aliases":["slug"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"reputation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"slugs":"google-cloud"}},{"name":"comments_all","description":"Recent comments across the whole site.","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"comment","description":"Comment details by comment id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target comment id; join several with ';' or ','.","on_invalid":"reject","example":"136733980","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":87601479}},{"name":"info","description":"Site statistics: total questions, answers, users, badges, API revision.","required_params":[],"optional_params":["site"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"posts","description":"Recent posts (questions and answers together) across the site.","required_params":[],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"pagesize":30}},{"name":"post","description":"Post details by id, whether it is a question or an answer.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target post id (a question or an answer); join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809}},{"name":"post_comments","description":"Comments on a post (question or answer), by post id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target post id (a question or an answer); join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809}},{"name":"post_revisions","description":"Edit history (revisions) of a post, by post id.","required_params":["ids"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target post id (a question or an answer); join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809}},{"name":"post_suggested_edits","description":"Suggested edits submitted for a post, by post id.","required_params":["ids"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target post id (a question or an answer); join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809}},{"name":"privileges","description":"The site privilege ladder (what each reputation level unlocks).","required_params":[],"optional_params":["site","page","pagesize","order"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"question_answers","description":"All answers to one or more questions, by question id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target question id; join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"votes"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809}},{"name":"question_comments","description":"Comments on a question, by question id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target question id; join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809}},{"name":"question_linked","description":"Questions that link to the given question(s).","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target question id; join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809}},{"name":"question_related","description":"Questions Stack Overflow considers related to the given question(s).","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target question id; join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809}},{"name":"question_timeline","description":"Full event timeline of a question (edits, answers, comments, votes, close/reopen).","required_params":["ids"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target question id; join several with ';' or ','.","on_invalid":"reject","example":"11227809","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227809,"pagesize":30}},{"name":"questions_featured","description":"Featured (bountied) questions on the site.","required_params":[],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"math","pagesize":30}},{"name":"questions_no_answers","description":"Questions with zero answers (no answers at all).","required_params":[],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"questions_unanswered","description":"Questions the community considers unanswered (no accepted/upvoted answer).","required_params":[],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"revisions","description":"Revision details by revision guid.","required_params":["ids"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target revision GUID; join several with ';' or ','.","on_invalid":"reject","example":"5D4D2E7F-95BE-4A9A-AEF5-E911A07BD06E","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":"5D4D2E7F-95BE-4A9A-AEF5-E911A07BD06E"}},{"name":"search_simple","description":"Title-only question search — find questions whose title contains given text.","required_params":["intitle"],"optional_params":["tag","site","page","pagesize","order","sort","filter"],"params":[{"name":"intitle","type":"string","required":true,"description":"Text that must appear in the question title.","on_invalid":"reject","example":"python decorator"},{"name":"tag","type":"string","required":false,"description":"Optional tag filter (one tag, or several joined by ';' for AND).","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"intitle":"sort a list"}},{"name":"similar","description":"Find questions similar to a title (duplicate detection).","required_params":["title"],"optional_params":["tag","site","page","pagesize","order","sort","filter"],"params":[{"name":"title","type":"string","required":true,"description":"Title text to find similar/duplicate questions for.","on_invalid":"reject","example":"how to merge dictionaries"},{"name":"tag","type":"string","required":false,"description":"Optional tag filter (one tag, or several joined by ';' for AND).","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"relevance"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"title":"How to sort a list in Python"}},{"name":"search_excerpts","description":"Full-text search returning highlighted match excerpts for questions and answers.","required_params":["q"],"optional_params":["tag","site","page","pagesize","order","sort"],"params":[{"name":"q","type":"string","required":true,"description":"Free-text search query (matched against title and body).","on_invalid":"reject","example":"async await","aliases":["query"]},{"name":"tag","type":"string","required":false,"description":"Optional tag filter (one tag, or several joined by ';' for AND).","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"relevance"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"async await"}},{"name":"suggested_edits","description":"Recent suggested edits across the site.","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"suggested_edit","description":"Suggested-edit details by id.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target suggested-edit id; join several with ';' or ','.","on_invalid":"reject","example":"100","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":5584475}},{"name":"tags_moderator_only","description":"Tags only moderators can apply.","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"popular"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"meta.stackexchange"}},{"name":"tags_required","description":"Tags that must be present on every question (where the site requires them).","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"popular"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"meta.stackexchange"}},{"name":"tag_synonyms","description":"All tag synonyms on the site (e.g. 'js' → 'javascript').","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"tag_faq","description":"The frequently-asked (FAQ) questions for a tag.","required_params":["tags"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"tags","type":"string","required":true,"description":"Tag name(s) for this route (e.g. 'c#', 'python'); join several with ';'.","on_invalid":"reject","example":"c#","aliases":["tag","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"tags":"python"}},{"name":"tag_related","description":"Tags that commonly appear together with the given tag.","required_params":["tags"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"tags","type":"string","required":true,"description":"Tag name(s) for this route (e.g. 'c#', 'python'); join several with ';'.","on_invalid":"reject","example":"c#","aliases":["tag","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"popular"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"tags":"python"}},{"name":"tag_synonyms_by_tags","description":"Synonyms that map to a specific tag.","required_params":["tags"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"tags","type":"string","required":true,"description":"Tag name(s) for this route (e.g. 'c#', 'python'); join several with ';'.","on_invalid":"reject","example":"c#","aliases":["tag","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"tags":"python"}},{"name":"tag_top_answerers","description":"Top answerers in a tag (the experts), all-time or last month.","required_params":["tag"],"optional_params":["site","page","pagesize","order","period"],"params":[{"name":"tag","type":"string","required":true,"description":"Exact tag name (e.g. 'python', 'c++').","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"period","type":"enum","required":false,"description":"Time window for top-answerers/top-askers routes (all_time or month).","on_invalid":"ignore","allowed_values":[{"value":"all_time","label":"All time (default)"},{"value":"month","label":"Last month"}],"default":"all_time","example":"all_time"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"tag":"python"}},{"name":"tag_top_askers","description":"Top askers in a tag, all-time or last month.","required_params":["tag"],"optional_params":["site","page","pagesize","order","period"],"params":[{"name":"tag","type":"string","required":true,"description":"Exact tag name (e.g. 'python', 'c++').","on_invalid":"reject","example":"python","aliases":["tags","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"period","type":"enum","required":false,"description":"Time window for top-answerers/top-askers routes (all_time or month).","on_invalid":"ignore","allowed_values":[{"value":"all_time","label":"All time (default)"},{"value":"month","label":"Last month"}],"default":"all_time","example":"all_time"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"tag":"python"}},{"name":"tag_wikis","description":"The wiki/excerpt body that describes a tag.","required_params":["tags"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"tags","type":"string","required":true,"description":"Tag name(s) for this route (e.g. 'c#', 'python'); join several with ';'.","on_invalid":"reject","example":"c#","aliases":["tag","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"tags":"python"}},{"name":"users","description":"Site users, by reputation (the leaderboard).","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"reputation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"user_comments","description":"Comments written by a user.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":22656}},{"name":"user_comments_to_user","description":"Comments a user directed at one specific other user.","required_params":["ids","toid"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"toid","type":"string","required":true,"description":"Recipient user id (the 'to' user for directed comments) — must differ from the commenting user id.","on_invalid":"reject","example":"17034"},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":22656,"toid":3744182}},{"name":"user_favorites","description":"Questions a user bookmarked (favorited).","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227902}},{"name":"user_mentioned","description":"Comments that @-mention a user.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":22656}},{"name":"user_network_activity","description":"A user's activity across the entire Stack Exchange network (all sites).","required_params":["id"],"optional_params":["page","pagesize","order"],"params":[{"name":"id","type":"string","required":true,"description":"Single target id for this route (user/error id as applicable).","on_invalid":"reject","example":"22656"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"user_posts","description":"All posts (questions and answers) authored by a user.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":22656}},{"name":"user_privileges","description":"The privileges a user has unlocked at their reputation level.","required_params":["id"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"id","type":"string","required":true,"description":"Single target id for this route (user/error id as applicable).","on_invalid":"reject","example":"22656"},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"user_questions_featured","description":"A user's questions that currently carry a bounty (featured).","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11227902}},{"name":"user_questions_no_answers","description":"A user's questions that have no answers.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":179736}},{"name":"user_questions_unaccepted","description":"A user's questions that have answers but none accepted.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":179736}},{"name":"user_questions_unanswered","description":"A user's questions the community considers unanswered.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort","filter"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"activity"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":179736}},{"name":"user_reputation","description":"A user's reputation changes (the rep events feed).","required_params":["ids"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":22656}},{"name":"user_reputation_history","description":"Public reputation history of a user (each gain/loss event).","required_params":["ids"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":22656}},{"name":"user_suggested_edits","description":"Suggested edits a user has submitted.","required_params":["ids"],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"creation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":22656}},{"name":"user_top_answers_in_tags","description":"A user's highest-scoring answers within specific tags.","required_params":["id","tags"],"optional_params":["site","page","pagesize","order","filter"],"params":[{"name":"id","type":"string","required":true,"description":"Single target id for this route (user/error id as applicable).","on_invalid":"reject","example":"22656"},{"name":"tags","type":"string","required":true,"description":"Tag name(s) for this route (e.g. 'c#', 'python'); join several with ';'.","on_invalid":"reject","example":"c#","aliases":["tag","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":22656,"tags":"c#"}},{"name":"user_top_questions_in_tags","description":"A user's highest-scoring questions within specific tags.","required_params":["id","tags"],"optional_params":["site","page","pagesize","order","filter"],"params":[{"name":"id","type":"string","required":true,"description":"Single target id for this route (user/error id as applicable).","on_invalid":"reject","example":"22656"},{"name":"tags","type":"string","required":true,"description":"Tag name(s) for this route (e.g. 'c#', 'python'); join several with ';'.","on_invalid":"reject","example":"c#","aliases":["tag","tagged"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"filter","type":"string","required":false,"description":"Stack Exchange filter id controlling which fields are returned (e.g. 'withbody' to include rendered post bodies). Default withbody.","on_invalid":"ignore","example":"withbody","aliases":["filter_id"]}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":22656,"tags":"c#"}},{"name":"user_timeline","description":"A user's activity timeline (posts, comments, badges, rep events).","required_params":["ids"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":22656,"pagesize":30}},{"name":"user_top_answer_tags","description":"The tags a user is strongest in by answer score.","required_params":["id"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"id","type":"string","required":true,"description":"Single target id for this route (user/error id as applicable).","on_invalid":"reject","example":"22656"},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"user_top_question_tags","description":"The tags a user is strongest in by question score.","required_params":["id"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"id","type":"string","required":true,"description":"Single target id for this route (user/error id as applicable).","on_invalid":"reject","example":"22656"},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"user_top_tags","description":"A user's top tags overall (combined question + answer activity).","required_params":["id"],"optional_params":["site","page","pagesize","order"],"params":[{"name":"id","type":"string","required":true,"description":"Single target id for this route (user/error id as applicable).","on_invalid":"reject","example":"22656"},{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"moderators","description":"All moderators on the site.","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"reputation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"elected_moderators","description":"Moderators who were elected (excludes appointed/employee moderators).","required_params":[],"optional_params":["site","page","pagesize","order","sort"],"params":[{"name":"site","type":"string","required":false,"description":"Stack Exchange site slug (e.g. stackoverflow, serverfault, superuser, askubuntu, math). Defaults to stackoverflow.","on_invalid":"ignore","default":"stackoverflow","example":"stackoverflow"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"reputation"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"site":"stackoverflow"}},{"name":"errors","description":"The catalog of Stack Exchange API error codes and their meanings.","required_params":[],"optional_params":["page","pagesize","order"],"params":[{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"error","description":"Simulate one Stack Exchange API error by its id (returns the error as if it occurred).","required_params":["id"],"optional_params":["page","pagesize","order"],"params":[{"name":"id","type":"enum","required":true,"description":"Stack Exchange ERROR CODE to simulate (NOT a user/post id) — one of the ids listed by the `errors` action, e.g. 404. The simulated error comes back as a normal ok:true payload so you can test your error handling.","on_invalid":"reject","allowed_values":[{"value":"400","label":"bad_parameter"},{"value":"401","label":"access_token_required"},{"value":"402","label":"invalid_access_token"},{"value":"403","label":"access_denied"},{"value":"404","label":"no_method"},{"value":"405","label":"key_required"},{"value":"406","label":"access_token_compromised"},{"value":"407","label":"write_failed"},{"value":"409","label":"duplicate_request"},{"value":"500","label":"internal_error"},{"value":"502","label":"throttle_violation"},{"value":"503","label":"temporarily_unavailable"}],"example":"404"},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":11227809}},{"name":"sites","description":"Every site in the Stack Exchange network (Stack Overflow, Server Fault, Super User, etc.).","required_params":[],"optional_params":["page","pagesize","order","sort"],"params":[{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"},{"name":"sort","type":"enum","required":false,"description":"Sort key. Valid keys depend on the endpoint (e.g. votes/activity/creation for questions, reputation for users, rank for badges); common keys shown, others pass through to Stack Exchange.","on_invalid":"ignore","allowed_values":[{"value":"activity","label":"Last activity"},{"value":"creation","label":"Creation date"},{"value":"votes","label":"Votes/score"},{"value":"relevance","label":"Relevance (search)"},{"value":"popular","label":"Popularity (tags)"},{"value":"rank","label":"Rank (badges)"},{"value":"reputation","label":"Reputation (users)"},{"value":"name","label":"Name (sites)"},{"value":"hot","label":"Hot"},{"value":"week","label":"This week"},{"value":"month","label":"This month"}],"example":"name"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"page":1}},{"name":"associated_users","description":"A user's accounts across all Stack Exchange sites (network accounts).","required_params":["ids"],"optional_params":["page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11683}},{"name":"merge_history","description":"Account-merge history for a user id.","required_params":["ids"],"optional_params":["page","pagesize","order"],"params":[{"name":"ids","type":"string","required":true,"description":"Target user id (22656 = Jon Skeet); join several with ';' or ','.","on_invalid":"reject","example":"22656","aliases":["id"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"pagesize","type":"integer","required":false,"description":"Results per page (1-100, default 100). Larger values are clamped to 100.","on_invalid":"ignore","default":100,"example":30,"minimum":1,"maximum":100},{"name":"order","type":"enum","required":false,"description":"Sort direction for the chosen sort key.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"default":"desc","example":"desc"}],"returns":"items[] (each normalized with a stable id+type, and owner→author where present), plus site and CC BY-SA attribution; meta has has_more/page/pagesize/quota_remaining.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"ids":11683}}]},{"name":"standvirtual","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Standvirtual API — standvirtual.com, Portugal's largest car marketplace (OLX Group): search used and new cars by make, model, series, district, keyword and the site's own price, year, mileage, power, engine size, fuel, gearbox, body, drive, origin, VAT and seller-type filters, and read the full offer. Price in EUR with the site's own market price indicator, private vs dealer seller, promoted flag. No account, no browser.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/standvirtual/v1","spec_available":true,"actions":[{"name":"search","description":"Search standvirtual.com car ads the way its visitors do: make, model or series, Portuguese district, free-text keyword, and the site's own filters — price, first registration year, mileage, engine power and capacity, fuel, gearbox, body type, driven wheels, national or imported, VAT deductible, new or used, private seller or dealer. 32 ads per page with the price in EUR, standvirtual's below/in/above-market price indicator, year, mileage with the site's own printed figure beside it, fuel, gearbox, power, engine size, town and district, the seller type the site publishes, the dealer's name and page, and whether the ad is a paid promoted placement. Every filter is checked against what the site says it applied; a make, model or district the site does not recognise is refused instead of quietly widening to every car. Total result count and page count are returned.","required_params":[],"optional_params":["make","model","series","location","query","page","sort","seller_type","condition","fuel_type","gearbox","body_type","drive","origin","vat_deductible","price_from","price_to","year_from","year_to","mileage_from","mileage_to","engine_power_from","engine_power_to","engine_capacity_from","engine_capacity_to"],"params":[{"name":"make","type":"string","required":false,"description":"A make exactly as standvirtual spells it in its URLs: bmw, mercedes-benz, peugeot, renault, vw (Volkswagen is 'vw'), audi, citroen, seat. The `makes` action lists all 151 with live ad counts. A make the site does not apply is refused — the site itself would silently answer with every car in Portugal.","on_invalid":"reject","example":"bmw","value_pattern":"[a-z0-9][a-z0-9._-]{0,60}","aliases":["brand"]},{"name":"model","type":"string","required":false,"description":"A model slug as the search rows publish it in `model_slug` (golf, clio, 320, ix1, c-220) or a series slug from `makes` (serie-3, classe-c). Requires make.","on_invalid":"reject","example":"golf","value_pattern":"[a-z0-9][a-z0-9._-]{0,60}"},{"name":"series","type":"string","required":false,"description":"The series level that standvirtual uses for BMW, Mercedes-Benz, Lexus and Porsche (serie-3, serie-x, classe-c, 911), as rows publish it in `series_slug`. Alone it returns the whole series; with model it narrows to that model inside the series. Requires make.","on_invalid":"reject","example":"serie-3","value_pattern":"[a-z0-9][a-z0-9._-]{0,60}"},{"name":"location","type":"string","required":false,"description":"A Portuguese district slug as standvirtual spells it: lisboa, porto, braga, aveiro, setubal, santarem, leiria, faro, coimbra, viseu, vianadocastelo, vilareal, guarda, evora, portalegre, beja, braganca, castelobranco, madeira-madeira, acores. A location the site does not apply is refused.","on_invalid":"reject","example":"lisboa","value_pattern":"[a-z0-9][a-z0-9-]{0,40}","aliases":["region"]},{"name":"query","type":"string","required":false,"description":"Free text, applied by standvirtual's own keyword search (search[q]) and echoed back. Measured: 'golf' 681 ads, 'bmw' 4,732.","on_invalid":"reject","example":"golf gti","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page from 1. The site serves 32 ads per page; a page past the last returns 0 rows with page_beyond_last=true and the real total.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"sort","type":"enum","required":false,"description":"Result order, using standvirtual's own published sort ids.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"standvirtual's own recommended order"},{"value":"featured","label":"Featured ads first"},{"value":"newest","label":"Most recently posted first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"mileage_asc","label":"Lowest mileage first"},{"value":"mileage_desc","label":"Highest mileage first"},{"value":"power_asc","label":"Lowest engine power first"},{"value":"power_desc","label":"Highest engine power first"}],"example":"price_asc"},{"name":"seller_type","type":"enum","required":false,"description":"Private sellers (Particular) or dealers (Profissional), standvirtual's own filter. Rows carry the seller type the site publishes.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Particular"},{"value":"business","label":"Profissional"}],"example":"private"},{"name":"condition","type":"enum","required":false,"description":"New or used, as the site's own filter defines it.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Usados"},{"value":"new","label":"Novos"}],"example":"used"},{"name":"fuel_type","type":"enum","required":false,"description":"Fuel, standvirtual's own codes ('gaz' is petrol).","on_invalid":"reject","allowed_values":[{"value":"diesel","label":"Diesel"},{"value":"gaz","label":"Gasolina (petrol)"},{"value":"electric","label":"Elétrico"},{"value":"plugin-hybrid","label":"Híbrido Plug-In"},{"value":"hibride-gaz","label":"Híbrido (Gasolina)"},{"value":"hibride-diesel","label":"Híbrido (Diesel)"},{"value":"gpl","label":"GPL (LPG)"},{"value":"gnc","label":"GNC (CNG)"},{"value":"hidrogen","label":"Hidrogénio"}],"example":"diesel"},{"name":"gearbox","type":"enum","required":false,"description":"Gearbox type.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual"},{"value":"automatic","label":"Automática"}],"example":"automatic"},{"name":"body_type","type":"enum","required":false,"description":"Body type (Segmento).","on_invalid":"reject","allowed_values":[{"value":"suv","label":"SUV / TT"},{"value":"combi","label":"Carrinha (estate)"},{"value":"sedan","label":"Sedan"},{"value":"compact","label":"Utilitário (hatchback)"},{"value":"city-car","label":"Citadino"},{"value":"mini","label":"Pequeno citadino"},{"value":"coupe","label":"Coupé"},{"value":"cabrio","label":"Cabrio"},{"value":"minivan","label":"Monovolume"}],"example":"suv"},{"name":"drive","type":"enum","required":false,"description":"Driven wheels (Tracção).","on_invalid":"reject","allowed_values":[{"value":"front-wheel-drive","label":"Tracção dianteira"},{"value":"rear-wheel-drive","label":"Tracção traseira"},{"value":"integral","label":"Integral (4x4)"}],"example":"integral"},{"name":"origin","type":"enum","required":false,"description":"National or imported vehicle, the site's own filter.","on_invalid":"reject","allowed_values":[{"value":"national","label":"Nacional"},{"value":"imported","label":"Importado"}],"example":"imported"},{"name":"vat_deductible","type":"boolean","required":false,"description":"true returns only ads where VAT (IVA) is deductible — the site's own 'IVA dedutível' filter, relevant to company buyers.","on_invalid":"reject","example":true},{"name":"price_from","type":"integer","required":false,"description":"Lowest price in EUR, inclusive.","on_invalid":"reject","example":10000,"minimum":0,"maximum":100000000},{"name":"price_to","type":"integer","required":false,"description":"Highest price in EUR, inclusive.","on_invalid":"reject","minimum":0,"maximum":100000000},{"name":"year_from","type":"integer","required":false,"description":"Lowest year in years, inclusive.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_to","type":"integer","required":false,"description":"Highest year in years, inclusive.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_from","type":"integer","required":false,"description":"Lowest mileage in kilometres, inclusive.","on_invalid":"reject","minimum":0,"maximum":10000000},{"name":"mileage_to","type":"integer","required":false,"description":"Highest mileage in kilometres, inclusive.","on_invalid":"reject","minimum":0,"maximum":10000000},{"name":"engine_power_from","type":"integer","required":false,"description":"Lowest engine power in cv (metric hp), inclusive.","on_invalid":"reject","minimum":0,"maximum":5000},{"name":"engine_power_to","type":"integer","required":false,"description":"Highest engine power in cv (metric hp), inclusive.","on_invalid":"reject","minimum":0,"maximum":5000},{"name":"engine_capacity_from","type":"integer","required":false,"description":"Lowest engine capacity in cm3, inclusive.","on_invalid":"reject","minimum":0,"maximum":20000},{"name":"engine_capacity_to","type":"integer","required":false,"description":"Highest engine capacity in cm3, inclusive.","on_invalid":"reject","minimum":0,"maximum":20000}],"returns":"results[]{listing_id (pass to `listing`), ad_id, title, subtitle, url, created_at, price (EUR; null when the site publishes 0), price_raw, currency, price_is_placeholder, price_mismatch, price_is_gross, price_gross, price_net, price_badges, price_evaluation (the site's BELOW/IN/ABOVE/NONE market indicator), price_drop_previous, make, make_slug, model, model_slug, series, series_slug, version, year (first registration), mileage_km, mileage_display, fuel_type{value,label}, gearbox{value,label}, engine_power_cv, engine_capacity_cm3, field_mismatch, location{city, region, country}, seller{kind private|dealer|crosslisted, uuid, dealer_id, dealer_name, dealer_url, is_credit_intermediary}, is_promoted, promotions, badges, brand_program, image}, count, total_results, total_pages, page, page_size, has_more, page_beyond_last, source_page_rows (edges the site served; varies), rows_dropped (rows without id or title), sort, filters_applied, search_url","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"make":"vw","model":"golf"}},{"name":"listing","description":"The full standvirtual offer from a search row's listing_id or the offer URL: title, price in EUR checked against the price the page prints, price labels (fixed, negotiable, trade-in accepted), make, model, series, version, first registration year and month, mileage, fuel, gearbox, power, engine size, body, colour, doors, seats, drive, new/used, origin, VAT-deductible flag, warranty, the complete printed specification list, equipment by group, all photos, the seller's description, the seller (private or dealer, name, dealer page, website, active ads, badges) and its published location with postal code and map point. Phone numbers are published by the site only in encrypted form and are not returned. A withdrawn or unknown offer answers NOT_FOUND.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The `listing_id` of a search row (ID8Q0I6X — the token at the end of the offer URL) or the full standvirtual offer URL. The numeric ad_id does not address an offer page and is refused.","on_invalid":"reject","example":"ID8Q0I6X","value_pattern":"(https?://.*|ID[0-9A-Za-z]{4,16})","aliases":["url","listing","id"]}],"returns":"listing_id, ad_id, title, url, status, created_at, updated_at, price, price_raw, price_printed, currency, price_is_placeholder, price_mismatch, price_labels, price_negotiable, price_fixed, price_drop_previous, make, make_slug, model, model_slug, series, series_slug, version, year, first_registration_month, mileage_km, mileage_display, fuel_type, gearbox, engine_power_cv, engine_capacity_cm3, field_mismatch, body_type, colour, doors, seats, drive, condition, origin, vat_deductible, warranty, location{city, region, subregion, postal_code, address, latitude, longitude, country}, seller{kind, type_raw (PRIVATE|PROFESSIONAL|STAND), id, stand_id, uuid, name, dealer_url, website, active_ads, badges, phones_encrypted}, is_promoted, promotions, badges, description, specs[]{key,label,value,group}, equipment[]{key,label,items}, images, image_count, verified_car, breadcrumb","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"ID8Q0I6X"}},{"name":"makes","description":"standvirtual's own make and model register with live ad counts, read from the site's filter catalogue: no parameter -> every make (151) with its slug and count; make -> that make's models (or series for BMW, Mercedes-Benz, Lexus, Porsche) with has_submodels; make + series -> the models inside the series. Use it to get a slug right before searching.","required_params":[],"optional_params":["make","series"],"params":[{"name":"make","type":"string","required":false,"description":"Omit for the make list; give a make for its model list.","on_invalid":"reject","example":"bmw","value_pattern":"[a-z0-9][a-z0-9._-]{0,60}","aliases":["brand"]},{"name":"series","type":"string","required":false,"description":"With make, a series (has_submodels=true in the model list) to read its sub-models (serie-3 -> 316, 318, 320 …).","on_invalid":"reject","example":"serie-3","value_pattern":"[a-z0-9][a-z0-9._-]{0,60}"}],"returns":"results[]{slug, label, count, has_submodels (models list only)}, kind (makes|models|submodels), count, make, series, source_url","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"make":"bmw"}}]},{"name":"status-intel","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Service Status & Incident API — live up/down status, incidents and per-component health for any vendor: auto-resolves and parses any status page (Statuspage, Instatus) plus AWS, GCP, Slack, Stripe and Azure","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/status-intel/v1","spec_available":true,"actions":[{"name":"status","description":"Current OVERALL status for a vendor → normalized indicator (operational/degraded/partial_outage/major_outage/maintenance) + is_operational boolean + description.","required_params":["vendor"],"optional_params":[],"params":[{"name":"vendor","type":"string","required":true,"description":"Which status page to read. EITHER a curated registry key (github, openai, aws, azure… — call action=list_vendors) OR ANY status-page host/URL for generic auto-parsing (e.g. 'status.acme.com', 'https://status.acme.io') — the engine auto-detects Atlassian Statuspage or Instatus and normalizes it the same way. Case-insensitive.","on_invalid":"ignore","allowed_values":[{"value":"airtable","label":"Airtable (statuspage)"},{"value":"algolia","label":"Algolia (statuspage)"},{"value":"amplitude","label":"Amplitude (statuspage)"},{"value":"anthropic","label":"Anthropic (statuspage)"},{"value":"asana","label":"Asana (statuspage)"},{"value":"atlassian","label":"Atlassian (statuspage)"},{"value":"aws","label":"Amazon Web Services (special)"},{"value":"azure","label":"Microsoft Azure (special)"},{"value":"bitbucket","label":"Bitbucket (statuspage)"},{"value":"box","label":"Box (statuspage)"},{"value":"braze","label":"Braze (statuspage)"},{"value":"brevo","label":"Brevo (statuspage)"},{"value":"bunny","label":"Bunny.net (statuspage)"},{"value":"calendly","label":"Calendly (statuspage)"},{"value":"circleci","label":"CircleCI (statuspage)"},{"value":"clerk","label":"Clerk (statuspage)"},{"value":"cloudflare","label":"Cloudflare (statuspage)"},{"value":"cloudinary","label":"Cloudinary (statuspage)"},{"value":"cockroachdb","label":"CockroachDB Cloud (statuspage)"},{"value":"cohere","label":"Cohere (statuspage)"},{"value":"confluent","label":"Confluent Cloud (statuspage)"},{"value":"contentful","label":"Contentful (statuspage)"},{"value":"databricks","label":"Databricks (statuspage)"},{"value":"datadog","label":"Datadog (statuspage)"},{"value":"dialpad","label":"Dialpad (statuspage)"},{"value":"digitalocean","label":"DigitalOcean (statuspage)"},{"value":"discord","label":"Discord (statuspage)"},{"value":"docusign","label":"Docusign (statuspage)"},{"value":"doppler","label":"Doppler (statuspage)"},{"value":"dropbox","label":"Dropbox (statuspage)"},{"value":"duo","label":"Cisco Duo (statuspage)"},{"value":"elastic","label":"Elastic Cloud (statuspage)"},{"value":"elevenlabs","label":"ElevenLabs (statuspage)"},{"value":"figma","label":"Figma (statuspage)"},{"value":"fivetran","label":"Fivetran (statuspage)"},{"value":"fly","label":"Fly.io (statuspage)"},{"value":"gcp","label":"Google Cloud (special)"},{"value":"github","label":"GitHub (statuspage)"},{"value":"godaddy","label":"GoDaddy (statuspage)"},{"value":"grafana","label":"Grafana Cloud (statuspage)"},{"value":"groq","label":"Groq (statuspage)"},{"value":"harness","label":"Harness (Split) (statuspage)"},{"value":"hashicorp","label":"HashiCorp Cloud (statuspage)"},{"value":"hubspot","label":"HubSpot (statuspage)"},{"value":"intercom","label":"Intercom (statuspage)"},{"value":"kraken","label":"Kraken (statuspage)"},{"value":"launchdarkly","label":"LaunchDarkly (statuspage)"},{"value":"linode","label":"Akamai Linode (statuspage)"},{"value":"loom","label":"Loom (statuspage)"},{"value":"mailgun","label":"Mailgun (statuspage)"},{"value":"miro","label":"Miro (statuspage)"},{"value":"mixpanel","label":"Mixpanel (statuspage)"},{"value":"monday","label":"monday.com (statuspage)"},{"value":"mongodb","label":"MongoDB Atlas (statuspage)"},{"value":"netlify","label":"Netlify (statuspage)"},{"value":"newrelic","label":"New Relic (statuspage)"},{"value":"ngrok","label":"ngrok (statuspage)"},{"value":"npm","label":"npm (statuspage)"},{"value":"openai","label":"OpenAI (statuspage)"},{"value":"pinecone","label":"Pinecone (statuspage)"},{"value":"planetscale","label":"PlanetScale (statuspage)"},{"value":"postman","label":"Postman (statuspage)"},{"value":"pusher","label":"Pusher (statuspage)"},{"value":"reddit","label":"Reddit (statuspage)"},{"value":"render","label":"Render (statuspage)"},{"value":"replicate","label":"Replicate (statuspage)"},{"value":"retool","label":"Retool (statuspage)"},{"value":"sanity","label":"Sanity (statuspage)"},{"value":"segment","label":"Twilio Segment (statuspage)"},{"value":"sendgrid","label":"Twilio SendGrid (statuspage)"},{"value":"sentry","label":"Sentry (statuspage)"},{"value":"shopify","label":"Shopify (statuspage)"},{"value":"slack","label":"Slack (special)"},{"value":"snowflake","label":"Snowflake (statuspage)"},{"value":"squarespace","label":"Squarespace (statuspage)"},{"value":"squareup","label":"Square (statuspage)"},{"value":"stabilityai","label":"Stability AI (statuspage)"},{"value":"stripe","label":"Stripe (special)"},{"value":"supabase","label":"Supabase (statuspage)"},{"value":"trello","label":"Trello (statuspage)"},{"value":"twilio","label":"Twilio (statuspage)"},{"value":"typeform","label":"Typeform (statuspage)"},{"value":"upstash","label":"Upstash (statuspage)"},{"value":"vercel","label":"Vercel (statuspage)"},{"value":"vimeo","label":"Vimeo (statuspage)"},{"value":"webflow","label":"Webflow (statuspage)"},{"value":"wise","label":"Wise (statuspage)"},{"value":"workos","label":"WorkOS (statuspage)"},{"value":"zapier","label":"Zapier (statuspage)"},{"value":"zoom","label":"Zoom (statuspage)"},{"value":"zoominfo","label":"ZoomInfo (statuspage)"}],"example":"github","aliases":["service","company","name","url","host"]}],"returns":"vendor, name, indicator, is_operational, description, raw_indicator, active_incident_count, updated_at, source_url","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"vendor":"github"}},{"name":"incidents","description":"Recent or active incidents for a vendor (title, impact, status, timeline of updates, affected components). active_only=true → just the ongoing ones.","required_params":["vendor"],"optional_params":["active_only","limit"],"params":[{"name":"vendor","type":"string","required":true,"description":"Which status page to read. EITHER a curated registry key (github, openai, aws, azure… — call action=list_vendors) OR ANY status-page host/URL for generic auto-parsing (e.g. 'status.acme.com', 'https://status.acme.io') — the engine auto-detects Atlassian Statuspage or Instatus and normalizes it the same way. Case-insensitive.","on_invalid":"ignore","allowed_values":[{"value":"airtable","label":"Airtable (statuspage)"},{"value":"algolia","label":"Algolia (statuspage)"},{"value":"amplitude","label":"Amplitude (statuspage)"},{"value":"anthropic","label":"Anthropic (statuspage)"},{"value":"asana","label":"Asana (statuspage)"},{"value":"atlassian","label":"Atlassian (statuspage)"},{"value":"aws","label":"Amazon Web Services (special)"},{"value":"azure","label":"Microsoft Azure (special)"},{"value":"bitbucket","label":"Bitbucket (statuspage)"},{"value":"box","label":"Box (statuspage)"},{"value":"braze","label":"Braze (statuspage)"},{"value":"brevo","label":"Brevo (statuspage)"},{"value":"bunny","label":"Bunny.net (statuspage)"},{"value":"calendly","label":"Calendly (statuspage)"},{"value":"circleci","label":"CircleCI (statuspage)"},{"value":"clerk","label":"Clerk (statuspage)"},{"value":"cloudflare","label":"Cloudflare (statuspage)"},{"value":"cloudinary","label":"Cloudinary (statuspage)"},{"value":"cockroachdb","label":"CockroachDB Cloud (statuspage)"},{"value":"cohere","label":"Cohere (statuspage)"},{"value":"confluent","label":"Confluent Cloud (statuspage)"},{"value":"contentful","label":"Contentful (statuspage)"},{"value":"databricks","label":"Databricks (statuspage)"},{"value":"datadog","label":"Datadog (statuspage)"},{"value":"dialpad","label":"Dialpad (statuspage)"},{"value":"digitalocean","label":"DigitalOcean (statuspage)"},{"value":"discord","label":"Discord (statuspage)"},{"value":"docusign","label":"Docusign (statuspage)"},{"value":"doppler","label":"Doppler (statuspage)"},{"value":"dropbox","label":"Dropbox (statuspage)"},{"value":"duo","label":"Cisco Duo (statuspage)"},{"value":"elastic","label":"Elastic Cloud (statuspage)"},{"value":"elevenlabs","label":"ElevenLabs (statuspage)"},{"value":"figma","label":"Figma (statuspage)"},{"value":"fivetran","label":"Fivetran (statuspage)"},{"value":"fly","label":"Fly.io (statuspage)"},{"value":"gcp","label":"Google Cloud (special)"},{"value":"github","label":"GitHub (statuspage)"},{"value":"godaddy","label":"GoDaddy (statuspage)"},{"value":"grafana","label":"Grafana Cloud (statuspage)"},{"value":"groq","label":"Groq (statuspage)"},{"value":"harness","label":"Harness (Split) (statuspage)"},{"value":"hashicorp","label":"HashiCorp Cloud (statuspage)"},{"value":"hubspot","label":"HubSpot (statuspage)"},{"value":"intercom","label":"Intercom (statuspage)"},{"value":"kraken","label":"Kraken (statuspage)"},{"value":"launchdarkly","label":"LaunchDarkly (statuspage)"},{"value":"linode","label":"Akamai Linode (statuspage)"},{"value":"loom","label":"Loom (statuspage)"},{"value":"mailgun","label":"Mailgun (statuspage)"},{"value":"miro","label":"Miro (statuspage)"},{"value":"mixpanel","label":"Mixpanel (statuspage)"},{"value":"monday","label":"monday.com (statuspage)"},{"value":"mongodb","label":"MongoDB Atlas (statuspage)"},{"value":"netlify","label":"Netlify (statuspage)"},{"value":"newrelic","label":"New Relic (statuspage)"},{"value":"ngrok","label":"ngrok (statuspage)"},{"value":"npm","label":"npm (statuspage)"},{"value":"openai","label":"OpenAI (statuspage)"},{"value":"pinecone","label":"Pinecone (statuspage)"},{"value":"planetscale","label":"PlanetScale (statuspage)"},{"value":"postman","label":"Postman (statuspage)"},{"value":"pusher","label":"Pusher (statuspage)"},{"value":"reddit","label":"Reddit (statuspage)"},{"value":"render","label":"Render (statuspage)"},{"value":"replicate","label":"Replicate (statuspage)"},{"value":"retool","label":"Retool (statuspage)"},{"value":"sanity","label":"Sanity (statuspage)"},{"value":"segment","label":"Twilio Segment (statuspage)"},{"value":"sendgrid","label":"Twilio SendGrid (statuspage)"},{"value":"sentry","label":"Sentry (statuspage)"},{"value":"shopify","label":"Shopify (statuspage)"},{"value":"slack","label":"Slack (special)"},{"value":"snowflake","label":"Snowflake (statuspage)"},{"value":"squarespace","label":"Squarespace (statuspage)"},{"value":"squareup","label":"Square (statuspage)"},{"value":"stabilityai","label":"Stability AI (statuspage)"},{"value":"stripe","label":"Stripe (special)"},{"value":"supabase","label":"Supabase (statuspage)"},{"value":"trello","label":"Trello (statuspage)"},{"value":"twilio","label":"Twilio (statuspage)"},{"value":"typeform","label":"Typeform (statuspage)"},{"value":"upstash","label":"Upstash (statuspage)"},{"value":"vercel","label":"Vercel (statuspage)"},{"value":"vimeo","label":"Vimeo (statuspage)"},{"value":"webflow","label":"Webflow (statuspage)"},{"value":"wise","label":"Wise (statuspage)"},{"value":"workos","label":"WorkOS (statuspage)"},{"value":"zapier","label":"Zapier (statuspage)"},{"value":"zoom","label":"Zoom (statuspage)"},{"value":"zoominfo","label":"ZoomInfo (statuspage)"}],"example":"github","aliases":["service","company","name","url","host"]},{"name":"active_only","type":"boolean","required":false,"description":"If true, return ONLY currently-unresolved/active incidents (the 'is there an outage right now?' view). Default false = recent history.","on_invalid":"ignore","default":false,"example":true},{"name":"limit","type":"integer","required":false,"description":"Max incidents to return (most recent first). Default 25, cap 100.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"vendor, incidents[] (id, name, impact, status, started_at, resolved_at, affected_components[], latest_update, updates[]), active_count, count","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"vendor":"github"}},{"name":"components","description":"Per-component (sub-service) health for a vendor — which specific products are degraded.","required_params":["vendor"],"optional_params":["limit"],"params":[{"name":"vendor","type":"string","required":true,"description":"Which status page to read. EITHER a curated registry key (github, openai, aws, azure… — call action=list_vendors) OR ANY status-page host/URL for generic auto-parsing (e.g. 'status.acme.com', 'https://status.acme.io') — the engine auto-detects Atlassian Statuspage or Instatus and normalizes it the same way. Case-insensitive.","on_invalid":"ignore","allowed_values":[{"value":"airtable","label":"Airtable (statuspage)"},{"value":"algolia","label":"Algolia (statuspage)"},{"value":"amplitude","label":"Amplitude (statuspage)"},{"value":"anthropic","label":"Anthropic (statuspage)"},{"value":"asana","label":"Asana (statuspage)"},{"value":"atlassian","label":"Atlassian (statuspage)"},{"value":"aws","label":"Amazon Web Services (special)"},{"value":"azure","label":"Microsoft Azure (special)"},{"value":"bitbucket","label":"Bitbucket (statuspage)"},{"value":"box","label":"Box (statuspage)"},{"value":"braze","label":"Braze (statuspage)"},{"value":"brevo","label":"Brevo (statuspage)"},{"value":"bunny","label":"Bunny.net (statuspage)"},{"value":"calendly","label":"Calendly (statuspage)"},{"value":"circleci","label":"CircleCI (statuspage)"},{"value":"clerk","label":"Clerk (statuspage)"},{"value":"cloudflare","label":"Cloudflare (statuspage)"},{"value":"cloudinary","label":"Cloudinary (statuspage)"},{"value":"cockroachdb","label":"CockroachDB Cloud (statuspage)"},{"value":"cohere","label":"Cohere (statuspage)"},{"value":"confluent","label":"Confluent Cloud (statuspage)"},{"value":"contentful","label":"Contentful (statuspage)"},{"value":"databricks","label":"Databricks (statuspage)"},{"value":"datadog","label":"Datadog (statuspage)"},{"value":"dialpad","label":"Dialpad (statuspage)"},{"value":"digitalocean","label":"DigitalOcean (statuspage)"},{"value":"discord","label":"Discord (statuspage)"},{"value":"docusign","label":"Docusign (statuspage)"},{"value":"doppler","label":"Doppler (statuspage)"},{"value":"dropbox","label":"Dropbox (statuspage)"},{"value":"duo","label":"Cisco Duo (statuspage)"},{"value":"elastic","label":"Elastic Cloud (statuspage)"},{"value":"elevenlabs","label":"ElevenLabs (statuspage)"},{"value":"figma","label":"Figma (statuspage)"},{"value":"fivetran","label":"Fivetran (statuspage)"},{"value":"fly","label":"Fly.io (statuspage)"},{"value":"gcp","label":"Google Cloud (special)"},{"value":"github","label":"GitHub (statuspage)"},{"value":"godaddy","label":"GoDaddy (statuspage)"},{"value":"grafana","label":"Grafana Cloud (statuspage)"},{"value":"groq","label":"Groq (statuspage)"},{"value":"harness","label":"Harness (Split) (statuspage)"},{"value":"hashicorp","label":"HashiCorp Cloud (statuspage)"},{"value":"hubspot","label":"HubSpot (statuspage)"},{"value":"intercom","label":"Intercom (statuspage)"},{"value":"kraken","label":"Kraken (statuspage)"},{"value":"launchdarkly","label":"LaunchDarkly (statuspage)"},{"value":"linode","label":"Akamai Linode (statuspage)"},{"value":"loom","label":"Loom (statuspage)"},{"value":"mailgun","label":"Mailgun (statuspage)"},{"value":"miro","label":"Miro (statuspage)"},{"value":"mixpanel","label":"Mixpanel (statuspage)"},{"value":"monday","label":"monday.com (statuspage)"},{"value":"mongodb","label":"MongoDB Atlas (statuspage)"},{"value":"netlify","label":"Netlify (statuspage)"},{"value":"newrelic","label":"New Relic (statuspage)"},{"value":"ngrok","label":"ngrok (statuspage)"},{"value":"npm","label":"npm (statuspage)"},{"value":"openai","label":"OpenAI (statuspage)"},{"value":"pinecone","label":"Pinecone (statuspage)"},{"value":"planetscale","label":"PlanetScale (statuspage)"},{"value":"postman","label":"Postman (statuspage)"},{"value":"pusher","label":"Pusher (statuspage)"},{"value":"reddit","label":"Reddit (statuspage)"},{"value":"render","label":"Render (statuspage)"},{"value":"replicate","label":"Replicate (statuspage)"},{"value":"retool","label":"Retool (statuspage)"},{"value":"sanity","label":"Sanity (statuspage)"},{"value":"segment","label":"Twilio Segment (statuspage)"},{"value":"sendgrid","label":"Twilio SendGrid (statuspage)"},{"value":"sentry","label":"Sentry (statuspage)"},{"value":"shopify","label":"Shopify (statuspage)"},{"value":"slack","label":"Slack (special)"},{"value":"snowflake","label":"Snowflake (statuspage)"},{"value":"squarespace","label":"Squarespace (statuspage)"},{"value":"squareup","label":"Square (statuspage)"},{"value":"stabilityai","label":"Stability AI (statuspage)"},{"value":"stripe","label":"Stripe (special)"},{"value":"supabase","label":"Supabase (statuspage)"},{"value":"trello","label":"Trello (statuspage)"},{"value":"twilio","label":"Twilio (statuspage)"},{"value":"typeform","label":"Typeform (statuspage)"},{"value":"upstash","label":"Upstash (statuspage)"},{"value":"vercel","label":"Vercel (statuspage)"},{"value":"vimeo","label":"Vimeo (statuspage)"},{"value":"webflow","label":"Webflow (statuspage)"},{"value":"wise","label":"Wise (statuspage)"},{"value":"workos","label":"WorkOS (statuspage)"},{"value":"zapier","label":"Zapier (statuspage)"},{"value":"zoom","label":"Zoom (statuspage)"},{"value":"zoominfo","label":"ZoomInfo (statuspage)"}],"example":"github","aliases":["service","company","name","url","host"]},{"name":"limit","type":"integer","required":false,"description":"Max components to return (per-component pages can be large). Default 200.","on_invalid":"ignore","default":200,"example":100,"minimum":1,"maximum":1000}],"returns":"vendor, indicator, components[] (name, status, is_operational, group, description), operational_count, degraded_count, total_components, count","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"vendor":"cloudflare"}},{"name":"summary","description":"Full one-call snapshot for a vendor: overall status + components + active incidents + scheduled maintenances (the whole status page in one normalized object).","required_params":["vendor"],"optional_params":[],"params":[{"name":"vendor","type":"string","required":true,"description":"Which status page to read. EITHER a curated registry key (github, openai, aws, azure… — call action=list_vendors) OR ANY status-page host/URL for generic auto-parsing (e.g. 'status.acme.com', 'https://status.acme.io') — the engine auto-detects Atlassian Statuspage or Instatus and normalizes it the same way. Case-insensitive.","on_invalid":"ignore","allowed_values":[{"value":"airtable","label":"Airtable (statuspage)"},{"value":"algolia","label":"Algolia (statuspage)"},{"value":"amplitude","label":"Amplitude (statuspage)"},{"value":"anthropic","label":"Anthropic (statuspage)"},{"value":"asana","label":"Asana (statuspage)"},{"value":"atlassian","label":"Atlassian (statuspage)"},{"value":"aws","label":"Amazon Web Services (special)"},{"value":"azure","label":"Microsoft Azure (special)"},{"value":"bitbucket","label":"Bitbucket (statuspage)"},{"value":"box","label":"Box (statuspage)"},{"value":"braze","label":"Braze (statuspage)"},{"value":"brevo","label":"Brevo (statuspage)"},{"value":"bunny","label":"Bunny.net (statuspage)"},{"value":"calendly","label":"Calendly (statuspage)"},{"value":"circleci","label":"CircleCI (statuspage)"},{"value":"clerk","label":"Clerk (statuspage)"},{"value":"cloudflare","label":"Cloudflare (statuspage)"},{"value":"cloudinary","label":"Cloudinary (statuspage)"},{"value":"cockroachdb","label":"CockroachDB Cloud (statuspage)"},{"value":"cohere","label":"Cohere (statuspage)"},{"value":"confluent","label":"Confluent Cloud (statuspage)"},{"value":"contentful","label":"Contentful (statuspage)"},{"value":"databricks","label":"Databricks (statuspage)"},{"value":"datadog","label":"Datadog (statuspage)"},{"value":"dialpad","label":"Dialpad (statuspage)"},{"value":"digitalocean","label":"DigitalOcean (statuspage)"},{"value":"discord","label":"Discord (statuspage)"},{"value":"docusign","label":"Docusign (statuspage)"},{"value":"doppler","label":"Doppler (statuspage)"},{"value":"dropbox","label":"Dropbox (statuspage)"},{"value":"duo","label":"Cisco Duo (statuspage)"},{"value":"elastic","label":"Elastic Cloud (statuspage)"},{"value":"elevenlabs","label":"ElevenLabs (statuspage)"},{"value":"figma","label":"Figma (statuspage)"},{"value":"fivetran","label":"Fivetran (statuspage)"},{"value":"fly","label":"Fly.io (statuspage)"},{"value":"gcp","label":"Google Cloud (special)"},{"value":"github","label":"GitHub (statuspage)"},{"value":"godaddy","label":"GoDaddy (statuspage)"},{"value":"grafana","label":"Grafana Cloud (statuspage)"},{"value":"groq","label":"Groq (statuspage)"},{"value":"harness","label":"Harness (Split) (statuspage)"},{"value":"hashicorp","label":"HashiCorp Cloud (statuspage)"},{"value":"hubspot","label":"HubSpot (statuspage)"},{"value":"intercom","label":"Intercom (statuspage)"},{"value":"kraken","label":"Kraken (statuspage)"},{"value":"launchdarkly","label":"LaunchDarkly (statuspage)"},{"value":"linode","label":"Akamai Linode (statuspage)"},{"value":"loom","label":"Loom (statuspage)"},{"value":"mailgun","label":"Mailgun (statuspage)"},{"value":"miro","label":"Miro (statuspage)"},{"value":"mixpanel","label":"Mixpanel (statuspage)"},{"value":"monday","label":"monday.com (statuspage)"},{"value":"mongodb","label":"MongoDB Atlas (statuspage)"},{"value":"netlify","label":"Netlify (statuspage)"},{"value":"newrelic","label":"New Relic (statuspage)"},{"value":"ngrok","label":"ngrok (statuspage)"},{"value":"npm","label":"npm (statuspage)"},{"value":"openai","label":"OpenAI (statuspage)"},{"value":"pinecone","label":"Pinecone (statuspage)"},{"value":"planetscale","label":"PlanetScale (statuspage)"},{"value":"postman","label":"Postman (statuspage)"},{"value":"pusher","label":"Pusher (statuspage)"},{"value":"reddit","label":"Reddit (statuspage)"},{"value":"render","label":"Render (statuspage)"},{"value":"replicate","label":"Replicate (statuspage)"},{"value":"retool","label":"Retool (statuspage)"},{"value":"sanity","label":"Sanity (statuspage)"},{"value":"segment","label":"Twilio Segment (statuspage)"},{"value":"sendgrid","label":"Twilio SendGrid (statuspage)"},{"value":"sentry","label":"Sentry (statuspage)"},{"value":"shopify","label":"Shopify (statuspage)"},{"value":"slack","label":"Slack (special)"},{"value":"snowflake","label":"Snowflake (statuspage)"},{"value":"squarespace","label":"Squarespace (statuspage)"},{"value":"squareup","label":"Square (statuspage)"},{"value":"stabilityai","label":"Stability AI (statuspage)"},{"value":"stripe","label":"Stripe (special)"},{"value":"supabase","label":"Supabase (statuspage)"},{"value":"trello","label":"Trello (statuspage)"},{"value":"twilio","label":"Twilio (statuspage)"},{"value":"typeform","label":"Typeform (statuspage)"},{"value":"upstash","label":"Upstash (statuspage)"},{"value":"vercel","label":"Vercel (statuspage)"},{"value":"vimeo","label":"Vimeo (statuspage)"},{"value":"webflow","label":"Webflow (statuspage)"},{"value":"wise","label":"Wise (statuspage)"},{"value":"workos","label":"WorkOS (statuspage)"},{"value":"zapier","label":"Zapier (statuspage)"},{"value":"zoom","label":"Zoom (statuspage)"},{"value":"zoominfo","label":"ZoomInfo (statuspage)"}],"example":"github","aliases":["service","company","name","url","host"]}],"returns":"vendor, status{indicator,is_operational,description}, components[], active_incidents[], scheduled_maintenances[], counts{}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"vendor":"datadog"}},{"name":"check_multi","description":"THE dashboard call: give your stack as a list (keys / brands / domains / status hosts) → each is auto-resolved to its real status page and its LIVE status is returned, read from the SOURCE. 'Are any of my dependencies down right now?' Per-item errors never fail the whole call.","required_params":["vendors"],"optional_params":[],"params":[{"name":"vendors","type":"array","required":true,"description":"Your stack as a list (≤25) — a JSON array OR a comma/space/semicolon string. Each item may be a curated key (github), a bare brand (notion), a plain domain (acme.com), OR an explicit status host (status.x.com). Each is auto-resolved to its real status page and its LIVE status is read from the SOURCE. An unresolvable item is reported per-item (indicator='unknown'), never failing the whole call.","on_invalid":"ignore","example":["github","openai","notion","acme.com","status.internal.io"],"aliases":["services","companies"]}],"returns":"results[] (vendor, name, resolved_host, resolved_via, indicator, is_operational, active_incident_count, error?), all_operational, degraded_vendors[], checked, operational_count","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"vendors":"github,openai,cloudflare"}},{"name":"batch","description":"Alias of check_multi — overall status for a batch of vendors in one call (up to 25).","required_params":["vendors"],"optional_params":[],"params":[{"name":"vendors","type":"array","required":true,"description":"Your stack as a list (≤25) — a JSON array OR a comma/space/semicolon string. Each item may be a curated key (github), a bare brand (notion), a plain domain (acme.com), OR an explicit status host (status.x.com). Each is auto-resolved to its real status page and its LIVE status is read from the SOURCE. An unresolvable item is reported per-item (indicator='unknown'), never failing the whole call.","on_invalid":"ignore","example":["github","openai","notion","acme.com","status.internal.io"],"aliases":["services","companies"]}],"returns":"results[] (same shape as check_multi), all_operational, degraded_vendors[], checked","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"vendors":"github,openai,cloudflare"}},{"name":"list_vendors","description":"The supported vendor set (key → name, kind, category, status host). Optionally filtered by category. Also lists explicitly-unsupported vendors (e.g. Azure) with the reason.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"string","required":false,"description":"Optional filter for list_vendors — return only vendors in this category (e.g. ai, cloud, dev-tools, observability, fintech, email).","on_invalid":"ignore","example":"ai"}],"returns":"vendors[] (key, name, kind, category, status_host, homepage), count, categories[], unsupported{vendor: reason}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"ai"}}]},{"name":"steam-games","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Steam API scraper — game details, DLC, packages/bundles, regional prices, user reviews, live + peak player counts, store search & store-front discovery (new releases / deals / top sellers), most-played chart, news, tags, similar games, artwork and public player profiles from store.steampowered.com","version":"1.3.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/steam-games/v1","spec_available":true,"actions":[{"name":"app_detail","description":"full game metadata from store appdetails (+structured languages; include_tags adds community tags/franchise/links)","required_params":["appid"],"optional_params":["cc","country","lang","language","include_raw","include_tags"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]},{"name":"include_tags","type":"boolean","required":false,"description":"Also fetch community tags + franchise + external links (one extra store-page request).","on_invalid":"ignore","default":false,"example":false},{"name":"include_raw","type":"boolean","required":false,"description":"Attach the raw Steam appdetails payload under _raw.","on_invalid":"ignore","default":false,"example":false}],"returns":"app{appid, name, type, required_age, genres, categories, developers, publishers, release_date, price_overview, platforms, controller_support, screenshots, movies, pc/mac/linux_requirements, supported_languages_structured, metacritic, recommendations_total, achievements_total, dlc[], dlc_count, packages[], package_groups[], content_descriptors, ratings, support_info, +tags/franchise/external_links when include_tags}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"appid":730,"cc":"us"}},{"name":"price","description":"regional price + discount (appdetails price_overview)","required_params":["appid"],"optional_params":["cc","country","lang","language"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]}],"returns":"appid, cc, is_free, currency, final, initial, discount_percent, price_overview{}, package_groups","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":1245620,"cc":"us"}},{"name":"reviews","description":"user reviews + query_summary; review_type/day_range/trend (day|week|month|year)/sort=funny; redact_pii drops author identity","required_params":["appid"],"optional_params":["language","lang","num_per_page","limit","filter","review_type","day_range","trend","sort","purchase_type","cursor","redact_pii","redactPii","redact_author"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"language","type":"string","required":false,"description":"Review language (Steam name, or 'all'). Default all.","on_invalid":"ignore","default":"all","example":"all","aliases":["lang"]},{"name":"num_per_page","type":"integer","required":false,"description":"How many reviews to return (1-100). Clamped to range.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"filter","type":"enum","required":false,"description":"Ordering. recent/updated/all are Steam-native; toprated/top/helpful/best are remapped to 'all'.","on_invalid":"ignore","allowed_values":[{"value":"recent","label":"Most recent"},{"value":"updated","label":"Recently updated"},{"value":"all","label":"Most helpful (all-time)"},{"value":"toprated","label":"Top rated (alias -> all)"},{"value":"helpful","label":"Helpful (alias -> all)"}],"default":"recent","example":"recent"},{"name":"review_type","type":"enum","required":false,"description":"Recommendation polarity filter.","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All reviews"},{"value":"positive","label":"Positive only"},{"value":"negative","label":"Negative only"}],"default":"all","example":"all"},{"name":"day_range","type":"integer","required":false,"description":"Trending window in days (used with filter=all). Set directly, or via the `trend` shortcut.","on_invalid":"ignore","example":30},{"name":"trend","type":"enum","required":false,"description":"Shortcut that sets day_range + filter=all for a trending window.","on_invalid":"ignore","allowed_values":[{"value":"day","label":"Last 1 day"},{"value":"week","label":"Last 7 days"},{"value":"month","label":"Last 30 days"},{"value":"year","label":"Last 365 days"}],"example":"week"},{"name":"sort","type":"enum","required":false,"description":"Optional client-side re-sort. Only funny/funniest reorder; otherwise Steam's native order is kept.","on_invalid":"ignore","allowed_values":[{"value":"funny","label":"Sort by funniest (client-side)"},{"value":"funniest","label":"Alias of funny"}],"example":"funny"},{"name":"purchase_type","type":"enum","required":false,"description":"Restrict to reviewers by purchase source.","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All"},{"value":"steam","label":"Steam purchasers"},{"value":"non_steam_purchase","label":"Non-Steam purchasers"}],"default":"all","example":"all"},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor — pass the previous response's `cursor` for the next page.","on_invalid":"ignore","default":"*","example":"*"},{"name":"redact_pii","type":"boolean","required":false,"description":"Drop author identity (steamid/profile/name/avatar/playtime) from each review.","on_invalid":"ignore","default":false,"example":false,"aliases":["redactPii","redact_author"]}],"returns":"appid, reviews[]{review, votes_up, votes_funny, author{...}}, summary{total_reviews, total_positive}, cursor, count, query{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"appid":730,"num_per_page":5}},{"name":"player_stats","description":"steamspy owners + optional current player count","required_params":["appid"],"optional_params":["include_current_players"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"include_current_players","type":"boolean","required":false,"description":"Also fetch the live concurrent player count.","on_invalid":"ignore","default":true,"example":true}],"returns":"appid, owners, average_forever, average_2weeks, median_forever, positive, negative, userscore, current_players","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":730}},{"name":"search","description":"store search → appid+price (+metascore on keyword); faceting: tags/type/category1/supportedlang/maxprice/specials. term OR a facet required.","required_params":[],"optional_params":["term","query","q","count","limit","start","cc","country","lang","language","tags","type","category1","supportedlang","maxprice","specials","force_infinite"],"params":[{"name":"term","type":"string","required":false,"description":"Keyword to search. Provide a term OR at least one facet (tags/type/category1/…).","on_invalid":"reject","example":"portal","aliases":["query","q"]},{"name":"count","type":"integer","required":false,"description":"How many items to return (1-100). Clamped to range.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"start","type":"integer","required":false,"description":"Result offset for paging (skip N).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]},{"name":"tags","type":"array","required":false,"description":"Filter by Steam tag id(s) (e.g. 19=Action) — discover ids via the tags action. Comma-list or array.","on_invalid":"ignore","example":[19]},{"name":"type","type":"enum","required":false,"description":"Content type → Steam category1 facet. Common values shown; plurals (games/demos/…) also accepted.","on_invalid":"ignore","allowed_values":[{"value":"game","label":"Games"},{"value":"dlc","label":"DLC"},{"value":"software","label":"Software"},{"value":"demo","label":"Demos"},{"value":"soundtrack","label":"Soundtracks"},{"value":"mod","label":"Mods"},{"value":"hardware","label":"Hardware"},{"value":"video","label":"Videos"},{"value":"bundle","label":"Bundles"}],"example":"game"},{"name":"category1","type":"integer","required":false,"description":"Advanced: raw Steam category1 facet id (998=Games, 21=DLC). Overrides `type`.","on_invalid":"ignore","example":998},{"name":"supportedlang","type":"string","required":false,"description":"Filter to titles supporting this Steam language facet.","on_invalid":"ignore","example":"english"},{"name":"maxprice","type":"string","required":false,"description":"Steam maxprice facet (region price cap; Steam's own bucketing).","on_invalid":"ignore","example":"20"},{"name":"specials","type":"integer","required":false,"description":"Set 1 to restrict to titles currently on sale (Steam specials facet).","on_invalid":"ignore","example":1},{"name":"force_infinite","type":"boolean","required":false,"description":"Force the faceted results_html path even for a short keyword query.","on_invalid":"ignore","default":false,"example":false}],"returns":"items[]{appid, name, type, price{final, discount_percent, is_free}, platforms, review_summary, metascore}, count, total_results, facets","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"term":"portal","count":10}},{"name":"top_sellers","description":"Steam top sellers chart slice (appid+price per item); same facets as search","required_params":[],"optional_params":["count","limit","start","cc","country","lang","language","tags","type","category1","supportedlang","maxprice"],"params":[{"name":"count","type":"integer","required":false,"description":"How many items to return (1-100). Clamped to range.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"start","type":"integer","required":false,"description":"Result offset for paging (skip N).","on_invalid":"ignore","default":0,"example":0,"minimum":0},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]},{"name":"tags","type":"array","required":false,"description":"Filter by Steam tag id(s) (e.g. 19=Action) — discover ids via the tags action. Comma-list or array.","on_invalid":"ignore","example":[19]},{"name":"type","type":"enum","required":false,"description":"Content type → Steam category1 facet. Common values shown; plurals (games/demos/…) also accepted.","on_invalid":"ignore","allowed_values":[{"value":"game","label":"Games"},{"value":"dlc","label":"DLC"},{"value":"software","label":"Software"},{"value":"demo","label":"Demos"},{"value":"soundtrack","label":"Soundtracks"},{"value":"mod","label":"Mods"},{"value":"hardware","label":"Hardware"},{"value":"video","label":"Videos"},{"value":"bundle","label":"Bundles"}],"example":"game"},{"name":"category1","type":"integer","required":false,"description":"Advanced: raw Steam category1 facet id (998=Games, 21=DLC). Overrides `type`.","on_invalid":"ignore","example":998},{"name":"supportedlang","type":"string","required":false,"description":"Filter to titles supporting this Steam language facet.","on_invalid":"ignore","example":"english"},{"name":"maxprice","type":"string","required":false,"description":"Steam maxprice facet (region price cap; Steam's own bucketing).","on_invalid":"ignore","example":"20"}],"returns":"items[]{appid, name, type, price{...}, platforms, review_summary}, count, total_results, facets","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"count":5}},{"name":"news","description":"official game news (ISteamNews/GetNewsForApp)","required_params":["appid"],"optional_params":["count","limit","maxlength"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"count","type":"integer","required":false,"description":"How many items to return (1-100). Clamped to range.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"maxlength","type":"integer","required":false,"description":"Truncate each news body to this many characters (0 = no cap from this param).","on_invalid":"ignore","default":300,"example":300,"minimum":0}],"returns":"appid, news[]{title, url, contents, date, source}, count, news_count, source","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":730,"count":3}},{"name":"tags","description":"community tags (InitAppTagModal) + franchise + external links (store page)","required_params":["appid"],"optional_params":["cc","country","lang","language"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]}],"returns":"appid, tags[]{tagid, name, count}, tag_count, franchise{slug, name}, external_links[]{url, label}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":730}},{"name":"similar_games","description":"recommended similar games (appids) via /recommended/morelike","required_params":["appid"],"optional_params":["count","limit"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"count","type":"integer","required":false,"description":"How many items to return (1-50). Clamped to range.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"appid, similar[]{appid}, count, total_found","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":1245620,"count":6}},{"name":"artworks","description":"official art-asset URLs (header/capsule/library/hero/logo/background)","required_params":["appid"],"optional_params":["cc","country","lang","language"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]}],"returns":"appid, name, artworks{header, library_600x900, hero_capsule, logo, background, ...}, count, cdn_base","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":730}},{"name":"guides","description":"Community guides for a game (Steam Workshop guides) — top-rated, trending or most-recent. Each guide: title, author, star rating, preview image and URL.","required_params":["appid"],"optional_params":["sort","page","limit"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"sort","type":"enum","required":false,"description":"How to order the guides.","on_invalid":"ignore","allowed_values":[{"value":"trend","label":"Trending guides"},{"value":"toprated","label":"Top-rated guides"},{"value":"mostrecent","label":"Most recently published"}],"default":"trend","example":"toprated"},{"name":"page","type":"integer","required":false,"description":"Result page.","on_invalid":"ignore","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Max guides to return (1–50).","on_invalid":"ignore","default":30,"minimum":1,"maximum":50}],"returns":"appid, sort, page, count, guides[]{id, url, title, author, short_desc, rating_stars, preview_image}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":570,"sort":"trend","limit":10}},{"name":"dlc","description":"List a game's DLC with names + regional prices. The base game's DLC appids are resolved to titles/prices (bounded by `resolve` to keep latency sane).","required_params":["appid"],"optional_params":["cc","country","lang","language","resolve","count","limit"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]},{"name":"resolve","type":"integer","required":false,"description":"How many rows to enrich with names (extra per-id lookups; 0-60). Steam serves one app per detail call, so this bounds latency; un-enriched rows still return their appid.","on_invalid":"ignore","default":25,"example":25,"minimum":0,"maximum":60}],"returns":"appid, name, dlc[]{appid, name, is_free, price{currency, final, initial, discount_percent}, release_date, resolved}, count, total_dlc, resolved_count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":1245620,"resolve":5}},{"name":"package","description":"Steam package / bundle (a.k.a. 'sub') details — the apps it contains, the bundled price, platforms and release date. Use the package ids from app_detail.package_groups.","required_params":["packageid"],"optional_params":["package_id","subid","id","cc","country","lang","language"],"params":[{"name":"packageid","type":"integer","required":true,"description":"Steam package/sub id (from app_detail.package_groups[].subs[].packageid).","on_invalid":"reject","example":440408,"aliases":["package_id","subid","id"]},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]}],"returns":"packageid, name, apps[]{id, name}, app_count, price{currency, final, initial, discount_percent}, platforms, controller, release_date","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"packageid":440408}},{"name":"featured","description":"Store-front discovery lists: specials (current deals), new_releases, coming_soon and top_sellers — each with appid + price. Pick one with `category`, or get all four.","required_params":[],"optional_params":["category","type","count","limit","cc","country","lang","language"],"params":[{"name":"category","type":"enum","required":false,"description":"Which store-front list(s) to return.","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All four buckets"},{"value":"specials","label":"On-sale deals"},{"value":"new_releases","label":"New releases"},{"value":"coming_soon","label":"Coming soon / pre-purchase"},{"value":"top_sellers","label":"Top sellers"}],"default":"all","example":"specials"},{"name":"count","type":"integer","required":false,"description":"How many items to return (1-100). Clamped to range.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]}],"returns":"cc, category, buckets[], categories{specials[], new_releases[], coming_soon[], top_sellers[]}{appid, name, discounted, discount_percent, final_price, original_price, currency, header_image, platforms}, count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"specials","count":5}},{"name":"most_played","description":"Official Steam most-played chart — live concurrent player count + 24h peak per game (the only keyless source of all-time/period peak). Optionally enrich rows with names.","required_params":[],"optional_params":["count","limit","resolve","cc","country","lang","language"],"params":[{"name":"count","type":"integer","required":false,"description":"How many items to return (1-100). Clamped to range.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100,"aliases":["limit"]},{"name":"resolve","type":"integer","required":false,"description":"How many rows to enrich with names (extra per-id lookups; 0-50). Steam serves one app per detail call, so this bounds latency; un-enriched rows still return their appid.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":50},{"name":"cc","type":"string","required":false,"description":"Store region — ISO-3166-1 alpha-2 (lower-cased). Drives currency & regional pricing.","on_invalid":"ignore","default":"us","example":"us","aliases":["country"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]}],"returns":"last_update, games[]{rank, appid, name, concurrent_players, peak_players_today}, count","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"count":5}},{"name":"review_histogram","description":"Recommendations up/down over the game's lifetime (Steam's own review histogram) — the data behind the store review-trend graph.","required_params":["appid"],"optional_params":["lang","language"],"params":[{"name":"appid","type":"integer","required":true,"description":"Steam application id (the number in a store URL, e.g. 730 = CS2).","on_invalid":"reject","example":730,"aliases":["app_id","appids"]},{"name":"lang","type":"string","required":false,"description":"Steam language name (e.g. english, french, schinese) for localized store text.","on_invalid":"ignore","default":"english","example":"english","aliases":["language"]}],"returns":"appid, start_date, end_date, rollup_type, rollups[]{date, recommendations_up, recommendations_down}, recent_weeks[], recommendations_up_total, recommendations_down_total, count","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"appid":730}},{"name":"player_profile","description":"Public Steam profile summary by 64-bit steamid OR vanity name (keyless). Returns persona, avatar, online state, ban flags and the privacy state. Note: owned-games / friends are NOT available on Steam's keyless surface — this is the profile summary.","required_params":[],"optional_params":["steamid","steamid64","steam_id","vanity","vanity_url","profile"],"params":[{"name":"steamid","type":"string","required":false,"description":"64-bit SteamID. Provide this OR `vanity`.","on_invalid":"ignore","example":"76561197960287930","aliases":["steamid64","steam_id"]},{"name":"vanity","type":"string","required":false,"description":"Custom URL name from steamcommunity.com/id/<name>. Resolved to a steamid. Provide this OR `steamid`.","on_invalid":"ignore","example":"gabelogannewell","aliases":["vanity_url","profile"]}],"returns":"steamid64, persona_name, online_state, privacy_state, is_public, avatar, real_name, location, member_since, vac_banned, trade_ban_state, is_limited_account","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"vanity":"gabelogannewell"}},{"name":"resolve","description":"Turn a human name into ids so callers never hand-find a URL: a game name → matching appids (chains to app_detail), or a vanity name (kind=profile) → steamid64.","required_params":["term"],"optional_params":["query","q","name","kind","count","limit"],"params":[{"name":"term","type":"string","required":true,"description":"Game title (kind=app) or vanity name (kind=profile) to resolve.","on_invalid":"reject","example":"elden ring","aliases":["query","q","name"]},{"name":"kind","type":"enum","required":false,"description":"What to resolve.","on_invalid":"ignore","allowed_values":[{"value":"app","label":"Resolve a game name → appids"},{"value":"profile","label":"Resolve a vanity name → steamid64"}],"default":"app","example":"app"},{"name":"count","type":"integer","required":false,"description":"How many items to return (1-50). Clamped to range.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"kind, term, matches[]{appid, name, icon, logo} (kind=app) | steamid64, persona_name (kind=profile), count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"term":"elden ring"}}]},{"name":"stepstone","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"StepStone Jobs API — job search, full job postings and employer jobs (Germany, Austria, Belgium, Netherlands)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/stepstone/v1","spec_available":true,"actions":[{"name":"search","description":"Search live StepStone job ads by keyword and location with the site's own filters — radius, posted date, salary bucket, home office, full/part time, contract type, experience, quick apply, industry, skill and ad language. 25 jobs per page.","required_params":[],"optional_params":["query","location","radius","market","page","posted_within_days","min_salary","work_from_home","work_type","contract_type","experience","application_method","sector_id","skill_id","language","exact_matches_only"],"params":[{"name":"query","type":"string","required":false,"description":"Job title, skill or keyword, as you would type it into StepStone's 'what' box. Either `query` or `location` is required.","on_invalid":"reject","example":"software engineer","aliases":["keyword","what","q"]},{"name":"location","type":"string","required":false,"description":"City, region or postcode (StepStone's 'where' box). Either `query` or `location` is required.","on_invalid":"reject","example":"Berlin","aliases":["where","city"]},{"name":"radius","type":"integer","required":false,"description":"Search radius around `location` in km (site default 30). Measured: Hamburg software engineer 30 km = 512 jobs, 100 km = 698.","on_invalid":"reject","default":30,"example":30,"minimum":0,"maximum":200},{"name":"market","type":"enum","required":false,"description":"Which StepStone site to read. stepstone.fr no longer runs a job board (it redirects to the group's corporate site), so France is not offered.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — stepstone.de"},{"value":"at","label":"Austria — stepstone.at"},{"value":"be","label":"Belgium — stepstone.be"},{"value":"nl","label":"Netherlands — stepstone.nl"}],"default":"de","example":"de","aliases":["country","domain"]},{"name":"page","type":"integer","required":false,"description":"Result page, 25 jobs per page. `has_more` / `last_page` in the answer say when to stop.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400},{"name":"posted_within_days","type":"enum","required":false,"description":"Only jobs published in the last N days (1, 3, 7 or 14). Measured: 512 → 26 (1 day) → 284 (7 days).","on_invalid":"reject","allowed_values":[{"value":"1","label":"1"},{"value":"3","label":"3"},{"value":"7","label":"7"},{"value":"14","label":"14"}],"example":"7","aliases":["posted_within","date_posted"]},{"name":"min_salary","type":"enum","required":false,"description":"Minimum yearly salary bucket (EUR, steps of 10000). StepStone applies it to its own salary estimate for the job. Measured 512 → 398 at 60000.","on_invalid":"reject","allowed_values":[{"value":"10000","label":"10000"},{"value":"20000","label":"20000"},{"value":"30000","label":"30000"},{"value":"40000","label":"40000"},{"value":"50000","label":"50000"},{"value":"60000","label":"60000"},{"value":"70000","label":"70000"},{"value":"80000","label":"80000"},{"value":"90000","label":"90000"},{"value":"100000","label":"100000"}],"example":"60000"},{"name":"work_from_home","type":"enum","required":false,"description":"partial = 'Teilweise Home-Office', full = remote only. Measured 512 → 377 (partial), 20 (full).","on_invalid":"reject","allowed_values":[{"value":"partial","label":"partial"},{"value":"full","label":"full"}],"example":"partial","aliases":["remote"]},{"name":"work_type","type":"enum","required":false,"description":"Full-time or part-time. Measured 512 → 57 (part_time).","on_invalid":"reject","allowed_values":[{"value":"full_time","label":"full time"},{"value":"part_time","label":"part time"}],"example":"full_time"},{"name":"contract_type","type":"enum","required":false,"description":"Contract type: permanent, fixed term, temp agency, trainee, freelance, apprenticeship, thesis, internship, working student.","on_invalid":"reject","allowed_values":[{"value":"permanent","label":"permanent"},{"value":"fixed_term","label":"fixed term"},{"value":"temp_agency","label":"temp agency"},{"value":"trainee","label":"trainee"},{"value":"freelance","label":"freelance"},{"value":"apprenticeship","label":"apprenticeship"},{"value":"thesis","label":"thesis"},{"value":"internship","label":"internship"},{"value":"working_student","label":"working student"}],"example":"permanent"},{"name":"experience","type":"enum","required":false,"description":"Experience level. Measured 512 → 120 (no_experience).","on_invalid":"reject","allowed_values":[{"value":"no_experience","label":"no experience"},{"value":"with_experience","label":"with experience"},{"value":"management","label":"management"}],"example":"with_experience"},{"name":"application_method","type":"enum","required":false,"description":"quick_apply = StepStone's own one-click application, company_website = apply on the employer's site. Measured 512 → 53 (quick_apply).","on_invalid":"reject","allowed_values":[{"value":"quick_apply","label":"quick apply"},{"value":"company_website","label":"company website"}],"example":"quick_apply"},{"name":"sector_id","type":"string","required":false,"description":"Industry id from the `facets.sectors` list of a previous search (e.g. 21000 = IT & Internet). Measured 512 → 304.","on_invalid":"reject","example":"21000","value_pattern":"\\d{1,12}"},{"name":"skill_id","type":"string","required":false,"description":"Skill id from `facets.skills` of a previous search (e.g. 657911 = Python). Measured 512 → 88.","on_invalid":"reject","example":"657911","value_pattern":"\\d{1,12}"},{"name":"language","type":"string","required":false,"description":"Language the ad is written in, two letters (de, en, nl, fr…), from `facets.detectedLanguages`. Measured 512 → 51 (en).","on_invalid":"reject","example":"en","value_pattern":"[a-z]{2}"},{"name":"exact_matches_only","type":"boolean","required":false,"description":"StepStone pads results with nearby-region and similar-title jobs (`match_type` regional / semantic). true drops those rows from the answer (the page still costs one call); the count of each kind is in `counts`.","on_invalid":"reject","default":false,"example":false}],"returns":"jobs[] (job_id, title, url, company_id, company_name, location, date_posted, publish_to, snippet, benefits[], home_office, salary{min,max,currency,period,is_estimate}, quick_apply, labels, match_type …), total, counts by match type, page/last_page/has_more, applied_filters (as echoed by StepStone) and facets (every filter value with its live count and the parameter it feeds).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"software engineer","location":"Berlin","market":"de"}},{"name":"job","description":"The full job posting: every text section (intro, tasks, profile, benefits, extra info), company card, address with coordinates when published, posted and expiry dates, contract and work type, employment type, industry, benefits, StepStone's salary estimate.","required_params":[],"optional_params":["job_id","url","market"],"params":[{"name":"job_id","type":"string","required":false,"description":"The `job_id` of a search row. Either `job_id` or `url` is required.","on_invalid":"reject","example":"14711651","value_pattern":"\\d{1,12}","aliases":["id","listing_id"]},{"name":"url","type":"string","required":false,"description":"A StepStone job URL (any of the four sites). The market is taken from the URL's host.","on_invalid":"reject","example":"https://www.stepstone.de/stellenangebote--Software-Engineer--14711651-inline.html","aliases":["job_url"]},{"name":"market","type":"enum","required":false,"description":"Which StepStone site to read. stepstone.fr no longer runs a job board (it redirects to the group's corporate site), so France is not offered.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — stepstone.de"},{"value":"at","label":"Austria — stepstone.at"},{"value":"be","label":"Belgium — stepstone.be"},{"value":"nl","label":"Netherlands — stepstone.nl"}],"default":"de","example":"de","aliases":["country","domain"]}],"returns":"job{} — job_id, title, company{company_id, name, open_jobs, employees, sectors, address, founded, about}, location, address{street, postal_code, city, country, latitude, longitude}, date_posted, valid_through, employment_type, contract_type, work_type, industry, salary (StepStone's estimate, is_estimate=true), benefits[], sections[{name,title,text}], description_text, description_html, quick_apply, is_offline.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.stepstone.de/stellenangebote--Software-Engineer--14711651-inline.html"}},{"name":"company_jobs","description":"All open jobs of one employer on StepStone, 25 per page — the employer's own job list.","required_params":["company_id"],"optional_params":["company_id","query","market","page"],"params":[{"name":"company_id","type":"string","required":true,"description":"The employer's `company_id` from a search row or a job.","on_invalid":"reject","example":"378466","value_pattern":"\\d{1,12}"},{"name":"query","type":"string","required":false,"description":"Optional keyword to narrow the employer's jobs.","on_invalid":"reject","example":"engineer","aliases":["keyword","what"]},{"name":"market","type":"enum","required":false,"description":"Which StepStone site to read. stepstone.fr no longer runs a job board (it redirects to the group's corporate site), so France is not offered.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — stepstone.de"},{"value":"at","label":"Austria — stepstone.at"},{"value":"be","label":"Belgium — stepstone.be"},{"value":"nl","label":"Netherlands — stepstone.nl"}],"default":"de","example":"de","aliases":["country","domain"]},{"name":"page","type":"integer","required":false,"description":"Result page, 25 jobs per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":400}],"returns":"jobs[] (same row shape as search), company_id, company_name, total, page/last_page/has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"company_id":"378466"}}]},{"name":"stockx","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"StockX API — live resale market data for sneakers, streetwear, and electronics (lowest ask, highest bid, last sale, sales volume, price premium, volatility, per-size variant pricing) from stockx.com","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/stockx/v1","spec_available":true,"actions":[{"name":"product_detail","description":"full product by `url` OR `url_key`/`id`/`uuid`: title/brand/model/sku/category/colorway/retail_price/release_date/image + market{lowest_ask,highest_bid,number_of_asks/bids,last_sale,sales_last_72h,last_sale_change_pct/value,avg_price_72h/90d/annual,sales_count_*,price_premium=(last_sale-retail)/retail, volatility=CV-of-recent-sales, ask_service_levels{standard/express_*: count,lowest_ask,processing_fee,delivery}} + per-size variants[]{size,lowest_ask,highest_bid,last_sale}. The market-data moat. `currency` (USD/EUR/GBP/…) + `market` (US/GB/DE/…) optional.","required_params":[],"optional_params":["url","url_key","id","uuid","currency","market","view"],"params":[{"name":"url_key","type":"string","required":false,"description":"Product slug from the StockX product URL (stockx.com/<url_key>) — copy it from search results. Internal id/uuid also accepted. Provide url_key OR url.","on_invalid":"reject","example":"air-jordan-4-retro-bred-reimagined","aliases":["urlKey","slug","id","uuid","product_id"]},{"name":"url","type":"string","required":false,"description":"Full StockX product URL — alternative to url_key.","on_invalid":"reject","example":"https://stockx.com/air-jordan-4-retro-bred-reimagined","aliases":["product_url"]},{"name":"currency","type":"enum","required":false,"description":"Currency for all prices.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US Dollar"},{"value":"EUR","label":"Euro"},{"value":"GBP","label":"British Pound"},{"value":"JPY","label":"Japanese Yen"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CHF","label":"Swiss Franc"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"KRW","label":"South Korean Won"},{"value":"MXN","label":"Mexican Peso"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SGD","label":"Singapore Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"DKK","label":"Danish Krone"},{"value":"NOK","label":"Norwegian Krone"},{"value":"PLN","label":"Polish Złoty"},{"value":"CNY","label":"Chinese Yuan"},{"value":"TWD","label":"New Taiwan Dollar"},{"value":"THB","label":"Thai Baht"}],"default":"USD"},{"name":"market","type":"enum","required":false,"description":"Marketplace region (affects asks/bids and service levels).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"NL","label":"Netherlands"},{"value":"JP","label":"Japan"},{"value":"AU","label":"Australia"},{"value":"CA","label":"Canada"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"SG","label":"Singapore"},{"value":"CH","label":"Switzerland"},{"value":"MX","label":"Mexico"},{"value":"NZ","label":"New Zealand"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"CN","label":"China"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"}],"default":"US","aliases":["country"]},{"name":"view","type":"enum","required":false,"description":"Which of StockX's sale prices to return, the same selector as the Sales panel on stockx.com. `buyer` (default, StockX's own default) is the Buyer View: what a buyer in `market` would have paid for each sale. `seller` is the Seller View: the ask a seller would have needed to win it. StockX includes duties and taxes depending on buyer and seller location, so the two differ on cross-region sales and agree on domestic ones. `transaction` returns the figure StockX gives with no view, which is what this API returned before 2026-10-17 and matches neither panel on cross-region sales. Applies to sale amounts and `last_sale`; asks and bids do not change.","on_invalid":"reject","allowed_values":[{"value":"buyer","label":"Buyer View: purchase price in your market (stockx.com default)"},{"value":"seller","label":"Seller View: ask needed to win each sale"},{"value":"transaction","label":"No view (the pre-2026-10-17 figure)"}],"default":"buyer","aliases":["viewer","viewer_context"]}],"returns":"product{title, brand, model, sku, category, colorway, retail_price, release_date, image, market{lowest_ask, highest_bid, last_sale, sales_last_72h, avg_price_72h/90d/annual, price_premium, volatility, ask_service_levels}, variants[]{size, lowest_ask, highest_bid, last_sale}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"url_key":"air-jordan-4-retro-bred-reimagined"}},{"name":"price","description":"cheap price + stock refresh by `url` OR `url_key`/`id`/`uuid`: product{id,url_key,url,title,sku,lowest_ask,highest_bid,number_of_asks,number_of_bids,last_sale,sales_last_72h,in_stock} + per-size variants[]{size,lowest_ask,highest_bid,last_sale,number_of_asks,in_stock}. One light GraphQL GET (about half the bytes of product_detail): no description, traits, statistics, service levels or sales feed. in_stock = StockX has at least one live ask (number_of_asks > 0). `currency`/`market` optional.","required_params":[],"optional_params":["url","url_key","id","uuid","currency","market","view"],"params":[{"name":"url_key","type":"string","required":false,"description":"Product slug from the StockX product URL (stockx.com/<url_key>) — copy it from search results. Internal id/uuid also accepted. Provide url_key OR url.","on_invalid":"reject","example":"air-jordan-4-retro-bred-reimagined","aliases":["urlKey","slug","id","uuid","product_id"]},{"name":"url","type":"string","required":false,"description":"Full StockX product URL — alternative to url_key.","on_invalid":"reject","example":"https://stockx.com/air-jordan-4-retro-bred-reimagined","aliases":["product_url"]},{"name":"currency","type":"enum","required":false,"description":"Currency for all prices.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US Dollar"},{"value":"EUR","label":"Euro"},{"value":"GBP","label":"British Pound"},{"value":"JPY","label":"Japanese Yen"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CHF","label":"Swiss Franc"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"KRW","label":"South Korean Won"},{"value":"MXN","label":"Mexican Peso"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SGD","label":"Singapore Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"DKK","label":"Danish Krone"},{"value":"NOK","label":"Norwegian Krone"},{"value":"PLN","label":"Polish Złoty"},{"value":"CNY","label":"Chinese Yuan"},{"value":"TWD","label":"New Taiwan Dollar"},{"value":"THB","label":"Thai Baht"}],"default":"USD"},{"name":"market","type":"enum","required":false,"description":"Marketplace region (affects asks/bids and service levels).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"NL","label":"Netherlands"},{"value":"JP","label":"Japan"},{"value":"AU","label":"Australia"},{"value":"CA","label":"Canada"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"SG","label":"Singapore"},{"value":"CH","label":"Switzerland"},{"value":"MX","label":"Mexico"},{"value":"NZ","label":"New Zealand"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"CN","label":"China"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"}],"default":"US","aliases":["country"]},{"name":"view","type":"enum","required":false,"description":"Which of StockX's sale prices to return, the same selector as the Sales panel on stockx.com. `buyer` (default, StockX's own default) is the Buyer View: what a buyer in `market` would have paid for each sale. `seller` is the Seller View: the ask a seller would have needed to win it. StockX includes duties and taxes depending on buyer and seller location, so the two differ on cross-region sales and agree on domestic ones. `transaction` returns the figure StockX gives with no view, which is what this API returned before 2026-10-17 and matches neither panel on cross-region sales. Applies to sale amounts and `last_sale`; asks and bids do not change.","on_invalid":"reject","allowed_values":[{"value":"buyer","label":"Buyer View: purchase price in your market (stockx.com default)"},{"value":"seller","label":"Seller View: ask needed to win each sale"},{"value":"transaction","label":"No view (the pre-2026-10-17 figure)"}],"default":"buyer","aliases":["viewer","viewer_context"]}],"returns":"product{id, url_key, title, sku, lowest_ask, highest_bid, number_of_asks, number_of_bids, last_sale, sales_last_72h, in_stock, variants[]{size, lowest_ask, highest_bid, last_sale, number_of_asks, in_stock}}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url_key":"air-jordan-4-retro-bred-reimagined"}},{"name":"search","description":"product search → results[]{id,url_key,url,title,brand,sku,category,image,lowest_ask,highest_bid,last_sale,number_of_asks,number_of_bids,in_stock} + page_info{page,limit,total}. in_stock = StockX has at least one live ask (number_of_asks > 0). Resolves url_keys for product_detail. Optional facet filters: `brand` (e.g. Jordan), `gender` (men/women/…), `category` (sneakers/apparel/…) + `sort` (most-active/featured/release_date/lowest_ask). Return up to 1000 products in one call with `max_results` (40/page, paged for you) — that is StockX's own ceiling, its grid stops at page 26. `page` picks where the window starts. `currency`/`market` optional.","required_params":["query"],"optional_params":["max_results","page","currency","market","view","brand","gender","category","sort"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (product keywords).","on_invalid":"reject","example":"jordan 1","aliases":["q"]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return. MAXIMUM 1000 — the published ceiling, so there is nothing to probe for. StockX serves 40 per page, so asking for more fetches further pages automatically (up to 25 of them). Omit it and you get exactly one page, which is what this action has always done. The ceiling is StockX's own: its grid stops at page 26 (1040 products) and it caps the reported `total` at 1000 however many matches a query really has. Above 1000 the value is clamped, not rejected. Treat it as an upper bound: a narrow query returns everything it has, and a broad one can still come up short because StockX repeats some products across grid pages and duplicates are dropped (measured 2026-08-07: browse sneakers returned a full 1000, the keyword 'nike' returned 709). Whenever fewer rows come back than you asked for, `meta.incomplete` is true.","on_invalid":"ignore","default":40,"example":200,"minimum":1,"maximum":1000,"aliases":["limit","max"]},{"name":"page","type":"integer","required":false,"description":"Page to start from (1-based, 40 results per page). MAXIMUM 26 — StockX's grid ends there. Measured 2026-08-07 on three separate queries: pages 1-26 are all distinct, page 27 and beyond return page 1's products while reporting `page: 1`. A higher value is clamped to 26 rather than looping silently.","on_invalid":"ignore","default":1,"minimum":1,"maximum":26},{"name":"brand","type":"string","required":false,"description":"Filter results to a brand (StockX facet value, e.g. Jordan, Nike, adidas, New Balance, Supreme).","on_invalid":"reject","example":"Jordan","aliases":["brand_filter"]},{"name":"gender","type":"enum","required":false,"description":"Filter results by gender facet.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Men"},{"value":"women","label":"Women"},{"value":"youth","label":"Youth"},{"value":"infant","label":"Infant"}]},{"name":"category","type":"enum","required":false,"description":"StockX vertical to browse (grid of that whole category).","on_invalid":"reject","allowed_values":[{"value":"sneakers","label":"Sneakers"},{"value":"apparel","label":"Apparel/Streetwear"},{"value":"electronics","label":"Electronics"},{"value":"collectibles","label":"Collectibles (incl. trading cards, figures)"},{"value":"accessories","label":"Accessories (watches, bags, etc.)"}],"aliases":["vertical","browse_category"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering for browse/trending grids.","on_invalid":"reject","allowed_values":[{"value":"most-active","label":"Most active (movers / highest trade volume)"},{"value":"featured","label":"Featured (StockX default ranking)"},{"value":"release_date","label":"Newest release date first"},{"value":"lowest_ask","label":"Lowest ask price first"}]},{"name":"currency","type":"enum","required":false,"description":"Currency for all prices.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US Dollar"},{"value":"EUR","label":"Euro"},{"value":"GBP","label":"British Pound"},{"value":"JPY","label":"Japanese Yen"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CHF","label":"Swiss Franc"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"KRW","label":"South Korean Won"},{"value":"MXN","label":"Mexican Peso"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SGD","label":"Singapore Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"DKK","label":"Danish Krone"},{"value":"NOK","label":"Norwegian Krone"},{"value":"PLN","label":"Polish Złoty"},{"value":"CNY","label":"Chinese Yuan"},{"value":"TWD","label":"New Taiwan Dollar"},{"value":"THB","label":"Thai Baht"}],"default":"USD"},{"name":"market","type":"enum","required":false,"description":"Marketplace region (affects asks/bids and service levels).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"NL","label":"Netherlands"},{"value":"JP","label":"Japan"},{"value":"AU","label":"Australia"},{"value":"CA","label":"Canada"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"SG","label":"Singapore"},{"value":"CH","label":"Switzerland"},{"value":"MX","label":"Mexico"},{"value":"NZ","label":"New Zealand"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"CN","label":"China"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"}],"default":"US","aliases":["country"]},{"name":"view","type":"enum","required":false,"description":"Which of StockX's sale prices to return, the same selector as the Sales panel on stockx.com. `buyer` (default, StockX's own default) is the Buyer View: what a buyer in `market` would have paid for each sale. `seller` is the Seller View: the ask a seller would have needed to win it. StockX includes duties and taxes depending on buyer and seller location, so the two differ on cross-region sales and agree on domestic ones. `transaction` returns the figure StockX gives with no view, which is what this API returned before 2026-10-17 and matches neither panel on cross-region sales. Applies to sale amounts and `last_sale`; asks and bids do not change.","on_invalid":"reject","allowed_values":[{"value":"buyer","label":"Buyer View: purchase price in your market (stockx.com default)"},{"value":"seller","label":"Seller View: ask needed to win each sale"},{"value":"transaction","label":"No view (the pre-2026-10-17 figure)"}],"default":"buyer","aliases":["viewer","viewer_context"]}],"returns":"results[]{id, url_key, url, title, brand, sku, category, image, lowest_ask, highest_bid, last_sale, number_of_asks, in_stock} + page_info{page, limit, total} (meta.pagination for paging; meta.requested_max + meta.last_page when max_results paged)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":40,"min":1},"example_params":{"query":"jordan 1"}},{"name":"recent_sales","description":"recent transaction feed by `url`/`url_key`/`id` → sales[]{amount,created_at,order_type} (most recent first) + product ref. order_type EXPRESS = the Xpress mark on stockx.com. `view` buyer/seller/transaction picks which StockX sale price (default buyer = the site's Buyer View). `currency`/`market` optional.","required_params":[],"optional_params":["url","url_key","id","uuid","currency","market","view"],"params":[{"name":"url_key","type":"string","required":false,"description":"Product slug from the StockX product URL (stockx.com/<url_key>) — copy it from search results. Internal id/uuid also accepted. Provide url_key OR url.","on_invalid":"reject","example":"air-jordan-4-retro-bred-reimagined","aliases":["urlKey","slug","id","uuid","product_id"]},{"name":"url","type":"string","required":false,"description":"Full StockX product URL — alternative to url_key.","on_invalid":"reject","example":"https://stockx.com/air-jordan-4-retro-bred-reimagined","aliases":["product_url"]},{"name":"currency","type":"enum","required":false,"description":"Currency for all prices.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US Dollar"},{"value":"EUR","label":"Euro"},{"value":"GBP","label":"British Pound"},{"value":"JPY","label":"Japanese Yen"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CHF","label":"Swiss Franc"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"KRW","label":"South Korean Won"},{"value":"MXN","label":"Mexican Peso"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SGD","label":"Singapore Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"DKK","label":"Danish Krone"},{"value":"NOK","label":"Norwegian Krone"},{"value":"PLN","label":"Polish Złoty"},{"value":"CNY","label":"Chinese Yuan"},{"value":"TWD","label":"New Taiwan Dollar"},{"value":"THB","label":"Thai Baht"}],"default":"USD"},{"name":"market","type":"enum","required":false,"description":"Marketplace region (affects asks/bids and service levels).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"NL","label":"Netherlands"},{"value":"JP","label":"Japan"},{"value":"AU","label":"Australia"},{"value":"CA","label":"Canada"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"SG","label":"Singapore"},{"value":"CH","label":"Switzerland"},{"value":"MX","label":"Mexico"},{"value":"NZ","label":"New Zealand"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"CN","label":"China"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"}],"default":"US","aliases":["country"]},{"name":"view","type":"enum","required":false,"description":"Which of StockX's sale prices to return, the same selector as the Sales panel on stockx.com. `buyer` (default, StockX's own default) is the Buyer View: what a buyer in `market` would have paid for each sale. `seller` is the Seller View: the ask a seller would have needed to win it. StockX includes duties and taxes depending on buyer and seller location, so the two differ on cross-region sales and agree on domestic ones. `transaction` returns the figure StockX gives with no view, which is what this API returned before 2026-10-17 and matches neither panel on cross-region sales. Applies to sale amounts and `last_sale`; asks and bids do not change.","on_invalid":"reject","allowed_values":[{"value":"buyer","label":"Buyer View: purchase price in your market (stockx.com default)"},{"value":"seller","label":"Seller View: ask needed to win each sale"},{"value":"transaction","label":"No view (the pre-2026-10-17 figure)"}],"default":"buyer","aliases":["viewer","viewer_context"]}],"returns":"sales[]{amount, created_at, order_type} (most recent first) + product reference","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url_key":"air-jordan-4-retro-bred-reimagined"}},{"name":"suggest","description":"autocomplete query suggestions for `query` (QuerySuggestion text; falls back to search-derived titles if the suggest op drifts).","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Partial search text to complete.","on_invalid":"reject","example":"jordan","aliases":["q"]}],"returns":"suggestions[] (plain strings)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"jordan"}},{"name":"price_history","description":"historical price time-series for a product, aggregated from the deep sales feed → series[]{date,count,avg,min,max,last} (oldest→newest) + summary{points,sales_sampled,min,max,avg,first_date,last_date,window_complete}. `window` (30d/90d/180d/365d/all) bounds lookback; `bucket` (day/week/month) sets granularity; optional `size` for per-size history. The #1 resale-trader ask. `view` buyer/seller/transaction picks which StockX sale price is aggregated (default buyer). `currency`/`market` optional.","required_params":[],"optional_params":["url","url_key","id","uuid","window","bucket","size","currency","market","view"],"params":[{"name":"url_key","type":"string","required":false,"description":"Product slug from the StockX product URL (stockx.com/<url_key>) — copy it from search results. Internal id/uuid also accepted. Provide url_key OR url.","on_invalid":"reject","example":"air-jordan-4-retro-bred-reimagined","aliases":["urlKey","slug","id","uuid","product_id"]},{"name":"url","type":"string","required":false,"description":"Full StockX product URL — alternative to url_key.","on_invalid":"reject","example":"https://stockx.com/air-jordan-4-retro-bred-reimagined","aliases":["product_url"]},{"name":"window","type":"enum","required":false,"description":"How far back the price series reaches.","on_invalid":"reject","allowed_values":[{"value":"30d","label":"Last 30 days"},{"value":"90d","label":"Last 90 days"},{"value":"180d","label":"Last 180 days"},{"value":"365d","label":"Last 365 days"},{"value":"all","label":"All available (cost-capped by page budget)"}],"default":"90d"},{"name":"bucket","type":"enum","required":false,"description":"Time-bucket granularity for each series point.","on_invalid":"reject","allowed_values":[{"value":"day","label":"Daily"},{"value":"week","label":"ISO weekly"},{"value":"month","label":"Monthly"}],"default":"day"},{"name":"size","type":"string","required":false,"description":"Optional shoe/apparel size for per-size price history (must match a product variant size, e.g. 10, 10.5, M).","on_invalid":"reject","example":"10","aliases":["variant_size"]},{"name":"currency","type":"enum","required":false,"description":"Currency for all prices.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US Dollar"},{"value":"EUR","label":"Euro"},{"value":"GBP","label":"British Pound"},{"value":"JPY","label":"Japanese Yen"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CHF","label":"Swiss Franc"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"KRW","label":"South Korean Won"},{"value":"MXN","label":"Mexican Peso"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SGD","label":"Singapore Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"DKK","label":"Danish Krone"},{"value":"NOK","label":"Norwegian Krone"},{"value":"PLN","label":"Polish Złoty"},{"value":"CNY","label":"Chinese Yuan"},{"value":"TWD","label":"New Taiwan Dollar"},{"value":"THB","label":"Thai Baht"}],"default":"USD"},{"name":"market","type":"enum","required":false,"description":"Marketplace region (affects asks/bids and service levels).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"NL","label":"Netherlands"},{"value":"JP","label":"Japan"},{"value":"AU","label":"Australia"},{"value":"CA","label":"Canada"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"SG","label":"Singapore"},{"value":"CH","label":"Switzerland"},{"value":"MX","label":"Mexico"},{"value":"NZ","label":"New Zealand"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"CN","label":"China"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"}],"default":"US","aliases":["country"]},{"name":"view","type":"enum","required":false,"description":"Which of StockX's sale prices to return, the same selector as the Sales panel on stockx.com. `buyer` (default, StockX's own default) is the Buyer View: what a buyer in `market` would have paid for each sale. `seller` is the Seller View: the ask a seller would have needed to win it. StockX includes duties and taxes depending on buyer and seller location, so the two differ on cross-region sales and agree on domestic ones. `transaction` returns the figure StockX gives with no view, which is what this API returned before 2026-10-17 and matches neither panel on cross-region sales. Applies to sale amounts and `last_sale`; asks and bids do not change.","on_invalid":"reject","allowed_values":[{"value":"buyer","label":"Buyer View: purchase price in your market (stockx.com default)"},{"value":"seller","label":"Seller View: ask needed to win each sale"},{"value":"transaction","label":"No view (the pre-2026-10-17 figure)"}],"default":"buyer","aliases":["viewer","viewer_context"]}],"returns":"series[]{date, count, avg, min, max, last} + summary{points, sales_sampled, window, bucket, min, max, avg, first_date, last_date, window_complete} + product","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"url_key":"air-jordan-4-retro-bred-reimagined","window":"90d","bucket":"day"}},{"name":"sales_history","description":"deep paginated transaction log → sales[]{amount,created_at,order_type,cursor} (newest first) + page_info{cursor,has_more,total,limit,returned} + product. Far deeper than recent_sales (StockX exposes the full ledger, e.g. 60k+ sales). Cursor-paginate with `cursor`; optional `size` filters to one variant. `limit` ≤ 50 (StockX page cap). `view` buyer/seller/transaction picks which StockX sale price (default buyer = the Buyer View on stockx.com's Sales panel, in `market`, default US). order_type EXPRESS = the site's Xpress mark. `currency` optional.","required_params":[],"optional_params":["url","url_key","id","uuid","cursor","limit","size","currency","market","view"],"params":[{"name":"url_key","type":"string","required":false,"description":"Product slug from the StockX product URL (stockx.com/<url_key>) — copy it from search results. Internal id/uuid also accepted. Provide url_key OR url.","on_invalid":"reject","example":"air-jordan-4-retro-bred-reimagined","aliases":["urlKey","slug","id","uuid","product_id"]},{"name":"url","type":"string","required":false,"description":"Full StockX product URL — alternative to url_key.","on_invalid":"reject","example":"https://stockx.com/air-jordan-4-retro-bred-reimagined","aliases":["product_url"]},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous page_info.cursor (omit for the first/newest page).","on_invalid":"reject","aliases":["after"]},{"name":"limit","type":"integer","required":false,"description":"Rows per page (StockX caps at 50).","on_invalid":"ignore","default":50,"minimum":1,"maximum":50},{"name":"size","type":"string","required":false,"description":"Optional size for one variant's transaction log.","on_invalid":"reject","example":"10","aliases":["variant_size"]},{"name":"currency","type":"enum","required":false,"description":"Currency for all prices.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US Dollar"},{"value":"EUR","label":"Euro"},{"value":"GBP","label":"British Pound"},{"value":"JPY","label":"Japanese Yen"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CHF","label":"Swiss Franc"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"KRW","label":"South Korean Won"},{"value":"MXN","label":"Mexican Peso"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SGD","label":"Singapore Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"DKK","label":"Danish Krone"},{"value":"NOK","label":"Norwegian Krone"},{"value":"PLN","label":"Polish Złoty"},{"value":"CNY","label":"Chinese Yuan"},{"value":"TWD","label":"New Taiwan Dollar"},{"value":"THB","label":"Thai Baht"}],"default":"USD"},{"name":"market","type":"enum","required":false,"description":"Marketplace region (affects asks/bids and service levels).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"NL","label":"Netherlands"},{"value":"JP","label":"Japan"},{"value":"AU","label":"Australia"},{"value":"CA","label":"Canada"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"SG","label":"Singapore"},{"value":"CH","label":"Switzerland"},{"value":"MX","label":"Mexico"},{"value":"NZ","label":"New Zealand"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"CN","label":"China"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"}],"default":"US","aliases":["country"]},{"name":"view","type":"enum","required":false,"description":"Which of StockX's sale prices to return, the same selector as the Sales panel on stockx.com. `buyer` (default, StockX's own default) is the Buyer View: what a buyer in `market` would have paid for each sale. `seller` is the Seller View: the ask a seller would have needed to win it. StockX includes duties and taxes depending on buyer and seller location, so the two differ on cross-region sales and agree on domestic ones. `transaction` returns the figure StockX gives with no view, which is what this API returned before 2026-10-17 and matches neither panel on cross-region sales. Applies to sale amounts and `last_sale`; asks and bids do not change.","on_invalid":"reject","allowed_values":[{"value":"buyer","label":"Buyer View: purchase price in your market (stockx.com default)"},{"value":"seller","label":"Seller View: ask needed to win each sale"},{"value":"transaction","label":"No view (the pre-2026-10-17 figure)"}],"default":"buyer","aliases":["viewer","viewer_context"]}],"returns":"sales[]{amount, created_at, order_type, cursor} + page_info{cursor, has_more, total, limit, returned} + product (+ variant when `size` given)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url_key":"air-jordan-4-retro-bred-reimagined","limit":50}},{"name":"browse","description":"category/vertical grids + sort + facet filters → results[]{id,url_key,url,title,brand,sku,category,image,lowest_ask,highest_bid,last_sale} + page_info{page,limit,total}. Needs at least one of `category` (sneakers/apparel/electronics/collectibles/accessories), `query`, or a facet filter (`brand`/`gender`). `sort` (most-active/featured/release_date/lowest_ask) optional. Return up to 1000 products in one call with `max_results` (40/page, paged for you — StockX's own ceiling, its grid stops at page 26); `page` picks where the window starts. The catalog-discovery surface.","required_params":[],"optional_params":["category","query","brand","gender","sort","max_results","page","currency","market","view"],"params":[{"name":"category","type":"enum","required":false,"description":"StockX vertical to browse (grid of that whole category).","on_invalid":"reject","allowed_values":[{"value":"sneakers","label":"Sneakers"},{"value":"apparel","label":"Apparel/Streetwear"},{"value":"electronics","label":"Electronics"},{"value":"collectibles","label":"Collectibles (incl. trading cards, figures)"},{"value":"accessories","label":"Accessories (watches, bags, etc.)"}],"aliases":["vertical","browse_category"]},{"name":"query","type":"string","required":false,"description":"Optional keyword to combine with category/filters.","on_invalid":"reject","example":"jordan 4","aliases":["q"]},{"name":"brand","type":"string","required":false,"description":"Filter results to a brand (StockX facet value, e.g. Jordan, Nike, adidas, New Balance, Supreme).","on_invalid":"reject","example":"Jordan","aliases":["brand_filter"]},{"name":"gender","type":"enum","required":false,"description":"Filter results by gender facet.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Men"},{"value":"women","label":"Women"},{"value":"youth","label":"Youth"},{"value":"infant","label":"Infant"}]},{"name":"sort","type":"enum","required":false,"description":"Result ordering for browse/trending grids.","on_invalid":"reject","allowed_values":[{"value":"most-active","label":"Most active (movers / highest trade volume)"},{"value":"featured","label":"Featured (StockX default ranking)"},{"value":"release_date","label":"Newest release date first"},{"value":"lowest_ask","label":"Lowest ask price first"}]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return. MAXIMUM 1000 — the published ceiling, so there is nothing to probe for. StockX serves 40 per page, so asking for more fetches further pages automatically (up to 25 of them). Omit it and you get exactly one page, which is what this action has always done. The ceiling is StockX's own: its grid stops at page 26 (1040 products) and it caps the reported `total` at 1000 however many matches a query really has. Above 1000 the value is clamped, not rejected. Treat it as an upper bound: a narrow query returns everything it has, and a broad one can still come up short because StockX repeats some products across grid pages and duplicates are dropped (measured 2026-08-07: browse sneakers returned a full 1000, the keyword 'nike' returned 709). Whenever fewer rows come back than you asked for, `meta.incomplete` is true.","on_invalid":"ignore","default":40,"example":200,"minimum":1,"maximum":1000,"aliases":["limit","max"]},{"name":"page","type":"integer","required":false,"description":"Page to start from (1-based, 40 results per page). MAXIMUM 26 — StockX's grid ends there. Measured 2026-08-07 on three separate queries: pages 1-26 are all distinct, page 27 and beyond return page 1's products while reporting `page: 1`. A higher value is clamped to 26 rather than looping silently.","on_invalid":"ignore","default":1,"minimum":1,"maximum":26},{"name":"currency","type":"enum","required":false,"description":"Currency for all prices.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US Dollar"},{"value":"EUR","label":"Euro"},{"value":"GBP","label":"British Pound"},{"value":"JPY","label":"Japanese Yen"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CHF","label":"Swiss Franc"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"KRW","label":"South Korean Won"},{"value":"MXN","label":"Mexican Peso"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SGD","label":"Singapore Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"DKK","label":"Danish Krone"},{"value":"NOK","label":"Norwegian Krone"},{"value":"PLN","label":"Polish Złoty"},{"value":"CNY","label":"Chinese Yuan"},{"value":"TWD","label":"New Taiwan Dollar"},{"value":"THB","label":"Thai Baht"}],"default":"USD"},{"name":"market","type":"enum","required":false,"description":"Marketplace region (affects asks/bids and service levels).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"NL","label":"Netherlands"},{"value":"JP","label":"Japan"},{"value":"AU","label":"Australia"},{"value":"CA","label":"Canada"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"SG","label":"Singapore"},{"value":"CH","label":"Switzerland"},{"value":"MX","label":"Mexico"},{"value":"NZ","label":"New Zealand"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"CN","label":"China"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"}],"default":"US","aliases":["country"]},{"name":"view","type":"enum","required":false,"description":"Which of StockX's sale prices to return, the same selector as the Sales panel on stockx.com. `buyer` (default, StockX's own default) is the Buyer View: what a buyer in `market` would have paid for each sale. `seller` is the Seller View: the ask a seller would have needed to win it. StockX includes duties and taxes depending on buyer and seller location, so the two differ on cross-region sales and agree on domestic ones. `transaction` returns the figure StockX gives with no view, which is what this API returned before 2026-10-17 and matches neither panel on cross-region sales. Applies to sale amounts and `last_sale`; asks and bids do not change.","on_invalid":"reject","allowed_values":[{"value":"buyer","label":"Buyer View: purchase price in your market (stockx.com default)"},{"value":"seller","label":"Seller View: ask needed to win each sale"},{"value":"transaction","label":"No view (the pre-2026-10-17 figure)"}],"default":"buyer","aliases":["viewer","viewer_context"]}],"returns":"results[]{id, url_key, url, title, brand, sku, category, image, lowest_ask, highest_bid, last_sale} + page_info{page, limit, total}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":40,"min":1},"example_params":{"category":"sneakers","sort":"most-active"}},{"name":"trending","description":"movers / most-active products (global or within a `category`) → results[] (same card shape as browse) + page_info. Defaults `sort`=most-active. Optional `category`, `brand`, `gender`. Return up to 1000 products in one call with `max_results` (40/page, paged for you — StockX's grid stops at page 26); `page` picks where the window starts. Surfaces what's trading right now.","required_params":[],"optional_params":["category","brand","gender","sort","max_results","page","currency","market","view"],"params":[{"name":"category","type":"enum","required":false,"description":"StockX vertical to browse (grid of that whole category).","on_invalid":"reject","allowed_values":[{"value":"sneakers","label":"Sneakers"},{"value":"apparel","label":"Apparel/Streetwear"},{"value":"electronics","label":"Electronics"},{"value":"collectibles","label":"Collectibles (incl. trading cards, figures)"},{"value":"accessories","label":"Accessories (watches, bags, etc.)"}],"aliases":["vertical","browse_category"]},{"name":"brand","type":"string","required":false,"description":"Filter results to a brand (StockX facet value, e.g. Jordan, Nike, adidas, New Balance, Supreme).","on_invalid":"reject","example":"Jordan","aliases":["brand_filter"]},{"name":"gender","type":"enum","required":false,"description":"Filter results by gender facet.","on_invalid":"reject","allowed_values":[{"value":"men","label":"Men"},{"value":"women","label":"Women"},{"value":"youth","label":"Youth"},{"value":"infant","label":"Infant"}]},{"name":"sort","type":"enum","required":false,"description":"Result ordering for browse/trending grids.","on_invalid":"reject","allowed_values":[{"value":"most-active","label":"Most active (movers / highest trade volume)"},{"value":"featured","label":"Featured (StockX default ranking)"},{"value":"release_date","label":"Newest release date first"},{"value":"lowest_ask","label":"Lowest ask price first"}]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return. MAXIMUM 1000 — the published ceiling, so there is nothing to probe for. StockX serves 40 per page, so asking for more fetches further pages automatically (up to 25 of them). Omit it and you get exactly one page, which is what this action has always done. The ceiling is StockX's own: its grid stops at page 26 (1040 products) and it caps the reported `total` at 1000 however many matches a query really has. Above 1000 the value is clamped, not rejected. Treat it as an upper bound: a narrow query returns everything it has, and a broad one can still come up short because StockX repeats some products across grid pages and duplicates are dropped (measured 2026-08-07: browse sneakers returned a full 1000, the keyword 'nike' returned 709). Whenever fewer rows come back than you asked for, `meta.incomplete` is true.","on_invalid":"ignore","default":40,"example":200,"minimum":1,"maximum":1000,"aliases":["limit","max"]},{"name":"page","type":"integer","required":false,"description":"Page to start from (1-based, 40 results per page). MAXIMUM 26 — StockX's grid ends there. Measured 2026-08-07 on three separate queries: pages 1-26 are all distinct, page 27 and beyond return page 1's products while reporting `page: 1`. A higher value is clamped to 26 rather than looping silently.","on_invalid":"ignore","default":1,"minimum":1,"maximum":26},{"name":"currency","type":"enum","required":false,"description":"Currency for all prices.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"US Dollar"},{"value":"EUR","label":"Euro"},{"value":"GBP","label":"British Pound"},{"value":"JPY","label":"Japanese Yen"},{"value":"AUD","label":"Australian Dollar"},{"value":"CAD","label":"Canadian Dollar"},{"value":"CHF","label":"Swiss Franc"},{"value":"HKD","label":"Hong Kong Dollar"},{"value":"KRW","label":"South Korean Won"},{"value":"MXN","label":"Mexican Peso"},{"value":"NZD","label":"New Zealand Dollar"},{"value":"SGD","label":"Singapore Dollar"},{"value":"SEK","label":"Swedish Krona"},{"value":"DKK","label":"Danish Krone"},{"value":"NOK","label":"Norwegian Krone"},{"value":"PLN","label":"Polish Złoty"},{"value":"CNY","label":"Chinese Yuan"},{"value":"TWD","label":"New Taiwan Dollar"},{"value":"THB","label":"Thai Baht"}],"default":"USD"},{"name":"market","type":"enum","required":false,"description":"Marketplace region (affects asks/bids and service levels).","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"GB","label":"United Kingdom"},{"value":"DE","label":"Germany"},{"value":"FR","label":"France"},{"value":"IT","label":"Italy"},{"value":"ES","label":"Spain"},{"value":"NL","label":"Netherlands"},{"value":"JP","label":"Japan"},{"value":"AU","label":"Australia"},{"value":"CA","label":"Canada"},{"value":"KR","label":"South Korea"},{"value":"HK","label":"Hong Kong"},{"value":"SG","label":"Singapore"},{"value":"CH","label":"Switzerland"},{"value":"MX","label":"Mexico"},{"value":"NZ","label":"New Zealand"},{"value":"SE","label":"Sweden"},{"value":"DK","label":"Denmark"},{"value":"NO","label":"Norway"},{"value":"PL","label":"Poland"},{"value":"CN","label":"China"},{"value":"TW","label":"Taiwan"},{"value":"TH","label":"Thailand"}],"default":"US","aliases":["country"]},{"name":"view","type":"enum","required":false,"description":"Which of StockX's sale prices to return, the same selector as the Sales panel on stockx.com. `buyer` (default, StockX's own default) is the Buyer View: what a buyer in `market` would have paid for each sale. `seller` is the Seller View: the ask a seller would have needed to win it. StockX includes duties and taxes depending on buyer and seller location, so the two differ on cross-region sales and agree on domestic ones. `transaction` returns the figure StockX gives with no view, which is what this API returned before 2026-10-17 and matches neither panel on cross-region sales. Applies to sale amounts and `last_sale`; asks and bids do not change.","on_invalid":"reject","allowed_values":[{"value":"buyer","label":"Buyer View: purchase price in your market (stockx.com default)"},{"value":"seller","label":"Seller View: ask needed to win each sale"},{"value":"transaction","label":"No view (the pre-2026-10-17 figure)"}],"default":"buyer","aliases":["viewer","viewer_context"]}],"returns":"results[]{id, url_key, url, title, brand, sku, category, image, lowest_ask, highest_bid, last_sale} + page_info{page, limit, total}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":40,"min":1},"example_params":{"brand":"Jordan"}}]},{"name":"streaming","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Streaming Availability API (JustWatch where-to-watch) — find which platform a movie or TV show is on by country: stream/rent/buy offers with price & quality, multi-country availability, trending, what's new and leaving, and provider catalogs","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/streaming/v1","spec_available":true,"actions":[{"name":"search","description":"search movies/shows with current offers","required_params":["query"],"optional_params":["country","language","page_size","cursor"],"params":[{"name":"query","type":"string","required":true,"description":"Title to search for.","on_invalid":"reject","example":"Inception"},{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-40). Larger values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"Next-page token from the previous response's meta.next_cursor (for episodes it is a numeric offset).","on_invalid":"ignore","example":""}],"returns":"results[]{id, title, year, offers[]{provider, type, quality, price, url}, external_ids, scoring, cursor}; meta has total/has_more/next_cursor","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Inception","country":"US"}},{"name":"browse","description":"browse a provider/country catalog by genre/type/year, ranked (sort_by), with pagination","required_params":[],"optional_params":["country","language","object_types","packages","genres","sort_by","release_year","year_min","year_max","page_size","cursor"],"params":[{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"},{"name":"object_types","type":"array","required":false,"description":"Restrict to these title types (movie / show; 'tv' is accepted). Comma-list or array.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Movies"},{"value":"show","label":"TV shows (alias: tv)"},{"value":"tv","label":"TV shows"}],"example":["movie"],"aliases":["objectTypes","type"]},{"name":"packages","type":"array","required":false,"description":"Restrict to these providers by JustWatch technical name (e.g. nfx=Netflix, amp=Prime Video) — see the providers action.","on_invalid":"ignore","example":["nfx"],"aliases":["providers","provider"]},{"name":"genres","type":"array","required":false,"description":"Restrict to these genre short-names (e.g. act, drm) — see the genres action. Comma-list or array.","on_invalid":"ignore","example":["act"],"aliases":["genre"]},{"name":"sort_by","type":"enum","required":false,"description":"Ranking for the result list. Case-insensitive; common values shown.","on_invalid":"ignore","allowed_values":[{"value":"popular","label":"Most popular (default)"},{"value":"trending","label":"Trending now"},{"value":"imdb_score","label":"Highest IMDb score (alias: top_rated)"},{"value":"tmdb_popularity","label":"TMDB popularity"},{"value":"alphabetical","label":"A-Z"},{"value":"random","label":"Random"}],"default":"popular","example":"popular","aliases":["sortBy"]},{"name":"release_year","type":"object","required":false,"description":"Advanced: release-year range as {min, max} (overrides year_min/year_max).","on_invalid":"ignore","example":{"min":2010,"max":2020},"aliases":["releaseYear"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest release year (inclusive).","on_invalid":"ignore","example":2010,"aliases":["from_year"]},{"name":"year_max","type":"integer","required":false,"description":"Latest release year (inclusive).","on_invalid":"ignore","example":2020,"aliases":["to_year"]},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-40). Larger values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"Next-page token from the previous response's meta.next_cursor (for episodes it is a numeric offset).","on_invalid":"ignore","example":""}],"returns":"results[] (same title shape as search), meta total/has_more/next_cursor","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US"}},{"name":"trending","description":"trending titles right now (with where-to-watch offers), filterable by provider/type/genre","required_params":[],"optional_params":["country","language","sort_by","object_types","packages","genres","page_size","cursor"],"params":[{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"},{"name":"sort_by","type":"enum","required":false,"description":"Ranking for the result list. Case-insensitive; common values shown.","on_invalid":"ignore","allowed_values":[{"value":"popular","label":"Most popular (default)"},{"value":"trending","label":"Trending now"},{"value":"imdb_score","label":"Highest IMDb score (alias: top_rated)"},{"value":"tmdb_popularity","label":"TMDB popularity"},{"value":"alphabetical","label":"A-Z"},{"value":"random","label":"Random"}],"default":"trending","example":"trending","aliases":["sortBy"]},{"name":"object_types","type":"array","required":false,"description":"Restrict to these title types (movie / show; 'tv' is accepted). Comma-list or array.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Movies"},{"value":"show","label":"TV shows (alias: tv)"},{"value":"tv","label":"TV shows"}],"example":["movie"],"aliases":["objectTypes","type"]},{"name":"packages","type":"array","required":false,"description":"Restrict to these providers by JustWatch technical name (e.g. nfx=Netflix, amp=Prime Video) — see the providers action.","on_invalid":"ignore","example":["nfx"],"aliases":["providers","provider"]},{"name":"genres","type":"array","required":false,"description":"Restrict to these genre short-names (e.g. act, drm) — see the genres action. Comma-list or array.","on_invalid":"ignore","example":["act"],"aliases":["genre"]},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-40). Larger values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"Next-page token from the previous response's meta.next_cursor (for episodes it is a numeric offset).","on_invalid":"ignore","example":""}],"returns":"results[]{id, title, year, offers[]{provider, type, quality, price, url}, scoring, cursor}; meta total/has_more/next_cursor","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","page_size":3}},{"name":"title","description":"title metadata and offers by JustWatch node id","required_params":[],"optional_params":["id","query","url","country","language"],"params":[{"name":"id","type":"string","required":false,"description":"JustWatch node id (movie tm…, show ts…, season tse…). Get it from a search/browse result's `id`.","on_invalid":"reject","example":"ts4","aliases":["node_id"]},{"name":"query","type":"string","required":false,"description":"Resolve the title by name when you have no node id (first match is used).","on_invalid":"ignore","example":"Breaking Bad","aliases":["title"]},{"name":"url","type":"string","required":false,"description":"Resolve from a JustWatch URL when you have no id/query.","on_invalid":"ignore","example":"https://www.justwatch.com/us/movie/inception"},{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"}],"returns":"one title record{id, title, year, runtime, genres, external_ids, scoring, offers[]{provider, type, quality, price, url}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"ts4","country":"US"}},{"name":"availability","description":"where-to-watch offers for one title across multiple countries (the core comparison call)","required_params":[],"optional_params":["id","query","url","countries","country","language","monetization_types","presentation_types"],"params":[{"name":"id","type":"string","required":false,"description":"JustWatch node id (movie tm…, show ts…, season tse…). Get it from a search/browse result's `id`.","on_invalid":"reject","example":"ts4","aliases":["node_id"]},{"name":"query","type":"string","required":false,"description":"Resolve the title by name when you have no node id (first match is used).","on_invalid":"ignore","example":"Inception","aliases":["title"]},{"name":"url","type":"string","required":false,"description":"Resolve from a JustWatch URL when you have no id.","on_invalid":"ignore","example":"https://www.justwatch.com/us/movie/inception"},{"name":"countries","type":"array","required":false,"description":"Markets to check (comma-list or array of ISO-2 codes). Defaults to the single `country`.","on_invalid":"ignore","example":["US","GB","DE"]},{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"},{"name":"monetization_types","type":"array","required":false,"description":"Filter offers by how you pay. Common values shown; case-insensitive.","on_invalid":"ignore","allowed_values":[{"value":"flatrate","label":"Subscription"},{"value":"rent","label":"Rent"},{"value":"buy","label":"Buy"},{"value":"ads","label":"Free with ads"},{"value":"free","label":"Free"},{"value":"cinema","label":"Cinema"}],"example":["flatrate"],"aliases":["monetization_type"]},{"name":"presentation_types","type":"array","required":false,"description":"Filter offers by video quality. Common values shown; case-insensitive.","on_invalid":"ignore","allowed_values":[{"value":"sd","label":"SD"},{"value":"hd","label":"HD"},{"value":"4k","label":"4K (UHD)"}],"example":["hd"],"aliases":["presentation_type"]}],"returns":"id, countries{<CC>: offers[]{provider, type, quality, price, url}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.justwatch.com/us/movie/inception"}},{"name":"new","description":"what's new / coming soon / leaving soon on a provider — by country/provider/type","required_params":[],"optional_params":["country","language","packages","object_types","date","price_drops","page_type","monetization_types","presentation_types","page_size","cursor"],"params":[{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"},{"name":"packages","type":"array","required":false,"description":"Restrict to these providers by JustWatch technical name (e.g. nfx=Netflix, amp=Prime Video) — see the providers action.","on_invalid":"ignore","example":["nfx"],"aliases":["providers","provider"]},{"name":"object_types","type":"array","required":false,"description":"Restrict to these title types (movie / show; 'tv' is accepted). Comma-list or array.","on_invalid":"ignore","allowed_values":[{"value":"movie","label":"Movies"},{"value":"show","label":"TV shows (alias: tv)"},{"value":"tv","label":"TV shows"}],"example":["movie"],"aliases":["objectTypes","type"]},{"name":"date","type":"string","required":false,"description":"The change day as YYYY-MM-DD (defaults to today).","on_invalid":"ignore","example":"2026-06-01"},{"name":"price_drops","type":"boolean","required":false,"description":"Return price-drop changes instead of newly-added titles.","on_invalid":"ignore","default":false,"example":false},{"name":"page_type","type":"enum","required":false,"description":"Which change feed. Case-insensitive; 'leaving' returns titles about to expire (with availableTo dates).","on_invalid":"ignore","allowed_values":[{"value":"new","label":"Newly available (alias: added)"},{"value":"upcoming","label":"Coming soon (alias: coming_soon)"},{"value":"leaving","label":"Leaving soon (aliases: leaving_soon, expiring)"}],"default":"new","example":"new"},{"name":"monetization_types","type":"array","required":false,"description":"Filter offers by how you pay. Common values shown; case-insensitive.","on_invalid":"ignore","allowed_values":[{"value":"flatrate","label":"Subscription"},{"value":"rent","label":"Rent"},{"value":"buy","label":"Buy"},{"value":"ads","label":"Free with ads"},{"value":"free","label":"Free"},{"value":"cinema","label":"Cinema"}],"example":["flatrate"],"aliases":["monetization_type"]},{"name":"presentation_types","type":"array","required":false,"description":"Filter offers by video quality. Common values shown; case-insensitive.","on_invalid":"ignore","allowed_values":[{"value":"sd","label":"SD"},{"value":"hd","label":"HD"},{"value":"4k","label":"4K (UHD)"}],"example":["hd"],"aliases":["presentation_type"]},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-40). Larger values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"Next-page token from the previous response's meta.next_cursor (for episodes it is a numeric offset).","on_invalid":"ignore","example":""}],"returns":"results[]{title, ids, new_offer{provider, date_created, available_to}, show, cursor}, meta total/has_more/next_cursor","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US","packages":["nfx"],"page_type":"leaving","page_size":3}},{"name":"countries","description":"supported country codes","required_params":[],"optional_params":[],"params":[],"returns":"countries[]{code} (static ISO-2 JustWatch market list), source","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"genres","description":"JustWatch genre reference for a country/language","required_params":[],"optional_params":["country","language"],"params":[{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"}],"returns":"genres[]{short_name, translation}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US"}},{"name":"providers","description":"streaming providers available in a country","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"}],"returns":"providers[]{provider, provider_id, technical_name, monetization_types, icon}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US"}},{"name":"country","description":"one country plus live supported provider/service details","required_params":["country"],"optional_params":[],"params":[{"name":"country","type":"string","required":true,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","example":"US"}],"returns":"country{code, providers[]{provider, technical_name, monetization_types}}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US"}},{"name":"seasons","description":"show seasons with offers","required_params":["id"],"optional_params":["country","language"],"params":[{"name":"id","type":"string","required":true,"description":"JustWatch node id (movie tm…, show ts…, season tse…). Get it from a search/browse result's `id`.","on_invalid":"reject","example":"ts4","aliases":["node_id"]},{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"}],"returns":"seasons[]{id, season_number, title, offers[], total_episode_count}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"ts4"}},{"name":"episodes","description":"season episodes with offers; show id + season_number resolves first","required_params":[],"optional_params":["id","season_id","season_number","country","language","page_size","cursor"],"params":[{"name":"id","type":"string","required":false,"description":"JustWatch node id (movie tm…, show ts…, season tse…). Get it from a search/browse result's `id`.","on_invalid":"reject","example":"ts4","aliases":["node_id"]},{"name":"season_id","type":"string","required":false,"description":"Season node id (tse…) — fetches that season's episodes directly.","on_invalid":"ignore","example":"tse123"},{"name":"season_number","type":"integer","required":false,"description":"With a show `id`, resolves this season number to its episodes.","on_invalid":"ignore","example":1},{"name":"country","type":"string","required":false,"description":"Market — ISO-3166-1 alpha-2 (upper-cased; ~135 supported, see the countries action). Controls which offers/providers are returned.","on_invalid":"ignore","default":"US","example":"US"},{"name":"language","type":"string","required":false,"description":"ISO-639-1 language for titles/genre names (lower-cased).","on_invalid":"ignore","default":"en","example":"en"},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-40). Larger values are clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":40},{"name":"cursor","type":"string","required":false,"description":"Next-page token from the previous response's meta.next_cursor (for episodes it is a numeric offset).","on_invalid":"ignore","example":""}],"returns":"episodes[]{id, season_number, episode_number, title, offers[]}, meta total/has_more/next_cursor","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"id":"ts4"}}]},{"name":"subito","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Subito.it API scraper - Italy's largest classifieds site: marketplace search with condition, shipping and TuttoSubito, private/business/pro seller filters, cars and motorcycles, real estate for sale and rent, and the full ad record. No account, no browser; private sellers' personal data withheld.","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/subito/v1","spec_available":true,"actions":[{"name":"search","description":"Search Subito.it, Italy's largest classifieds site, by keyword and/or category: price (free items, unpublished and placeholder prices labelled), region, province, town and zone, private, business or pro seller with shop, condition, shipping and TuttoSubito cost, urgent and 'In vetrina' flags, publication/renewal and expiry dates, images, description and every published attribute. Filter by category, ad type, condition, shipping, price, location, seller type or seller; sort by newest, relevance or price.","required_params":[],"optional_params":["query","titles_only","category","ad_type","condition","shippable","price_min","price_max","region","province","town","seller_type","seller_id","urgent_only","sort","page","limit","include_sponsored","include_fuzzy_matches","include_pii","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into Subito's search box.","on_invalid":"reject","example":"bici"},{"name":"titles_only","type":"boolean","required":false,"description":"Match the keyword in ad titles only.","on_invalid":"reject"},{"name":"category","type":"string","required":false,"description":"Subito category id or name (41 = Biciclette, 12 = Telefonia, 14 = Arredamento e Casalinghi); the categories action lists them.","on_invalid":"reject","example":"41"},{"name":"ad_type","type":"enum","required":false,"description":"sale (default), wanted, gift, rent or holiday_rent.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"sale"},{"value":"wanted","label":"wanted"},{"value":"gift","label":"gift"},{"value":"rent","label":"rent"},{"value":"holiday_rent","label":"holiday_rent"}],"default":"sale"},{"name":"condition","type":"array","required":false,"description":"One or more of new, like_new, very_good, good, damaged.","on_invalid":"reject","allowed_values":[{"value":"new","label":"new"},{"value":"like_new","label":"like_new"},{"value":"very_good","label":"very_good"},{"value":"good","label":"good"},{"value":"damaged","label":"damaged"}]},{"name":"shippable","type":"boolean","required":false,"description":"Only ads with shipping available.","on_invalid":"reject"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"region","type":"string","required":false,"description":"Italian region, by name or Subito id (4 = Lombardia). See the locations action.","on_invalid":"reject","example":"Lombardia"},{"name":"province","type":"string","required":false,"description":"Province by its two-letter code (MI, RM, NA) or name.","on_invalid":"reject","example":"MI"},{"name":"town","type":"string","required":false,"description":"Town (comune) by its 6-digit id from the locations action, e.g. 015146 = Milano.","on_invalid":"reject","example":"015146"},{"name":"seller_type","type":"array","required":false,"description":"One or more of private, business, pro.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private"},{"value":"business","label":"Business with a VAT number"},{"value":"pro","label":"Verified pro shop"}]},{"name":"seller_id","type":"string","required":false,"description":"seller.seller_id from a result row: that seller's ads.","on_invalid":"reject"},{"name":"urgent_only","type":"boolean","required":false,"description":"Only ads marked urgent.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"newest (Subito's default: last published or renewed first), relevance, price_asc, price_desc. Price sorts leave out ads without a price unless price_min is given.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (Subito serves the first 10,000 results).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return Subito's paid gallery carousel ('In vetrina') for the same filters, apart, under sponsored[]. One extra request.","on_invalid":"reject","default":false},{"name":"include_fuzzy_matches","type":"boolean","required":false,"description":"By default the keyword is matched as words (singular and plural alike), so 'lego' does not also return cars with 'lega' alloy wheels, and any row that still contains none of your words is dropped and counted. true uses Subito's own looser matching and keeps every row, flagged matches_query_words.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' display names and the street address/exact coordinates some ads carry.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, urn, title, url, category_id, category, macro_category_id, ad_type, ad_type_label, price, currency, is_free, price_not_published, price_looks_placeholder, published_or_renewed_at, expires_at, location{region_id, region, province_id, province, province_code, town_id, town, zone_id, zone, latitude, longitude, coordinates_precision, address, address_withheld}, seller{type, seller_id, name, name_withheld, is_company, shop_id, shop_name, vat_number}, condition, condition_label, shipping{shippable, tuttosubito, method, cost, currency, package_size, carriers[]}, is_urgent, in_vetrina, is_sold, image_count, images[], has_360_images, description, attributes[]{key, label, value, values[], value_id}, is_possible_repost, repost_of, matches_query_words, vehicle{} | property{}}, count, total, page, limit, has_more, sort_applied, filters_applied, unpriced_excluded, keyword_match, fuzzy_matches_dropped, hidden_seller_rows_dropped, possible_reposts, sponsored_total, sponsored[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"bici"}},{"name":"cars/search","description":"Search Subito Motori - cars, motorcycles and vans: price, make, model and version, year, registration, mileage, fuel, gearbox, body type, doors, seats, colour, power in kW and hp, engine size, emission class, used/Km0/new, dealer or private seller, town and province. Filter by vehicle type, make, model, year, mileage, fuel, gearbox, body type, condition, engine size, motorcycle type, price, seller type and location; sort by newest, relevance or price.","required_params":[],"optional_params":["vehicle_type","query","make","model","year_min","year_max","mileage_min","mileage_max","fuel","gearbox","body_type","vehicle_condition","cubic_capacity_min","cubic_capacity_max","motorcycle_type","price_min","price_max","region","province","town","seller_type","seller_id","urgent_only","sort","page","limit","include_sponsored","include_fuzzy_matches","include_pii","max_rotations"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"car (default), motorcycle or van.","on_invalid":"reject","allowed_values":[{"value":"car","label":"car"},{"value":"motorcycle","label":"motorcycle"},{"value":"van","label":"van"}],"default":"car"},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into Subito's search box.","on_invalid":"reject","example":"bici"},{"name":"make","type":"string","required":false,"description":"Make as Subito lists it, e.g. FIAT, ALFA ROMEO, Yamaha (cars and motorcycles).","on_invalid":"reject","example":"ALFA ROMEO"},{"name":"model","type":"string","required":false,"description":"Model name as Subito lists it, with make (e.g. 147, Panda, MT-07).","on_invalid":"reject","example":"Giulietta"},{"name":"year_min","type":"integer","required":false,"description":"Earliest registration year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest registration year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"mileage_min","type":"number","required":false,"description":"Lowest mileage, km (snapped to Subito's 5,000-km steps).","on_invalid":"reject","minimum":0},{"name":"mileage_max","type":"number","required":false,"description":"Highest mileage, km (snapped to Subito's 5,000-km steps).","on_invalid":"reject","minimum":0},{"name":"fuel","type":"array","required":false,"description":"petrol, diesel, lpg, methane, electric, hybrid, mild/full/plug-in hybrid petrol or diesel, other.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"diesel","label":"diesel"},{"value":"lpg","label":"lpg"},{"value":"electric","label":"electric"},{"value":"other","label":"other"},{"value":"hybrid","label":"hybrid"},{"value":"methane","label":"methane"},{"value":"mild_hybrid_petrol","label":"mild_hybrid_petrol"},{"value":"mild_hybrid_diesel","label":"mild_hybrid_diesel"},{"value":"full_hybrid_petrol","label":"full_hybrid_petrol"},{"value":"full_hybrid_diesel","label":"full_hybrid_diesel"},{"value":"plug_in_hybrid_petrol","label":"plug_in_hybrid_petrol"},{"value":"plug_in_hybrid_diesel","label":"plug_in_hybrid_diesel"}]},{"name":"gearbox","type":"array","required":false,"description":"manual, automatic, sequential, other.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic"},{"value":"sequential","label":"sequential"},{"value":"other","label":"other"}]},{"name":"body_type","type":"array","required":false,"description":"Cars: small_car, city_car, sedan, estate, mpv, suv, convertible, coupe, other.","on_invalid":"reject","allowed_values":[{"value":"small_car","label":"small_car"},{"value":"sedan","label":"sedan"},{"value":"estate","label":"estate"},{"value":"mpv","label":"mpv"},{"value":"suv","label":"suv"},{"value":"convertible","label":"convertible"},{"value":"coupe","label":"coupe"},{"value":"city_car","label":"city_car"},{"value":"other","label":"other"}]},{"name":"vehicle_condition","type":"array","required":false,"description":"used, km0, new.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used"},{"value":"km0","label":"km0"},{"value":"new","label":"new"}]},{"name":"cubic_capacity_min","type":"number","required":false,"description":"Motorcycles: smallest engine, cc (snapped to Subito's steps 50/125/150/250/600/750/…).","on_invalid":"reject","minimum":0},{"name":"cubic_capacity_max","type":"number","required":false,"description":"Motorcycles: largest engine, cc (snapped to Subito's steps).","on_invalid":"reject","minimum":0},{"name":"motorcycle_type","type":"array","required":false,"description":"Motorcycles: sport, cross_enduro, custom_cafe_racer, scooter, touring, quad, vintage, other.","on_invalid":"reject","allowed_values":[{"value":"sport","label":"sport"},{"value":"cross_enduro","label":"cross_enduro"},{"value":"custom_cafe_racer","label":"custom_cafe_racer"},{"value":"scooter","label":"scooter"},{"value":"touring","label":"touring"},{"value":"quad","label":"quad"},{"value":"vintage","label":"vintage"},{"value":"other","label":"other"}]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"region","type":"string","required":false,"description":"Italian region, by name or Subito id (4 = Lombardia). See the locations action.","on_invalid":"reject","example":"Lombardia"},{"name":"province","type":"string","required":false,"description":"Province by its two-letter code (MI, RM, NA) or name.","on_invalid":"reject","example":"MI"},{"name":"town","type":"string","required":false,"description":"Town (comune) by its 6-digit id from the locations action, e.g. 015146 = Milano.","on_invalid":"reject","example":"015146"},{"name":"seller_type","type":"array","required":false,"description":"One or more of private, business, pro.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private"},{"value":"business","label":"Business with a VAT number"},{"value":"pro","label":"Verified pro shop"}]},{"name":"seller_id","type":"string","required":false,"description":"seller.seller_id from a result row: that seller's ads.","on_invalid":"reject"},{"name":"urgent_only","type":"boolean","required":false,"description":"Only ads marked urgent.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"newest (Subito's default: last published or renewed first), relevance, price_asc, price_desc. Price sorts leave out ads without a price unless price_min is given.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (Subito serves the first 10,000 results).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return Subito's paid gallery carousel ('In vetrina') for the same filters, apart, under sponsored[]. One extra request.","on_invalid":"reject","default":false},{"name":"include_fuzzy_matches","type":"boolean","required":false,"description":"By default the keyword is matched as words (singular and plural alike), so 'lego' does not also return cars with 'lega' alloy wheels, and any row that still contains none of your words is dropped and counted. true uses Subito's own looser matching and keeps every row, flagged matches_query_words.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' display names and the street address/exact coordinates some ads carry.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, urn, title, url, category_id, category, macro_category_id, ad_type, ad_type_label, price, currency, is_free, price_not_published, price_looks_placeholder, published_or_renewed_at, expires_at, location{region_id, region, province_id, province, province_code, town_id, town, zone_id, zone, latitude, longitude, coordinates_precision, address, address_withheld}, seller{type, seller_id, name, name_withheld, is_company, shop_id, shop_name, vat_number}, condition, condition_label, shipping{shippable, tuttosubito, method, cost, currency, package_size, carriers[]}, is_urgent, in_vetrina, is_sold, image_count, images[], has_360_images, description, attributes[]{key, label, value, values[], value_id}, is_possible_repost, repost_of, matches_query_words, vehicle{make, make_id, model, model_id, model_variant, version, year, registration, mileage_km, mileage_range, fuel, gearbox, body_type, doors, seats, colour, power_kw, power_hp, cubic_capacity_cc, emission_class, vehicle_condition, new_drivers_ok, vat_deductible, reference}}, count, total, page, limit, has_more, sort_applied, filters_applied, unpriced_excluded, keyword_match, fuzzy_matches_dropped, hidden_seller_rows_dropped, possible_reposts, sponsored_total, sponsored[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"ALFA ROMEO"}},{"name":"real_estate/search","description":"Search Subito Immobili - property for sale, for rent and holiday rentals, rooms, garages, land and offices: price or rent, surface in m², rooms, bathrooms, floor, building condition, energy class, heating, furnished, elevator, balcony, garden, parking, agency or private owner, town and zone. Filter by transaction, property type, price, surface, rooms, bathrooms, building condition, furnished, elevator, balcony, garden, seller type and location; sort by newest, relevance or price.","required_params":["transaction"],"optional_params":["property_type","query","surface_min","surface_max","rooms_min","rooms_max","bathrooms_min","bathrooms_max","building_condition","furnished","elevator","balcony","garden","price_min","price_max","region","province","town","seller_type","seller_id","urgent_only","sort","page","limit","include_sponsored","include_fuzzy_matches","include_pii","max_rotations"],"params":[{"name":"transaction","type":"enum","required":true,"description":"sale, rent, holiday_rent or wanted.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"sale"},{"value":"rent","label":"rent"},{"value":"holiday_rent","label":"holiday_rent"},{"value":"wanted","label":"wanted"}],"example":"rent"},{"name":"property_type","type":"enum","required":false,"description":"apartment, house, land, garage, loft_other, holiday_home, office_commercial or room. Omit for all real estate.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"apartment"},{"value":"house","label":"house"},{"value":"land","label":"land"},{"value":"garage","label":"garage"},{"value":"loft_other","label":"loft_other"},{"value":"holiday_home","label":"holiday_home"},{"value":"office_commercial","label":"office_commercial"},{"value":"room","label":"room"}]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into Subito's search box.","on_invalid":"reject","example":"bici"},{"name":"surface_min","type":"number","required":false,"description":"Smallest surface, m².","on_invalid":"reject","minimum":0},{"name":"surface_max","type":"number","required":false,"description":"Largest surface, m².","on_invalid":"reject","minimum":0},{"name":"rooms_min","type":"integer","required":false,"description":"Fewest rooms (locali).","on_invalid":"reject","minimum":1,"maximum":10},{"name":"rooms_max","type":"integer","required":false,"description":"Most rooms (locali).","on_invalid":"reject","minimum":1,"maximum":10},{"name":"bathrooms_min","type":"integer","required":false,"description":"Fewest bathrooms.","on_invalid":"reject","minimum":1,"maximum":5},{"name":"bathrooms_max","type":"integer","required":false,"description":"Most bathrooms.","on_invalid":"reject","minimum":1,"maximum":5},{"name":"building_condition","type":"array","required":false,"description":"new_build, excellent, good, to_renovate.","on_invalid":"reject","allowed_values":[{"value":"new_build","label":"new_build"},{"value":"excellent","label":"excellent"},{"value":"good","label":"good"},{"value":"to_renovate","label":"to_renovate"}]},{"name":"furnished","type":"boolean","required":false,"description":"Rentals: furnished only.","on_invalid":"reject"},{"name":"elevator","type":"boolean","required":false,"description":"With an elevator.","on_invalid":"reject"},{"name":"balcony","type":"boolean","required":false,"description":"With a balcony.","on_invalid":"reject"},{"name":"garden","type":"boolean","required":false,"description":"With a garden (houses, holiday homes).","on_invalid":"reject"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rentals).","on_invalid":"reject","minimum":0},{"name":"region","type":"string","required":false,"description":"Italian region, by name or Subito id (4 = Lombardia). See the locations action.","on_invalid":"reject","example":"Lombardia"},{"name":"province","type":"string","required":false,"description":"Province by its two-letter code (MI, RM, NA) or name.","on_invalid":"reject","example":"MI"},{"name":"town","type":"string","required":false,"description":"Town (comune) by its 6-digit id from the locations action, e.g. 015146 = Milano.","on_invalid":"reject","example":"015146"},{"name":"seller_type","type":"array","required":false,"description":"One or more of private, business, pro.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private"},{"value":"business","label":"Business with a VAT number"},{"value":"pro","label":"Verified pro shop"}]},{"name":"seller_id","type":"string","required":false,"description":"seller.seller_id from a result row: that seller's ads.","on_invalid":"reject"},{"name":"urgent_only","type":"boolean","required":false,"description":"Only ads marked urgent.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"newest (Subito's default: last published or renewed first), relevance, price_asc, price_desc. Price sorts leave out ads without a price unless price_min is given.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page (Subito serves the first 10,000 results).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, up to 100.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return Subito's paid gallery carousel ('In vetrina') for the same filters, apart, under sponsored[]. One extra request.","on_invalid":"reject","default":false},{"name":"include_fuzzy_matches","type":"boolean","required":false,"description":"By default the keyword is matched as words (singular and plural alike), so 'lego' does not also return cars with 'lega' alloy wheels, and any row that still contains none of your words is dropped and counted. true uses Subito's own looser matching and keeps every row, flagged matches_query_words.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' display names and the street address/exact coordinates some ads carry.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, urn, title, url, category_id, category, macro_category_id, ad_type, ad_type_label, price, currency, is_free, price_not_published, price_looks_placeholder, published_or_renewed_at, expires_at, location{region_id, region, province_id, province, province_code, town_id, town, zone_id, zone, latitude, longitude, coordinates_precision, address, address_withheld}, seller{type, seller_id, name, name_withheld, is_company, shop_id, shop_name, vat_number}, condition, condition_label, shipping{shippable, tuttosubito, method, cost, currency, package_size, carriers[]}, is_urgent, in_vetrina, is_sold, image_count, images[], has_360_images, description, attributes[]{key, label, value, values[], value_id}, is_possible_repost, repost_of, matches_query_words, property{surface_m2, rooms, bathrooms, floor, building_condition, energy_class, heating, parking, furnished, elevator, balcony, garden, air_conditioning, available_now, short_term_rental, no_agencies, …}}, count, total, page, limit, has_more, sort_applied, filters_applied, unpriced_excluded, keyword_match, fuzzy_matches_dropped, hidden_seller_rows_dropped, possible_reposts, sponsored_total, sponsored[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"transaction":"rent","region":"4"}},{"name":"listing","description":"The full Subito ad by id, URL or urn, in any category: title, price (free, unpublished and placeholder labelled), description, all images, condition, shipping and TuttoSubito cost, every published attribute with its Italian label, publication/renewal and expiry dates, location, vehicle or property details and the seller. include_page_details adds the favourites count, the seller's rating, reply time, badges and years on Subito, the pro shop profile and TuttoSubito delivery prices and times.","required_params":["ad_id"],"optional_params":["include_page_details","include_pii","max_rotations"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The Subito ad id (the digits before .htm in an ad URL), the full URL or the urn.","on_invalid":"reject","example":"660274994"},{"name":"include_page_details","type":"boolean","required":false,"description":"Also read the ad page: favourites, seller rating/reply time/badges, shop profile and TuttoSubito delivery options. One extra, larger request.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' display names and the street address/exact coordinates some ads carry.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{ad_id, urn, title, url, category_id, category, macro_category_id, ad_type, ad_type_label, price, currency, is_free, price_not_published, price_looks_placeholder, published_or_renewed_at, expires_at, location{region_id, region, province_id, province, province_code, town_id, town, zone_id, zone, latitude, longitude, coordinates_precision, address, address_withheld}, seller{type, seller_id, name, name_withheld, is_company, shop_id, shop_name, vat_number}, condition, condition_label, shipping{shippable, tuttosubito, method, cost, currency, package_size, carriers[]}, is_urgent, in_vetrina, is_sold, image_count, images[], has_360_images, description, attributes[]{key, label, value, values[], value_id}, is_possible_repost, repost_of, matches_query_words, vehicle{} | property{}, page_details{favorites_count, availability, seller_profile{display_name, on_subito_since, published_ads_total, badges[], rating_score, rating_scale, rating_count, reply_time, last_active_at}, shop{shop_id, name, logo}, tuttosubito_shipping{to_door{cost, cost_before_discount}, to_door_days{min, max}, to_pickup_point{…}, couriers[]}}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"ad_id":"660274994"}},{"name":"categories","description":"Subito's category tree (macro categories and their categories, with ids and the ad types each accepts) - the ids the search actions take.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"categories[]{category_id, name, slug, macro_category_id, ad_types[]}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"locations","description":"Find Subito's location ids: search a town or province by name, or list Italy's regions, or the provinces of one region - the values region, province and town take.","required_params":[],"optional_params":["query","region","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Town or province name, at least 2 letters.","on_invalid":"reject","example":"milano"},{"name":"region","type":"string","required":false,"description":"A region name or id: list its provinces.","on_invalid":"reject"},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"locations[]{region_id, region, province_id, province, province_code, town_id, town, has_zones}, count","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"milano"}},{"name":"suggest","description":"Subito's own search suggestions for what a user is typing, each with the category Subito predicts and its probability.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The text typed so far.","on_invalid":"reject","example":"iphone 1"},{"name":"max_rotations","type":"integer","required":false,"description":"Upstream attempts on fresh exits before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{query, category_id, category, probability}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bici"}}]},{"name":"surugaya","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Suruga-ya API — Japan's big second-hand shop (駿河屋, suruga-ya.jp): what it sells trading cards (Pokémon, Yu-Gi-Oh!, One Piece, Duel Masters, Weiß Schwarz, MTG …), games, figures, anime goods, books and media for (new / used / each condition and PSA slab, JPY), its stock, the marketplace shops' offers, and what it pays to buy them (買取価格). No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/surugaya/v1","spec_available":true,"actions":[{"name":"search","description":"Search Suruga-ya's catalogue: cards by game, set, rarity and single/box, or any department (games, figures, books, media …). Each row is one item with Suruga-ya's own new / used price, stock, time sale, the cheapest marketplace offer and the release date.","required_params":[],"optional_params":["query","game","category","card_type","condition","include_sold_out","min_price","max_price","rarity","series","maker","release_year_from","release_year_to","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword as Suruga-ya writes the item (Japanese works best; card numbers such as '034/103', set codes such as 'OP05-060' and English titles also match). Give query, game or category (or a mix).","on_invalid":"reject","example":"ピカチュウ","aliases":["q","keyword","search_word"]},{"name":"game","type":"enum","required":false,"description":"Trading-card game (a Suruga-ya card category): pokemon, pokemon_old_back, yugioh, yugioh_rush_duel, onepiece, duel_masters, mtg, weiss_schwarz, vanguard, digimon, shadowverse_evolve, battle_spirits, wixoss, zx, dragon_ball_heroes, rebirth_for_you, buddyfight, force_of_will, all_cards (every card category), tcg. Any other card game's numeric id from `categories` also works.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム"},{"value":"pokemon_old_back","label":"ポケモンカードゲーム（旧裏面）"},{"value":"yugioh","label":"遊戯王"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル"},{"value":"onepiece","label":"ONE PIECEカードゲーム"},{"value":"duel_masters","label":"デュエルマスターズ"},{"value":"mtg","label":"マジックザギャザリング"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ"},{"value":"vanguard","label":"ヴァンガード"},{"value":"digimon","label":"デジモンカードゲーム"},{"value":"shadowverse_evolve","label":"シャドウバース エボルヴ"},{"value":"battle_spirits","label":"バトルスピリッツ"},{"value":"wixoss","label":"ウィクロス"},{"value":"zx","label":"Z/X"},{"value":"dragon_ball_heroes","label":"ドラゴンボールヒーローズ"},{"value":"rebirth_for_you","label":"Reバース for you"},{"value":"buddyfight","label":"バディファイト"},{"value":"force_of_will","label":"フォース オブ ウィル"},{"value":"all_cards","label":"トレカ・カード類"},{"value":"tcg","label":"TCG"}],"example":"pokemon","value_pattern":"\\d{1,12}"},{"name":"category","type":"string","required":false,"description":"A department alias — games, tv_games, switch, switch2, ps5, portable_games, video, anime_video, music, toys_hobby, toys, hobby, goods_fashion, books, comics, doujin, pc_smartphone, electronics — or any numeric Suruga-ya category id (the `categories` action lists them; search answers the result's own category counts in meta.facets.categories).","on_invalid":"reject","example":"switch2","aliases":["category_id"]},{"name":"card_type","type":"enum","required":false,"description":"Card listings only: single cards, sealed box_pack, box, pack, or single_set.","on_invalid":"reject","allowed_values":[{"value":"single","label":"シングル — single cards"},{"value":"box_pack","label":"ボックス・パック — sealed boxes and packs"},{"value":"box","label":"ボックス — sealed boxes"},{"value":"pack","label":"パック — packs"},{"value":"single_set","label":"シングルカードセット — sets of single cards"}],"example":"single"},{"name":"condition","type":"enum","required":false,"description":"Only items Suruga-ya carries as new (新品), used (中古) or pre-order (予約). It is the item's classification, not the copy on the shelf: a new-classified item whose new copy is sold out still matches and shows its used price.","on_invalid":"reject","allowed_values":[{"value":"new","label":"新品 — new"},{"value":"used","label":"中古 — used"},{"value":"preorder","label":"予約 — pre-order"}],"example":"used"},{"name":"include_sold_out","type":"boolean","required":false,"description":"Also list items nobody has in stock (品切れ ON). Off by default, as on the site: the list then holds items Suruga-ya or a marketplace shop can sell now (a row whose own stock is out still shows the marketplace price). Measured: Weiß Schwarz 51,580 items by default, 81,005 with sold-out ones.","on_invalid":"reject","default":false,"example":true,"aliases":["show_sold_out"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in JPY (tax included), applied by the site to the item's listing price (see sort).","on_invalid":"reject","example":1000,"minimum":0,"maximum":99999999},{"name":"max_price","type":"integer","required":false,"description":"Highest price in JPY (tax included), applied by the site to the item's listing price (see sort).","on_invalid":"reject","example":50000,"minimum":0,"maximum":99999999},{"name":"rarity","type":"string","required":false,"description":"Card rarity, one of the values the site indexes for that game (meta.facets.rarity lists them; Pokémon: C, U, R, RR, RRR, SR, SSR, UR, HR, CHR, S, P, TR, ★, ☆ …). Newer rarities the site does not index (Pokémon SAR, AR) match nothing — put them in `query` instead (e.g. 'ピカチュウ SAR'), they are part of the card name.","on_invalid":"reject","example":"RR"},{"name":"series","type":"string","required":false,"description":"Series / set exactly as the site writes it; meta.facets.series lists them for the result.","on_invalid":"reject","example":"SV ハイクラスパック テラスタルフェスex"},{"name":"maker","type":"string","required":false,"description":"Maker / brand exactly as the site writes it (任天堂, バンダイ, ポケモン …); meta.facets.brand lists them.","on_invalid":"reject","example":"任天堂","aliases":["brand"]},{"name":"release_year_from","type":"integer","required":false,"description":"Released in or after this year.","on_invalid":"reject","example":2023,"minimum":1900,"maximum":2100},{"name":"release_year_to","type":"integer","required":false,"description":"Released in or before this year.","on_invalid":"reject","example":2025,"minimum":1900,"maximum":2100},{"name":"sort","type":"enum","required":false,"description":"Order of the rows. The site orders (and price-filters) by its own listing price for the item, which is not always the cheapest price on the row: it can be the regular price during a time sale, the marketplace price when Suruga-ya's own stock is out, or another condition's price (a PSA copy): on page 2 of One Piece ルフィ by price_desc, GN140180 sits at 16,800 (its PSA 10 copy) although its plain used copy is 2,870.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's relevance order (default)"},{"value":"price_asc","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"},{"value":"updated_desc","label":"Most recently updated first"},{"value":"release_desc","label":"Newest release first"},{"value":"release_asc","label":"Oldest release first"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number, 24 rows a page; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: id (Suruga-ya's item id / 管理番号 — give it to `product`, `offers`, `buyback`), url, name (as the site writes it, Japanese kept), category_label (the site's line such as 'ポケモンカードゲーム/雷/MEGA 拡張パック 30th CELEBRATION': game / type / set for cards, platform for games), maker, release_date (ISO; release_date_raw as printed), price_jpy (lowest of Suruga-ya's own prices on the row), new_price_jpy, used_price_jpy, prices[]{condition (new/used/preorder/other), condition_label, price_jpy, price_max_jpy (when the row prints a range across conditions), regular_price_jpy + on_sale (time sale)}, list_price_jpy (定価), in_stock (Suruga-ya's own stock; false = 品切れ), time_sale{period, starts_at, ends_at}, other_conditions[] (the row's 'other conditions' tooltip, e.g. Bランク, 【PSA/GEM MT 10】), marketplace_min_price_jpy + marketplace_count + marketplace_kinds (the cheapest マケプレ shop offer and how many), badges[] (新入荷 …), listing_branch_number / listing_shop_id (when the row links to one copy), image, price_includes_tax (true), currency (JPY). meta: total (the site's own count), page, per_page (24), last_page, has_more, filters_applied, facets{categories[{id,label,count}], condition, card_type, series, rarity, brand, year_range, price, badge, discount_rate ([{value, label, count (the site's approximate count such as 約300)}] — value is what the matching parameter takes)}, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"ピカチュウ","game":"pokemon"}},{"name":"product","description":"One Suruga-ya item in full: every sale variant (new / used / grade) with its price and stock count, the other conditions and PSA-graded copies with their prices, the cheapest marketplace offer, the buy price Suruga-ya publishes (買取価格), JAN barcode, model number, list price, maker, release date, category path, description and images.","required_params":["product_id"],"optional_params":["branch_number"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Suruga-ya item id (a search row's `id`, e.g. GU880048 or 112000012) or a suruga-ya.jp item URL.","on_invalid":"reject","example":"GU880048","aliases":["id","url","shinaban"]},{"name":"branch_number","type":"string","required":false,"description":"Read one specific condition / graded copy of the item (an `other_conditions[].branch_number` from a previous call); its own stock count then appears in `variants`.","on_invalid":"reject","example":"0205","value_pattern":"\\d{4}"}],"returns":"product{id, url, name, category_label, category_path[{id, name}], maker, release_date, release_date_raw, jan (JAN / EAN-13 barcode when the item has one; null for most single cards), model_number (型番), management_numbers[]{condition_label, number} (管理番号 per new / used stock line), list_price_jpy (定価), price_jpy (lowest in-stock own price), new_price_jpy, used_price_jpy, in_stock, stock_qty (Suruga-ya's own units, all variants), variants[]{condition, condition_label, branch_number, price_jpy, regular_price_jpy, on_sale, stock_qty, in_stock, tags[] (値下げ …), graded, grader, grade, grade_label}, other_conditions[]{branch_number, condition, condition_label (e.g. 中古 【PSA/GEM MT 10】, Bランク), price_jpy, url, graded, grader, grade, grade_label}, marketplace_count + marketplace_min_price_jpy (the page's 他のショップ line: other shops, Suruga-ya's own stock not counted), buy_price_jpy (what Suruga-ya pays, only when the page publishes it; null = not published / quoted by e-mail), buy_price_note, attributes{label: value} (the detail table: 声優, 作家, 機種 …), description, images[], image, schema_offers[], price_includes_tax, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"112000012"}},{"name":"offers","description":"The marketplace (マケプレ) offers for one item: each Suruga-ya branch store and partner shop that lists it, with price, condition note, stock, shipping time, free shipping and the shop's rating.","required_params":["product_id"],"optional_params":["condition","sort","page"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Suruga-ya item id (a search row's `id`, e.g. GU880048 or 112000012) or a suruga-ya.jp item URL.","on_invalid":"reject","example":"GU880048","aliases":["id","url","shinaban"]},{"name":"condition","type":"enum","required":false,"description":"Which offers: all (default), new, used, preorder, premium, wakeari (flawed / as-is).","on_invalid":"reject","allowed_values":[{"value":"all","label":"Every offer (default)"},{"value":"new","label":"新品 — new"},{"value":"used","label":"中古 — used"},{"value":"preorder","label":"予約 — pre-order"},{"value":"premium","label":"プレミア — premium"},{"value":"wakeari","label":"ワケアリ — flawed / as-is"}],"default":"all","example":"used"},{"name":"sort","type":"enum","required":false,"description":"Order of the offers.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Price low to high (default)"},{"value":"price_desc","label":"Price high to low"},{"value":"rating","label":"Shops with the most reviews first"}],"default":"price_asc","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 20 offers a page; meta.has_more says if there is another.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":200}],"returns":"rows[]: shop_id, shop_name, is_surugaya (true = Suruga-ya's own web stock, listed among the shops; the product page's marketplace_min_price_jpy leaves this row out), shop_rating (0-5), shop_review_count, shop_address (the shop's published address; branch stores and business sellers), condition (new/used/preorder), condition_label (the shop's condition note), branch_number, price_jpy, regular_price_jpy, stock_qty, free_shipping, ships_in_days_min, ships_in_days_max, campaign{name, starts_at, ends_at}, on_time_sale, listed_at, updated_at (JST), images[] (the shop's own photos), url, graded, grader, grade, grade_label. meta: page, per_page (20), has_more, condition, sort.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"109002738"}},{"name":"buyback_search","description":"Suruga-ya's buy-back price list (買取): what Suruga-ya PAYS for an item, searched by name, JAN / ISBN barcode or model number. A BUY price — never the sale price.","required_params":["query"],"optional_params":["search_by","game","category","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"What to look up: a name / keyword, a JAN / ISBN barcode or a model number (型番) — say which with search_by.","on_invalid":"reject","example":"ピカチュウ","aliases":["q","keyword","search_word","jan","model_number"]},{"name":"search_by","type":"enum","required":false,"description":"How to read `query`: keyword (default), jan (JAN / ISBN barcode) or model_number.","on_invalid":"reject","allowed_values":[{"value":"keyword","label":"Name / keyword (default)"},{"value":"jan","label":"JAN / ISBN barcode"},{"value":"model_number","label":"Model number (型番)"}],"default":"keyword","example":"jan"},{"name":"game","type":"enum","required":false,"description":"Narrow to one card game (same values as search).","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム"},{"value":"pokemon_old_back","label":"ポケモンカードゲーム（旧裏面）"},{"value":"yugioh","label":"遊戯王"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル"},{"value":"onepiece","label":"ONE PIECEカードゲーム"},{"value":"duel_masters","label":"デュエルマスターズ"},{"value":"mtg","label":"マジックザギャザリング"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ"},{"value":"vanguard","label":"ヴァンガード"},{"value":"digimon","label":"デジモンカードゲーム"},{"value":"shadowverse_evolve","label":"シャドウバース エボルヴ"},{"value":"battle_spirits","label":"バトルスピリッツ"},{"value":"wixoss","label":"ウィクロス"},{"value":"zx","label":"Z/X"},{"value":"dragon_ball_heroes","label":"ドラゴンボールヒーローズ"},{"value":"rebirth_for_you","label":"Reバース for you"},{"value":"buddyfight","label":"バディファイト"},{"value":"force_of_will","label":"フォース オブ ウィル"},{"value":"all_cards","label":"トレカ・カード類"},{"value":"tcg","label":"TCG"}],"example":"pokemon","value_pattern":"\\d{1,12}"},{"name":"category","type":"string","required":false,"description":"Narrow to a department alias or numeric category id (same values as search).","on_invalid":"reject","example":"tv_games","aliases":["category_id"]},{"name":"sort","type":"enum","required":false,"description":"Order of the rows.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's relevance order (default)"},{"value":"price_desc","label":"Buy price high to low"},{"value":"price_asc","label":"Buy price low to high"},{"value":"updated_desc","label":"Most recently updated first"},{"value":"release_desc","label":"Newest release first"},{"value":"release_asc","label":"Oldest release first"}],"default":"relevance","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number, 20 rows a page.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":1000}],"returns":"rows[]: id (same id as the sale side — give it to `product`), url, sale_url, name, category_label, flags[] (新規追加 …), release_date, model_number, jan, buy_price_jpy, buy_prices[]{grade_label, buy_price_jpy}, quote_by_email (true = Suruga-ya quotes this one by e-mail and prints no price), image, currency. meta: total, page, per_page (20), last_page, has_more, search_by, sort.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"ゼルダ","category":"tv_games"}},{"name":"buyback","description":"One item's buy-back page: the buy price (買取価格), JAN, model number, list price, maker, release date and category.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"A Suruga-ya item id (a search row's `id`, e.g. GU880048 or 112000012) or a suruga-ya.jp item URL.","on_invalid":"reject","example":"GU880048","aliases":["id","url","shinaban"]}],"returns":"buyback{id, url, sale_url, name, category_label, category_path[], buy_price_jpy, buy_prices[]{grade_label, buy_price_jpy}, quote_by_email, jan, model_number, maker, release_date, list_price_jpy, description, image, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"112000012"}},{"name":"categories","description":"Suruga-ya's category ids: every trading-card game (TCG, arcade cards, collection cards, supplies — 150+) and the site's departments with their sub-categories. Give an id to search as `game` or `category`.","required_params":[],"optional_params":[],"params":[],"returns":"card_games[]{id, name, group (the site's own section: TCG・ACG, その他TCG, その他アーケード …), alias (our short name when there is one)}, departments[]{id, name, children[]{id, name}}, aliases{games{alias: id}, departments{alias: id}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"swappa","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Swappa API — search used and refurbished phones, tablets, laptops, watches, cameras, drones and consoles on swappa.com, and pull a full listing with price, condition, battery health, storage/carrier/colour variant, GTIN, model number, device weight and dimensions, the complete photo gallery, seller rating and ship-from location — no API key or account required","version":"1.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/swappa/v1","spec_available":true,"actions":[{"name":"search","description":"Search Swappa for live listings. Give a free-text `query` ('iphone 15 pro', 'macbook pro 14', 'playstation 5') or an exact `model` slug, and get back that model's listings for sale right now — each with Swappa's own listing code, price, condition grade, battery health, storage / memory / colour / carrier / model number, photo count, seller name, seller star-rating and ship-from city. Narrow with condition, carrier, colour, storage, memory, processor, model_number, edition, and the warranty / card-payment / individual-seller / Phonecheck / international-shipping switches; sort by price or newest. Paginated 50 per page. Every filter value a model actually supports is returned in `filters_available`, so you never have to guess.","required_params":[],"optional_params":["query","model","max_results","page","sort","condition","carrier","color","storage","memory","processor","model_number","edition","with_warranty","accepts_stripe","exclude_businesses","phone_check_certified","international"],"params":[{"name":"query","type":"string","required":false,"description":"What to look for on Swappa — brand, model, or model + variant ('iphone 15 pro', 'macbook pro 14', 'playstation 5', 'canon eos r5'). Swappa searches its CATALOG, so the query is resolved to the best-matching product model and that model's live listings are returned; every other candidate model comes back in `models[]` so you can re-run against an exact `model` slug. Storage and carrier words in the query ('iphone 14 pro 256gb unlocked', 'galaxy s23 128gb verizon', 'pixel 8 t-mobile') are recognised, taken out of the model search and applied as Swappa's own storage / carrier filters; every returned listing is also checked against them, and one whose own storage or carrier says otherwise is left out. A named carrier follows Swappa's own carrier filter, which also lists unlocked phones (they work on that carrier); a phone locked to a different carrier is never returned (`meta.carrier_includes_unlocked`, `meta.unlocked_rows`). `meta.query_terms_used`, `meta.filters_from_query` and `meta.dropped_contradicting` say exactly what was done. If the model is not sold in that variant the result is empty and `meta.filters_unavailable` lists the values it does come in. An explicit `storage` / `carrier` parameter always takes precedence. Provide `query` OR `model`.","on_invalid":"reject","example":"iphone 15 pro","aliases":["q","keyword","text","search"]},{"name":"model","type":"string","required":false,"description":"A Swappa product-model slug, exactly as it appears in a swappa.com/listings/<slug> URL (e.g. apple-iphone-15, samsung-galaxy-s24-ultra, macbook-pro-2023-14, playstation-5). Skips keyword resolution — one fewer request and a stable, repeatable target. Provide `model` OR `query`.","on_invalid":"reject","example":"apple-iphone-15","aliases":["model_slug","slug","product","product_slug"]},{"name":"max_results","type":"integer","required":false,"description":"How many listings to return (1-200). Swappa paginates 50 per page; asking for more than 50 fetches the next pages automatically.","on_invalid":"ignore","default":50,"minimum":1,"maximum":200,"aliases":["limit","max"]},{"name":"page","type":"integer","required":false,"description":"Which result page to start from (1-based, 50 listings per page). Page until meta.pagination.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Swappa's default (omit this) is its own relevance/featured ranking.","on_invalid":"reject","allowed_values":[{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"listing_created_newest","label":"Newest listings first"},{"value":"listing_created_oldest","label":"Oldest listings first"}],"example":"price_low","aliases":["order","sort_by"]},{"name":"condition","type":"enum","required":false,"description":"Only listings in this condition grade. Swappa grades devices New / Mint / Good / Fair; simpler product lines (AirPods, drones) only offer New / Used. Which grades a given model supports is returned in `filters_available.condition`.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"mint","label":"Mint"},{"value":"good","label":"Good"},{"value":"fair","label":"Fair"},{"value":"used","label":"Used (accessory-style products)"}],"example":"mint"},{"name":"carrier","type":"string","required":false,"description":"Connectivity / carrier lock — unlocked, att, t-mobile, verizon, mint for phones, watches and cellular tablets, and wi-fi vs a carrier for Wi-Fi-only tablets and Surface-style laptops. The exact values a model supports come back in `filters_available.carrier`.","on_invalid":"ignore","example":"unlocked"},{"name":"color","type":"string","required":false,"description":"Device colour (lowercase, hyphenated — e.g. black, space-gray, midnight). Per-model values are in `filters_available.color`.","on_invalid":"ignore","example":"black"},{"name":"storage","type":"string","required":false,"description":"Storage capacity, written the way Swappa writes it: 128gb, 256gb, 512gb, 1tb. Per-model values are in `filters_available.storage`.","on_invalid":"ignore","example":"256gb"},{"name":"memory","type":"string","required":false,"description":"RAM / unified memory, for laptops, tablets and phones that list it (16gb, 32gb…). Per-model values are in `filters_available.memory`.","on_invalid":"ignore","example":"16gb","aliases":["ram"]},{"name":"processor","type":"string","required":false,"description":"Processor variant, for computers (e.g. apple-m2-pro-12-core). Per-model values are in `filters_available.processor`.","on_invalid":"ignore","example":"apple-m2-pro-12-core","aliases":["cpu","chip"]},{"name":"model_number","type":"string","required":false,"description":"Swappa's 'Model' facet — normally the manufacturer/regulatory model number (A2846 for an iPhone 15, G1MNW for a Pixel 8 Pro, A2727 - Cellular for an Apple Watch SE), but on product lines that are sized rather than modelled it is that variant label instead (an Oura Ring lists Size 8 / Size 10). Pass the human value — or the opaque token from `filters_available.modeln` — either works.","on_invalid":"ignore","example":"A2846","aliases":["modeln","model_no"]},{"name":"edition","type":"string","required":false,"description":"Product-line edition, where Swappa defines one (Aluminum vs Stainless for Apple Watch, USB-C vs Lightning for AirPods, Standard Edition for a console). Human label or the token from `filters_available.edition`.","on_invalid":"ignore","example":"Aluminum"},{"name":"with_warranty","type":"boolean","required":false,"description":"Only listings the seller sells with a warranty.","on_invalid":"ignore","default":false},{"name":"accepts_stripe","type":"boolean","required":false,"description":"Only listings whose seller takes credit-card (Stripe) payment.","on_invalid":"ignore","default":false,"aliases":["accepts_card"]},{"name":"exclude_businesses","type":"boolean","required":false,"description":"Exclude business/store sellers, leaving individual sellers only.","on_invalid":"ignore","default":false,"aliases":["individuals_only"]},{"name":"phone_check_certified","type":"boolean","required":false,"description":"Only listings the seller has certified with a Phonecheck diagnostic report (offered on phones and tablets).","on_invalid":"ignore","default":false,"aliases":["phonecheck"]},{"name":"international","type":"boolean","required":false,"description":"Only listings whose seller ships internationally.","on_invalid":"ignore","default":false,"aliases":["international_shipping"]}],"returns":"product{slug, name, brand, image, description, url, guide_url, rating{average, review_count}, price_range{low, high, currency}, offer_count, availability, in_stock} + listings[]{listing_id, url, title, headline, price, currency, price_valid_until, availability, in_stock, condition, battery_health_pct, storage, memory, color, carrier, model_number, processor, edition, gtin, quantity, image, image_count, featured, phonecheck_certified, business_seller, international_shipping, payment_methods[], attributes[]{label, value}, seller{name, type, profile_id, profile_url, rating, ratings_count, location, badges[]}, product_slug, brand} + filters_available{condition[], carrier[], color[], storage[], memory[], processor[], modeln[], edition[], sort[], flags[]} (each {value, label}) + models[]{slug, name, image, min_price, preset_filters, url} — the other catalog matches, returned only when you searched by free-text `query`. meta.pagination{page, per_page, total_results, returned, has_more, next_page}. Notes: `gtin` is only present when the seller/catalog supplied one; `battery_health_pct` is null when a seller left it unreported or the product has no battery grade; `memory`, `processor`, `carrier`, `model_number` and `image_count` exist only for the categories Swappa publishes them for, and are null otherwise.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"model":"apple-iphone-15","max_results":25}},{"name":"price","description":"Re-check ONE listing's price, availability and condition, cheaply. Give it the Swappa listing code you already hold and it returns what the seller is asking right now, whether the listing is still buyable, and the condition grade — and nothing else: no photos, description, specs, seller block or reviews. Built for refreshing a catalogue you already have rather than discovering listings. It reads the small slide-over card Swappa's own grid fetches on hover instead of the whole listing page, so it costs a fraction of `product_detail` — measured live on nine listings across nine product lines: 6.8-11.5 KB against 122.3-171.0 KB for a full `product_detail` (10.7x-19.7x), or 73.5-82.6 KB with its reviews switched off (6.4x-10.9x). Remember what a Swappa listing IS: one specific used device from one seller, not a catalogue entry — when it sells, Swappa takes it down, and this action then returns NOT_FOUND. That is the answer, not a failure: it means the unit you were tracking is gone.","required_params":[],"optional_params":["listing_id","url"],"params":[{"name":"listing_id","type":"string","required":false,"description":"REQUIRED. Swappa's own listing code — the value in a swappa.com/listing/view/<code> URL and the `listing_id` on every `search` row. An opaque uppercase alphanumeric string (e.g. LAGY58046); never numeric. It identifies ONE physical used device from ONE seller: two identical phones in the same condition are two codes at two prices. Provide `listing_id` OR `url`.","on_invalid":"ignore","example":"LAGY58046","aliases":["id","code","listing_code","product_id"]},{"name":"url","type":"string","required":false,"description":"Full swappa.com listing URL — an alternative to `listing_id`.","on_invalid":"ignore","example":"https://swappa.com/listing/view/LAGY58046","aliases":["listing_url","product_url"]}],"returns":"listing_id, url, current_price, regular_price, currency, on_sale, in_stock, condition, condition_schema. Honest caveats, all measured: (1) `regular_price` and `on_sale` are ALWAYS null, and that is a fact about Swappa rather than a gap here — a listing carries ONE seller-set asking price with no struck-through or previous price anywhere on the card, the listing page or its structured data, so filling them in would be inventing a discount; use the price history on a model's own Swappa page if you need a reference price. (2) `in_stock` is true while Swappa still offers Buy Now on the listing and null — never false — otherwise, because silence is not an out-of-stock claim; a listing that has actually sold is removed by Swappa and returns NOT_FOUND. (3) `condition` is Swappa's own grade (New / Mint / Good / Fair, or Used on simpler product lines) and `condition_schema` is the schema.org enum it marks up beside it. On a used-goods marketplace the grade is what decides whether a price is comparable at all, which is why it is here and the specs are not. COMPARE ON `condition`, not on `condition_schema`: Swappa publishes TWO schema.org condition statements for a listing and they can disagree with each other — on 1 of 9 listings measured, its page microdata said UsedCondition while its JSON-LD offer said RefurbishedCondition for the same listing in the same second. `price` reports the microdata value (that is what the card carries) and `product_detail` reports the JSON-LD one, so those two fields can differ between the actions. The human grade was identical on both surfaces for all 9. (4) A listing code Swappa does not have returns NOT_FOUND, never a substituted listing — verified, and the code in the answer is compared against the code you asked for as well.","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"LAGY58046"}},{"name":"product_detail","description":"Get one Swappa listing in full, by its listing code or its swappa.com URL — the asking price and currency, quantity available, condition grade with Swappa's own condition criteria, the seller's damage description, battery health, storage / memory / colour / carrier / model number / processor, GTIN and GTIN-13, the COMPLETE photo gallery at full resolution, carrier compatibility, shipping (free-shipping flag, rate, ship-from city, handling time, international), payment methods, returns policy, listing created / updated / expiry dates, and the seller (display name, individual-vs-business, profile, star rating, number of ratings, location). Also returns the product the listing belongs to: brand, catalog slug, star rating and review count, top buyer reviews, and — for models with a Swappa product guide — the device spec tables including width, height, depth and weight in grams and ounces, for shipping-cost calculation.","required_params":[],"optional_params":["listing_id","url","include_reviews","max_reviews"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Swappa's own listing code — the value shown on the listing page and in the /listing/view/<code> URL, and the `listing_id` returned by search. An opaque uppercase string (e.g. LAGY58046); never numeric. Provide `listing_id` OR `url`.","on_invalid":"reject","example":"LAGY58046","aliases":["id","code","listing_code","product_id"]},{"name":"url","type":"string","required":false,"description":"Full swappa.com listing URL — an alternative to `listing_id`.","on_invalid":"ignore","example":"https://swappa.com/listing/view/LAGY58046","aliases":["listing_url","product_url"]},{"name":"include_reviews","type":"boolean","required":false,"description":"Include the product's top buyer reviews inline (`product.top_reviews`). These are reviews of the MODEL written by Swappa buyers — Swappa publishes no per-listing reviews. Costs one extra page fetch; set false for the fastest possible response.","on_invalid":"ignore","default":true,"aliases":["with_reviews"]},{"name":"max_reviews","type":"integer","required":false,"description":"How many of the product's most recent reviews to include (1-20).","on_invalid":"ignore","default":6,"minimum":1,"maximum":20,"aliases":["review_limit"]}],"returns":"listing{listing_id, url, title, headline, description, damage_description, price, currency, price_valid_until, quantity, availability, in_stock, condition, condition_schema, condition_criteria[], battery_health_pct, storage, memory, color, carrier, model_number, processor, attributes[]{label, value}, facet_values, phonecheck_certified, badges[], approved, featured, images[], image_count, carrier_compatibility{network, compatible_carriers[]}, shipping{free, rate, currency, ships_from, handling, international}, payment_methods[], returns_policy[], date_created, date_updated, date_expires (all three ISO YYYY-MM-DD), seller{name, type, profile_id, profile_url, rating, ratings_count, location, badges[]}} + product{slug, name, brand, gtin, gtin13, image, url, guide_url, catalog_url, rating{average, review_count}, specs[]{group, name, value, values[]}, size_and_weight{width_mm, height_mm, depth_mm, weight_g, weight_oz}, top_reviews[]{rating, text, author, date}}. Honest caveats: `gtin`/`gtin13` appear only when Swappa's catalog carries a barcode for that exact variant (common on phones and consoles, usually absent on accessories, drones and cameras); `specs` and `size_and_weight` exist only for models that have a Swappa product guide (phones, tablets, laptops, watches — not cameras, drones, consoles, audio); `top_reviews` exists only where Swappa publishes a reviews page for the model — for catalog-only products it publishes the aggregate `rating` but no review text, and `meta.fetched.reviews` then says `not_published` rather than pretending the fetch failed; `battery_health_pct` is null unless the seller reported it; `carrier`, `model_number`, `memory` and `processor` are per-category. Category-specific descriptors that have no cross-category meaning — an Apple Watch case material, an AirPods connector, a console edition, a 5G band, an iPad glass option — are returned verbatim and in page order in `attributes[]` with a null label (search labels those with Swappa's own facet name, because the filter vocabulary is published on the search page and not on a listing page). Nothing the listing page shows is dropped.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"LAGY58046"}}]},{"name":"swappie","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Swappie API — live data from swappie.com, Europe's largest refurbished-Apple first-party store (Helsinki, 23 countries). Browse the refurbished iPhone, iPad, MacBook and AirPods catalogue of any national storefront, then open a model for its COMPLETE live price table: every SKU (storage x colour x cosmetic grade x battery type x VAT scheme) with its own price, its unit stock count, a per-warehouse stock breakdown and the timestamp Swappie last changed that price. Also returns Swappie's trade-in payouts — what it PAYS for a used iPhone or iPad in each market. Prices and stock are per country and really differ. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/swappie/v1","spec_available":true,"actions":[{"name":"search","description":"Browse one device catalogue of one Swappie market with the storefront's own filters and sort: one row per MODEL with its from-price in the market's currency, the colours and capacities it is stocked in, its bestseller flag and Swappie's own popularity score. The whole category arrives in a single request (30 iPhone, 17 iPad, 16 MacBook, 2 AirPods models on 2026-10-07), so there is no paging to manage. Every filter offered here was measured against an unfiltered call in the SAME run and really changes the result; filters the source accepts and then ignores are not exposed, and any value the source drops is reported in `meta.warnings` instead of passing as a successful filtered call. `grade` is special: it also re-quotes each model's from-price AT that grade. There is no keyword search on swappie.com and none is faked here — use `models` for an exact model.","required_params":["market"],"optional_params":["category","models","colors","storages","grade","camera","size","min_price","max_price","release_year","sort"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Swappie storefront to read, by the site's own locale slug. Prices, stock and currency are PER MARKET and really differ: on 2026-10-07 the same iPhone 15 128 GB grade D read EUR 425.00 on `de`/`nl`, EUR 435.00 on `it` and EUR 445.00 on `fi`/`en`, and `se` quoted SEK 4,999.00. Five currencies are live: EUR (34 locales), SEK, DKK, PLN, CZK (2 each). A country with two languages has two slugs (fi / fi-sv / fi-en) that serve the same inventory in different wording. This is a CLOSED list on purpose: swappie.com answers an unknown locale with the international EUR site and HTTP 200, so a typo would silently bill you for the wrong country's prices.","on_invalid":"reject","allowed_values":[{"value":"en","label":"EU · en · EUR"},{"value":"at","label":"AT · de · EUR"},{"value":"at-en","label":"AT · en · EUR"},{"value":"be","label":"BE · nl · EUR"},{"value":"be-fr","label":"BE · fr · EUR"},{"value":"be-en","label":"BE · en · EUR"},{"value":"cz","label":"CZ · cs · CZK"},{"value":"cz-en","label":"CZ · en · CZK"},{"value":"de","label":"DE · de · EUR"},{"value":"de-en","label":"DE · en · EUR"},{"value":"dk","label":"DK · da · DKK"},{"value":"dk-en","label":"DK · en · DKK"},{"value":"ee","label":"EE · et · EUR"},{"value":"ee-en","label":"EE · en · EUR"},{"value":"es","label":"ES · es · EUR"},{"value":"es-en","label":"ES · en · EUR"},{"value":"fi","label":"FI · fi · EUR"},{"value":"fi-sv","label":"FI · sv · EUR"},{"value":"fi-en","label":"FI · en · EUR"},{"value":"fr","label":"FR · fr · EUR"},{"value":"fr-en","label":"FR · en · EUR"},{"value":"gr-en","label":"GR · en · EUR"},{"value":"hr-en","label":"HR · en · EUR"},{"value":"hu-en","label":"HU · en · EUR"},{"value":"ie","label":"IE · en · EUR"},{"value":"it","label":"IT · it · EUR"},{"value":"it-en","label":"IT · en · EUR"},{"value":"lt-en","label":"LT · en · EUR"},{"value":"lu-en","label":"LU · en · EUR"},{"value":"lv-en","label":"LV · en · EUR"},{"value":"mt-en","label":"MT · en · EUR"},{"value":"nl","label":"NL · nl · EUR"},{"value":"nl-en","label":"NL · en · EUR"},{"value":"pl","label":"PL · pl · PLN"},{"value":"pl-en","label":"PL · en · PLN"},{"value":"pt","label":"PT · pt · EUR"},{"value":"pt-en","label":"PT · en · EUR"},{"value":"se","label":"SE · sv · SEK"},{"value":"se-en","label":"SE · en · SEK"},{"value":"si-en","label":"SI · en · EUR"},{"value":"sk","label":"SK · sk · EUR"},{"value":"sk-en","label":"SK · en · EUR"}],"default":"fi","example":"de","aliases":["locale","site","country"]},{"name":"category","type":"enum","required":false,"description":"Which device catalogue to browse. The whole category comes back in one request (no paging): 30 + 17 + 16 + 2 = 65 models in stock across the four on 2026-10-07. Filters differ by category — colour, storage, price and model work everywhere, while `camera` and `size` are iPhone concepts.","on_invalid":"reject","allowed_values":[{"value":"iphone","label":"refurbished iPhone (30 models on 2026-10-07)"},{"value":"ipad","label":"refurbished iPad (17 models)"},{"value":"macbook","label":"refurbished MacBook (16 models)"},{"value":"airpods","label":"refurbished AirPods (2 models)"}],"default":"iphone","example":"iphone","aliases":["device_category","product_category","type"]},{"name":"models","type":"array","required":false,"description":"Keep only these models. The source's own model names, several allowed. Measured on `iphone`/`en`: 30 models unfiltered -> 1 for ['iPhone 15'] -> 2 for ['iPhone 15','iPhone 16'].","on_invalid":"reject","example":["iPhone 15","iPhone 16"],"aliases":["model","model_names"]},{"name":"colors","type":"array","required":false,"description":"Keep only models offered in these colour families (Swappie's own tokens, which group its shade names: `black` covers Black, Graphite, Jet Black, Midnight and Space Black). Measured on `iphone`/`en`: 30 -> 4 for ['yellow'] -> 16 for ['blue','yellow'].","on_invalid":"reject","allowed_values":[{"value":"white","label":"white"},{"value":"black","label":"black"},{"value":"silver","label":"silver"},{"value":"gray","label":"gray"},{"value":"midnight","label":"midnight"},{"value":"starlight","label":"starlight"},{"value":"skyBlue","label":"skyBlue"},{"value":"gold","label":"gold"},{"value":"roseGold","label":"roseGold"},{"value":"pink","label":"pink"},{"value":"purple","label":"purple"},{"value":"blue","label":"blue"},{"value":"red","label":"red"},{"value":"orange","label":"orange"},{"value":"yellow","label":"yellow"},{"value":"mint","label":"mint"},{"value":"green","label":"green"}],"example":["yellow"],"aliases":["color","colour","colours"]},{"name":"storages","type":"array","required":false,"description":"Keep only models offered with these capacities, in GB (32, 64, 128, 256, 512, 1024, 2048). Measured on `iphone`/`en`: 30 -> 6 for [64] -> 25 for [512] -> 29 for [128,256].","on_invalid":"reject","example":[512],"aliases":["storage","storage_gb","capacity"]},{"name":"grade","type":"enum","required":false,"description":"Only models available in this cosmetic grade, AND quote each model's from-price AT that grade. This filter moves the price, not just the row count: measured on `iphone`/`en` in one run, the iPhone 14 card read EUR 319.00 at D, 325.00 at C, 335.00 at B and 389.00 at A, and the model count went 30 -> 24 (D), 30 (C), 29 (B), 29 (A). Use `detail` for the full per-grade price table of one model.","on_invalid":"reject","allowed_values":[{"value":"A","label":"Premium — like new"},{"value":"B","label":"Excellent"},{"value":"C","label":"Good"},{"value":"D","label":"Acceptable — the cheapest tier"}],"example":"A","aliases":["grades","condition","cosmetic_grade"]},{"name":"camera","type":"enum","required":false,"description":"iPhone camera count. Measured on `iphone`/`en`: 30 -> single 5, dual 12, triple 13 (5+12+13 = 30, so it partitions the catalogue exactly). The source silently ignores any other value, e.g. `3`, so only these three are accepted.","on_invalid":"reject","allowed_values":[{"value":"single","label":"one rear camera"},{"value":"dual","label":"two rear cameras"},{"value":"triple","label":"three rear cameras"}],"example":"triple","aliases":["cameras","camera_type"]},{"name":"size","type":"enum","required":false,"description":"iPhone body size class, Swappie's own three buckets. Measured on `iphone`/`en`: 30 -> small 4, normal 17, large 9 (4+17+9 = 30). 'regular' and 'medium' are NOT the source's words and are silently dropped by it, so they are rejected here.","on_invalid":"reject","allowed_values":[{"value":"small","label":"mini / SE bodies"},{"value":"normal","label":"standard body"},{"value":"large","label":"Plus / Max bodies"}],"example":"large","aliases":["sizes","screen_size_class"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in the market's own currency and MAJOR units (800 = EUR 800, not 80000). Like every filter here it selects VARIANTS, so a model survives when any of its variants is in range and is then quoted at the cheapest IN-RANGE variant. Measured on `iphone`/`en`: 30 models -> 12 at min_price 800. On `macbook`/`en` all 16 survived but were re-quoted (MacBook Air M1 13: EUR 609.00 -> 959.00), which is the same rule seen from the other side.","on_invalid":"reject","example":800,"minimum":0,"aliases":["minPrice","price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest from-price, same units as `min_price`. Measured on `iphone`/`en`: 30 models -> 6 at max_price 250. Combine with `min_price` for a band.","on_invalid":"reject","example":250,"minimum":0,"aliases":["maxPrice","price_max"]},{"name":"release_year","type":"array","required":false,"description":"Keep only models Apple released in these calendar years. Measured on `iphone`/`en`: 30 -> 4 for [2023] and 4 for [2024]. NOTE the asymmetry the source has: this FILTER takes real years, but the row field the source calls `releaseYear` is an internal rank on phones and tablets — this engine publishes that raw number as `catalog_rank` and leaves `release_year` null rather than return a wrong year.","on_invalid":"reject","example":[2023],"aliases":["release_years","releaseYear","year"]},{"name":"sort","type":"enum","required":false,"description":"Row order, the storefront's own seven values. Verified to really reorder on `iphone`/`en` in one run: `lowest` opened at EUR 145.00 (iPhone SE 2020), `highest` at EUR 1,149.00 (iPhone 17 Pro Max) and `newest` at the iPhone 17e. Any other word is silently ignored by the source, so it is rejected here.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Swappie's own popularity order (the site default)"},{"value":"lowest","label":"cheapest from-price first"},{"value":"highest","label":"most expensive from-price first"},{"value":"newest","label":"newest model first"},{"value":"oldest","label":"oldest model first"},{"value":"promoted","label":"promoted models first"},{"value":"promoted_popularity","label":"promoted, then popularity"}],"default":"popular","example":"lowest","aliases":["sorting","order"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: the only seller is Swappie Oy, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"models[]{model, model_slug, device_category, sku, from_price, from_price_minor, currency, from_price_display, reference_price, reference_price_display, is_discounted, discount_display, from_price_storage_gb, available_colors[], available_storages_gb[], is_bestseller, popularity_score, catalog_rank, release_year, ram_gb, cpu_cores, gpu_cores, sim_type, connector_type, anc_type, wireless_charging_type, headphone_configs[], image_url, url, category_url, detail_params{market, model}} + meta{market, country, language, currency, category, total_models, filters_applied{}, filters_ignored[], price_range{min,max}, seller{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"de","category":"iphone","sort":"lowest"}},{"name":"detail","description":"The COMPLETE live offer table of one model in one market, straight from the storefront's own inventory call: one row per sellable SKU — storage x colour x cosmetic grade (A Premium / B Excellent / C Good / D Acceptable) x battery type x VAT scheme — each with its own price, its own unit stock count, the stock split across Swappie's warehouses (Finland, Germany, the Italian 3PL and the in-transit buckets) and the timestamp Swappie last repriced it. Measured on 2026-10-07: 106 SKUs for iPhone 15, 128 for MacBook Air M1 13, 18 for iPad Air 7 2025 13, 2 for AirPods 4. MacBook rows also carry RAM, CPU/GPU cores, chip variant, screen size and the keyboard language and layout of the actual unit. The summary gives the cheapest price per grade so you can see the condition ladder at a glance. An unknown model name is NOT_FOUND.","required_params":["market","model"],"optional_params":["in_stock_only"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Swappie storefront to read, by the site's own locale slug. Prices, stock and currency are PER MARKET and really differ: on 2026-10-07 the same iPhone 15 128 GB grade D read EUR 425.00 on `de`/`nl`, EUR 435.00 on `it` and EUR 445.00 on `fi`/`en`, and `se` quoted SEK 4,999.00. Five currencies are live: EUR (34 locales), SEK, DKK, PLN, CZK (2 each). A country with two languages has two slugs (fi / fi-sv / fi-en) that serve the same inventory in different wording. This is a CLOSED list on purpose: swappie.com answers an unknown locale with the international EUR site and HTTP 200, so a typo would silently bill you for the wrong country's prices.","on_invalid":"reject","allowed_values":[{"value":"en","label":"EU · en · EUR"},{"value":"at","label":"AT · de · EUR"},{"value":"at-en","label":"AT · en · EUR"},{"value":"be","label":"BE · nl · EUR"},{"value":"be-fr","label":"BE · fr · EUR"},{"value":"be-en","label":"BE · en · EUR"},{"value":"cz","label":"CZ · cs · CZK"},{"value":"cz-en","label":"CZ · en · CZK"},{"value":"de","label":"DE · de · EUR"},{"value":"de-en","label":"DE · en · EUR"},{"value":"dk","label":"DK · da · DKK"},{"value":"dk-en","label":"DK · en · DKK"},{"value":"ee","label":"EE · et · EUR"},{"value":"ee-en","label":"EE · en · EUR"},{"value":"es","label":"ES · es · EUR"},{"value":"es-en","label":"ES · en · EUR"},{"value":"fi","label":"FI · fi · EUR"},{"value":"fi-sv","label":"FI · sv · EUR"},{"value":"fi-en","label":"FI · en · EUR"},{"value":"fr","label":"FR · fr · EUR"},{"value":"fr-en","label":"FR · en · EUR"},{"value":"gr-en","label":"GR · en · EUR"},{"value":"hr-en","label":"HR · en · EUR"},{"value":"hu-en","label":"HU · en · EUR"},{"value":"ie","label":"IE · en · EUR"},{"value":"it","label":"IT · it · EUR"},{"value":"it-en","label":"IT · en · EUR"},{"value":"lt-en","label":"LT · en · EUR"},{"value":"lu-en","label":"LU · en · EUR"},{"value":"lv-en","label":"LV · en · EUR"},{"value":"mt-en","label":"MT · en · EUR"},{"value":"nl","label":"NL · nl · EUR"},{"value":"nl-en","label":"NL · en · EUR"},{"value":"pl","label":"PL · pl · PLN"},{"value":"pl-en","label":"PL · en · PLN"},{"value":"pt","label":"PT · pt · EUR"},{"value":"pt-en","label":"PT · en · EUR"},{"value":"se","label":"SE · sv · SEK"},{"value":"se-en","label":"SE · en · SEK"},{"value":"si-en","label":"SI · en · EUR"},{"value":"sk","label":"SK · sk · EUR"},{"value":"sk-en","label":"SK · en · EUR"}],"default":"fi","example":"de","aliases":["locale","site","country"]},{"name":"model","type":"string","required":true,"description":"A model name exactly as Swappie writes it — 'iPhone 15', 'iPhone 16 Pro Max', 'iPad Air 7 2025 13', 'MacBook Air M1 13', 'AirPods Pro 2'. Every `search` row returns it as `model` (and as ready-made `detail_params`). The source matches the NAME, not the url slug: 'iphone-15' is answered with HTTP 404 -> NOT_FOUND.","on_invalid":"reject","example":"iPhone 15","value_pattern":"[A-Za-z0-9][A-Za-z0-9 .+/()-]{0,59}","aliases":["model_name","name","product"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"`detail` only: drop SKUs whose stock is 0. Swappie publishes sold-out SKUs with stock 0 and a live price; measured on iPhone 15 / `en`: 106 SKUs published, 63 with stock > 0. Off by default so you can see the full price table.","on_invalid":"reject","default":false,"example":true,"aliases":["in_stock","available_only"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: the only seller is Swappie Oy, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"model, market, country, currency, seller{}, offers[]{sku, model, device_category, grade, grade_label, color, color_localized, storage_gb, battery_type, sim_type, price, price_minor, currency, reference_price, is_discounted, stock, in_stock, stock_on_hand, stock_in_transit, stock_display_capped, stock_is_capped_on_site, stock_by_warehouse{}, vat_margin_scheme, price_updated_at, country, slug, url, ram_gb, cpu_cores, gpu_cores, chip_variant, screen_size_in, screen_coating, keyboard_language, keyboard_layout, anc_type, connector_type, wireless_charging_type, inventory_priority, images[], cross_sell_skus[]}, summary{offer_count, in_stock_offer_count, units_in_stock, units_on_hand, units_in_transit, offers_with_capped_site_stock, min_price, max_price, price_by_grade{}, stock_by_grade{}, warehouses[]}, facets{colors[], storages_gb[], grades[], battery_types[], sim_types[], keyboard_languages[], laptop_configs[]} + meta{offers_hidden_out_of_stock}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"market":"fi","model":"iPhone 15"}},{"name":"trade_in","description":"What Swappie PAYS for a used device in one market — the buy-back side of the same company, which almost no refurbished catalogue publishes. One row per model it currently buys (28 phone + 18 tablet models on 2026-10-07) with the top payout for that model in perfect condition and top capacity, the capacities it accepts and the full model name per capacity. Payouts are per market and really differ: iPhone 17 Pro Max read EUR 1,264 on `fi`, EUR 1,290 on `de` and SEK 14,270 on `se` in one run. Put next to the `search` sell-price for the same model it gives the live buy/sell spread. The list also runs ahead of the sell catalogue — Swappie was already quoting an iPhone 18 Pro on 2026-10-07. 10 of the 43 locales have no trade-in site and answer MARKET_UNAVAILABLE.","required_params":["market"],"optional_params":["category"],"params":[{"name":"market","type":"enum","required":true,"description":"Which Swappie storefront to read, by the site's own locale slug. Prices, stock and currency are PER MARKET and really differ: on 2026-10-07 the same iPhone 15 128 GB grade D read EUR 425.00 on `de`/`nl`, EUR 435.00 on `it` and EUR 445.00 on `fi`/`en`, and `se` quoted SEK 4,999.00. Five currencies are live: EUR (34 locales), SEK, DKK, PLN, CZK (2 each). A country with two languages has two slugs (fi / fi-sv / fi-en) that serve the same inventory in different wording. This is a CLOSED list on purpose: swappie.com answers an unknown locale with the international EUR site and HTTP 200, so a typo would silently bill you for the wrong country's prices.","on_invalid":"reject","allowed_values":[{"value":"en","label":"EU · en · EUR"},{"value":"at","label":"AT · de · EUR"},{"value":"at-en","label":"AT · en · EUR"},{"value":"be","label":"BE · nl · EUR"},{"value":"be-fr","label":"BE · fr · EUR"},{"value":"be-en","label":"BE · en · EUR"},{"value":"cz","label":"CZ · cs · CZK"},{"value":"cz-en","label":"CZ · en · CZK"},{"value":"de","label":"DE · de · EUR"},{"value":"de-en","label":"DE · en · EUR"},{"value":"dk","label":"DK · da · DKK"},{"value":"dk-en","label":"DK · en · DKK"},{"value":"ee","label":"EE · et · EUR"},{"value":"ee-en","label":"EE · en · EUR"},{"value":"es","label":"ES · es · EUR"},{"value":"es-en","label":"ES · en · EUR"},{"value":"fi","label":"FI · fi · EUR"},{"value":"fi-sv","label":"FI · sv · EUR"},{"value":"fi-en","label":"FI · en · EUR"},{"value":"fr","label":"FR · fr · EUR"},{"value":"fr-en","label":"FR · en · EUR"},{"value":"gr-en","label":"GR · en · EUR"},{"value":"hr-en","label":"HR · en · EUR"},{"value":"hu-en","label":"HU · en · EUR"},{"value":"ie","label":"IE · en · EUR"},{"value":"it","label":"IT · it · EUR"},{"value":"it-en","label":"IT · en · EUR"},{"value":"lt-en","label":"LT · en · EUR"},{"value":"lu-en","label":"LU · en · EUR"},{"value":"lv-en","label":"LV · en · EUR"},{"value":"mt-en","label":"MT · en · EUR"},{"value":"nl","label":"NL · nl · EUR"},{"value":"nl-en","label":"NL · en · EUR"},{"value":"pl","label":"PL · pl · PLN"},{"value":"pl-en","label":"PL · en · PLN"},{"value":"pt","label":"PT · pt · EUR"},{"value":"pt-en","label":"PT · en · EUR"},{"value":"se","label":"SE · sv · SEK"},{"value":"se-en","label":"SE · en · SEK"},{"value":"si-en","label":"SI · en · EUR"},{"value":"sk","label":"SK · sk · EUR"},{"value":"sk-en","label":"SK · en · EUR"}],"default":"fi","example":"de","aliases":["locale","site","country"]},{"name":"category","type":"enum","required":false,"description":"Which trade-in list to return. Swappie buys back phones and tablets only (28 phone + 18 tablet models on 2026-10-07); it publishes no MacBook or AirPods trade-in price.","on_invalid":"reject","allowed_values":[{"value":"all","label":"phones and tablets"},{"value":"phone","label":"iPhone only"},{"value":"tablet","label":"iPad only"}],"default":"all","example":"phone","aliases":["device_category","type"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: the only seller is Swappie Oy, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"devices[]{model, device_category, max_payout, currency, currency_symbol, price_sku_id, model_id, storage_options[], full_name_by_storage{}, image_url, url} + meta{market, country, currency, phone_models, tablet_models, payout_range{min,max}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"fi","category":"phone"}},{"name":"popular","description":"The 20 refurbished iPhones Swappie is pushing right now in one market, as its own home-page carousel builds them: real SKUs, not models — each with its grade, colour, capacity, battery type, live price, unit stock and a flag for whether a new battery can be added. 13.5 KB in one request, the cheapest way to sample live Swappie prices and to watch what moves day to day.","required_params":["market"],"optional_params":[],"params":[{"name":"market","type":"enum","required":true,"description":"Which Swappie storefront to read, by the site's own locale slug. Prices, stock and currency are PER MARKET and really differ: on 2026-10-07 the same iPhone 15 128 GB grade D read EUR 425.00 on `de`/`nl`, EUR 435.00 on `it` and EUR 445.00 on `fi`/`en`, and `se` quoted SEK 4,999.00. Five currencies are live: EUR (34 locales), SEK, DKK, PLN, CZK (2 each). A country with two languages has two slugs (fi / fi-sv / fi-en) that serve the same inventory in different wording. This is a CLOSED list on purpose: swappie.com answers an unknown locale with the international EUR site and HTTP 200, so a typo would silently bill you for the wrong country's prices.","on_invalid":"reject","allowed_values":[{"value":"en","label":"EU · en · EUR"},{"value":"at","label":"AT · de · EUR"},{"value":"at-en","label":"AT · en · EUR"},{"value":"be","label":"BE · nl · EUR"},{"value":"be-fr","label":"BE · fr · EUR"},{"value":"be-en","label":"BE · en · EUR"},{"value":"cz","label":"CZ · cs · CZK"},{"value":"cz-en","label":"CZ · en · CZK"},{"value":"de","label":"DE · de · EUR"},{"value":"de-en","label":"DE · en · EUR"},{"value":"dk","label":"DK · da · DKK"},{"value":"dk-en","label":"DK · en · DKK"},{"value":"ee","label":"EE · et · EUR"},{"value":"ee-en","label":"EE · en · EUR"},{"value":"es","label":"ES · es · EUR"},{"value":"es-en","label":"ES · en · EUR"},{"value":"fi","label":"FI · fi · EUR"},{"value":"fi-sv","label":"FI · sv · EUR"},{"value":"fi-en","label":"FI · en · EUR"},{"value":"fr","label":"FR · fr · EUR"},{"value":"fr-en","label":"FR · en · EUR"},{"value":"gr-en","label":"GR · en · EUR"},{"value":"hr-en","label":"HR · en · EUR"},{"value":"hu-en","label":"HU · en · EUR"},{"value":"ie","label":"IE · en · EUR"},{"value":"it","label":"IT · it · EUR"},{"value":"it-en","label":"IT · en · EUR"},{"value":"lt-en","label":"LT · en · EUR"},{"value":"lu-en","label":"LU · en · EUR"},{"value":"lv-en","label":"LV · en · EUR"},{"value":"mt-en","label":"MT · en · EUR"},{"value":"nl","label":"NL · nl · EUR"},{"value":"nl-en","label":"NL · en · EUR"},{"value":"pl","label":"PL · pl · PLN"},{"value":"pl-en","label":"PL · en · PLN"},{"value":"pt","label":"PT · pt · EUR"},{"value":"pt-en","label":"PT · en · EUR"},{"value":"se","label":"SE · sv · SEK"},{"value":"se-en","label":"SE · en · SEK"},{"value":"si-en","label":"SI · en · EUR"},{"value":"sk","label":"SK · sk · EUR"},{"value":"sk-en","label":"SK · en · EUR"}],"default":"fi","example":"de","aliases":["locale","site","country"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: the only seller is Swappie Oy, a company, and it is always returned in full.","on_invalid":"reject","default":false}],"returns":"offers[]{sku, model, grade, grade_label, color, color_localized, color_hex, storage_gb, battery_type, price, price_display, reference_price_display, currency, stock, in_stock, is_premium_series, new_battery_available, slug, url, image_url} + meta{market, country, currency, price_range{min,max}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"fi"}}]},{"name":"syarah","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Syarah — Saudi Arabia car marketplace (used + new, SAR, Arabic + English)","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/syarah/v1","spec_available":true,"actions":[{"name":"search","description":"Search Syarah's Saudi car stock by free text (English or Arabic), make, model, trim, condition, seller type, body style, fuel, transmission, drivetrain, origin, colours, seats, cylinders, engine size, payment scheme, model year, price, mileage and monthly instalment, with seven verified sort orders. Every row carries price in SAR, mileage, year, trim, city, seller kind and the photo set. 🔴 Unlike the UAE marketplaces, the FULL result set is reachable here: a measured full walk returned 109 unique rows for a stated 109, and `summary.total_results` / `summary.reachable_results` always say both numbers.","required_params":[],"optional_params":["text","make_id","model_id","trim_id","condition","seller_type","fuel","transmission","drivetrain","body_shape","origin","category","make_country","payment","exterior_color_id","interior_color_id","cylinders","seats","cabins","engine_size","feature_ids","deal_id","booked","year_min","year_max","price_min","price_max","km_min","km_max","installment_min","installment_max","sort","page","page_size","max_results","lang"],"params":[{"name":"text","type":"string","required":false,"description":"Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.","on_invalid":"reject","example":"land cruiser","aliases":["query","q","keyword"]},{"name":"make_id","type":"integer","required":false,"description":"Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.","on_invalid":"reject","example":4,"minimum":1,"aliases":["make"]},{"name":"model_id","type":"integer","required":false,"description":"Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.","on_invalid":"reject","example":718,"minimum":1,"aliases":["model"]},{"name":"trim_id","type":"integer","required":false,"description":"Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.","on_invalid":"reject","example":568,"minimum":1,"aliases":["trim","extension"]},{"name":"condition","type":"enum","required":false,"description":"New or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used stock (2,878 of 3,674 at capture)"},{"value":"new","label":"Brand-new stock (796 of 3,674 at capture)"}],"example":"used"},{"name":"seller_type","type":"enum","required":false,"description":"Who owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.","on_invalid":"reject","allowed_values":[{"value":"syarah","label":"Syarah's own inspected inventory (1,769 of 3,674 at capture)"},{"value":"dealer","label":"Third-party dealer stock on the platform (1,905 of 3,674)"}],"example":"dealer","aliases":["owner","inventory_type"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel type.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"Gasoline — 3,375 of 3,674"},{"value":"diesel","label":"Diesel — 156"},{"value":"hybrid","label":"Hybrid — 132"},{"value":"electric","label":"Electric — 11"}],"example":"hybrid","aliases":["fuel_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox type.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic — 2,481"},{"value":"cvt","label":"CVT — 1,056"},{"value":"manual","label":"Manual — 136"}],"example":"automatic","aliases":["gear"]},{"name":"drivetrain","type":"enum","required":false,"description":"Drive configuration.","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"Front-wheel drive — 2,564"},{"value":"4x4","label":"Double 4x4 — 423"},{"value":"rwd","label":"Rear-wheel drive — 244"},{"value":"4wd","label":"4WD — 237"},{"value":"awd","label":"AWD — 206"}],"example":"4x4"},{"name":"body_shape","type":"enum","required":false,"description":"Body style as syarah classifies it.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan — 1,579"},{"value":"suv","label":"SUV — 1,511"},{"value":"crossover","label":"Crossover — 242"},{"value":"pickup","label":"Pickup — 109"},{"value":"van","label":"Van — 106"},{"value":"hatchback","label":"Hatchback — 106"},{"value":"sport","label":"Sport — 14"}],"example":"suv","aliases":["body","shape"]},{"name":"origin","type":"enum","required":false,"description":"Where the car was specified for.","on_invalid":"reject","allowed_values":[{"value":"saudi","label":"Saudi-spec — 3,404"},{"value":"gcc","label":"GCC-spec — 213"},{"value":"other","label":"Other — 57"}],"example":"saudi","aliases":["car_origin","spec"]},{"name":"category","type":"enum","required":false,"description":"Syarah's own buyer-intent grouping.","on_invalid":"reject","allowed_values":[{"value":"family","label":"Family — 1,336"},{"value":"off-road","label":"Off-road — 1,256"},{"value":"budget","label":"Budget friendly — 1,214"},{"value":"economic","label":"Economic — 894"},{"value":"luxury","label":"Luxury — 279"},{"value":"sports","label":"Sports car — 26"}],"example":"family","aliases":["car_type"]},{"name":"make_country","type":"enum","required":false,"description":"Country the brand comes from.","on_invalid":"reject","allowed_values":[{"value":"japan","label":"Japanese makes — 1,298"},{"value":"korea","label":"Korean — 1,072"},{"value":"china","label":"Chinese — 720"},{"value":"america","label":"American — 280"},{"value":"german","label":"German — 180"},{"value":"france","label":"French — 71"},{"value":"british","label":"British — 26"},{"value":"italy","label":"Italian — 17"},{"value":"india","label":"Indian — 1"}],"example":"japan"},{"name":"payment","type":"enum","required":false,"description":"Accepted payment / instalment scheme.","on_invalid":"reject","allowed_values":[{"value":"cash","label":"Cash only — 1,218"},{"value":"cash_and_finance","label":"Cash or financing"},{"value":"tamara","label":"Tamara instalments"},{"value":"tabby","label":"Tabby instalments"},{"value":"amwal","label":"Amwal instalments"}],"example":"cash_and_finance","aliases":["transaction_type"]},{"name":"exterior_color_id","type":"integer","required":false,"description":"Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.","on_invalid":"reject","example":2,"minimum":1,"aliases":["color_id"]},{"name":"interior_color_id","type":"integer","required":false,"description":"Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).","on_invalid":"reject","example":2,"minimum":1},{"name":"cylinders","type":"integer","required":false,"description":"Cylinder count (3, 4, 5, 6 or 8).","on_invalid":"reject","example":6,"minimum":1,"maximum":16},{"name":"seats","type":"integer","required":false,"description":"Seat count (2-26; 5 seats = 2,936 of 3,674).","on_invalid":"reject","example":7,"minimum":1,"maximum":60},{"name":"cabins","type":"integer","required":false,"description":"Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).","on_invalid":"reject","example":2,"minimum":1,"maximum":2},{"name":"engine_size","type":"string","required":false,"description":"Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).","on_invalid":"reject","example":"2.5","aliases":["displacement"]},{"name":"feature_ids","type":"string","required":false,"description":"Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd (\"15,6\" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.","on_invalid":"reject","example":"15","aliases":["features","option_ids","equipment"]},{"name":"deal_id","type":"integer","required":false,"description":"Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.","on_invalid":"reject","example":124,"minimum":1},{"name":"booked","type":"boolean","required":false,"description":"Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).","on_invalid":"reject","example":false,"aliases":["is_booked","reserved"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.","on_invalid":"reject","example":2023,"minimum":1950,"maximum":2100,"aliases":["min_year","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"reject","example":2026,"minimum":1950,"maximum":2100,"aliases":["max_year","year_to"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, in the currency the answer reports (SAR on every measured call).","on_invalid":"reject","example":30000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price.","on_invalid":"reject","example":80000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km","mileage_min","odometer_from"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.","on_invalid":"reject","example":60000,"minimum":0,"aliases":["max_km","mileage_max","odometer_to"]},{"name":"installment_min","type":"integer","required":false,"description":"Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).","on_invalid":"reject","example":500,"minimum":0},{"name":"installment_max","type":"integer","required":false,"description":"Highest monthly instalment.","on_invalid":"reject","example":1500,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order. 🔴 `newest` is the site's own `-first_active_date` and was MEASURED to be a real listing date, not a refresh/bump: 12/12 rows on page 1 were listed the previous day (`days_on_lot` 0-1) while the default order mixed cars 3 to 83 days old. The date itself comes back from `detail.listed_at`.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's own default order (neither date nor price)"},{"value":"newest","label":"Most recently listed first — measured to be a GENUINE first-activation date, not a bump"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"km_asc","label":"Lowest odometer first"},{"value":"km_desc","label":"Highest odometer first"},{"value":"discount_desc","label":"Biggest price cut first"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page. There is no artificial ceiling on this source: a page past the end returns an empty list, never a silent repeat of the last page.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Rows per upstream page. syarah itself refuses more than 100 (HTTP 400 with that exact message), so the maximum here is 100.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["size","per_page"]},{"name":"max_results","type":"integer","required":false,"description":"Stop after this many rows, walking upstream pages of `page_size`. Capped at 1000 per call; to go deeper, page or narrow the query.","on_invalid":"reject","default":24,"example":48,"minimum":1,"maximum":1000,"aliases":["limit"]},{"name":"lang","type":"enum","required":false,"description":"Language of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels (the site's primary language)"}],"default":"en","example":"en","aliases":["language"]}],"returns":"`rows[]` plus a `summary`. Each row: id, url, title, price, price_currency (read back from the source, never hard-coded), price_disagrees, monthly_installment, discount, price_before_discount, year, make, model, trim, condition, kilometers (+ kilometers_unit, kilometers_reported), fuel_type, transmission, drivetrain, engine_size, exterior_color, interior_color, car_origin, city, seller_type (syarah | dealer | individual) + seller_label, financing_available, is_booked, has_tamara, warranty + warranty_label, tags[], image, preview_photos[] + preview_photos_count, position. `summary` carries total_results (the source's own count for this query), reachable_results, last_page, page, page_size, has_more, filters_applied, sort, currency and deal (the campaign the site is running). 🔴 `discount` is the price CUT; `price_before_discount` is the pre-cut price (measured: price + discount == price_before_discount on 59/59 discounted rows). 🔴 `preview_photos` is the search service's 5-thumbnail preview, NOT the gallery — the same car carried 32 photos on `detail`. 🔴 `cylinders` and `cabins` are not returned on search rows (0/278 filled, measured) although both work as filters; `detail` publishes them. 🔴 search rows carry NO listing date: use `sort=newest` for the order and `detail.listed_at` for the date.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make_id":4,"condition":"used","sort":"newest","max_results":24}},{"name":"detail","description":"The full record for one listing: the complete spec card (body style, fuel, transmission and gear count, drivetrain, cylinders, engine size and type, seats, doors, key count, both colours with hex codes, origin), the option list grouped by Safety / Comfort / Technology / Exterior, every gallery photo, the financing breakdown, the inspection-report link — and the listing's REAL first-activation date plus how many days it has been on the lot. Takes the numeric id from a `search` row or the listing URL.","required_params":["id"],"optional_params":["lang"],"params":[{"name":"id","type":"string","required":true,"description":"Listing id as `search` returns it in `rows[].id` (e.g. 316148). A full syarah listing URL is accepted too — the id is read out of its slug.","on_invalid":"reject","example":"316148","aliases":["post_id","listing_id","url"]},{"name":"lang","type":"enum","required":false,"description":"Language of the labels. ⚠️ A few trim names come back in Arabic even on the English surface — that is how the source stores them.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels (the site's primary language)"}],"default":"en","example":"en","aliases":["language"]}],"returns":"One listing in full: id, url, title, headline, price / price_currency / price_display / price_note, price_disagrees + price_witnesses (three independent numbers off the same payload), discount + price_before_discount, monthly_installment + installment_months / first / last payment, financing_available, make (+ make_id), model (+ model_id), trim (+ trim_id), year, condition, kilometers, body_shape, fuel_type, transmission, gear_speeds, drivetrain, cylinders, engine_size, engine_type, horsepower, fuel_tank_litres, seats, doors, number_of_keys, both colours with their hex codes, car_origin, city, seller_type + seller_label, **listed_at (the real first-activation date) and days_on_lot**, is_sold, is_deleted, limited_quantity, is_preowned_programme, warranty, tags[], features[] grouped by category + features_count, photos[] + photos_count, has_video, faqs[]. VIN is NOT returned: the listing page prints a placeholder of zeros, so there is nothing true to publish.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"316148"}},{"name":"count","description":"How many cars match a filter combination, from Syarah's own count — one tiny request, no row parsing. Built for market sizing: combine make, body style, fuel, price band and seller type and read the number back. Also reports whether the whole set is walkable and in how many pages.","required_params":[],"optional_params":["text","make_id","model_id","trim_id","condition","seller_type","fuel","transmission","drivetrain","body_shape","origin","category","make_country","payment","exterior_color_id","interior_color_id","cylinders","seats","cabins","engine_size","feature_ids","deal_id","booked","year_min","year_max","price_min","price_max","km_min","km_max","installment_min","installment_max","lang"],"params":[{"name":"text","type":"string","required":false,"description":"Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.","on_invalid":"reject","example":"land cruiser","aliases":["query","q","keyword"]},{"name":"make_id","type":"integer","required":false,"description":"Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.","on_invalid":"reject","example":4,"minimum":1,"aliases":["make"]},{"name":"model_id","type":"integer","required":false,"description":"Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.","on_invalid":"reject","example":718,"minimum":1,"aliases":["model"]},{"name":"trim_id","type":"integer","required":false,"description":"Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.","on_invalid":"reject","example":568,"minimum":1,"aliases":["trim","extension"]},{"name":"condition","type":"enum","required":false,"description":"New or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used stock (2,878 of 3,674 at capture)"},{"value":"new","label":"Brand-new stock (796 of 3,674 at capture)"}],"example":"used"},{"name":"seller_type","type":"enum","required":false,"description":"Who owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.","on_invalid":"reject","allowed_values":[{"value":"syarah","label":"Syarah's own inspected inventory (1,769 of 3,674 at capture)"},{"value":"dealer","label":"Third-party dealer stock on the platform (1,905 of 3,674)"}],"example":"dealer","aliases":["owner","inventory_type"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel type.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"Gasoline — 3,375 of 3,674"},{"value":"diesel","label":"Diesel — 156"},{"value":"hybrid","label":"Hybrid — 132"},{"value":"electric","label":"Electric — 11"}],"example":"hybrid","aliases":["fuel_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox type.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic — 2,481"},{"value":"cvt","label":"CVT — 1,056"},{"value":"manual","label":"Manual — 136"}],"example":"automatic","aliases":["gear"]},{"name":"drivetrain","type":"enum","required":false,"description":"Drive configuration.","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"Front-wheel drive — 2,564"},{"value":"4x4","label":"Double 4x4 — 423"},{"value":"rwd","label":"Rear-wheel drive — 244"},{"value":"4wd","label":"4WD — 237"},{"value":"awd","label":"AWD — 206"}],"example":"4x4"},{"name":"body_shape","type":"enum","required":false,"description":"Body style as syarah classifies it.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan — 1,579"},{"value":"suv","label":"SUV — 1,511"},{"value":"crossover","label":"Crossover — 242"},{"value":"pickup","label":"Pickup — 109"},{"value":"van","label":"Van — 106"},{"value":"hatchback","label":"Hatchback — 106"},{"value":"sport","label":"Sport — 14"}],"example":"suv","aliases":["body","shape"]},{"name":"origin","type":"enum","required":false,"description":"Where the car was specified for.","on_invalid":"reject","allowed_values":[{"value":"saudi","label":"Saudi-spec — 3,404"},{"value":"gcc","label":"GCC-spec — 213"},{"value":"other","label":"Other — 57"}],"example":"saudi","aliases":["car_origin","spec"]},{"name":"category","type":"enum","required":false,"description":"Syarah's own buyer-intent grouping.","on_invalid":"reject","allowed_values":[{"value":"family","label":"Family — 1,336"},{"value":"off-road","label":"Off-road — 1,256"},{"value":"budget","label":"Budget friendly — 1,214"},{"value":"economic","label":"Economic — 894"},{"value":"luxury","label":"Luxury — 279"},{"value":"sports","label":"Sports car — 26"}],"example":"family","aliases":["car_type"]},{"name":"make_country","type":"enum","required":false,"description":"Country the brand comes from.","on_invalid":"reject","allowed_values":[{"value":"japan","label":"Japanese makes — 1,298"},{"value":"korea","label":"Korean — 1,072"},{"value":"china","label":"Chinese — 720"},{"value":"america","label":"American — 280"},{"value":"german","label":"German — 180"},{"value":"france","label":"French — 71"},{"value":"british","label":"British — 26"},{"value":"italy","label":"Italian — 17"},{"value":"india","label":"Indian — 1"}],"example":"japan"},{"name":"payment","type":"enum","required":false,"description":"Accepted payment / instalment scheme.","on_invalid":"reject","allowed_values":[{"value":"cash","label":"Cash only — 1,218"},{"value":"cash_and_finance","label":"Cash or financing"},{"value":"tamara","label":"Tamara instalments"},{"value":"tabby","label":"Tabby instalments"},{"value":"amwal","label":"Amwal instalments"}],"example":"cash_and_finance","aliases":["transaction_type"]},{"name":"exterior_color_id","type":"integer","required":false,"description":"Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.","on_invalid":"reject","example":2,"minimum":1,"aliases":["color_id"]},{"name":"interior_color_id","type":"integer","required":false,"description":"Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).","on_invalid":"reject","example":2,"minimum":1},{"name":"cylinders","type":"integer","required":false,"description":"Cylinder count (3, 4, 5, 6 or 8).","on_invalid":"reject","example":6,"minimum":1,"maximum":16},{"name":"seats","type":"integer","required":false,"description":"Seat count (2-26; 5 seats = 2,936 of 3,674).","on_invalid":"reject","example":7,"minimum":1,"maximum":60},{"name":"cabins","type":"integer","required":false,"description":"Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).","on_invalid":"reject","example":2,"minimum":1,"maximum":2},{"name":"engine_size","type":"string","required":false,"description":"Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).","on_invalid":"reject","example":"2.5","aliases":["displacement"]},{"name":"feature_ids","type":"string","required":false,"description":"Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd (\"15,6\" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.","on_invalid":"reject","example":"15","aliases":["features","option_ids","equipment"]},{"name":"deal_id","type":"integer","required":false,"description":"Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.","on_invalid":"reject","example":124,"minimum":1},{"name":"booked","type":"boolean","required":false,"description":"Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).","on_invalid":"reject","example":false,"aliases":["is_booked","reserved"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.","on_invalid":"reject","example":2023,"minimum":1950,"maximum":2100,"aliases":["min_year","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"reject","example":2026,"minimum":1950,"maximum":2100,"aliases":["max_year","year_to"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, in the currency the answer reports (SAR on every measured call).","on_invalid":"reject","example":30000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price.","on_invalid":"reject","example":80000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km","mileage_min","odometer_from"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.","on_invalid":"reject","example":60000,"minimum":0,"aliases":["max_km","mileage_max","odometer_to"]},{"name":"installment_min","type":"integer","required":false,"description":"Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).","on_invalid":"reject","example":500,"minimum":0},{"name":"installment_max","type":"integer","required":false,"description":"Highest monthly instalment.","on_invalid":"reject","example":1500,"minimum":0},{"name":"lang","type":"enum","required":false,"description":"Language of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels (the site's primary language)"}],"default":"en","example":"en","aliases":["language"]}],"returns":"`{total_results, reachable_results, fully_reachable, pages_at_100, currency, filters_applied, deal}`. On this source `reachable_results` has equalled `total_results` on every measured query.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"make_id":4,"condition":"used"}},{"name":"makes","description":"Every car make Syarah currently lists, with the numeric `make_id` that `search`, `count` and `models` take, the live stock count and the brand logo. 65 makes / 3,674 cars at capture. Accepts the same filters as `search`, so you can ask \"which brands have hybrids under 80,000 SAR\" in one call.","required_params":[],"optional_params":["text","make_id","model_id","trim_id","condition","seller_type","fuel","transmission","drivetrain","body_shape","origin","category","make_country","payment","exterior_color_id","interior_color_id","cylinders","seats","cabins","engine_size","feature_ids","deal_id","booked","year_min","year_max","price_min","price_max","km_min","km_max","installment_min","installment_max","lang"],"params":[{"name":"text","type":"string","required":false,"description":"Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.","on_invalid":"reject","example":"land cruiser","aliases":["query","q","keyword"]},{"name":"make_id","type":"integer","required":false,"description":"Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.","on_invalid":"reject","example":4,"minimum":1,"aliases":["make"]},{"name":"model_id","type":"integer","required":false,"description":"Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.","on_invalid":"reject","example":718,"minimum":1,"aliases":["model"]},{"name":"trim_id","type":"integer","required":false,"description":"Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.","on_invalid":"reject","example":568,"minimum":1,"aliases":["trim","extension"]},{"name":"condition","type":"enum","required":false,"description":"New or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used stock (2,878 of 3,674 at capture)"},{"value":"new","label":"Brand-new stock (796 of 3,674 at capture)"}],"example":"used"},{"name":"seller_type","type":"enum","required":false,"description":"Who owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.","on_invalid":"reject","allowed_values":[{"value":"syarah","label":"Syarah's own inspected inventory (1,769 of 3,674 at capture)"},{"value":"dealer","label":"Third-party dealer stock on the platform (1,905 of 3,674)"}],"example":"dealer","aliases":["owner","inventory_type"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel type.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"Gasoline — 3,375 of 3,674"},{"value":"diesel","label":"Diesel — 156"},{"value":"hybrid","label":"Hybrid — 132"},{"value":"electric","label":"Electric — 11"}],"example":"hybrid","aliases":["fuel_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox type.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic — 2,481"},{"value":"cvt","label":"CVT — 1,056"},{"value":"manual","label":"Manual — 136"}],"example":"automatic","aliases":["gear"]},{"name":"drivetrain","type":"enum","required":false,"description":"Drive configuration.","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"Front-wheel drive — 2,564"},{"value":"4x4","label":"Double 4x4 — 423"},{"value":"rwd","label":"Rear-wheel drive — 244"},{"value":"4wd","label":"4WD — 237"},{"value":"awd","label":"AWD — 206"}],"example":"4x4"},{"name":"body_shape","type":"enum","required":false,"description":"Body style as syarah classifies it.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan — 1,579"},{"value":"suv","label":"SUV — 1,511"},{"value":"crossover","label":"Crossover — 242"},{"value":"pickup","label":"Pickup — 109"},{"value":"van","label":"Van — 106"},{"value":"hatchback","label":"Hatchback — 106"},{"value":"sport","label":"Sport — 14"}],"example":"suv","aliases":["body","shape"]},{"name":"origin","type":"enum","required":false,"description":"Where the car was specified for.","on_invalid":"reject","allowed_values":[{"value":"saudi","label":"Saudi-spec — 3,404"},{"value":"gcc","label":"GCC-spec — 213"},{"value":"other","label":"Other — 57"}],"example":"saudi","aliases":["car_origin","spec"]},{"name":"category","type":"enum","required":false,"description":"Syarah's own buyer-intent grouping.","on_invalid":"reject","allowed_values":[{"value":"family","label":"Family — 1,336"},{"value":"off-road","label":"Off-road — 1,256"},{"value":"budget","label":"Budget friendly — 1,214"},{"value":"economic","label":"Economic — 894"},{"value":"luxury","label":"Luxury — 279"},{"value":"sports","label":"Sports car — 26"}],"example":"family","aliases":["car_type"]},{"name":"make_country","type":"enum","required":false,"description":"Country the brand comes from.","on_invalid":"reject","allowed_values":[{"value":"japan","label":"Japanese makes — 1,298"},{"value":"korea","label":"Korean — 1,072"},{"value":"china","label":"Chinese — 720"},{"value":"america","label":"American — 280"},{"value":"german","label":"German — 180"},{"value":"france","label":"French — 71"},{"value":"british","label":"British — 26"},{"value":"italy","label":"Italian — 17"},{"value":"india","label":"Indian — 1"}],"example":"japan"},{"name":"payment","type":"enum","required":false,"description":"Accepted payment / instalment scheme.","on_invalid":"reject","allowed_values":[{"value":"cash","label":"Cash only — 1,218"},{"value":"cash_and_finance","label":"Cash or financing"},{"value":"tamara","label":"Tamara instalments"},{"value":"tabby","label":"Tabby instalments"},{"value":"amwal","label":"Amwal instalments"}],"example":"cash_and_finance","aliases":["transaction_type"]},{"name":"exterior_color_id","type":"integer","required":false,"description":"Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.","on_invalid":"reject","example":2,"minimum":1,"aliases":["color_id"]},{"name":"interior_color_id","type":"integer","required":false,"description":"Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).","on_invalid":"reject","example":2,"minimum":1},{"name":"cylinders","type":"integer","required":false,"description":"Cylinder count (3, 4, 5, 6 or 8).","on_invalid":"reject","example":6,"minimum":1,"maximum":16},{"name":"seats","type":"integer","required":false,"description":"Seat count (2-26; 5 seats = 2,936 of 3,674).","on_invalid":"reject","example":7,"minimum":1,"maximum":60},{"name":"cabins","type":"integer","required":false,"description":"Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).","on_invalid":"reject","example":2,"minimum":1,"maximum":2},{"name":"engine_size","type":"string","required":false,"description":"Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).","on_invalid":"reject","example":"2.5","aliases":["displacement"]},{"name":"feature_ids","type":"string","required":false,"description":"Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd (\"15,6\" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.","on_invalid":"reject","example":"15","aliases":["features","option_ids","equipment"]},{"name":"deal_id","type":"integer","required":false,"description":"Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.","on_invalid":"reject","example":124,"minimum":1},{"name":"booked","type":"boolean","required":false,"description":"Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).","on_invalid":"reject","example":false,"aliases":["is_booked","reserved"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.","on_invalid":"reject","example":2023,"minimum":1950,"maximum":2100,"aliases":["min_year","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"reject","example":2026,"minimum":1950,"maximum":2100,"aliases":["max_year","year_to"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, in the currency the answer reports (SAR on every measured call).","on_invalid":"reject","example":30000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price.","on_invalid":"reject","example":80000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km","mileage_min","odometer_from"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.","on_invalid":"reject","example":60000,"minimum":0,"aliases":["max_km","mileage_max","odometer_to"]},{"name":"installment_min","type":"integer","required":false,"description":"Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).","on_invalid":"reject","example":500,"minimum":0},{"name":"installment_max","type":"integer","required":false,"description":"Highest monthly instalment.","on_invalid":"reject","example":1500,"minimum":0},{"name":"lang","type":"enum","required":false,"description":"Language of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels (the site's primary language)"}],"default":"en","example":"en","aliases":["language"]}],"returns":"`rows[]` of {make_id, name, name_en, name_ar, count, logo} ordered by stock, plus `summary.total_results` for the same query.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"text":"land cruiser"}},{"name":"models","description":"Every model Syarah lists, with the numeric `model_id` that `search` takes and the parent `make_id` it must be paired with. Omit `make_id` for all 337 models across every brand; pass one to scope it (MG 78 → 8 models).","required_params":[],"optional_params":["text","make_id","model_id","trim_id","condition","seller_type","fuel","transmission","drivetrain","body_shape","origin","category","make_country","payment","exterior_color_id","interior_color_id","cylinders","seats","cabins","engine_size","feature_ids","deal_id","booked","year_min","year_max","price_min","price_max","km_min","km_max","installment_min","installment_max","lang"],"params":[{"name":"text","type":"string","required":false,"description":"Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.","on_invalid":"reject","example":"land cruiser","aliases":["query","q","keyword"]},{"name":"make_id","type":"integer","required":false,"description":"Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.","on_invalid":"reject","example":4,"minimum":1,"aliases":["make"]},{"name":"model_id","type":"integer","required":false,"description":"Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.","on_invalid":"reject","example":718,"minimum":1,"aliases":["model"]},{"name":"trim_id","type":"integer","required":false,"description":"Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.","on_invalid":"reject","example":568,"minimum":1,"aliases":["trim","extension"]},{"name":"condition","type":"enum","required":false,"description":"New or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used stock (2,878 of 3,674 at capture)"},{"value":"new","label":"Brand-new stock (796 of 3,674 at capture)"}],"example":"used"},{"name":"seller_type","type":"enum","required":false,"description":"Who owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.","on_invalid":"reject","allowed_values":[{"value":"syarah","label":"Syarah's own inspected inventory (1,769 of 3,674 at capture)"},{"value":"dealer","label":"Third-party dealer stock on the platform (1,905 of 3,674)"}],"example":"dealer","aliases":["owner","inventory_type"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel type.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"Gasoline — 3,375 of 3,674"},{"value":"diesel","label":"Diesel — 156"},{"value":"hybrid","label":"Hybrid — 132"},{"value":"electric","label":"Electric — 11"}],"example":"hybrid","aliases":["fuel_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox type.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic — 2,481"},{"value":"cvt","label":"CVT — 1,056"},{"value":"manual","label":"Manual — 136"}],"example":"automatic","aliases":["gear"]},{"name":"drivetrain","type":"enum","required":false,"description":"Drive configuration.","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"Front-wheel drive — 2,564"},{"value":"4x4","label":"Double 4x4 — 423"},{"value":"rwd","label":"Rear-wheel drive — 244"},{"value":"4wd","label":"4WD — 237"},{"value":"awd","label":"AWD — 206"}],"example":"4x4"},{"name":"body_shape","type":"enum","required":false,"description":"Body style as syarah classifies it.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan — 1,579"},{"value":"suv","label":"SUV — 1,511"},{"value":"crossover","label":"Crossover — 242"},{"value":"pickup","label":"Pickup — 109"},{"value":"van","label":"Van — 106"},{"value":"hatchback","label":"Hatchback — 106"},{"value":"sport","label":"Sport — 14"}],"example":"suv","aliases":["body","shape"]},{"name":"origin","type":"enum","required":false,"description":"Where the car was specified for.","on_invalid":"reject","allowed_values":[{"value":"saudi","label":"Saudi-spec — 3,404"},{"value":"gcc","label":"GCC-spec — 213"},{"value":"other","label":"Other — 57"}],"example":"saudi","aliases":["car_origin","spec"]},{"name":"category","type":"enum","required":false,"description":"Syarah's own buyer-intent grouping.","on_invalid":"reject","allowed_values":[{"value":"family","label":"Family — 1,336"},{"value":"off-road","label":"Off-road — 1,256"},{"value":"budget","label":"Budget friendly — 1,214"},{"value":"economic","label":"Economic — 894"},{"value":"luxury","label":"Luxury — 279"},{"value":"sports","label":"Sports car — 26"}],"example":"family","aliases":["car_type"]},{"name":"make_country","type":"enum","required":false,"description":"Country the brand comes from.","on_invalid":"reject","allowed_values":[{"value":"japan","label":"Japanese makes — 1,298"},{"value":"korea","label":"Korean — 1,072"},{"value":"china","label":"Chinese — 720"},{"value":"america","label":"American — 280"},{"value":"german","label":"German — 180"},{"value":"france","label":"French — 71"},{"value":"british","label":"British — 26"},{"value":"italy","label":"Italian — 17"},{"value":"india","label":"Indian — 1"}],"example":"japan"},{"name":"payment","type":"enum","required":false,"description":"Accepted payment / instalment scheme.","on_invalid":"reject","allowed_values":[{"value":"cash","label":"Cash only — 1,218"},{"value":"cash_and_finance","label":"Cash or financing"},{"value":"tamara","label":"Tamara instalments"},{"value":"tabby","label":"Tabby instalments"},{"value":"amwal","label":"Amwal instalments"}],"example":"cash_and_finance","aliases":["transaction_type"]},{"name":"exterior_color_id","type":"integer","required":false,"description":"Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.","on_invalid":"reject","example":2,"minimum":1,"aliases":["color_id"]},{"name":"interior_color_id","type":"integer","required":false,"description":"Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).","on_invalid":"reject","example":2,"minimum":1},{"name":"cylinders","type":"integer","required":false,"description":"Cylinder count (3, 4, 5, 6 or 8).","on_invalid":"reject","example":6,"minimum":1,"maximum":16},{"name":"seats","type":"integer","required":false,"description":"Seat count (2-26; 5 seats = 2,936 of 3,674).","on_invalid":"reject","example":7,"minimum":1,"maximum":60},{"name":"cabins","type":"integer","required":false,"description":"Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).","on_invalid":"reject","example":2,"minimum":1,"maximum":2},{"name":"engine_size","type":"string","required":false,"description":"Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).","on_invalid":"reject","example":"2.5","aliases":["displacement"]},{"name":"feature_ids","type":"string","required":false,"description":"Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd (\"15,6\" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.","on_invalid":"reject","example":"15","aliases":["features","option_ids","equipment"]},{"name":"deal_id","type":"integer","required":false,"description":"Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.","on_invalid":"reject","example":124,"minimum":1},{"name":"booked","type":"boolean","required":false,"description":"Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).","on_invalid":"reject","example":false,"aliases":["is_booked","reserved"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.","on_invalid":"reject","example":2023,"minimum":1950,"maximum":2100,"aliases":["min_year","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"reject","example":2026,"minimum":1950,"maximum":2100,"aliases":["max_year","year_to"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, in the currency the answer reports (SAR on every measured call).","on_invalid":"reject","example":30000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price.","on_invalid":"reject","example":80000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km","mileage_min","odometer_from"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.","on_invalid":"reject","example":60000,"minimum":0,"aliases":["max_km","mileage_max","odometer_to"]},{"name":"installment_min","type":"integer","required":false,"description":"Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).","on_invalid":"reject","example":500,"minimum":0},{"name":"installment_max","type":"integer","required":false,"description":"Highest monthly instalment.","on_invalid":"reject","example":1500,"minimum":0},{"name":"lang","type":"enum","required":false,"description":"Language of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels (the site's primary language)"}],"default":"en","example":"en","aliases":["language"]}],"returns":"`rows[]` of {model_id, name, name_en, name_ar, count, make_id, make_name}. 🔴 `model_id` only filters when sent together with its `make_id`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make_id":4}},{"name":"filters","description":"The complete, live filter vocabulary Syarah publishes: every enum (condition, seller type, fuel, transmission, drivetrain, body shape, origin, category, make country, payment scheme, 32 exterior and 24 interior colours with hex codes, cylinders, seats, cabins, 34 engine sizes, makes, models, trims) with its live stock count, and the real bounds of the four numeric ranges (year, price, odometer, monthly instalment) with their source-published units. Read this before building a faceted query instead of guessing ids.","required_params":[],"optional_params":["text","make_id","model_id","trim_id","condition","seller_type","fuel","transmission","drivetrain","body_shape","origin","category","make_country","payment","exterior_color_id","interior_color_id","cylinders","seats","cabins","engine_size","feature_ids","deal_id","booked","year_min","year_max","price_min","price_max","km_min","km_max","installment_min","installment_max","lang"],"params":[{"name":"text","type":"string","required":false,"description":"Free-text query, in English OR Arabic. Measured: `toyota`, `تويوتا` and `land cruiser` all resolve against the same index (673 / 673 / 39 rows) and a nonsense term honestly returns 0. Unlike the id filters this also matches trims and body words.","on_invalid":"reject","example":"land cruiser","aliases":["query","q","keyword"]},{"name":"make_id","type":"integer","required":false,"description":"Numeric make id as syarah publishes it (Toyota 4, Hyundai 60, Kia 38, Nissan 58, Suzuki 33, MG 78, Lexus 48, BMW 15). Call `makes` for all 65 with live counts.","on_invalid":"reject","example":4,"minimum":1,"aliases":["make"]},{"name":"model_id","type":"integer","required":false,"description":"Numeric model id. 🔴 Only bites together with `make_id` — on its own syarah swallows it and returns the whole catalogue, so this engine rejects that combination. `models` gives the pair.","on_invalid":"reject","example":718,"minimum":1,"aliases":["model"]},{"name":"trim_id","type":"integer","required":false,"description":"Numeric trim id. Requires BOTH `make_id` and `model_id`. The `filters` action lists trims with their parent make/model ids.","on_invalid":"reject","example":568,"minimum":1,"aliases":["trim","extension"]},{"name":"condition","type":"enum","required":false,"description":"New or used. Measured bite: `new` 796 of 3,674, `used` 2,878. New stock carries no odometer reading at all (19/19 of the new rows sampled).","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used stock (2,878 of 3,674 at capture)"},{"value":"new","label":"Brand-new stock (796 of 3,674 at capture)"}],"example":"used"},{"name":"seller_type","type":"enum","required":false,"description":"Who owns the car. `syarah` is Syarah's own inspected inventory (sits in Riyadh), `dealer` is third-party dealer stock (Al Qurayyat, Dammam, Jeddah …). Measured split 1,769 / 1,905, and the two sum exactly to the site total.","on_invalid":"reject","allowed_values":[{"value":"syarah","label":"Syarah's own inspected inventory (1,769 of 3,674 at capture)"},{"value":"dealer","label":"Third-party dealer stock on the platform (1,905 of 3,674)"}],"example":"dealer","aliases":["owner","inventory_type"]},{"name":"fuel","type":"enum","required":false,"description":"Fuel type.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"Gasoline — 3,375 of 3,674"},{"value":"diesel","label":"Diesel — 156"},{"value":"hybrid","label":"Hybrid — 132"},{"value":"electric","label":"Electric — 11"}],"example":"hybrid","aliases":["fuel_type"]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox type.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic — 2,481"},{"value":"cvt","label":"CVT — 1,056"},{"value":"manual","label":"Manual — 136"}],"example":"automatic","aliases":["gear"]},{"name":"drivetrain","type":"enum","required":false,"description":"Drive configuration.","on_invalid":"reject","allowed_values":[{"value":"fwd","label":"Front-wheel drive — 2,564"},{"value":"4x4","label":"Double 4x4 — 423"},{"value":"rwd","label":"Rear-wheel drive — 244"},{"value":"4wd","label":"4WD — 237"},{"value":"awd","label":"AWD — 206"}],"example":"4x4"},{"name":"body_shape","type":"enum","required":false,"description":"Body style as syarah classifies it.","on_invalid":"reject","allowed_values":[{"value":"sedan","label":"Sedan — 1,579"},{"value":"suv","label":"SUV — 1,511"},{"value":"crossover","label":"Crossover — 242"},{"value":"pickup","label":"Pickup — 109"},{"value":"van","label":"Van — 106"},{"value":"hatchback","label":"Hatchback — 106"},{"value":"sport","label":"Sport — 14"}],"example":"suv","aliases":["body","shape"]},{"name":"origin","type":"enum","required":false,"description":"Where the car was specified for.","on_invalid":"reject","allowed_values":[{"value":"saudi","label":"Saudi-spec — 3,404"},{"value":"gcc","label":"GCC-spec — 213"},{"value":"other","label":"Other — 57"}],"example":"saudi","aliases":["car_origin","spec"]},{"name":"category","type":"enum","required":false,"description":"Syarah's own buyer-intent grouping.","on_invalid":"reject","allowed_values":[{"value":"family","label":"Family — 1,336"},{"value":"off-road","label":"Off-road — 1,256"},{"value":"budget","label":"Budget friendly — 1,214"},{"value":"economic","label":"Economic — 894"},{"value":"luxury","label":"Luxury — 279"},{"value":"sports","label":"Sports car — 26"}],"example":"family","aliases":["car_type"]},{"name":"make_country","type":"enum","required":false,"description":"Country the brand comes from.","on_invalid":"reject","allowed_values":[{"value":"japan","label":"Japanese makes — 1,298"},{"value":"korea","label":"Korean — 1,072"},{"value":"china","label":"Chinese — 720"},{"value":"america","label":"American — 280"},{"value":"german","label":"German — 180"},{"value":"france","label":"French — 71"},{"value":"british","label":"British — 26"},{"value":"italy","label":"Italian — 17"},{"value":"india","label":"Indian — 1"}],"example":"japan"},{"name":"payment","type":"enum","required":false,"description":"Accepted payment / instalment scheme.","on_invalid":"reject","allowed_values":[{"value":"cash","label":"Cash only — 1,218"},{"value":"cash_and_finance","label":"Cash or financing"},{"value":"tamara","label":"Tamara instalments"},{"value":"tabby","label":"Tabby instalments"},{"value":"amwal","label":"Amwal instalments"}],"example":"cash_and_finance","aliases":["transaction_type"]},{"name":"exterior_color_id","type":"integer","required":false,"description":"Exterior colour id (White 1, Black 2, Silver 3, Grey 10, Leaden 26 — 32 colours). `filters` lists them all with counts and hex codes.","on_invalid":"reject","example":2,"minimum":1,"aliases":["color_id"]},{"name":"interior_color_id","type":"integer","required":false,"description":"Interior colour id (Beige 16, Black 2, Grey 10, Camel 17 — 24 values).","on_invalid":"reject","example":2,"minimum":1},{"name":"cylinders","type":"integer","required":false,"description":"Cylinder count (3, 4, 5, 6 or 8).","on_invalid":"reject","example":6,"minimum":1,"maximum":16},{"name":"seats","type":"integer","required":false,"description":"Seat count (2-26; 5 seats = 2,936 of 3,674).","on_invalid":"reject","example":7,"minimum":1,"maximum":60},{"name":"cabins","type":"integer","required":false,"description":"Pickup cabin count: 1 = single cab (26 rows), 2 = double cab (83).","on_invalid":"reject","example":2,"minimum":1,"maximum":2},{"name":"engine_size","type":"string","required":false,"description":"Engine displacement exactly as syarah labels it ('1.5', '2.0', '2.5', '5.7' — 34 values).","on_invalid":"reject","example":"2.5","aliases":["displacement"]},{"name":"feature_ids","type":"string","required":false,"description":"Equipment / feature ids, comma-separated. Measured bite: 15 (Rear Camera) → 2,121 of 3,674 · 6 (Cruise Control) → 2,838 · 20 (Alloy wheels) → 3,005. 🔴 Several ids are OR'd by the source, not AND'd (\"15,6\" → 3,076, i.e. more cars, not fewer). The `filters` action lists every feature id with its live count under the popular / comfort / technology / safety / exterior groups.","on_invalid":"reject","example":"15","aliases":["features","option_ids","equipment"]},{"name":"deal_id","type":"integer","required":false,"description":"Syarah's own running campaign id (the `deal` block of any search answer names the current one). Measured: deal 124 'Last Chance' held 23 cars.","on_invalid":"reject","example":124,"minimum":1},{"name":"booked","type":"boolean","required":false,"description":"Restrict to cars already reserved (true, 506 rows) or still open (false, 3,168).","on_invalid":"reject","example":false,"aliases":["is_booked","reserved"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest model year. 🔴 A one-sided range is IGNORED by syarah, so if you omit `year_max` this engine supplies the source's own upper bound and says so in `meta.warnings`.","on_invalid":"reject","example":2023,"minimum":1950,"maximum":2100,"aliases":["min_year","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest model year (inclusive).","on_invalid":"reject","example":2026,"minimum":1950,"maximum":2100,"aliases":["max_year","year_to"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price, in the currency the answer reports (SAR on every measured call).","on_invalid":"reject","example":30000,"minimum":0,"aliases":["min_price","price_from"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price.","on_invalid":"reject","example":80000,"minimum":0,"aliases":["max_price","price_to"]},{"name":"km_min","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_km","mileage_min","odometer_from"]},{"name":"km_max","type":"integer","required":false,"description":"Highest odometer reading in kilometres. Measured bite: 0-20,000 km = 1,128 of 3,674.","on_invalid":"reject","example":60000,"minimum":0,"aliases":["max_km","mileage_max","odometer_to"]},{"name":"installment_min","type":"integer","required":false,"description":"Lowest monthly instalment. 🔴 Any instalment range also drops the 1,218 cars that carry no instalment at all (measured: the widest possible range returns 2,456 of 3,674).","on_invalid":"reject","example":500,"minimum":0},{"name":"installment_max","type":"integer","required":false,"description":"Highest monthly instalment.","on_invalid":"reject","example":1500,"minimum":0},{"name":"lang","type":"enum","required":false,"description":"Language of the LABELS in the answer (make/model/colour/fuel names). The id filters and the `text` query work the same on both.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels (the site's primary language)"}],"default":"en","example":"en","aliases":["language"]}],"returns":"`{enums{<field>: [{id, name, name_en, name_ar, count, hex_code?, parent_ids?}]}, ranges{<field>: {start, end, gap, unit}}, total_results, currency}`. Field names are the source's own.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"text":"land cruiser"}},{"name":"suggest","description":"Syarah's own type-ahead for a partial query, in English or Arabic. Use it to turn a shopper's half-typed phrase into terms the `text` filter actually matches. 182 bytes a call.","required_params":["q"],"optional_params":[],"params":[{"name":"q","type":"string","required":true,"description":"Partial query, English or Arabic ('camry', 'كامري', 'land cru').","on_invalid":"reject","example":"camry","aliases":["query","text","prefix"]},{"name":"lang","type":"enum","required":false,"description":"Language surface.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels (the site's primary language)"}],"default":"en","example":"en","aliases":["language"]}],"returns":"`rows[]` of {suggestion} in the source's own order.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"camry"}},{"name":"batch","description":"Up to 100 listings' search-shaped rows in ONE request — the cheap way to re-check prices and availability on a watchlist instead of calling `detail` per car. Returns the same row shape as `search`, plus the ids that no longer exist so a disappeared listing is visible rather than silently missing.","required_params":["ids"],"optional_params":[],"params":[{"name":"ids","type":"array","required":true,"description":"Listing ids (array, or a comma-separated string). At most 100 per call — measured working at 100 ids / 209 KB in a single request.","on_invalid":"reject","example":["316148","319173"],"aliases":["post_ids","id"]},{"name":"lang","type":"enum","required":false,"description":"Language of the labels.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English labels"},{"value":"ar","label":"Arabic labels (the site's primary language)"}],"default":"en","example":"en","aliases":["language"]}],"returns":"`{rows[], found, requested, missing_ids[]}` — rows in the `search` shape. `missing_ids` are the requested ids the source did not return.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"ids":["316148","319173"]}}]},{"name":"takealot","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"takealot API scraper — South Africa's largest online marketplace (takealot.com): search and category browse, the full product record with both buy-box offers and every other seller, bulk price and stock lookups for up to 100 products per call, seller storefronts, customer reviews, running deals and search suggestions, in rand. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/takealot/v1","spec_available":true,"actions":[{"name":"search","description":"Search takealot.com by keyword: product id (PLID), title, brand, image, the price (or the price range for variant products), takealot's list price kept apart, rating with review count and star distribution, stock status with the Cape Town / Johannesburg / Durban warehouses and the delivery estimate. Filter by brand, price, rating, in-stock, warehouse and condition; sort by relevance, price, rating or newest; page with a cursor.","required_params":["query"],"optional_params":["country","cursor","sort","brand","price_min","price_max","min_rating","in_stock","warehouse","condition","include_facets","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for on takealot.","on_invalid":"reject","example":"air fryer","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"cursor","type":"string","required":false,"description":"Next page. Pass the `next_cursor` of the previous response; omit for page 1. takealot pages by cursor only (36 products per page).","on_invalid":"reject","example":"WzExLjM0MTMyNCw5NjMxNDQxNV0"},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only takealot's own orderings are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"takealot's default ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Top rated first"},{"value":"newest","label":"Newest arrivals first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Brand name exactly as takealot lists it (every row returns `brand`; `facets` lists the brands on a query).","on_invalid":"reject","example":"Apple"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in rand.","on_invalid":"reject","minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in rand.","on_invalid":"reject","minimum":0,"aliases":["max_price"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-4, takealot's own buckets).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"in_stock","type":"boolean","required":false,"description":"true: only products takealot shows as in stock (not 'ships in N days').","on_invalid":"reject","default":false},{"name":"warehouse","type":"enum","required":false,"description":"Only products in stock at this takealot warehouse (takealot's own filter).","on_invalid":"reject","allowed_values":[{"value":"cpt","label":"In stock in Cape Town"},{"value":"jhb","label":"In stock in Johannesburg"},{"value":"dbn","label":"In stock in Durban"}]},{"name":"condition","type":"enum","required":false,"description":"Product condition as takealot classifies it.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"refurbished","label":"Refurbished / certified pre-owned"}]},{"name":"include_facets","type":"boolean","required":false,"description":"true: also return takealot's filter panel (brands, price bands, warehouses, conditions, attributes with counts) and related searches.","on_invalid":"ignore","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"takealot sometimes answers a keyword with no real match with a few unrelated products. Default: those are dropped (results empty, fallback_results_dropped counts them). true: returned apart in fallback_results.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{plid, product_id, tsin, offer_sku (on a multi_offer row: the lowest-priced offer's sku), title, subtitle, brand, authors[], url, image, image_count, price (lowest price on the row), price_max (the higher price on the row: dearest variant, or on a multi_offer row the preselected buy-box offer), price_is_range (true only for a variant range), listing_shape (single_offer|multi_offer|variants|unavailable), buybox_price (the preselected buy-box offer — what product/detail returns as price; null when a variant must be chosen), buybox_is_cheapest, currency (ZAR), list_price (takealot's 'List price' — only when above the price; a reference, not a was-price), list_price_discount_percent, saving_text, saving_badge, promotion_id, rating, review_count, rating_scale (5), rating_distribution{5..1}, in_stock, availability (in_stock|ships_in_days|out_of_stock|preorder|other), stock_status, is_leadtime, is_imported, warehouses[] (CPT/JHB/DBN), delivery_estimate, delivery_type, is_preorder, variant_selection_required, has_more_colours, free_delivery_with_takealotmore}, count, total_results (capped by takealot at 5000), total_is_approximate, total_results_capped, next_cursor, has_more, sort_applied, filters_applied, facets[]{name, filter_name, entries[]{label, value, count}} (include_facets), related_searches[] (include_facets), keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[], filter_leak_rows_dropped (out-of-stock rows takealot returned despite in_stock / warehouse), currency, country, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"air fryer"}},{"name":"category/products","description":"Browse one takealot department or category (slug path or category URL) with the same product rows, filters, sorts and cursor paging as `search`.","required_params":["category"],"optional_params":["country","cursor","sort","brand","price_min","price_max","min_rating","in_stock","warehouse","condition","include_facets","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"takealot category path or URL, e.g. 'cellular-gps' (a department), 'cellular-gps/cellphones-26249' or https://www.takealot.com/home-kitchen/air-fryers-25752. Product breadcrumbs return these slugs.","on_invalid":"reject","example":"cellular-gps/cellphones-26249","aliases":["category_url","url"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"cursor","type":"string","required":false,"description":"Next page. Pass the `next_cursor` of the previous response; omit for page 1. takealot pages by cursor only (36 products per page).","on_invalid":"reject","example":"WzExLjM0MTMyNCw5NjMxNDQxNV0"},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only takealot's own orderings are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"takealot's default ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Top rated first"},{"value":"newest","label":"Newest arrivals first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Brand name exactly as takealot lists it (every row returns `brand`; `facets` lists the brands on a query).","on_invalid":"reject","example":"Apple"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in rand.","on_invalid":"reject","minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in rand.","on_invalid":"reject","minimum":0,"aliases":["max_price"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-4, takealot's own buckets).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"in_stock","type":"boolean","required":false,"description":"true: only products takealot shows as in stock (not 'ships in N days').","on_invalid":"reject","default":false},{"name":"warehouse","type":"enum","required":false,"description":"Only products in stock at this takealot warehouse (takealot's own filter).","on_invalid":"reject","allowed_values":[{"value":"cpt","label":"In stock in Cape Town"},{"value":"jhb","label":"In stock in Johannesburg"},{"value":"dbn","label":"In stock in Durban"}]},{"name":"condition","type":"enum","required":false,"description":"Product condition as takealot classifies it.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"refurbished","label":"Refurbished / certified pre-owned"}]},{"name":"include_facets","type":"boolean","required":false,"description":"true: also return takealot's filter panel (brands, price bands, warehouses, conditions, attributes with counts) and related searches.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{plid, product_id, tsin, offer_sku (on a multi_offer row: the lowest-priced offer's sku), title, subtitle, brand, authors[], url, image, image_count, price (lowest price on the row), price_max (the higher price on the row: dearest variant, or on a multi_offer row the preselected buy-box offer), price_is_range (true only for a variant range), listing_shape (single_offer|multi_offer|variants|unavailable), buybox_price (the preselected buy-box offer — what product/detail returns as price; null when a variant must be chosen), buybox_is_cheapest, currency (ZAR), list_price (takealot's 'List price' — only when above the price; a reference, not a was-price), list_price_discount_percent, saving_text, saving_badge, promotion_id, rating, review_count, rating_scale (5), rating_distribution{5..1}, in_stock, availability (in_stock|ships_in_days|out_of_stock|preorder|other), stock_status, is_leadtime, is_imported, warehouses[] (CPT/JHB/DBN), delivery_estimate, delivery_type, is_preorder, variant_selection_required, has_more_colours, free_delivery_with_takealotmore}, count, total_results (capped by takealot at 5000), total_is_approximate, total_results_capped, next_cursor, has_more, sort_applied, filters_applied, facets[]{name, filter_name, entries[]{label, value, count}} (include_facets), related_searches[] (include_facets), keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[], filter_leak_rows_dropped (out-of-stock rows takealot returned despite in_stock / warehouse), currency, country, department_slug, category_slug","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"cellular-gps/cellphones-26249"}},{"name":"product/detail","description":"The full takealot product record by PLID or URL: title, subtitle, brand, description, highlights, gallery, barcode (when published and valid), model, warranty, the preselected buy-box price with takealot's list price kept apart, the cheapest and dearest offer, reward points, availability with warehouses and delivery estimate, the seller (takealot or a marketplace seller with its rating), both buy-box offers and every other offer, rating with star distribution, breadcrumbs and category paths, the specification table, colour and size variants (pick one with `colour` / `size`) and running promotions.","required_params":["product_id"],"optional_params":["country","colour","size","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"takealot product id: 'PLID93227833', '93227833' or a product URL.","on_invalid":"reject","example":"PLID93227833","aliases":["plid","id","url"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"colour","type":"string","required":false,"description":"Pick a colour variant (exactly as in `variants[].options[].value`).","on_invalid":"reject","example":"Black","aliases":["color","colour_variant"]},{"name":"size","type":"string","required":false,"description":"Pick a size variant (exactly as in `variants[].options[].value`).","on_invalid":"reject","example":"UK 9"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{plid, product_id, tsin, offer_sku, title, subtitle, brand, authors[], url, description, highlights[], images[], gtin (null unless published with a valid check digit), mpn, model, warranty, price (the preselected buy-box offer; for a product that needs a variant choice, takealot's 'from' price with price_is_from true), price_is_from, currency, list_price (takealot's reference 'List price', only when above price), list_price_discount_percent, price_min, price_max (cheapest / dearest offer on the page), reward_prices[]{program (eBucks|Discovery Miles), points} (the same price in points, not a discount), availability (in_stock|ships_in_days|out_of_stock|preorder|select_variant), in_stock, stock_status, warehouses[], delivery_estimate, delivery_surcharge (bulky-goods surcharge in rand, null when none), is_preorder, variant_selection_required, sold_by_takealot, seller{seller_id, seller_type (takealot|marketplace), seller_name, seller_rating, seller_rating_count, seller_rating_scale, seller_vat_registered}, buybox_is_cheapest, offer_count, offers[] (as in product/offers), rating, review_count, rating_scale, rating_distribution{5..1}, breadcrumbs[]{id, name, slug, type}, category_paths[][], category, specifications[]{name, value}, variants[]{type (colour|size), title, options[]{value, available, selected, image}}, promotions[]{promotion_id, name, group_id}, country}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"PLID93227833"}},{"name":"product/offers","description":"Every offer on one takealot product, cheapest first: both buy-box offers (the preselected 'Fastest Delivery' one and the 'Best Price' one) plus every other seller, each with price, condition, seller id, type (takealot or marketplace), name and rating where takealot publishes them, stock status, warehouses and delivery estimate.","required_params":["product_id"],"optional_params":["country","colour","size","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"takealot product id: 'PLID93227833', '93227833' or a product URL.","on_invalid":"reject","example":"PLID96400591","aliases":["plid","id","url"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"colour","type":"string","required":false,"description":"Pick a colour variant (exactly as in `variants[].options[].value`).","on_invalid":"reject","example":"Black","aliases":["color","colour_variant"]},{"name":"size","type":"string","required":false,"description":"Pick a size variant (exactly as in `variants[].options[].value`).","on_invalid":"reject","example":"UK 9"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{plid, product_id, title, brand, url, currency, price (preselected buy-box offer), price_min, price_max, buybox_is_cheapest, offer_count, availability, variant_selection_required} + offers[]{position, offer_sku, source (buybox|other_offers), buybox_preference (fastest|lowest_priced), buybox_label, preselected, condition, price, currency, list_price, list_price_discount_percent, seller_id, seller_type, seller_name (null where takealot does not publish it), seller_rating, seller_rating_count, seller_rating_scale, seller_vat_registered, in_stock, availability, stock_status, is_leadtime, is_imported, warehouses[], delivery_estimate, delivery_type, delivery_surcharge, add_to_cart_available, free_shipping, reward_prices[]} + count","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"PLID96400591"}},{"name":"product/reviews","description":"Customer reviews of one takealot product, 10 per page: star rating, title, text, date, the reviewer's display name, helpful votes, how long after purchase it was written and the variant bought. Sort by most helpful or newest; filter by star rating.","required_params":["product_id"],"optional_params":["country","page","sort","rating","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"takealot product id: 'PLID93227833', '93227833' or a product URL.","on_invalid":"reject","example":"PLID93227833","aliases":["plid","id","url"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based (10 reviews per page).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"most_helpful","label":"Most helpful first (takealot's default)"},{"value":"newest","label":"Most recent first"}],"default":"most_helpful"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with exactly this many stars.","on_invalid":"reject","minimum":1,"maximum":5},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"reviews[]{review_id, rating, title, body, date (YYYY-MM-DD), author, helpful_votes, time_after_purchase, variant[], tsin}, count, total_reviews, total_pages, page, has_more, sort_applied, product_id, plid","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"PLID93227833"}},{"name":"deals","description":"Every promotion running on takealot right now: promotion id, name, start and end, and a link. Use `deals/products` with a promotion id for the discounted products.","required_params":[],"optional_params":["country","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"deals[]{promotion_id, name, short_name, group_id, active, starts_at, ends_at, qualifying_quantity, url}, count, country","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"za"}},{"name":"deals/products","description":"The products in one takealot promotion, with the same rows, filters, sorts and cursor paging as `search`.","required_params":["promotion_id"],"optional_params":["country","cursor","sort","brand","price_min","price_max","min_rating","in_stock","warehouse","condition","include_facets","max_rotations"],"params":[{"name":"promotion_id","type":"string","required":true,"description":"A takealot promotion id — `deals` returns every running one.","on_invalid":"reject","example":"124137","aliases":["deal_id","id"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"cursor","type":"string","required":false,"description":"Next page. Pass the `next_cursor` of the previous response; omit for page 1. takealot pages by cursor only (36 products per page).","on_invalid":"reject","example":"WzExLjM0MTMyNCw5NjMxNDQxNV0"},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only takealot's own orderings are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"takealot's default ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Top rated first"},{"value":"newest","label":"Newest arrivals first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Brand name exactly as takealot lists it (every row returns `brand`; `facets` lists the brands on a query).","on_invalid":"reject","example":"Apple"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in rand.","on_invalid":"reject","minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in rand.","on_invalid":"reject","minimum":0,"aliases":["max_price"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-4, takealot's own buckets).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"in_stock","type":"boolean","required":false,"description":"true: only products takealot shows as in stock (not 'ships in N days').","on_invalid":"reject","default":false},{"name":"warehouse","type":"enum","required":false,"description":"Only products in stock at this takealot warehouse (takealot's own filter).","on_invalid":"reject","allowed_values":[{"value":"cpt","label":"In stock in Cape Town"},{"value":"jhb","label":"In stock in Johannesburg"},{"value":"dbn","label":"In stock in Durban"}]},{"name":"condition","type":"enum","required":false,"description":"Product condition as takealot classifies it.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"refurbished","label":"Refurbished / certified pre-owned"}]},{"name":"include_facets","type":"boolean","required":false,"description":"true: also return takealot's filter panel (brands, price bands, warehouses, conditions, attributes with counts) and related searches.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{plid, product_id, tsin, offer_sku (on a multi_offer row: the lowest-priced offer's sku), title, subtitle, brand, authors[], url, image, image_count, price (lowest price on the row), price_max (the higher price on the row: dearest variant, or on a multi_offer row the preselected buy-box offer), price_is_range (true only for a variant range), listing_shape (single_offer|multi_offer|variants|unavailable), buybox_price (the preselected buy-box offer — what product/detail returns as price; null when a variant must be chosen), buybox_is_cheapest, currency (ZAR), list_price (takealot's 'List price' — only when above the price; a reference, not a was-price), list_price_discount_percent, saving_text, saving_badge, promotion_id, rating, review_count, rating_scale (5), rating_distribution{5..1}, in_stock, availability (in_stock|ships_in_days|out_of_stock|preorder|other), stock_status, is_leadtime, is_imported, warehouses[] (CPT/JHB/DBN), delivery_estimate, delivery_type, is_preorder, variant_selection_required, has_more_colours, free_delivery_with_takealotmore}, count, total_results (capped by takealot at 5000), total_is_approximate, total_results_capped, next_cursor, has_more, sort_applied, filters_applied, facets[]{name, filter_name, entries[]{label, value, count}} (include_facets), related_searches[] (include_facets), keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[], filter_leak_rows_dropped (out-of-stock rows takealot returned despite in_stock / warehouse), currency, country, promotion_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"promotion_id":"124137"}},{"name":"products/batch","description":"1 credit per 10 products returned (min 1 per call). Up to 100 takealot products in one call, read from takealot's own multi-id search (one upstream request per 36 ids): for each PLID the buy-box price takealot preselects, the cheapest buy-box offer when two compete, the variant price range when a variant must be chosen, takealot's list price, tsin and offer sku, stock status with the Cape Town / Johannesburg / Durban warehouses and the delivery estimate, rating and review count, in rand. Ids takealot does not currently list for sale (out of stock everywhere, unlisted, or no such product) come back in `not_listed`. Every seller's offer is in product/offers. Billing: 100 products = 10 credits; `not_listed` and `failed` ids are not counted.","required_params":["product_ids"],"optional_params":["country","max_rotations"],"params":[{"name":"product_ids","type":"array","required":true,"description":"Up to 100 takealot product ids: a list, or one string separated by commas, spaces or '|'. Each may be 'PLID93227833', '93227833' or a product URL. Duplicates are collapsed; the order you send is the order returned.","on_invalid":"reject","example":["PLID93227833","PLID95957224","PLID72799722"],"aliases":["plids","ids"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"products[] (in request order; each as a search row: plid, product_id, tsin, offer_sku, title, brand, url, price, price_max, price_is_range, listing_shape (single_offer|multi_offer|variants|unavailable), buybox_price, buybox_is_cheapest, currency, list_price, list_price_discount_percent, in_stock, availability, stock_status, warehouses[], delivery_estimate, variant_selection_required, rating, review_count, …), count, requested, not_listed[] (PLIDs takealot's live catalogue did not return — call product/detail to tell out-of-stock from unknown), failed[] (PLIDs whose chunk could not be fetched this time; retry them), upstream_requests, currency, country","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":10,"min":1},"example_params":{"product_ids":["PLID93227833","PLID95957224"]}},{"name":"seller/products","description":"Every product a takealot marketplace seller lists (the seller's storefront), with the same rows, filters, sorts and cursor paging as `search`. The row prices are the product's buy-box prices, not necessarily this seller's own offer — product/offers has every seller's price.","required_params":["seller_id"],"optional_params":["country","cursor","sort","brand","price_min","price_max","min_rating","in_stock","warehouse","condition","include_facets","max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"takealot marketplace seller id — every offer in product/offers returns it as `seller_id` — or a seller page URL (…/seller/<name>?sellers=29844711).","on_invalid":"reject","example":"29844711","aliases":["seller","url"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"cursor","type":"string","required":false,"description":"Next page. Pass the `next_cursor` of the previous response; omit for page 1. takealot pages by cursor only (36 products per page).","on_invalid":"reject","example":"WzExLjM0MTMyNCw5NjMxNDQxNV0"},{"name":"sort","type":"enum","required":false,"description":"Order of results. Only takealot's own orderings are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"takealot's default ranking"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"},{"value":"rating","label":"Top rated first"},{"value":"newest","label":"Newest arrivals first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Brand name exactly as takealot lists it (every row returns `brand`; `facets` lists the brands on a query).","on_invalid":"reject","example":"Apple"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in rand.","on_invalid":"reject","minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"number","required":false,"description":"Highest price in rand.","on_invalid":"reject","minimum":0,"aliases":["max_price"]},{"name":"min_rating","type":"integer","required":false,"description":"Only products rated at least this many stars (1-4, takealot's own buckets).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"in_stock","type":"boolean","required":false,"description":"true: only products takealot shows as in stock (not 'ships in N days').","on_invalid":"reject","default":false},{"name":"warehouse","type":"enum","required":false,"description":"Only products in stock at this takealot warehouse (takealot's own filter).","on_invalid":"reject","allowed_values":[{"value":"cpt","label":"In stock in Cape Town"},{"value":"jhb","label":"In stock in Johannesburg"},{"value":"dbn","label":"In stock in Durban"}]},{"name":"condition","type":"enum","required":false,"description":"Product condition as takealot classifies it.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"refurbished","label":"Refurbished / certified pre-owned"}]},{"name":"include_facets","type":"boolean","required":false,"description":"true: also return takealot's filter panel (brands, price bands, warehouses, conditions, attributes with counts) and related searches.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{plid, product_id, tsin, offer_sku (on a multi_offer row: the lowest-priced offer's sku), title, subtitle, brand, authors[], url, image, image_count, price (lowest price on the row), price_max (the higher price on the row: dearest variant, or on a multi_offer row the preselected buy-box offer), price_is_range (true only for a variant range), listing_shape (single_offer|multi_offer|variants|unavailable), buybox_price (the preselected buy-box offer — what product/detail returns as price; null when a variant must be chosen), buybox_is_cheapest, currency (ZAR), list_price (takealot's 'List price' — only when above the price; a reference, not a was-price), list_price_discount_percent, saving_text, saving_badge, promotion_id, rating, review_count, rating_scale (5), rating_distribution{5..1}, in_stock, availability (in_stock|ships_in_days|out_of_stock|preorder|other), stock_status, is_leadtime, is_imported, warehouses[] (CPT/JHB/DBN), delivery_estimate, delivery_type, is_preorder, variant_selection_required, has_more_colours, free_delivery_with_takealotmore}, count, total_results (capped by takealot at 5000), total_is_approximate, total_results_capped, next_cursor, has_more, sort_applied, filters_applied, facets[]{name, filter_name, entries[]{label, value, count}} (include_facets), related_searches[] (include_facets), keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[], filter_leak_rows_dropped (out-of-stock rows takealot returned despite in_stock / warehouse), currency, country, seller_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"29844711"}},{"name":"search/suggest","description":"takealot's search-box suggestions for what a shopper has typed so far.","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far.","on_invalid":"reject","example":"iph","aliases":["q","prefix"]},{"name":"country","type":"enum","required":false,"description":"takealot sells in South Africa only; prices are in rand (ZAR).","on_invalid":"reject","allowed_values":[{"value":"za","label":"South Africa (ZAR)"}],"default":"za","example":"za"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{term, departments[], categories[]}, count, query, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"air fryer"}}]},{"name":"target","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Target API — search or browse the target.com (US) catalogue and pull one product in full: the UPC barcode, shipping weight and package dimensions, the complete image gallery, the whole colour/size variant matrix with each variant's own price, stock and native Target id, the specification table, brand, availability, star rating with its full distribution, and customer reviews inline — one call, no API key, account or cookie required","version":"1.0.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/target/v1","spec_available":true,"actions":[{"name":"search","description":"Find products on target.com (US). Give a free-text `query` ('coffee maker', 'lego star wars', 'nike running shoes') to run Target's own site search, or a `category` path ('/c/cpus/-/N-01vhh', '/b/apple/-/N-5y3ej') to browse a Target category or brand page. Every product comes back with BOTH of Target's ids — the parent product id and the specific colour/size id — plus the name, brand, category, image, current price, the crossed-out list price when it is on sale, the star rating and rating count, and the product URL. Narrow with `sort`, `min_price` and `max_price`; page with `page` and `max_results`.","required_params":[],"optional_params":["query","category","page","max_results","sort","min_price","max_price"],"params":[{"name":"query","type":"string","required":false,"description":"What to search target.com for — a product type, a brand, or a brand plus a product ('laptop', 'coffee maker', 'lego star wars', 'nike running shoes'). This runs target.com's own site search and returns its own result order. Provide `query` OR `category`. Target serves 24 products per page and this API pages through them for you up to `max_results`; `meta.pagination` reports the deepest offset Target's own pagination links publish for that query, which is how many results it will let anyone page through (1 176 for 'laptop', 912 for 'lego', 432 for 'dog food' at the time of writing). IMPORTANT, so you can plan around it: target.com NEVER returns an empty search page — a keyword it cannot match comes back as 24 unrelated recommendations with a '200 results' label. This API measures that for you and reports it in `meta.keyword_match_rate` (real keywords score 0.62-1.00, nonsense scores 0.00), and warns in `meta.notes` when the rows are recommendations rather than matches.","on_invalid":"reject","example":"coffee maker","aliases":["q","keyword","search","search_term","text"]},{"name":"category","type":"string","required":false,"description":"A target.com category or brand page to browse instead of searching, given as the path of a target.com URL — `/c/cpus/-/N-01vhh`, `/c/marvel-collectibles/-/N-007on`, `/b/apple/-/N-5y3ej`. A full https://www.target.com/c/... URL is accepted too. Both forms come straight from Target's own sitemaps (6 215 category pages, 37 368 brand pages), which are the authoritative list: https://www.target.com/sitemap_taxonomy-categories-index.xml.gz and .../sitemap_taxonomy-brand-index.xml.gz. Note that some Target `/c/` URLs are landing/hub pages rather than product grids — those return zero products with `meta.notes` saying so and `related_categories` listing the real grids underneath them, rather than a misleading empty result.","on_invalid":"reject","example":"/c/cpus/-/N-01vhh","aliases":["category_path","path","browse","c"]},{"name":"page","type":"integer","required":false,"description":"Which page to start from (1-based). Target's page size is 24 and is not adjustable, so page 2 is results 25-48. Page until `meta.pagination.has_more` is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-192). Target serves 24 per upstream page, so asking for more than 24 fetches more pages — each one is a further ~190 KB request against Target, so ask for what you will use.","on_invalid":"ignore","default":24,"example":48,"minimum":1,"maximum":192,"aliases":["limit","max","count"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering, using Target's own sort tokens. Every value here is measured to change the order (`PriceLow` on 'laptop' returns $5.00-$13.49 first, `PriceHigh` returns $5 842-$3 999 first). `relevance` is Target's default, so passing it explicitly returns the same sequence as omitting `sort`. The list is closed on purpose: Target SILENTLY IGNORES a sort token it does not recognise and returns the default order, so an invalid value is rejected here rather than quietly given back to you as if it had sorted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Target's own default relevance order — the same sequence as omitting `sort`"},{"value":"bestselling","label":"Best sellers first"},{"value":"PriceLow","label":"Cheapest first"},{"value":"PriceHigh","label":"Most expensive first"},{"value":"RatingHigh","label":"Highest customer rating first"},{"value":"newest","label":"Newest first"}],"example":"PriceLow","aliases":["order","sort_by"]},{"name":"min_price","type":"number","required":false,"description":"Keep only products priced at or above this, in US dollars, using Target's own price filter. Verified to bite: `min_price=100&max_price=300` on 'laptop' returns only products between those bounds.","on_invalid":"ignore","example":100,"minimum":0,"aliases":["price_min","minprice"]},{"name":"max_price","type":"number","required":false,"description":"Keep only products priced at or below this, in US dollars, using Target's own price filter. Combine with `min_price` for a band.","on_invalid":"ignore","example":300,"minimum":0,"aliases":["price_max","maxprice"]}],"returns":"products[]{variant_tcin, product_tcin, url, position, name, brand, brand_url, category, image, price, list_price, currency, on_sale, in_stock (always null here), availability (always null here), rating, rating_count, review_count (always null here), offer_type} + related_categories[]{name, path} (the real product grids under a Target landing page, when you browsed one). TWO IDS, ON PURPOSE — `product_tcin` is the parent product page and is what you normally pass to `product_detail`; `variant_tcin` is the specific colour/size Target listed for that row. On some categories they are always different (measured: 24/24 rows on 't-shirt') and on others always the same (0/24 on 'lego'), so this API never collapses them into one 'id' — that would silently re-key your database on half the catalogue. Both are accepted by `product_detail`. meta.pagination{page, page_size, returned, offset, deepest_offset, total_results, total_results_at_most, has_more, next_page} — `total_results` is Target's OWN printed count and is null when Target does not print one (measured: it printed one on 7 of 15 sampled queries), so instead of inventing a total this API also reports the deepest offset Target's own pagination links go to and the upper bound that implies. meta.filters{applied, notes} says exactly what was sent. meta.route is 'crawler_ua' and meta.field_sources says which surface served which field. 🔴 TARGET'S SEARCH NEVER RETURNS EMPTY, so this API measures the match for you. Ask target.com for a keyword it cannot match and it answers HTTP 200 with 24 unrelated products and its own '200 results' label (and a second nonsense keyword returns 24 completely different ones), which counting rows would score as a successful search. `meta.keyword_match_rate` is the fraction of returned rows that actually contain a word from your query — 0.62-1.00 for real keywords and 0.00 for nonsense, measured over 15 queries — and below 0.15 `meta.notes` tells you in plain language that these are Target's recommendations rather than matches. 🔴 NO STOCK SIGNAL ON THE SEARCH GRID. `in_stock`, `availability` and `review_count` are ALWAYS null here, on every row and every query (measured 0 of 192 rows over 8 different searches), because Target's search listing does not publish a stock state or a written-review count at all — the values are not on that page in any form. This API returns them as null instead of guessing. A stock tracker therefore cannot be built on `search`: use it to find the products, then call `product_detail`, which returns `in_stock` and `availability` for the product AND for every colour/size variant, plus `review_count`. `meta.fields_not_published` repeats this on every response. `rating` and `rating_count` DO fill on the grid — it is only the count of written reviews that is missing. HONEST LIMITS: a search row carries no barcode, no weight, no dimensions, no specifications, no variant matrix and no reviews — `product_detail` is where all of those live, and it is one call per product. Target publishes no result count and no facet vocabulary on this surface, so this API offers only the filters it can prove bite: `sort`, `min_price` and `max_price`.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"coffee maker","max_results":24}},{"name":"product_detail","description":"Get one Target product in full, by Target's own id or by its target.com URL. One call returns the UPC barcode, the shipping weight and package dimensions with Target's own units, the complete image gallery, the entire colour/size variant matrix with each variant's own price, list price, stock status, barcode, weight, dimensions, image and native Target id, the specification table parsed into name/value pairs, the brand, the category breadcrumb path, the current price and availability, the star rating with its full 1-5 distribution and Target's secondary ratings, the customer review photos, and the customer reviews inline.","required_params":[],"optional_params":["tcin","url","reviews","include_price"],"params":[{"name":"tcin","type":"string","required":false,"description":"Target's own product id (a 'TCIN'), exactly as `search` returns it — e.g. '87328557'. BOTH ids a search row gives you work: pass `product_tcin` (the parent product) or `variant_tcin` (one specific colour/size) and you get the same product back, because target.com resolves a variant id to its parent page. The response echoes what you asked for in `product.requested_tcin` and always reports the canonical parent in `product.tcin`. Provide `tcin`, or a product `url`.","on_invalid":"reject","example":"87328557","aliases":["product_id","id","product_tcin","variant_tcin","sku"]},{"name":"url","type":"string","required":false,"description":"A full target.com product URL — an alternative to `tcin`. The slug is decorative: only the `A-<id>` part is read, so `/p/-/A-87328557` works too.","on_invalid":"ignore","example":"https://www.target.com/p/women-s-short-sleeve-t-shirt-wild-fable/-/A-87328557","aliases":["product_url"]},{"name":"reviews","type":"integer","required":false,"description":"How many written customer reviews to inline with the product (0-12). This costs NO extra request — the reviews are already in the two pages this call fetches, so 0 saves you nothing but response size. The star rating, the rating count, the full 1-5 star distribution, the recommended percentage, Target's secondary ratings (comfort / quality / sizing / style, where the category has them) and the customer review photos always come back regardless of this value. Target itself only puts a limited number of review bodies on a product page, so `reviews.available_on_page` tells you how many there really were — asking for more than that is not an error, you simply get what exists.","on_invalid":"ignore","default":8,"example":8,"minimum":0,"maximum":12,"aliases":["review_limit","max_reviews"]},{"name":"include_price","type":"boolean","required":false,"description":"Whether to fetch the price, the availability and the per-variant price/stock matrix (default true). These live on a different target.com surface from the barcode, weight, dimensions, specs, images and reviews, so getting them costs ONE extra upstream request of roughly 0.7-1.0 MB. Set false when you only need the catalogue facts — it roughly halves the bytes and the latency of this call, and everything else is unchanged. `meta.route` and `meta.field_sources` always state which surfaces actually answered.","on_invalid":"ignore","default":true,"example":true,"aliases":["with_price","price"]}],"returns":"product{tcin, requested_tcin, is_variant_parent, name, brand, brand_url, url, gtin13, barcode, dpci, package{weight, weight_unit, depth, height, width, dimension_unit}, price, list_price, price_range{min, max, priced_variants, of_variants, derived_from}, currency, on_sale, in_stock, availability, condition, delivery_method, description, description_html, specifications[]{name, value}, bullets[], highlights[], highlights_title, category, category_path[]{name, url, category_id}, product_type, item_type, department, import_designation, seller, return_policy, return_policy_url, images[]{url, role, alt, image_name, model_metadata}, image, image_count, varies_by[], variant_count, variants[]{tcin, name, axes{Color, Size, …}, price, list_price, currency, on_sale, in_stock, availability, condition, barcode, dpci, package{weight, weight_unit, depth, height, width, dimension_unit}, image, url, price_source, catalog_source}, variant_hierarchy[]{axis, value, tcin, swatch_image, image, children[]}, rating, rating_count, review_count, question_count, recommended_percentage, rating_distribution{1..5}, secondary_ratings[]{id, label, value, range, type, selector_text}, review_photos[], reviews{returned, available_on_page, items[]{review_id, rating, title, text, author, author_id, submitted_at, source}}}. FIELD NOTES, so nothing here is a surprise: this product is assembled from TWO target.com surfaces and `meta.field_sources` names which one gave which field. The barcode, weight, dimensions, specifications, images, breadcrumbs, rating distribution and review photos come from Target's product document; the price, the list price, the availability, the GTIN-13 and every per-variant price and stock flag come from Target's crawler render. On a product with colour/size variants the PARENT carries no barcode and no package dimensions — they are on each variant, which is why `variants[]` carries them and the top-level `barcode` can be null on a variation product while all 93 variants have one — and the same is true of `price`: target.com prices a variation product's VARIANTS, not the family, so the top-level `price` is null there and `price_range` gives the measured min/max across the variant rows (clearly marked as derived; no variant is ever given the family's price). `in_stock` is a BOOLEAN because Target publishes no stock quantity anywhere; null means Target said nothing, never zero. Each variant row says where its own data came from: `price_source` and `catalog_source`. `meta.coverage` counts how many of THIS product's variants carry a price, a stock flag, a barcode and a weight, so you can see the completeness of the rows you were given instead of trusting an average. DEGRADED MODE: if the price surface is unavailable the call still SUCCEEDS with everything the product document gives (barcode, weight, dimensions, brand, specs, images, rating, reviews, and the variant list without prices); `meta.degraded` is true and `meta.notes` says exactly which fields are missing and why. It never fails the whole call because the price leg failed. HONEST LIMITS — WHAT TARGET DOES NOT PUBLISH: no stock quantity and no per-store inventory (availability is InStock/OutOfStock only); no seller name for Target's own first-party items; and a minority of items carry no barcode and no package dimensions at all — that is category-dependent and real, so `meta.coverage` reports it per product rather than this text pretending it is always present.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"tcin":"87328557","reviews":5}},{"name":"price","description":"Live price and stock for ONE Target product — the cheap way to refresh products you already hold, without paying for the whole product page. Pass the `tcin` search gave you (either `product_tcin` or `variant_tcin`) or a target.com product `url`. A specific colour/size id returns THAT variant's own price and stock; a parent id of a colour/size family returns every variant's price and stock in `variants[]` (Target prices the variants, not the family, so the top-level `price` is null there and `price_range` gives the min/max over the variants).","required_params":[],"optional_params":["tcin","url"],"params":[{"name":"tcin","type":"string","required":false,"description":"Target's own product id (a 'TCIN'), exactly as `search` returns it — e.g. '87328557'. BOTH ids a search row gives you work: pass `product_tcin` (the parent product) or `variant_tcin` (one specific colour/size) and you get the same product back, because target.com resolves a variant id to its parent page. The response echoes what you asked for in `product.requested_tcin` and always reports the canonical parent in `product.tcin`. Provide `tcin`, or a product `url`.","on_invalid":"reject","example":"87328557","aliases":["product_id","id","product_tcin","variant_tcin","sku"]},{"name":"url","type":"string","required":false,"description":"A full target.com product URL — an alternative to `tcin`. The slug is decorative: only the `A-<id>` part is read, so `/p/-/A-87328557` works too.","on_invalid":"ignore","example":"https://www.target.com/p/women-s-short-sleeve-t-shirt-wild-fable/-/A-87328557","aliases":["product_url"]}],"returns":"tcin, requested_tcin, name, url, price, list_price, currency, on_sale, in_stock, availability, condition, delivery_method, shipping_charge, price_range{min, max, priced_variants, of_variants, derived_from}, variant_count, variants[]{tcin, name, axes{Color, Size, …}, price, list_price, currency, on_sale, in_stock, availability}. `in_stock` is a BOOLEAN (Target publishes InStock/OutOfStock only, no quantity); null means Target said nothing, never zero. `shipping_charge` is always null: Target does not publish a shipping price on this surface. Reads only the part of the product page that carries the offer, so it is one upstream request of roughly 60-100 KB instead of the two ~0.3-1.1 MB pages `product_detail` reads.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"tcin":"85963493"}}]},{"name":"target-au","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Target Australia API — target.com.au product search, prices with was-price and promotions, online and per-store stock, variants, categories and stores","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/target-au/v1","spec_available":true,"actions":[{"name":"search","description":"Search Target Australia's catalogue by keywords, category or collection, with brand, price range, on-sale and sort filters, as the site's own search and category pages list it. Every row carries the printed price, the struck-through \"was\" price shown on the card, the price range across the product's variants, clearance and exclusivity flags, online and in-store stock counts, rating, review count, brand and category. Category pages list one row per colour (the pair product_id + colour_variant_id is the row key); keyword search one row per product. Omit query, category and collection to browse All Products. Target serves at most 10,000 rows per query (`total_capped`); sweep category by category with sort=price_asc.","required_params":[],"optional_params":["query","category","collection","brand","min_price","max_price","on_sale","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Keywords, as typed in Target's search box. Target also returns semantic matches: `matched_by_text` says how many rows contain the words.","on_invalid":"reject","example":"bath towel","aliases":["q","keyword","keywords","text"]},{"name":"category","type":"string","required":false,"description":"A Target category id (`W99700` = Home) from `categories`, or `AP01` for All Products. Combines with `query`.","on_invalid":"reject","example":"W99700","value_pattern":"^(W\\d+|AP01)$","aliases":["category_id","group_id"]},{"name":"collection","type":"string","required":false,"description":"A Target collection id as in the site's own links (`/search?collection_id=womens-sale`), e.g. womens-sale, mens-sale, kids-sale, baby-sale, home-sale, entertainment-sale. Not combined with `query` or `category`.","on_invalid":"reject","example":"womens-sale","aliases":["collection_id"]},{"name":"brand","type":"string","required":false,"description":"Brand name exactly as Target lists it in the `brand` facet (e.g. Anko, Bonds, Target, LEGO). A name Target does not carry answers 0 rows.","on_invalid":"reject","example":"Anko"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in AUD (the printed price, GST included).","on_invalid":"reject","example":10,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in AUD.","on_invalid":"reject","example":30,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only products Target flags as on sale (its own `Sale` filter).","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Target's default order (personalised; not stable across pages — use price_asc to sweep)"},{"value":"newest","label":"Latest first"},{"value":"rating","label":"Best rated first"},{"value":"price_asc","label":"Price low to high (stable across pages)"},{"value":"price_desc","label":"Price high to low"},{"value":"brand","label":"Brand A-Z"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page. Target serves at most the first 10,000 rows of any query.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-200 (the site uses 48).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":200,"aliases":["limit","per_page"]}],"returns":"results[]{position, product_id, colour_variant_id, variant_id, title, brand, url, product_url, image, colour, price, was_price, discount_pct_computed, price_min, price_max, was_price_max, currency, clearance, in_stock, online_stock_qty, store_stock_qty, variant_count, colour_count, rating, review_count, category, category_ids[], online_exclusive, online_only_price} + page + page_size + total + total_capped + has_more + matched_by_text + matched_by_meaning + facets[]{name, label, options[]{value, label, count}} + related_searches[] + price_basis","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"bath towel","sort":"price_asc"}},{"name":"product","description":"One Target Australia product as its product page shows it: title, printed price, \"was\" price, RRP, OnePass price, deal text and promotions (each separate from the price), colours and the shown colour's sizes with their codes, delivery options, breadcrumbs, description, features, materials, images, rating and review count — plus, from Target's catalogue, every variant's price, online stock count and in-store stock count, and the \"was\" price the search card prints (`listing_was_price`). Add `store` for that store's stock level of every variant.","required_params":[],"optional_params":["product_id","url","store"],"params":[{"name":"product_id","type":"string","required":false,"description":"A product id from `search` (`product_id`, e.g. P72203439 or Wgacbt) or any colour/size variant code (e.g. 72203439). A variant code shows that colour. Provide product_id OR url.","on_invalid":"reject","example":"P72203439","aliases":["id","code","sku","variant_id"]},{"name":"url","type":"string","required":false,"description":"A target.com.au product URL (/p/<slug>/<code>).","on_invalid":"reject","example":"https://www.target.com.au/p/anko-3-pack-soft-floral-tea-towels/72203439","aliases":["product_url"]},{"name":"store","type":"string","required":false,"description":"A Target store number from `stores` (e.g. 5123 = Belconnen). On `product` it adds that store's stock for every variant.","on_invalid":"reject","example":"5123","aliases":["store_number","store_id"]}],"returns":"product{product_id, code, title, brand, url, price, price_range, was_price, listing_was_price, discount_pct_computed, rrp, onepass_price, onepass_price_range, onepass_exclusive, target_exclusive, onepass_badge, deal, promotions[]{code, description, is_tmd}, currency, availability, in_stock, online_stock_qty, store_stock_qty, clearance, coming_soon, online_only, delivery{click_and_collect, home_delivery, express_delivery}, labels{}, rating, review_count, category, google_category, breadcrumbs[]{category_id, name, url}, description, features[], extra_info[], care_instructions[], materials[], images[], colour, colour_variant_id, size, colours[]{label, colour_variant_id, url, image}, sizes[]{label, variant_id, url, display_only}, variants[]{variant_id, colour_variant_id, size_variant_id, colour, size, price, listing_was_price, in_stock, online_stock_qty, store_stock_qty, clearance, url, store_stock}, store, store_defaulted, price_basis}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"Wgacbt"}},{"name":"stock","description":"Stock of one Target Australia variant (a colour or size code) in every Target store — or in one store, or one state's stores — as Target's own store-stock service reports it (inStock / lowStock / outOfStock), plus click & collect, home delivery and express delivery availability (give `postcode` for delivery to that postcode). The variant is checked against Target's catalogue first: an unknown code is NOT_FOUND, never a false \"out of stock\".","required_params":["variant_id"],"optional_params":["store","state","postcode"],"params":[{"name":"variant_id","type":"string","required":true,"description":"A colour or size variant code — `variant_id` of a `search` row or of `product.variants[]` (the code at the end of a product URL).","on_invalid":"reject","example":"71696447","aliases":["sku","variant","code"]},{"name":"store","type":"string","required":false,"description":"A Target store number from `stores` (e.g. 5123 = Belconnen). On `product` it adds that store's stock for every variant.","on_invalid":"reject","example":"5123","aliases":["store_number","store_id"]},{"name":"state","type":"enum","required":false,"description":"Limit to the stores of one state or territory.","on_invalid":"reject","allowed_values":[{"value":"act","label":"ACT"},{"value":"nsw","label":"NSW"},{"value":"nt","label":"NT"},{"value":"qld","label":"QLD"},{"value":"sa","label":"SA"},{"value":"tas","label":"TAS"},{"value":"vic","label":"VIC"},{"value":"wa","label":"WA"}],"example":"nsw"},{"name":"postcode","type":"string","required":false,"description":"An Australian postcode; Target answers home and express delivery availability for it (express depends on the postcode).","on_invalid":"reject","example":"2000"}],"returns":"variant_id, product_id, title, colour, price, click_and_collect, home_delivery, express_delivery, any_store_has_stock, available_to_sell, stores[]{store_number, name, state, url, stock} + counts{inStock, lowStock, outOfStock} + postcode + store_defaulted","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"variant_id":"71696447","state":"nsw"}},{"name":"categories","description":"Target Australia's category tree with Target's own product count per category: the top level, or the sub-categories of `parent`, down to `depth` levels. Each `category_id` plugs into `search` as `category`.","required_params":[],"optional_params":["parent","depth"],"params":[{"name":"parent","type":"string","required":false,"description":"List the sub-categories of this category id; omit for the top level.","on_invalid":"reject","example":"W99700","aliases":["category","category_id"]},{"name":"depth","type":"integer","required":false,"description":"How many levels below `parent` to list (1 = direct children).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":4}],"returns":"categories[]{category_id, name, product_count, parent_id, depth, path, has_children} + parent + total_products","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"depth":1}},{"name":"stores","description":"The Target Australia store directory (Target's own store list): store number, name, state and store page. Store numbers plug into `stock` and `product` as `store`.","required_params":[],"optional_params":["state"],"params":[{"name":"state","type":"enum","required":false,"description":"Limit to the stores of one state or territory.","on_invalid":"reject","allowed_values":[{"value":"act","label":"ACT"},{"value":"nsw","label":"NSW"},{"value":"nt","label":"NT"},{"value":"qld","label":"QLD"},{"value":"sa","label":"SA"},{"value":"tas","label":"TAS"},{"value":"vic","label":"VIC"},{"value":"wa","label":"WA"}],"example":"nsw"}],"returns":"stores[]{store_number, name, state, url} + count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"state":"vic"}}]},{"name":"tayara","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Tayara.tn Tunisia Classifieds","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/tayara/v1","spec_available":true,"actions":[{"name":"search","description":"Search Tayara.tn, Tunisia's largest classifieds site: cars, property, phones, electronics, home, fashion, jobs and services. Free text plus the site's own filters (category, governorate, delegation, price, and vehicle/property attributes such as make, model, year, mileage, fuel, rooms and surface). Nothing is required: no parameters browses the whole site newest first.","required_params":[],"optional_params":["query","category","subcategory","governorate","delegation","min_price","max_price","brand","model","fuel","gearbox","body_type","color","condition","year_min","year_max","mileage_min","mileage_max","fiscal_power_min","fiscal_power_max","transaction","rooms_min","rooms_max","bathrooms_min","bathrooms_max","area_min","area_max","ad_params","range_params","sort","page","limit","include_premium","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text query, as a Tunisian buyer would type it (French, Arabic or transliterated). Optional: with no query and no filter you browse the whole site (45,892 live listings on 2026-10-07).","on_invalid":"reject","example":"golf 7","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Top-level category: id, English slug or French name — e.g. `vehicles`, `real-estate`, `tech`, `Immobilier`. Full list: the `categories` action.","on_invalid":"reject","example":"vehicles"},{"name":"subcategory","type":"string","required":false,"description":"Subcategory: id, slug or French name — e.g. `cars`, `appartments`, `phones`, `Voitures`. Implies its category.","on_invalid":"reject","example":"cars","aliases":["sub_category"]},{"name":"governorate","type":"string","required":false,"description":"One of Tunisia's 24 governorates as Tayara names them (Tunis, Ariana, Sfax, Sousse, Nabeul, Ben Arous …). Accents and case are optional.","on_invalid":"reject","example":"Tunis","aliases":["region","city"]},{"name":"delegation","type":"string","required":false,"description":"One or more delegations inside `governorate`, comma separated (e.g. `La Marsa`). Requires governorate. Full list: the `locations` action.","on_invalid":"reject","example":"La Marsa"},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in Tunisian dinars.","on_invalid":"reject","example":10000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in Tunisian dinars.","on_invalid":"reject","example":60000,"minimum":0},{"name":"brand","type":"string","required":false,"description":"Vehicle make exactly as Tayara spells it (Marque): `Volkswagen`, `Peugeot`, `Kia`. Case-sensitive: the site returns nothing for a different capitalisation.","on_invalid":"reject","example":"Volkswagen","aliases":["make"]},{"name":"model","type":"string","required":false,"description":"Vehicle model exactly as Tayara spells it (Modèle), e.g. `Golf`. Case-sensitive.","on_invalid":"reject","example":"Golf"},{"name":"fuel","type":"string","required":false,"description":"Carburant, e.g. `Essence`, `Diesel`.","on_invalid":"reject","example":"Diesel"},{"name":"gearbox","type":"string","required":false,"description":"Boite, e.g. `Manuelle`, `Automatique`.","on_invalid":"reject","example":"Automatique","aliases":["transmission"]},{"name":"body_type","type":"string","required":false,"description":"Type de carrosserie as Tayara spells it.","on_invalid":"reject","example":"Berline"},{"name":"color","type":"string","required":false,"description":"Couleur du véhicule, e.g. `Noir`, `Blanc`.","on_invalid":"reject","example":"Noir"},{"name":"condition","type":"string","required":false,"description":"Etat du véhicule, e.g. `Avec kilométrage`.","on_invalid":"reject","example":"Avec kilométrage"},{"name":"year_min","type":"integer","required":false,"description":"Vehicle year from (Année).","on_invalid":"reject","example":2018},{"name":"year_max","type":"integer","required":false,"description":"Vehicle year to (Année).","on_invalid":"reject","example":2023},{"name":"mileage_min","type":"integer","required":false,"description":"Kilometres from (Kilométrage).","on_invalid":"reject","example":0},{"name":"mileage_max","type":"integer","required":false,"description":"Kilometres up to (Kilométrage).","on_invalid":"reject","example":100000},{"name":"fiscal_power_min","type":"integer","required":false,"description":"Puissance fiscale from (CV).","on_invalid":"reject","example":4},{"name":"fiscal_power_max","type":"integer","required":false,"description":"Puissance fiscale up to (CV).","on_invalid":"reject","example":9},{"name":"transaction","type":"enum","required":false,"description":"Property: for sale or for rent (Type de transaction).","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale (À Vendre)"},{"value":"rent","label":"For rent (À Louer)"}],"example":"rent"},{"name":"rooms_min","type":"integer","required":false,"description":"Property bedrooms from (Chambres).","on_invalid":"reject","example":2},{"name":"rooms_max","type":"integer","required":false,"description":"Property bedrooms up to (Chambres).","on_invalid":"reject","example":4},{"name":"bathrooms_min","type":"integer","required":false,"description":"Bathrooms from (Salles de bains).","on_invalid":"reject","example":1},{"name":"bathrooms_max","type":"integer","required":false,"description":"Bathrooms up to (Salles de bains).","on_invalid":"reject","example":2},{"name":"area_min","type":"integer","required":false,"description":"Surface from, m² (Superficie).","on_invalid":"reject","example":80},{"name":"area_max","type":"integer","required":false,"description":"Surface up to, m² (Superficie).","on_invalid":"reject","example":150},{"name":"ad_params","type":"object","required":false,"description":"Any other attribute filter as {label: value} using the French labels a listing's `attributes` carry, e.g. {\"Livraison\": \"Oui\"}. Exact, case-sensitive match.","on_invalid":"reject","example":{"Carburant":"Diesel"}},{"name":"range_params","type":"object","required":false,"description":"Any numeric attribute range as {label: {min, max}}, e.g. {\"Superficie\": {\"min\": 100, \"max\": 200}}.","on_invalid":"reject","example":{"Année":{"min":2018,"max":""}}},{"name":"sort","type":"enum","required":false,"description":"Result order, the four the site itself offers.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page. Tayara serves at most the first 10,000 results of any query; `last_page` in the response is the last page you can actually reach.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"include_premium","type":"boolean","required":false,"description":"Also return the paid placements Tayara shows above the results, as a separate `premium_listings` list (they are not counted in `total`).","on_invalid":"reject","default":false,"example":false},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. Phone numbers and seller names are returned exactly as the page publishes them.","on_invalid":"reject","default":true,"example":true}],"returns":"{query, total, page, limit, last_page, has_more, sort, filters_applied, listings[], premium_listings[]}. Each listing: id, url, title, description, price_tnd (null when the seller published no price), price_raw, currency TND, category_id/category_name, subcategory_id/subcategory_name, governorate, delegation, published_at (ISO-8601 UTC), image, images[], images_count, seller_name, seller_is_shop, seller_is_approved, seller_avatar, is_premium.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"golf","subcategory":"cars","sort":"newest","limit":30}},{"name":"listing","description":"One Tayara listing in full: title, full description, price, every image, location, the advert's contact phone, all structured attributes (make, model, year, mileage, fuel, rooms, surface …) and the seller block — name, account phone, shop flag, shop page and how many live listings they have.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"Tayara listing id (24 hex characters), from `search`.","on_invalid":"reject","example":"6ac61fbacdf7e8adb5ef4ef1","aliases":["listing_id"]},{"name":"url","type":"string","required":false,"description":"Or the listing URL (https://www.tayara.tn/item/.../<id>/).","on_invalid":"reject","example":"https://www.tayara.tn/item/6ac61fbacdf7e8adb5ef4ef1/"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. Phone numbers and seller names are returned exactly as the page publishes them.","on_invalid":"reject","default":true,"example":true}],"returns":"{id, url, title, description, price_tnd, price_raw, price_ld_json, price_mismatch, currency, category_id, category_name, subcategory_id, subcategory_name, governorate, delegation, published_at, phone, attributes[{label, value}], attributes_map, image, images[], images_count, boost_level, is_sold, is_deleted, state, seller {id, name, phone, email, avatar, is_shop, shop_url, shop_description, address, active_listings}}. Either `id` or `url` is required.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.tayara.tn/item/6ac61fbacdf7e8adb5ef4ef1/"}},{"name":"seller_listings","description":"Every live listing of one Tayara seller or shop, paged and sortable — the seller id comes from a `listing` response.","required_params":["seller_id"],"optional_params":["query","sort","page","limit","include_pii"],"params":[{"name":"seller_id","type":"string","required":true,"description":"The seller id a `listing` returns in seller.id (search rows do not carry it).","on_invalid":"reject","example":"66f1567bb3a80490e8d2e665","aliases":["user_id","publisher_id"]},{"name":"query","type":"string","required":false,"description":"Optional free text inside that seller's listings.","on_invalid":"reject","example":"iphone"},{"name":"sort","type":"enum","required":false,"description":"Result order, the four the site itself offers.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page. Tayara serves at most the first 10,000 results of any query; `last_page` in the response is the last page you can actually reach.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for compatibility; this API never masks anything. Phone numbers and seller names are returned exactly as the page publishes them.","on_invalid":"reject","default":true,"example":true}],"returns":"{seller_id, total, page, limit, last_page, has_more, sort, listings[]}. Listing shape as in `search`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"66f1567bb3a80490e8d2e665","limit":10}},{"name":"categories","description":"Tayara's category tree: 10 top-level categories and their subcategories with the ids, slugs and French names `search` accepts.","required_params":[],"optional_params":["category"],"params":[{"name":"category","type":"string","required":false,"description":"Only this top-level category and its subcategories (id, slug or name).","on_invalid":"reject","example":"vehicles"}],"returns":"{category_count, categories[{id, name, slug, subcategories[{id, name, slug}]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"vehicles"}},{"name":"locations","description":"Tunisia's 24 governorates and their delegations, spelled exactly as Tayara filters on them.","required_params":[],"optional_params":["governorate"],"params":[{"name":"governorate","type":"string","required":false,"description":"Only this governorate's delegations.","on_invalid":"reject","example":"Tunis"}],"returns":"{governorate_count, governorates[{name, delegations[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"governorate":"Tunis"}}]},{"name":"tcgplayer","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"TCGplayer API scraper — the US trading-card marketplace (tcgplayer.com): Magic: The Gathering, Pokémon, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood and 60+ product lines. Search, TCGplayer market price per printing and per condition, every live listing with seller rating and shipping, latest sales and price history, in US dollars. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/tcgplayer/v1","spec_available":true,"actions":[{"name":"search","description":"Search TCGplayer products by name and/or browse a game or set: product id, name, set, set code, collector number, rarity, TCGplayer market price, lowest listing price (with and without shipping), listed median price and image. Filter by game, set, rarity, product type and market-price range; sort by best match, best selling, name or market price; page through results.","required_params":[],"optional_params":["query","game","set","rarity","product_type","min_market_price","max_market_price","sort","page","per_page","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Card or product name as typed in TCGplayer's search box. Optional when game or set is given (browse a whole product line or set).","on_invalid":"reject","example":"charizard","aliases":["q","keyword"]},{"name":"game","type":"enum","required":false,"description":"TCGplayer product line (url_name from the games action). The display name, the numeric id and the aliases mtg, ygo, ptcg, onepiece, lorcana, fab and swu are accepted too.","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering"},{"value":"yugioh","label":"YuGiOh"},{"value":"pokemon","label":"Pokemon"},{"value":"d-and-d-miniatures","label":"D & D Miniatures"},{"value":"heroclix","label":"Heroclix"},{"value":"wow","label":"WoW"},{"value":"cardfight-vanguard","label":"Cardfight Vanguard"},{"value":"force-of-will","label":"Force of Will"},{"value":"dice-masters","label":"Dice Masters"},{"value":"future-card-buddyfight","label":"Future Card BuddyFight"},{"value":"weiss-schwarz","label":"Weiss Schwarz"},{"value":"dragon-ball-z-tcg","label":"Dragon Ball Z TCG"},{"value":"final-fantasy-tcg","label":"Final Fantasy TCG"},{"value":"universus","label":"UniVersus"},{"value":"star-wars-destiny","label":"Star Wars: Destiny"},{"value":"dragon-ball-super-ccg","label":"Dragon Ball Super: Masters"},{"value":"dragoborne","label":"Dragoborne"},{"value":"funko","label":"Funko"},{"value":"metax-tcg","label":"MetaX TCG"},{"value":"card-sleeves","label":"Card Sleeves"},{"value":"deck-boxes","label":"Deck Boxes"},{"value":"card-storage-tins","label":"Card Storage Tins"},{"value":"life-counters","label":"Life Counters"},{"value":"playmats","label":"Playmats"},{"value":"zombie-world-order-tcg","label":"Zombie World Order TCG"},{"value":"the-caster-chronicles","label":"The Caster Chronicles"},{"value":"my-little-pony-ccg","label":"My Little Pony CCG"},{"value":"books","label":"Books"},{"value":"exodus-tcg","label":"Exodus TCG"},{"value":"lightseekers-tcg","label":"Lightseekers TCG"},{"value":"protective-pages","label":"Protective Pages"},{"value":"storage-albums","label":"Storage Albums"},{"value":"collectible-storage","label":"Collectible Storage"},{"value":"supply-bundles","label":"Supply Bundles"},{"value":"munchkin-ccg","label":"Munchkin CCG"},{"value":"warhammer-age-of-sigmar-champions-tcg","label":"Warhammer Age of Sigmar Champions TCG"},{"value":"bulk-lots","label":"Bulk Lots"},{"value":"transformers-tcg","label":"Transformers TCG"},{"value":"bakugan-tcg","label":"Bakugan TCG"},{"value":"keyforge","label":"KeyForge"},{"value":"chrono-clash-system","label":"Chrono Clash System"},{"value":"argent-saga-tcg","label":"Argent Saga TCG"},{"value":"flesh-and-blood-tcg","label":"Flesh and Blood TCG"},{"value":"digimon-card-game","label":"Digimon Card Game"},{"value":"alternate-souls","label":"Alternate Souls"},{"value":"gate-ruler","label":"Gate Ruler"},{"value":"metazoo","label":"MetaZoo"},{"value":"wixoss","label":"WIXOSS"},{"value":"one-piece-card-game","label":"One Piece Card Game"},{"value":"lorcana-tcg","label":"Disney Lorcana"},{"value":"battle-spirits-saga","label":"Battle Spirits Saga"},{"value":"shadowverse-evolve","label":"Shadowverse: Evolve"},{"value":"grand-archive","label":"Grand Archive TCG"},{"value":"akora","label":"Akora TCG"},{"value":"kryptik-tcg","label":"Kryptik TCG"},{"value":"sorcery-contested-realm","label":"Sorcery: Contested Realm"},{"value":"alpha-clash","label":"Alpha Clash"},{"value":"star-wars-unlimited","label":"Star Wars: Unlimited"},{"value":"dragon-ball-super-fusion-world","label":"Dragon Ball Super: Fusion World"},{"value":"union-arena","label":"Union Arena"},{"value":"tcgplayer-supplies","label":"TCGplayer Supplies"},{"value":"elestrals","label":"Elestrals"},{"value":"pokemon-japan","label":"Pokemon Japan"},{"value":"gundam-card-game","label":"Gundam Card Game"},{"value":"hololive-official-card-game","label":"hololive OFFICIAL CARD GAME"},{"value":"godzilla-card-game","label":"Godzilla Card Game"},{"value":"riftbound-league-of-legends-trading-card-game","label":"Riftbound: League of Legends Trading Card Game"},{"value":"cookierun-braverse-tcg","label":"CookieRun: Braverse TCG"},{"value":"palworld-official-card-game","label":"Palworld OFFICIAL CARD GAME"},{"value":"cyberpunk-tcg","label":"Cyberpunk TCG"}],"example":"pokemon","aliases":["product_line"]},{"name":"set","type":"string","required":false,"description":"Set url_name from the sets action or from search facets (e.g. base-set, sv-scarlet-and-violet-151).","on_invalid":"reject","example":"base-set","aliases":["set_url_name"]},{"name":"rarity","type":"string","required":false,"description":"Rarity exactly as TCGplayer names it (e.g. Holo Rare, Mythic, Secret Rare).","on_invalid":"reject","example":"Holo Rare"},{"name":"product_type","type":"string","required":false,"description":"TCGplayer product type, e.g. Cards or Sealed Products (see facets.product_types of a search).","on_invalid":"reject","example":"Cards"},{"name":"min_market_price","type":"number","required":false,"description":"Only products whose market price is at least this many US dollars.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_market_price","type":"number","required":false,"description":"Only products whose market price is at most this many US dollars.","on_invalid":"reject","example":500,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"TCGplayer's own orderings: best match, best selling, name A-Z, market price.","on_invalid":"reject","allowed_values":[{"value":"best_match","label":"best_match"},{"value":"best_selling","label":"best_selling"},{"value":"name_asc","label":"name_asc"},{"value":"market_price_asc","label":"market_price_asc"},{"value":"market_price_desc","label":"market_price_desc"}],"default":"best_match","example":"best_match"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). TCGplayer serves results up to position 9 999.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":9999},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, up to 50 (TCGplayer's own limit).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{product_id, name, url, image, game, game_url_name, game_id, set, set_id, set_code, number, rarity, foil_only, release_date, currency, market_price, lowest_price, lowest_price_with_shipping, listed_median_price, search_index_listings_count}, count, total, page, per_page, has_more, corrected_query, facets{games[], sets[], product_types[]}{name, url_name, count}, query, filters_applied, sort","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"charizard","game":"pokemon"}},{"name":"product/detail","description":"One TCGplayer product by id or URL: name, set, number, rarity, images, card text and attributes, TCGplayer market price, lowest listing price with and without shipping, listed median, listing and seller counts; market price per printing (Normal / Foil) and per SKU (condition × printing × language); the 10 cheapest listings including shipping; the 5 latest sales.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"TCGplayer's numeric product id (from any search row) or a tcgplayer.com/product/<id> URL.","on_invalid":"reject","example":"42382","aliases":["id","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, url, images[], game, game_url_name, game_id, set, set_id, set_code, number, rarity, product_type, product_type_id, sealed, foil_only, normal_only, release_date, description, flavor_text, note, attributes{label: text}, currency, market_price, lowest_price, lowest_price_with_shipping, listed_median_price, record_listings_count, listings_count, sellers_count, quantity_available, as_low_as}, market_price_by_printing[]{printing, market_price, listed_median_price}, skus[]{sku_id, condition, printing, language, market_price, market_price_low, market_price_high, market_price_sample_size, market_price_calculated_at}, cheapest_listings[] (same shape as product/listings), latest_sales[] (same shape as product/sales)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"42382"}},{"name":"product/listings","description":"Every live listing on one product, 50 per page: price, shipping, price with shipping, quantity, condition, printing, language, listing type (with the seller's photos, title and description when present), TCGplayer Direct flag and the seller's name, rating, sales, Gold Star and Certified Hobby Shop badges. Filter with TCGplayer's own filters: condition, printing, language, listing type, Direct only.","required_params":["product_id"],"optional_params":["condition","printing","language","listing_type","direct_only","sort","page","per_page","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"TCGplayer's numeric product id (from any search row) or a tcgplayer.com/product/<id> URL.","on_invalid":"reject","example":"42382","aliases":["id","url"]},{"name":"condition","type":"string","required":false,"description":"One or more of near_mint, lightly_played, moderately_played, heavily_played, damaged, unopened (comma-separated or a list).","on_invalid":"reject","example":"near_mint"},{"name":"printing","type":"string","required":false,"description":"Printing exactly as TCGplayer names it for this product (Normal, Foil, Holofoil, 1st Edition Holofoil…; see available_filters).","on_invalid":"reject","example":"Foil"},{"name":"language","type":"string","required":false,"description":"Card language as TCGplayer names it (English, Japanese…; see available_filters).","on_invalid":"reject","example":"English"},{"name":"listing_type","type":"enum","required":false,"description":"Standard listings, listings with the seller's own photos, or both.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All listings"},{"value":"standard","label":"Listings without photos"},{"value":"with_photos","label":"Listings with the seller's own photos"}],"default":"all","example":"with_photos"},{"name":"direct_only","type":"boolean","required":false,"description":"Only TCGplayer Direct listings (fulfilled by TCGplayer).","on_invalid":"reject","default":false},{"name":"sort","type":"enum","required":false,"description":"TCGplayer's own Price + Shipping order (its default; see sort_price: shipping counts as free for sellers and Direct listings that ship free over an order threshold), or by item price.","on_invalid":"reject","allowed_values":[{"value":"price_with_shipping_asc","label":"price_with_shipping_asc"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}],"default":"price_with_shipping_asc","example":"price_with_shipping_asc"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). TCGplayer serves results up to position 9 999.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":9999},{"name":"per_page","type":"integer","required":false,"description":"Listings per page, up to 50.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, url, game, set, number, rarity, market_price, lowest_price, lowest_price_with_shipping, record_listings_count, currency}, listings[]{listing_id, sku_id, price, shipping_price, price_with_shipping, sort_price, shipping_included, free_shipping_over_threshold, currency, quantity, condition, printing, language, language_code, listing_type (standard|with_photos), title, description, photos[], listed_at, direct_listing, seller{name, key, id, rating_pct, sales_count, sales_count_is_lower_bound, gold_star, certified_hobby_shop, direct_seller, programs[], location{city, state, country}}}, count, total, page, per_page, has_more, sellers_count, quantity_available, filters_applied, available_filters{conditions[], printings[], languages[], listing_types[]}{name, count}, sort","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"42382"}},{"name":"product/sales","description":"The latest sales of one product as TCGplayer shows them without an account (the 5 most recent): date, price, shipping, quantity, condition, printing, language and listing type. Filter by condition and listing type.","required_params":["product_id"],"optional_params":["condition","listing_type","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"TCGplayer's numeric product id (from any search row) or a tcgplayer.com/product/<id> URL.","on_invalid":"reject","example":"42382","aliases":["id","url"]},{"name":"condition","type":"string","required":false,"description":"One or more of near_mint, lightly_played, moderately_played, heavily_played, damaged, unopened (comma-separated or a list).","on_invalid":"reject","example":"near_mint"},{"name":"listing_type","type":"enum","required":false,"description":"Standard listings, listings with the seller's own photos, or both.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All listings"},{"value":"standard","label":"Listings without photos"},{"value":"with_photos","label":"Listings with the seller's own photos"}],"default":"all","example":"with_photos"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, url, game, set, market_price, currency}, sales[]{sold_at, price, shipping_price, price_with_shipping, currency, quantity, condition, printing, language, listing_type, title}, count, filters_applied","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"42382"}},{"name":"product/price_history","description":"TCGplayer's price history for one product, per SKU (condition × printing × language): market price, quantity sold, number of sales and the low/high sale price (with and without shipping) per bucket, for the last month, quarter, six months or year.","required_params":["product_id"],"optional_params":["range","condition","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"TCGplayer's numeric product id (from any search row) or a tcgplayer.com/product/<id> URL.","on_invalid":"reject","example":"42382","aliases":["id","url"]},{"name":"range","type":"enum","required":false,"description":"History window; TCGplayer picks the bucket size.","on_invalid":"reject","allowed_values":[{"value":"month","label":"Last 30 days, daily"},{"value":"quarter","label":"Last 3 months, 3-day buckets"},{"value":"semi_annual","label":"Last 6 months, weekly"},{"value":"annual","label":"Last 12 months, weekly"}],"default":"quarter","example":"quarter"},{"name":"condition","type":"string","required":false,"description":"One or more of near_mint, lightly_played, moderately_played, heavily_played, damaged, unopened (comma-separated or a list).","on_invalid":"reject","example":"near_mint"},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"product{product_id, name, url, game, set, market_price, currency}, series[]{sku_id, condition, printing, language, currency, average_daily_quantity_sold, average_daily_transactions, total_quantity_sold, total_transactions, points[]{date, market_price, quantity_sold, transactions, low_sale_price, low_sale_price_with_shipping, high_sale_price, high_sale_price_with_shipping}}, count, range","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"42382"}},{"name":"sets","description":"Every set TCGplayer lists for a game, newest first: set id, name, url_name (the search `set` filter), set code, release date, supplemental and active flags.","required_params":["game"],"optional_params":["active_only","max_rotations"],"params":[{"name":"game","type":"enum","required":true,"description":"TCGplayer product line (url_name from the games action).","on_invalid":"reject","allowed_values":[{"value":"magic","label":"Magic: The Gathering"},{"value":"yugioh","label":"YuGiOh"},{"value":"pokemon","label":"Pokemon"},{"value":"d-and-d-miniatures","label":"D & D Miniatures"},{"value":"heroclix","label":"Heroclix"},{"value":"wow","label":"WoW"},{"value":"cardfight-vanguard","label":"Cardfight Vanguard"},{"value":"force-of-will","label":"Force of Will"},{"value":"dice-masters","label":"Dice Masters"},{"value":"future-card-buddyfight","label":"Future Card BuddyFight"},{"value":"weiss-schwarz","label":"Weiss Schwarz"},{"value":"dragon-ball-z-tcg","label":"Dragon Ball Z TCG"},{"value":"final-fantasy-tcg","label":"Final Fantasy TCG"},{"value":"universus","label":"UniVersus"},{"value":"star-wars-destiny","label":"Star Wars: Destiny"},{"value":"dragon-ball-super-ccg","label":"Dragon Ball Super: Masters"},{"value":"dragoborne","label":"Dragoborne"},{"value":"funko","label":"Funko"},{"value":"metax-tcg","label":"MetaX TCG"},{"value":"card-sleeves","label":"Card Sleeves"},{"value":"deck-boxes","label":"Deck Boxes"},{"value":"card-storage-tins","label":"Card Storage Tins"},{"value":"life-counters","label":"Life Counters"},{"value":"playmats","label":"Playmats"},{"value":"zombie-world-order-tcg","label":"Zombie World Order TCG"},{"value":"the-caster-chronicles","label":"The Caster Chronicles"},{"value":"my-little-pony-ccg","label":"My Little Pony CCG"},{"value":"books","label":"Books"},{"value":"exodus-tcg","label":"Exodus TCG"},{"value":"lightseekers-tcg","label":"Lightseekers TCG"},{"value":"protective-pages","label":"Protective Pages"},{"value":"storage-albums","label":"Storage Albums"},{"value":"collectible-storage","label":"Collectible Storage"},{"value":"supply-bundles","label":"Supply Bundles"},{"value":"munchkin-ccg","label":"Munchkin CCG"},{"value":"warhammer-age-of-sigmar-champions-tcg","label":"Warhammer Age of Sigmar Champions TCG"},{"value":"bulk-lots","label":"Bulk Lots"},{"value":"transformers-tcg","label":"Transformers TCG"},{"value":"bakugan-tcg","label":"Bakugan TCG"},{"value":"keyforge","label":"KeyForge"},{"value":"chrono-clash-system","label":"Chrono Clash System"},{"value":"argent-saga-tcg","label":"Argent Saga TCG"},{"value":"flesh-and-blood-tcg","label":"Flesh and Blood TCG"},{"value":"digimon-card-game","label":"Digimon Card Game"},{"value":"alternate-souls","label":"Alternate Souls"},{"value":"gate-ruler","label":"Gate Ruler"},{"value":"metazoo","label":"MetaZoo"},{"value":"wixoss","label":"WIXOSS"},{"value":"one-piece-card-game","label":"One Piece Card Game"},{"value":"lorcana-tcg","label":"Disney Lorcana"},{"value":"battle-spirits-saga","label":"Battle Spirits Saga"},{"value":"shadowverse-evolve","label":"Shadowverse: Evolve"},{"value":"grand-archive","label":"Grand Archive TCG"},{"value":"akora","label":"Akora TCG"},{"value":"kryptik-tcg","label":"Kryptik TCG"},{"value":"sorcery-contested-realm","label":"Sorcery: Contested Realm"},{"value":"alpha-clash","label":"Alpha Clash"},{"value":"star-wars-unlimited","label":"Star Wars: Unlimited"},{"value":"dragon-ball-super-fusion-world","label":"Dragon Ball Super: Fusion World"},{"value":"union-arena","label":"Union Arena"},{"value":"tcgplayer-supplies","label":"TCGplayer Supplies"},{"value":"elestrals","label":"Elestrals"},{"value":"pokemon-japan","label":"Pokemon Japan"},{"value":"gundam-card-game","label":"Gundam Card Game"},{"value":"hololive-official-card-game","label":"hololive OFFICIAL CARD GAME"},{"value":"godzilla-card-game","label":"Godzilla Card Game"},{"value":"riftbound-league-of-legends-trading-card-game","label":"Riftbound: League of Legends Trading Card Game"},{"value":"cookierun-braverse-tcg","label":"CookieRun: Braverse TCG"},{"value":"palworld-official-card-game","label":"Palworld OFFICIAL CARD GAME"},{"value":"cyberpunk-tcg","label":"Cyberpunk TCG"}],"example":"pokemon","aliases":["product_line"]},{"name":"active_only","type":"boolean","required":false,"description":"Only sets TCGplayer marks active.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"sets[]{set_id, name, url_name, code, release_date, supplemental, active}, count, game","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon"}},{"name":"games","description":"Every TCGplayer product line (games and supplies) with its id, name, url_name and whether TCGplayer Direct sells it.","required_params":[],"optional_params":["max_rotations"],"params":[{"name":"max_rotations","type":"integer","required":false,"description":"How many fresh exits to try before giving up.","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"games[]{game_id, name, url_name, direct_eligible}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"teknosa","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Teknosa API scraper — search teknosa.com (Turkish electronics + marketplace) and read full product records: TRY price with struck price and TeknoClub member price kept apart, buy-box seller and every other seller's offer, rating histogram, specifications, EAN barcode, images and reviews. No account, no browser.","version":"0.1.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/teknosa/v1","spec_available":true,"actions":[{"name":"search","description":"Search teknosa.com by keyword or browse a category, one row per listing: product code, title, brand, image, public price in TRY with struck price and discount, the TeknoClub members-only price as its own field, seller (Teknosa or marketplace shop), rating and review count, EAN barcode, category path and whether the row is a sponsored ad. Filter by seller, brand and price range, sort the way the site does, page through results. The response lists the sellers, brands, price bands and sub-categories available.","required_params":[],"optional_params":["query","category","page","sort","seller","brand","min_price","max_price","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"What to look for on teknosa.com — a Turkish keyword ('kulaklık', 'robot süpürge'), a brand or a model. Optional when `category` is given.","on_invalid":"reject","example":"airfryer","aliases":["q","keyword","text"]},{"name":"category","type":"string","required":false,"description":"Browse a category instead of (or as well as) searching: a teknosa.com category URL or path (…/cep-telefonu-c-100001) or its numeric code (100001).","on_invalid":"reject","example":"cep-telefonu-c-100001","aliases":["category_url","category_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Teknosa pages hold about 20 products.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"sort","type":"enum","required":false,"description":"Result order — only the orderings teknosa.com itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Teknosa's recommended order"},{"value":"newest","label":"Newest products first"},{"value":"best_selling","label":"Best sellers of the last 30 days first"},{"value":"most_favorited","label":"Most added to favourites first"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"}],"default":"relevance"},{"name":"seller","type":"string","required":false,"description":"Only listings from this seller: the `value` returned in `filters.sellers` ('teknosa' = sold by Teknosa itself).","on_invalid":"reject","example":"teknosa","aliases":["seller_value","shop"]},{"name":"brand","type":"string","required":false,"description":"Only this brand: the numeric `code` returned in `filters.brands` (2299 = JBL).","on_invalid":"reject","example":"2299","aliases":["brand_code"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"include_fallback_results","type":"boolean","required":false,"description":"teknosa.com fills a keyword with no real match with unrelated products. Default false: when no product on the page contains a query word, results is empty and fallback_results_dropped counts what was dropped. true: those products are returned apart, in fallback_results.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id, title, brand, url, image, sponsored (Teknosa ad row), price (TRY — the public price), currency, was_price (struck-through price, null when none), discount_percent, discount_amount, member_price (TeknoClub members-only price, null when none), member_price_label, installment{months, monthly_amount, same_as_cash_price}, seller{name, shop_id, is_teknosa}, rating (1-5, null when unrated), review_count, rating_scale, in_stock (true only on Teknosa's own in-stock flag, else null), stock_label, free_shipping, category, category_path[], barcode (GTIN-validated EAN), mpn, badges[]}, count, sponsored_count, page, total_results (Teknosa's own count; 0 when the page was fallback), total_pages, page_notice, sort, query, category, keyword_matches_on_page (products on the page containing a query word; null for a category browse), fallback_results_dropped, fallback_total (Teknosa's count for the dropped fallback, when dropped), fallback_results[] (only with include_fallback_results=true), filters{sellers[]{name, value, count}, brands[]{name, code, count}, price_bands[]{label, min, max, count}, categories[]{name, code, count}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"airfryer"}},{"name":"product/detail","description":"The full Teknosa product record by product code or URL: title, brand, public price in TRY with struck price and discount, TeknoClub member price, instalment offer, product campaigns, the buy-box seller with badges and every other seller's offer and price, dispatch time, availability, rating with per-star breakdown, all images, breadcrumb, specifications table, description and bullet points, EAN barcode and MPN.","required_params":["product_id"],"optional_params":["seller_id","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Teknosa product code as returned in `product_id` by `search` (100000060317), or a full teknosa.com product URL.","on_invalid":"reject","example":"100000060317","aliases":["id","code","url"]},{"name":"seller_id","type":"string","required":false,"description":"Render the product for one seller's offer: `seller_id_param` from `other_offers[]` ('teknosa' or a numeric shop id). Default = the buy-box seller Teknosa shows first.","on_invalid":"reject","example":"teknosa","aliases":["shop_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, product_codes[], title, brand, brand_url, url, price, currency, was_price, discount_percent, discount_amount, member_price, member_price_label, schema_org_price, campaigns_count, campaigns[] (basket-level offers — NOT applied to price), seller{name, shop_id, store_url, is_teknosa, badges[]}, offer_id, other_offers[]{seller{…}, price, was_price, currency, dispatch, url, seller_id_param}, dispatch{min_business_days, max_business_days, text}, availability, teknosa_stock_label, rating, review_count, rating_scale, rating_breakdown{'1'..'5'}, images[], breadcrumb[]{name, url}, category_path[], barcode, mpn, favorites_count, specifications[]{name, value, unit}, description, bullet_points[], variants (null — not published server-side)}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"100000060317"}},{"name":"product/reviews","description":"Customer reviews of one Teknosa product, 5 per page as on the site: star rating, title, text, date, which seller the reviewer bought from and whether they are a verified buyer, plus the product's rating and per-star breakdown. Sort newest, oldest, or by stars.","required_params":["product_id"],"optional_params":["page","sort","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Teknosa product code as returned in `product_id` by `search` (100000060317), or a full teknosa.com product URL.","on_invalid":"reject","example":"100000060317","aliases":["id","code","url"]},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based (5 reviews per page, as on teknosa.com).","on_invalid":"ignore","default":1,"minimum":1,"maximum":400},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"rating_desc","label":"Highest star rating first"},{"value":"rating_asc","label":"Lowest star rating first"},{"value":"site_default","label":"Teknosa's default order (not date order)"}],"default":"newest"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[]{author (as printed, usually masked by Teknosa), rating, title, text, date (YYYY-MM-DD), purchased_from_seller, verified_buyer}, count, page, page_size (5), has_more, sort, product{product_id, title, rating, review_count, rating_breakdown}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"120412509"}},{"name":"search/suggest","description":"Teknosa's own search-box suggestions for a partial keyword: suggested terms, top products with sale price and list price, related brands, categories and marketplace sellers.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far (at least 2 characters).","on_invalid":"reject","example":"dreame","aliases":["q","term","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"suggestions[], products[]{product_id, title, brand, price, list_price, currency, category, seller_name, url, image}, brands[]{name, url}, categories[]{name, url}, sellers[]{name, url}, products_total, redirect_url","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dreame"}}]},{"name":"telegram","category":{"id":"social","title":"Social Media"},"title":"Telegram API — public channel posts, views, reactions, media, in-channel search, single posts, comments and channel stats (exact subscriber count), no login","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/telegram/v1","spec_available":true,"actions":[{"name":"channel","description":"Channel card for a public Telegram username: title, @username, description (+ its links), photo URL, verified badge, the EXACT subscriber count as Telegram prints it on t.me/<channel> (e.g. 10 146 005, where the preview only says 10.1M), and the preview's media counters (photos, videos, files, links). If the username is a group the card carries members and online counts; a user or bot is recognised too (`type`), with `preview_available: false`.","required_params":["channel"],"optional_params":[],"params":[{"name":"channel","type":"string","required":true,"description":"Public channel: its @username (with or without @) or a t.me link (https://t.me/durov, https://t.me/s/durov). Private invite links (t.me/+...) have no public preview and are rejected.","on_invalid":"reject","example":"durov","aliases":["username","channel_url","channel_username"]}],"returns":"channel{username, type (channel|group|user|bot), title, description, description_links[], photo_url, verified, scam, subscribers (exact, channels), subscribers_display (the preview's rounded figure), members, online (groups), counters{photos, videos, files, links}, url, preview_url, preview_available, region_withheld, viewer_region}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"channel":"telegram"}},{"name":"posts","description":"One page of a public channel's posts as Telegram's web preview serves it (about 20 posts; an album counts as one), newest first. Page back with `before` (the `next_before` of the previous answer) or forward with `after`. Each post: id, URL, date, edited flag, author signature, text with its links / hashtags / mentions / cashtags, views, reactions (emoji or custom-emoji id, paid Stars, count), forwarded-from, reply-to, media (photos, videos with duration, documents, audio, voice, stickers, locations; album items with their own post ids), link preview, poll, inline URL buttons. The channel card (rounded subscriber count + media counters) comes with every page.","required_params":["channel"],"optional_params":["before","after"],"params":[{"name":"channel","type":"string","required":true,"description":"Public channel: its @username (with or without @) or a t.me link (https://t.me/durov, https://t.me/s/durov). Private invite links (t.me/+...) have no public preview and are rejected.","on_invalid":"reject","example":"durov","aliases":["username","channel_url","channel_username"]},{"name":"before","type":"integer","required":false,"description":"Return the page of posts older than this post id (use `next_before` from the previous answer).","on_invalid":"reject","example":531,"minimum":1,"aliases":["before_id","cursor"]},{"name":"after","type":"integer","required":false,"description":"Return the page of posts newer than this post id (walks forward in time). Not together with `before`.","on_invalid":"reject","example":100,"minimum":1,"aliases":["after_id"]}],"returns":"channel{username, title, description, photo_url, verified, subscribers_approx, subscribers_display, counters{}} + posts[]{post_id, url, channel, channel_id, date, edited, author_signature, text, links[], hashtags[], mentions[], cashtags[], views, views_display, views_is_exact, reactions[]{emoji, custom_emoji_id, paid, count, count_display, count_is_exact}, reactions_total, paid_stars, is_forwarded, forwarded_from{name, url, username, post_id, author}, reply_to{post_id, url, author, text, thumbnail}, media[]{type (photo|video|round_video|document|audio|voice|sticker|location), url, thumbnail, post_id, duration, duration_seconds, title, size, unavailable_reason}, link_preview{url, site_name, title, description, image, video}, poll{question, type, options[]{text, percent}, voters, voters_display}, inline_buttons[]{text, url}, is_service} + next_before, has_more, newer_after, region_withheld, viewer_region","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"channel":"durov"}},{"name":"search","description":"Telegram's own search inside one public channel (`q`; a `#hashtag` finds that hashtag). Same post rows as `posts`, newest first: 20 on the first page and the rest on the page `next_before` points to. Telegram's channel search stops at the 22 newest matching posts (measured on 4 queries in 4 channels: 20 + 2, then no more page, and older `before` values return nothing) and publishes no total; to reach older matches, walk `posts`.","required_params":["channel","query"],"optional_params":["before"],"params":[{"name":"channel","type":"string","required":true,"description":"Public channel: its @username (with or without @) or a t.me link (https://t.me/durov, https://t.me/s/durov). Private invite links (t.me/+...) have no public preview and are rejected.","on_invalid":"reject","example":"durov","aliases":["username","channel_url","channel_username"]},{"name":"query","type":"string","required":true,"description":"Words to find in the channel's posts, or a #hashtag.","on_invalid":"reject","example":"update","aliases":["q","keyword","hashtag"]},{"name":"before","type":"integer","required":false,"description":"Older page: the `next_before` of the previous answer.","on_invalid":"reject","example":378,"minimum":1,"aliases":["before_id","cursor"]}],"returns":"posts[] (same row as `posts`) + query, next_before, has_more, total_is_exact (always false: no total), results_cap (22, Telegram's search depth), region_withheld, viewer_region","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"channel":"telegram","query":"update"}},{"name":"post","description":"One post by its t.me URL (https://t.me/durov/531) or channel + post_id: the same row as `posts` plus the channel's verified flag. A deleted or never-existing post is NOT_FOUND.","required_params":[],"optional_params":["url","channel","post_id"],"params":[{"name":"url","type":"string","required":false,"description":"Post link https://t.me/<channel>/<post_id>. Provide url, or channel + post_id.","on_invalid":"reject","example":"https://t.me/durov/531","aliases":["post_url","link"]},{"name":"channel","type":"string","required":false,"description":"Channel @username (with post_id).","on_invalid":"reject","example":"durov","aliases":["username","channel_url"]},{"name":"post_id","type":"integer","required":false,"description":"Post number inside the channel.","on_invalid":"reject","example":531,"minimum":1,"aliases":["id","message_id"]}],"returns":"post{post_id, url, channel, channel_id, date, edited, text, links[], hashtags[], views, views_display, reactions[], is_forwarded, forwarded_from, reply_to, media[], link_preview, poll, inline_buttons[], channel_title, channel_verified} + region_withheld, viewer_region","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://t.me/durov/300"}},{"name":"comments","description":"Public comments under a channel post (the channel's linked discussion, as Telegram's comments widget shows it): newest `limit` comments, then older ones with `cursor` = the previous answer's `next_cursor`. Each comment: id, date, author name / @username / link / photo, text, links, reply-to (comment id, author, quoted text), reactions, media. Posts whose channel has no public discussion answer `comments_available: false` with 0 rows.","required_params":[],"optional_params":["url","channel","post_id","limit","cursor"],"params":[{"name":"url","type":"string","required":false,"description":"Post link https://t.me/<channel>/<post_id>. Provide url, or channel + post_id.","on_invalid":"reject","example":"https://t.me/tginfo/4447","aliases":["post_url","link"]},{"name":"channel","type":"string","required":false,"description":"Channel @username (with post_id).","on_invalid":"reject","example":"tginfo","aliases":["username","channel_url"]},{"name":"post_id","type":"integer","required":false,"description":"Post number inside the channel.","on_invalid":"reject","example":4447,"minimum":1,"aliases":["id","message_id"]},{"name":"limit","type":"integer","required":false,"description":"How many of the newest comments the first page returns (1-100; Telegram's widget caps at 100). Older pages (`cursor`) come in the widget's own page size.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque `next_cursor` from the previous comments answer, to read older comments.","on_invalid":"reject","aliases":["next_cursor"]}],"returns":"comments_available, comments_total (the widget's own count), comments[]{comment_id, date, author_name, author_username, author_url, author_photo, text, links[], hashtags[], mentions[], reply_to_comment_id, reply_to{author, text}, reactions[], reactions_total, media[], edited} (oldest to newest, as the widget lists them) + next_cursor, has_more, unavailable_message","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://t.me/tginfo/4400"}}]},{"name":"temu","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Temu product data and keyword search","version":"1.0.7","pii_redact_default":false,"mint_reusable":null,"base_path":"/temu/v1","spec_available":true,"actions":[{"name":"product/detail","description":"Product detail with exact product and variant IDs, storefront prices, stock, images, seller, brand, category path, attributes and description. Product IDs are one global numbering, but each storefront carries its own catalogue: an ID that is not sold in the requested storefront returns NOT_FOUND (not charged, not retryable) with error.detail.reason not_sold_in_market when it is a product in another storefront, and goods_not_exist when it is not a product in any storefront. Use search with the same market to get IDs for that storefront. A sold-out listing is returned as a normal success with sold_out true and the source's own notice in sold_out_notice: the title, SKUs and per-SKU prices are still there, while the headline price, the seller and the images are not published on that page and come back null or empty. Shipping cost, delivery estimate and parcel weight are not published on the anonymous product page; weight is returned only when the listing carries a weight attribute. Promotional prices can differ from checkout. Each product carries the source's fulfillment model: local_warehouse (true when it ships from a warehouse in or near the storefront's country, the site's \"Local warehouse\" label), fulfillment (fully_managed, semi_managed or local_seller; null for a code the source has not been seen to use) and fulfillment_raw with the source's own seller-type and warehouse-type codes. Every product carries detail_level: \"full\" for the complete product page, \"partial\" when the page could not be read. US storefront: since 2026-11-11 Temu's US product page requires a human verification; while it does, product/detail returns a partial product (detail_level \"partial\", with partial_reason) built from the product's search card and its product schema: title, headline price and currency, images, rating, review count, brand, seller id, fulfillment and the card's single SKU (price, availability). The full SKU list, stock quantities, seller name, category path, attributes and description are null or empty in a partial product. If the search card for the ID is not found, the request fails as before (retryable, not charged). Canadian, Australian and Mexican storefronts (market ca, au, mx): their product page requires a human verification for every anonymous visitor, so product/detail there always returns the same partial product, in CAD, AUD or MXN. In every partial product (us, ca, au, mx) the headline price and the single SKU's price are that SKU's product page price (its product schema offer, the price the product's own page and its Google Shopping landing show). Some search cards list the product lower after an automatic search-only promotion; for those the partial product's price is higher than the search result's, and price_note names the search price. normal_price is the card's compare-at price. An ID that these storefronts' search does not list returns NOT_FOUND (not retryable, not charged) with reason not_sold_in_market or goods_not_exist as above.","required_params":[],"optional_params":["goods_id","url","market"],"params":[{"name":"goods_id","type":"string","required":false,"description":"Exact Temu product ID; supply this or a Temu product URL.","on_invalid":"reject","example":"607146892696891","aliases":["product_id"]},{"name":"url","type":"url","required":false,"description":"Temu product URL; supply this or goods_id.","on_invalid":"reject","example":"https://www.temu.com/goods.html?goods_id=607146892696891"},{"name":"market","type":"enum","required":false,"description":"Product storefront: US/USD, UK/GBP, Germany/EUR, Turkey/TRY, France/EUR, Spain/EUR, Italy/EUR, Canada/CAD, Australia/AUD or Mexico/MXN. Canada, Australia and Mexico return a partial product (detail_level \"partial\"). Product IDs are one global numbering, but each storefront has its own catalogue; search a market to get IDs sold there.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States"},{"value":"uk","label":"United Kingdom"},{"value":"de","label":"Germany"},{"value":"tr","label":"Turkey"},{"value":"fr","label":"France"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"ca","label":"Canada"},{"value":"au","label":"Australia"},{"value":"mx","label":"Mexico"}],"default":"us","example":"us"}],"returns":"product{goods_id,title,url,market,currency,price,max_price,price_display,price_range_display,price_note,skus[]{sku_id,goods_id,price,price_display,normal_price,normal_price_display,stock_quantity,on_sale,purchase_limit,image,specs[]},images[],videos[],seller{id,name},rating,review_count,sold_quantity,on_sale,brand,category_path[]{id,name},weight,properties[],description[],sold_out,sold_out_notice,local_warehouse,fulfillment,fulfillment_raw{seller_type,warehouse_type},detail_level,partial_reason}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"goods_id":"607146892696891","market":"us"}},{"name":"search","description":"First page of keyword results in the US, UK, German, Turkish, Canadian, French, Spanish, Italian, Australian or Mexican storefront: up to 20 products (the source returns 20 cards per page, measured 2026-11-10) with prices, rating, review count, brand and images. Cards do not carry stock; use product/detail. Pagination is not supported. The price is flat per call regardless of max_results. Each product carries the source's fulfillment model: local_warehouse (true when it ships from a warehouse in or near the storefront's country, the site's \"Local warehouse\" label), fulfillment (fully_managed, semi_managed or local_seller; null for a code the source has not been seen to use) and fulfillment_raw with the source's own seller-type and warehouse-type codes.","required_params":["query"],"optional_params":["market","page","max_results"],"params":[{"name":"query","type":"string","required":true,"description":"","on_invalid":"reject","example":"portable usb rechargeable","aliases":["q","keyword"]},{"name":"market","type":"enum","required":false,"description":"Search storefront: US/USD, UK/GBP, Germany/EUR, Turkey/TRY, Canada/CAD, France/EUR, Spain/EUR, Italy/EUR, Australia/AUD or Mexico/MXN. Results are that storefront's own ranking, prices and currency.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States"},{"value":"uk","label":"United Kingdom"},{"value":"de","label":"Germany"},{"value":"tr","label":"Turkey"},{"value":"ca","label":"Canada"},{"value":"fr","label":"France"},{"value":"es","label":"Spain"},{"value":"it","label":"Italy"},{"value":"au","label":"Australia"},{"value":"mx","label":"Mexico"}],"default":"us","example":"us"},{"name":"max_results","type":"integer","required":false,"description":"Return at most this many cards (1-40 accepted). The source returns one page of 20 cards (measured 2026-11-10), so values above 20 return 20; the price does not change.","on_invalid":"reject","default":40,"example":12,"minimum":1,"maximum":40},{"name":"page","type":"integer","required":false,"description":"Only the first page is supported.","on_invalid":"reject","default":1,"minimum":1,"maximum":1}],"returns":"query,market,currency,results[]{goods_id,sku_id,title,url,image,price,price_display,normal_price,currency,sales_text,rating,review_count,review_count_display,brand,local_warehouse,fulfillment,fulfillment_raw{seller_type,warehouse_type}},count,page,next_page,pagination_supported","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"query":"phone case","market":"us","max_results":12}}]},{"name":"tesco","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Tesco API scraper — Tesco Groceries in the UK, Ireland, Czechia, Slovakia and Hungary: search products, read the full product record with the shelf price and the Clubcard price kept apart, multi-buy and clearance offers, per-kg unit prices, Aldi Price Match, marketplace sellers, ingredients, allergens and nutrition; browse categories, special offers and reviews. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/tesco/v1","spec_available":true,"actions":[{"name":"search","description":"Search a Tesco storefront by keyword. Each product comes with the price without a Clubcard and, separately, the Clubcard price or Clubcard multi-buy when Tesco runs one, the per-kg or per-litre unit price, was-prices of price cuts, clearance, Aldi Price Match, rating, availability, department path and, for marketplace items, the seller and delivery charge. Sort by price; filter by brand, dietary facet, department, special offers or new products.","required_params":["query"],"optional_params":["country","page","page_size","sort","brands","dietary","super_department","department","offers_only","new_only","include_sponsored","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it in that country's language ('milk', 'mléko', 'tej'). Brand names work too.","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Tesco storefront. Prices come back in that country's currency and the texts in its language. Product ids are per country: a UK id is not found in Ireland.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — tesco.com (GBP)"},{"value":"ie","label":"Ireland — tesco.ie (EUR)"},{"value":"cz","label":"Czechia — nakup.itesco.cz (CZK)"},{"value":"sk","label":"Slovakia — potravinydomov.itesco.sk (EUR)"},{"value":"hu","label":"Hungary — bevasarlas.tesco.hu (HUF)"}],"default":"uk","example":"uk"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":400},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-100, default 24). Sponsored products Tesco adds on top are not counted.","on_invalid":"reject","default":24,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order — the orderings Tesco offers. Tesco sorts by the price its shelf shows, which is the Clubcard price when a product has one: sort by `member_price` if set, else `price`, to reproduce the order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Tesco's own ranking (default)"},{"value":"price_asc","label":"Lowest shown price first (the Clubcard price where there is one)"},{"value":"price_desc","label":"Highest shown price first (the Clubcard price where there is one)"}],"default":"relevance"},{"name":"brands","type":"array","required":false,"description":"Only these brands, exactly as `filters_available.brands[].value` spells them. Several brands are OR-ed.","on_invalid":"reject","example":["Arla"],"aliases":["brand"]},{"name":"dietary","type":"array","required":false,"description":"Lifestyle and dietary facets ('Organic', 'Vegetarian', 'No gluten' …), exactly as `filters_available.dietary[].value` spells them.","on_invalid":"reject","example":["Organic"]},{"name":"super_department","type":"string","required":false,"description":"Only this top-level department (a `filters_available.super_departments[].value`).","on_invalid":"reject","example":"Fresh Food"},{"name":"department","type":"string","required":false,"description":"Only this department (a `filters_available.departments[].value`).","on_invalid":"reject","example":"Milk, Butter & Eggs"},{"name":"offers_only","type":"boolean","required":false,"description":"true: only products on a special offer (Clubcard price, multi-buy or price cut).","on_invalid":"ignore","default":false},{"name":"new_only","type":"boolean","required":false,"description":"true: only products Tesco marks as new.","on_invalid":"ignore","default":false},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops the paid placements Tesco adds to a page; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string), base_product_id, gtin, ean, title, brand, url, image, listing_type ('grocery' | 'marketplace' | 'clothing'), price (the price WITHOUT a Clubcard), currency, unit_price, unit_of_measure, sold_by ('piece' | 'weight'), price_basis ('per_item' | 'estimated_item' — loose produce: price is Tesco's estimate for one average item and unit_price is the real per-kg price | 'per_unit' — catch-weight products: price is per unit_of_measure), average_weight_kg, catch_weight_options[]{weight_kg, price, default}, member_price (Clubcard price when Tesco runs a Clubcard price, else null), member_unit_price, member_unit, member_offer (Clubcard multi-buy text, e.g. 'Any 2 for £4 Clubcard Price'), member_discount_percent, member_program ('Clubcard' | null), original_price (was-price of a non-member price cut), original_unit_price (per-unit was-price on loose produce), discount_percent, multi_buy_offer (non-member multi-buy text), clearance, promotions[]{id, type ('member_price' | 'member_multi_buy' | 'price_cut' | 'multi_buy' | 'clearance' | 'other'), member_only, description, unit_selling_info, before_discount, after_discount, start_date, end_date, qualities[]}, deposit_return_charge, availability ('in_stock' | 'unavailable' | …), in_stock, max_order_quantity, is_new, breadcrumb[], shelf_id, rating, review_count, rating_scale, marketplace, seller{id, name} (marketplace only), delivery{estimated_by, charge} (marketplace only), sponsored, price_match[] (competitors Tesco matches), aldi_price_match, low_everyday_price, low_price_promise}, count, total_results, page, page_size, page_count, sponsored_dropped, filters_available{super_departments[], departments[], brands[], dietary[] ({name, value, count, selected}), offers_count, new_count}, country, currency, query, matched_query, sort_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"milk"}},{"name":"product/detail","description":"The full Tesco product record by `product_id` or URL: every image, both prices and every promotion, unit price, availability and order limit, GTIN/EAN, ingredients, allergens, the nutrition table, storage, origin, specifications, alcohol and energy information, manufacturer and return addresses, rating distribution, marketplace offers from every seller, and clothing size/colour variants.","required_params":["product_id"],"optional_params":["country","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Tesco product id (the number in a product URL, returned as `product_id` by every listing) or the storefront product URL itself. A URL also sets the country.","on_invalid":"reject","example":"254656543","aliases":["id","tpnc","url"]},{"name":"country","type":"enum","required":false,"description":"Which Tesco storefront. Prices come back in that country's currency and the texts in its language. Product ids are per country: a UK id is not found in Ireland.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — tesco.com (GBP)"},{"value":"ie","label":"Ireland — tesco.ie (EUR)"},{"value":"cz","label":"Czechia — nakup.itesco.cz (CZK)"},{"value":"sk","label":"Slovakia — potravinydomov.itesco.sk (EUR)"},{"value":"hu","label":"Hungary — bevasarlas.tesco.hu (HUF)"}],"default":"uk","example":"uk"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id (string), base_product_id, gtin, ean, title, brand, url, image, listing_type ('grocery' | 'marketplace' | 'clothing'), price (the price WITHOUT a Clubcard), currency, unit_price, unit_of_measure, sold_by ('piece' | 'weight'), price_basis ('per_item' | 'estimated_item' — loose produce: price is Tesco's estimate for one average item and unit_price is the real per-kg price | 'per_unit' — catch-weight products: price is per unit_of_measure), average_weight_kg, catch_weight_options[]{weight_kg, price, default}, member_price (Clubcard price when Tesco runs a Clubcard price, else null), member_unit_price, member_unit, member_offer (Clubcard multi-buy text, e.g. 'Any 2 for £4 Clubcard Price'), member_discount_percent, member_program ('Clubcard' | null), original_price (was-price of a non-member price cut), original_unit_price (per-unit was-price on loose produce), discount_percent, multi_buy_offer (non-member multi-buy text), clearance, promotions[]{id, type ('member_price' | 'member_multi_buy' | 'price_cut' | 'multi_buy' | 'clearance' | 'other'), member_only, description, unit_selling_info, before_discount, after_discount, start_date, end_date, qualities[]}, deposit_return_charge, availability ('in_stock' | 'unavailable' | …), in_stock, max_order_quantity, is_new, breadcrumb[], shelf_id, rating, review_count, rating_scale, marketplace, seller{id, name} (marketplace only), delivery{estimated_by, charge} (marketplace only), sponsored, price_match[] (competitors Tesco matches), aldi_price_match, low_everyday_price, low_price_promise, images[], videos[], description, ingredients[], allergens[]{name, values[]}, nutrition{columns[], rows[]{name, values[]}}, guideline_daily_amounts, storage, net_contents, pack_size[], number_of_uses, preparation_and_usage, marketing[], origin[]{title, value}, specifications{name: value}, features[], box_contents, directions, dosage, warnings, safety_warning, additives, recycling_info, other_information, legal_labelling, drained_weight, age_limits, alcohol, energy_class, dimensions, food_icons[], shelf_life, restrictions[], manufacturer_address, distributor_address, importer_address, return_address, rating_distribution, offers[]{product_id, seller, sold_by_tesco, price, …, delivery, promotions[]}, offer_count, variants[]{product_id, gtin, ean, title, attributes{colour, size …}, url}, category_ids{super_department, department, aisle, shelf}}, country","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"254656543"}},{"name":"product/reviews","description":"Customer reviews of one Tesco product, newest first, paged: rating, title, text, date, verified-buyer and syndication flags, plus the overall rating and its distribution.","required_params":["product_id"],"optional_params":["country","page","page_size","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Tesco product id (the number in a product URL, returned as `product_id` by every listing) or the storefront product URL itself. A URL also sets the country.","on_invalid":"reject","example":"254656543","aliases":["id","tpnc","url"]},{"name":"country","type":"enum","required":false,"description":"Which Tesco storefront. Prices come back in that country's currency and the texts in its language. Product ids are per country: a UK id is not found in Ireland.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — tesco.com (GBP)"},{"value":"ie","label":"Ireland — tesco.ie (EUR)"},{"value":"cz","label":"Czechia — nakup.itesco.cz (CZK)"},{"value":"sk","label":"Slovakia — potravinydomov.itesco.sk (EUR)"},{"value":"hu","label":"Hungary — bevasarlas.tesco.hu (HUF)"}],"default":"uk","example":"uk"},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-50, default 10), newest first.","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product_id, title, reviews[]{review_id, rating, rating_scale, title, text, submitted_at, author, verified_buyer, syndicated, syndication_source, incentivised}, count, total_reviews, rating, rating_scale, rating_distribution{1..5}, page, page_size, country","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"254656543"}},{"name":"deals","description":"Tesco's special-offers listing: every product currently on a Clubcard price, multi-buy, price cut or clearance, with the same rows as search, optionally narrowed to one top-level department.","required_params":[],"optional_params":["country","page","page_size","super_department","include_sponsored","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Tesco storefront. Prices come back in that country's currency and the texts in its language. Product ids are per country: a UK id is not found in Ireland.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — tesco.com (GBP)"},{"value":"ie","label":"Ireland — tesco.ie (EUR)"},{"value":"cz","label":"Czechia — nakup.itesco.cz (CZK)"},{"value":"sk","label":"Slovakia — potravinydomov.itesco.sk (EUR)"},{"value":"hu","label":"Hungary — bevasarlas.tesco.hu (HUF)"}],"default":"uk","example":"uk"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":400},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-100, default 24). Sponsored products Tesco adds on top are not counted.","on_invalid":"reject","default":24,"minimum":1,"maximum":100},{"name":"super_department","type":"string","required":false,"description":"Only this top-level department (a `filters_available.super_departments[].value`).","on_invalid":"reject","example":"Fresh Food"},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops the paid placements Tesco adds to a page; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string), base_product_id, gtin, ean, title, brand, url, image, listing_type ('grocery' | 'marketplace' | 'clothing'), price (the price WITHOUT a Clubcard), currency, unit_price, unit_of_measure, sold_by ('piece' | 'weight'), price_basis ('per_item' | 'estimated_item' — loose produce: price is Tesco's estimate for one average item and unit_price is the real per-kg price | 'per_unit' — catch-weight products: price is per unit_of_measure), average_weight_kg, catch_weight_options[]{weight_kg, price, default}, member_price (Clubcard price when Tesco runs a Clubcard price, else null), member_unit_price, member_unit, member_offer (Clubcard multi-buy text, e.g. 'Any 2 for £4 Clubcard Price'), member_discount_percent, member_program ('Clubcard' | null), original_price (was-price of a non-member price cut), original_unit_price (per-unit was-price on loose produce), discount_percent, multi_buy_offer (non-member multi-buy text), clearance, promotions[]{id, type ('member_price' | 'member_multi_buy' | 'price_cut' | 'multi_buy' | 'clearance' | 'other'), member_only, description, unit_selling_info, before_discount, after_discount, start_date, end_date, qualities[]}, deposit_return_charge, availability ('in_stock' | 'unavailable' | …), in_stock, max_order_quantity, is_new, breadcrumb[], shelf_id, rating, review_count, rating_scale, marketplace, seller{id, name} (marketplace only), delivery{estimated_by, charge} (marketplace only), sponsored, price_match[] (competitors Tesco matches), aldi_price_match, low_everyday_price, low_price_promise}, count, total_results, page, page_size, page_count, sponsored_dropped, filters_available{super_departments[], departments[], brands[], dietary[] ({name, value, count, selected}), offers_count, new_count}, country, currency","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"uk"}},{"name":"promotion","description":"Every product in one Tesco promotion (for example all the milks in an 'Any 2 for £4 Clubcard Price' offer), by the promotion id any product row carries.","required_params":["promotion_id"],"optional_params":["country","page","page_size","include_sponsored","max_rotations"],"params":[{"name":"promotion_id","type":"string","required":true,"description":"A promotion id from any product's `promotions[].id` (e.g. an 'Any 2 for £4 Clubcard Price' offer) — returns every product in that offer.","on_invalid":"reject","example":"100144020","aliases":["id"]},{"name":"country","type":"enum","required":false,"description":"Which Tesco storefront. Prices come back in that country's currency and the texts in its language. Product ids are per country: a UK id is not found in Ireland.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — tesco.com (GBP)"},{"value":"ie","label":"Ireland — tesco.ie (EUR)"},{"value":"cz","label":"Czechia — nakup.itesco.cz (CZK)"},{"value":"sk","label":"Slovakia — potravinydomov.itesco.sk (EUR)"},{"value":"hu","label":"Hungary — bevasarlas.tesco.hu (HUF)"}],"default":"uk","example":"uk"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":400},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-100, default 24). Sponsored products Tesco adds on top are not counted.","on_invalid":"reject","default":24,"minimum":1,"maximum":100},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops the paid placements Tesco adds to a page; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"promotion_id, results[]{product_id (string), base_product_id, gtin, ean, title, brand, url, image, listing_type ('grocery' | 'marketplace' | 'clothing'), price (the price WITHOUT a Clubcard), currency, unit_price, unit_of_measure, sold_by ('piece' | 'weight'), price_basis ('per_item' | 'estimated_item' — loose produce: price is Tesco's estimate for one average item and unit_price is the real per-kg price | 'per_unit' — catch-weight products: price is per unit_of_measure), average_weight_kg, catch_weight_options[]{weight_kg, price, default}, member_price (Clubcard price when Tesco runs a Clubcard price, else null), member_unit_price, member_unit, member_offer (Clubcard multi-buy text, e.g. 'Any 2 for £4 Clubcard Price'), member_discount_percent, member_program ('Clubcard' | null), original_price (was-price of a non-member price cut), original_unit_price (per-unit was-price on loose produce), discount_percent, multi_buy_offer (non-member multi-buy text), clearance, promotions[]{id, type ('member_price' | 'member_multi_buy' | 'price_cut' | 'multi_buy' | 'clearance' | 'other'), member_only, description, unit_selling_info, before_discount, after_discount, start_date, end_date, qualities[]}, deposit_return_charge, availability ('in_stock' | 'unavailable' | …), in_stock, max_order_quantity, is_new, breadcrumb[], shelf_id, rating, review_count, rating_scale, marketplace, seller{id, name} (marketplace only), delivery{estimated_by, charge} (marketplace only), sponsored, price_match[] (competitors Tesco matches), aldi_price_match, low_everyday_price, low_price_promise}, count, total_results, page, page_size, page_count, sponsored_dropped, country, currency","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"promotion_id":"100144020"}},{"name":"category","description":"Every product in one Tesco category (department, aisle or shelf), paged, with the same rows, sorting and filters as search. Category ids come from `categories` or any product.","required_params":["category_id"],"optional_params":["country","page","page_size","sort","brands","dietary","offers_only","new_only","include_sponsored","max_rotations"],"params":[{"name":"category_id","type":"string","required":true,"description":"A Tesco category id ('b;…') from `categories`, from a product's `category_ids`, or a row's `shelf_id`.","on_invalid":"reject","example":"b;RnJlc2glMjBGb29k","aliases":["category","id"]},{"name":"country","type":"enum","required":false,"description":"Which Tesco storefront. Prices come back in that country's currency and the texts in its language. Product ids are per country: a UK id is not found in Ireland.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — tesco.com (GBP)"},{"value":"ie","label":"Ireland — tesco.ie (EUR)"},{"value":"cz","label":"Czechia — nakup.itesco.cz (CZK)"},{"value":"sk","label":"Slovakia — potravinydomov.itesco.sk (EUR)"},{"value":"hu","label":"Hungary — bevasarlas.tesco.hu (HUF)"}],"default":"uk","example":"uk"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":400},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1-100, default 24). Sponsored products Tesco adds on top are not counted.","on_invalid":"reject","default":24,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order — the orderings Tesco offers. Tesco sorts by the price its shelf shows, which is the Clubcard price when a product has one: sort by `member_price` if set, else `price`, to reproduce the order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Tesco's own ranking (default)"},{"value":"price_asc","label":"Lowest shown price first (the Clubcard price where there is one)"},{"value":"price_desc","label":"Highest shown price first (the Clubcard price where there is one)"}],"default":"relevance"},{"name":"brands","type":"array","required":false,"description":"Only these brands, exactly as `filters_available.brands[].value` spells them. Several brands are OR-ed.","on_invalid":"reject","example":["Arla"],"aliases":["brand"]},{"name":"dietary","type":"array","required":false,"description":"Lifestyle and dietary facets ('Organic', 'Vegetarian', 'No gluten' …), exactly as `filters_available.dietary[].value` spells them.","on_invalid":"reject","example":["Organic"]},{"name":"offers_only","type":"boolean","required":false,"description":"true: only products on a special offer (Clubcard price, multi-buy or price cut).","on_invalid":"ignore","default":false},{"name":"new_only","type":"boolean","required":false,"description":"true: only products Tesco marks as new.","on_invalid":"ignore","default":false},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops the paid placements Tesco adds to a page; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (string), base_product_id, gtin, ean, title, brand, url, image, listing_type ('grocery' | 'marketplace' | 'clothing'), price (the price WITHOUT a Clubcard), currency, unit_price, unit_of_measure, sold_by ('piece' | 'weight'), price_basis ('per_item' | 'estimated_item' — loose produce: price is Tesco's estimate for one average item and unit_price is the real per-kg price | 'per_unit' — catch-weight products: price is per unit_of_measure), average_weight_kg, catch_weight_options[]{weight_kg, price, default}, member_price (Clubcard price when Tesco runs a Clubcard price, else null), member_unit_price, member_unit, member_offer (Clubcard multi-buy text, e.g. 'Any 2 for £4 Clubcard Price'), member_discount_percent, member_program ('Clubcard' | null), original_price (was-price of a non-member price cut), original_unit_price (per-unit was-price on loose produce), discount_percent, multi_buy_offer (non-member multi-buy text), clearance, promotions[]{id, type ('member_price' | 'member_multi_buy' | 'price_cut' | 'multi_buy' | 'clearance' | 'other'), member_only, description, unit_selling_info, before_discount, after_discount, start_date, end_date, qualities[]}, deposit_return_charge, availability ('in_stock' | 'unavailable' | …), in_stock, max_order_quantity, is_new, breadcrumb[], shelf_id, rating, review_count, rating_scale, marketplace, seller{id, name} (marketplace only), delivery{estimated_by, charge} (marketplace only), sponsored, price_match[] (competitors Tesco matches), aldi_price_match, low_everyday_price, low_price_promise}, count, total_results, page, page_size, page_count, sponsored_dropped, filters_available{super_departments[], departments[], brands[], dietary[] ({name, value, count, selected}), offers_count, new_count}, country, currency, category_id, sort_applied","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"b;RnJlc2glMjBGb29k"}},{"name":"categories","description":"A Tesco storefront's category tree: every top-level department with its departments, and the id that `category` reads.","required_params":[],"optional_params":["country","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Tesco storefront. Prices come back in that country's currency and the texts in its language. Product ids are per country: a UK id is not found in Ireland.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom — tesco.com (GBP)"},{"value":"ie","label":"Ireland — tesco.ie (EUR)"},{"value":"cz","label":"Czechia — nakup.itesco.cz (CZK)"},{"value":"sk","label":"Slovakia — potravinydomov.itesco.sk (EUR)"},{"value":"hu","label":"Hungary — bevasarlas.tesco.hu (HUF)"}],"default":"uk","example":"uk"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"categories[]{id, name, level, children[]{id, name, level}}, count, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"uk"}}]},{"name":"therealreal","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"TheRealReal API scraper — the largest US luxury consignment marketplace (therealreal.com): search and browse authenticated second-hand designer listings across women, men, jewelry, watches, art, home and kids with the site's own filters; read a full listing with its condition grade, measurements, materials and original retail price; refresh 50 listings in one call; and look up what comparable items ACTUALLY SOLD FOR. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/therealreal/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search across the live catalogue with every filter the site exposes (category, designer, condition grade, colour, size, gender, store, price range, on-sale, vintage, with-tags, editors' picks) and its own sorts. Each row carries the asking price, the original retail estimate where the source publishes one, the condition grade, sold flag and images. Some brand/model terms ('birkin', 'kelly bag') are answered by the site with a curated collection instead of results — this action follows that redirect and says so in `followed_redirect`.","required_params":["query"],"optional_params":["currency","page","page_size","sort","follow_redirect","category","category_id","designer","designer_id","condition","color","gender","clothing_size","shoe_size","store_id","price_min","price_max","availability","on_sale","vintage","with_tags","editors_picks"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search, e.g. 'chanel classic flap'.","on_invalid":"reject","example":"chanel classic flap","aliases":["q","keyword"]},{"name":"currency","type":"enum","required":false,"description":"Display currency for the *_display fields. Prices are ALSO always returned in USD, because the source converts the label only.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"CAD","label":"CAD"},{"value":"AUD","label":"AUD"},{"value":"JPY","label":"JPY"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"MXN","label":"MXN"}],"default":"USD","example":"USD"},{"name":"page","type":"integer","required":false,"description":"1-based page. The catalogue connection stops at 2000 rows.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-120 (the source's own ceiling).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":120},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"sold","label":"sold"},{"value":"most_obsessed","label":"most obsessed"}],"default":"newest","example":"price_asc"},{"name":"follow_redirect","type":"boolean","required":false,"description":"Follow the site's curated-collection redirect when a query returns one (default true). Set false to receive the redirect target untouched.","on_invalid":"reject","default":true},{"name":"category","type":"string","required":false,"description":"Category permalink, e.g. 'women/handbags', 'men/shoes', 'jewelry/earrings', 'watches/bracelet'. Call `categories` for the live tree.","on_invalid":"reject","example":"women/handbags","aliases":["taxon","category_permalink"]},{"name":"category_id","type":"array","required":false,"description":"Category facet id(s) from `filters`/`categories`.","on_invalid":"reject","example":"493","aliases":["taxon_id"]},{"name":"designer","type":"string","required":false,"description":"Designer slug, e.g. 'chanel', 'saint-laurent', 'louis-vuitton'. Call `designers` for the full index.","on_invalid":"reject","example":"chanel","aliases":["brand","designer_slug"]},{"name":"designer_id","type":"array","required":false,"description":"Designer facet id(s) (from `designers`).","on_invalid":"reject","example":"267"},{"name":"condition","type":"array","required":false,"description":"Condition grade(s) the site assigns. A numeric facet id is also accepted.","on_invalid":"reject","allowed_values":[{"value":"pristine","label":"Pristine"},{"value":"excellent","label":"Excellent"},{"value":"very_good","label":"Very Good"},{"value":"good","label":"Good"},{"value":"fair","label":"Fair"},{"value":"as_is","label":"As Is"}],"example":"excellent"},{"name":"color","type":"array","required":false,"description":"Colour / pattern facet(s).","on_invalid":"reject","allowed_values":[{"value":"black","label":"Black"},{"value":"brown","label":"Brown"},{"value":"burgundy","label":"Burgundy"},{"value":"red","label":"Red"},{"value":"blue","label":"Blue"},{"value":"purple","label":"Purple"},{"value":"pink","label":"Pink"},{"value":"orange","label":"Orange"},{"value":"green","label":"Green"},{"value":"metallic","label":"Metallic"},{"value":"grey","label":"Grey"},{"value":"yellow","label":"Yellow"},{"value":"white","label":"White"},{"value":"gold","label":"Gold"},{"value":"silver","label":"Silver"},{"value":"animal_print","label":"Animal Print"},{"value":"pattern_prints","label":"Pattern Prints"},{"value":"neutrals","label":"Neutrals"},{"value":"clear","label":"Clear"}],"example":"black","aliases":["colour"]},{"name":"gender","type":"enum","required":false,"description":"Gender facet.","on_invalid":"reject","allowed_values":[{"value":"women","label":"Women"},{"value":"men","label":"Men"}],"example":"women"},{"name":"clothing_size","type":"array","required":false,"description":"Clothing size(s) (XS…5XL, Petite).","on_invalid":"reject","allowed_values":[{"value":"petite","label":"PETITE"},{"value":"xxs","label":"XXS"},{"value":"xs","label":"XS"},{"value":"s","label":"S"},{"value":"m","label":"M"},{"value":"l","label":"L"},{"value":"xl","label":"XL"},{"value":"xxl","label":"XXL"},{"value":"3xl","label":"3XL"},{"value":"4xl","label":"4XL"},{"value":"5xl","label":"5XL"}],"example":"m","aliases":["size"]},{"name":"shoe_size","type":"array","required":false,"description":"US shoe size(s), 3.5-18.","on_invalid":"reject","allowed_values":[{"value":"3.5","label":"3.5"},{"value":"4","label":"4"},{"value":"4.5","label":"4.5"},{"value":"5","label":"5"},{"value":"5.5","label":"5.5"},{"value":"6","label":"6"},{"value":"6.5","label":"6.5"},{"value":"7","label":"7"},{"value":"7.5","label":"7.5"},{"value":"8","label":"8"},{"value":"8.5","label":"8.5"},{"value":"9","label":"9"},{"value":"9.5","label":"9.5"},{"value":"10","label":"10"},{"value":"10.5","label":"10.5"},{"value":"11","label":"11"},{"value":"11.5","label":"11.5"},{"value":"12","label":"12"},{"value":"12.5","label":"12.5"},{"value":"13","label":"13"},{"value":"13.5","label":"13.5"},{"value":"14","label":"14"},{"value":"14.5","label":"14.5"},{"value":"15","label":"15"},{"value":"15.5","label":"15.5"},{"value":"16","label":"16"},{"value":"16.5","label":"16.5"},{"value":"17","label":"17"},{"value":"18","label":"18"}],"example":"8"},{"name":"store_id","type":"array","required":false,"description":"Physical-store id(s) — items available in that TheRealReal store. `filters` lists them.","on_invalid":"reject","example":"19","aliases":["store"]},{"name":"price_min","type":"number","required":false,"description":"Minimum asking price in USD.","on_invalid":"reject","example":500,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum asking price in USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"availability","type":"enum","required":false,"description":"'available' hides sold listings (default); 'all' keeps them. Sold items are a real state on a one-of-a-kind marketplace, not an error.","on_invalid":"reject","allowed_values":[{"value":"available","label":"For sale only"},{"value":"all","label":"Include sold"}],"default":"available","example":"available"},{"name":"on_sale","type":"boolean","required":false,"description":"Only items the site currently marks as marked down.","on_invalid":"reject","default":false},{"name":"vintage","type":"boolean","required":false,"description":"Only items flagged vintage.","on_invalid":"reject","default":false},{"name":"with_tags","type":"boolean","required":false,"description":"Only items still carrying their original tags.","on_invalid":"reject","default":false},{"name":"editors_picks","type":"boolean","required":false,"description":"Only editors' picks.","on_invalid":"reject","default":false}],"returns":"results[{product_id, slug, sku, variant_id, name, url, designer, designer_id, artist, price, price_display, original_price, markdown_percent, discount_label, original_retail_price, original_retail_price_display, promotion, promotion_price, condition, color[], material[], size, gender, attributes{}, availability, sold, for_sale, on_hold, quantity, obsession_count, editors_pick, badge, images[]}], count, total_results_estimate, page, page_size, has_more, sort, currency, filters_applied, query, followed_redirect, redirect_to_sale","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"chanel classic flap","page_size":24}},{"name":"browse","description":"Browse a category, a designer, a curated sale or any filter combination without a keyword — the catalogue view. Same row shape and sorts as `search`. At least one of category, category_id, designer, designer_id, sale_slug or a facet filter is required, so nobody accidentally pages through four million rows.","required_params":[],"optional_params":["currency","page","page_size","sort","sale_slug","category","category_id","designer","designer_id","condition","color","gender","clothing_size","shoe_size","store_id","price_min","price_max","availability","on_sale","vintage","with_tags","editors_picks"],"params":[{"name":"currency","type":"enum","required":false,"description":"Display currency for the *_display fields. Prices are ALSO always returned in USD, because the source converts the label only.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"CAD","label":"CAD"},{"value":"AUD","label":"AUD"},{"value":"JPY","label":"JPY"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"MXN","label":"MXN"}],"default":"USD","example":"USD"},{"name":"page","type":"integer","required":false,"description":"1-based page. The catalogue connection stops at 2000 rows.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-120 (the source's own ceiling).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":120},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"price_asc","label":"price asc"},{"value":"price_desc","label":"price desc"},{"value":"sold","label":"sold"},{"value":"most_obsessed","label":"most obsessed"}],"default":"newest","example":"price_asc"},{"name":"sale_slug","type":"string","required":false,"description":"A curated sale/collection slug, e.g. 'hermes-birkin-bag'. `search` reports one in `redirect_to_sale` when the site answers a query with a curated page.","on_invalid":"reject","example":"hermes-birkin-bag"},{"name":"category","type":"string","required":false,"description":"Category permalink, e.g. 'women/handbags', 'men/shoes', 'jewelry/earrings', 'watches/bracelet'. Call `categories` for the live tree.","on_invalid":"reject","example":"women/handbags","aliases":["taxon","category_permalink"]},{"name":"category_id","type":"array","required":false,"description":"Category facet id(s) from `filters`/`categories`.","on_invalid":"reject","example":"493","aliases":["taxon_id"]},{"name":"designer","type":"string","required":false,"description":"Designer slug, e.g. 'chanel', 'saint-laurent', 'louis-vuitton'. Call `designers` for the full index.","on_invalid":"reject","example":"chanel","aliases":["brand","designer_slug"]},{"name":"designer_id","type":"array","required":false,"description":"Designer facet id(s) (from `designers`).","on_invalid":"reject","example":"267"},{"name":"condition","type":"array","required":false,"description":"Condition grade(s) the site assigns. A numeric facet id is also accepted.","on_invalid":"reject","allowed_values":[{"value":"pristine","label":"Pristine"},{"value":"excellent","label":"Excellent"},{"value":"very_good","label":"Very Good"},{"value":"good","label":"Good"},{"value":"fair","label":"Fair"},{"value":"as_is","label":"As Is"}],"example":"excellent"},{"name":"color","type":"array","required":false,"description":"Colour / pattern facet(s).","on_invalid":"reject","allowed_values":[{"value":"black","label":"Black"},{"value":"brown","label":"Brown"},{"value":"burgundy","label":"Burgundy"},{"value":"red","label":"Red"},{"value":"blue","label":"Blue"},{"value":"purple","label":"Purple"},{"value":"pink","label":"Pink"},{"value":"orange","label":"Orange"},{"value":"green","label":"Green"},{"value":"metallic","label":"Metallic"},{"value":"grey","label":"Grey"},{"value":"yellow","label":"Yellow"},{"value":"white","label":"White"},{"value":"gold","label":"Gold"},{"value":"silver","label":"Silver"},{"value":"animal_print","label":"Animal Print"},{"value":"pattern_prints","label":"Pattern Prints"},{"value":"neutrals","label":"Neutrals"},{"value":"clear","label":"Clear"}],"example":"black","aliases":["colour"]},{"name":"gender","type":"enum","required":false,"description":"Gender facet.","on_invalid":"reject","allowed_values":[{"value":"women","label":"Women"},{"value":"men","label":"Men"}],"example":"women"},{"name":"clothing_size","type":"array","required":false,"description":"Clothing size(s) (XS…5XL, Petite).","on_invalid":"reject","allowed_values":[{"value":"petite","label":"PETITE"},{"value":"xxs","label":"XXS"},{"value":"xs","label":"XS"},{"value":"s","label":"S"},{"value":"m","label":"M"},{"value":"l","label":"L"},{"value":"xl","label":"XL"},{"value":"xxl","label":"XXL"},{"value":"3xl","label":"3XL"},{"value":"4xl","label":"4XL"},{"value":"5xl","label":"5XL"}],"example":"m","aliases":["size"]},{"name":"shoe_size","type":"array","required":false,"description":"US shoe size(s), 3.5-18.","on_invalid":"reject","allowed_values":[{"value":"3.5","label":"3.5"},{"value":"4","label":"4"},{"value":"4.5","label":"4.5"},{"value":"5","label":"5"},{"value":"5.5","label":"5.5"},{"value":"6","label":"6"},{"value":"6.5","label":"6.5"},{"value":"7","label":"7"},{"value":"7.5","label":"7.5"},{"value":"8","label":"8"},{"value":"8.5","label":"8.5"},{"value":"9","label":"9"},{"value":"9.5","label":"9.5"},{"value":"10","label":"10"},{"value":"10.5","label":"10.5"},{"value":"11","label":"11"},{"value":"11.5","label":"11.5"},{"value":"12","label":"12"},{"value":"12.5","label":"12.5"},{"value":"13","label":"13"},{"value":"13.5","label":"13.5"},{"value":"14","label":"14"},{"value":"14.5","label":"14.5"},{"value":"15","label":"15"},{"value":"15.5","label":"15.5"},{"value":"16","label":"16"},{"value":"16.5","label":"16.5"},{"value":"17","label":"17"},{"value":"18","label":"18"}],"example":"8"},{"name":"store_id","type":"array","required":false,"description":"Physical-store id(s) — items available in that TheRealReal store. `filters` lists them.","on_invalid":"reject","example":"19","aliases":["store"]},{"name":"price_min","type":"number","required":false,"description":"Minimum asking price in USD.","on_invalid":"reject","example":500,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum asking price in USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"availability","type":"enum","required":false,"description":"'available' hides sold listings (default); 'all' keeps them. Sold items are a real state on a one-of-a-kind marketplace, not an error.","on_invalid":"reject","allowed_values":[{"value":"available","label":"For sale only"},{"value":"all","label":"Include sold"}],"default":"available","example":"available"},{"name":"on_sale","type":"boolean","required":false,"description":"Only items the site currently marks as marked down.","on_invalid":"reject","default":false},{"name":"vintage","type":"boolean","required":false,"description":"Only items flagged vintage.","on_invalid":"reject","default":false},{"name":"with_tags","type":"boolean","required":false,"description":"Only items still carrying their original tags.","on_invalid":"reject","default":false},{"name":"editors_picks","type":"boolean","required":false,"description":"Only editors' picks.","on_invalid":"reject","default":false}],"returns":"results[{product_id, slug, sku, variant_id, name, url, designer, designer_id, artist, price, price_display, original_price, markdown_percent, discount_label, original_retail_price, original_retail_price_display, promotion, promotion_price, condition, color[], material[], size, gender, attributes{}, availability, sold, for_sale, on_hold, quantity, obsession_count, editors_pick, badge, images[]}], count, total_results_estimate, page, page_size, has_more, sort, currency, filters_applied, sale_slug","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"women/handbags","page_size":24}},{"name":"product/detail","description":"One listing in full, by slug or URL: name, designer, category path, the CONDITION GRADE plus the condition narrative the site writes, the seller description as clean lines, measurements with the unit as published, materials and colours, asking price with the markdown against the site's own previous price, the ORIGINAL RETAIL ESTIMATE where the source publishes one, sold state, return policy, disclaimers and every image with its dimensions. A sold listing resolves normally — it is a state, not an error.","required_params":[],"optional_params":["slug","url"],"params":[{"name":"slug","type":"string","required":false,"description":"Listing slug, e.g. 'saint-laurent-embossed-leather-clutch-wod8x' — the last path segment of a therealreal.com product URL. Every search/browse row returns it.","on_invalid":"reject","example":"saint-laurent-embossed-leather-clutch-wod8x","aliases":["product_slug"]},{"name":"url","type":"string","required":false,"description":"A therealreal.com product URL instead of `slug`.","on_invalid":"reject","example":"https://www.therealreal.com/products/women/handbags/clutches/saint-laurent-embossed-leather-clutch-wod8x"}],"returns":"product{product_id, slug, sku, variant_id, name, url, designer, designer_id, artist, department, category, category_permalink, breadcrumb[{name, permalink, category_id}], condition, condition_description, description, description_lines[], measurements[{name, value}], measurement_unit, color[], material[], size, gender, attributes{}, price, price_display, original_price, markdown_percent, discount_label, original_retail_price, original_retail_price_display, promotion, availability, sold, for_sale, on_hold, quantity, obsession_count, editors_pick, badge, badge_tooltip, return_policy{returnable, description}, disclaimers[], sustainability{}, buy_now_eligible, valuation_report_url, images[{url, width, height}], image}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"hermes-2011-clemence-birkin-30-wlkvl"}},{"name":"products/batch","description":"Up to 50 listings in ONE upstream call, by slug — the shape a catalogue refresh or a price/availability watcher should use instead of 50 separate detail calls. Slugs that no longer resolve come back in `not_found` rather than failing the call.","required_params":["slugs"],"optional_params":[],"params":[{"name":"slugs","type":"array","required":true,"description":"Up to 50 listing slugs (or product URLs), comma-separated or a JSON array.","on_invalid":"reject","example":"saint-laurent-embossed-leather-clutch-wod8x","aliases":["slug","urls"]}],"returns":"products[{…same shape as product/detail…}], count, requested, not_found[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"slugs":["hermes-2011-clemence-birkin-30-wlkvl","hermes-alligator-birkin-30-vh8n9","hermes-togo-leather-birkin-30-v14oc"]}},{"name":"product/similar","description":"Visually similar LIVE listings for one product id — the answer to 'this one-of-a-kind item is sold, what else is like it'. Same row shape as search.","required_params":["product_id"],"optional_params":["only_similar"],"params":[{"name":"product_id","type":"string","required":true,"description":"Numeric product id (every row and detail returns `product_id`).","on_invalid":"reject","example":"54884625","aliases":["id"]},{"name":"only_similar","type":"boolean","required":false,"description":"Restrict to close matches rather than the wider visual set.","on_invalid":"reject","default":true}],"returns":"results[{…row…}], count, product_id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"52872453"}},{"name":"sold/search","description":"SOLD comparables: what items matching a description actually sold for on TheRealReal, with the transacted price, the consignor commission percentage the site quotes on that price and the resulting payout, plus the condition grade of each comp. This is the resale pricing surface — the live catalogue only shows asking prices.","required_params":["query"],"optional_params":["page","page_size","category","category_id","designer","designer_id","condition","color","gender","clothing_size","shoe_size","store_id","price_min","price_max","on_sale","vintage","with_tags","editors_picks"],"params":[{"name":"query","type":"string","required":true,"description":"What sold, e.g. 'chanel classic flap' or 'hermes birkin 30'.","on_invalid":"reject","example":"chanel classic flap","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The catalogue connection stops at 2000 rows.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-120 (the source's own ceiling).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":120},{"name":"category","type":"string","required":false,"description":"Category permalink, e.g. 'women/handbags', 'men/shoes', 'jewelry/earrings', 'watches/bracelet'. Call `categories` for the live tree.","on_invalid":"reject","example":"women/handbags","aliases":["taxon","category_permalink"]},{"name":"category_id","type":"array","required":false,"description":"Category facet id(s) from `filters`/`categories`.","on_invalid":"reject","example":"493","aliases":["taxon_id"]},{"name":"designer","type":"string","required":false,"description":"Designer slug, e.g. 'chanel', 'saint-laurent', 'louis-vuitton'. Call `designers` for the full index.","on_invalid":"reject","example":"chanel","aliases":["brand","designer_slug"]},{"name":"designer_id","type":"array","required":false,"description":"Designer facet id(s) (from `designers`).","on_invalid":"reject","example":"267"},{"name":"condition","type":"array","required":false,"description":"Condition grade(s) the site assigns. A numeric facet id is also accepted.","on_invalid":"reject","allowed_values":[{"value":"pristine","label":"Pristine"},{"value":"excellent","label":"Excellent"},{"value":"very_good","label":"Very Good"},{"value":"good","label":"Good"},{"value":"fair","label":"Fair"},{"value":"as_is","label":"As Is"}],"example":"excellent"},{"name":"color","type":"array","required":false,"description":"Colour / pattern facet(s).","on_invalid":"reject","allowed_values":[{"value":"black","label":"Black"},{"value":"brown","label":"Brown"},{"value":"burgundy","label":"Burgundy"},{"value":"red","label":"Red"},{"value":"blue","label":"Blue"},{"value":"purple","label":"Purple"},{"value":"pink","label":"Pink"},{"value":"orange","label":"Orange"},{"value":"green","label":"Green"},{"value":"metallic","label":"Metallic"},{"value":"grey","label":"Grey"},{"value":"yellow","label":"Yellow"},{"value":"white","label":"White"},{"value":"gold","label":"Gold"},{"value":"silver","label":"Silver"},{"value":"animal_print","label":"Animal Print"},{"value":"pattern_prints","label":"Pattern Prints"},{"value":"neutrals","label":"Neutrals"},{"value":"clear","label":"Clear"}],"example":"black","aliases":["colour"]},{"name":"gender","type":"enum","required":false,"description":"Gender facet.","on_invalid":"reject","allowed_values":[{"value":"women","label":"Women"},{"value":"men","label":"Men"}],"example":"women"},{"name":"clothing_size","type":"array","required":false,"description":"Clothing size(s) (XS…5XL, Petite).","on_invalid":"reject","allowed_values":[{"value":"petite","label":"PETITE"},{"value":"xxs","label":"XXS"},{"value":"xs","label":"XS"},{"value":"s","label":"S"},{"value":"m","label":"M"},{"value":"l","label":"L"},{"value":"xl","label":"XL"},{"value":"xxl","label":"XXL"},{"value":"3xl","label":"3XL"},{"value":"4xl","label":"4XL"},{"value":"5xl","label":"5XL"}],"example":"m","aliases":["size"]},{"name":"shoe_size","type":"array","required":false,"description":"US shoe size(s), 3.5-18.","on_invalid":"reject","allowed_values":[{"value":"3.5","label":"3.5"},{"value":"4","label":"4"},{"value":"4.5","label":"4.5"},{"value":"5","label":"5"},{"value":"5.5","label":"5.5"},{"value":"6","label":"6"},{"value":"6.5","label":"6.5"},{"value":"7","label":"7"},{"value":"7.5","label":"7.5"},{"value":"8","label":"8"},{"value":"8.5","label":"8.5"},{"value":"9","label":"9"},{"value":"9.5","label":"9.5"},{"value":"10","label":"10"},{"value":"10.5","label":"10.5"},{"value":"11","label":"11"},{"value":"11.5","label":"11.5"},{"value":"12","label":"12"},{"value":"12.5","label":"12.5"},{"value":"13","label":"13"},{"value":"13.5","label":"13.5"},{"value":"14","label":"14"},{"value":"14.5","label":"14.5"},{"value":"15","label":"15"},{"value":"15.5","label":"15.5"},{"value":"16","label":"16"},{"value":"16.5","label":"16.5"},{"value":"17","label":"17"},{"value":"18","label":"18"}],"example":"8"},{"name":"store_id","type":"array","required":false,"description":"Physical-store id(s) — items available in that TheRealReal store. `filters` lists them.","on_invalid":"reject","example":"19","aliases":["store"]},{"name":"price_min","type":"number","required":false,"description":"Minimum asking price in USD.","on_invalid":"reject","example":500,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum asking price in USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"on_sale","type":"boolean","required":false,"description":"Only items the site currently marks as marked down.","on_invalid":"reject","default":false},{"name":"vintage","type":"boolean","required":false,"description":"Only items flagged vintage.","on_invalid":"reject","default":false},{"name":"with_tags","type":"boolean","required":false,"description":"Only items still carrying their original tags.","on_invalid":"reject","default":false},{"name":"editors_picks","type":"boolean","required":false,"description":"Only editors' picks.","on_invalid":"reject","default":false}],"returns":"results[{product_id, slug, name, url, designer, designer_id, sold_price, sold_price_currency, consignor_commission_percent, consignor_payout, accepted_for_consignment, condition, color[], material[], size, attributes{}, images[]}], count, total_results_estimate, page, page_size, has_more, most_common_condition, commission_range{from, to, currency}, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"chanel classic flap","page_size":12}},{"name":"suggest","description":"The search box's own autocomplete for a partial term — the cheapest way to find the phrasing the catalogue actually indexes.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Partial term, e.g. 'chan'.","on_invalid":"reject","example":"chan","aliases":["q","term"]},{"name":"limit","type":"integer","required":false,"description":"Max suggestions to return.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"suggestions[{text}], count, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"chan"}},{"name":"trending","description":"TheRealReal's own demand signal, as three ranked lists of designer + item-class pairs: what is selling fastest, what is most wishlisted and what is searched most. This is the site's own read on its market, not a metric this API computes.","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"Max entries per list.","on_invalid":"reject","default":50,"example":25,"minimum":1,"maximum":200}],"returns":"fastest_selling[], most_wishlisted[], most_searched[], counts{fastest_selling, most_wishlisted, most_searched}, count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":25}},{"name":"designers","description":"The designer index for one department — 5 417 names for women, 2 745 for men — each with the facet id `browse` takes. Use `search`/`browse` with `designer` (slug) or `designer_id`.","required_params":[],"optional_params":["category","query"],"params":[{"name":"category","type":"enum","required":false,"description":"Which directory to list.","on_invalid":"reject","allowed_values":[{"value":"women","label":"Women"},{"value":"men","label":"Men"},{"value":"fine-jewelry","label":"Fine Jewelry"},{"value":"watches","label":"Watches"},{"value":"art","label":"Art"},{"value":"home","label":"Home"},{"value":"kids","label":"Kids"}],"default":"women","example":"women"},{"name":"query","type":"string","required":false,"description":"Filter the index by a name fragment, e.g. 'saint'.","on_invalid":"reject","example":"saint"}],"returns":"designers[{designer_id, name, slug, restriction}], count, category, categories[]","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"watches"}},{"name":"categories","description":"The live category tree with a live item count per node — the `category` permalinks every other action takes. Optionally scoped to one department or designer.","required_params":[],"optional_params":["category","designer","designer_id"],"params":[{"name":"category","type":"string","required":false,"description":"Category permalink, e.g. 'women/handbags', 'men/shoes', 'jewelry/earrings', 'watches/bracelet'. Call `categories` for the live tree.","on_invalid":"reject","example":"women/handbags","aliases":["taxon","category_permalink"]},{"name":"designer","type":"string","required":false,"description":"Designer slug, e.g. 'chanel', 'saint-laurent', 'louis-vuitton'. Call `designers` for the full index.","on_invalid":"reject","example":"chanel","aliases":["brand","designer_slug"]},{"name":"designer_id","type":"array","required":false,"description":"Designer facet id(s) (from `designers`).","on_invalid":"reject","example":"267"}],"returns":"departments[{category_id, name, permalink, count, children[{…}]}], count, total_results_estimate","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"women/handbags"}},{"name":"filters","description":"Every facet the catalogue exposes for a given scope, with live counts and the exact ids the filter params take: condition grades, colours, clothing and shoe sizes, gender, designers, physical stores, the price range and the boolean flags. Call this instead of hard-coding an id.","required_params":[],"optional_params":["currency","category","category_id","designer","designer_id","condition","color","gender","clothing_size","shoe_size","store_id","price_min","price_max","availability","on_sale","vintage","with_tags","editors_picks"],"params":[{"name":"currency","type":"enum","required":false,"description":"Display currency for the *_display fields. Prices are ALSO always returned in USD, because the source converts the label only.","on_invalid":"reject","allowed_values":[{"value":"USD","label":"USD"},{"value":"EUR","label":"EUR"},{"value":"GBP","label":"GBP"},{"value":"CAD","label":"CAD"},{"value":"AUD","label":"AUD"},{"value":"JPY","label":"JPY"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"MXN","label":"MXN"}],"default":"USD","example":"USD"},{"name":"category","type":"string","required":false,"description":"Category permalink, e.g. 'women/handbags', 'men/shoes', 'jewelry/earrings', 'watches/bracelet'. Call `categories` for the live tree.","on_invalid":"reject","example":"women/handbags","aliases":["taxon","category_permalink"]},{"name":"category_id","type":"array","required":false,"description":"Category facet id(s) from `filters`/`categories`.","on_invalid":"reject","example":"493","aliases":["taxon_id"]},{"name":"designer","type":"string","required":false,"description":"Designer slug, e.g. 'chanel', 'saint-laurent', 'louis-vuitton'. Call `designers` for the full index.","on_invalid":"reject","example":"chanel","aliases":["brand","designer_slug"]},{"name":"designer_id","type":"array","required":false,"description":"Designer facet id(s) (from `designers`).","on_invalid":"reject","example":"267"},{"name":"condition","type":"array","required":false,"description":"Condition grade(s) the site assigns. A numeric facet id is also accepted.","on_invalid":"reject","allowed_values":[{"value":"pristine","label":"Pristine"},{"value":"excellent","label":"Excellent"},{"value":"very_good","label":"Very Good"},{"value":"good","label":"Good"},{"value":"fair","label":"Fair"},{"value":"as_is","label":"As Is"}],"example":"excellent"},{"name":"color","type":"array","required":false,"description":"Colour / pattern facet(s).","on_invalid":"reject","allowed_values":[{"value":"black","label":"Black"},{"value":"brown","label":"Brown"},{"value":"burgundy","label":"Burgundy"},{"value":"red","label":"Red"},{"value":"blue","label":"Blue"},{"value":"purple","label":"Purple"},{"value":"pink","label":"Pink"},{"value":"orange","label":"Orange"},{"value":"green","label":"Green"},{"value":"metallic","label":"Metallic"},{"value":"grey","label":"Grey"},{"value":"yellow","label":"Yellow"},{"value":"white","label":"White"},{"value":"gold","label":"Gold"},{"value":"silver","label":"Silver"},{"value":"animal_print","label":"Animal Print"},{"value":"pattern_prints","label":"Pattern Prints"},{"value":"neutrals","label":"Neutrals"},{"value":"clear","label":"Clear"}],"example":"black","aliases":["colour"]},{"name":"gender","type":"enum","required":false,"description":"Gender facet.","on_invalid":"reject","allowed_values":[{"value":"women","label":"Women"},{"value":"men","label":"Men"}],"example":"women"},{"name":"clothing_size","type":"array","required":false,"description":"Clothing size(s) (XS…5XL, Petite).","on_invalid":"reject","allowed_values":[{"value":"petite","label":"PETITE"},{"value":"xxs","label":"XXS"},{"value":"xs","label":"XS"},{"value":"s","label":"S"},{"value":"m","label":"M"},{"value":"l","label":"L"},{"value":"xl","label":"XL"},{"value":"xxl","label":"XXL"},{"value":"3xl","label":"3XL"},{"value":"4xl","label":"4XL"},{"value":"5xl","label":"5XL"}],"example":"m","aliases":["size"]},{"name":"shoe_size","type":"array","required":false,"description":"US shoe size(s), 3.5-18.","on_invalid":"reject","allowed_values":[{"value":"3.5","label":"3.5"},{"value":"4","label":"4"},{"value":"4.5","label":"4.5"},{"value":"5","label":"5"},{"value":"5.5","label":"5.5"},{"value":"6","label":"6"},{"value":"6.5","label":"6.5"},{"value":"7","label":"7"},{"value":"7.5","label":"7.5"},{"value":"8","label":"8"},{"value":"8.5","label":"8.5"},{"value":"9","label":"9"},{"value":"9.5","label":"9.5"},{"value":"10","label":"10"},{"value":"10.5","label":"10.5"},{"value":"11","label":"11"},{"value":"11.5","label":"11.5"},{"value":"12","label":"12"},{"value":"12.5","label":"12.5"},{"value":"13","label":"13"},{"value":"13.5","label":"13.5"},{"value":"14","label":"14"},{"value":"14.5","label":"14.5"},{"value":"15","label":"15"},{"value":"15.5","label":"15.5"},{"value":"16","label":"16"},{"value":"16.5","label":"16.5"},{"value":"17","label":"17"},{"value":"18","label":"18"}],"example":"8"},{"name":"store_id","type":"array","required":false,"description":"Physical-store id(s) — items available in that TheRealReal store. `filters` lists them.","on_invalid":"reject","example":"19","aliases":["store"]},{"name":"price_min","type":"number","required":false,"description":"Minimum asking price in USD.","on_invalid":"reject","example":500,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum asking price in USD.","on_invalid":"reject","example":5000,"minimum":0},{"name":"availability","type":"enum","required":false,"description":"'available' hides sold listings (default); 'all' keeps them. Sold items are a real state on a one-of-a-kind marketplace, not an error.","on_invalid":"reject","allowed_values":[{"value":"available","label":"For sale only"},{"value":"all","label":"Include sold"}],"default":"available","example":"available"},{"name":"on_sale","type":"boolean","required":false,"description":"Only items the site currently marks as marked down.","on_invalid":"reject","default":false},{"name":"vintage","type":"boolean","required":false,"description":"Only items flagged vintage.","on_invalid":"reject","default":false},{"name":"with_tags","type":"boolean","required":false,"description":"Only items still carrying their original tags.","on_invalid":"reject","default":false},{"name":"editors_picks","type":"boolean","required":false,"description":"Only editors' picks.","on_invalid":"reject","default":false}],"returns":"facets[{name, key, type, values[{id, label, count, permalink}], range{min, max}}], count, total_results_estimate, filters_applied","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"women/handbags"}}]},{"name":"threads","category":{"id":"social","title":"Social Media"},"title":"Threads API scraper — public Threads (Meta) profiles, posts, replies, reposts, post detail, conversations and search (no login, public content only)","version":"0.4.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/threads/v1","spec_available":true,"actions":[{"name":"profile","description":"Public Threads profile by username — name, bio, bio links, follower count, verification, profile picture and user id.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"}],"returns":"profile{} — username, full_name, biography, bio_links[], follower_count, profile_pic_url, user_id, is_verified, is_private, category, external_url","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"zuck"}},{"name":"posts","description":"Public posts from a Threads profile (most-recent first). Returns full text, media, engagement counts, location and music per post. Set `limit` for how many to return.","required_params":["username"],"optional_params":["limit"],"params":[{"name":"username","type":"string","required":true,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). Larger values are clamped to 100.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"posts[] (id, code, url, text, media_type, image_url/video_url, carousel_media[], like/reply/repost/quote counts, taken_at, location, music, usertags[])","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"natgeo","limit":10}},{"name":"replies","description":"Public replies from a Threads profile (the Replies tab). Set `limit` for how many to return.","required_params":["username"],"optional_params":["limit"],"params":[{"name":"username","type":"string","required":true,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). Larger values are clamped to 100.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"replies[] — the profile's reply posts (same shape as posts)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"zuck","limit":10}},{"name":"reposts","description":"Posts a Threads user has reposted — the Reposts tab on their profile. Returns the original reposted posts (authored by other accounts).","required_params":["username"],"optional_params":["limit"],"params":[{"name":"username","type":"string","required":true,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). Larger values are clamped to 100.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"reposts[] — the reposted posts (id, code, text, original username, counts, media)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"natgeo","limit":10}},{"name":"post","description":"Maximally-complete public post detail. Provide url, or username + code, or post_id. Returns text, media (image/video/carousel), all engagement counts, location, music, tagged users, link preview, language and paid-partnership flag.","required_params":[],"optional_params":["url","username","code","post_id"],"params":[{"name":"url","type":"string","required":false,"description":"Full Threads post URL (alternative to username + code).","on_invalid":"ignore","example":"https://www.threads.com/@zuck/post/C8H9mn_xyz1"},{"name":"username","type":"string","required":false,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"},{"name":"code","type":"string","required":false,"description":"Post shortcode — the code in threads.com/@<username>/post/<code>. Combine with username, or pass the full post `url` instead.","on_invalid":"ignore","example":"C8H9mn_xyz1"},{"name":"post_id","type":"string","required":false,"description":"Numeric Threads post id (from a post's `id`). Alternative to url / username+code.","on_invalid":"ignore","example":"3141592653589793238"}],"returns":"post{} — id, code, url, text, username, media_type, image_url/video_url, carousel_media[], like/reply/repost/quote/reshare/impression counts, taken_at, location, music, usertags[], link_preview, detected_language, is_paid_partnership","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"natgeo","code":"DZ2pt10Eanh"}},{"name":"post_replies","description":"The reply conversation for a public post (thread_items). Provide post_id, or url, or username + code.","required_params":[],"optional_params":["post_id","url","username","code","limit"],"params":[{"name":"post_id","type":"string","required":false,"description":"Numeric Threads post id (from a post's `id`). Alternative to url / username+code.","on_invalid":"ignore","example":"3141592653589793238"},{"name":"url","type":"string","required":false,"description":"Full Threads post URL (alternative to username + code).","on_invalid":"ignore","example":"https://www.threads.com/@zuck/post/C8H9mn_xyz1"},{"name":"username","type":"string","required":false,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"},{"name":"code","type":"string","required":false,"description":"Post shortcode — the code in threads.com/@<username>/post/<code>. Combine with username, or pass the full post `url` instead.","on_invalid":"ignore","example":"C8H9mn_xyz1"},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-100). Larger values are clamped to 100.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"replies[] — reply posts to the target post (id, code, text, username, counts, media)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"natgeo","code":"DZ2pt10Eanh","limit":10}},{"name":"search","description":"Search public Threads posts by keyword. Returns matching public posts with author, text and permalink.","required_params":["q"],"optional_params":["query","limit"],"params":[{"name":"q","type":"string","required":true,"description":"Search keyword (also accepted as 'query').","on_invalid":"reject","example":"reef","aliases":["query"]},{"name":"limit","type":"integer","required":false,"description":"Max items to return (1-50). Larger values are clamped to 50.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":50}],"returns":"results[] — matching public posts (id = post code, code, username, text, url, timestamp_label; plus post_id, taken_at, like/reply/repost/quote counts and media when available). A query Threads has no public posts for returns NOT_FOUND (not charged).","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"reef","limit":10}},{"name":"user_search","description":"Look up the public Threads account whose handle matches a query (exact / near-exact). NOTE: full fuzzy people search is login-gated by Threads; logged-out resolves the matching handle, like instagram's users_search.","required_params":["q"],"optional_params":["query"],"params":[{"name":"q","type":"string","required":true,"description":"Search keyword (also accepted as 'query').","on_invalid":"reject","example":"reef","aliases":["query"]}],"returns":"users[] — matching public account(s) (username, full_name, follower_count, user_id, is_verified, profile_pic_url, bio)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"natgeo"}},{"name":"followers","description":"Account-gated: the followers list requires a logged-in Threads session and is not available for public (logged-out) use.","required_params":[],"optional_params":["username"],"params":[{"name":"username","type":"string","required":false,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"}],"returns":"Requires a logged-in Threads session — not available for public (logged-out) use.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"zuck"}},{"name":"following","description":"Account-gated: the following list requires a logged-in Threads session and is not available for public (logged-out) use.","required_params":[],"optional_params":["username"],"params":[{"name":"username","type":"string","required":false,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"}],"returns":"Requires a logged-in Threads session — not available for public (logged-out) use.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"zuck"}},{"name":"likes","description":"Account-gated: the list of accounts that liked a post (who-liked) is not exposed to logged-out clients by Threads — it requires a logged-in session.","required_params":[],"optional_params":["url","username","code","post_id"],"params":[{"name":"url","type":"string","required":false,"description":"Full Threads post URL (alternative to username + code).","on_invalid":"ignore","example":"https://www.threads.com/@zuck/post/C8H9mn_xyz1"},{"name":"username","type":"string","required":false,"description":"Threads handle without the @ (the name in threads.com/@<username>).","on_invalid":"reject","example":"zuck"},{"name":"code","type":"string","required":false,"description":"Post shortcode — the code in threads.com/@<username>/post/<code>. Combine with username, or pass the full post `url` instead.","on_invalid":"ignore","example":"C8H9mn_xyz1"},{"name":"post_id","type":"string","required":false,"description":"Numeric Threads post id (from a post's `id`). Alternative to url / username+code.","on_invalid":"ignore","example":"3141592653589793238"}],"returns":"Requires a logged-in Threads session — the who-liked list is not public. The aggregate like_count IS available on `post` / `posts`.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.threads.com/@zuck/post/C8H9mn_xyz1"}}]},{"name":"threat-intel","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Threat Intelligence API — URL, domain and IP reputation from open threat feeds: URLHaus malware URLs, OpenPhish phishing feed, ThreatFox IOCs, Feodo botnet C2, SSLBL SSL blacklist, Spamhaus DROP hijacked netblocks and urlscan.io scan history (all keyless open sources, no API key required)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/threat-intel/v1","spec_available":true,"actions":[{"name":"url_check","description":"Is a URL malicious? Checks the URLHaus malware-URL feed + OpenPhish phishing feed (exact + variants) + its host across ThreatFox/URLHaus-hosts/Feodo/SSLBL + risk flags → verdict.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"The full URL to check (http/https). Matched against the URLHaus malware-URL feed AND the OpenPhish phishing feed (exact + http/https + trailing-slash variants), plus its host against every host/IOC feed.","on_invalid":"reject","example":"http://203.99.178.233:57690/i","aliases":["u","link"]}],"returns":"target, type, malicious (bool), verdict (clean|suspicious|malicious), score (0-100), sources[] (per-feed hit detail), threat_types[], malware[], flags[], checked_sources[]","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://github.com/"}},{"name":"domain_reputation","description":"Domain reputation: URLHaus host listing + active malware URLs + OpenPhish phishing + ThreatFox domain IOCs + urlscan scan-history count + risk flags → consolidated verdict.","required_params":["domain"],"optional_params":[],"params":[{"name":"domain","type":"string","required":true,"description":"Domain/host to check (a bare host like example.com; a full URL or leading www. is accepted and normalized). Checked against URLHaus hosts, ThreatFox domain IOCs, and urlscan scan history.","on_invalid":"reject","example":"paypal.com","aliases":["host","hostname"]}],"returns":"target, type, malicious, verdict, score, sources[], malware_urls[], threat_types[], malware[], urlscan_scans, flags[], checked_sources[]","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"ip_reputation","description":"IP abuse signals: Feodo botnet-C2 + SSLBL botnet-C2 + ThreatFox IP IOCs + URLHaus IP-hosted malware + Spamhaus DROP hijacked-netblock → verdict + score (all keyless).","required_params":["ip"],"optional_params":[],"params":[{"name":"ip","type":"string","required":true,"description":"IPv4/IPv6 address to check against Feodo botnet-C2, SSLBL botnet-C2, ThreatFox IP IOCs, URLHaus IP-hosted malware, and Spamhaus DROP hijacked netblocks (all keyless open feeds).","on_invalid":"reject","example":"162.243.103.246","aliases":["ip_address","addr"]}],"returns":"target, type, malicious, verdict, score, sources[], malware[], threat_types[], c2_ports[], checked_sources[]","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"ip":"8.8.8.8"}},{"name":"scan_lookup","description":"urlscan.io public scan history + per-scan verdict for a domain/IP (server, IP, country, TLS age, page title, malicious-flag). Open source — no key.","required_params":["domain"],"optional_params":["search_field","limit"],"params":[{"name":"domain","type":"string","required":true,"description":"Domain (or a URL — its host is used) to pull urlscan.io public scan history + per-scan verdict for. Use search_field to switch the query axis.","on_invalid":"reject","example":"github.com","aliases":["host","hostname","url"]},{"name":"search_field","type":"enum","required":false,"description":"Which urlscan axis to query. 'domain' (default) is broadest; 'page' is the landing domain only; 'ip' searches by contacted IP.","on_invalid":"ignore","allowed_values":[{"value":"domain","label":"Match the scanned page's contacted domain"},{"value":"page","label":"Match only the primary page domain (page.domain)"},{"value":"ip","label":"Match a contacted IP (treats the input as an IP)"}],"default":"domain","example":"domain"},{"name":"limit","type":"integer","required":false,"description":"Max scan-history records to return (1-100, default 20). Clamped to 100.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"target, query, total, scans[] (uuid, url, domain, ip, server, country, mime_type, title, tls_age_days, time, malicious, result_link), has_more, next_offset","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"domain":"github.com"}},{"name":"batch","description":"Check up to 20 mixed indicators (URL/domain/IP, auto-routed) in one call.","required_params":["targets"],"optional_params":[],"params":[{"name":"targets","type":"array","required":true,"description":"List of indicators to check in one call (max 20); each may be a URL, domain, or IP — the type is auto-detected and routed to the right feeds.","on_invalid":"reject","example":["http://203.99.178.233:57690/i","paypal.com","162.243.103.246"],"aliases":["items","indicators"]}],"returns":"results[] (one reputation block per input, with ok/error + verdict), count, malicious_count, ok_count","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"targets":["https://github.com/","github.com","8.8.8.8"]}}]},{"name":"thredup","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"ThredUp API scraper - the US fashion-resale marketplace: search secondhand clothing, shoes, handbags and jewellery by keyword, brand, category, size grade, colour, material and price band; every listing comes back with brand, condition grade, measurements, materials, the price today, ThredUp's earlier list price and the estimated new-retail price, so the discount is a number you can check. Sold and packed listings are selectable, because in resale the sold price is the data. One full item record by item number, and a brand-name to brand-tag resolver. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/thredup/v1","spec_available":true,"actions":[{"name":"search","description":"Search ThredUp. Give a keyword, a department, or both - one of the two is required (a bare call cannot be answered and returns MISSING_PARAM). Narrow with brand, category, condition grade, colour, material, style, price band, who sells it, and whether the copy is still for sale or already sold. Every row carries the full listing record: brand, size (US and EU where ThredUp has it), condition grade and its wear note, garment measurements in inches, fibre composition, colour, the price today, ThredUp's earlier list price, the estimated new-retail price and the discount both as ThredUp states it and as recomputed here. ThredUp caps its own `totalCount` at 10001 for every query, so that number is returned flagged as a cap and never as a result count.","required_params":[],"optional_params":["query","department","brand","category","condition","color","material","style","price_min","price_max","sold_by","listing_state","designer_only","clearance_only","sort","page","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, e.g. 'nike dress', 'levis 501', 'coach bag'. ThredUp's own PLP URL uses a curated `search_tags` parameter that returns nothing for free text, so keyword search here goes through the site's full-text field. Either `query` or `department` must be given.","on_invalid":"reject","example":"nike dress","aliases":["q","keyword","keywords","search","text"]},{"name":"department","type":"enum","required":false,"description":"ThredUp department. Either `query` or `department` must be given. Note: `men` and `kids` are NOT accepted - both answered with zero listings on 2026-10-01 while the 13 values below all returned rows; ThredUp's live catalogue on this surface is womenswear plus boys/girls.","on_invalid":"reject","allowed_values":[{"value":"women","label":"Womenswear - ThredUp's main catalogue"},{"value":"juniors","label":"Juniors sizing"},{"value":"plus","label":"Plus sizing"},{"value":"petite","label":"Petite sizing"},{"value":"tall","label":"Tall sizing"},{"value":"maternity","label":"Maternity"},{"value":"designer","label":"Designer and luxury labels"},{"value":"handbags","label":"Handbags"},{"value":"shoes","label":"Shoes"},{"value":"accessories","label":"Accessories"},{"value":"jewelry","label":"Jewellery"},{"value":"boys","label":"Boys' kidswear"},{"value":"girls","label":"Girls' kidswear"}],"example":"women","aliases":["dept","department_tags","section"]},{"name":"brand","type":"array","required":false,"description":"One or more brand names, e.g. 'Nike' or 'Nike,Lululemon'. Names are converted to ThredUp's own brand tag; use the `brand/resolve` action when a name does not match. Measured biting: 48/48 returned rows carried the requested brand.","on_invalid":"reject","example":"Nike","aliases":["brands","brand_name","brand_name_tags"]},{"name":"category","type":"array","required":false,"description":"One or more ThredUp category tags, e.g. 'dresses', 'tops', 'shoes', 'one-pieces', 'jeans'. Every returned row's `category_tags` carried the requested tag in the run measured.","on_invalid":"reject","example":"dresses","aliases":["categories","category_tags"]},{"name":"condition","type":"enum","required":false,"description":"ThredUp's condition grade. Measured biting: 24/24 rows came back in the requested grade.","on_invalid":"reject","allowed_values":[{"value":"excellent","label":"Q1 - excellent, little or no sign of wear"},{"value":"very_good","label":"Q2 - very good, minor wear"},{"value":"good","label":"Q3 - good, visible wear"}],"example":"excellent","aliases":["quality","grade"]},{"name":"color","type":"array","required":false,"description":"One or more colour names as ThredUp prints them, e.g. 'Black', 'Blue', 'Red'. Measured biting: 24/24 rows carried only the requested colour.","on_invalid":"reject","example":"Black","aliases":["colors","colour","color_names","advanced_color_names"]},{"name":"material","type":"array","required":false,"description":"One or more material tags, e.g. 'cotton', 'silk', 'leather', 'cashmere', 'wool'. Measured biting: 6/6 sampled rows listed the requested fibre in their composition.","on_invalid":"reject","example":"cotton","aliases":["materials","material_tags","fabric"]},{"name":"style","type":"array","required":false,"description":"One or more ThredUp style tags, e.g. 'rompers', 'maxi', 'bootcut'.","on_invalid":"reject","example":"rompers","aliases":["styles","style_tags"]},{"name":"price_min","type":"number","required":false,"description":"Lower edge of ThredUp's own price band, in USD. The band is applied to ThredUp's pre-promotion number, so the `price_usd` returned can sit a little outside it - measured: band 0-15 returned 8.99-19.99, band 50-60 returned 40.99-60.99, band 100-200 returned 107.99-197.99.","on_invalid":"reject","example":0,"minimum":0,"maximum":100000,"aliases":["min_price","priceFrom"]},{"name":"price_max","type":"number","required":false,"description":"Upper edge of ThredUp's own price band, in USD. See `price_min` for the measured slack.","on_invalid":"reject","example":50,"minimum":0,"maximum":100000,"aliases":["max_price","priceTo"]},{"name":"sold_by","type":"enum","required":false,"description":"Who sells the listing. `thredup` is ThredUp's own warehouse stock, `seller` is an individual ThredUp seller. Measured biting: `thredup` → 24/24 rows not seller-listed, `seller` → 24/24 seller-listed.","on_invalid":"reject","allowed_values":[{"value":"thredup","label":"ThredUp's own warehouse stock"},{"value":"seller","label":"Listed by an individual ThredUp seller"}],"example":"thredup","aliases":["listing_type","seller_type"]},{"name":"listing_state","type":"enum","required":false,"description":"Where the single copy is in its life. `listed` is still buyable; `purchased` and `packed` are already sold - in resale the sold price is data, so they are selectable rather than hidden. Measured biting: 24/24 rows came back in the requested state.","on_invalid":"reject","allowed_values":[{"value":"listed","label":"Still for sale"},{"value":"purchased","label":"Already bought by someone"},{"value":"packed","label":"Bought and packed for shipping"}],"example":"listed","aliases":["state","status"]},{"name":"designer_only","type":"boolean","required":false,"description":"Only ThredUp's luxury shelf. Measured biting: the filtered rows were Bottega Veneta, Burberry, Bvlgari, Celine and the like, where the unfiltered page carried 19 mixed brands.","on_invalid":"reject","default":false,"example":true,"aliases":["luxe","luxe_brand","luxury"]},{"name":"clearance_only","type":"boolean","required":false,"description":"Only clearance listings. Measured biting: 24/24 filtered rows were clearance, 0/24 unfiltered.","on_invalid":"reject","default":false,"example":true,"aliases":["clearance"]},{"name":"sort","type":"enum","required":false,"description":"Result order. ThredUp's own default on this surface is `recently_discounted`.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"ThredUp's relevance order"},{"value":"newest","label":"Most recently listed first"},{"value":"price_low_high","label":"Cheapest first"},{"value":"price_high_low","label":"Most expensive first"},{"value":"recently_discounted","label":"Most recently marked down first"}],"example":"newest","aliases":["sort_by","order","sortBy"]},{"name":"page","type":"integer","required":false,"description":"1-based page. ThredUp's ranked index shifts between calls, so pages overlap: four pages of 48 on one query gave 178 distinct item numbers rather than 192 (page 2 repeated 1 row, page 4 repeated 13). `duplicate_in_page` reports repeats inside the page you asked for.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500,"aliases":["p","page_number"]},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, honoured exactly - measured 1:1 at 12, 24, 36, 48, 60, 96, 119, 120 and 200. Capped here at 120; ThredUp's own front end asks for 119.","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":120,"aliases":["limit","size","amount"]}],"returns":"query, filters_applied, results[]{item_number, item_id, url, title, brand, brand_id, category, category_tags, department, gender, style_tags, attribute_tags, price_usd, thredup_list_price_usd, retail_price_usd, discount_vs_retail_pct, discount_vs_retail_pct_computed, discount_disagrees_with_source, is_on_sale, is_clearance, is_final_sale, condition, condition_code, condition_label, condition_detail, new_with_tags, availability, listing_state, is_available, favorite_count, size_display, size_display_eu, size_value, size_scale, measurements{…_in}, materials[], colors[], mpn, description, warehouse_id, is_seller_listing, partner{…}, photo_numbers[], photos[]}, count, keyword_match_pct, looks_like_padding, page, per_page, has_more, duplicate_in_page, total_count, total_count_is_capped, sorts_offered[], sort, measured_at","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"nike dress","per_page":24}},{"name":"item/detail","description":"One ThredUp listing in full by item number: everything the search row carries plus ThredUp's per-garment attribute block (fit, pattern, neckline, sleeve length, stretch, jean wash, rise, heel height where the category has them), the dropshipper and authenticity certificate when there is one, the partner description, and ThredUp's own sustainability estimate for the item, and - for a listing sold by an individual ThredUp seller - the seller block, which exists ONLY here and is null on every search row. A listing that has already sold is returned with `listing_state: purchased` - that is an answer, not an error. An item number ThredUp does not know returns NOT_FOUND and is not retried.","required_params":["item_number"],"optional_params":[],"params":[{"name":"item_number","type":"integer","required":true,"description":"ThredUp item number, the number in a listing URL (thredup.com/item/236140020). NOT the `item_id` that the same record also carries - the two differ on every row.","on_invalid":"reject","example":236140020,"value_pattern":"\\d{1,12}","aliases":["item","id","itemNumber","url"]}],"returns":"item{… every search field …, attributes{fit, pattern, neckline, …}, seller{seller_id, seller_name, seller_kind, ships_from_city, ships_from_region, covers_shipping, buyer_protection_usd, on_vacation} (seller listings only), dropshipper{…}, partner_description, adjustable_waist, sustainability{category, glasses_of_water, hours_of_lighting, miles_by_car}}, measured_at","cacheable":true,"cache_ttl_seconds":90,"pricing":{"mode":"flat","credits":3},"example_params":{"item_number":236140020}},{"name":"brand/resolve","description":"Check brand names against ThredUp's own brand list and get back the tag its filters take. Send one or several names ('Calvin Klein', 'levis', 'Free People'); each comes back with the tag to pass to `search`'s `brand` parameter and with ThredUp's own canonical spelling ('levis' -> \"Levi's\"). A name ThredUp does not carry is listed in `unresolved` instead of being silently dropped.","required_params":["name"],"optional_params":[],"params":[{"name":"name","type":"array","required":true,"description":"One or more brand names to resolve into ThredUp's own brand tags, e.g. 'Calvin Klein', 'lululemon', 'Free People'.","on_invalid":"reject","example":"Calvin Klein","aliases":["brand","brands","names","q","query"]}],"returns":"brands[]{name, brand_tag, requested}, unresolved[], count, measured_at","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"name":"Calvin Klein"}}]},{"name":"tiki","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Tiki API — Vietnam's home-grown marketplace as JSON: product search in Vietnamese, full product records with the price actually charged in VND, the strikethrough price and the real discount, rating, units sold, live availability, every image and the spec table, the seller behind the offer and the rival offers, colour/size variants with their own prices, customer reviews with the 1-5 star histogram, and a category browse whose filters carry Tiki's own counts — from tiki.vn, no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/tiki/v1","spec_available":true,"actions":[{"name":"search","description":"Search Tiki the way a Vietnamese shopper does and get the product grid: the price actually charged in dong, Tiki's strikethrough price, the real discount, rating and rating count, units sold, the seller, and both ids you need to read the product (`product_id` and `seller_product_id`). Narrow with a price band, a minimum rating, a category, a brand or a seller — every one of them measured to bite. 🔴 Tiki matches the literal words in a product title and does NOT translate: `điện thoại` returns 10 000+ results and `phone` returns 92; `tã bỉm` returns 7 635 and `diaper` returns 2. Search in Vietnamese, with the diacritics, and this API passes them through untouched.","required_params":["query"],"optional_params":["page","sort","price_min","price_max","min_rating","category_id","brand_id","seller_id"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper would type on tiki.vn — in Vietnamese. Diacritics are passed through unchanged and matter: `giày` returns 4 608 results and the accent-stripped `giay` returns 8 802 DIFFERENT ones, sharing 1 row in 40. Both work; they are not the same query.","on_invalid":"reject","example":"nồi chiên không dầu","aliases":["q","keyword","term","search"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Result order. Tiki's own default is `default` (its popularity ranking). 🔴 A price sort selects a global price band per page — measured on `sách`: page 1 spans 9 500-14 000 ₫, page 2 14 000-25 000 ₫, page 10 40 000-41 000 ₫ — but the source hands the 40 rows back newest-listing-first inside that band, so this API re-orders the page by price and sets `page_reordered`. Tiki silently IGNORES an order it does not know, so anything outside this list is rejected here rather than quietly dropped.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Tiki's own popularity ranking (default)"},{"value":"top_seller","label":"Best selling first"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price, cheapest first"},{"value":"price_desc","label":"Price, dearest first"}],"example":"price_asc"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in Vietnamese dong (whole dong — Tiki publishes no minor unit). Sent to the source as one band with `price_max`.","on_invalid":"ignore","example":1000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in dong. Measured on the query `iphone`: 3 399 matches unfiltered, 124 under 50 000 ₫, 77 between 1 000 000 and 15 000 000 ₫.","on_invalid":"ignore","example":15000000,"minimum":1},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average customer rating is at least this many stars, 1-5. This also drops unrated products. Measured on `iphone`: 3 399 unfiltered, 993 at 1+, 929 at 3+, 842 at 4+, 705 at 5. Tiki clamps 6 to 5 and ignores a non-number, so both are rejected here instead.","on_invalid":"reject","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"category_id","type":"string","required":false,"description":"Narrow to one category. Accepts the numeric id (1789 = Phones & Tablets) or a tiki.vn category URL (`/dien-thoai-may-tinh-bang/c1789`). Ids come from `categories`, from a product's `category_path`, or from the `category` facet. Measured: `iphone` 3 399 matches, 3 inside category 1789.","on_invalid":"ignore","example":"1789","aliases":["category","cid"]},{"name":"brand_id","type":"string","required":false,"description":"Narrow to one brand id. Ids come from the `brand` facet on `category` or from any product's `brand_id`. Measured: `iphone` 3 399 unfiltered, 3 for brand 17827 (Apple).","on_invalid":"ignore","example":"17827","aliases":["brand"]},{"name":"seller_id","type":"string","required":false,"description":"Narrow to one merchant. Seller ids come from any product row's `seller_id` or from the `seller` facet. Measured: `iphone` 3 399 unfiltered, 4 from seller 1 (Tiki Trading).","on_invalid":"ignore","example":"1","aliases":["seller"]}],"returns":"products[]{product_id, seller_product_id, url, name, price_vnd, original_price_vnd, discount_vnd, discount_percent, discount_percent_computed, currency, rating, review_count, quantity_sold, brand_id, brand_name, seller_id, seller_name, sku, master_sku, image, category_id, category_path[], category_name, origin, is_authentic, is_official_store, is_top_brand, in_stock, free_shipping_campaign, fastest_delivery_time}, count, total_results, total_results_text, total_results_capped, page, per_page, last_page, price_band_vnd, page_reordered, non_product_tiles_dropped, query, query_note","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"nồi chiên không dầu"}},{"name":"category","description":"Walk one Tiki category page by page, with the same filters as `search` and the same product rows — and, with `include_facets`, the filter block Tiki itself shows: every brand, seller, price band, rating and category-specific attribute WITH the number of products behind it. That facet block is where the `brand_id` and `seller_id` values come from. Category ids come from `categories` or from any product's `category_path`. A category id Tiki does not publish returns NOT_FOUND rather than an empty success.","required_params":["category_id"],"optional_params":["page","query","include_facets","sort","price_min","price_max","min_rating","category_id","brand_id","seller_id"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric Tiki category id (1789 = Phones & Tablets, 8322 = Tiki Books) or a tiki.vn category URL such as `https://tiki.vn/dien-thoai-may-tinh-bang/c1789`.","on_invalid":"reject","example":"1789","aliases":["category","cid","url"]},{"name":"query","type":"string","required":false,"description":"Optional keyword to apply INSIDE the category. Measured: category 1789 holds 107 products, 3 of them match `iphone`.","on_invalid":"ignore","example":"samsung","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"include_facets","type":"boolean","required":false,"description":"Also return `facets`: every filter Tiki offers for this category with the number of products behind each value — brands, sellers (with their ids), price bands, ratings, colours, and the category-specific ones such as ROM or camera resolution on phones. 🔴 Tiki publishes facets only for a CATEGORY: the keyword search route returns no `filters` key at all, and the facet route refuses a bare keyword, so this parameter has no effect on `search`. Turning it on costs one extra upstream request.","on_invalid":"ignore","default":false},{"name":"sort","type":"enum","required":false,"description":"Result order. Tiki's own default is `default` (its popularity ranking). 🔴 A price sort selects a global price band per page — measured on `sách`: page 1 spans 9 500-14 000 ₫, page 2 14 000-25 000 ₫, page 10 40 000-41 000 ₫ — but the source hands the 40 rows back newest-listing-first inside that band, so this API re-orders the page by price and sets `page_reordered`. Tiki silently IGNORES an order it does not know, so anything outside this list is rejected here rather than quietly dropped.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Tiki's own popularity ranking (default)"},{"value":"top_seller","label":"Best selling first"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price, cheapest first"},{"value":"price_desc","label":"Price, dearest first"}],"example":"price_asc"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in Vietnamese dong (whole dong — Tiki publishes no minor unit). Sent to the source as one band with `price_max`.","on_invalid":"ignore","example":1000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in dong. Measured on the query `iphone`: 3 399 matches unfiltered, 124 under 50 000 ₫, 77 between 1 000 000 and 15 000 000 ₫.","on_invalid":"ignore","example":15000000,"minimum":1},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average customer rating is at least this many stars, 1-5. This also drops unrated products. Measured on `iphone`: 3 399 unfiltered, 993 at 1+, 929 at 3+, 842 at 4+, 705 at 5. Tiki clamps 6 to 5 and ignores a non-number, so both are rejected here instead.","on_invalid":"reject","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"category_id","type":"string","required":false,"description":"Narrow to one category. Accepts the numeric id (1789 = Phones & Tablets) or a tiki.vn category URL (`/dien-thoai-may-tinh-bang/c1789`). Ids come from `categories`, from a product's `category_path`, or from the `category` facet. Measured: `iphone` 3 399 matches, 3 inside category 1789.","on_invalid":"ignore","example":"1789","aliases":["category","cid"]},{"name":"brand_id","type":"string","required":false,"description":"Narrow to one brand id. Ids come from the `brand` facet on `category` or from any product's `brand_id`. Measured: `iphone` 3 399 unfiltered, 3 for brand 17827 (Apple).","on_invalid":"ignore","example":"17827","aliases":["brand"]},{"name":"seller_id","type":"string","required":false,"description":"Narrow to one merchant. Seller ids come from any product row's `seller_id` or from the `seller` facet. Measured: `iphone` 3 399 unfiltered, 4 from seller 1 (Tiki Trading).","on_invalid":"ignore","example":"1","aliases":["seller"]}],"returns":"products[] (same shape as search), count, total_results, total_results_text, total_results_capped, page, per_page, last_page, price_band_vnd, page_reordered, non_product_tiles_dropped, category_id, facets[]{name, label, multi_select, values[]{value, label, count, url_key}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"1789"}},{"name":"brand","description":"One brand's whole Tiki shelf, paged and filterable exactly like a category, plus the brand's own record (name, logo, page URL, description). Measured: brand 18802 (Samsung) has 224 products on Tiki, brand 17827 (Apple) has 18. A brand id Tiki does not publish returns NOT_FOUND — its own brand route answers 404 'Brand not found', which this action uses as the oracle rather than guessing from an empty grid.","required_params":["brand_id"],"optional_params":["page","query","sort","price_min","price_max","min_rating","category_id","seller_id"],"params":[{"name":"brand_id","type":"string","required":true,"description":"Numeric Tiki brand id. Take it from any product row's `brand_id`, or from the `brand` facet on `category`. 🔴 Books carry no brand at all on Tiki — the field is absent, not empty — so this action does not cover the book catalogue.","on_invalid":"reject","example":"18802","aliases":["brand","id"]},{"name":"query","type":"string","required":false,"description":"Optional keyword applied inside the brand's shelf.","on_invalid":"ignore","example":"galaxy","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Result order. Tiki's own default is `default` (its popularity ranking). 🔴 A price sort selects a global price band per page — measured on `sách`: page 1 spans 9 500-14 000 ₫, page 2 14 000-25 000 ₫, page 10 40 000-41 000 ₫ — but the source hands the 40 rows back newest-listing-first inside that band, so this API re-orders the page by price and sets `page_reordered`. Tiki silently IGNORES an order it does not know, so anything outside this list is rejected here rather than quietly dropped.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Tiki's own popularity ranking (default)"},{"value":"top_seller","label":"Best selling first"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price, cheapest first"},{"value":"price_desc","label":"Price, dearest first"}],"example":"price_asc"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in Vietnamese dong (whole dong — Tiki publishes no minor unit). Sent to the source as one band with `price_max`.","on_invalid":"ignore","example":1000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in dong. Measured on the query `iphone`: 3 399 matches unfiltered, 124 under 50 000 ₫, 77 between 1 000 000 and 15 000 000 ₫.","on_invalid":"ignore","example":15000000,"minimum":1},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average customer rating is at least this many stars, 1-5. This also drops unrated products. Measured on `iphone`: 3 399 unfiltered, 993 at 1+, 929 at 3+, 842 at 4+, 705 at 5. Tiki clamps 6 to 5 and ignores a non-number, so both are rejected here instead.","on_invalid":"reject","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"category_id","type":"string","required":false,"description":"Narrow to one category. Accepts the numeric id (1789 = Phones & Tablets) or a tiki.vn category URL (`/dien-thoai-may-tinh-bang/c1789`). Ids come from `categories`, from a product's `category_path`, or from the `category` facet. Measured: `iphone` 3 399 matches, 3 inside category 1789.","on_invalid":"ignore","example":"1789","aliases":["category","cid"]},{"name":"seller_id","type":"string","required":false,"description":"Narrow to one merchant. Seller ids come from any product row's `seller_id` or from the `seller` facet. Measured: `iphone` 3 399 unfiltered, 4 from seller 1 (Tiki Trading).","on_invalid":"ignore","example":"1","aliases":["seller"]}],"returns":"products[] (same shape as search), count, total_results, total_results_text, page, per_page, last_page, price_band_vnd, page_reordered, brand{brand_id, name, url, logo, description}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"brand_id":"18802"}},{"name":"seller","description":"One merchant's whole Tiki shelf plus the merchant's own profile: its rating out of 5, how many reviews that rating is built on, follower count, how many days it has been on Tiki, whether it is an official store and at what store level. Measured: seller 1 (Tiki Trading) 4.68 from 5 604 463 reviews, 515 120 followers, 3 368 days on the platform; seller 29952 (Hồng Hạnh Mobile) 4.73 from 2 878 reviews. Costs two upstream requests: the shelf, then the profile.","required_params":["seller_id"],"optional_params":["page","query","sort","price_min","price_max","min_rating","category_id","brand_id"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Numeric Tiki seller id, from any product row's `seller_id` or from the `seller` facet on `category`.","on_invalid":"reject","example":"1","aliases":["seller","id"]},{"name":"query","type":"string","required":false,"description":"Optional keyword applied inside the merchant's shelf.","on_invalid":"ignore","example":"iphone","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Result order. Tiki's own default is `default` (its popularity ranking). 🔴 A price sort selects a global price band per page — measured on `sách`: page 1 spans 9 500-14 000 ₫, page 2 14 000-25 000 ₫, page 10 40 000-41 000 ₫ — but the source hands the 40 rows back newest-listing-first inside that band, so this API re-orders the page by price and sets `page_reordered`. Tiki silently IGNORES an order it does not know, so anything outside this list is rejected here rather than quietly dropped.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Tiki's own popularity ranking (default)"},{"value":"top_seller","label":"Best selling first"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price, cheapest first"},{"value":"price_desc","label":"Price, dearest first"}],"example":"price_asc"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in Vietnamese dong (whole dong — Tiki publishes no minor unit). Sent to the source as one band with `price_max`.","on_invalid":"ignore","example":1000000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest price in dong. Measured on the query `iphone`: 3 399 matches unfiltered, 124 under 50 000 ₫, 77 between 1 000 000 and 15 000 000 ₫.","on_invalid":"ignore","example":15000000,"minimum":1},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose average customer rating is at least this many stars, 1-5. This also drops unrated products. Measured on `iphone`: 3 399 unfiltered, 993 at 1+, 929 at 3+, 842 at 4+, 705 at 5. Tiki clamps 6 to 5 and ignores a non-number, so both are rejected here instead.","on_invalid":"reject","example":4,"minimum":1,"maximum":5,"aliases":["rating"]},{"name":"category_id","type":"string","required":false,"description":"Narrow to one category. Accepts the numeric id (1789 = Phones & Tablets) or a tiki.vn category URL (`/dien-thoai-may-tinh-bang/c1789`). Ids come from `categories`, from a product's `category_path`, or from the `category` facet. Measured: `iphone` 3 399 matches, 3 inside category 1789.","on_invalid":"ignore","example":"1789","aliases":["category","cid"]},{"name":"brand_id","type":"string","required":false,"description":"Narrow to one brand id. Ids come from the `brand` facet on `category` or from any product's `brand_id`. Measured: `iphone` 3 399 unfiltered, 3 for brand 17827 (Apple).","on_invalid":"ignore","example":"17827","aliases":["brand"]}],"returns":"products[] (same shape as search), count, total_results, total_results_text, page, per_page, last_page, price_band_vnd, page_reordered, seller{seller_id, name, url, logo, store_id, rating, review_count, follower_count, days_since_joined, is_official_store, store_level}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"1"}},{"name":"product","description":"The full Tiki product record: the price actually charged in dong, Tiki's strikethrough price and the real discount, rating and how many people rated it, units sold all-time, live availability, every gallery image, the description as clean text, the spec table row by row, warranty and return terms, how many colour/size variants exist, the SELLER behind the offer (id, name, store URL, logo) and every RIVAL offer on the same product with its own price. 🔴 Pass `seller_product_id` whenever you have one: without it Tiki serves whichever offer its buybox picks, which on a multi-seller product is a different merchant at a different price — measured 104 250 ₫ vs 73 000 ₫ on the same book, HTTP 200 both times. When no spid is given the record says `offer_is_buybox: true`. Availability comes from Tiki's own status string, never from `stock_item.qty`, which is a hardcoded 1000 on every product measured and is returned here under its real meaning, `max_order_qty`.","required_params":["product_id"],"optional_params":["seller_product_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product to read. Accepts the numeric id (278628812) or a full tiki.vn product URL — and if the URL carries `?spid=`, that offer is used automatically. Every listing row here carries both `url` and `seller_product_id`.","on_invalid":"reject","example":"278628812","aliases":["id","url","product"]},{"name":"seller_product_id","type":"string","required":false,"description":"Which SELLER's offer to read for this product. 🔴 Pass it whenever you have it. A Tiki product id can carry several sellers' offers, and without a spid Tiki returns whichever one its buybox picks — measured on 30 products, 2 came back with a different seller AND a different price, the worst 104 250 ₫ vs 73 000 ₫ on the same book, with HTTP 200 and no signal. Every product row and every URL from this API carries the right value; when it is omitted the record returns `offer_is_buybox: true`.","on_invalid":"ignore","example":"278630772","aliases":["spid"]}],"returns":"product{product_id, seller_product_id, url, name, price_vnd, original_price_vnd, discount_vnd, discount_percent, discount_percent_computed, currency, rating, review_count, quantity_sold, all_time_quantity_sold, favourite_count, listed_days_ago, in_stock, inventory_status, inventory_type, max_order_qty, min_order_qty, preorder_date, sku, seller_sku, brand_id, brand_name, brand_slug, seller{seller_id, name, url, logo, store_id, seller_product_id, sku, price_vnd}, other_sellers[], other_seller_count, offer_is_buybox, images[], image, description, short_description, specifications[]{group, code, name, value}, variant_count, variant_options[], warranty[], return_policy[], origin, is_authentic, category_id, category_name, breadcrumbs[], product_type, authors[] (books only)}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"32951822"}},{"name":"product/variants","description":"Every colour, size or pack of one product with ITS OWN price, strikethrough price, discount, SKU, availability and images. A Tiki t-shirt is one product id and a dozen colour/size combinations, each separately priced and separately in or out of stock, and each carrying the `seller_product_id` that `product` needs to read it. Products Tiki sells in a single form return an empty `variants` and `count: 0` — that is the source publishing none, not an error (measured: 6 of 12 products have variants). Tiki publishes no per-variant stock NUMBER, only an availability status, so that is what this returns.","required_params":["product_id"],"optional_params":["seller_product_id"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product to read. Accepts the numeric id (278628812) or a full tiki.vn product URL — and if the URL carries `?spid=`, that offer is used automatically. Every listing row here carries both `url` and `seller_product_id`.","on_invalid":"reject","example":"278628812","aliases":["id","url","product"]},{"name":"seller_product_id","type":"string","required":false,"description":"Which SELLER's offer to read for this product. 🔴 Pass it whenever you have it. A Tiki product id can carry several sellers' offers, and without a spid Tiki returns whichever one its buybox picks — measured on 30 products, 2 came back with a different seller AND a different price, the worst 104 250 ₫ vs 73 000 ₫ on the same book, with HTTP 200 and no signal. Every product row and every URL from this API carries the right value; when it is omitted the record returns `offer_is_buybox: true`.","on_invalid":"ignore","example":"278630772","aliases":["spid"]}],"returns":"variants[]{variant_id, seller_product_id, name, options[]{name, value}, price_vnd, original_price_vnd, discount_percent, discount_percent_computed, currency, sku, in_stock, inventory_status, image, images[], is_selected}, count, in_stock_count, options[]{code, name}, product_id, product_type","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"278790552"}},{"name":"product/reviews","description":"The customer reviews Tiki publishes for a product: star rating, title, the full text, the reviewer's display name, whether they are a verified buyer, the date, how many shoppers found it helpful, the delivery rating and the photos they posted — plus the real 1-5 star histogram behind the average. Unlike many marketplaces this one pages deep: measured 7 046 reviews over 353 pages on one book. Filter by star with `stars` and the counts move for real (7 046 unfiltered → 6 048 at 5 stars, 726 at 4, 135 at 3, 63 at 2, 74 at 1). 🔴 Tiki publishes three different review counts that are not the same quantity: the product record says 6 153, this stream says 7 046, and its own histogram sums to 7 029. All three are returned under separate names rather than reconciled.","required_params":["product_id"],"optional_params":["seller_product_id","page","stars","sort"],"params":[{"name":"product_id","type":"string","required":true,"description":"The product to read. Accepts the numeric id (278628812) or a full tiki.vn product URL — and if the URL carries `?spid=`, that offer is used automatically. Every listing row here carries both `url` and `seller_product_id`.","on_invalid":"reject","example":"278628812","aliases":["id","url","product"]},{"name":"seller_product_id","type":"string","required":false,"description":"Which SELLER's offer to read for this product. 🔴 Pass it whenever you have it. A Tiki product id can carry several sellers' offers, and without a spid Tiki returns whichever one its buybox picks — measured on 30 products, 2 came back with a different seller AND a different price, the worst 104 250 ₫ vs 73 000 ₫ on the same book, with HTTP 200 and no signal. Every product row and every URL from this API carries the right value; when it is omitted the record returns `offer_is_buybox: true`.","on_invalid":"ignore","example":"278630772","aliases":["spid"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Tiki serves 40 products a page and clamps every larger `limit` back to 40, so this is the only way to go deeper. It stops at page 50: page 51 answers HTTP 200 with zero rows, which is a ceiling of 2000 products per query however many `total_results` reports.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"stars","type":"integer","required":false,"description":"Only reviews with exactly this many stars, 1-5. Measured on one book: 7 046 reviews unfiltered, 74 at 1 star, 63 at 2, 135 at 3, 726 at 4, 6 048 at 5. 🔴 Upstream this rides the SAME slot as `sort`, so setting `stars` overrides `sort`; the response reports which was applied in `sort_applied`. Every other star filter Tiki appears to accept (`rating=`, `filter=`, `type=has_image`) is silently ignored and is therefore not offered here.","on_invalid":"reject","example":1,"minimum":1,"maximum":5},{"name":"sort","type":"enum","required":false,"description":"Review order. `helpful` is Tiki's own default.","on_invalid":"reject","allowed_values":[{"value":"helpful","label":"Most helpful first (default)"},{"value":"newest","label":"Newest first"}],"example":"newest"}],"returns":"reviews[]{review_id, rating, title, text, author, verified_purchase, created_at, helpful_count, comment_count, delivery_rating, seller_product_id, images[], attributes[]}, count, reviews_available, reviews_count_reported, rating, rating_histogram[]{stars, count, percent}, histogram_total, page, per_page, last_page, product_id, sort_applied","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"32951822"}},{"name":"suggest","description":"Tiki's own autocomplete for a partial query: the search terms it would offer and the official stores it maps the term to, with their ids. The cheapest way to find the Vietnamese wording Tiki actually indexes before spending a search on a guess — and the only place a store name turns into a store id. Sponsored entries are returned flagged, not silently mixed in.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"A partial or full query in Vietnamese, e.g. `nồi chi` for `nồi chiên không dầu`.","on_invalid":"reject","example":"nồi chi","aliases":["q","keyword","term"]}],"returns":"suggestions[]{text, type, url, store_id, seller_id, subtitle, sponsored}, count, sponsored_count, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nồi chi"}},{"name":"categories","description":"Tiki's category tree, one level at a time, each category with its id, name, URL, depth, whether it is a leaf and HOW MANY PRODUCTS it holds. Call it with no parameters for the top-level departments; pass `parent_id` to walk down. These are the ids `category` and the `category_id` filter take. Measured: category 1789 has 5 children, and their published product counts are 75, 17, 12, 3 and 1.","required_params":[],"optional_params":["parent_id","query"],"params":[{"name":"parent_id","type":"string","required":false,"description":"The category whose children to list, as an id or a tiki.vn category URL. Omit for the top-level departments — Tiki refuses `parent_id=0` with HTTP 400, so the root comes from its own menu instead.","on_invalid":"ignore","example":"1789","aliases":["category_id","category","parent"]},{"name":"query","type":"string","required":false,"description":"Only categories whose name contains this text, case-insensitive and diacritics as typed.","on_invalid":"ignore","example":"điện thoại","aliases":["q","name"]}],"returns":"categories[]{category_id, parent_id, name, url, url_key, level, is_leaf, product_count, image}, count, parent_id","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"parent_id":"1789"}}]},{"name":"tiktok","category":{"id":"social","title":"Social Media"},"title":"TikTok API — public tiktok.com data without login: user profiles and their videos, reposts followers, playlists, stories and LIVE status; video details with full stats and paid-partnership / promotional / shop disclosure; comments and replies; search for videos, photo posts and users; hashtag and sound pages with their video feeds; trending, For-You and related-video feeds. Every field TikTok sends is returned.","version":"2.2.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/tiktok/v1","spec_available":true,"actions":[{"name":"user_profile","description":"A TikTok account's public profile: nickname, bio and bio link, verified/private flags, region, avatar, follower / following / like / video counts, its sec_uid (used by the list actions), whether it has an active story and the LIVE room id the profile page shows while it broadcasts (use user_live for real-time LIVE status). Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":false,"description":"TikTok username with or without @, or a profile URL (https://www.tiktok.com/@mrbeast).","on_invalid":"reject","example":"mrbeast","aliases":["user","handle","unique_id","url","profile_url"]}],"returns":"{id, username, nickname, sec_uid, verified, avatar, url, bio, bio_link, private, region, language, created_at, is_business, category, is_live, live_room_id, has_story, stats{follower_count, following_count, like_count, video_count, friend_count}, + every field TikTok sent, response_extra}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"tiktok"}},{"name":"user_videos","description":"The videos an account posted, newest first (pinned videos flagged), with full stats, music and hashtags. Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":[],"optional_params":["username","sec_uid","cursor","count"],"params":[{"name":"username","type":"string","required":false,"description":"TikTok username with or without @, or a profile URL (https://www.tiktok.com/@mrbeast).","on_invalid":"reject","example":"mrbeast","aliases":["user","handle","unique_id","url","profile_url"]},{"name":"sec_uid","type":"string","required":false,"description":"The account's sec_uid (returned by user_profile). Saves one lookup; either this or username is required.","on_invalid":"reject","example":"MS4wLjABAAAABKjQkOz_IIzXXzEAl_9LGsWhvK-gBnlczwRPXK8EmxAp6K3X0qiaP5_OEqmm0XwG","aliases":["secUid","sec_user_id"]},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor: 0 for the newest page, then the `cursor` returned by the previous page. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many videos to ask TikTok for per page, 1-35 (default 30). TikTok may return a few less than asked.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":35,"aliases":["limit","max_results"]}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, cursor, has_more, private_account (true = private: TikTok returns no videos)","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"tiktok","count":10}},{"name":"user_reposts","description":"Videos an account reposted (public reposts tab), with full stats. Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":[],"optional_params":["username","sec_uid","cursor","count"],"params":[{"name":"username","type":"string","required":false,"description":"TikTok username with or without @, or a profile URL (https://www.tiktok.com/@mrbeast).","on_invalid":"reject","example":"mrbeast","aliases":["user","handle","unique_id","url","profile_url"]},{"name":"sec_uid","type":"string","required":false,"description":"The account's sec_uid (returned by user_profile). Saves one lookup; either this or username is required.","on_invalid":"reject","example":"MS4wLjABAAAABKjQkOz_IIzXXzEAl_9LGsWhvK-gBnlczwRPXK8EmxAp6K3X0qiaP5_OEqmm0XwG","aliases":["secUid","sec_user_id"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many videos to ask TikTok for per page, 1-35 (default 30). TikTok may return a few less than asked.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":35,"aliases":["limit","max_results"]}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, cursor, has_more","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"mrbeast"}},{"name":"user_followers","description":"Accounts that follow a user (public follower list), newest followers first, each with bio and counts. Paginate with the returned cursor. (The FOLLOWING list is login-only on TikTok.) Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":[],"optional_params":["username","sec_uid","cursor","count"],"params":[{"name":"username","type":"string","required":false,"description":"TikTok username with or without @, or a profile URL (https://www.tiktok.com/@mrbeast).","on_invalid":"reject","example":"mrbeast","aliases":["user","handle","unique_id","url","profile_url"]},{"name":"sec_uid","type":"string","required":false,"description":"The account's sec_uid (returned by user_profile). Saves one lookup; either this or username is required.","on_invalid":"reject","example":"MS4wLjABAAAABKjQkOz_IIzXXzEAl_9LGsWhvK-gBnlczwRPXK8EmxAp6K3X0qiaP5_OEqmm0XwG","aliases":["secUid","sec_user_id"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many followers to ask TikTok for per page, 1-30 (default 30). TikTok may return a few less than asked.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":30,"aliases":["limit","max_results"]}],"returns":"followers[]{id, username, nickname, sec_uid, verified, avatar, url, bio, follower_count, following_count, like_count, video_count}, total, cursor, has_more","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"mrbeast"}},{"name":"video_detail","description":"One video or photo post: caption, author, sound, hashtags, mentions, location, duration, cover, play and download URLs, and play / like / comment / share / save / repost counts. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["video_id"],"optional_params":[],"params":[{"name":"video_id","type":"string","required":true,"description":"19-digit TikTok video id, or a video URL (https://www.tiktok.com/@user/video/<id>).","on_invalid":"reject","example":"7106594312292453675","aliases":["aweme_id","id","item_id","url","video_url"]}],"returns":"video{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"video_id":"7106594312292453675"}},{"name":"comments","description":"Top-level comments on a video with text, likes, reply count, author and whether the creator liked or pinned it. Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["video_id"],"optional_params":["cursor","count"],"params":[{"name":"video_id","type":"string","required":true,"description":"19-digit TikTok video id, or a video URL (https://www.tiktok.com/@user/video/<id>).","on_invalid":"reject","example":"7106594312292453675","aliases":["aweme_id","id","item_id","url","video_url"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many comments to ask TikTok for per page, 1-50 (default 20). TikTok may return a few less than asked.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit","max_results"]}],"returns":"comments[]{id, text, created_at, like_count, reply_count, language, liked_by_author, pinned_by_author, video_id, author{...}}, total, cursor, has_more","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"video_id":"7106594312292453675"}},{"name":"comment_replies","description":"Replies under one comment (the comment id comes from `comments`). Paginate with the cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["video_id","comment_id"],"optional_params":["cursor","count"],"params":[{"name":"video_id","type":"string","required":true,"description":"19-digit TikTok video id, or a video URL (https://www.tiktok.com/@user/video/<id>).","on_invalid":"reject","example":"7106594312292453675","aliases":["aweme_id","id","item_id","url","video_url"]},{"name":"comment_id","type":"string","required":true,"description":"The comment id from the comments action.","on_invalid":"reject","example":"7115421954489156357","aliases":["cid"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many replies to ask TikTok for per page, 1-50 (default 20). TikTok may return a few less than asked.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["limit","max_results"]}],"returns":"replies[]{id, text, created_at, like_count, language, reply_to_comment_id, author{...}}, total, cursor, has_more","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"video_id":"7106594312292453675","comment_id":"7115421954489156357"}},{"name":"search_videos","description":"Videos matching a keyword, as TikTok's logged-out search ranks them: the 'Top' tab's video results (default) or the 'Videos' tab (tab=videos). Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["keyword"],"optional_params":["cursor","search_id","region","tab"],"params":[{"name":"keyword","type":"string","required":true,"description":"What to search for.","on_invalid":"reject","example":"pizza recipe","aliases":["q","query","search"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"search_id","type":"string","required":false,"description":"Optional for page 2+: the search_id returned by the FIRST page (the returned cursor already remembers it; pass this only if you build cursors yourself).","on_invalid":"ignore","example":""},{"name":"region","type":"enum","required":false,"description":"Which country TikTok searches from. TikTok requires a login to search from the US, so search runs from Europe by default; 'gb' gives English-market results, 'tr' Turkish-market results. The response's `region` says which one served.","on_invalid":"ignore","allowed_values":[{"value":"de","label":"Europe/Germany exit (default) — results mix local and English videos"},{"value":"gb","label":"United Kingdom exit — English-market results"},{"value":"tr","label":"Turkey exit — Turkish-market results (about 8 in 10 videos in Turkish)"}],"default":"de","example":"de"},{"name":"tab","type":"enum","required":false,"description":"Which logged-out search tab to read.","on_invalid":"ignore","allowed_values":[{"value":"top","label":"the Top tab's video results (default)"},{"value":"videos","label":"the Videos tab: 12 videos per page, its own ranking"}],"default":"top","example":"top"}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, cursor, has_more, search_id, region, tab, search_restricted (true = TikTok restricts this term for everyone: empty list + message)","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"keyword":"pizza recipe"}},{"name":"search_users","description":"Accounts matching a keyword, with follower counts and bios. Paginate with cursor + search_id. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["keyword"],"optional_params":["cursor","search_id","region"],"params":[{"name":"keyword","type":"string","required":true,"description":"What to search for.","on_invalid":"reject","example":"pizza recipe","aliases":["q","query","search"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"search_id","type":"string","required":false,"description":"Optional for page 2+: the search_id returned by the FIRST page (the returned cursor already remembers it; pass this only if you build cursors yourself).","on_invalid":"ignore","example":""},{"name":"region","type":"enum","required":false,"description":"Which country TikTok searches from. TikTok requires a login to search from the US, so search runs from Europe by default; 'gb' gives English-market results, 'tr' Turkish-market results. The response's `region` says which one served.","on_invalid":"ignore","allowed_values":[{"value":"de","label":"Europe/Germany exit (default) — results mix local and English videos"},{"value":"gb","label":"United Kingdom exit — English-market results"},{"value":"tr","label":"Turkey exit — Turkish-market results (about 8 in 10 videos in Turkish)"}],"default":"de","example":"de"}],"returns":"users[]{id, username, nickname, sec_uid, verified, avatar, url, bio, follower_count, following_count, like_count, video_count}, cursor, has_more, search_id, region, search_restricted","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"keyword":"pizza recipe"}},{"name":"hashtag_info","description":"A hashtag's page data: id, description, cover, total views and video count. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["hashtag"],"optional_params":[],"params":[{"name":"hashtag","type":"string","required":false,"description":"Hashtag name with or without #, or a tag URL (https://www.tiktok.com/tag/pizza).","on_invalid":"reject","example":"pizza","aliases":["tag","challenge","name","url"]}],"returns":"{id, name, description, cover, url, video_count, view_count}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"hashtag":"pizza"}},{"name":"hashtag_videos","description":"Videos under a hashtag, as the hashtag page lists them. Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":[],"optional_params":["hashtag","hashtag_id","cursor","count"],"params":[{"name":"hashtag","type":"string","required":false,"description":"Hashtag name with or without #, or a tag URL (https://www.tiktok.com/tag/pizza).","on_invalid":"reject","example":"pizza","aliases":["tag","challenge","name","url"]},{"name":"hashtag_id","type":"string","required":false,"description":"The hashtag id (from hashtag_info); saves one lookup.","on_invalid":"reject","example":"7090","aliases":["challenge_id"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many videos to ask TikTok for per page, 1-35 (default 30). TikTok may return a few less than asked.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":35,"aliases":["limit","max_results"]}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, hashtag{id, name}, cursor, has_more","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"hashtag":"pizza","count":10}},{"name":"music_info","description":"A sound's page data: title, artist, album, duration, original-sound flag, audio URL, cover and how many videos use it. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["music_id"],"optional_params":[],"params":[{"name":"music_id","type":"string","required":true,"description":"TikTok sound id, or a sound URL (https://www.tiktok.com/music/<name>-<id>).","on_invalid":"reject","example":"7016547803243022337","aliases":["sound_id","id","url","music_url"]}],"returns":"{id, title, author, album, duration_s, original, play_url, cover, url, video_count, author_profile{...}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"music_id":"7016547803243022337"}},{"name":"music_videos","description":"Videos that use a sound. Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["music_id"],"optional_params":["cursor","count"],"params":[{"name":"music_id","type":"string","required":true,"description":"TikTok sound id, or a sound URL (https://www.tiktok.com/music/<name>-<id>).","on_invalid":"reject","example":"7016547803243022337","aliases":["sound_id","id","url","music_url"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many videos to ask TikTok for per page, 1-35 (default 30). TikTok may return a few less than asked.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":35,"aliases":["limit","max_results"]}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, cursor, has_more","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"music_id":"7016547803243022337"}},{"name":"trending","description":"TikTok's Explore page: currently trending videos with full stats. Each call returns a fresh set. region=tr reads Turkey's Explore page. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":[],"optional_params":["count","region"],"params":[{"name":"count","type":"integer","required":false,"description":"How many videos to ask TikTok for per page, 1-30 (default 16). TikTok may return a few less than asked.","on_invalid":"ignore","default":16,"example":16,"minimum":1,"maximum":30,"aliases":["limit","max_results"]},{"name":"region","type":"enum","required":false,"description":"Which market's Explore page to read. 'tr' = Turkey. The response's `region` says which one served.","on_invalid":"ignore","allowed_values":[{"value":"us","label":"the default Explore page"},{"value":"tr","label":"Turkey's Explore page (about 7 in 10 videos in Turkish)"}],"default":"us","example":"us"}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, region","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"count":16}},{"name":"feed","description":"The logged-out For-You feed: a fresh page of recommended videos with full stats on every call. region=tr asks for the Turkish-language feed. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":[],"optional_params":["count","region"],"params":[{"name":"count","type":"integer","required":false,"description":"How many videos to ask TikTok for per page, 1-30 (default 16). TikTok may return a few less than asked.","on_invalid":"ignore","default":16,"example":16,"minimum":1,"maximum":30,"aliases":["limit","max_results"]},{"name":"region","type":"enum","required":false,"description":"Which market's For-You feed to read. 'tr' = Turkey. The response's `region` says which one served.","on_invalid":"ignore","allowed_values":[{"value":"us","label":"the default For-You feed"},{"value":"tr","label":"the For-You feed of a Turkish visitor (about 1 in 2 videos in Turkish)"}],"default":"us","example":"us"}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, region","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"count":16}},{"name":"search_photos","description":"Photo (slideshow) posts matching a keyword, from TikTok's logged-out Photo search tab, with image URLs and full stats. Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["keyword"],"optional_params":["cursor","search_id","region"],"params":[{"name":"keyword","type":"string","required":true,"description":"What to search for.","on_invalid":"reject","example":"pizza recipe","aliases":["q","query","search"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"search_id","type":"string","required":false,"description":"Optional for page 2+: the search_id returned by the FIRST page (the returned cursor already remembers it; pass this only if you build cursors yourself).","on_invalid":"ignore","example":""},{"name":"region","type":"enum","required":false,"description":"Which country TikTok searches from. TikTok requires a login to search from the US, so search runs from Europe by default; 'gb' gives English-market results, 'tr' Turkish-market results. The response's `region` says which one served.","on_invalid":"ignore","allowed_values":[{"value":"de","label":"Europe/Germany exit (default) — results mix local and English videos"},{"value":"gb","label":"United Kingdom exit — English-market results"},{"value":"tr","label":"Turkey exit — Turkish-market results (about 8 in 10 videos in Turkish)"}],"default":"de","example":"de"}],"returns":"posts[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, cursor, has_more, search_id, region, search_restricted","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"keyword":"pizza recipe"}},{"name":"user_playlists","description":"A creator's public playlists (TikTok 'mixes'): name, video count, cover. Feed an id to playlist_videos. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":[],"optional_params":["username","sec_uid","cursor","count"],"params":[{"name":"username","type":"string","required":false,"description":"TikTok username with or without @, or a profile URL (https://www.tiktok.com/@mrbeast).","on_invalid":"reject","example":"mrbeast","aliases":["user","handle","unique_id","url","profile_url"]},{"name":"sec_uid","type":"string","required":false,"description":"The account's sec_uid (returned by user_profile). Saves one lookup; either this or username is required.","on_invalid":"reject","example":"MS4wLjABAAAABKjQkOz_IIzXXzEAl_9LGsWhvK-gBnlczwRPXK8EmxAp6K3X0qiaP5_OEqmm0XwG","aliases":["secUid","sec_user_id"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many playlists to ask TikTok for per page, 1-20 (default 20). TikTok may return a few less than asked.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":20,"aliases":["limit","max_results"]}],"returns":"playlists[]{id, name, video_count, cover, creator{...}}, cursor, has_more","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"mrbeast"}},{"name":"playlist_videos","description":"The videos in one public playlist, in playlist order. Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["playlist_id"],"optional_params":["cursor","count"],"params":[{"name":"playlist_id","type":"string","required":true,"description":"Playlist id from user_playlists, or a playlist URL.","on_invalid":"reject","example":"7596415294902389534","aliases":["mix_id","id","url"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]},{"name":"count","type":"integer","required":false,"description":"How many videos to ask TikTok for per page, 1-35 (default 30). TikTok may return a few less than asked.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":35,"aliases":["limit","max_results"]}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, cursor, has_more","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"playlist_id":"7596415294902389534"}},{"name":"user_stories","description":"An account's active stories (TikTok keeps them 24 hours), newest first, each as a full video or photo record with stats. An account with no story returns an empty list; user_profile's has_story says whether one is up. Paginate with the returned cursor. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":[],"optional_params":["username","user_id","cursor"],"params":[{"name":"username","type":"string","required":false,"description":"TikTok username with or without @, or a profile URL (https://www.tiktok.com/@mrbeast).","on_invalid":"reject","example":"mrbeast","aliases":["user","handle","unique_id","url","profile_url"]},{"name":"user_id","type":"string","required":false,"description":"The account's numeric id (user_profile `id`); saves one lookup.","on_invalid":"reject","example":"21609287","aliases":["author_id"]},{"name":"cursor","type":"string","required":false,"description":"0 for the first page, then the returned `cursor`. Pass it back exactly as returned: it also lets us drop items TikTok repeats between pages, so a page may hold slightly fewer than `count`.","on_invalid":"ignore","default":"0","example":"0","aliases":["offset","max_cursor","page_token"]}],"returns":"stories[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}, total, cursor, has_more, response_extra","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"mrbeast"}},{"name":"user_live","description":"Whether an account is broadcasting LIVE right now, and its current (or last) LIVE room: title, viewer count, total entries, start time, cover and stream URLs. No signature needed - TikTok's own logged-out LIVE page data. Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":false,"description":"TikTok username with or without @, or a profile URL (https://www.tiktok.com/@mrbeast).","on_invalid":"reject","example":"mrbeast","aliases":["user","handle","unique_id","url","profile_url"]}],"returns":"{is_live, status(2 live / 4 ended / null never), room_id, title, viewer_count, enter_count, started_at, cover, user{...}, live_room{every field TikTok sent}, stats, response_extra}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"username":"mrbeast"}},{"name":"related_videos","description":"Videos TikTok recommends next to a given video ('You may like'). Every record also carries every field TikTok sent, unmodified, next to the named fields; envelope fields of TikTok's answer are in response_extra.","required_params":["video_id"],"optional_params":["count"],"params":[{"name":"video_id","type":"string","required":true,"description":"19-digit TikTok video id, or a video URL (https://www.tiktok.com/@user/video/<id>).","on_invalid":"reject","example":"7106594312292453675","aliases":["aweme_id","id","item_id","url","video_url"]},{"name":"count","type":"integer","required":false,"description":"How many videos to ask TikTok for per page, 1-30 (default 16). TikTok may return a few less than asked.","on_invalid":"ignore","default":16,"example":16,"minimum":1,"maximum":30,"aliases":["limit","max_results"]}],"returns":"videos[]{id, description, created_at, url, type(video|photo), duration_s, width, height, cover, play_url, download_url, images[], language, location, is_ad, is_pinned, hashtags[], mentions[], author{id, username, nickname, sec_uid, verified, avatar, url}, music{id, title, author, album, duration_s, original, play_url, cover, url}, stats{play_count, like_count, comment_count, share_count, save_count, repost_count}, paid_partnership, promotional_content, partner_brand, is_shop_video, has_product_anchor, disclosure_label, disclosure_tags[], disclosure_denials[], is_sponsored_any, + every field TikTok sent (unmodified)}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"video_id":"7106594312292453675"}}]},{"name":"tiktok-creative-center","category":{"id":"social","title":"Social Media"},"title":"TikTok Creative Center API — TikTok ad-spy & creative intelligence: top-performing Top Ads by region/industry/objective, full ad detail (CTR, spend, likes, shares, comments, landing page, video renditions), keyword ad search, the live filter taxonomy (81 countries / 258 industries / objectives / languages) and official creative trend reports — the PiPiADS / Minea / AdSpy data as a raw JSON API","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/tiktok-creative-center/v1","spec_available":true,"actions":[{"name":"top_ads","description":"Top-performing TikTok ads for a market, filterable by region, period, industry, objective and ad language, ranked by recommendation / CTR / likes / spend. The core ad-spy feed — the same Top Ads intelligence PiPiADS / Minea / AdSpy sell as SaaS — with each ad's metrics and full video renditions.","required_params":[],"optional_params":["region","period","order_by","industry","objective","ad_language","limit","page"],"params":[{"name":"region","type":"string","required":false,"description":"Two-letter ISO country code to scope the ads to a market. Common: US, GB, DE, FR, ES, IT, JP, KR, BR, MX, ID, TH, VN, TR, SA, AE, IN, CA, AU. Default US. Call the `locations` action for the full 73-market list (each {code, name}); unsupported codes fall back to US.","on_invalid":"ignore","default":"US","example":"US","aliases":["country","country_code"]},{"name":"period","type":"enum","required":false,"description":"Trailing window the ad metrics are measured over, in days. Only 7, 30 or 180 are accepted by TikTok (any other value falls back to 30). Shorter = fresher/breakout ads, longer = established performers.","on_invalid":"ignore","allowed_values":[{"value":"7","label":"Last 7 days"},{"value":"30","label":"Last 30 days"},{"value":"180","label":"Last 180 days"}],"default":"30","example":"30"},{"name":"order_by","type":"enum","required":false,"description":"How the returned ads are ranked: 'for_you' = TikTok's recommended mix, or sort by 'ctr' (click-through rate), 'like' (most liked) or 'cost' (highest spend). Each call returns one ranked page of up to 20.","on_invalid":"ignore","allowed_values":[{"value":"for_you","label":"Recommended mix"},{"value":"ctr","label":"Highest click-through rate"},{"value":"like","label":"Most liked"},{"value":"cost","label":"Highest spend"}],"default":"for_you","example":"ctr","aliases":["sort_by","sort"]},{"name":"industry","type":"string","required":false,"description":"Numeric industry id to filter ads by — one of the 21 top-level verticals listed in allowed_values (e.g. 25000000000 = Games, 14000000000 = Beauty & Personal Care, 22000000000 = Apparel & Accessories). Sub-category ids are also accepted; browse the full 258-entry taxonomy (with parent_id hierarchy) via the `ad_filters` action.","on_invalid":"ignore","allowed_values":[{"value":"10000000000","label":"Education"},{"value":"11000000000","label":"Vehicle & Transportation"},{"value":"12000000000","label":"Baby, Kids & Maternity"},{"value":"13000000000","label":"Financial Services"},{"value":"14000000000","label":"Beauty & Personal Care"},{"value":"15000000000","label":"Tech & Electronics"},{"value":"16000000000","label":"Appliances"},{"value":"17000000000","label":"Travel"},{"value":"18000000000","label":"Household Products"},{"value":"19000000000","label":"Pets"},{"value":"20000000000","label":"Apps"},{"value":"21000000000","label":"Home Improvement"},{"value":"22000000000","label":"Apparel & Accessories"},{"value":"23000000000","label":"News & Entertainment"},{"value":"24000000000","label":"Business Services"},{"value":"25000000000","label":"Games"},{"value":"26000000000","label":"Life Services"},{"value":"27000000000","label":"Food & Beverage"},{"value":"28000000000","label":"Sports & Outdoor"},{"value":"29000000000","label":"Health"},{"value":"30000000000","label":"E-Commerce (Non-app)"}],"example":"25000000000"},{"name":"objective","type":"string","required":false,"description":"Campaign objective filter (id or name: Traffic, Conversions, App Installs, Video Views, Reach, Lead Generation, Product Sales).","on_invalid":"ignore","allowed_values":[{"value":"1","label":"Traffic"},{"value":"2","label":"App Installs"},{"value":"3","label":"Conversions"},{"value":"4","label":"Video Views"},{"value":"5","label":"Reach"},{"value":"8","label":"Lead Generation"},{"value":"15","label":"Product Sales"}],"example":"3"},{"name":"ad_language","type":"string","required":false,"description":"Ad-language filter, e.g. language_en / language_es / language_de (see ad_filters.ad_language for the 16 supported values).","on_invalid":"ignore","example":"language_en","aliases":["language"]},{"name":"limit","type":"integer","required":false,"description":"How many ads to return (1-20; TikTok hard-caps a page at 20). The response includes pagination.total_count = the full size of the ranked index for your filters.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":20},{"name":"page","type":"integer","required":false,"description":"Result page. NOTE: TikTok's Top-Ads endpoint serves a single ranked page per (region/period/filter/order_by) combination — page>1 returns empty. To see different ads, vary order_by (ctr/like/cost), period, industry or objective rather than the page number.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"ads[]{id, ad_title, brand_name, ctr, like, cost, industry_key, objective_key, is_search, video{vid, duration, cover_url, width, height, video_urls{360p,480p,540p,720p,1080p}}} + pagination{page, size, total_count, has_more}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"region":"US","period":"30"}},{"name":"ad_detail","description":"Full creative record for one ad: title, brand, CTR, spend, likes, comments, shares, landing page, matched keywords, campaign objectives, highlight text, creative source, voice-over flag and the full set of video renditions (360p-1080p).","required_params":["ad_id"],"optional_params":[],"params":[{"name":"ad_id","type":"string","required":true,"description":"Creative/material id (the `id` field of a top_ads result).","on_invalid":"reject","example":"7643811757731414036","aliases":["material_id","id"]}],"returns":"ad{id, ad_title, brand_name, ctr, like, comment, share, cost, country_code, landing_page, keyword_list[], objectives[], highlight_text, pattern_label, source, source_key, voice_over, video{vid, duration, cover_url, video_urls{360p..1080p}}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"ad_id":"7643811757731414036"}},{"name":"search_ads","description":"Keyword search across TikTok's Top-Ads index (region/period scoped), returning the same ad shape as top_ads. NOTE: TikTok's keyword index is sparse — only terms that match indexed ad metadata return matches, and many generic queries come back empty (honest empty, ok=true). For broad discovery prefer `top_ads` with industry / objective filters.","required_params":["keyword"],"optional_params":["region","period","limit","page"],"params":[{"name":"keyword","type":"string","required":true,"description":"Search term to match against the Top-Ads index.","on_invalid":"reject","example":"skincare","aliases":["query","q"]},{"name":"region","type":"string","required":false,"description":"Two-letter ISO country code to scope the ads to a market. Common: US, GB, DE, FR, ES, IT, JP, KR, BR, MX, ID, TH, VN, TR, SA, AE, IN, CA, AU. Default US. Call the `locations` action for the full 73-market list (each {code, name}); unsupported codes fall back to US.","on_invalid":"ignore","default":"US","example":"US","aliases":["country","country_code"]},{"name":"period","type":"enum","required":false,"description":"Trailing window the ad metrics are measured over, in days. Only 7, 30 or 180 are accepted by TikTok (any other value falls back to 30). Shorter = fresher/breakout ads, longer = established performers.","on_invalid":"ignore","allowed_values":[{"value":"7","label":"Last 7 days"},{"value":"30","label":"Last 30 days"},{"value":"180","label":"Last 180 days"}],"default":"30","example":"30"},{"name":"limit","type":"integer","required":false,"description":"How many ads to return (1-20; TikTok hard-caps a page at 20). The response includes pagination.total_count = the full size of the ranked index for your filters.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":20},{"name":"page","type":"integer","required":false,"description":"Result page. NOTE: TikTok's Top-Ads endpoint serves a single ranked page per (region/period/filter/order_by) combination — page>1 returns empty. To see different ads, vary order_by (ctr/like/cost), period, industry or objective rather than the page number.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"ads[]{id, ad_title, brand_name, ctr, like, cost, industry_key, objective_key, is_search, video{vid, duration, cover_url, width, height, video_urls{360p,480p,540p,720p,1080p}}} + pagination{page, size, total_count, has_more} + keyword, search_id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"keyword":"skincare"}},{"name":"ad_filters","description":"The live filter taxonomy used by top_ads: full country (81), industry (258), objective (7), ad_language (16), pattern_label and period value lists.","required_params":[],"optional_params":[],"params":[],"returns":"filters{country[], industry[], objective[], ad_language[], pattern_label[], period[]} — each entry {id, value, label}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"query_suggestions","description":"Suggested Top-Ads search terms surfaced by TikTok's Creative Center search box. Honestly returns an empty list when TikTok is serving no suggestions for the locale.","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"How many suggestions (1-50).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50}],"returns":"suggestions[] (trending query strings)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":20}},{"name":"trend_reports","description":"Creative-Center trend reports & creative-guidance articles (official TikTok marketing insight content).","required_params":[],"optional_params":["article_type","limit","page"],"params":[{"name":"article_type","type":"enum","required":false,"description":"Which Creative-Center article stream to return.","on_invalid":"ignore","allowed_values":[{"value":"trends","label":"Trend reports"},{"value":"guidance","label":"Creative guidance"},{"value":"1","label":"Creative guidance (raw id)"},{"value":"2","label":"Trend reports (raw id)"}],"default":"trends","example":"trends"},{"name":"limit","type":"integer","required":false,"description":"Articles (1-50).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"page","type":"integer","required":false,"description":"Result page. NOTE: TikTok's Top-Ads endpoint serves a single ranked page per (region/period/filter/order_by) combination — page>1 returns empty. To see different ads, vary order_by (ctr/like/cost), period, industry or objective rather than the page number.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"articles[]{article_id, title, author, tag, cover_url, publish_time, url_title, description}","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"article_type":"trends"}},{"name":"locations","description":"Supported markets for the `region` filter: ISO code + human country name (e.g. {code: 'DE', name: 'Germany'}), sorted by name.","required_params":[],"optional_params":[],"params":[],"returns":"countries[]{id, code, name} — code is the value to pass as `region`","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"tiktok-shop","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"TikTok Shop API — product detail with per-SKU price and stock, category browsing, seller profiles and catalogues, US keyword search, best-seller and deal feeds, and customer reviews across 10 markets (US, UK, Malaysia, Singapore, Thailand, Philippines, Vietnam, Indonesia, Japan, Mexico)","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/tiktok-shop/v1","spec_available":true,"actions":[{"name":"product_detail","description":"Full TikTok Shop product record in ONE call, for any of the ten markets — title, structured description, every image, EVERY SKU with its own price and its exact remaining stock as an integer, shipping weight in grams and package size in centimetres, discount and list price, shipping fee and delivery window, category path, the seller's full profile, three customer reviews and the complete star histogram. Nothing here needs a second request","required_params":["product_id"],"optional_params":["market"],"params":[{"name":"product_id","type":"string","required":true,"description":"TikTok Shop product id — the 19-digit number at the end of a product URL (shop.tiktok.com/us/pdp/product/1729450858130215273). It is a stable string, returned verbatim by every action, and it never changes type or gets re-keyed between surfaces.","on_invalid":"ignore","example":"1729450858130215273","aliases":["id","productId"]},{"name":"market","type":"enum","required":false,"description":"Which TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"th","label":"Thailand (THB)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us","aliases":["region","country"]}],"returns":"product{product_id, title, url, market, currency, price, list_price, discount_percent, is_promotional, rating, review_count, sold_count, brand, images[], description, description_images[], categories[], specifications[], skus[], total_stock, sku_count, shipping{}, seller{}}, reviews[], review_summary{}. PRICE IS NOT A CONSTANT — read is_promotional first. On a product that is not on promotion the price was identical across 8 consecutive fetches; on a PROMOTED product TikTok re-throws both the sale price and the 'was' price on every request (the discount ratio stays fixed), and the payload contains no un-promoted base price at all. So list_price and discount_percent are present when and only when is_promotional is true, and both are marketing numbers, not a price history. SKUS: skus[] carries sku_id, sku_name, properties[] (colour/size/…), available_quantity as a real integer, in_stock, per-SKU price, image, and package_weight_g / package_length_cm / package_width_cm / package_height_cm. Those package_* fields are ALWAYS grams and centimetres. TikTok also publishes weight/dimension objects with a per-product unit flag that flips between metric and imperial — this API does not return them, because a parser that trusts them reports '1 gram' for a pair of headphones. Note the package weight is the SHIPPING weight; a product weight quoted in specifications[] is a different number and the two are not merged. RATING: null when the product has no reviews yet — TikTok emits a literal 0 there, which would read as 'scored zero out of five'. review_count is 0 in that case, not null, so you can tell 'unrated' from 'unknown'. REVIEWS: exactly 3 are embedded (the site itself embeds no more), plus review_summary with total_reviews, average_rating and the full 1-5 star rating_distribution — so the histogram covers all reviews even though the text sample is three. NOT-FOUND IS CONFIRMED, NOT GUESSED: TikTok returns the same body for 'no such product' and 'this exit was refused', so a single negative is never reported as NOT_FOUND — it is re-checked against a second, independent route or exit first, and an unconfirmed negative comes back as a retryable TARGET_BLOCKED instead.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"1729450858130215273","market":"us"}},{"name":"products_by_ids","description":"Look up as many as 15 US products in a SINGLE call — the cheapest way to refresh a list of ids you already hold, at roughly a sixth of the bandwidth per product of fetching each product page. It is also the only route on TikTok Shop with an unambiguous 'not found', which makes it the right way to check whether an id is still live before spending a full product fetch on it. US catalogue only","required_params":["product_ids"],"optional_params":[],"params":[{"name":"product_ids","type":"array","required":true,"description":"Up to 15 TikTok Shop product ids. Accepts a JSON array or a comma-separated string. More than 15 ids are split into several upstream calls automatically.","on_invalid":"ignore","example":["1729450858130215273","1729397197029216665"],"aliases":["ids","product_id"]}],"returns":"products[] (the standard listing row: product_id, title, url, slug, image, brand, seller_id, seller_name, rating, review_count, sold_count, sku_count, labels[], price, list_price, currency, discount_percent, is_promotional), not_found[], requested, returned. not_found[] is TRUSTWORTHY on this action and on no other: a bogus id makes this route answer with an empty product list in 56 bytes, which no other TikTok Shop route does. An id in not_found[] is genuinely absent from the US catalogue. WHAT THIS IS NOT: a product_detail substitute. It returns the listing card, so there are NO skus[], no per-SKU stock, no package weight or dimensions, no description and no reviews. Use it to price and validate a list; use product_detail when you need the record. US market only — the route answers code 10000 on all nine other market edges and 404 on the UK edge.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"per_unit","credits":1,"per":15,"min":1},"example_params":{"product_ids":["1729450858130215273","1729397197029216665"]}},{"name":"category_tree","description":"TikTok Shop's own category taxonomy for any of the ten markets — 28 top-level departments from one call, then walk down to level 2 and level 3 by passing a category_id. Every node says whether it is a leaf, so the tree can be crawled to the bottom with no external id list and nothing hard-coded","required_params":[],"optional_params":["market","category_id","slug"],"params":[{"name":"market","type":"enum","required":false,"description":"Which TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"th","label":"Thailand (THB)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us","aliases":["region","country"]},{"name":"category_id","type":"string","required":false,"description":"Expand this category's children instead of the root. Omit for the 28 top-level departments. Ids come from this action, or from any product's categories[].","on_invalid":"ignore","example":"601152","aliases":["parent_category_id"]},{"name":"slug","type":"string","required":false,"description":"URL slug of the category, as returned in slug by this action. Optional — a placeholder is used when omitted, since TikTok routes on the numeric id.","on_invalid":"ignore","example":"womenswear-underwear","aliases":["category_slug"]}],"returns":"categories[] {category_id, name, name_en, slug, level, is_leaf, parent_category_id, image, url}, parent{}, breadcrumbs[], market, level. is_leaf true means the node has no children and is where products live — feed that category_id straight into category_products. The taxonomy is three levels deep (28 departments → ~7-10 children each → leaves) and it is the SAME id space the product action returns in categories[], so a product can be mapped onto the tree without a lookup table. name is TikTok's localised label for the market; name_en is the stable English slug-form, which is what you should key on.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"us"}},{"name":"category_products","description":"Browse a whole category and page through it — around 100 products per category, on ALL TEN markets. This is the cheapest source of product ids there is, roughly 1 KB of traffic per product, and it is what replaces keyword search outside the US. Pages are position-independent, so a page that gets throttled is retried automatically without losing your place","required_params":["category_id"],"optional_params":["market","max_results","slug"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric category id from the category_tree action or from a product's categories[]. Leaf categories give the most focused list, but any level works.","on_invalid":"ignore","example":"601262","aliases":["categoryId"]},{"name":"market","type":"enum","required":false,"description":"Which TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"th","label":"Thailand (THB)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us","aliases":["region","country"]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return, 1-200 (default 50). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":200,"aliases":["limit","max","count"]},{"name":"slug","type":"string","required":false,"description":"Category URL slug from category_tree. Optional; it only makes the referring page URL exact.","on_invalid":"ignore","example":"bras","aliases":["category_slug"]}],"returns":"results[] (standard listing rows), category_id, market, has_more, pages_fetched, requested_max. DEPTH IS THE SOURCE'S, NOT OURS. TikTok's own UI caps a category at 100 products and the measured ceiling is 82-115 depending on the category and the run — the walk ends on TikTok's own has_more:false, not on a limit of ours, so asking for 200 gets you everything that exists rather than an error. A few categories run out earlier because they genuinely hold fewer products; meta.stop_reason says which ending you got. Rows carry seller_id and seller_name, so a category page doubles as a free seller-discovery feed (20 distinct shops per page) that feeds seller_profile and seller_catalog. ALL TEN MARKETS. The US edge needs its session warmed before it will answer, which this API does for you; the other nine answer directly. Deduplication is exact — the same product never appears on two pages.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"category_id":"601262","market":"us","max_results":20}},{"name":"search","description":"Keyword search across the US TikTok Shop catalogue, paged for you up to 150 products, with price, rating, sold count and seller on every row. US ONLY — TikTok does not serve keyword search on any other market, at any URL (use category_products there, which goes deeper than search does)","required_params":["query"],"optional_params":["max_results"],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword, exactly as a shopper would type it.","on_invalid":"ignore","example":"yoga mat","aliases":["q","keyword","search_word"]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return, 1-150 (default 30). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":150,"aliases":["limit","max","count"]}],"returns":"results[] (standard listing rows), shops[] {seller_id, shop_name, shop_logo}, query, has_more, pages_fetched, requested_max. NO SORT AND NO FILTER PARAMETERS, DELIBERATELY. TikTok's search response advertises its own sort and filter descriptors, and every one of them was sent back exactly the way its own interface sends them: 'price low to high' returned an unsorted list, and 'max price $30' returned the identical thirty products with nine of them over $30. The server accepts the field, answers success and ignores it. Shipping a knob that does nothing is worse than not shipping it, so sort the results yourself. DEPTH: about 150 products per keyword is where TikTok stops (has_more goes false); some keywords stop earlier. QUALITY GUARD: TikTok intermittently answers a search with a frozen 10-item generic feed that carries a success code and looks like a result — the same ten products every time, unrelated to the query. This API detects that feed and retries on a fresh connection instead of returning it, so you never receive one. shops[] is the 'shops matching your search' rail and comes free with the page.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":1},"example_params":{"query":"yoga mat","max_results":30}},{"name":"recommended_shops","description":"Shops TikTok itself surfaces for a search term — a keyword-to-seller lookup that answers 'who sells this' rather than 'what is for sale'. Comes free alongside the US search page, so it costs one call and no extra bandwidth. US only","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search keyword to find shops for.","on_invalid":"ignore","example":"coffee grinder","aliases":["q","keyword","search_word"]}],"returns":"shops[] {seller_id, shop_name, shop_logo, verified}, query, count. seller_id feeds straight into seller_profile and seller_catalog. DEPTH IS SMALL AND HONEST: TikTok attaches between 0 and about 5 shops to a search page, and for some keywords it attaches none — an empty shops[] with ok:true means TikTok surfaced no shop rail for that term, not that the call failed. This is a rail, not a shop directory; there is no pagination behind it. US only, for the same reason as search.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"yoga mat"}},{"name":"seller_profile","description":"A TikTok Shop seller's full public profile on any of the ten markets — shop name, rating, review count, follower count, lifetime units sold, catalogue size, video count and TikTok's own service sub-scores. On the nine non-US markets there is no seller endpoint at all, so this is reached through one of the seller's products; pass a product_id and you get the seller for free","required_params":[],"optional_params":["seller_id","product_id","market"],"params":[{"name":"seller_id","type":"string","required":false,"description":"TikTok Shop seller id. Every product record carries it under seller_id, so the usual flow is search/category → product → seller_id → this action.","on_invalid":"ignore","example":"7495552880616442217","aliases":["shop_id","store_id"]},{"name":"product_id","type":"string","required":false,"description":"TikTok Shop product id — the 19-digit number at the end of a product URL (shop.tiktok.com/us/pdp/product/1729450858130215273). It is a stable string, returned verbatim by every action, and it never changes type or gets re-keyed between surfaces.","on_invalid":"ignore","example":"1729450858130215273","aliases":["id","productId"]},{"name":"market","type":"enum","required":false,"description":"Which TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"th","label":"Thailand (THB)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us","aliases":["region","country"]}],"returns":"seller{seller_id, global_seller_id, shop_name, creator_name, description, region, shop_url, shop_logo, shop_rating, best_rating, worst_rating, review_count, sold_count, global_sold_count, followers_count, video_count, on_sell_product_count, sub_scores[]}, source, market. Pass seller_id (US only — the dedicated seller endpoint exists on the US edge and returns 404 on the other nine) OR product_id (all ten markets — the profile is embedded in every product page). Give product_id and this action costs nothing beyond the product fetch you were going to make anyway; source tells you which path was used. TWO SHAPES, BOTH REAL: most shops publish 26 fields, some publish a 20-field display mode that omits followers_count, video_count, creator_name and enable_follow. Missing values are returned as null and are never substituted — in particular a null shop_rating (seen on Mexican shops that still publish a review_count) is left null rather than filled in from best_rating. sub_scores[] is TikTok's own service scorecard (ships-on-time, replies-in-time…) as {type, score_percent}. shop_url is the store link TikTok publishes itself; be aware that page currently 404s on every market, so treat it as an identifier rather than a working link.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"7495552880616442217"}},{"name":"seller_catalog","description":"Every product a seller has listed, paged to the end — verified complete against the shop's own advertised product count (12 of 12, 81 of 81, 28 of 28 on three separate markets). Nine markets: US, Malaysia, Singapore, Thailand, Philippines, Vietnam, Indonesia, Japan and Mexico. NOT the UK, where TikTok does not deploy the seller catalogue service at all","required_params":["seller_id"],"optional_params":["market","max_results"],"params":[{"name":"seller_id","type":"string","required":true,"description":"TikTok Shop seller id. Every product record carries it under seller_id, so the usual flow is search/category → product → seller_id → this action.","on_invalid":"ignore","example":"7495552880616442217","aliases":["shop_id","store_id"]},{"name":"market","type":"enum","required":false,"description":"Which TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"th","label":"Thailand (THB)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us","aliases":["region","country"]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return, 1-240 (default 60). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.","on_invalid":"ignore","default":60,"example":60,"minimum":1,"maximum":240,"aliases":["limit","max","count"]}],"returns":"results[] (standard listing rows, plus brand where the seller set one), seller_id, market, has_more, pages_fetched, requested_max. COMPLETENESS IS SELF-VERIFYING: cross-check the row count against the on_sell_product_count returned by seller_profile. Small and mid-size shops were walked to exactly that number and then has_more went false. Large shops (2,000+ listings) were still returning has_more:true at 240 products with no ceiling found, so for those, max_results is your limit rather than the source's. UK IS NOT SUPPORTED and asking for it returns a clear MARKET_UNAVAILABLE rather than an empty list — the whole service this route belongs to is missing from the UK edge. UK seller PROFILES do work; use seller_profile with a product_id. THROTTLING IS HANDLED, NOT HIDDEN: this route intermittently refuses a request and answers on retry seconds later, so pages are retried across alternate hosts automatically. On some markets a refusal and 'no such seller' are byte-identical, so a seller id that never answers comes back as a retryable error, not as an empty catalogue that would read like a real answer.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":1},"example_params":{"seller_id":"7495552880616442217"}},{"name":"related_products","description":"The products TikTok itself recommends alongside a given product — its 'you may also like' rail, about 25 full product rows. Useful for competitor sets, substitutes and building a similar-items shelf. Works on all ten markets","required_params":["product_id"],"optional_params":["market","max_results"],"params":[{"name":"product_id","type":"string","required":true,"description":"TikTok Shop product id — the 19-digit number at the end of a product URL (shop.tiktok.com/us/pdp/product/1729450858130215273). It is a stable string, returned verbatim by every action, and it never changes type or gets re-keyed between surfaces.","on_invalid":"ignore","example":"1729450858130215273","aliases":["id","productId"]},{"name":"market","type":"enum","required":false,"description":"Which TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"th","label":"Thailand (THB)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us","aliases":["region","country"]},{"name":"max_results","type":"integer","required":false,"description":"How many related products to return, 1-60 (default 25). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":60,"aliases":["limit","max","count"]}],"returns":"results[] (standard listing rows), product_id, market, source, count. These are TikTok's own recommendations for the product page, captured from the page's own recommendation component and expanded through TikTok's mobile service — not a re-sorted search and not a category slice. source names which rail answered. TikTok publishes two rails on a product page: 'you may also like' (recommendations, the one that returns data) and 'more from this shop' (the seller's other listings). The second rail's service currently returns an empty list for every request shape tried, so it is not offered as a promise here — for a seller's other products use seller_catalog, which is complete. Depth is what the rail holds, around 25; there is no deep pagination behind it.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"1729450858130215273"}},{"name":"ranking_list","description":"TikTok Shop's own best-seller board for the US — the 20 products TikTok is promoting as trending right now, in their published rank order, with full price, rating and seller rows. This is the editorial ranking the storefront shows, not a re-sorted search, which is what makes it the winning-products feed","required_params":[],"optional_params":[],"params":[],"returns":"results[] (standard listing rows, in TikTok's own rank order — index 0 is rank 1), count, rank_field. DEPTH IS EXACTLY WHAT THE BOARD HOLDS: 19-20 products. There is no pagination behind it — the paging service does not serve this component type, which was tested rather than assumed — so 20 is the whole board, not a page of it. US only. Refresh it daily; the board turns over, and cache_ttl reflects that.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{}},{"name":"premium_offers","description":"TikTok Shop's US 'premium offers' deal board, paged to the end — around 97 discounted products with the discount percentage and the pre-discount price on every row. A ready-made deals feed rather than a price filter over search","required_params":[],"optional_params":["max_results"],"params":[{"name":"max_results","type":"integer","required":false,"description":"How many deal products to return, 1-240 (default 80). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.","on_invalid":"ignore","default":80,"example":80,"minimum":1,"maximum":240,"aliases":["limit","max","count"]}],"returns":"results[] (standard listing rows; is_promotional is true and list_price and discount_percent are populated on essentially every row, which is the point of this board), has_more, pages_fetched, requested_max. The board holds about 97 products in total and ends on TikTok's own has_more going false, so asking for more than that returns everything there is. Pagination replays the deal component the live page itself ships — guessed request shapes make this route answer 'success' with an empty list, so this action always reads the real board first. US only.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":40,"min":2},"example_params":{"max_results":80}},{"name":"recommended_for_you","description":"TikTok Shop's US personalised discovery feed, paged and de-duplicated — 200-plus distinct products of what TikTok is currently pushing to shoppers. The widest trend-discovery surface this API has","required_params":[],"optional_params":["max_results"],"params":[{"name":"max_results","type":"integer","required":false,"description":"How many products to return, 1-240 (default 80). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.","on_invalid":"ignore","default":80,"example":80,"minimum":1,"maximum":240,"aliases":["limit","max","count"]}],"returns":"results[] (standard listing rows), has_more, pages_fetched, duplicates_dropped, requested_max. THE FEED REPEATS ITSELF AND THIS API DE-DUPLICATES IT. TikTok keeps answering has_more:true while the share of genuinely new products decays page by page (40, 40, 40, 39, 27, 16, 11 new items over seven pages in the recon run). Rows are de-duplicated by product_id, duplicates_dropped tells you how much repetition there was, and the walk stops early when a page brings nothing new — so max_results is a ceiling, not a promise, and meta.stop_reason says which ending you got. Because it is a recommendation feed it is NOT stable between calls; do not treat it as a catalogue. US only.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":3},"example_params":{"max_results":80}},{"name":"reviews","description":"Customer reviews for a product on any of the ten markets — three full review texts with rating, author, verified-purchase flag and photo, plus the COMPLETE 1-to-5 star histogram and total review count covering every review the product has. Served from a 7 KB endpoint instead of the product page, so a ratings refresh costs a fraction of a re-fetch","required_params":["product_id"],"optional_params":["market"],"params":[{"name":"product_id","type":"string","required":true,"description":"TikTok Shop product id — the 19-digit number at the end of a product URL (shop.tiktok.com/us/pdp/product/1729450858130215273). It is a stable string, returned verbatim by every action, and it never changes type or gets re-keyed between surfaces.","on_invalid":"ignore","example":"1729450858130215273","aliases":["id","productId"]},{"name":"market","type":"enum","required":false,"description":"Which TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"my","label":"Malaysia (MYR)"},{"value":"sg","label":"Singapore (SGD)"},{"value":"th","label":"Thailand (THB)"},{"value":"ph","label":"Philippines (PHP)"},{"value":"vn","label":"Vietnam (VND)"},{"value":"id","label":"Indonesia (IDR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"mx","label":"Mexico (MXN)"}],"default":"us","example":"us","aliases":["region","country"]}],"returns":"reviews[] {review_id, rating, text, author, author_avatar, sku_id, review_time_ms, verified_purchase, incentivized, image}, review_summary{total_reviews, average_rating, rating_distribution{1..5}}, product_id, market, source. READ THIS BEFORE BUYING: the review TEXT depth is THREE. That is all TikTok serves publicly — the paged review service exists and its full parameter model is known (page size, sort, star/media/verified filters), but it rejects every unauthenticated request, including a genuine Chrome call made from inside the live page, which is why this is described as a login gate rather than a limitation of this API. We do not run TikTok accounts, so we do not sell review depth we cannot deliver. Competitors who advertise hundreds of reviews per product are doing something we do not do. WHAT IS COMPLETE: review_summary. total_reviews and the five-bucket rating_distribution cover ALL reviews (they sum to total_reviews, verified on products with 6,000 and 40,000 reviews), so rating analytics are fully served even though the text sample is three. The cheap review endpoint is intermittent — it refuses more often than it answers on some markets — so this action falls back to reading the same three reviews and the same histogram out of the product page. source tells you which one answered, and the fallback costs more bandwidth but returns identical data.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"1729450858130215273"}}]},{"name":"tise","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Tise Nordic Second-Hand Marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/tise/v1","spec_available":true,"actions":[{"name":"search","description":"Search Tise, the Nordic second-hand marketplace (clothes, shoes, bags, home, kids, hobby) in Norway, Sweden, Denmark, Finland, Germany, the Netherlands, the UK, the US or Australia. Free text plus the site's own filters: category, brand, condition, colour, material, gender, size, price range, Second Chance, and its four sort orders. 18 listings per page, paged by cursor. Nothing is required: no parameters lists the newest listings in Norway.","required_params":[],"optional_params":["country","location","query","category","brand_ids","condition","colors","materials","gender","sizes","min_price","max_price","second_chance","sort","cursor","include_pii"],"params":[{"name":"country","type":"enum","required":false,"description":"Tise market to search. Each row keeps its own country_code and currency; nothing is converted.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway (NOK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"us","label":"United States (USD)"},{"value":"au","label":"Australia (AUD)"}],"default":"no","example":"no","aliases":["country_code","market"]},{"name":"location","type":"enum","required":false,"description":"`country` (default, as the app opens): listings in that market. `all`: also sellers from other countries who ship there.","on_invalid":"reject","allowed_values":[{"value":"country","label":"This country"},{"value":"all","label":"All that ship here"}],"default":"country","example":"country"},{"name":"query","type":"string","required":false,"description":"Free text as a Nordic shopper types it: `levis`, `vintage skinnjakke`, `stokke tripp trapp`. Optional; empty browses the newest listings.","on_invalid":"reject","example":"levis","aliases":["q","search","keyword"]},{"name":"category","type":"array","required":false,"description":"One or more Tise category ids at any depth (`wearables`, `home`, `wearables.clothes.pants.jeans`). From `categories`, `suggest` or a row's `category`.","on_invalid":"reject","example":["wearables.clothes.pants.jeans"],"aliases":["category_id","categories"]},{"name":"brand_ids","type":"array","required":false,"description":"One or more Tise brand ids (Levi's `vuYRhl`), from `brands`, `suggest` or a row's brand.id.","on_invalid":"reject","example":["vuYRhl"],"aliases":["brand_id","brand"]},{"name":"condition","type":"array","required":false,"description":"One or more of the site's four conditions.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Ny — never used"},{"value":"lightly_used","label":"Pent brukt — no signs of use"},{"value":"used","label":"Brukt — some signs of use"},{"value":"well_used","label":"Godt brukt — clear signs of use"}],"example":["new"],"aliases":["conditions"]},{"name":"colors","type":"array","required":false,"description":"One or more colours (the site's 19).","on_invalid":"reject","allowed_values":[{"value":"black","label":"Svart"},{"value":"grey","label":"Grå"},{"value":"white","label":"Hvit"},{"value":"multi","label":"Multi"},{"value":"beige","label":"Beige"},{"value":"green","label":"Grønn"},{"value":"khaki","label":"Khaki"},{"value":"blue","label":"Blå"},{"value":"navy","label":"Marineblå"},{"value":"turquoise","label":"Turkis"},{"value":"purple","label":"Lilla"},{"value":"pink","label":"Rosa"},{"value":"red","label":"Rød"},{"value":"burgundy","label":"Burgunder"},{"value":"brown","label":"Brun"},{"value":"orange","label":"Oransje"},{"value":"yellow","label":"Gul"},{"value":"silver","label":"Sølv"},{"value":"gold","label":"Gull"}],"example":["black"],"aliases":["color","colour","colours"]},{"name":"materials","type":"array","required":false,"description":"One or more materials (the site's 28).","on_invalid":"reject","allowed_values":[{"value":"acryl","label":"Acryl"},{"value":"alpaca","label":"Alpakka"},{"value":"angora","label":"Angora ull"},{"value":"bamboo","label":"Bambus"},{"value":"cotton","label":"Bomull"},{"value":"cupro","label":"Cupro"},{"value":"elastan","label":"Elastan"},{"value":"goretex","label":"Gore-tex"},{"value":"hemp","label":"Hamp"},{"value":"faux","label":"Imitert skinn"},{"value":"cashmere","label":"Kashmir"},{"value":"linen","label":"Lin"},{"value":"lycra","label":"Lycra"},{"value":"lyocell","label":"Lyocell"},{"value":"merino","label":"Merino"},{"value":"modal","label":"Modal"},{"value":"mohair","label":"Mohair ull"},{"value":"nylon","label":"Nylon"},{"value":"polyamide","label":"Polyamide"},{"value":"polyester","label":"Polyester"},{"value":"rayon","label":"Rayon"},{"value":"satin","label":"Sateng"},{"value":"suede","label":"Semsket skinn"},{"value":"silk","label":"Silke"},{"value":"leather","label":"Skinn"},{"value":"spandex","label":"Spandex"},{"value":"wool","label":"Ull"},{"value":"viscose","label":"Viskose"}],"example":["wool"],"aliases":["material"]},{"name":"gender","type":"array","required":false,"description":"female, male or any (unisex). Tise also returns listings that have no gender set (measured 4-12 of 16 rows), never the other gender.","on_invalid":"reject","allowed_values":[{"value":"female","label":"Women"},{"value":"male","label":"Men"},{"value":"any","label":"Unisex"}],"example":["female"],"aliases":["genders"]},{"name":"sizes","type":"array","required":false,"description":"One or more sizes as `<group>:<size>`: tops:M, bottoms:S, shoes:38, children:<size>, children_shoes:<size>. Matches the row's `size`.","on_invalid":"reject","example":["tops:M"],"value_pattern":"(?:tops|bottoms|shoes|children|children_shoes):[^\\s:,]{1,20}","aliases":["size","product_size"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in the market's currency (NOK for no). `1` removes the many price-0 giveaway, swap and wanted posts.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in the market's currency.","on_invalid":"reject","example":500,"minimum":0},{"name":"second_chance","type":"boolean","required":false,"description":"Only Tise Second Chance listings: brands' returns, samples and seconds sold through Tise.","on_invalid":"reject","default":false,"example":false},{"name":"sort","type":"enum","required":false,"description":"newest (the site's default), relevance, price_asc, price_desc. price_asc starts with price-0 posts unless min_price is set.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first"},{"value":"relevance","label":"Most relevant"},{"value":"price_asc","label":"Price, low to high"},{"value":"price_desc","label":"Price, high to low"}],"default":"newest","example":"newest"},{"name":"cursor","type":"string","required":false,"description":"The `next_cursor` of the previous page, passed back unchanged with the same other parameters. Omit for the first page.","on_invalid":"reject","example":""},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, country, sort, filters_applied, count, has_more, next_cursor, sponsored_tiles_dropped, listings[]}. Each listing: {id, advert_id, url, title, description, brand{id,name}, custom_brand, category, category_path[], condition, condition_label, condition_en, size, fits_like, gender, colors[{id,name,hex}], materials[{id,name}], price, price_zero, price_minor, currency, is_sold, instant_buy, resell_allowed, like_count, country_code, location{label,lat,lng,accuracy,radius_m}, shipping{options[{id,name}],summary,size_category}, meet_in_person, meet_summary, image, images[], image_count, created_at, updated_at, visible_since, is_second_chance, is_promoted, promotion_label, seller_id, seller{id,username,name,points,picture,profile_url,badges[]}}. Search shows unsold listings only; for a result count use `filters`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"levis","country":"no","condition":["lightly_used"]}},{"name":"product","description":"One Tise listing in full: price (and whether it is a price-0 giveaway/swap post), condition, size, brand, category, colours, materials, every image, approximate location, shipping carriers and the 'from' price, meet-up option, likes, sold flag and the seller. Works for sold listings too.","required_params":[],"optional_params":["id","url","include_pii"],"params":[{"name":"id","type":"string","required":false,"description":"Tise listing id, exactly the `id` of a search row (e.g. RCOPWbLYg); the 24-character `advert_id` is accepted too.","on_invalid":"reject","example":"RCOPWbLYg","aliases":["advert_id","short_id"]},{"name":"url","type":"string","required":false,"description":"Or the listing URL https://tise.com/t/<id>.","on_invalid":"reject","example":"https://tise.com/t/RCOPWbLYg"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"Search row fields plus liked_by[{user_id, username}]. Either `id` or `url` is required.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://tise.com/t/RCOPWbLYg"}},{"name":"seller","description":"A Tise seller's public profile: name, country, bio (with Tise's own translations), member since, followers, active and lifetime listing counts, points, rating average and review count, trusted flag and badges.","required_params":[],"optional_params":["seller_id","username","include_pii"],"params":[{"name":"seller_id","type":"string","required":false,"description":"24-character Tise user id (`seller_id` of any row).","on_invalid":"reject","example":"56cb86a3d52b875d14317b83","aliases":["user_id"]},{"name":"username","type":"string","required":false,"description":"Or the username from the profile URL tise.com/<username>.","on_invalid":"reject","example":"camiliaisabel"},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{id, username, profile_url, name, country_code, gender, picture, banner, bio, bio_translations, bio_language, website, height_cm, member_since_text, last_active, follower_count, following_count, active_listing_count, lifetime_listing_count, list_count, points, rating_average, review_count, rating_shown, is_trusted, is_featured, badges[]}. Either `seller_id` or `username` is required.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"56cb86a3d52b875d14317b83"}},{"name":"seller_listings","description":"Every listing in one seller's closet, unsold first, then SOLD items with the price they were listed at — a sold-price history per seller. 18 per page, paged by cursor.","required_params":["seller_id"],"optional_params":["cursor","include_pii"],"params":[{"name":"seller_id","type":"string","required":true,"description":"24-character Tise user id: `seller_id` of any row, or `id` from `seller`.","on_invalid":"reject","example":"56cb86a3d52b875d14317b83","aliases":["user_id"]},{"name":"cursor","type":"string","required":false,"description":"The `next_cursor` of the previous page, passed back unchanged with the same other parameters. Omit for the first page.","on_invalid":"reject","example":""},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{seller_id, seller, count, sold_count, has_more, next_cursor, sponsored_tiles_dropped, listings[]} — listings have the search row shape.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"56cb86a3d52b875d14317b83"}},{"name":"seller_reviews","description":"Reviews a Tise user received as a seller (default) or as a buyer: stars, text, date, the kind of trade, and the reviewer. Paged by cursor.","required_params":["seller_id"],"optional_params":["role","cursor","include_pii"],"params":[{"name":"seller_id","type":"string","required":true,"description":"24-character Tise user id: `seller_id` of any row, or `id` from `seller`.","on_invalid":"reject","example":"56cb86a3d52b875d14317b83","aliases":["user_id"]},{"name":"role","type":"enum","required":false,"description":"seller (default): reviews from people who bought from this user. buyer: reviews from people who sold to them.","on_invalid":"reject","allowed_values":[{"value":"seller","label":"Reviews this user got as a seller"},{"value":"buyer","label":"Reviews this user got as a buyer"}],"default":"seller","example":"seller"},{"name":"cursor","type":"string","required":false,"description":"The `next_cursor` of the previous page, passed back unchanged with the same other parameters. Omit for the first page.","on_invalid":"reject","example":""},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{seller_id, role, count, has_more, next_cursor, reviews[{id, rating, text, translations, source_language, created_at, role, review_type, reviewer{id,username,name,points,picture,profile_url,badges[]}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"56cb86a3d52b875d14317b83"}},{"name":"filters","description":"The result count Tise shows for a search (it stops at 10 000+) and the filter values on offer: sizes groups, colours, conditions, materials, genders, location and the price steps, with the sort options. Takes the same filters as `search`, so it measures any query before you page through it.","required_params":[],"optional_params":["country","location","query","category","brand_ids","condition","colors","materials","gender","sizes","min_price","max_price","second_chance","include_pii"],"params":[{"name":"country","type":"enum","required":false,"description":"Tise market to search. Each row keeps its own country_code and currency; nothing is converted.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway (NOK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"us","label":"United States (USD)"},{"value":"au","label":"Australia (AUD)"}],"default":"no","example":"no","aliases":["country_code","market"]},{"name":"location","type":"enum","required":false,"description":"`country` (default, as the app opens): listings in that market. `all`: also sellers from other countries who ship there.","on_invalid":"reject","allowed_values":[{"value":"country","label":"This country"},{"value":"all","label":"All that ship here"}],"default":"country","example":"country"},{"name":"query","type":"string","required":false,"description":"Free text as a Nordic shopper types it: `levis`, `vintage skinnjakke`, `stokke tripp trapp`. Optional; empty browses the newest listings.","on_invalid":"reject","example":"levis","aliases":["q","search","keyword"]},{"name":"category","type":"array","required":false,"description":"One or more Tise category ids at any depth (`wearables`, `home`, `wearables.clothes.pants.jeans`). From `categories`, `suggest` or a row's `category`.","on_invalid":"reject","example":["wearables.clothes.pants.jeans"],"aliases":["category_id","categories"]},{"name":"brand_ids","type":"array","required":false,"description":"One or more Tise brand ids (Levi's `vuYRhl`), from `brands`, `suggest` or a row's brand.id.","on_invalid":"reject","example":["vuYRhl"],"aliases":["brand_id","brand"]},{"name":"condition","type":"array","required":false,"description":"One or more of the site's four conditions.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Ny — never used"},{"value":"lightly_used","label":"Pent brukt — no signs of use"},{"value":"used","label":"Brukt — some signs of use"},{"value":"well_used","label":"Godt brukt — clear signs of use"}],"example":["new"],"aliases":["conditions"]},{"name":"colors","type":"array","required":false,"description":"One or more colours (the site's 19).","on_invalid":"reject","allowed_values":[{"value":"black","label":"Svart"},{"value":"grey","label":"Grå"},{"value":"white","label":"Hvit"},{"value":"multi","label":"Multi"},{"value":"beige","label":"Beige"},{"value":"green","label":"Grønn"},{"value":"khaki","label":"Khaki"},{"value":"blue","label":"Blå"},{"value":"navy","label":"Marineblå"},{"value":"turquoise","label":"Turkis"},{"value":"purple","label":"Lilla"},{"value":"pink","label":"Rosa"},{"value":"red","label":"Rød"},{"value":"burgundy","label":"Burgunder"},{"value":"brown","label":"Brun"},{"value":"orange","label":"Oransje"},{"value":"yellow","label":"Gul"},{"value":"silver","label":"Sølv"},{"value":"gold","label":"Gull"}],"example":["black"],"aliases":["color","colour","colours"]},{"name":"materials","type":"array","required":false,"description":"One or more materials (the site's 28).","on_invalid":"reject","allowed_values":[{"value":"acryl","label":"Acryl"},{"value":"alpaca","label":"Alpakka"},{"value":"angora","label":"Angora ull"},{"value":"bamboo","label":"Bambus"},{"value":"cotton","label":"Bomull"},{"value":"cupro","label":"Cupro"},{"value":"elastan","label":"Elastan"},{"value":"goretex","label":"Gore-tex"},{"value":"hemp","label":"Hamp"},{"value":"faux","label":"Imitert skinn"},{"value":"cashmere","label":"Kashmir"},{"value":"linen","label":"Lin"},{"value":"lycra","label":"Lycra"},{"value":"lyocell","label":"Lyocell"},{"value":"merino","label":"Merino"},{"value":"modal","label":"Modal"},{"value":"mohair","label":"Mohair ull"},{"value":"nylon","label":"Nylon"},{"value":"polyamide","label":"Polyamide"},{"value":"polyester","label":"Polyester"},{"value":"rayon","label":"Rayon"},{"value":"satin","label":"Sateng"},{"value":"suede","label":"Semsket skinn"},{"value":"silk","label":"Silke"},{"value":"leather","label":"Skinn"},{"value":"spandex","label":"Spandex"},{"value":"wool","label":"Ull"},{"value":"viscose","label":"Viskose"}],"example":["wool"],"aliases":["material"]},{"name":"gender","type":"array","required":false,"description":"female, male or any (unisex). Tise also returns listings that have no gender set (measured 4-12 of 16 rows), never the other gender.","on_invalid":"reject","allowed_values":[{"value":"female","label":"Women"},{"value":"male","label":"Men"},{"value":"any","label":"Unisex"}],"example":["female"],"aliases":["genders"]},{"name":"sizes","type":"array","required":false,"description":"One or more sizes as `<group>:<size>`: tops:M, bottoms:S, shoes:38, children:<size>, children_shoes:<size>. Matches the row's `size`.","on_invalid":"reject","example":["tops:M"],"value_pattern":"(?:tops|bottoms|shoes|children|children_shoes):[^\\s:,]{1,20}","aliases":["size","product_size"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in the market's currency (NOK for no). `1` removes the many price-0 giveaway, swap and wanted posts.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in the market's currency.","on_invalid":"reject","example":500,"minimum":0},{"name":"second_chance","type":"boolean","required":false,"description":"Only Tise Second Chance listings: brands' returns, samples and seconds sold through Tise.","on_invalid":"reject","default":false,"example":false},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility; seller fields are returned as published.","on_invalid":"reject","default":false}],"returns":"{query, country, filters_applied, total, total_capped, total_text, sort_options[{id,label}], filters[{id,type,label,selected[],options[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"levis","condition":["new"]}},{"name":"brands","description":"Find Tise brand ids by name, for the `brand_ids` filter.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Brand name or its start: `levi`, `acne`, `stokke`.","on_invalid":"reject","example":"levi","aliases":["q","search"]}],"returns":"{query, count, brands[{id, name, logo, categories[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"levi"}},{"name":"categories","description":"Tise's full category tree for a market (7 roots, 349 nodes on 2026-10-14) with each node's id for the `category` filter, its genders and size set.","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"enum","required":false,"description":"Tise market to search. Each row keeps its own country_code and currency; nothing is converted.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway (NOK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"us","label":"United States (USD)"},{"value":"au","label":"Australia (AUD)"}],"default":"no","example":"no","aliases":["country_code","market"]}],"returns":"{country, node_count, categories[{id, title, long_title, level, genders[], brands_enabled, materials_enabled, size_set, subcategories[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"no"}},{"name":"suggest","description":"Tise's own search-as-you-type: the categories, brands and users that match a few letters, each with the id the filters take.","required_params":["query"],"optional_params":["country"],"params":[{"name":"query","type":"string","required":true,"description":"What a shopper typed: `jeans`, `levis`, `stokke`.","on_invalid":"reject","example":"levis","aliases":["q","search"]},{"name":"country","type":"enum","required":false,"description":"Tise market to search. Each row keeps its own country_code and currency; nothing is converted.","on_invalid":"reject","allowed_values":[{"value":"no","label":"Norway (NOK)"},{"value":"se","label":"Sweden (SEK)"},{"value":"dk","label":"Denmark (DKK)"},{"value":"fi","label":"Finland (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"us","label":"United States (USD)"},{"value":"au","label":"Australia (AUD)"}],"default":"no","example":"no","aliases":["country_code","market"]}],"returns":"{query, count, suggestions[{type, title, subtitle, link, category_id, brand_id, query, user}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"levis"}}]},{"name":"tokopedia","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Tokopedia API scraper — Indonesia's #1 e-commerce marketplace: product search with price/condition/rating filters, full product detail (price, discount, stock, variants, specs, images, sold count, rating), store/shop profiles, a shop's product catalog, and paginated product reviews — id locale, IDR prices, no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/tokopedia/v1","spec_available":true,"actions":[{"name":"search","description":"Search Tokopedia products by keyword with optional price / condition / rating filters and sort. Returns up to 20 products per page (product_id, name, url, price in IDR, rating, sold count, category, shop) with page-based pagination.","required_params":["q"],"optional_params":["page","sort","price_min","price_max","condition","rating"],"params":[{"name":"q","type":"string","required":true,"description":"Search keyword — a product, brand or category in Indonesian or English ('laptop gaming', 'iphone 15', 'sepatu nike', 'kopi').","on_invalid":"reject","example":"laptop gaming","aliases":["query","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (20 results per page). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering (Tokopedia 'ob' code).","on_invalid":"ignore","allowed_values":[{"value":"23","label":"Most relevant (default)"},{"value":"5","label":"Newest"},{"value":"3","label":"Price: low to high"},{"value":"4","label":"Price: high to low"},{"value":"8","label":"Best selling"},{"value":"9","label":"Best rating"}],"default":"23","example":"23"},{"name":"price_min","type":"integer","required":false,"description":"Minimum price filter in IDR (rupiah, e.g. 100000 = Rp100.000).","on_invalid":"ignore","example":100000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum price filter in IDR (rupiah).","on_invalid":"ignore","example":5000000,"minimum":0},{"name":"condition","type":"enum","required":false,"description":"Filter by item condition (new = baru, used = bekas).","on_invalid":"ignore","allowed_values":[{"value":"new","label":"New only"},{"value":"used","label":"Used only"}],"example":"new"},{"name":"rating","type":"enum","required":false,"description":"Minimum product star rating filter.","on_invalid":"ignore","allowed_values":[{"value":"4","label":"4 stars & up"},{"value":"5","label":"5 stars"}],"example":"4"}],"returns":"products[]{product_id, name, url, image_url, price, price_value, rating, category, sold, labels[], shop{shop_id, name, city, url, is_official}} + meta{total, page, has_more, next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"laptop"}},{"name":"detail","description":"Full product detail by product url: price, slashed/original price, discount, active campaign, stock, min/max order, weight, rating, review/view/talk counts, sold count, full description, spec rows, category breadcrumb, image gallery, variants and the seller shop.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"Full Tokopedia product URL (tokopedia.com/<shop>/<product-slug>) — take it straight from a search result's `url`. A bare numeric product_id has no page of its own on Tokopedia and cannot be used here (it does work on `reviews`).","on_invalid":"reject","example":"https://www.tokopedia.com/ringke/casing-ringke-compatible-for-iphone-15-pro-silicone-magnet-magsafe-softcase-tipis-1729869063392494724"}],"returns":"product{product_id, name, url, condition, price, price_value, original_price, discount_pct, campaign, stock, min_order, max_order, weight, rating, review_count, sold, description, specs[], category_breadcrumb[], images[], variants[], shop{shop_id, name}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.tokopedia.com/ringke/casing-ringke-compatible-for-iphone-15-pro-silicone-magnet-magsafe-softcase-tipis-1729869063392494724"}},{"name":"shop","description":"Store/shop profile by shop domain (the tokopedia.com/<shop> handle): name, description, open-since, follower count, active product count, total products sold, successful transactions, location, avatar and cover.","required_params":["shop"],"optional_params":[],"params":[{"name":"shop","type":"string","required":true,"description":"Shop/store domain — the handle in tokopedia.com/<shop> (or a full shop URL).","on_invalid":"reject","example":"unitechofficial","aliases":["shop_domain","store","domain"]}],"returns":"shop{shop_id, name, domain, url, description, open_since, is_open, location, city, total_favorite, active_product_count, product_sold, transaction_success, avatar, cover, status}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"shop":"unitechofficial"}},{"name":"shop_products","description":"Paginated product catalog of one shop by shop domain. Returns up to 20 products per page (same shape as search) plus the shop's total product count. Page through every product a store sells.","required_params":["shop"],"optional_params":["page","sort"],"params":[{"name":"shop","type":"string","required":true,"description":"Shop/store domain — the handle in tokopedia.com/<shop> (or a full shop URL).","on_invalid":"reject","example":"unitechofficial","aliases":["shop_domain","store","domain"]},{"name":"page","type":"integer","required":false,"description":"1-based page number (20 results per page). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering (Tokopedia 'ob' code).","on_invalid":"ignore","allowed_values":[{"value":"23","label":"Most relevant (default)"},{"value":"5","label":"Newest"},{"value":"3","label":"Price: low to high"},{"value":"4","label":"Price: high to low"},{"value":"8","label":"Best selling"},{"value":"9","label":"Best rating"}],"default":"23","example":"23"}],"returns":"products[]{product_id, name, url, price, rating, sold, shop{}} + meta{total, page, has_more, next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"shop":"unitechofficial"}},{"name":"reviews","description":"Paginated public product reviews by product_id (or url): star rating, review text, variant bought, relative date, reviewer handle, photos/videos, likes and the seller's reply. 20 reviews per page — page with `page`; meta.total / meta.has_more tell you how many.","required_params":[],"optional_params":["product_id","url","page","sort_reviews","filter_rating"],"params":[{"name":"product_id","type":"string","required":false,"description":"Tokopedia numeric product id (from a search result's product_id). Alternatively pass a full product `url`.","on_invalid":"reject","example":"8485032043","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Full Tokopedia product URL (tokopedia.com/<shop>/<product-slug>). Use this when you have the link rather than the numeric id.","on_invalid":"ignore","example":"https://www.tokopedia.com/ringke/casing-ringke-compatible-for-iphone-15-pro-silicone-magnet-magsafe-softcase-tipis-1729869063392494724"},{"name":"page","type":"integer","required":false,"description":"1-based page number (20 results per page). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort_reviews","type":"enum","required":false,"description":"Order reviews (helpfulness or date).","on_invalid":"ignore","allowed_values":[{"value":"informative_score desc","label":"Most helpful (default)"},{"value":"create_time desc","label":"Newest"},{"value":"create_time asc","label":"Oldest"}],"example":"informative_score desc"},{"name":"filter_rating","type":"enum","required":false,"description":"Show only reviews with this star rating.","on_invalid":"ignore","allowed_values":[{"value":"5","label":"5 stars"},{"value":"4","label":"4 stars"},{"value":"3","label":"3 stars"},{"value":"2","label":"2 stars"},{"value":"1","label":"1 star"}],"example":"5"}],"returns":"reviews[]{review_id, rating, text, variant, date, author, likes, images[], videos[], shop_reply} + meta{total, page, has_more, next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":1},"example_params":{"product_id":"8485032043"}}]},{"name":"toppreise","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"toppreise.ch API — Swiss price comparison: search, every shop's CHF price with shipping, product specs, price history","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/toppreise/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword, identifier (EAN / GTIN / part number) or category search on toppreise.ch (Switzerland, CHF). Rows are catalogue products (lowest price, lowest price incl. shipping, number of offers, availability), product series (`row_type: series`, a model line with its variants nested) and shop offers toppreise lists without a catalogue product (`row_type: offer`: shop, price, shipping, total). `total` is toppreise's hit count, which includes those offers; in the popularity order a series counts each variant but takes one row, so rows over all pages can be fewer than `total`; in the price orders catalogue products come first, then shop offers, each block in price order. Filter by brand, shop and availability (ids from the `filters` action), sort by price, name, availability or popularity, 24 rows per page. Give `query`, `category_id` or both.","required_params":[],"optional_params":[],"params":[{"name":"query","type":"string","required":false,"description":"Search words, or a product identifier: an EAN / UPC / GTIN (8-14 digits, spaces and dashes ignored) or a manufacturer part number. When toppreise itself jumps straight to one product for the words, its id is in `exact_match_product_id`. Required unless category_id is given.","on_invalid":"reject","example":"kaffeevollautomat","aliases":["q","keyword"]},{"name":"category_id","type":"string","required":false,"description":"toppreise category id (the number after '-c' in a category URL, e.g. …/Vollautomaten-c675 → 675, or `category_id` of a product). With query: the search inside that category. Required unless query is given.","on_invalid":"reject","example":"675","aliases":["category","cid"]},{"name":"brand_id","type":"string","required":false,"description":"Brand (manufacturer) id from the `filters` action (`brands[].id`). One id per call. An id the site does not know for this search is refused (INVALID_PARAM), never silently ignored.","on_invalid":"reject","example":"421","aliases":["brand","manufacturer_id"]},{"name":"shop_id","type":"string","required":false,"description":"Shop id from the `filters` action (`shops[].id`) or an offer's `shop_id`: only products this shop sells. One id per call.","on_invalid":"reject","example":"757","aliases":["shop","dealer_id"]},{"name":"availability","type":"enum","required":false,"description":"Only products with at least one offer deliverable this fast.","on_invalid":"reject","allowed_values":[{"value":"in_stock","label":"In stock at the shop's own warehouse"},{"value":"1_week","label":"Deliverable within one week"},{"value":"2_weeks","label":"Deliverable within two weeks"},{"value":"4_weeks","label":"Deliverable within four weeks"}],"aliases":["delivery"]},{"name":"sort","type":"enum","required":false,"description":"Result order. The site groups product series only in the popularity order, so the hit count differs between orders (measured 1 117 vs 1 248).","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"toppreise popularity (series grouped)"},{"value":"price_asc","label":"Lowest price INCLUDING shipping first (every product, no grouping); price_min alone can step down"},{"value":"price_desc","label":"Highest price including shipping first"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"},{"value":"availability","label":"Best availability first"}],"default":"popularity"},{"name":"page","type":"integer","required":false,"description":"Result page, 24 top-level rows per page; `last_page` is the site's own page count (its pagination ends at page 100). A page past the last returns no rows and `page_beyond_last: true`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"{rows:[{row_type:'product', product_id, title, url, image, offer_count, price_min, price_min_incl_shipping, best_availability_code, best_availability, best_availability_text} | {row_type:'series', series_id, title, brand, features, url, price_min_incl_shipping, variants:[product rows]} | {row_type:'offer', product_id|null, title, image, offer_id, shop_id, shop, price, shipping, total_price, availability, payment_methods[], ...}], total, total_capped, page, last_page, has_more, page_beyond_last, row_counts, identifier_query, exact_match_product_id, sort, filters_applied}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"kaffeevollautomat"}},{"name":"filters","description":"The filter facets toppreise offers for a search: brands, shops, product series and sub-categories with their ids and hit counts, the price steps and the exact hit count. Use the ids as `brand_id` / `shop_id` / `category_id` in `search`.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search words.","on_invalid":"reject","example":"kaffeevollautomat","aliases":["q","keyword"]}],"returns":"{total, brands:[{id,name}], shops:[{id,name}], series:[{id,name,brand}], categories:[{id,name,count,parent_id}], price_steps_chf:[{from,to}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"kaffeevollautomat"}},{"name":"product","description":"One toppreise product: title, brand, GTIN/EAN codes, manufacturer part numbers, description, category path and id, series id, lowest and highest offer price (CHF), number of offers, spec sheet, and the first page of shop offers (up to 24, lowest total first) with used offers apart. A product with no current offer is returned with `has_offers: false`, `offer_count: 0` and null prices.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"toppreise product id: the number after '-p' in a product URL (…/DELONGHI-ECAM220-60-B-Magnifica-Start-p749259 → 749259), or `product_id` of a search row. A full product URL is accepted too.","on_invalid":"reject","example":"749259","aliases":["id","p"]}],"returns":"{product_id, title, brand, gtins[], mpns[], description, category_path[], category_id, series_id, price_min, price_max, offer_count, has_offers, specs[{name,value}], offers[...], used_offers[...]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"749259"}},{"name":"offers","description":"Every shop's offer for one product (up to 96, ordered by toppreise's lowest total first): shop and shop id, offer title, price, shipping, total price incl. shipping for the cheapest payment method, the difference when discounts or fees apply, availability (English, with toppreise's German wording in `availability_text`), shop rating and rating count, payment methods (codes plus names), cheapest-price badges. Used ('Occasion') offers are returned apart in `used_offers`: `condition` is the shop's stated grade, or 'Occasion' when the shop states none.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"toppreise product id: the number after '-p' in a product URL (…/DELONGHI-ECAM220-60-B-Magnifica-Start-p749259 → 749259), or `product_id` of a search row. A full product URL is accepted too.","on_invalid":"reject","example":"749259","aliases":["id","p"]}],"returns":"{product_id, title, offer_count, offers:[{offer_id, position, shop_id, shop, offer_title, price, shipping, total_price, price_difference, total_has_adjustment, availability_code, availability, shop_rating, availability_text, shop_rating_count, is_lowest_price, is_lowest_total, payment_methods[], payment_methods_detail[{code,name,name_en}]}], used_offers:[... + condition, condition_stated]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"749259"}},{"name":"price_history","description":"toppreise's own daily price history for one product: the lowest item price and the lowest price incl. shipping per day (measured: since 2023-11 on a 2023 product), with the chart's own current, lowest and highest price. A day toppreise recorded no price is kept with null prices and `gap: true`, as the chart shows it.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"toppreise product id: the number after '-p' in a product URL (…/DELONGHI-ECAM220-60-B-Magnifica-Start-p749259 → 749259), or `product_id` of a search row. A full product URL is accepted too.","on_invalid":"reject","example":"749259","aliases":["id","p"]},{"name":"time_range","type":"enum","required":false,"description":"How far back.","on_invalid":"reject","allowed_values":[{"value":"1m","label":"Last month"},{"value":"3m","label":"Last 3 months"},{"value":"6m","label":"Last 6 months"},{"value":"1y","label":"Last year"},{"value":"all","label":"Everything toppreise keeps"}],"default":"1y","aliases":["range"]}],"returns":"{product_id, title, points:[{date, price, price_incl_shipping, gap}], gap_days, current, lowest, highest, identity_checks}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"749259","time_range":"6m"}},{"name":"series","description":"One toppreise product series (model line): its name and every variant product with lowest price, number of offers and availability.","required_params":["series_id"],"optional_params":[],"params":[{"name":"series_id","type":"string","required":true,"description":"Series id: `series_id` of a search row or the number after '-pc-s' in a series URL.","on_invalid":"reject","example":"64949","aliases":["id","s"]}],"returns":"{series_id, title, total, variants:[product rows]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"series_id":"64949"}}]},{"name":"toretoku","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Toretoku API — Japanese trading-card shop トレトク (toretoku.jp): selling price in JPY per condition rank (S sealed, A-D) with stock, for Yu-Gi-Oh!, Pokémon, MTG, Duel Masters, One Piece, Rush Duel and Weiß Schwarz, the shop's live order feed, and its buy-back prices (買取) for Yu-Gi-Oh! and Pokémon. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/toretoku/v1","spec_available":true,"actions":[{"name":"search","description":"Cards and sealed products Toretoku sells in one game, one row per condition rank: price in JPY, exact stock, rarity, card number, language and set; filter by name or number, set, rank, language, price, SALE and the game's own card filters; sort by popularity, newest, price or last price change.","required_params":["game"],"optional_params":["keyword","set_id","series_id","category_id","in_stock","condition","language","min_price","max_price","on_sale","foil","error_card","color","card_type","attribute","cost","level","sort","page","per_page"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: yugioh, pokemon, mtg, duel_masters, one_piece, yugioh_rush_duel, weiss_schwarz or other (also accepted: ポケカ, 遊戯王, ygo, dm, ws).","on_invalid":"reject","allowed_values":[{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモン — Pokémon Trading Card Game"},{"value":"mtg","label":"MTG — Magic: The Gathering"},{"value":"duel_masters","label":"DuelMasters — Duel Masters"},{"value":"one_piece","label":"ワンピースカード — One Piece Card Game"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル — Yu-Gi-Oh! Rush Duel"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"other","label":"その他 — Other games, sealed bundles and supplies"}],"example":"pokemon"},{"name":"keyword","type":"string","required":false,"description":"Card name, or the number printed on the card (PROMO 203/XY-P). Japanese names as the shop writes them; several words narrow it. Up to 50 characters.","on_invalid":"reject","example":"ピカチュウ","aliases":["query","q","name"]},{"name":"set_id","type":"integer","required":false,"description":"One set (the `sets` action's set_id). Sale-side ids; buyback_search has its own.","on_invalid":"reject","example":1367,"aliases":["set"]},{"name":"series_id","type":"integer","required":false,"description":"One series / block (from `sets`).","on_invalid":"reject","example":664},{"name":"category_id","type":"integer","required":false,"description":"One top-level category such as 拡張パック or プロモーションカード (from `sets`).","on_invalid":"reject","example":46},{"name":"in_stock","type":"boolean","required":false,"description":"Only ranks the shop has in stock. On by default, as on the site; false also lists sold-out ranks with their last price.","on_invalid":"reject","default":true,"example":false,"aliases":["in_stock_only"]},{"name":"condition","type":"string","required":false,"description":"Condition ranks, comma-separated: S (未開封, sealed), A, B, C, D.","on_invalid":"reject","example":"A,B","aliases":["rank"]},{"name":"language","type":"string","required":false,"description":"Card language, comma-separated: japanese, english, spanish, german, italian, chinese, french, korean, portuguese, russian, other.","on_invalid":"reject","example":"english"},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in JPY, tax included.","on_invalid":"reject","example":1000,"minimum":0,"maximum":99999999},{"name":"max_price","type":"integer","required":false,"description":"Highest price in JPY, tax included.","on_invalid":"reject","example":5000,"minimum":0,"maximum":99999999},{"name":"on_sale","type":"boolean","required":false,"description":"Only items the shop currently has marked down (SALE).","on_invalid":"reject","default":false,"example":true,"aliases":["discount"]},{"name":"foil","type":"boolean","required":false,"description":"MTG only: true = foil only, false = non-foil only.","on_invalid":"reject","example":true},{"name":"error_card","type":"boolean","required":false,"description":"MTG only: true = misprints only, false = none.","on_invalid":"reject","example":true},{"name":"color","type":"string","required":false,"description":"Card colour, comma-separated. mtg: white, black, blue, red, green, brown, gold, colorless. one_piece: red, green, blue, purple, black, yellow. weiss_schwarz: red, blue, yellow, green, purple.","on_invalid":"reject","example":"red"},{"name":"card_type","type":"string","required":false,"description":"Comma-separated. yugioh: normal_trap, continuous_trap, counter_trap, normal_spell, continuous_spell, quick_play_spell, field_spell, equip_spell, ritual_spell, normal_monster, effect_monster, tuner_monster, ritual_monster, pendulum_monster, fusion_monster, synchro_monster, xyz_monster, link_monster, gemini_monster. one_piece: leader, character, stage, event, don. weiss_schwarz: character, event, climax, first_player.","on_invalid":"reject","example":"effect_monster"},{"name":"attribute","type":"string","required":false,"description":"One Piece attribute, comma-separated: slash, strike, ranged, special, wisdom, unknown.","on_invalid":"reject","example":"slash"},{"name":"cost","type":"integer","required":false,"description":"One Piece: cost (life for leaders), 0-10.","on_invalid":"reject","example":4,"minimum":0,"maximum":10},{"name":"level","type":"integer","required":false,"description":"Weiß Schwarz: level, 0-3.","on_invalid":"reject","example":3,"minimum":0,"maximum":3},{"name":"sort","type":"enum","required":false,"description":"Order of the rows.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"人気順: the shop's popularity order (default)"},{"value":"newest","label":"新着順: newest listings first"},{"value":"price_asc","label":"価格の安い順: cheapest first"},{"value":"price_desc","label":"価格の高い順: dearest first"},{"value":"price_updated","label":"価格更新順: most recent price change first"},{"value":"condition","label":"状態ランク順: by condition rank"}],"default":"popular","example":"price_desc"},{"name":"page","type":"integer","required":false,"description":"Page number; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100000},{"name":"per_page","type":"integer","required":false,"description":"Rows per page: 30, 50, 100, 150, 200 or 250.","on_invalid":"reject","default":30,"example":100,"minimum":30,"maximum":250}],"returns":"rows[]: id (give it to `card`), sku (this rank's stock code), product_code (the shop's code for the card), game, name, rarity, card_number, language (null when the shop prints none), language_label, condition (S = sealed, A, B, C, D), condition_label, price_jpy (tax included), stock (units of this rank), in_stock, set{id, name, series_id, series, category_id, category} (null on a sold-out row: the shop omits it there; id null when the shop's name is shared by several sets or the item is filed under a series, as supplies are), image, url, currency, price_includes_tax. One row is one rank of one card; the same card appears once per rank. meta: page, per_page, last_page, has_more, sort, filters_applied, warnings. The shop prints no total count.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"pokemon","keyword":"ピカチュウ"}},{"name":"card","description":"One Toretoku product in full: price, SALE flag and stock for every condition rank (sold-out ranks too), rarity, card number, language, set — and, for Yu-Gi-Oh! and Pokémon, what the shop pays for it.","required_params":["product_id"],"optional_params":["include_buyback"],"params":[{"name":"product_id","type":"string","required":true,"description":"A search row's `id`, or a toretoku.jp/item/details/<id> URL.","on_invalid":"reject","example":"70986","aliases":["id","url"]},{"name":"include_buyback","type":"boolean","required":false,"description":"Also read what the shop pays for this card (yugioh and pokemon).","on_invalid":"reject","default":true,"example":false}],"returns":"card{id, product_code, game, name, rarity, card_number, language, language_label, set{id, name, series_id, series, category_id, category}, price_jpy (cheapest rank in stock), stock, in_stock, conditions[]{condition, condition_label, sku, price_jpy, price_excl_tax_jpy, on_sale, stock, in_stock}, note, attributes, image, url}, buyback (same as buyback_card; null when not offered for this game; status not_listed when the shop has no buy entry for it).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"70986"}},{"name":"buyback_search","description":"What Toretoku pays (買取) for Yu-Gi-Oh! and Pokémon cards: buy price in JPY for an A-rank copy, by name, card number or set, sorted by buy price, with the shop's own total count.","required_params":["game"],"optional_params":["keyword","category_id","priced_only","sort","page","per_page"],"params":[{"name":"game","type":"enum","required":true,"description":"yugioh or pokemon: the two games Toretoku publishes buy prices for.","on_invalid":"reject","allowed_values":[{"value":"yugioh","label":"遊戯王"},{"value":"pokemon","label":"ポケモン"}],"example":"pokemon"},{"name":"keyword","type":"string","required":false,"description":"Card name, or the number printed on the card (PROMO 203/XY-P). Japanese names as the shop writes them; several words narrow it. Up to 50 characters.","on_invalid":"reject","example":"ピカチュウ","aliases":["query","q","name"]},{"name":"category_id","type":"integer","required":false,"description":"A category, series or set id from `sets` with side=buyback (any level; buy-side ids differ from the sale side's). keyword or category_id is required.","on_invalid":"reject","example":3944,"aliases":["set_id","series_id"]},{"name":"priced_only","type":"boolean","required":false,"description":"Only cards the shop quotes a price for (指定買取). false also lists cards it takes only in a bulk parcel (まとめ買取), which have buyback_price_jpy null.","on_invalid":"reject","default":true,"example":false},{"name":"sort","type":"enum","required":false,"description":"Order of the rows.","on_invalid":"reject","allowed_values":[{"value":"price_desc","label":"買取価格の高い順: highest buy price first (default)"},{"value":"price_asc","label":"買取価格の安い順: lowest buy price first"}],"default":"price_desc","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Page number; meta.last_page says how many there are.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100000},{"name":"per_page","type":"integer","required":false,"description":"Rows per page: 30, 50, 100, 150, 200 or 250.","on_invalid":"reject","default":30,"example":100,"minimum":30,"maximum":250}],"returns":"rows[]: item_code (give it to `buyback_card`), product_code, game, name, rarity, card_number, buyback_price_jpy (what the shop pays for an A-rank copy; null when the shop quotes no price), buyback_status (specific = priced, bulk_only = taken only in a まとめ買取 parcel), buyback_condition, shop_sell_price_jpy (the shop's own A-rank selling price for the same card, on priced rows), image, url, currency. meta: total (the shop's count), page, per_page, last_page, has_more, sort, filters_applied.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon","keyword":"ピカチュウ"}},{"name":"buyback_card","description":"One card on the buy-back site: the price the shop pays for an A-rank copy (or that it takes it only in a bulk parcel), its language, set and notes.","required_params":["item_code","game"],"optional_params":[],"params":[{"name":"item_code","type":"string","required":true,"description":"A buyback_search row's item_code, the numeric product code, or a toretoku.jp/kaitori URL.","on_invalid":"reject","example":"183543jat","aliases":["code","url"]},{"name":"game","type":"enum","required":true,"description":"yugioh or pokemon: the two games Toretoku publishes buy prices for.","on_invalid":"reject","allowed_values":[{"value":"yugioh","label":"遊戯王"},{"value":"pokemon","label":"ポケモン"}],"example":"pokemon"}],"returns":"card{item_code (give it to `buyback_card`), product_code, game, name, rarity, card_number, buyback_price_jpy (what the shop pays for an A-rank copy; null when the shop quotes no price), buyback_status (specific = priced, bulk_only = taken only in a まとめ買取 parcel), buyback_condition, shop_sell_price_jpy (the shop's own A-rank selling price for the same card, on priced rows), image, url, currency, language, language_label, set{id, name, series_id, series, category_id, category}, note}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon","item_code":"183543jat"}},{"name":"sets","description":"Every set Toretoku lists for one game with its series and top-level category — the ids `search` takes (side=sale) or `buyback_search` takes (side=buyback).","required_params":["game"],"optional_params":["side"],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: yugioh, pokemon, mtg, duel_masters, one_piece, yugioh_rush_duel, weiss_schwarz or other (also accepted: ポケカ, 遊戯王, ygo, dm, ws).","on_invalid":"reject","allowed_values":[{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモン — Pokémon Trading Card Game"},{"value":"mtg","label":"MTG — Magic: The Gathering"},{"value":"duel_masters","label":"DuelMasters — Duel Masters"},{"value":"one_piece","label":"ワンピースカード — One Piece Card Game"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル — Yu-Gi-Oh! Rush Duel"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"other","label":"その他 — Other games, sealed bundles and supplies"}],"example":"pokemon"},{"name":"side","type":"enum","required":false,"description":"Which tree: the ids of `search` (sale) or of `buyback_search` (buyback; yugioh, pokemon).","on_invalid":"reject","allowed_values":[{"value":"sale","label":"The category tree of the shop"},{"value":"buyback","label":"The buy-back site's tree"}],"default":"sale","example":"buyback"}],"returns":"sets[]{game, category_id, category, series_id, series, set_id, name, url}. meta: game, side, sets.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"game":"yugioh"}},{"name":"recent_orders","description":"Toretoku's live order feed (注文速報) for one game: the 30 latest orders with time, card, condition rank and the price paid — no buyer data.","required_params":["game"],"optional_params":[],"params":[{"name":"game","type":"enum","required":true,"description":"Which game: yugioh, pokemon, mtg, duel_masters, one_piece, yugioh_rush_duel, weiss_schwarz or other (also accepted: ポケカ, 遊戯王, ygo, dm, ws).","on_invalid":"reject","allowed_values":[{"value":"yugioh","label":"遊戯王 — Yu-Gi-Oh! OCG"},{"value":"pokemon","label":"ポケモン — Pokémon Trading Card Game"},{"value":"mtg","label":"MTG — Magic: The Gathering"},{"value":"duel_masters","label":"DuelMasters — Duel Masters"},{"value":"one_piece","label":"ワンピースカード — One Piece Card Game"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル — Yu-Gi-Oh! Rush Duel"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ — Weiß Schwarz"},{"value":"other","label":"その他 — Other games, sealed bundles and supplies"}],"example":"pokemon"}],"returns":"rows[]: position, ordered_at (Japan time, ISO-8601), id, game, name, condition, condition_label, price_jpy, image, url, currency.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"game":"pokemon"}},{"name":"games","description":"The games Toretoku covers, the value each action takes, and which ones have a buy-back price list.","required_params":[],"optional_params":[],"params":[],"returns":"rows[]: game, name, name_en, has_buyback, conditions[], languages[], url.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"trademe","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Trade Me API scraper (New Zealand) - search Trade Me marketplace auctions and Buy Now listings, used cars and property for sale or rent, full listing records with current bid, Buy Now and reserve status, closing time, shipping options, seller feedback, categories and suggestions. Prices in NZD. No account, no browser.","version":"0.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/trademe/v1","spec_available":true,"actions":[{"name":"search","description":"Search Trade Me marketplace listings by keyword, category or seller: listing id, title, the current bid, start price, Buy Now price and what the headline price is, bid count, reserve met or not, closing time, condition, region and suburb, pick-up and free shipping, suggested shipping price, was-price and discount, and the paid upgrades each listing bought. Sponsored listings are separated. Filter by condition, Buy Now, shipping, clearance, region, price (with a category), $1 reserve; sort by best match, price, Buy Now price, most bids, latest, closing soon, title or discount.","required_params":[],"optional_params":["query","category","condition","buy_now_only","shipping","clearance","region","price_min","price_max","dollar_reserve_only","seller_id","sort","page","limit","include_sponsored","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. Optional when a category or seller_id is given.","on_invalid":"reject","example":"mountain bike","aliases":["q","keyword","search_string"]},{"name":"category","type":"string","required":false,"description":"Trade Me category number (0005-0380- = Sports > Cycling). Every row returns category.number; `categories` walks the tree. Required for price_min/price_max.","on_invalid":"reject","example":"0005-0380-","aliases":["category_number"]},{"name":"condition","type":"enum","required":false,"description":"New or used items.","on_invalid":"reject","allowed_values":[{"value":"new","label":"Brand new"},{"value":"used","label":"Used"}]},{"name":"buy_now_only","type":"boolean","required":false,"description":"Only listings with a Buy Now price (includes auctions that also offer one).","on_invalid":"reject"},{"name":"shipping","type":"enum","required":false,"description":"Free shipping, or pick-up available.","on_invalid":"reject","allowed_values":[{"value":"free","label":"Free shipping"},{"value":"pickup","label":"Pick-up available"}]},{"name":"clearance","type":"enum","required":false,"description":"Clearance listings, or listings on sale with a was-price.","on_invalid":"reject","allowed_values":[{"value":"clearance","label":"Clearance listings"},{"value":"on_sale","label":"On sale (a was-price is shown)"}]},{"name":"region","type":"enum","required":false,"description":"Where the seller is located (Trade Me's region list).","on_invalid":"reject","allowed_values":[{"value":"northland","label":"Northland"},{"value":"auckland","label":"Auckland"},{"value":"waikato","label":"Waikato"},{"value":"bay_of_plenty","label":"Bay of Plenty"},{"value":"gisborne","label":"Gisborne"},{"value":"hawkes_bay","label":"Hawke's Bay"},{"value":"taranaki","label":"Taranaki"},{"value":"whanganui","label":"Whanganui"},{"value":"manawatu","label":"Manawatu"},{"value":"wairarapa","label":"Wairarapa"},{"value":"wellington","label":"Wellington"},{"value":"nelson_bays","label":"Nelson Bays"},{"value":"marlborough","label":"Marlborough"},{"value":"west_coast","label":"West Coast"},{"value":"canterbury","label":"Canterbury"},{"value":"timaru_oamaru","label":"Timaru - Oamaru"},{"value":"otago","label":"Otago"},{"value":"southland","label":"Southland"},{"value":"international","label":"International"}],"example":"auckland"},{"name":"price_min","type":"number","required":false,"description":"Lowest price, NZD.","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, NZD.","on_invalid":"reject","example":500,"minimum":0},{"name":"dollar_reserve_only","type":"boolean","required":false,"description":"Only $1 reserve auctions. Works with query, region, condition, shipping and sort; not with category.","on_invalid":"reject"},{"name":"seller_id","type":"integer","required":false,"description":"Only this member's listings (every listing record returns seller.member_id).","on_invalid":"reject","example":5062316,"aliases":["member_id"]},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default)"},{"value":"featured_first","label":"Paid featured listings first"},{"value":"price_asc","label":"Lowest price first (Trade Me orders by the Buy Now price where a listing has one)"},{"value":"price_desc","label":"Highest price first (Trade Me orders by the Buy Now price where a listing has one)"},{"value":"buy_now_asc","label":"Lowest Buy Now price first"},{"value":"buy_now_desc","label":"Highest Buy Now price first"},{"value":"most_bids","label":"Most bids first"},{"value":"newest","label":"Latest listings first"},{"value":"closing_soon","label":"Closing soonest first"},{"value":"title","label":"Title A-Z"},{"value":"largest_discount","label":"Largest discount first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50). Sponsored rows are extra.","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["rows"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the sponsored listings Trade Me injects into every page, flagged sponsored=true. They are left out by default and counted in sponsored_dropped.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"If no listing on the page mentions any query word, the page is returned empty with fallback_results_dropped; true also returns those rows in fallback_results.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, subtitle, url, vertical (marketplace|motors|property), listing_type (auction|buy_now|classified), category{number, path}, price (number, NZD), price_type (current_bid|start_price|buy_now|asking|asking_or_near_offer|enquiries_over|rent_per_week|null), price_display (the site's own text), currency, start_price, current_bid, minimum_next_bid, buy_now_price, asking_price, rent_per_week, was_price, discount_percent, bid_count (auctions; null otherwise), reserve_state (no_reserve|met|not_met|not_applicable), reserve_met, is_clearance, condition (new|used, marketplace only), region, suburb, start_date, search_index_end_date (closing time as the search index publishes it - one hour later than the listing record after a NZ daylight-saving change; listing.end_date is the record's), image, images[] (85 px thumbnails), image_full, images_full[] (the same photos, up to 800 px - the variant the listing record calls FullSize; position i matches images[i]), seller_id, is_super_seller, is_dealer, dealer_name, pickup (allowed|required|not_available), free_shipping, suggested_shipping{price, destination, delivery_days_min, delivery_days_max, rural}, has_afterpay, has_ping, has_variants, is_featured, is_super_featured, has_gallery, is_bold, is_highlighted (paid upgrades), sponsored, vehicle{…} (motors), property{…} (property)}, count (organic rows), total_results, page, limit, has_more, sponsored_count, sponsored_dropped, fallback_results_dropped, did_you_mean, category_facets[]{number, id, name, count}, filters{}, query","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bike","limit":20}},{"name":"listing","description":"One Trade Me listing in full, live or closed: title, description, every photo, the start price, current bid, minimum next bid, Buy Now price or asking price, bid count and bid history amounts, reserve met or not, closing time, time left, status (active or closed) and how a closed auction ended, quantity left, condition, brand, SKU and attributes, shipping options with prices, pick-up, payment methods, questions and answers, the seller's feedback score and positive percentage, the store, car dealer or real-estate agency, and car or property facts. For property, include_estimates adds the homes.co.nz value estimate range, rent estimate per week, rental yield and the council capital value Trade Me shows on the listing.","required_params":["listing_id"],"optional_params":["include_estimates","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Trade Me listing number (from a search row, or the number at the end of a listing URL). A full listing URL works.","on_invalid":"reject","example":"6133847700","aliases":["id","listing","url"]},{"name":"include_estimates","type":"boolean","required":false,"description":"Property listings: also return `estimates` - the homes.co.nz figures Trade Me shows on the listing (sale estimate range, rent estimate per week, rental yield, capital/land/improvement value with their dates). These are homes.co.nz's published estimates, not an asking price. One extra lookup; estimates is null for non-property listings.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, title, subtitle, url, vertical, listing_type, status (active|closed), closed_result (no_bids|reserve_not_met|highest_bid_met_reserve, closed auctions), time_left_seconds, start_date, end_date, as_at, category{number, name, path}, price, price_type, price_display, currency, start_price, current_bid, minimum_next_bid, buy_now_price, asking_price, rent_per_week, was_price, discount_percent, bid_count, reserve_state, reserve_met, is_clearance, condition, quantity_remaining, available_to_buy, sku, gtin, brand, manufacturer_code, description, images[], image, attributes{}, view_count, bidders_and_watchers, unanswered_question_count, region, suburb, location{latitude, longitude, accuracy} (business sellers and property only), pickup, shipping_options[]{type, type_code, price, method}, cheapest_shipping_price, payment_methods[], buyer_protection, seller{member_id, nickname, member_since, feedback_score, positive_count, negative_count, positive_percent, address_verified, authenticated, in_trade, suburb, region}, store{…}, dealership{…}, agency{…}, is_super_seller, is_featured, is_super_featured, has_gallery, is_bold, is_highlighted, bids[]{amount, date, is_buy_now, bidder{nickname (masked by Trade Me), feedback_score, positive_count, negative_count, address_verified, authenticated}}, bid_history_count, questions[]{question, asked_at, answer, answered_at, is_seller_comment, asker{same shape as bidder}}, question_count, vehicle{…}, property{… sale_event_date, suburb_id, region_id}, rating (null), review_count (null), rating_scale (null), estimates{source (homes.co.nz), matched, matched_address, sale_estimate_min, sale_estimate_max, sale_estimate_display (rounded headline, e.g. 1.39M), sale_estimate_date, agent_appraised, rent_estimate_per_week_min, rent_estimate_per_week_max, rental_yield_display, rent_estimate_date, capital_value, land_value, improvement_value, capital_value_date, homes_url} (only with include_estimates=true; matched=false and nulls when homes.co.nz has no match)}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"6133847700"}},{"name":"cars/search","description":"Used and new cars on Trade Me Motors: make, model, year, odometer, fuel, transmission, body style, engine size, owners, import history, WoF and registration expiry, plate and VIN, asking price or auction bids, dealer or private seller. Filter by make, model, year, odometer, price, body style, fuel, transmission, condition, dealer/private, auction/classified and region.","required_params":[],"optional_params":["query","make","model","year_min","year_max","odometer_min","odometer_max","price_min","price_max","body_style","fuel_type","transmission","vehicle_condition","seller_type","listing_format","region","sort","page","limit","include_sponsored","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Optional keyword.","on_invalid":"reject","example":"hilux","aliases":["q","keyword","search_string"]},{"name":"make","type":"string","required":false,"description":"Car make (any capitalisation).","on_invalid":"reject","example":"Toyota"},{"name":"model","type":"string","required":false,"description":"Model of that make (needs make).","on_invalid":"reject","example":"Corolla"},{"name":"year_min","type":"integer","required":false,"description":"Oldest year.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Newest year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"odometer_min","type":"integer","required":false,"description":"Lowest km.","on_invalid":"reject","minimum":0},{"name":"odometer_max","type":"integer","required":false,"description":"Highest km.","on_invalid":"reject","example":100000,"minimum":0},{"name":"price_min","type":"number","required":false,"description":"Lowest price, NZD.","on_invalid":"reject","example":100,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, NZD.","on_invalid":"reject","example":500,"minimum":0},{"name":"body_style","type":"enum","required":false,"description":"Body style.","on_invalid":"reject","allowed_values":[{"value":"convertible","label":"Convertible"},{"value":"coupe","label":"Coupe"},{"value":"hatchback","label":"Hatchback"},{"value":"sedan","label":"Sedan"},{"value":"station_wagon","label":"StationWagon"},{"value":"suv","label":"Suv"},{"value":"ute","label":"Ute"},{"value":"van","label":"Van"}]},{"name":"fuel_type","type":"enum","required":false,"description":"Fuel.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"Petrol"},{"value":"diesel","label":"Diesel"},{"value":"hybrid","label":"Hybrid"},{"value":"plug_in_hybrid","label":"Plug-in hybrid"},{"value":"electric","label":"Electric"},{"value":"lpg","label":"LPG"},{"value":"alternative","label":"Alternative"}]},{"name":"transmission","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"Manual"},{"value":"automatic","label":"Automatic"}]},{"name":"vehicle_condition","type":"enum","required":false,"description":"New, used, classic, ex-demo or certified pre-owned.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"used","label":"Used"},{"value":"classic","label":"Classic"},{"value":"ex_demo","label":"Ex demo"},{"value":"certified_pre_owned","label":"Certified pre owned"}]},{"name":"seller_type","type":"enum","required":false,"description":"Private sellers or dealers.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private sellers"},{"value":"dealer","label":"Dealers"}]},{"name":"listing_format","type":"enum","required":false,"description":"Auctions or classified ads.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Auctions"},{"value":"classified","label":"Classified ads with an asking price"}]},{"name":"region","type":"enum","required":false,"description":"Where the seller is located (Trade Me's region list).","on_invalid":"reject","allowed_values":[{"value":"northland","label":"Northland"},{"value":"auckland","label":"Auckland"},{"value":"waikato","label":"Waikato"},{"value":"bay_of_plenty","label":"Bay of Plenty"},{"value":"gisborne","label":"Gisborne"},{"value":"hawkes_bay","label":"Hawke's Bay"},{"value":"taranaki","label":"Taranaki"},{"value":"whanganui","label":"Whanganui"},{"value":"manawatu","label":"Manawatu"},{"value":"wairarapa","label":"Wairarapa"},{"value":"wellington","label":"Wellington"},{"value":"nelson_bays","label":"Nelson Bays"},{"value":"marlborough","label":"Marlborough"},{"value":"west_coast","label":"West Coast"},{"value":"canterbury","label":"Canterbury"},{"value":"timaru_oamaru","label":"Timaru - Oamaru"},{"value":"otago","label":"Otago"},{"value":"southland","label":"Southland"},{"value":"international","label":"International"}],"example":"auckland"},{"name":"sort","type":"enum","required":false,"description":"Order of results. Without it the site's own default order is used.","on_invalid":"reject","allowed_values":[{"value":"featured_first","label":"Paid featured listings first"},{"value":"price_asc","label":"Lowest price first (opens with $1 auctions)"},{"value":"price_desc","label":"Highest price first"},{"value":"buy_now_asc","label":"Lowest Buy Now price first"},{"value":"buy_now_desc","label":"Highest Buy Now price first"},{"value":"oldest_vehicle","label":"Oldest year first"},{"value":"newest_vehicle","label":"Newest year first"},{"value":"lowest_km","label":"Lowest odometer first"},{"value":"highest_km","label":"Highest odometer first"},{"value":"newest","label":"Latest listings first"},{"value":"closing_soon","label":"Closing soonest first"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50). Sponsored rows are extra.","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["rows"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the sponsored listings Trade Me injects into every page, flagged sponsored=true. They are left out by default and counted in sponsored_dropped.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, subtitle, url, vertical (marketplace|motors|property), listing_type (auction|buy_now|classified), category{number, path}, price (number, NZD), price_type (current_bid|start_price|buy_now|asking|asking_or_near_offer|enquiries_over|rent_per_week|null), price_display (the site's own text), currency, start_price, current_bid, minimum_next_bid, buy_now_price, asking_price, rent_per_week, was_price, discount_percent, bid_count (auctions; null otherwise), reserve_state (no_reserve|met|not_met|not_applicable), reserve_met, is_clearance, condition (new|used, marketplace only), region, suburb, start_date, search_index_end_date (closing time as the search index publishes it - one hour later than the listing record after a NZ daylight-saving change; listing.end_date is the record's), image, images[] (85 px thumbnails), image_full, images_full[] (the same photos, up to 800 px - the variant the listing record calls FullSize; position i matches images[i]), seller_id, is_super_seller, is_dealer, dealer_name, pickup (allowed|required|not_available), free_shipping, suggested_shipping{price, destination, delivery_days_min, delivery_days_max, rural}, has_afterpay, has_ping, has_variants, is_featured, is_super_featured, has_gallery, is_bold, is_highlighted (paid upgrades), sponsored, vehicle{make, model, model_detail, year, odometer_km, fuel, transmission, body_style, engine_size_cc, cylinders, doors, seats, owners, exterior_colour, import_history, is_4wd, number_plate, vin, wof_expires, registration_expires, on_road_costs_included}, property{…} (property)}, count (organic rows), total_results, page, limit, has_more, sponsored_count, sponsored_dropped, fallback_results_dropped, did_you_mean, category_facets[]{number, id, name, count}, filters{}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"Toyota","limit":20}},{"name":"real_estate/search","description":"Residential property on Trade Me Property, for sale or for rent: address, suburb, district, region, property type, bedrooms, bathrooms, land and floor area, parking, how it is being sold (asking price, enquiries over, negotiation, auction, tender, deadline sale) or the weekly rent, available date, agency and open homes, the agency with its agents' names and phone numbers, the auction / tender / deadline date, and every photo in thumbnail and full size (up to 800 px). Filter by region, district, one or more suburbs (by name or id, optionally with the suburbs next to them), price, bedrooms, bathrooms, property type and sale method. Value estimates are on `listing` with include_estimates=true.","required_params":[],"optional_params":["purpose","query","region","district_id","suburb","include_adjacent_suburbs","price_min","price_max","bedrooms_min","bedrooms_max","bathrooms_min","bathrooms_max","property_type","sales_method","sort","page","limit","include_sponsored","max_rotations"],"params":[{"name":"purpose","type":"enum","required":false,"description":"For sale (default) or for rent. Rent prices are NZD per week.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"For sale"},{"value":"rent","label":"For rent"}],"default":"sale"},{"name":"query","type":"string","required":false,"description":"Optional keyword.","on_invalid":"reject","example":"hilux","aliases":["q","keyword","search_string"]},{"name":"region","type":"enum","required":false,"description":"Region of the property.","on_invalid":"reject","allowed_values":[{"value":"northland","label":"Northland"},{"value":"auckland","label":"Auckland"},{"value":"waikato","label":"Waikato"},{"value":"bay_of_plenty","label":"Bay Of Plenty"},{"value":"gisborne","label":"Gisborne"},{"value":"hawkes_bay","label":"Hawke's Bay"},{"value":"taranaki","label":"Taranaki"},{"value":"manawatu_whanganui","label":"Manawatu / Whanganui"},{"value":"wellington","label":"Wellington"},{"value":"nelson_tasman","label":"Nelson / Tasman"},{"value":"marlborough","label":"Marlborough"},{"value":"west_coast","label":"West Coast"},{"value":"canterbury","label":"Canterbury"},{"value":"otago","label":"Otago"},{"value":"southland","label":"Southland"}],"example":"auckland"},{"name":"district_id","type":"integer","required":false,"description":"Trade Me district number inside the region (7 = Auckland City). Needs region.","on_invalid":"reject","example":7,"minimum":1},{"name":"suburb","type":"array","required":false,"description":"One or more suburbs (up to 30): Trade Me suburb ids or names, as a list or comma-separated ('Karori, Kelburn' or [1117, 1345]). Names match without regard to case or accents; a name used in several places (e.g. Kensington) needs region/district_id or the id. real_estate/suburbs lists every name and id; rows return property.suburb_id. Works without region.","on_invalid":"reject","example":"Karori, Kelburn","aliases":["suburbs","suburb_id","suburb_ids"]},{"name":"include_adjacent_suburbs","type":"boolean","required":false,"description":"Also include the suburbs Trade Me lists as next to the chosen ones (the site's own 'include surrounding suburbs'). Needs suburb.","on_invalid":"reject","default":false},{"name":"price_min","type":"number","required":false,"description":"Lowest price, NZD (per week for rent).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, NZD (per week for rent).","on_invalid":"reject","example":800000,"minimum":0},{"name":"bedrooms_min","type":"integer","required":false,"description":"Fewest bedrooms (0 = studio).","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bedrooms_max","type":"integer","required":false,"description":"Most bedrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bathrooms_min","type":"integer","required":false,"description":"Fewest bathrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"bathrooms_max","type":"integer","required":false,"description":"Most bathrooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"property_type","type":"enum","required":false,"description":"Property type. lifestyle_bare_land, lifestyle_dwelling and section exist for sale only; car_park for rent only.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"Apartment"},{"value":"house","label":"House"},{"value":"lifestyle_bare_land","label":"Lifestyle bare land"},{"value":"lifestyle_dwelling","label":"Lifestyle dwelling"},{"value":"section","label":"Section"},{"value":"townhouse","label":"Townhouse"},{"value":"unit","label":"Unit"},{"value":"car_park","label":"Car park"}]},{"name":"sales_method","type":"enum","required":false,"description":"How the property is being sold (for sale only).","on_invalid":"reject","allowed_values":[{"value":"price_displayed","label":"Price displayed"},{"value":"negotiation","label":"Negotiation"},{"value":"auction","label":"Auction"},{"value":"tender","label":"Tender"},{"value":"deadline_sale","label":"Deadline sale"}]},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's default order"},{"value":"price_asc","label":"Lowest price first (opens with placeholder prices)"},{"value":"price_desc","label":"Highest price first"},{"value":"newest","label":"Latest listings first"},{"value":"earliest_open_home","label":"Earliest open home first (for sale only)"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50). Sponsored rows are extra.","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["rows"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the sponsored listings Trade Me injects into every page, flagged sponsored=true. They are left out by default and counted in sponsored_dropped.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, subtitle, url, vertical (marketplace|motors|property), listing_type (auction|buy_now|classified), category{number, path}, price (number, NZD), price_type (current_bid|start_price|buy_now|asking|asking_or_near_offer|enquiries_over|rent_per_week|null), price_display (the site's own text), currency, start_price, current_bid, minimum_next_bid, buy_now_price, asking_price, rent_per_week, was_price, discount_percent, bid_count (auctions; null otherwise), reserve_state (no_reserve|met|not_met|not_applicable), reserve_met, is_clearance, condition (new|used, marketplace only), region, suburb, start_date, search_index_end_date (closing time as the search index publishes it - one hour later than the listing record after a NZ daylight-saving change; listing.end_date is the record's), image, images[] (85 px thumbnails), image_full, images_full[] (the same photos, up to 800 px - the variant the listing record calls FullSize; position i matches images[i]), seller_id, is_super_seller, is_dealer, dealer_name, pickup (allowed|required|not_available), free_shipping, suggested_shipping{price, destination, delivery_days_min, delivery_days_max, rural}, has_afterpay, has_ping, has_variants, is_featured, is_super_featured, has_gallery, is_bold, is_highlighted (paid upgrades), sponsored, vehicle{…} (motors), property{address, suburb, district, region, suburb_id, district_id, region_id, property_type, bedrooms, bathrooms, lounges, parking, total_parking, land_area_m2, floor_area_m2, rateable_value, rent_per_week, available_from (YYYY-MM-DD), max_tenants, sale_method, sale_event_date (auction date, tender close or deadline; null for other sale methods), agency{id, name, phone, website, logo, agents[]{name, position, mobile, office_phone}} (phone fields exactly as the agent filed them on Trade Me - some agents file a mobile number as office_phone; Trade Me publishes no agent email), agency_reference, open_homes[]{start, end}, location{latitude, longitude, accuracy}}}, count (organic rows), total_results, page, limit, has_more, sponsored_count, sponsored_dropped, fallback_results_dropped, did_you_mean, category_facets[]{number, id, name, count}, filters{}, filters.suburbs[]{suburb_id, name, district_id, district, region}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"hilux"}},{"name":"real_estate/suburbs","description":"Trade Me's own list of New Zealand suburbs with their ids, district and region, and the suburbs it counts as next to each one - the ids and names real_estate/search takes in `suburb`. Filter by region, district or part of a name.","required_params":[],"optional_params":["region","district_id","query","max_rotations"],"params":[{"name":"region","type":"enum","required":false,"description":"Region of the property.","on_invalid":"reject","allowed_values":[{"value":"northland","label":"Northland"},{"value":"auckland","label":"Auckland"},{"value":"waikato","label":"Waikato"},{"value":"bay_of_plenty","label":"Bay Of Plenty"},{"value":"gisborne","label":"Gisborne"},{"value":"hawkes_bay","label":"Hawke's Bay"},{"value":"taranaki","label":"Taranaki"},{"value":"manawatu_whanganui","label":"Manawatu / Whanganui"},{"value":"wellington","label":"Wellington"},{"value":"nelson_tasman","label":"Nelson / Tasman"},{"value":"marlborough","label":"Marlborough"},{"value":"west_coast","label":"West Coast"},{"value":"canterbury","label":"Canterbury"},{"value":"otago","label":"Otago"},{"value":"southland","label":"Southland"}],"example":"auckland"},{"name":"district_id","type":"integer","required":false,"description":"Only this district (47 = Wellington City). Every suburb row returns district_id.","on_invalid":"reject","example":47,"minimum":1},{"name":"query","type":"string","required":false,"description":"Only suburbs whose name contains this text (case and accents ignored).","on_invalid":"reject","example":"kar","aliases":["q","name"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suburbs[]{suburb_id, name, district_id, district, region (the region value real_estate/search takes), region_id, region_name, adjacent_suburb_ids[]}, count, districts[]{district_id, district, region, region_id, suburb_count}, filters{}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"region":"auckland"}},{"name":"seller_listings","description":"A Trade Me member's profile and current marketplace listings: nickname, member since, feedback score, positive and negative counts and positive percentage, address verified, in-trade flag, store, then their listings with the same row fields and sorts as search.","required_params":["seller_id"],"optional_params":["sort","page","limit","include_sponsored","max_rotations"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"Trade Me member number (every listing record returns seller.member_id; rows return seller_id).","on_invalid":"reject","example":5062316,"aliases":["member_id"]},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Best match (the site's default)"},{"value":"featured_first","label":"Paid featured listings first"},{"value":"price_asc","label":"Lowest price first (Trade Me orders by the Buy Now price where a listing has one)"},{"value":"price_desc","label":"Highest price first (Trade Me orders by the Buy Now price where a listing has one)"},{"value":"buy_now_asc","label":"Lowest Buy Now price first"},{"value":"buy_now_desc","label":"Highest Buy Now price first"},{"value":"most_bids","label":"Most bids first"},{"value":"newest","label":"Latest listings first"},{"value":"closing_soon","label":"Closing soonest first"},{"value":"title","label":"Title A-Z"},{"value":"largest_discount","label":"Largest discount first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50). Sponsored rows are extra.","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["rows"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the sponsored listings Trade Me injects into every page, flagged sponsored=true. They are left out by default and counted in sponsored_dropped.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"seller{member_id, nickname, member_since, feedback_score, positive_count, negative_count, positive_percent, address_verified, authenticated, in_trade, suburb, region, store{…}, biography, enabled}, results[]{listing_id, title, subtitle, url, vertical (marketplace|motors|property), listing_type (auction|buy_now|classified), category{number, path}, price (number, NZD), price_type (current_bid|start_price|buy_now|asking|asking_or_near_offer|enquiries_over|rent_per_week|null), price_display (the site's own text), currency, start_price, current_bid, minimum_next_bid, buy_now_price, asking_price, rent_per_week, was_price, discount_percent, bid_count (auctions; null otherwise), reserve_state (no_reserve|met|not_met|not_applicable), reserve_met, is_clearance, condition (new|used, marketplace only), region, suburb, start_date, search_index_end_date (closing time as the search index publishes it - one hour later than the listing record after a NZ daylight-saving change; listing.end_date is the record's), image, images[] (85 px thumbnails), image_full, images_full[] (the same photos, up to 800 px - the variant the listing record calls FullSize; position i matches images[i]), seller_id, is_super_seller, is_dealer, dealer_name, pickup (allowed|required|not_available), free_shipping, suggested_shipping{price, destination, delivery_days_min, delivery_days_max, rural}, has_afterpay, has_ping, has_variants, is_featured, is_super_featured, has_gallery, is_bold, is_highlighted (paid upgrades), sponsored, vehicle{…} (motors), property{…} (property)}, count (organic rows), total_results, page, limit, has_more, sponsored_count, sponsored_dropped, fallback_results_dropped, did_you_mean, category_facets[]{number, id, name, count}, filters{}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":5062316}},{"name":"seller_feedback","description":"Feedback left for a Trade Me member, newest first: positive or negative, the comment, date, whether a buyer or a seller left it, the listing and price it was for, and the member's reply.","required_params":["seller_id"],"optional_params":["page","limit","max_rotations"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"Trade Me member number (every listing record returns seller.member_id; rows return seller_id).","on_invalid":"reject","example":5062316,"aliases":["member_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50). Sponsored rows are extra.","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["rows"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"seller_id, feedback[]{feedback_id, type (positive|negative; null for other codes), type_code, text, date, left_by (buyer|seller), listing_id, purchase_price, response, responded_at}, count, total_results, page, has_more","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":5062316}},{"name":"categories","description":"The Trade Me category tree one level at a time: a category's number, name and path and its sub-categories, with whether each carries classified ads.","required_params":[],"optional_params":["category","max_rotations"],"params":[{"name":"category","type":"string","required":false,"description":"Category number to open; omit for the top level.","on_invalid":"reject","example":"0005-","aliases":["category_number"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"category{number, name, path, is_leaf}, children[]{number, name, path, is_leaf, has_classifieds}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"0005-"}},{"name":"suggest","description":"Trade Me's own search suggestions for the start of a keyword, with suggested categories.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a keyword.","on_invalid":"reject","example":"bik","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"query, suggestions[]{keyword, categories[]{id, name}}, count, category_suggestions[]{id, name, path[]}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bike"}}]},{"name":"tradera","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Tradera — Swedish auction & fixed-price marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/tradera/v1","spec_available":true,"actions":[{"name":"search","description":"Search Tradera — live listings, sold listings or unsold ones — across both sale types. Every filter is optional, but give at least `query` or `category_id` so the answer means something. Auction rows and fixed-price rows carry different fields: an auction has starting_bid/current_bid/bid_count/ends_at, a buy-now listing has buy_now_price. A field the listing does not have is null. All amounts are in SEK.","required_params":[],"optional_params":["query","category_id","status","listing_type","seller_type","county","sort","min_price","max_price","page","max_results"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over listing title and description, in Swedish (e.g. 'rolex', 'iittala vas', 'lego star wars'). Leave it out and give `category_id` to browse a whole category instead.","on_invalid":"reject","example":"rolex","aliases":["q","keywords","search","term","text"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one Tradera category by its numeric id. Call the `categories` action for the ids, their names and how many matching listings each holds.","on_invalid":"reject","example":19,"minimum":1,"aliases":["category","cat","categoryId"]},{"name":"status","type":"enum","required":false,"description":"Which side of the marketplace to search. 'live' = still running; 'sold' and 'unsold' are the two halves of the closed archive and are separate queries — a closed listing is NOT automatically a sale.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Listings still running — an auction you can bid on or an item you can buy"},{"value":"sold","label":"Closed listings that found a buyer"},{"value":"unsold","label":"Closed listings that did NOT sell (no bid, or the reserve was not met)"}],"default":"live","example":"sold","aliases":["itemStatus","item_status","state","phase"]},{"name":"listing_type","type":"enum","required":false,"description":"Tradera sells two ways and the fields differ. 'auction' covers timed auctions (including ones that also carry a buy-now price); 'fixed_price' covers buy-now listings. Read `listing_type` on each row to tell them apart.","on_invalid":"reject","allowed_values":[{"value":"any","label":"Auctions and fixed-price listings together (default)"},{"value":"auction","label":"Timed auctions, including those that also carry a buy-now price"},{"value":"fixed_price","label":"Buy-now listings"},{"value":"contact_only","label":"Listings with no online price — contact the seller"}],"default":"any","example":"auction","aliases":["itemType","item_type","type","sale_type"]},{"name":"seller_type","type":"enum","required":false,"description":"Restrict to private sellers or to companies.","on_invalid":"reject","allowed_values":[{"value":"any","label":"Private sellers and companies (default)"},{"value":"private","label":"Private individuals only"},{"value":"company","label":"Registered companies only"}],"default":"any","example":"company","aliases":["sellerType","seller"]},{"name":"county","type":"enum","required":false,"description":"Restrict to sellers in one Swedish county (Tradera's own spelling, without diacritics). 'HelaSverige' means the whole country, i.e. no restriction.","on_invalid":"reject","allowed_values":[{"value":"HelaSverige","label":"All of Sweden"},{"value":"Blekinge","label":"Blekinge"},{"value":"Dalarna","label":"Dalarna"},{"value":"Gavleborg","label":"Gävleborg"},{"value":"Gotland","label":"Gotland"},{"value":"Halland","label":"Halland"},{"value":"Jamtland","label":"Jämtland"},{"value":"Jonkoping","label":"Jönköping"},{"value":"Kalmar","label":"Kalmar"},{"value":"Kronoberg","label":"Kronoberg"},{"value":"Norrbotten","label":"Norrbotten"},{"value":"Skane","label":"Skåne"},{"value":"Sodermanland","label":"Södermanland"},{"value":"Stockholm","label":"Stockholm"},{"value":"Uppsala","label":"Uppsala"},{"value":"Varmland","label":"Värmland"},{"value":"Vasterbotten","label":"Västerbotten"},{"value":"Vasternorrland","label":"Västernorrland"},{"value":"Vastmanland","label":"Västmanland"},{"value":"VastraGotaland","label":"Västra Götaland"},{"value":"Orebro","label":"Örebro"},{"value":"Ostergotland","label":"Östergötland"}],"example":"Stockholm","aliases":["region","lan","province"]},{"name":"sort","type":"enum","required":false,"description":"Row order. The price orders rank by the row's own price, which for an auction with no bids is its starting price.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Tradera's own relevance ranking (default)"},{"value":"ending_soonest","label":"Least time left first"},{"value":"newest","label":"Most recently listed first"},{"value":"price_high_first","label":"Highest price first"},{"value":"price_low_first","label":"Lowest price first"},{"value":"price_with_shipping_high_first","label":"Highest price including shipping first"},{"value":"price_with_shipping_low_first","label":"Lowest price including shipping first"},{"value":"most_bids","label":"Most bids first"},{"value":"least_bids","label":"Fewest bids first"},{"value":"most_wishlisted","label":"Most often added to a wish list first"}],"default":"relevance","example":"ending_soonest","aliases":["sortBy","sort_by","order","order_by"]},{"name":"min_price","type":"integer","required":false,"description":"Lowest price in SEK (inclusive). Tradera applies it to the row's own price.","on_invalid":"reject","example":100,"minimum":0,"aliases":["fromPrice","from_price","price_min","priceFrom"]},{"name":"max_price","type":"integer","required":false,"description":"Highest price in SEK (inclusive).","on_invalid":"reject","example":2000,"minimum":0,"aliases":["toPrice","to_price","price_max","priceTo"]},{"name":"page","type":"integer","required":false,"description":"1-based page of 80 listings. Tradera serves at most 10,000 listings per query, so the last reachable page is 125 — narrow the query to reach deeper listings.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":125,"aliases":["paging","p","page_number"]},{"name":"max_results","type":"integer","required":false,"description":"How many of the page's listings to return, 1-80. Tradera's page size is fixed at 80; a smaller number just trims the answer.","on_invalid":"reject","default":80,"example":40,"minimum":1,"maximum":80,"aliases":["limit","count","per_page","page_size","size"]}],"returns":"{query, status, total_available, page, page_count, currency, results[]} — each result has item_id, url, title, listing_type, is_auction, is_buy_now, currency, starting_bid, current_bid, buy_now_price, final_price, bid_count, reserve_met, is_ended, is_sold, starts_at, ends_at, category_id, seller, shipping_options, free_shipping, condition, images.","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex","max_results":10}},{"name":"detail","description":"One Tradera listing in full: the seller's own description and attributes, the category path, every image, the shipping and payment options, the seller's profile and rating, and — for an auction — the opening bid, the leading bid and the next valid bid. Takes the numeric item id or any tradera.com item URL.","required_params":["item"],"optional_params":[],"params":[{"name":"item","type":"string","required":true,"description":"The numeric Tradera item id, or a full item URL such as https://www.tradera.com/item/1923/748340097/…","on_invalid":"reject","example":"752099400","value_pattern":"\\d{4,}|https?://.*tradera\\.com/.*","aliases":["item_id","itemId","id","listing","url","link"]}],"returns":"One listing object — the search row plus description, condition, attributes, category_path, quantity, view_count, opening_bid, leading_bid, next_bid_amount, payment_options and a full seller block.","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"item":"752099400"}},{"name":"categories","description":"Tradera's category tree with a live listing count per category — the ids the `category_id` filter takes. Scope it with `query` and/or `category_id` to see how a search splits across categories, or call it bare for the top level. Also returns the attribute facets (brand, condition, colour…) Tradera publishes for that scope.","required_params":[],"optional_params":["query","category_id","status"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search over listing title and description, in Swedish (e.g. 'rolex', 'iittala vas', 'lego star wars'). Leave it out and give `category_id` to browse a whole category instead.","on_invalid":"reject","example":"rolex","aliases":["q","keywords","search","term","text"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one Tradera category by its numeric id. Call the `categories` action for the ids, their names and how many matching listings each holds.","on_invalid":"reject","example":19,"minimum":1,"aliases":["category","cat","categoryId"]},{"name":"status","type":"enum","required":false,"description":"Which side of the marketplace to search. 'live' = still running; 'sold' and 'unsold' are the two halves of the closed archive and are separate queries — a closed listing is NOT automatically a sale.","on_invalid":"reject","allowed_values":[{"value":"live","label":"Listings still running — an auction you can bid on or an item you can buy"},{"value":"sold","label":"Closed listings that found a buyer"},{"value":"unsold","label":"Closed listings that did NOT sell (no bid, or the reserve was not met)"}],"default":"live","example":"sold","aliases":["itemStatus","item_status","state","phase"]}],"returns":"{query, total_available, categories[], facets[]} — each category {id, name, url, item_count, children[]}, each facet {parameter, name, values[]}.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"rolex"}},{"name":"seller","description":"A Tradera seller's public profile — alias, city, member-since, rating count and detailed seller rating, follower counts, company flag — together with their currently active listings. Takes the numeric member id, which every search row and listing carries as `seller.member_id`.","required_params":["member_id"],"optional_params":["page","max_results"],"params":[{"name":"member_id","type":"integer","required":true,"description":"The seller's numeric Tradera member id, as returned in `seller.member_id` by `search` and `detail`.","on_invalid":"reject","example":2499738,"minimum":1,"aliases":["memberId","seller_id","sellerMemberId","member","id","profile_id"]},{"name":"page","type":"integer","required":false,"description":"1-based page of 80 listings. Tradera serves at most 10,000 listings per query, so the last reachable page is 125 — narrow the query to reach deeper listings.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":125,"aliases":["paging","p","page_number"]},{"name":"max_results","type":"integer","required":false,"description":"How many of the page's listings to return, 1-80. Tradera's page size is fixed at 80; a smaller number just trims the answer.","on_invalid":"reject","default":80,"example":40,"minimum":1,"maximum":80,"aliases":["limit","count","per_page","page_size","size"]}],"returns":"{seller{…}, active_listings_count, page, page_count, results[]} — the results use the same row shape as `search`.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"member_id":2499738}}]},{"name":"traktorpool","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"traktorpool API — live used and new agricultural machinery listings from traktorpool.de, a German farm-machinery marketplace (about 150,000 listings: tractors, combines, balers, tillage, sprayers, telehandlers, parts). Search by keyword, machine group, machine type, manufacturer or seller and read every listing in full: net and gross price with the seller's VAT rate, year of construction, hour meter, engine power, condition, location, the full technical table, extras, description, photos and the dealer behind it. No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/traktorpool/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse the marketplace by keyword, machine group/type, manufacturer, model, seller, seller type, condition, year, net price, hour meter, engine power, seller country, postal code + radius and listing age; every filter measured to bite against an unfiltered control. An empty call browses all ~150,000 listings. Returns the organic rows plus the paid top-offer cards the page shows (flagged), with the source's own exact total. 25/50/100 rows a page, at most 15 pages.","required_params":[],"optional_params":["query","category_id","subcategory_id","manufacturer_id","model","seller_id","seller_type","condition","year_min","year_max","price_min","price_max","operating_hours_min","operating_hours_max","power_kw_min","power_kw_max","country","zip_code","radius_km","listed_within_days","with_images","with_videos","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text search, as typed into the site's own search box. Combines with the category, manufacturer and seller filters. Measured: 'vario' 3,910 listings across the marketplace, 2,282 inside category 24 (tractors).","on_invalid":"reject","example":"vario","aliases":["q","keyword"]},{"name":"category_id","type":"integer","required":false,"description":"Top-level machine group id, the number in the site's own '/gebraucht/a-<name>/<id>/' URLs and the `category_group_id` of a detail record. Examples: 24 Traktoren, 6 Erntemaschinen, 11 Grünlandgeräte, 4 Bodenbearbeitung, 23 parts market, 14 yard loaders/excavators/forklifts.","on_invalid":"reject","example":24,"minimum":1,"aliases":["group_id"]},{"name":"subcategory_id","type":"integer","required":false,"description":"Machine type id inside a group (the '/b-<name>/<id>/' URL part, `category_id` of a detail record), e.g. 95 = Traktoren inside group 24. Requires `category_id`.","on_invalid":"reject","example":95,"minimum":1},{"name":"manufacturer_id","type":"integer","required":false,"description":"Manufacturer id, the number in '/gebraucht/c-<name>/<id>/' and `manufacturer_id` of a detail record. Examples: 159 Fendt, 85 John Deere, 39 Claas, 163 New Holland, 161 Massey Ferguson, 157 Deutz-Fahr, 155 Case IH, 805 Valtra, 308 Kubota.","on_invalid":"reject","example":159,"minimum":1,"aliases":["brand_id"]},{"name":"model","type":"string","required":false,"description":"Model text as the source matches it. Fendt + model 828: 253 listings, 24 of 24 rows carry 828.","on_invalid":"reject","example":"828"},{"name":"seller_id","type":"integer","required":false,"description":"Only this seller's listings (the `seller_id` of a search row or detail record).","on_invalid":"reject","example":49505,"minimum":1,"aliases":["vendor_id","dealer_id"]},{"name":"seller_type","type":"enum","required":false,"description":"Dealer or private seller. Fendt: commercial 4,914 + private 137 = 5,051 (an exact split).","on_invalid":"reject","allowed_values":[{"value":"commercial","label":"Gewerblich / dealer"},{"value":"private","label":"Privat / private seller"}],"example":"commercial","aliases":["vendor_status"]},{"name":"condition","type":"enum","required":false,"description":"The source's own condition values. Fendt: used 3,654 / new 697 of 5,051.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Gebraucht / used"},{"value":"new","label":"Neu / new"},{"value":"demonstration","label":"Vorfuehrmaschine / demo"},{"value":"showroom_machine","label":"Ausstellungsmaschine / showroom"},{"value":"accident_or_fire_damage","label":"Unfall/Brandschaden / accident or fire damage"}],"example":"used"},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. Measured: Fendt 5,051 -> 943 with year_min=2024, 0 of 24 rows outside.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive. Fendt 2015-2020: 984 listings, 0 of 21 rows outside.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR, net of VAT (the figure the rows return as price_net).","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR, net of VAT. Fendt 10,000-50,000: 587 listings, 0 of 23 rows outside.","on_invalid":"reject","example":50000,"minimum":0},{"name":"operating_hours_min","type":"integer","required":false,"description":"Hour meter at least this. NEEDS subcategory_id: without a machine type the source ignores it (measured: Fendt 5,051 -> 5,051, 6 of 9 rows outside), so the call is refused. Fendt tractors (subcategory 95) >= 10,000 h: 412 listings, 0 of 25 rows outside.","on_invalid":"reject","example":0,"minimum":0},{"name":"operating_hours_max","type":"integer","required":false,"description":"Hour meter at most this. NEEDS subcategory_id. Fendt tractors <= 2,000 h: 738 of 2,888, 0 of 24 rows outside. Listings that do not state hours are dropped by the source, and its 'may still match' padding after the real matches is cut.","on_invalid":"reject","example":2000,"minimum":0},{"name":"power_kw_min","type":"integer","required":false,"description":"Engine power at least this many kW. NEEDS subcategory_id (same rule as hours).","on_invalid":"reject","example":150,"minimum":0},{"name":"power_kw_max","type":"integer","required":false,"description":"Engine power at most this many kW. NEEDS subcategory_id. Fendt tractors 150-250 kW: 986, 0 of 23 rows outside.","on_invalid":"reject","example":250,"minimum":0},{"name":"country","type":"string","required":false,"description":"Seller country, ISO 3166 alpha-2 (the source's own list of 190 codes). Fendt in NL: 565, 0 of 25 rows outside the Netherlands.","on_invalid":"reject","example":"DE","value_pattern":"^[A-Za-z]{2}$","aliases":["country_code"]},{"name":"zip_code","type":"string","required":false,"description":"Postal code to search around; needs `country` and `radius_km`. The distance is to the postal code you give, not to anything on our side. Fendt, DE 80331, 50 km: 13 listings.","on_invalid":"reject","example":"80331","aliases":["zipcode","postcode"]},{"name":"radius_km","type":"enum","required":false,"description":"Radius around zip_code, the source's own steps.","on_invalid":"reject","allowed_values":[{"value":"10","label":"10 km"},{"value":"25","label":"25 km"},{"value":"50","label":"50 km"},{"value":"100","label":"100 km"},{"value":"150","label":"150 km"},{"value":"200","label":"200 km"},{"value":"300","label":"300 km"},{"value":"400","label":"400 km"}],"example":"50"},{"name":"listed_within_days","type":"enum","required":false,"description":"Only listings published in the last N days (the source's own choices). Fendt, 7 days: 394.","on_invalid":"reject","allowed_values":[{"value":"1","label":"listed in the last 1 day(s)"},{"value":"2","label":"listed in the last 2 day(s)"},{"value":"3","label":"listed in the last 3 day(s)"},{"value":"7","label":"listed in the last 7 day(s)"},{"value":"14","label":"listed in the last 14 day(s)"},{"value":"30","label":"listed in the last 30 day(s)"},{"value":"90","label":"listed in the last 90 day(s)"},{"value":"365","label":"listed in the last 365 day(s)"}],"example":"7"},{"name":"with_images","type":"boolean","required":false,"description":"Only listings with photos.","on_invalid":"reject","example":true},{"name":"with_videos","type":"boolean","required":false,"description":"Only listings with a video. Fendt: 17.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Order of the result list, the site's own six orders.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Source default order (paid top offers first)"},{"value":"newest","label":"Newest listings first"},{"value":"price_asc","label":"Price ascending"},{"value":"price_desc","label":"Price descending"},{"value":"year_asc","label":"Year of construction ascending"},{"value":"year_desc","label":"Year of construction descending"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page. Capped at 15: deeper pages are refused by the source's own anti-bot layer (page 20, 50 and 202 measured refused). Use page_size=100 to read further (up to 1,500 rows per query) or narrow the query.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":15},{"name":"page_size","type":"enum","required":false,"description":"Organic rows per page, the source's own choices. Paid top-offer cards come on top (5 extra cards on a 25-row page).","on_invalid":"reject","allowed_values":[{"value":"25","label":"25 organic rows per page"},{"value":"50","label":"50 organic rows per page"},{"value":"100","label":"100 organic rows per page"}],"default":"25","example":"25"}],"returns":"data.listings[]: listing_id, url, title, manufacturer, model, category_slug, condition, price_net (EUR, VAT excluded as the source prints it), price_printed, price_mismatch, currency, price_on_request, vat_note, vat_rate, location, location_zip_city, location_country, year, power_kw, operating_hours, summary, seller_name, seller_id, image_url, image_count, badges, is_top_offer, rank. data.total = the source's own exact match count; data.pagination = page, page_size, last_page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"manufacturer_id":159,"category_id":24}},{"name":"detail","description":"One listing in full by its listing number.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"The listing number ('Inserats-Nr.'), the `listing_id` of a search row.","on_invalid":"reject","example":"9000462","aliases":["id","machine_id"]}],"returns":"data.listing: listing_id, url, title, manufacturer(+_id), model, category_group(+_id), category(+_id), condition, condition_label, seller_type, year, operating_hours, power_kw, price_net, price_gross, vat_rate, currency, price_printed, price_gross_printed, price_on_request, price_mismatch, finance_example_monthly, location, location_zip_city, location_country, specs[] {label, value} (every row of the technical table as the seller filled it, German labels), extras[], description, images[], breadcrumbs[], seller {seller_id, name, address, verified, member_since, listings_online, imprint, listings_url}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"9000462"}}]},{"name":"translate","category":{"id":"utilities","title":"Utilities & AI"},"title":"Translate API — free, keyless machine translation & text-to-speech powered by Google Translate: translate text into 130+ languages (single or MULTI-target in one call), turn text into spoken MP3 audio (text-to-speech / TTS) in any language, auto-detect the source language, and look up word-level dictionary meanings, synonyms and transliteration. Works with every script (Chinese, Japanese, Arabic, Cyrillic, Hindi). No API key, no Google Cloud project required.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/translate/v1","spec_available":true,"actions":[{"name":"translate","description":"Translate text into a single target language. Auto-detects the source by default and returns the detected language + confidence. Supports every script.","required_params":["text","target"],"optional_params":["source"],"params":[{"name":"text","type":"string","required":true,"description":"The text to translate. Plain UTF-8 — any script works (Latin, Chinese, Japanese, Arabic, Cyrillic…). Up to 5000 characters per call; longer input is truncated and flagged in meta.truncated.","on_invalid":"reject","example":"Hello, how are you?","aliases":["q","query"]},{"name":"target","type":"enum","required":true,"description":"Target language code to translate INTO (e.g. 'es', 'fr', 'ja', 'ar'). Must be one of the supported codes (see the 'languages' action). Friendly aliases like 'zh' or 'he' are accepted.","on_invalid":"reject","allowed_values":[{"value":"af","label":"Afrikaans"},{"value":"sq","label":"Albanian"},{"value":"am","label":"Amharic"},{"value":"ar","label":"Arabic"},{"value":"hy","label":"Armenian"},{"value":"as","label":"Assamese"},{"value":"ay","label":"Aymara"},{"value":"az","label":"Azerbaijani"},{"value":"bm","label":"Bambara"},{"value":"eu","label":"Basque"},{"value":"be","label":"Belarusian"},{"value":"bn","label":"Bengali"},{"value":"bho","label":"Bhojpuri"},{"value":"bs","label":"Bosnian"},{"value":"bg","label":"Bulgarian"},{"value":"ca","label":"Catalan"},{"value":"ceb","label":"Cebuano"},{"value":"ny","label":"Chichewa"},{"value":"zh-CN","label":"Chinese (Simplified)"},{"value":"zh-TW","label":"Chinese (Traditional)"},{"value":"co","label":"Corsican"},{"value":"hr","label":"Croatian"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"dv","label":"Divehi"},{"value":"doi","label":"Dogri"},{"value":"nl","label":"Dutch"},{"value":"en","label":"English"},{"value":"eo","label":"Esperanto"},{"value":"et","label":"Estonian"},{"value":"ee","label":"Ewe"},{"value":"tl","label":"Filipino"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"fy","label":"Frisian"},{"value":"gl","label":"Galician"},{"value":"ka","label":"Georgian"},{"value":"de","label":"German"},{"value":"el","label":"Greek"},{"value":"gn","label":"Guarani"},{"value":"gu","label":"Gujarati"},{"value":"ht","label":"Haitian Creole"},{"value":"ha","label":"Hausa"},{"value":"haw","label":"Hawaiian"},{"value":"iw","label":"Hebrew"},{"value":"hi","label":"Hindi"},{"value":"hmn","label":"Hmong"},{"value":"hu","label":"Hungarian"},{"value":"is","label":"Icelandic"},{"value":"ig","label":"Igbo"},{"value":"ilo","label":"Ilocano"},{"value":"id","label":"Indonesian"},{"value":"ga","label":"Irish"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"jw","label":"Javanese"},{"value":"kn","label":"Kannada"},{"value":"kk","label":"Kazakh"},{"value":"km","label":"Khmer"},{"value":"rw","label":"Kinyarwanda"},{"value":"gom","label":"Konkani"},{"value":"ko","label":"Korean"},{"value":"kri","label":"Krio"},{"value":"ku","label":"Kurdish (Kurmanji)"},{"value":"ckb","label":"Kurdish (Sorani)"},{"value":"ky","label":"Kyrgyz"},{"value":"lo","label":"Lao"},{"value":"la","label":"Latin"},{"value":"lv","label":"Latvian"},{"value":"ln","label":"Lingala"},{"value":"lt","label":"Lithuanian"},{"value":"lg","label":"Luganda"},{"value":"lb","label":"Luxembourgish"},{"value":"mk","label":"Macedonian"},{"value":"mai","label":"Maithili"},{"value":"mg","label":"Malagasy"},{"value":"ms","label":"Malay"},{"value":"ml","label":"Malayalam"},{"value":"mt","label":"Maltese"},{"value":"mi","label":"Maori"},{"value":"mr","label":"Marathi"},{"value":"mni-Mtei","label":"Meiteilon (Manipuri)"},{"value":"lus","label":"Mizo"},{"value":"mn","label":"Mongolian"},{"value":"my","label":"Myanmar (Burmese)"},{"value":"ne","label":"Nepali"},{"value":"no","label":"Norwegian"},{"value":"or","label":"Odia (Oriya)"},{"value":"om","label":"Oromo"},{"value":"ps","label":"Pashto"},{"value":"fa","label":"Persian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"pa","label":"Punjabi"},{"value":"qu","label":"Quechua"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sm","label":"Samoan"},{"value":"sa","label":"Sanskrit"},{"value":"gd","label":"Scots Gaelic"},{"value":"nso","label":"Sepedi"},{"value":"sr","label":"Serbian"},{"value":"st","label":"Sesotho"},{"value":"sn","label":"Shona"},{"value":"sd","label":"Sindhi"},{"value":"si","label":"Sinhala"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"so","label":"Somali"},{"value":"es","label":"Spanish"},{"value":"su","label":"Sundanese"},{"value":"sw","label":"Swahili"},{"value":"sv","label":"Swedish"},{"value":"tg","label":"Tajik"},{"value":"ta","label":"Tamil"},{"value":"tt","label":"Tatar"},{"value":"te","label":"Telugu"},{"value":"th","label":"Thai"},{"value":"ti","label":"Tigrinya"},{"value":"ts","label":"Tsonga"},{"value":"tr","label":"Turkish"},{"value":"tk","label":"Turkmen"},{"value":"ak","label":"Twi"},{"value":"uk","label":"Ukrainian"},{"value":"ur","label":"Urdu"},{"value":"ug","label":"Uyghur"},{"value":"uz","label":"Uzbek"},{"value":"vi","label":"Vietnamese"},{"value":"cy","label":"Welsh"},{"value":"xh","label":"Xhosa"},{"value":"yi","label":"Yiddish"},{"value":"yo","label":"Yoruba"},{"value":"zu","label":"Zulu"}],"example":"es","aliases":["to","tl"]},{"name":"source","type":"string","required":false,"description":"Source language code (ISO-639-style, e.g. 'en', 'de', 'zh-CN'). Defaults to 'auto' — the language is detected automatically and returned as detected_source. See the 'languages' action for codes.","on_invalid":"reject","default":"auto","example":"en","aliases":["from","sl"]}],"returns":"text (translated), source_text, source (used/detected), target, detected_source, detection_confidence, source_language_name, target_language_name","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"text":"Hello, how are you?","target":"es"}},{"name":"translate_multi","description":"Translate the SAME text into MANY target languages in a single call — the multi-target differentiator. Pass up to 60 target codes; returns a translation for each, fanned out concurrently (≈15× faster than calling translate per language).","required_params":["text","targets"],"optional_params":["source"],"params":[{"name":"text","type":"string","required":true,"description":"The text to translate. Plain UTF-8 — any script works (Latin, Chinese, Japanese, Arabic, Cyrillic…). Up to 5000 characters per call; longer input is truncated and flagged in meta.truncated.","on_invalid":"reject","example":"Hello, how are you?","aliases":["q","query"]},{"name":"targets","type":"array","required":true,"description":"List of target language codes to translate the SAME text into, in ONE call (e.g. ['es','fr','de','ja','ar']). Accepts a JSON array or a comma-separated string. Up to 60 targets; unknown codes are rejected (never silently skipped).","on_invalid":"reject","example":["es","fr","de","ja","ar"],"aliases":["to","langs","tl"]},{"name":"source","type":"string","required":false,"description":"Source language code (ISO-639-style, e.g. 'en', 'de', 'zh-CN'). Defaults to 'auto' — the language is detected automatically and returned as detected_source. See the 'languages' action for codes.","on_invalid":"reject","default":"auto","example":"en","aliases":["from","sl"]}],"returns":"source_text, source, detected_source, translations{code:{text, language_name}}, errors{code:reason} (per-target), count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"text":"The weather is beautiful today.","targets":["es","fr","de","ja","ar"]}},{"name":"translate_batch","description":"Translate MANY strings into ONE target language in a single call — built for catalogue work (product titles, spec values, category names). Send up to 500 strings as an array and get an array back in the SAME order, index for index. Costs ONE upstream call regardless of how many strings you send, so a 500-title page is one request instead of 500. Items the upstream could not translate are listed in `failed[]` with a reason and come back as text:null — never as an empty string and never silently dropped.","required_params":["texts","target"],"optional_params":["source"],"params":[{"name":"texts","type":"array","required":true,"description":"The strings to translate, as a JSON array — e.g. a page of product titles or spec values. Order is preserved: result[i] always corresponds to texts[i]. Up to 500 items and 100000 characters total per call, 5000 characters per item. NOTE: pass a real JSON array. A bare string is split on commas (gateway-wide behaviour for array parameters), which would cut a title like 'Trainers, size 42' into two items.","on_invalid":"reject","example":["Wireless Bluetooth Headphones","Stainless Steel Water Bottle 1L","Men's Running Shoes, Size 42"],"aliases":["q","items","strings","batch"]},{"name":"target","type":"enum","required":true,"description":"Target language code to translate INTO (e.g. 'es', 'fr', 'ja', 'ar'). Must be one of the supported codes (see the 'languages' action). Friendly aliases like 'zh' or 'he' are accepted.","on_invalid":"reject","allowed_values":[{"value":"af","label":"Afrikaans"},{"value":"sq","label":"Albanian"},{"value":"am","label":"Amharic"},{"value":"ar","label":"Arabic"},{"value":"hy","label":"Armenian"},{"value":"as","label":"Assamese"},{"value":"ay","label":"Aymara"},{"value":"az","label":"Azerbaijani"},{"value":"bm","label":"Bambara"},{"value":"eu","label":"Basque"},{"value":"be","label":"Belarusian"},{"value":"bn","label":"Bengali"},{"value":"bho","label":"Bhojpuri"},{"value":"bs","label":"Bosnian"},{"value":"bg","label":"Bulgarian"},{"value":"ca","label":"Catalan"},{"value":"ceb","label":"Cebuano"},{"value":"ny","label":"Chichewa"},{"value":"zh-CN","label":"Chinese (Simplified)"},{"value":"zh-TW","label":"Chinese (Traditional)"},{"value":"co","label":"Corsican"},{"value":"hr","label":"Croatian"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"dv","label":"Divehi"},{"value":"doi","label":"Dogri"},{"value":"nl","label":"Dutch"},{"value":"en","label":"English"},{"value":"eo","label":"Esperanto"},{"value":"et","label":"Estonian"},{"value":"ee","label":"Ewe"},{"value":"tl","label":"Filipino"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"fy","label":"Frisian"},{"value":"gl","label":"Galician"},{"value":"ka","label":"Georgian"},{"value":"de","label":"German"},{"value":"el","label":"Greek"},{"value":"gn","label":"Guarani"},{"value":"gu","label":"Gujarati"},{"value":"ht","label":"Haitian Creole"},{"value":"ha","label":"Hausa"},{"value":"haw","label":"Hawaiian"},{"value":"iw","label":"Hebrew"},{"value":"hi","label":"Hindi"},{"value":"hmn","label":"Hmong"},{"value":"hu","label":"Hungarian"},{"value":"is","label":"Icelandic"},{"value":"ig","label":"Igbo"},{"value":"ilo","label":"Ilocano"},{"value":"id","label":"Indonesian"},{"value":"ga","label":"Irish"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"jw","label":"Javanese"},{"value":"kn","label":"Kannada"},{"value":"kk","label":"Kazakh"},{"value":"km","label":"Khmer"},{"value":"rw","label":"Kinyarwanda"},{"value":"gom","label":"Konkani"},{"value":"ko","label":"Korean"},{"value":"kri","label":"Krio"},{"value":"ku","label":"Kurdish (Kurmanji)"},{"value":"ckb","label":"Kurdish (Sorani)"},{"value":"ky","label":"Kyrgyz"},{"value":"lo","label":"Lao"},{"value":"la","label":"Latin"},{"value":"lv","label":"Latvian"},{"value":"ln","label":"Lingala"},{"value":"lt","label":"Lithuanian"},{"value":"lg","label":"Luganda"},{"value":"lb","label":"Luxembourgish"},{"value":"mk","label":"Macedonian"},{"value":"mai","label":"Maithili"},{"value":"mg","label":"Malagasy"},{"value":"ms","label":"Malay"},{"value":"ml","label":"Malayalam"},{"value":"mt","label":"Maltese"},{"value":"mi","label":"Maori"},{"value":"mr","label":"Marathi"},{"value":"mni-Mtei","label":"Meiteilon (Manipuri)"},{"value":"lus","label":"Mizo"},{"value":"mn","label":"Mongolian"},{"value":"my","label":"Myanmar (Burmese)"},{"value":"ne","label":"Nepali"},{"value":"no","label":"Norwegian"},{"value":"or","label":"Odia (Oriya)"},{"value":"om","label":"Oromo"},{"value":"ps","label":"Pashto"},{"value":"fa","label":"Persian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"pa","label":"Punjabi"},{"value":"qu","label":"Quechua"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sm","label":"Samoan"},{"value":"sa","label":"Sanskrit"},{"value":"gd","label":"Scots Gaelic"},{"value":"nso","label":"Sepedi"},{"value":"sr","label":"Serbian"},{"value":"st","label":"Sesotho"},{"value":"sn","label":"Shona"},{"value":"sd","label":"Sindhi"},{"value":"si","label":"Sinhala"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"so","label":"Somali"},{"value":"es","label":"Spanish"},{"value":"su","label":"Sundanese"},{"value":"sw","label":"Swahili"},{"value":"sv","label":"Swedish"},{"value":"tg","label":"Tajik"},{"value":"ta","label":"Tamil"},{"value":"tt","label":"Tatar"},{"value":"te","label":"Telugu"},{"value":"th","label":"Thai"},{"value":"ti","label":"Tigrinya"},{"value":"ts","label":"Tsonga"},{"value":"tr","label":"Turkish"},{"value":"tk","label":"Turkmen"},{"value":"ak","label":"Twi"},{"value":"uk","label":"Ukrainian"},{"value":"ur","label":"Urdu"},{"value":"ug","label":"Uyghur"},{"value":"uz","label":"Uzbek"},{"value":"vi","label":"Vietnamese"},{"value":"cy","label":"Welsh"},{"value":"xh","label":"Xhosa"},{"value":"yi","label":"Yiddish"},{"value":"yo","label":"Yoruba"},{"value":"zu","label":"Zulu"}],"example":"es","aliases":["to","tl"]},{"name":"source","type":"string","required":false,"description":"Source language code (ISO-639-style, e.g. 'en', 'de', 'zh-CN'). Defaults to 'auto' — the language is detected automatically and returned as detected_source. See the 'languages' action for codes.","on_invalid":"reject","default":"auto","example":"en","aliases":["from","sl"]}],"returns":"translations[]{index, source_text, text (null if it failed), detected_source}, failed[]{index, reason}, count, requested, failed_count, target, target_language_name, source, detected_source","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"per_unit","credits":1,"per":25,"min":1},"example_params":{"texts":["Wireless Bluetooth Headphones","Stainless Steel Water Bottle 1L","Men's Running Shoes, Size 42","Organic Green Tea, 100 bags","4K Ultra HD Smart TV 55 inch"],"target":"es"}},{"name":"detect","description":"Detect the language of a piece of text. Returns the detected language code, its name and a confidence score (0-1). Works on any script.","required_params":["text"],"optional_params":[],"params":[{"name":"text","type":"string","required":true,"description":"The text to translate. Plain UTF-8 — any script works (Latin, Chinese, Japanese, Arabic, Cyrillic…). Up to 5000 characters per call; longer input is truncated and flagged in meta.truncated.","on_invalid":"reject","example":"Hello, how are you?","aliases":["q","query"]}],"returns":"detected_source (code), language_name, confidence (0-1), is_reliable","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"text":"Привет мир"}},{"name":"dictionary","description":"Word-level dictionary lookup: translate a word/short phrase and get its meanings grouped by part of speech, synonyms, back-translations and transliteration (romanization). Best for single words or short phrases.","required_params":["text","target"],"optional_params":["source"],"params":[{"name":"text","type":"string","required":true,"description":"A word or short phrase to look up.","on_invalid":"reject","example":"run","aliases":["q","word"]},{"name":"target","type":"enum","required":true,"description":"Target language code to translate INTO (e.g. 'es', 'fr', 'ja', 'ar'). Must be one of the supported codes (see the 'languages' action). Friendly aliases like 'zh' or 'he' are accepted.","on_invalid":"reject","allowed_values":[{"value":"af","label":"Afrikaans"},{"value":"sq","label":"Albanian"},{"value":"am","label":"Amharic"},{"value":"ar","label":"Arabic"},{"value":"hy","label":"Armenian"},{"value":"as","label":"Assamese"},{"value":"ay","label":"Aymara"},{"value":"az","label":"Azerbaijani"},{"value":"bm","label":"Bambara"},{"value":"eu","label":"Basque"},{"value":"be","label":"Belarusian"},{"value":"bn","label":"Bengali"},{"value":"bho","label":"Bhojpuri"},{"value":"bs","label":"Bosnian"},{"value":"bg","label":"Bulgarian"},{"value":"ca","label":"Catalan"},{"value":"ceb","label":"Cebuano"},{"value":"ny","label":"Chichewa"},{"value":"zh-CN","label":"Chinese (Simplified)"},{"value":"zh-TW","label":"Chinese (Traditional)"},{"value":"co","label":"Corsican"},{"value":"hr","label":"Croatian"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"dv","label":"Divehi"},{"value":"doi","label":"Dogri"},{"value":"nl","label":"Dutch"},{"value":"en","label":"English"},{"value":"eo","label":"Esperanto"},{"value":"et","label":"Estonian"},{"value":"ee","label":"Ewe"},{"value":"tl","label":"Filipino"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"fy","label":"Frisian"},{"value":"gl","label":"Galician"},{"value":"ka","label":"Georgian"},{"value":"de","label":"German"},{"value":"el","label":"Greek"},{"value":"gn","label":"Guarani"},{"value":"gu","label":"Gujarati"},{"value":"ht","label":"Haitian Creole"},{"value":"ha","label":"Hausa"},{"value":"haw","label":"Hawaiian"},{"value":"iw","label":"Hebrew"},{"value":"hi","label":"Hindi"},{"value":"hmn","label":"Hmong"},{"value":"hu","label":"Hungarian"},{"value":"is","label":"Icelandic"},{"value":"ig","label":"Igbo"},{"value":"ilo","label":"Ilocano"},{"value":"id","label":"Indonesian"},{"value":"ga","label":"Irish"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"jw","label":"Javanese"},{"value":"kn","label":"Kannada"},{"value":"kk","label":"Kazakh"},{"value":"km","label":"Khmer"},{"value":"rw","label":"Kinyarwanda"},{"value":"gom","label":"Konkani"},{"value":"ko","label":"Korean"},{"value":"kri","label":"Krio"},{"value":"ku","label":"Kurdish (Kurmanji)"},{"value":"ckb","label":"Kurdish (Sorani)"},{"value":"ky","label":"Kyrgyz"},{"value":"lo","label":"Lao"},{"value":"la","label":"Latin"},{"value":"lv","label":"Latvian"},{"value":"ln","label":"Lingala"},{"value":"lt","label":"Lithuanian"},{"value":"lg","label":"Luganda"},{"value":"lb","label":"Luxembourgish"},{"value":"mk","label":"Macedonian"},{"value":"mai","label":"Maithili"},{"value":"mg","label":"Malagasy"},{"value":"ms","label":"Malay"},{"value":"ml","label":"Malayalam"},{"value":"mt","label":"Maltese"},{"value":"mi","label":"Maori"},{"value":"mr","label":"Marathi"},{"value":"mni-Mtei","label":"Meiteilon (Manipuri)"},{"value":"lus","label":"Mizo"},{"value":"mn","label":"Mongolian"},{"value":"my","label":"Myanmar (Burmese)"},{"value":"ne","label":"Nepali"},{"value":"no","label":"Norwegian"},{"value":"or","label":"Odia (Oriya)"},{"value":"om","label":"Oromo"},{"value":"ps","label":"Pashto"},{"value":"fa","label":"Persian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"pa","label":"Punjabi"},{"value":"qu","label":"Quechua"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sm","label":"Samoan"},{"value":"sa","label":"Sanskrit"},{"value":"gd","label":"Scots Gaelic"},{"value":"nso","label":"Sepedi"},{"value":"sr","label":"Serbian"},{"value":"st","label":"Sesotho"},{"value":"sn","label":"Shona"},{"value":"sd","label":"Sindhi"},{"value":"si","label":"Sinhala"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"so","label":"Somali"},{"value":"es","label":"Spanish"},{"value":"su","label":"Sundanese"},{"value":"sw","label":"Swahili"},{"value":"sv","label":"Swedish"},{"value":"tg","label":"Tajik"},{"value":"ta","label":"Tamil"},{"value":"tt","label":"Tatar"},{"value":"te","label":"Telugu"},{"value":"th","label":"Thai"},{"value":"ti","label":"Tigrinya"},{"value":"ts","label":"Tsonga"},{"value":"tr","label":"Turkish"},{"value":"tk","label":"Turkmen"},{"value":"ak","label":"Twi"},{"value":"uk","label":"Ukrainian"},{"value":"ur","label":"Urdu"},{"value":"ug","label":"Uyghur"},{"value":"uz","label":"Uzbek"},{"value":"vi","label":"Vietnamese"},{"value":"cy","label":"Welsh"},{"value":"xh","label":"Xhosa"},{"value":"yi","label":"Yiddish"},{"value":"yo","label":"Yoruba"},{"value":"zu","label":"Zulu"}],"example":"es","aliases":["to","tl"]},{"name":"source","type":"string","required":false,"description":"Source language code (ISO-639-style, e.g. 'en', 'de', 'zh-CN'). Defaults to 'auto' — the language is detected automatically and returned as detected_source. See the 'languages' action for codes.","on_invalid":"reject","default":"auto","example":"en","aliases":["from","sl"]}],"returns":"text (primary translation), transliteration, source, target, detected_source, dictionary[]{part_of_speech, translations[]{term, synonyms[], score}}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"text":"run","target":"es"}},{"name":"languages","description":"List all supported languages (code → English name). Useful to populate a language picker or validate a code before translating.","required_params":[],"optional_params":[],"params":[],"returns":"languages[]{code, name}, count","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"speak","description":"Text-to-speech: turn text into spoken audio (MP3). Pronounces the text in the chosen language's voice/accent — works with every script (Chinese, Japanese, Arabic, Cyrillic, Turkish…). Long text is split and joined into a single MP3. Returns the audio base64-encoded inline (audio/mpeg), so no second download is needed. Pair it with 'translate' to get spoken translations.","required_params":["text","lang"],"optional_params":["slow"],"params":[{"name":"text","type":"string","required":true,"description":"The text to speak aloud. Plain UTF-8 — any script works (Latin, Chinese, Japanese, Arabic, Cyrillic…). Up to 3000 characters; longer text is split into chunks and the audio is joined into one MP3. Longer input than that is truncated and flagged in meta.truncated.","on_invalid":"reject","example":"Hello, how are you?","aliases":["q","query"]},{"name":"lang","type":"enum","required":true,"description":"Language to pronounce the text in (e.g. 'en', 'es', 'ja', 'tr', 'ar'). Determines the voice/accent. Must be a supported code (see the 'languages' action). Friendly aliases like 'zh' or 'he' are accepted.","on_invalid":"reject","allowed_values":[{"value":"af","label":"Afrikaans"},{"value":"sq","label":"Albanian"},{"value":"am","label":"Amharic"},{"value":"ar","label":"Arabic"},{"value":"hy","label":"Armenian"},{"value":"as","label":"Assamese"},{"value":"ay","label":"Aymara"},{"value":"az","label":"Azerbaijani"},{"value":"bm","label":"Bambara"},{"value":"eu","label":"Basque"},{"value":"be","label":"Belarusian"},{"value":"bn","label":"Bengali"},{"value":"bho","label":"Bhojpuri"},{"value":"bs","label":"Bosnian"},{"value":"bg","label":"Bulgarian"},{"value":"ca","label":"Catalan"},{"value":"ceb","label":"Cebuano"},{"value":"ny","label":"Chichewa"},{"value":"zh-CN","label":"Chinese (Simplified)"},{"value":"zh-TW","label":"Chinese (Traditional)"},{"value":"co","label":"Corsican"},{"value":"hr","label":"Croatian"},{"value":"cs","label":"Czech"},{"value":"da","label":"Danish"},{"value":"dv","label":"Divehi"},{"value":"doi","label":"Dogri"},{"value":"nl","label":"Dutch"},{"value":"en","label":"English"},{"value":"eo","label":"Esperanto"},{"value":"et","label":"Estonian"},{"value":"ee","label":"Ewe"},{"value":"tl","label":"Filipino"},{"value":"fi","label":"Finnish"},{"value":"fr","label":"French"},{"value":"fy","label":"Frisian"},{"value":"gl","label":"Galician"},{"value":"ka","label":"Georgian"},{"value":"de","label":"German"},{"value":"el","label":"Greek"},{"value":"gn","label":"Guarani"},{"value":"gu","label":"Gujarati"},{"value":"ht","label":"Haitian Creole"},{"value":"ha","label":"Hausa"},{"value":"haw","label":"Hawaiian"},{"value":"iw","label":"Hebrew"},{"value":"hi","label":"Hindi"},{"value":"hmn","label":"Hmong"},{"value":"hu","label":"Hungarian"},{"value":"is","label":"Icelandic"},{"value":"ig","label":"Igbo"},{"value":"ilo","label":"Ilocano"},{"value":"id","label":"Indonesian"},{"value":"ga","label":"Irish"},{"value":"it","label":"Italian"},{"value":"ja","label":"Japanese"},{"value":"jw","label":"Javanese"},{"value":"kn","label":"Kannada"},{"value":"kk","label":"Kazakh"},{"value":"km","label":"Khmer"},{"value":"rw","label":"Kinyarwanda"},{"value":"gom","label":"Konkani"},{"value":"ko","label":"Korean"},{"value":"kri","label":"Krio"},{"value":"ku","label":"Kurdish (Kurmanji)"},{"value":"ckb","label":"Kurdish (Sorani)"},{"value":"ky","label":"Kyrgyz"},{"value":"lo","label":"Lao"},{"value":"la","label":"Latin"},{"value":"lv","label":"Latvian"},{"value":"ln","label":"Lingala"},{"value":"lt","label":"Lithuanian"},{"value":"lg","label":"Luganda"},{"value":"lb","label":"Luxembourgish"},{"value":"mk","label":"Macedonian"},{"value":"mai","label":"Maithili"},{"value":"mg","label":"Malagasy"},{"value":"ms","label":"Malay"},{"value":"ml","label":"Malayalam"},{"value":"mt","label":"Maltese"},{"value":"mi","label":"Maori"},{"value":"mr","label":"Marathi"},{"value":"mni-Mtei","label":"Meiteilon (Manipuri)"},{"value":"lus","label":"Mizo"},{"value":"mn","label":"Mongolian"},{"value":"my","label":"Myanmar (Burmese)"},{"value":"ne","label":"Nepali"},{"value":"no","label":"Norwegian"},{"value":"or","label":"Odia (Oriya)"},{"value":"om","label":"Oromo"},{"value":"ps","label":"Pashto"},{"value":"fa","label":"Persian"},{"value":"pl","label":"Polish"},{"value":"pt","label":"Portuguese"},{"value":"pa","label":"Punjabi"},{"value":"qu","label":"Quechua"},{"value":"ro","label":"Romanian"},{"value":"ru","label":"Russian"},{"value":"sm","label":"Samoan"},{"value":"sa","label":"Sanskrit"},{"value":"gd","label":"Scots Gaelic"},{"value":"nso","label":"Sepedi"},{"value":"sr","label":"Serbian"},{"value":"st","label":"Sesotho"},{"value":"sn","label":"Shona"},{"value":"sd","label":"Sindhi"},{"value":"si","label":"Sinhala"},{"value":"sk","label":"Slovak"},{"value":"sl","label":"Slovenian"},{"value":"so","label":"Somali"},{"value":"es","label":"Spanish"},{"value":"su","label":"Sundanese"},{"value":"sw","label":"Swahili"},{"value":"sv","label":"Swedish"},{"value":"tg","label":"Tajik"},{"value":"ta","label":"Tamil"},{"value":"tt","label":"Tatar"},{"value":"te","label":"Telugu"},{"value":"th","label":"Thai"},{"value":"ti","label":"Tigrinya"},{"value":"ts","label":"Tsonga"},{"value":"tr","label":"Turkish"},{"value":"tk","label":"Turkmen"},{"value":"ak","label":"Twi"},{"value":"uk","label":"Ukrainian"},{"value":"ur","label":"Urdu"},{"value":"ug","label":"Uyghur"},{"value":"uz","label":"Uzbek"},{"value":"vi","label":"Vietnamese"},{"value":"cy","label":"Welsh"},{"value":"xh","label":"Xhosa"},{"value":"yi","label":"Yiddish"},{"value":"yo","label":"Yoruba"},{"value":"zu","label":"Zulu"}],"example":"en","aliases":["language","tl","voice"]},{"name":"slow","type":"boolean","required":false,"description":"Speak slowly (useful for language learning / clear pronunciation). Defaults to false (normal speed).","on_invalid":"reject","default":false,"example":false}],"returns":"audio_base64 (MP3, base64), mime (audio/mpeg), format ('mp3'), lang, language_name, char_count, segments, duration_estimate_seconds, audio_bytes, slow","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"text":"Hello, how are you today?","lang":"en"}}]},{"name":"trendyol","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Trendyol API scraper — search, filters, product detail, reviews, sellers & category browse on Turkey's largest e-commerce marketplace (trendyol.com), prices in TRY","version":"0.3.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/trendyol/v1","spec_available":true,"actions":[{"name":"product/offers","description":"Selected seller and published competing seller offers for a product. Selected seller first, then competitors ordered by price. Stock is null where unpublished.","required_params":[],"optional_params":["content_id","url","limit"],"params":[{"name":"content_id","type":"string","required":false,"description":"Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.","on_invalid":"reject","example":762254881,"aliases":["contentId","id"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol product URL — alternative to content_id.","on_invalid":"reject","example":"https://www.trendyol.com/x/x-p-762254881","aliases":["product_url"]},{"name":"limit","type":"integer","required":false,"description":"Maximum offers, including selected seller (1-100).","on_invalid":"reject","default":100,"minimum":1,"maximum":100}],"returns":"content_id, offers[]{seller_id, seller_name, seller_score, price, price_value, currency, campaign, is_buybox, item_number, in_stock, free_cargo, url}, returned_count, published_count (including selected seller), truncated, includes_selected_seller","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.trendyol.com/x/x-p-762254881"}},{"name":"product/variants","description":"Published catalog variants and barcodes. Catalog prices can differ from the selected merchant. selected_offer_price is populated only for the matching selected item_number; other merchant-specific variant prices remain null.","required_params":[],"optional_params":["content_id","url"],"params":[{"name":"content_id","type":"string","required":false,"description":"Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.","on_invalid":"reject","example":762254881,"aliases":["contentId","id"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol product URL — alternative to content_id.","on_invalid":"reject","example":"https://www.trendyol.com/x/x-p-762254881","aliases":["product_url"]}],"returns":"content_id, selected_seller_id, selected_item_number, size_chart_url, variants[]{value, item_number, barcode, in_stock, price, price_value, price_scope, selected_seller_id, selected_seller_in_stock, selected_offer_price}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.trendyol.com/x/x-p-762254881"}},{"name":"product/description","description":"Long product description as HTML, plain text and image URLs. Image-only descriptions are supported. An existing product without a description returns has_description=false. Treat returned HTML as untrusted data before displaying it.","required_params":[],"optional_params":["content_id","url"],"params":[{"name":"content_id","type":"string","required":false,"description":"Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.","on_invalid":"reject","example":762254881,"aliases":["contentId","id"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol product URL — alternative to content_id.","on_invalid":"reject","example":"https://www.trendyol.com/x/x-p-762254881","aliases":["product_url"]}],"returns":"content_id, html, text, images[], has_description","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.trendyol.com/x/x-p-762254881"}},{"name":"product/questions","description":"Published answered product questions, with seller replies and zero-based pagination. total_count describes the returned question collection; content_total_count is a separate broader source summary.","required_params":[],"optional_params":["content_id","url","page","page_size"],"params":[{"name":"content_id","type":"string","required":false,"description":"Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.","on_invalid":"reject","example":762254881,"aliases":["contentId","id"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol product URL — alternative to content_id.","on_invalid":"reject","example":"https://www.trendyol.com/x/x-p-762254881","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"Question page, zero-based.","on_invalid":"reject","default":0,"minimum":0,"maximum":10000},{"name":"page_size","type":"integer","required":false,"description":"Questions per page (1-50).","on_invalid":"reject","default":20,"minimum":1,"maximum":50}],"returns":"content_id, questions[]{id, question, answer, seller_id, seller_name, user, verified_purchase, created_at, created_at_ms, answer_time_text}, page, page_size, total_pages, total_count, content_total_count, tags[], pagination{page, has_more}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.trendyol.com/x/x-p-762254881"}},{"name":"product/coupons","description":"Publicly visible coupons for the selected product and seller. Includes discount type, minimum spend, expiry and conditions. Anonymous visibility does not confirm personal eligibility or redemption; coupons are not subtracted from the product price.","required_params":[],"optional_params":["content_id","url"],"params":[{"name":"content_id","type":"string","required":false,"description":"Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.","on_invalid":"reject","example":762254881,"aliases":["contentId","id"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol product URL — alternative to content_id.","on_invalid":"reject","example":"https://www.trendyol.com/x/x-p-762254881","aliases":["product_url"]}],"returns":"content_id, seller_id, visibility=anonymous, eligibility_checked=false, coupons[]{id, discount_type, discount_value, discount_unit, currency, minimum_spend, max_discount_amount, end_date, code, eligible, applied, is_ty_plus, conditions[], products_url}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.trendyol.com/x/x-p-762254881"}},{"name":"product/detail","description":"full product by `url` OR `content_id`: title/brand/price(current+list+discount%/coupon/ty+)/campaign(+campaigns[])/rating+comment_count/in_stock/seller(+score)/other_offers[] (EVERY competing seller on the same listing WITH its store id, store name, seller score, price and campaign — seller-level price comparison in this one call)/category/images/attributes(specs)/variants. The dual-use influencer module.","required_params":[],"optional_params":["url","content_id"],"params":[{"name":"content_id","type":"string","required":false,"description":"Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.","on_invalid":"reject","example":762254881,"aliases":["contentId","id"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol product URL — alternative to content_id.","on_invalid":"reject","example":"https://www.trendyol.com/x/x-p-762254881","aliases":["product_url"]}],"returns":"product{content_id, title, brand, price{current, list, currency=TRY, discount_pct, coupon, ty_plus}, campaign (str|null — the 'Ürünün Kampanyaları' headline, e.g. 'Sepette %1 İndirim · 350 TL ve Üzeri Kargo Bedava'), campaigns[]{text, short, type, applied, end_date}, rating{average, comment_count}, in_stock, seller{name, score}, other_offers[]{seller_id, seller_name, seller_score, price, price_value, campaign, url, free_cargo} (cheapest first, up to 100 rows) + other_offers_count (the TRUE number of competing sellers upstream published, so you can tell a full list from a capped one) — one row per competing seller of the SAME listing, each carrying its own store identity; empty [] when the product has a single seller (Trendyol then publishes no competing-merchant block at all), category, images[], attributes{}, variants[]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"content_id":762254881}},{"name":"product/reviews","description":"Paginated customer reviews by `content_id` OR `url`, in the order you ask for. `sort=newest` returns the most recently posted reviews first and keeps that order across every page, so you can poll a product for new reviews; without `sort` Trendyol returns its own 'recommended' order, which is not chronological. Every page carries the real totals (average rating, how many people rated, how many wrote a comment, star breakdown, total_pages for your page_size) so you know when to stop. Reviewer names are published by Trendyol already masked.","required_params":[],"optional_params":["content_id","url","page","page_size","sort"],"params":[{"name":"content_id","type":"string","required":false,"description":"Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.","on_invalid":"reject","example":762254881,"aliases":["contentId","id"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol product URL — alternative to content_id.","on_invalid":"reject","example":"https://www.trendyol.com/x/x-p-762254881","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"Review page — 0-BASED (first page = 0, then 1, 2…); summary.total_pages tells you how many exist.","on_invalid":"ignore","default":0,"minimum":0},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1–50; larger values are capped at 50). summary.total_pages is computed for this page size.","on_invalid":"ignore","default":30,"minimum":1,"maximum":50,"aliases":["pageSize"]},{"name":"sort","type":"enum","required":false,"description":"Review ordering. Use `newest` to track the most recent reviews — the order holds across pages, so page 0 is always the freshest. `relevant` (the default) is Trendyol's own 'Önerilen Sıralama' and is NOT chronological. Ordering by date uses each review's last-modified timestamp, which is the field `last_modified` in every row.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest first (most recent review at the top)"},{"value":"oldest","label":"Oldest first"},{"value":"rating_desc","label":"Highest rating first"},{"value":"rating_asc","label":"Lowest rating first"},{"value":"relevant","label":"Trendyol's own recommended order (default)"}],"default":"relevant"}],"returns":"ai_summary (Trendyol's own AI digest of the reviews, Turkish; null if it publishes none) + summary{average_rating, total_rating_count, total_comment_count, total_pages, page_size, total_image_review_count, has_media, rating_breakdown{5..1}} + page, page_size, sort + reviews[]{id, user (masked by Trendyol), user_name_shown, rating, comment, date, date_epoch_ms, last_modified, last_modified_epoch_ms, seller, seller_id, trusted, likes, is_influencer, is_elite, images[]} (meta.pagination for paging)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"content_id":762254881}},{"name":"product/similar","description":"Trendyol's own 'Benzer Ürünler' recommendation rail for a product, by `content_id` OR `url` — the products Trendyol itself puts in front of a shopper looking at this one, so you get its live view of the competitive set (same category, comparable specs) rather than a keyword guess. Each row is a full product card (price, list price, rating, review count, seller, stock) usable directly for price benchmarking, or feed results[].content_id straight into product/detail. Paginated 0-BASED; meta.pagination.has_more tells you when the rail is exhausted.","required_params":[],"optional_params":["content_id","url","page","size"],"params":[{"name":"content_id","type":"string","required":false,"description":"Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.","on_invalid":"reject","example":762254881,"aliases":["contentId","id"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol product URL — alternative to content_id.","on_invalid":"reject","example":"https://www.trendyol.com/x/x-p-762254881","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"Result page — 0-BASED (first page = 0).","on_invalid":"ignore","default":0,"minimum":0},{"name":"size","type":"integer","required":false,"description":"How many similar products (1–40; larger values are capped at 40).","on_invalid":"ignore","default":20,"minimum":1,"maximum":40}],"returns":"results[]{content_id, title, brand, url, price, price_value, list_price (null when the product carries no genuine strike-through — never an invented discount), rating, comment_count, image, category, in_stock, merchant_id, free_cargo}; meta{total_count, is_last_page, pagination}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"content_id":762254881}},{"name":"search","description":"Search Trendyol products by keyword with optional sort & price/brand filters → results[]{content_id,title,brand,url,price,list_price,rating,comment_count,category,image,free_cargo}. Resolves content_ids for product/detail. Paginated+deduped (page 1-based, max_pages ≤10). meta.total_count = full result-set size.","required_params":["query"],"optional_params":["page","max_pages","sort","price","brand"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for (Turkish keywords work best).","on_invalid":"reject","example":"laptop","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"Result page to start from — 1-BASED (1, 2, 3…), ~24 products/page.","on_invalid":"ignore","default":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch + dedup in one call (1–10, ~24 products/page; larger values are capped at 10).","on_invalid":"ignore","default":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Result ordering: best_seller · most_favorite · price_asc · price_desc · newest · most_rated. Default = Trendyol relevance.","on_invalid":"ignore","allowed_values":[{"value":"best_seller","label":"Best sellers"},{"value":"most_favorite","label":"Most favorited"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"newest","label":"Newest"},{"value":"most_rated","label":"Most rated"}]},{"name":"price","type":"string","required":false,"description":"Price range filter in TRY as 'min-max' (e.g. '5000-15000'). Open-ended like '5000-' also works.","on_invalid":"ignore","example":"5000-15000","aliases":["price_range"]},{"name":"brand","type":"string","required":false,"description":"Brand-id filter — get valid brand ids from the search/filters action (the 'Marka' facet). Numeric id, not the brand name.","on_invalid":"ignore","example":102323}],"returns":"results[]{content_id, title, brand, url, price, price_value, list_price, rating, comment_count, category, image, free_cargo, fast_delivery}; meta{total_count, pagination}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone"}},{"name":"search/filters","description":"Discover the available filter facets for a `query` OR `category_id` before filtering — brands (with ids for the `brand` param), price ranges, product ratings, and category-specific attributes (RAM, screen size, color, …) each with live result counts.","required_params":[],"optional_params":["query","category_id"],"params":[{"name":"query","type":"string","required":false,"description":"Search keyword to get facets for (provide query OR category_id).","on_invalid":"reject","example":"laptop","aliases":["q"]},{"name":"category_id","type":"integer","required":false,"description":"Category id (digits after '-c' in a category URL) — alternative to query.","on_invalid":"reject","example":103498,"aliases":["categoryId"]}],"returns":"filters[]{title, type, param_hint, values[]{id, text, count}} — feed a values[].id into search/category brand/price filters","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"laptop"}},{"name":"category/products","description":"Browse a Trendyol category by id — best-sellers, newest, or price/brand-filtered product lists. Same card shape as search. Get a category_id from a product's category.id (product/detail) or the '-c<id>' in a category URL.","required_params":[],"optional_params":["category_id","url","page","max_pages","sort","price","brand"],"params":[{"name":"category_id","type":"integer","required":false,"description":"Category id — the digits after '-c' in a category URL (…-x-c<id>), or a product's category.id. Provide category_id OR url.","on_invalid":"reject","example":103498,"aliases":["categoryId","wc"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol category URL — alternative to category_id.","on_invalid":"reject","example":"https://www.trendyol.com/cep-telefonu-x-c103498","aliases":["category_url"]},{"name":"page","type":"integer","required":false,"description":"Result page to start from — 1-BASED (1, 2, 3…), ~24 products/page.","on_invalid":"ignore","default":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch + dedup in one call (1–10, ~24 products/page; larger values are capped at 10).","on_invalid":"ignore","default":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Result ordering: best_seller · most_favorite · price_asc · price_desc · newest · most_rated. Default = Trendyol relevance.","on_invalid":"ignore","allowed_values":[{"value":"best_seller","label":"Best sellers"},{"value":"most_favorite","label":"Most favorited"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"newest","label":"Newest"},{"value":"most_rated","label":"Most rated"}]},{"name":"price","type":"string","required":false,"description":"Price range filter in TRY as 'min-max' (e.g. '5000-15000'). Open-ended like '5000-' also works.","on_invalid":"ignore","example":"5000-15000","aliases":["price_range"]},{"name":"brand","type":"string","required":false,"description":"Brand-id filter — get valid brand ids from the search/filters action (the 'Marka' facet). Numeric id, not the brand name.","on_invalid":"ignore","example":102323}],"returns":"results[]{content_id, title, brand, url, price, list_price, rating, comment_count, category, image, free_cargo, fast_delivery}; meta{total_count, pagination}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":103498}},{"name":"seller/products","description":"All products of a Trendyol seller/store (paginated, sortable, filterable) by seller_id. Same card shape as search. meta.total_count = the seller's full catalog size.","required_params":[],"optional_params":["seller_id","url","page","max_pages","sort","price","brand"],"params":[{"name":"seller_id","type":"integer","required":false,"description":"Seller/merchant id — the digits after '-m-' in a store URL (/magaza/…-m-<id>). Get it from seller/info or a product's seller. Provide seller_id OR url.","on_invalid":"reject","example":968,"aliases":["sellerId","mid"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol store URL — alternative to seller_id.","on_invalid":"reject","example":"https://www.trendyol.com/magaza/trendyol-m-968","aliases":["store_url"]},{"name":"page","type":"integer","required":false,"description":"Result page to start from — 1-BASED (1, 2, 3…), ~24 products/page.","on_invalid":"ignore","default":1,"minimum":1},{"name":"max_pages","type":"integer","required":false,"description":"How many consecutive pages to fetch + dedup in one call (1–10, ~24 products/page; larger values are capped at 10).","on_invalid":"ignore","default":1,"minimum":1,"maximum":10},{"name":"sort","type":"enum","required":false,"description":"Result ordering: best_seller · most_favorite · price_asc · price_desc · newest · most_rated. Default = Trendyol relevance.","on_invalid":"ignore","allowed_values":[{"value":"best_seller","label":"Best sellers"},{"value":"most_favorite","label":"Most favorited"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"newest","label":"Newest"},{"value":"most_rated","label":"Most rated"}]},{"name":"price","type":"string","required":false,"description":"Price range filter in TRY as 'min-max' (e.g. '5000-15000'). Open-ended like '5000-' also works.","on_invalid":"ignore","example":"5000-15000","aliases":["price_range"]},{"name":"brand","type":"string","required":false,"description":"Brand-id filter — get valid brand ids from the search/filters action (the 'Marka' facet). Numeric id, not the brand name.","on_invalid":"ignore","example":102323}],"returns":"results[]{content_id, title, brand, url, price, list_price, rating, comment_count, category, image, free_cargo}; meta{total_count, pagination}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":968}},{"name":"seller/info","description":"Trendyol seller/store profile by seller_id: store name, legal entity (official_name), total product_count, seller score, and trust badges.","required_params":[],"optional_params":["seller_id","url"],"params":[{"name":"seller_id","type":"integer","required":false,"description":"Seller/merchant id — the digits after '-m-' in a store URL (/magaza/…-m-<id>). Provide seller_id OR url.","on_invalid":"reject","example":968,"aliases":["sellerId","mid"]},{"name":"url","type":"string","required":false,"description":"Full Trendyol store URL — alternative to seller_id.","on_invalid":"reject","example":"https://www.trendyol.com/magaza/trendyol-m-968","aliases":["store_url"]}],"returns":"seller{seller_id, name, official_name, product_count, score, badges[], url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":968}},{"name":"seller/categories","description":"Trendyol's seller category tree, as used for product uploads: every category with its id, full path and whether it is a leaf (products are uploaded to leaf categories). Filter with `query`; take the id to seller/category-attributes for that category's upload template.","required_params":[],"optional_params":["query","leaf_only","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Case-insensitive text matched against the category name and path.","on_invalid":"ignore","example":"ayakkabı","aliases":["q","name"]},{"name":"leaf_only","type":"boolean","required":false,"description":"Only leaf categories (the ones products are uploaded to). Default true.","on_invalid":"ignore","default":true},{"name":"limit","type":"integer","required":false,"description":"Maximum rows to return (1-5000).","on_invalid":"ignore","default":200,"minimum":1,"maximum":5000}],"returns":"categories[]{id, name, path, parent_id, leaf}, count, total","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ayakkabı"}},{"name":"seller/category-attributes","description":"The product upload template of one Trendyol category: every attribute a listing in it takes, whether it is required, whether a custom value is allowed, whether it creates variants (varianter) or splits listings (slicer), and the allowed values.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"Leaf category id from seller/categories.","on_invalid":"reject","example":411,"aliases":["id","categoryId"]}],"returns":"category{id, name}, attributes[]{id, name, required, allow_custom, allow_multiple, varianter, slicer, values[]{id, name}}, attribute_count, required_count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":103498}},{"name":"suggest","description":"keyword suggestions for a query (ops; search-fallback if suggest API blocked)","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Partial search text to complete.","on_invalid":"reject","example":"iphone","aliases":["q"]}],"returns":"suggestions[] (plain strings)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"iphone"}}]},{"name":"troostwijk","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Troostwijk Netherlands auction lots","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/troostwijk/v1","spec_available":true,"actions":[{"name":"search","description":"Search public Netherlands TWK lots with a native keyword.","required_params":["query"],"optional_params":["page","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Native keyword such as volvo or tractor.","on_invalid":"reject","example":"volvo"},{"name":"page","type":"integer","required":false,"description":"Native page 1/2 only.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2},{"name":"limit","type":"integer","required":false,"description":"Native page size; keep it constant when paging.","on_invalid":"reject","default":3,"example":3,"minimum":1,"maximum":24}],"returns":"Canonical lot identifiers, original currency published bid amount, status, location and image.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"volvo","page":1,"limit":3}},{"name":"product/detail","description":"Read a canonical public Netherlands auction lot.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Copy results[].id or returned canonical URL. UUID alone is insufficient.","on_invalid":"reject","example":"2018-volvo-v90-2-0-t8-awd-momentum-n-089-tz-iaw-A1-44128-729"}],"returns":"Selected lot, native bid and opening amount, published description, attributes and auction/collection information.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"2018-volvo-v90-2-0-t8-awd-momentum-n-089-tz-iaw-A1-44128-729"}}]},{"name":"trovaprezzi","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Trovaprezzi.it API — Italy's price comparison: search offers, every shop's price, shipping and total for a product, specs and 6-month price history","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/trovaprezzi/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on trovaprezzi.it. The answer is a list of shop OFFERS (each with price, shipping, total, availability, shop and its rating) — trovaprezzi's search lists offers, not catalogue entries. `result_type` tells where the query landed: `product` (an exact product match — `product.product_id` then works in `product`, `offers`, `price_history`), `offer_list` (a curated offer list for that query) or `category_choice` (the query spans several categories: no offers, but the categories with their offer counts and the catalogue products trovaprezzi proposes, each with a product_id for `offers`). No match answers an empty list with total 0. Offers that belong to a catalogue product carry `variant_product_id`.","required_params":["query"],"optional_params":["sort","min_price","max_price","filter","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, as typed in trovaprezzi's search box (Italian or brand/model names, e.g. `lavatrice 9 kg`, `cuffie bluetooth`, `iphone 17`).","on_invalid":"reject","example":"lavatrice 9 kg","aliases":["q","keyword","libera"]},{"name":"sort","type":"enum","required":false,"description":"Offer order. `relevance` keeps trovaprezzi's own default for that page (price ascending on product pages, popularity on curated lists).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the page's own default order"},{"value":"price_asc","label":"Prezzo crescente — item price low to high"},{"value":"price_desc","label":"Prezzo decrescente — item price high to low"},{"value":"popularity","label":"Popolarità"},{"value":"total_price_asc","label":"Includi spese spedizione — price + shipping, low to high"}],"default":"relevance"},{"name":"min_price","type":"integer","required":false,"description":"Minimum item price in EUR (whole euros).","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_min","prezzomin"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum item price in EUR (whole euros).","on_invalid":"reject","example":400,"minimum":0,"aliases":["price_max","prezzomax"]},{"name":"filter","type":"string","required":false,"description":"One facet key from `offer_filters` / `facets` of a previous answer (e.g. a brand `jabra`, a memory size `256gb`, a colour `blu-colore`). One value per call.","on_invalid":"reject","example":"256gb","aliases":["facet"]},{"name":"page","type":"integer","required":false,"description":"Offer page, 20 offers per page. A page past the last answers NOT_FOUND.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"result_type (product|offer_list|category_choice|none), total (the site's own offer count), page, has_more, results[]{position, offer_id, title, description, image, price, shipping_cost, shipping_text, total_price, total_mismatch, currency=EUR, availability (available|limited), availability_text, is_secondary_offer, shop{id, name, url, logo, rating (0-5), review_count, badges[]}, payment_methods[], variant_product_id, offer_url} + product{product_id, title, url} (when the query matched a product) + categories[]{category_id, category_name, offer_count, is_main, url} + products[]{product_id, title, price_from, image, url} (category_choice) + facets[]{group, key, label, count} + list_title + landing_url","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"lavatrice 9 kg"}},{"name":"product","description":"One trovaprezzi product page: title, brand, images, description, category path, the lowest price (checked against the page's structured data and the first offer), the highest offer price, how many offers, the product's review score and count, the full spec sheet (group / label / value), the offer filters with their counts (memory, colour, condition…) and the variant id whose price history the page charts. Use `offers` for the per-shop list.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Trovaprezzi product id `<category>/<product>` — the part of a product URL around `/prezzi-scheda-prodotto/` (trovaprezzi.it/cellulari/prezzi-scheda-prodotto/apple_iphone_17 → `cellulari/apple_iphone_17`). Returned by `search` as `product.product_id` and per offer as `variant_product_id`. Provide product_id OR url.","on_invalid":"reject","example":"cellulari/apple_iphone_17","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"A trovaprezzi.it product page URL; alternative to product_id.","on_invalid":"reject","example":"https://www.trovaprezzi.it/cellulari/prezzi-scheda-prodotto/apple_iphone_17","aliases":["product_url"]}],"returns":"product{product_id, title, brand, url, image, images[], description, category_path[]{name, url}, lowest_price, highest_price, currency=EUR, offer_count, availability, rating, review_count, price_mismatch, price_witnesses, specs[]{group, label, value}, offer_filters[]{group, key, label, count}, price_history_variant}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"cellulari/apple_iphone_17"}},{"name":"offers","description":"Every shop offer for one trovaprezzi product, 20 per page, in the order you ask for: item price, shipping cost (0 when free), the site's own total, availability, the shop (id, name, page, logo, star rating 0-5, review count, Trusted / Feedaty badges), accepted payment methods, the offer's own title and image. Filters: price range and one offer facet (memory size, colour…). `total` is the site's own count for the filter you set.","required_params":[],"optional_params":["product_id","url","sort","min_price","max_price","filter","page"],"params":[{"name":"product_id","type":"string","required":false,"description":"Trovaprezzi product id `<category>/<product>` — the part of a product URL around `/prezzi-scheda-prodotto/` (trovaprezzi.it/cellulari/prezzi-scheda-prodotto/apple_iphone_17 → `cellulari/apple_iphone_17`). Returned by `search` as `product.product_id` and per offer as `variant_product_id`. Provide product_id OR url.","on_invalid":"reject","example":"cellulari/apple_iphone_17","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"A trovaprezzi.it product page URL; alternative to product_id.","on_invalid":"reject","example":"https://www.trovaprezzi.it/cellulari/prezzi-scheda-prodotto/apple_iphone_17","aliases":["product_url"]},{"name":"sort","type":"enum","required":false,"description":"Offer order. `relevance` keeps trovaprezzi's own default for that page (price ascending on product pages, popularity on curated lists).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the page's own default order"},{"value":"price_asc","label":"Prezzo crescente — item price low to high"},{"value":"price_desc","label":"Prezzo decrescente — item price high to low"},{"value":"popularity","label":"Popolarità"},{"value":"total_price_asc","label":"Includi spese spedizione — price + shipping, low to high"}],"default":"relevance"},{"name":"min_price","type":"integer","required":false,"description":"Minimum item price in EUR (whole euros).","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_min","prezzomin"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum item price in EUR (whole euros).","on_invalid":"reject","example":400,"minimum":0,"aliases":["price_max","prezzomax"]},{"name":"filter","type":"string","required":false,"description":"One facet key from `offer_filters` / `facets` of a previous answer (e.g. a brand `jabra`, a memory size `256gb`, a colour `blu-colore`). One value per call.","on_invalid":"reject","example":"256gb","aliases":["facet"]},{"name":"page","type":"integer","required":false,"description":"Offer page, 20 offers per page. A page past the last answers NOT_FOUND.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"product{product_id, title, url, lowest_price, offer_count} + total, page, has_more, offers[]{position, offer_id, title, description, image, price, shipping_cost, shipping_text, total_price, total_mismatch, currency=EUR, availability, availability_text, is_secondary_offer, shop{id, name, url, logo, rating, review_count, badges[]}, payment_methods[], variant_product_id, offer_url} + count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"cellulari/apple_iphone_17"}},{"name":"price_history","description":"Daily lowest-price history of a trovaprezzi product over the last 6 months, as the site charts it (Andamento prezzi), plus today's price and shop, yesterday's price, the 6-month mean and the 6-month high with its date. Trovaprezzi charts ONE variant per product (the variant of the best offer, e.g. 256 GB) — the answer names it.","required_params":[],"optional_params":["product_id","url","variant"],"params":[{"name":"product_id","type":"string","required":false,"description":"Trovaprezzi product id `<category>/<product>` — the part of a product URL around `/prezzi-scheda-prodotto/` (trovaprezzi.it/cellulari/prezzi-scheda-prodotto/apple_iphone_17 → `cellulari/apple_iphone_17`). Returned by `search` as `product.product_id` and per offer as `variant_product_id`. Provide product_id OR url.","on_invalid":"reject","example":"cellulari/apple_iphone_17","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"A trovaprezzi.it product page URL; alternative to product_id.","on_invalid":"reject","example":"https://www.trovaprezzi.it/cellulari/prezzi-scheda-prodotto/apple_iphone_17","aliases":["product_url"]},{"name":"variant","type":"string","required":false,"description":"The variant id to chart, as returned by `product` in `price_history_variant`. With it, only the chart is fetched (one request instead of two).","on_invalid":"reject","example":"apple_iphone_17_256gb","aliases":["fpn"]}],"returns":"product{product_id, title, url} + variant + points[]{date, lowest_price} + count + first_date + last_date + today_price + today_shop + yesterday_price + mean_price_6m + max_price_6m + max_price_note + all_time_lowest{price, date} + currency=EUR","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"cellulari/apple_iphone_17"}}]},{"name":"truckscout24","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"TruckScout24 API — live used commercial-vehicle and plant marketplace data from truckscout24.de / truckscout24.com: trucks over and under 7.5 t, tractor units, trailers and semi-trailers, buses, vans, construction plant, forklifts and warehouse equipment, municipal and special vehicles, agricultural machines, recycling plant, caravans and motorhomes and workshop equipment, from more than 4,500 dealers across Europe. Search and filter on what a pricing or sourcing desk actually needs — type, manufacturer, model, year of construction, first registration, hour meter, odometer, engine power, gross weight, emission class, axle configuration, price band net or gross, seller country and region — then pull one listing in full: the price with its VAT treatment and incoterm, every technical property the seller typed grouped the way the source groups it, the equipment badges, the auction window, the seller's town and trust seal and the full description with the source's injected decoy line removed. Plus the category tree with live counts, the source's own facet counts, autocomplete, and the dealer directory with postal addresses. No login, no API key.","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/truckscout24/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse the marketplace. Combine a keyword with any of the typed filters the source supports natively — category, manufacturer, model, machine type, condition, price band (net or gross), year of construction, first registration, hour meter, odometer, engine power, gross weight, fuel, emission class, gearbox, axles, suspension, colour, seller country and region, listing date, offer kind, trust seal, photos, video — and sort by price, year, listing date, update, manufacturer, type or model. Returns up to 25 rows a page with the price (and its VAT and incoterm wording), year, hour meter, odometer, condition, seller country and every property the result card prints. 🔴 Pass `strict_search=true` for any multi-word query: the source matches ANY word by default, so 'liebherr a 312' returns 55,623 listings loose and 2 strict. 🔴 Depth is capped by the source at 8 pages = 200 rows per query, so narrow rather than page — the filters are measured to bite hard (2,463 rows → 164 by manufacturer, → 797 by a 6-year window, → 517 by an hour-meter band, → 31 by an odometer floor).","required_params":[],"optional_params":["market","query","strict_search","category_id","category_slug","manufacturer","model","machine_type","condition","year_min","year_max","first_registration_min","first_registration_max","operating_hours_min","operating_hours_max","mileage_min","mileage_max","power_min","power_max","total_weight_min","total_weight_max","price_min","price_max","price_band_gross","with_price_only","country","region","listing_type","trust_seal_only","with_images_only","with_video_only","description_contains","fuel_type","emission_class","gearing_type","suspension","axle_configuration","color","mast_type","listed_after","listed_before","auction_ends_before","listing_id","reference_number","machine_number","sort","page","include_facets","include_description"],"params":[{"name":"market","type":"enum","required":false,"description":"Which TruckScout24 host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 21924313 is EUR 16,900 on all of them — the site does not convert currency). Use 'de' for German wording and 'com' for English. The wider TruckScout24 network has 25 further hosts; only these three have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name. One honest caveat: the source's own machine-type translation is unreliable (listing 22233387 is 'LKW mit Pritsche & Plane' on .de and 'Beverage' on .com), which is why 'de' is the default.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — truckscout24.de, German labels (the main site)"},{"value":"at","label":"Austria — truckscout24.at, German labels"},{"value":"com","label":"International — truckscout24.com, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as typed into the source's own search box: a vehicle or machine type ('bagger', 'sattelzugmaschine', 'excavator'), a manufacturer, a model, or several words. 🔴 A MULTI-WORD QUERY WIDENS, IT DOES NOT NARROW, unless you also pass `strict_search=true`: the source splits on spaces and matches ANY token. Measured: 'liebherr a 312' returns 55,623 listings loose and exactly 2 with `strict_search=true`; 'bagger liebherr' 2,757 against 'bagger' alone 2,463; 'zzz-no-such-machine-anywhere-xyz' 8,617. A single unmatched word is an honest empty answer ('xyzzyplughfoo' → total 0, zero rows). Any multi-word query sent without `strict_search` comes back with a warning in meta saying so.","on_invalid":"reject","example":"bagger","aliases":["q","keyword","search_word"]},{"name":"strict_search","type":"boolean","required":false,"description":"Require ALL the words of `query` to match instead of any one of them. The default is the source's own (off) so your totals match what the website shows, but for any query of more than one word this is almost always what you want: 'liebherr a 312' goes from 55,623 results to 2. Measured on single words too: 'bagger' 2,463 loose → 117 strict, because strict also matches the word as a whole rather than as a fragment.","on_invalid":"reject","default":false,"example":true,"aliases":["strict"]},{"name":"category_id","type":"integer","required":false,"description":"Browse one category using the source's own numeric id, at ANY level of the tree (8 = construction plant, 105 = excavators, 7 = transport & commercial vehicles, 246 = flatbed/curtain-side trucks, 252 = tractor units, 42 = forklifts & warehouse equipment, 4 = agricultural, 2357 = caravans & motorhomes). Measured to bite at every level: 8 → 9,535, 132 → 645. Get the ids from the `categories` or `suggest` action, or from any `ts-cat-<id>` URL. Combines with `query` and every filter.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]},{"name":"category_slug","type":"string","required":false,"description":"Browse a category by the source's own URL path instead of by id. This exists because a minority of the child categories the source links are slug-only — its own link carries no numeric id — and `categories` returns `category_id: null` plus this slug for them. Pass it exactly as `categories` returns it ('baumaschinen/gebraucht/grader'). Measured to filter and page identically to an id (645 → 283 used → 26 in Germany). Ignored if `category_id` is also given.","on_invalid":"reject","example":"baumaschinen/gebraucht/grader","value_pattern":"[a-z0-9][a-z0-9\\-/]{2,80}"},{"name":"manufacturer","type":"string","required":false,"description":"Manufacturer, spelled as the source's own facet spells it ('Liebherr', 'Mercedes-Benz', 'MAN', 'Caterpillar', 'DOOSAN' — the case is the source's). Pass a comma-separated list or a JSON array for several; several values widen (OR). Read the available spellings from `facets.manufacturers`. Measured to bite: query=bagger 2,463 → 164 for Liebherr, → 385 for Liebherr or Caterpillar.","on_invalid":"reject","example":"Liebherr","aliases":["brand","manufacturers"]},{"name":"model","type":"string","required":false,"description":"Model name as the source spells it. Pair it with `manufacturer` — the `suggest` action's `products` bucket returns valid manufacturer+model pairs, which is the way to avoid a spelling the source would silently drop.","on_invalid":"reject","example":"Actros","aliases":["models"]},{"name":"machine_type","type":"string","required":false,"description":"The vehicle/machine-type name in that market's language, as printed on the first line of every result ('Mobilbagger', 'Kipper', 'Sattelzugmaschine'). Narrower than `query` because it matches the typed field rather than the whole listing. Measured to bite: 2,463 → 183 for 'Mobilbagger'.","on_invalid":"reject","example":"Mobilbagger"},{"name":"condition","type":"enum","required":false,"description":"Condition class. Pass a comma-separated list for several. 🔴 An unknown value is NOT an error on this source — it is dropped and you get the unfiltered catalogue, so this engine validates the value instead of forwarding it ('brandnew' returned the control's own 2,463 rows). Measured to bite: 2,463 → 2,003 used, 380 new.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used — the bulk of the catalogue (2,003 of 2,463 on a measured query)"},{"value":"new","label":"New / unused (380 of 2,463)"},{"value":"ex-display machine","label":"Ex-display or demonstration machine"},{"value":"defective","label":"Defective / for parts"}],"example":"used","aliases":["conditions"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. 🔴 The source's own field takes a UNIX TIMESTAMP, and a bare year is not rejected — it is MISREAD as a few seconds after 1970, so 'from 2015' silently becomes 'from 1970' (measured: 2,152 results with page-1 years 1980-2022). This engine sends the timestamp the source's own select carries, and the filter then bites exactly: 2,463 → 1,579, every page-1 row 2015-2026.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100,"aliases":["manufactured_from","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive. Same timestamp conversion as `year_min` — a bare year here is even worse, returning 2 listings instead of 80. Measured: year_max=2000 → 80, every row ≤ 2000; year_min 2015 + year_max 2020 → 797.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["manufactured_to","year_to"]},{"name":"first_registration_min","type":"integer","required":false,"description":"Earliest year of first registration (road vehicles). Same UNIX-timestamp trap as `year_min`: a bare year is misread rather than rejected (measured 164 against the correct 65).","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100},{"name":"first_registration_max","type":"integer","required":false,"description":"Latest year of first registration. 🔴 The source's own option for this bound is 1 DECEMBER of the year, not 31 December, so that is what is sent — which means a value of 2024 excludes vehicles first registered in December 2024. Said out loud rather than quietly rounded, because the alternative is sending a timestamp the source's own UI never sends.","on_invalid":"reject","example":2024,"minimum":1900,"maximum":2100},{"name":"operating_hours_min","type":"integer","required":false,"description":"Minimum hour-meter reading. This is the machine's HOUR meter, kept separate from `mileage_min` (the odometer) so hours and kilometres are never compared. Measured to bite: 2,463 → 752 above 5,000 h.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Maximum hour-meter reading. Measured to bite: 2,463 → 517 under 2,000 h.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["hours_max"]},{"name":"mileage_min","type":"integer","required":false,"description":"Minimum odometer reading in km. A property of road vehicles (trucks, tractor units, vans, buses) and self-propelled plant, separate from the hour meter. Measured to bite: 2,463 → 31 above 100,000 km.","on_invalid":"reject","example":100000,"minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Maximum odometer reading in km. Pair it with `mileage_min` for a band: a band is what makes a comparable set, because the odometer is the single biggest price driver on a road vehicle.","on_invalid":"reject","example":500000,"minimum":0},{"name":"power_min","type":"integer","required":false,"description":"Minimum engine power in kW (the unit the source's own filter uses; it prints both kW and PS/HP in the data). Measured to bite: 2,463 → 209 for 100-200 kW.","on_invalid":"reject","example":100,"minimum":0},{"name":"power_max","type":"integer","required":false,"description":"Maximum engine power in kW — the unit the source's own filter uses, even though it prints both kW and PS/HP in the data it returns.","on_invalid":"reject","example":200,"minimum":0},{"name":"total_weight_min","type":"integer","required":false,"description":"Minimum gross/overall weight in kg. Measured to bite: 2,463 → 128 above 10,000 kg.","on_invalid":"reject","example":10000,"minimum":0},{"name":"total_weight_max","type":"integer","required":false,"description":"Maximum gross/overall weight in kg. This is the plated weight the source publishes as `Gesamtgewicht` / `Overall weight`, not the empty weight.","on_invalid":"reject","example":40000,"minimum":0},{"name":"price_min","type":"number","required":false,"description":"Minimum price in EUR. Net of VAT unless you also pass `price_band_gross`. Measured to bite: 2,463 → 1,113 for 10,000-50,000 EUR.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in EUR. Net of VAT unless `price_band_gross` is also set — on this source a seller may price either way, so a band without that flag is a band on the net figure.","on_invalid":"reject","example":50000,"minimum":0},{"name":"price_band_gross","type":"boolean","required":false,"description":"Apply `price_min`/`price_max` to the GROSS (VAT-inclusive) price instead of the net one. Measured to change the answer: the same 10,000-50,000 band returns 1,113 net and 981 gross. It has no effect without a price band.","on_invalid":"reject","default":false,"example":true,"aliases":["use_price_gross"]},{"name":"with_price_only","type":"boolean","required":false,"description":"Only listings that publish a price, dropping the 'price on request' ones. Measured to bite: 2,463 → 2,159. Note the inverse is not available: the source ignores `has-price=0` (it returned the full 2,463), so there is no 'price-on-request only' filter to offer. Filter the `price_on_request` field instead.","on_invalid":"reject","default":false,"example":true,"aliases":["has_price"]},{"name":"country","type":"string","required":false,"description":"Seller country as an ISO-3166 alpha-2 code, UPPER CASE ('DE', 'NL', 'AT', 'PL'). Comma-separate for several. 🔴 The source is case sensitive and silently drops a lower-case code — measured: `countries[]=de` answered '0 results' over the unfiltered catalogue — so this engine upper-cases before sending. Measured to bite: 2,463 → 1,457 DE, → 275 NL.","on_invalid":"reject","example":"DE","value_pattern":"[A-Za-z]{2}(,[A-Za-z]{2})*","aliases":["countries"]},{"name":"region","type":"string","required":false,"description":"Region/state inside `country`, by the source's OWN NAME, not a code ('Bayern', 'Niedersachsen', 'Nordrhein-Westfalen'). 🔴 A code is silently dropped upstream (`regions[DE][]=BY` answered '0 results' over the unfiltered catalogue). Requires `country`, because the source nests regions under a country. Read the valid names from `facets.regions`; note the source itself publishes both 'Bayern' and 'Bavaria' as separate region values. Measured to bite: country=DE 1,457 → 475 Bayern.","on_invalid":"reject","example":"Bayern"},{"name":"listing_type","type":"enum","required":false,"description":"Restrict to one kind of offer. Measured to bite on query=bagger: classified 2,462, auction 1, rental 47 (and 306 auctions / 1,173 rentals across the whole catalogue). 🔴 Two further flags exist in the source's own form, `is-spare-parts` and `is-buy-now`, and returned ZERO rows for every combination tried (alone, with a keyword, inside a category), so they are not offered rather than offered as filters that always answer nothing.","on_invalid":"reject","allowed_values":[{"value":"classified","label":"An ordinary classified ad (the bulk of the catalogue)"},{"value":"auction","label":"An online auction run on the marketplace"},{"value":"rental","label":"Offered for rent rather than sale"}],"example":"auction"},{"name":"trust_seal_only","type":"boolean","required":false,"description":"Only listings from dealers carrying the marketplace's own trust seal. Measured to bite: 2,463 → 540.","on_invalid":"reject","default":false,"example":true,"aliases":["has_trustseal"]},{"name":"with_images_only","type":"boolean","required":false,"description":"Only listings with at least one photo. Measured: 2,463 → 2,452, i.e. it barely narrows anything on this marketplace.","on_invalid":"reject","default":false,"example":true},{"name":"with_video_only","type":"boolean","required":false,"description":"Only listings with a video. Measured to bite: 2,463 → 204.","on_invalid":"reject","default":false,"example":true},{"name":"description_contains","type":"string","required":false,"description":"A word that must appear in the seller's free-text description. This searches the prose rather than the typed fields, which is how to find equipment the source has no field for. Measured to bite: 2,463 → 148 for 'hydraulik'.","on_invalid":"reject","example":"hydraulik"},{"name":"fuel_type","type":"enum","required":false,"description":"Fuel type, by the source's own value. Measured to bite: 2,463 → 581 diesel. 🔴 An unknown value ('petrol') is dropped and answers '0 results' over the unfiltered catalogue, so it is validated here.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"gasoline"},{"value":"diesel","label":"diesel"},{"value":"electric","label":"electric"},{"value":"gas","label":"gas"},{"value":"hybrid","label":"hybrid"},{"value":"hydrogen","label":"hydrogen"}],"example":"diesel"},{"name":"emission_class","type":"enum","required":false,"description":"Euro emission class, by the source's own value. Measured to bite: 2,463 → 23 for euro6.","on_invalid":"reject","allowed_values":[{"value":"euro1","label":"euro1"},{"value":"euro2","label":"euro2"},{"value":"euro3","label":"euro3"},{"value":"euro4","label":"euro4"},{"value":"euro5","label":"euro5"},{"value":"euro6","label":"euro6"},{"value":"euro6b","label":"euro6b"},{"value":"euro6c","label":"euro6c"},{"value":"euro6d","label":"euro6d"},{"value":"euro6d-temp","label":"euro6d-temp"},{"value":"euro6e","label":"euro6e"},{"value":"euro7","label":"euro7"},{"value":"none","label":"none"}],"example":"euro6"},{"name":"gearing_type","type":"enum","required":false,"description":"Gearbox type. Measured to bite: 2,463 → 113 automatic.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"automatic"},{"value":"semi-automatic","label":"semi-automatic"},{"value":"hydrostat","label":"hydrostat"},{"value":"converter","label":"converter"},{"value":"mechanical","label":"mechanical"},{"value":"other","label":"other"}],"example":"automatic"},{"name":"suspension","type":"enum","required":false,"description":"Suspension type, by the source's own value. The source PRINTS the market's own word (`Blatt-Luft`) and FILTERS on the code (`steel-air`); the rows this API returns carry the code, so reading a row and asking for more like it round-trips.","on_invalid":"reject","allowed_values":[{"value":"steel","label":"steel"},{"value":"steel-air","label":"steel-air"},{"value":"hydraulics","label":"hydraulics"},{"value":"air","label":"air"},{"value":"parabolic leaf (spring)","label":"parabolic leaf (spring)"},{"value":"other","label":"other"}],"example":"air"},{"name":"axle_configuration","type":"enum","required":false,"description":"Number of axles, by the source's own value. Measured to bite: 2,463 → 56 for '2 axles'.","on_invalid":"reject","allowed_values":[{"value":"1 axle","label":"1 axle"},{"value":"2 axles","label":"2 axles"},{"value":"3 axles","label":"3 axles"},{"value":"> 3 axles","label":"> 3 axles"}],"example":"2 axles"},{"name":"color","type":"enum","required":false,"description":"Colour, by the source's own value (`yellow`, not `Gelb`). Same round-trip rule as `suspension`: the printed word is mapped to the filter's own code.","on_invalid":"reject","allowed_values":[{"value":"beige","label":"beige"},{"value":"blue","label":"blue"},{"value":"brown","label":"brown"},{"value":"bronze","label":"bronze"},{"value":"dark red","label":"dark red"},{"value":"yellow","label":"yellow"},{"value":"gold","label":"gold"},{"value":"grey","label":"grey"},{"value":"grey-black","label":"grey-black"},{"value":"green","label":"green"},{"value":"light blue","label":"light blue"},{"value":"light grey","label":"light grey"},{"value":"light green","label":"light green"},{"value":"orange","label":"orange"},{"value":"original","label":"original"},{"value":"red","label":"red"},{"value":"black","label":"black"},{"value":"silver","label":"silver"},{"value":"other","label":"other"},{"value":"traffic orange","label":"traffic orange"},{"value":"violet","label":"violet"},{"value":"white","label":"white"}],"example":"yellow","aliases":["colour"]},{"name":"mast_type","type":"enum","required":false,"description":"Forklift mast type — only meaningful inside the forklift categories.","on_invalid":"reject","allowed_values":[{"value":"telescopic","label":"telescopic"},{"value":"duplex","label":"duplex"},{"value":"free lift with tel. boom","label":"free lift with tel. boom"},{"value":"mono","label":"mono"},{"value":"simplex","label":"simplex"},{"value":"other","label":"other"},{"value":"triplex","label":"triplex"}],"example":"triplex"},{"name":"listed_after","type":"string","required":false,"description":"Only listings put online on or after this date (YYYY-MM-DD). This is how to poll a narrow query for what is new. Measured to bite: 2,463 → 169 for the last seven days.","on_invalid":"reject","example":"2026-09-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}|\\d{9,11}"},{"name":"listed_before","type":"string","required":false,"description":"Only listings put online before this date (YYYY-MM-DD). Measured to bite: 2,463 → 477 for listings older than a year.","on_invalid":"reject","example":"2025-10-08","value_pattern":"\\d{4}-\\d{2}-\\d{2}|\\d{9,11}"},{"name":"auction_ends_before","type":"string","required":false,"description":"Only auctions ending before this date (YYYY-MM-DD). Measured to bite: the 306 live auctions → 106 ending inside a week.","on_invalid":"reject","example":"2026-11-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}|\\d{9,11}"},{"name":"listing_id","type":"string","required":false,"description":"Look one listing up inside a search. Note the source pads the answer: it reports '(1)' and renders 25 cards, 24 of which match nothing in the query. This engine cuts them. For one listing in full use the `detail` action instead.","on_invalid":"reject","example":"21924313"},{"name":"reference_number","type":"string","required":false,"description":"The seller's own reference number, as printed on the listing. Measured to bite: 2,463 → 1 (plus the padding this engine cuts).","on_invalid":"reject","example":"29683","value_pattern":"[A-Za-z0-9][A-Za-z0-9 ._/+\\-]{1,48}"},{"name":"machine_number","type":"string","required":false,"description":"The seller's own machine or vehicle number, printed on the listing as 'Fahrzeugnummer' / 'Vehicle ID number'. Different from `reference_number`: that is the advert's reference, this is the vehicle's.","on_invalid":"reject","example":"2204","value_pattern":"[A-Za-z0-9][A-Za-z0-9 ._/+\\-]{1,48}"},{"name":"sort","type":"enum","required":false,"description":"Result order. 🔴 Only orders MEASURED to bite are offered: the source accepts an unknown sort field with HTTP 200 and silently falls back to relevance (measured for 'referenz', 'laufzeit', 'einstelldatum' and a nonsense value), and its own dropdown is not the full set of values it honours. `meta.sort_applied` reports the sort the SOURCE says it used, so you never have to trust that the parameter arrived. Sorting by distance is deliberately NOT offered: the source's distance is measured from whoever asks, which for an API is the server, so the same call would order differently from different machines.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The source's own relevance order (its default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Newest listing first (by the date it was put online)"},{"value":"oldest","label":"Oldest listing first"},{"value":"year_desc","label":"Newest year of construction first"},{"value":"year_asc","label":"Oldest year of construction first"},{"value":"updated_desc","label":"Most recently updated listing first"},{"value":"updated_asc","label":"Least recently updated first"},{"value":"manufacturer_asc","label":"Manufacturer A→Z"},{"value":"manufacturer_desc","label":"Manufacturer Z→A"},{"value":"machine_type_asc","label":"Machine/vehicle type A→Z"},{"value":"machine_type_desc","label":"Machine/vehicle type Z→A"},{"value":"model_asc","label":"Model A→Z"},{"value":"model_desc","label":"Model Z→A"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Result page, 25 rows a page. 🔴 Capped at 8 by the SOURCE: page 9 answers HTTP 404 for a 2,463-row query and for a 45,694-row one alike (pages 10, 20 and 100 too), so at most 200 rows are retrievable per query however large `total` is. It does not silently repeat the last page. To go deeper, narrow — every filter here was measured to bite.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":8},{"name":"include_facets","type":"boolean","required":false,"description":"Add the source's own live filter counts for this query to `meta.facets` without a second request (the same page carries them).","on_invalid":"reject","default":false,"example":true},{"name":"include_description","type":"boolean","required":false,"description":"Include each row's description preview (default true). The decoy line the source injects is removed and the number removed is reported per row.","on_invalid":"reject","default":true,"example":true}],"returns":"listings[]: listing_id, url, listing_type (classified | auction | auction_external), machine_type, manufacturer, model, year, first_registration (YYYY-MM — a road vehicle usually publishes this INSTEAD of a year of construction: measured 10 of 25 truck cards print a year and 15 print only a first registration), condition, functionality, operating_hours, operating_hours_unit, mileage, mileage_unit, power_kw, total_weight_kg, emission_class, fuel_type, condition, condition_value (the `conditions[]` value the FILTER takes, beside the source's own wording, so that reading a row and asking for more like it round-trips), price (the figure the source headlines), price_net, price_gross (the comparable pair — a VAT-inclusive 48,800 and a VAT-exclusive 16,900 do not belong in one column), currency, price_display, price_previous, price_previous_display, discount_pct, price_on_request, price_source (asking | auction_start | on_request), auction_start_price, price_terms, price_type (fixed | negotiable), vat (excluded | included | not_applicable), incoterm, auction_time_left (an auction card's countdown — the line beside an auction figure is a TIME, not a commercial term), location_city, location_country, location_country_code, category_id, category_name, seller_id, seller_has_trust_seal, image, image_count, specs[] (every property the card prints, with the source's own label plus a parsed number and unit) and description_preview with description_decoy_lines_removed. Note on country: `location_country_code` always comes from the flag the card always renders, while `location_country` is the source's own localized country NAME and is blank on the rows where the source leaves its own title attribute empty — filter and group on the code. meta carries total, total_is_rounded, sort_applied (the sort the SOURCE says it used), pagination (page, page_size, last_page, retrievable_max, has_more), filters_applied and any warnings. No distance field is published: the source's distance is computed from the caller's own location, which for an API is the server's.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"bagger","market":"de","page":1}},{"name":"detail","description":"One listing in full, by id. Returns the vehicle or machine (type, manufacturer, model, year, condition, functionality, hour meter, odometer, the seller's own vehicle number), the price with its previous price, gross figure, VAT treatment and incoterm, every technical property the seller typed — grouped the way the source groups them, each with a parsed number and unit — the boolean equipment badges, the offer block (listing code, reference number, last update, and an auction's start and end), the seller's street, postcode, town and country, the dealer id with their member-since year, listings online and trust seal, the category breadcrumb, every gallery image and the full description with the injected decoy line removed. The price is cross-checked against the page's own schema.org product data and any disagreement is reported, not hidden.","required_params":["listing_id"],"optional_params":["market"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The listing's numeric id. Accepted as the plain number (21924313), with the source's own 'A' prefix, in its dashed display form (219-24-313 / A219-24-313) or as a full listing URL ending in /tsp/ts-21924313. Get ids from `search`.","on_invalid":"reject","example":"21924313","aliases":["id","ad_id"]},{"name":"market","type":"enum","required":false,"description":"Which TruckScout24 host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 21924313 is EUR 16,900 on all of them — the site does not convert currency). Use 'de' for German wording and 'com' for English. The wider TruckScout24 network has 25 further hosts; only these three have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name. One honest caveat: the source's own machine-type translation is unreliable (listing 22233387 is 'LKW mit Pritsche & Plane' on .de and 'Beverage' on .com), which is why 'de' is the default.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — truckscout24.de, German labels (the main site)"},{"value":"at","label":"Austria — truckscout24.at, German labels"},{"value":"com","label":"International — truckscout24.com, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]}],"returns":"listing{} with machine fields, price{price, price_net, price_gross, currency, price_previous, discount_pct, price_terms, price_type, vat, incoterm, price_on_request, price_source, auction_start_price}, specs[], spec_groups{}, features[], offer{}, location{}, seller{}, category{}, breadcrumb[], images[], description, description_decoy_lines_removed and price_witness{} (the schema.org price beside the printed one, with agreed=true/false). No distance field: the source's distance is measured from whoever asks. The seller's company NAME is not on a listing page at all — it is login-walled — so `seller.name` is null and `seller.dealer_id` feeds the `seller` action, which has it.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"listing_id":"21924313","market":"de"}},{"name":"categories","description":"The marketplace's own category tree with live per-category listing counts: the nine top-level sectors (transport & commercial vehicles, construction plant, forklifts & warehouse equipment, agricultural, caravans & motorhomes, municipal technology, warehouse technology, recycling, workshop equipment) with the numeric ids every other action's `category_id` takes. Pass a `category_id` to drill into that sector's children — the FULL list the source publishes, not its 'top' shortlist — which is how you get from 9,535 construction machines to the 2,053 excavators or the 1,819 access platforms. Every count is the source's own live figure.","required_params":[],"optional_params":["market","category_id"],"params":[{"name":"market","type":"enum","required":false,"description":"Which TruckScout24 host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 21924313 is EUR 16,900 on all of them — the site does not convert currency). Use 'de' for German wording and 'com' for English. The wider TruckScout24 network has 25 further hosts; only these three have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name. One honest caveat: the source's own machine-type translation is unreliable (listing 22233387 is 'LKW mit Pritsche & Plane' on .de and 'Beverage' on .com), which is why 'de' is the default.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — truckscout24.de, German labels (the main site)"},{"value":"at","label":"Austria — truckscout24.at, German labels"},{"value":"com","label":"International — truckscout24.com, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"category_id","type":"integer","required":false,"description":"Browse one category using the source's own numeric id, at ANY level of the tree (8 = construction plant, 105 = excavators, 7 = transport & commercial vehicles, 246 = flatbed/curtain-side trucks, 252 = tractor units, 42 = forklifts & warehouse equipment, 4 = agricultural, 2357 = caravans & motorhomes). Measured to bite at every level: 8 → 9,535, 132 → 645. Get the ids from the `categories` or `suggest` action, or from any `ts-cat-<id>` URL. Combines with `query` and every filter.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]}],"returns":"categories[]: category_id, name, slug, url, count, parent_id. meta.level says whether these are the top sectors or one sector's children, meta.listings_total is their counts added up (compare it with the round 120,000 an unfiltered search reports), and meta.children_without_id counts the children whose own link on the source carries no numeric id — use their `slug` with search's `category_slug`.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"de"}},{"name":"facets","description":"The source's own live filter counts for a query: which categories, sub-categories, manufacturers, countries, regions, conditions, fuel types, emission classes, gearbox types, suspensions, colours, mast types and axle configurations have stock, and how much. This is how you learn the exact spelling a filter wants (the source is case sensitive and wants region NAMES, not codes) and how to narrow a query that is deeper than the 200-row retrievable ceiling. The source publishes its top 15 per checkbox group. 🔴 The radius bands it also prints are NOT returned: their counts are computed from the caller's own location, which for an API is the server's.","required_params":[],"optional_params":["market","query","strict_search","category_id","category_slug","manufacturer","machine_type","condition","year_min","year_max","operating_hours_min","operating_hours_max","mileage_min","mileage_max","price_min","price_max","with_price_only","country","region","listing_type","description_contains","fuel_type","emission_class","sort"],"params":[{"name":"market","type":"enum","required":false,"description":"Which TruckScout24 host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 21924313 is EUR 16,900 on all of them — the site does not convert currency). Use 'de' for German wording and 'com' for English. The wider TruckScout24 network has 25 further hosts; only these three have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name. One honest caveat: the source's own machine-type translation is unreliable (listing 22233387 is 'LKW mit Pritsche & Plane' on .de and 'Beverage' on .com), which is why 'de' is the default.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — truckscout24.de, German labels (the main site)"},{"value":"at","label":"Austria — truckscout24.at, German labels"},{"value":"com","label":"International — truckscout24.com, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"query","type":"string","required":false,"description":"Free-text keyword, exactly as typed into the source's own search box: a vehicle or machine type ('bagger', 'sattelzugmaschine', 'excavator'), a manufacturer, a model, or several words. 🔴 A MULTI-WORD QUERY WIDENS, IT DOES NOT NARROW, unless you also pass `strict_search=true`: the source splits on spaces and matches ANY token. Measured: 'liebherr a 312' returns 55,623 listings loose and exactly 2 with `strict_search=true`; 'bagger liebherr' 2,757 against 'bagger' alone 2,463; 'zzz-no-such-machine-anywhere-xyz' 8,617. A single unmatched word is an honest empty answer ('xyzzyplughfoo' → total 0, zero rows). Any multi-word query sent without `strict_search` comes back with a warning in meta saying so.","on_invalid":"reject","example":"bagger","aliases":["q","keyword","search_word"]},{"name":"strict_search","type":"boolean","required":false,"description":"Require ALL the words of `query` to match instead of any one of them. The default is the source's own (off) so your totals match what the website shows, but for any query of more than one word this is almost always what you want: 'liebherr a 312' goes from 55,623 results to 2. Measured on single words too: 'bagger' 2,463 loose → 117 strict, because strict also matches the word as a whole rather than as a fragment.","on_invalid":"reject","default":false,"example":true,"aliases":["strict"]},{"name":"category_id","type":"integer","required":false,"description":"Browse one category using the source's own numeric id, at ANY level of the tree (8 = construction plant, 105 = excavators, 7 = transport & commercial vehicles, 246 = flatbed/curtain-side trucks, 252 = tractor units, 42 = forklifts & warehouse equipment, 4 = agricultural, 2357 = caravans & motorhomes). Measured to bite at every level: 8 → 9,535, 132 → 645. Get the ids from the `categories` or `suggest` action, or from any `ts-cat-<id>` URL. Combines with `query` and every filter.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]},{"name":"category_slug","type":"string","required":false,"description":"Browse a category by the source's own URL path instead of by id. This exists because a minority of the child categories the source links are slug-only — its own link carries no numeric id — and `categories` returns `category_id: null` plus this slug for them. Pass it exactly as `categories` returns it ('baumaschinen/gebraucht/grader'). Measured to filter and page identically to an id (645 → 283 used → 26 in Germany). Ignored if `category_id` is also given.","on_invalid":"reject","example":"baumaschinen/gebraucht/grader","value_pattern":"[a-z0-9][a-z0-9\\-/]{2,80}"},{"name":"manufacturer","type":"string","required":false,"description":"Manufacturer, spelled as the source's own facet spells it ('Liebherr', 'Mercedes-Benz', 'MAN', 'Caterpillar', 'DOOSAN' — the case is the source's). Pass a comma-separated list or a JSON array for several; several values widen (OR). Read the available spellings from `facets.manufacturers`. Measured to bite: query=bagger 2,463 → 164 for Liebherr, → 385 for Liebherr or Caterpillar.","on_invalid":"reject","example":"Liebherr","aliases":["brand","manufacturers"]},{"name":"machine_type","type":"string","required":false,"description":"The vehicle/machine-type name in that market's language, as printed on the first line of every result ('Mobilbagger', 'Kipper', 'Sattelzugmaschine'). Narrower than `query` because it matches the typed field rather than the whole listing. Measured to bite: 2,463 → 183 for 'Mobilbagger'.","on_invalid":"reject","example":"Mobilbagger"},{"name":"condition","type":"enum","required":false,"description":"Condition class. Pass a comma-separated list for several. 🔴 An unknown value is NOT an error on this source — it is dropped and you get the unfiltered catalogue, so this engine validates the value instead of forwarding it ('brandnew' returned the control's own 2,463 rows). Measured to bite: 2,463 → 2,003 used, 380 new.","on_invalid":"reject","allowed_values":[{"value":"used","label":"Used — the bulk of the catalogue (2,003 of 2,463 on a measured query)"},{"value":"new","label":"New / unused (380 of 2,463)"},{"value":"ex-display machine","label":"Ex-display or demonstration machine"},{"value":"defective","label":"Defective / for parts"}],"example":"used","aliases":["conditions"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest year of construction, inclusive. 🔴 The source's own field takes a UNIX TIMESTAMP, and a bare year is not rejected — it is MISREAD as a few seconds after 1970, so 'from 2015' silently becomes 'from 1970' (measured: 2,152 results with page-1 years 1980-2022). This engine sends the timestamp the source's own select carries, and the filter then bites exactly: 2,463 → 1,579, every page-1 row 2015-2026.","on_invalid":"reject","example":2015,"minimum":1900,"maximum":2100,"aliases":["manufactured_from","year_from"]},{"name":"year_max","type":"integer","required":false,"description":"Latest year of construction, inclusive. Same timestamp conversion as `year_min` — a bare year here is even worse, returning 2 listings instead of 80. Measured: year_max=2000 → 80, every row ≤ 2000; year_min 2015 + year_max 2020 → 797.","on_invalid":"reject","example":2020,"minimum":1900,"maximum":2100,"aliases":["manufactured_to","year_to"]},{"name":"operating_hours_min","type":"integer","required":false,"description":"Minimum hour-meter reading. This is the machine's HOUR meter, kept separate from `mileage_min` (the odometer) so hours and kilometres are never compared. Measured to bite: 2,463 → 752 above 5,000 h.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["hours_min"]},{"name":"operating_hours_max","type":"integer","required":false,"description":"Maximum hour-meter reading. Measured to bite: 2,463 → 517 under 2,000 h.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["hours_max"]},{"name":"mileage_min","type":"integer","required":false,"description":"Minimum odometer reading in km. A property of road vehicles (trucks, tractor units, vans, buses) and self-propelled plant, separate from the hour meter. Measured to bite: 2,463 → 31 above 100,000 km.","on_invalid":"reject","example":100000,"minimum":0},{"name":"mileage_max","type":"integer","required":false,"description":"Maximum odometer reading in km. Pair it with `mileage_min` for a band: a band is what makes a comparable set, because the odometer is the single biggest price driver on a road vehicle.","on_invalid":"reject","example":500000,"minimum":0},{"name":"price_min","type":"number","required":false,"description":"Minimum price in EUR. Net of VAT unless you also pass `price_band_gross`. Measured to bite: 2,463 → 1,113 for 10,000-50,000 EUR.","on_invalid":"reject","example":10000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price in EUR. Net of VAT unless `price_band_gross` is also set — on this source a seller may price either way, so a band without that flag is a band on the net figure.","on_invalid":"reject","example":50000,"minimum":0},{"name":"with_price_only","type":"boolean","required":false,"description":"Only listings that publish a price, dropping the 'price on request' ones. Measured to bite: 2,463 → 2,159. Note the inverse is not available: the source ignores `has-price=0` (it returned the full 2,463), so there is no 'price-on-request only' filter to offer. Filter the `price_on_request` field instead.","on_invalid":"reject","default":false,"example":true,"aliases":["has_price"]},{"name":"country","type":"string","required":false,"description":"Seller country as an ISO-3166 alpha-2 code, UPPER CASE ('DE', 'NL', 'AT', 'PL'). Comma-separate for several. 🔴 The source is case sensitive and silently drops a lower-case code — measured: `countries[]=de` answered '0 results' over the unfiltered catalogue — so this engine upper-cases before sending. Measured to bite: 2,463 → 1,457 DE, → 275 NL.","on_invalid":"reject","example":"DE","value_pattern":"[A-Za-z]{2}(,[A-Za-z]{2})*","aliases":["countries"]},{"name":"region","type":"string","required":false,"description":"Region/state inside `country`, by the source's OWN NAME, not a code ('Bayern', 'Niedersachsen', 'Nordrhein-Westfalen'). 🔴 A code is silently dropped upstream (`regions[DE][]=BY` answered '0 results' over the unfiltered catalogue). Requires `country`, because the source nests regions under a country. Read the valid names from `facets.regions`; note the source itself publishes both 'Bayern' and 'Bavaria' as separate region values. Measured to bite: country=DE 1,457 → 475 Bayern.","on_invalid":"reject","example":"Bayern"},{"name":"listing_type","type":"enum","required":false,"description":"Restrict to one kind of offer. Measured to bite on query=bagger: classified 2,462, auction 1, rental 47 (and 306 auctions / 1,173 rentals across the whole catalogue). 🔴 Two further flags exist in the source's own form, `is-spare-parts` and `is-buy-now`, and returned ZERO rows for every combination tried (alone, with a keyword, inside a category), so they are not offered rather than offered as filters that always answer nothing.","on_invalid":"reject","allowed_values":[{"value":"classified","label":"An ordinary classified ad (the bulk of the catalogue)"},{"value":"auction","label":"An online auction run on the marketplace"},{"value":"rental","label":"Offered for rent rather than sale"}],"example":"auction"},{"name":"description_contains","type":"string","required":false,"description":"A word that must appear in the seller's free-text description. This searches the prose rather than the typed fields, which is how to find equipment the source has no field for. Measured to bite: 2,463 → 148 for 'hydraulik'.","on_invalid":"reject","example":"hydraulik"},{"name":"fuel_type","type":"enum","required":false,"description":"Fuel type, by the source's own value. Measured to bite: 2,463 → 581 diesel. 🔴 An unknown value ('petrol') is dropped and answers '0 results' over the unfiltered catalogue, so it is validated here.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"gasoline"},{"value":"diesel","label":"diesel"},{"value":"electric","label":"electric"},{"value":"gas","label":"gas"},{"value":"hybrid","label":"hybrid"},{"value":"hydrogen","label":"hydrogen"}],"example":"diesel"},{"name":"emission_class","type":"enum","required":false,"description":"Euro emission class, by the source's own value. Measured to bite: 2,463 → 23 for euro6.","on_invalid":"reject","allowed_values":[{"value":"euro1","label":"euro1"},{"value":"euro2","label":"euro2"},{"value":"euro3","label":"euro3"},{"value":"euro4","label":"euro4"},{"value":"euro5","label":"euro5"},{"value":"euro6","label":"euro6"},{"value":"euro6b","label":"euro6b"},{"value":"euro6c","label":"euro6c"},{"value":"euro6d","label":"euro6d"},{"value":"euro6d-temp","label":"euro6d-temp"},{"value":"euro6e","label":"euro6e"},{"value":"euro7","label":"euro7"},{"value":"none","label":"none"}],"example":"euro6"},{"name":"sort","type":"enum","required":false,"description":"Result order. 🔴 Only orders MEASURED to bite are offered: the source accepts an unknown sort field with HTTP 200 and silently falls back to relevance (measured for 'referenz', 'laufzeit', 'einstelldatum' and a nonsense value), and its own dropdown is not the full set of values it honours. `meta.sort_applied` reports the sort the SOURCE says it used, so you never have to trust that the parameter arrived. Sorting by distance is deliberately NOT offered: the source's distance is measured from whoever asks, which for an API is the server, so the same call would order differently from different machines.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The source's own relevance order (its default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Newest listing first (by the date it was put online)"},{"value":"oldest","label":"Oldest listing first"},{"value":"year_desc","label":"Newest year of construction first"},{"value":"year_asc","label":"Oldest year of construction first"},{"value":"updated_desc","label":"Most recently updated listing first"},{"value":"updated_asc","label":"Least recently updated first"},{"value":"manufacturer_asc","label":"Manufacturer A→Z"},{"value":"manufacturer_desc","label":"Manufacturer Z→A"},{"value":"machine_type_asc","label":"Machine/vehicle type A→Z"},{"value":"machine_type_desc","label":"Machine/vehicle type Z→A"},{"value":"model_asc","label":"Model A→Z"},{"value":"model_desc","label":"Model Z→A"}],"default":"relevance","example":"price_asc"}],"returns":"facets{categories[], sub_categories[], manufacturers[], countries[], regions[] (each with its country), conditions[], fuel_type[], emission_class[], gearing_type[], suspension[], color[], mast_type[], axle_configuration[]} — each value with the source's own label and count, plus meta.total and meta.truncated_to.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"bagger","market":"de"}},{"name":"suggest","description":"The source's own autocomplete for a typed prefix, in four buckets: machine/vehicle types, manufacturers, categories (with their numeric id or slug) and products (manufacturer + model pairs). Use it to turn whatever a user typed into values the `machine_type`, `manufacturer`, `model` and `category_id` filters accept, instead of guessing a spelling the source would silently drop.","required_params":["query"],"optional_params":["market","category_id"],"params":[{"name":"query","type":"string","required":true,"description":"What the user has typed so far, at least 2 characters — the source's own autocomplete does not answer a shorter prefix.","on_invalid":"reject","example":"kipper","aliases":["q","prefix"]},{"name":"market","type":"enum","required":false,"description":"Which TruckScout24 host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 21924313 is EUR 16,900 on all of them — the site does not convert currency). Use 'de' for German wording and 'com' for English. The wider TruckScout24 network has 25 further hosts; only these three have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name. One honest caveat: the source's own machine-type translation is unreliable (listing 22233387 is 'LKW mit Pritsche & Plane' on .de and 'Beverage' on .com), which is why 'de' is the default.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — truckscout24.de, German labels (the main site)"},{"value":"at","label":"Austria — truckscout24.at, German labels"},{"value":"com","label":"International — truckscout24.com, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"category_id","type":"integer","required":false,"description":"Browse one category using the source's own numeric id, at ANY level of the tree (8 = construction plant, 105 = excavators, 7 = transport & commercial vehicles, 246 = flatbed/curtain-side trucks, 252 = tractor units, 42 = forklifts & warehouse equipment, 4 = agricultural, 2357 = caravans & motorhomes). Measured to bite at every level: 8 → 9,535, 132 → 645. Get the ids from the `categories` or `suggest` action, or from any `ts-cat-<id>` URL. Combines with `query` and every filter.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]}],"returns":"suggestions{machine_types[], manufacturers[], categories[] (with category_id or slug), products[] (with manufacturer and model)} each with name and url.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kipper","market":"de"}},{"name":"dealers","description":"The dealer directory for one category: the dealers themselves, 100 a page, each with company name, street, postcode, town, country, region, trust seal and the dealer id the `seller` action takes. This is the supplier-side view of the marketplace — the source's own figure is over 4,500 dealers. 🔴 The distance it prints beside each dealer, and its own default ordering BY that distance, are both measured from the caller's location and are neither returned nor offered.","required_params":["category_id"],"optional_params":["market","page","sort"],"params":[{"name":"category_id","type":"integer","required":true,"description":"The category whose dealers to list. The source's dealer directory is organised per category and has no 'all dealers' page. Use `categories` for the ids.","on_invalid":"reject","example":105,"minimum":1,"aliases":["ci","category"]},{"name":"market","type":"enum","required":false,"description":"Which TruckScout24 host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 21924313 is EUR 16,900 on all of them — the site does not convert currency). Use 'de' for German wording and 'com' for English. The wider TruckScout24 network has 25 further hosts; only these three have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name. One honest caveat: the source's own machine-type translation is unreliable (listing 22233387 is 'LKW mit Pritsche & Plane' on .de and 'Beverage' on .com), which is why 'de' is the default.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — truckscout24.de, German labels (the main site)"},{"value":"at","label":"Austria — truckscout24.at, German labels"},{"value":"com","label":"International — truckscout24.com, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]},{"name":"page","type":"integer","required":false,"description":"Directory page, 100 dealers a page. A page past the last one answers NOT_FOUND; the source publishes no dealer total.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"sort","type":"enum","required":false,"description":"Directory order. 🔴 The source's OWN default order is distance from the viewer, which for an API is the server — the same page would come back in a different order from a different container — so this engine always sends an explicit stable order and does not offer the distance one.","on_invalid":"reject","allowed_values":[{"value":"name","label":"Company name A→Z"},{"value":"postcode","label":"By postcode"},{"value":"country","label":"By country, then name"}],"default":"name","example":"name"}],"returns":"dealers[]: dealer_id, name, url, address (the source's own four-line block), street, postcode, city, country, region, has_trust_seal.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":105,"market":"de","page":1}},{"name":"seller","description":"One dealer's public profile by id: company name, postal address (street, postcode, town, region, country), their own description of the business, the vehicle categories they deal in, the searches the source cross-links from their page, and the trust seal. This is where a listing's seller NAME comes from — the listing page itself keeps it behind a login. 🔴 The listing cards on a dealer's page are login-walled placeholder markup (every one carries the dealer's own name as its title and has listing id 0), so they are deliberately not returned; use `search` for real stock. The named contact person at the top of the profile's address block is returned as `contact_name`.","required_params":["dealer_id"],"optional_params":["market"],"params":[{"name":"dealer_id","type":"string","required":true,"description":"The dealer's numeric id, as returned by `dealers`, by `search` (each row's `seller_id`) or by `detail` (`listing.seller.dealer_id`). A dealer profile URL containing /tsd/75149/ is accepted too.","on_invalid":"reject","example":"75149","aliases":["seller_id","customer_number","id"]},{"name":"market","type":"enum","required":false,"description":"Which TruckScout24 host to read. 🔴 This picks the LANGUAGE of the labels, not a different catalogue: the listings are one shared pool and the price is the same number in the same currency on every host (measured: listing 21924313 is EUR 16,900 on all of them — the site does not convert currency). Use 'de' for German wording and 'com' for English. The wider TruckScout24 network has 25 further hosts; only these three have their label vocabulary measured and mapped here, so the others answer MARKET_UNAVAILABLE rather than returning fields this engine cannot name. One honest caveat: the source's own machine-type translation is unreliable (listing 22233387 is 'LKW mit Pritsche & Plane' on .de and 'Beverage' on .com), which is why 'de' is the default.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany — truckscout24.de, German labels (the main site)"},{"value":"at","label":"Austria — truckscout24.at, German labels"},{"value":"com","label":"International — truckscout24.com, English labels"}],"default":"de","example":"de","aliases":["country_site","site"]}],"returns":"seller{dealer_id, name, url, address, street, postcode, city, region, country, contact_name, about, categories[] (with category_id where the source's own link carries one), related_searches[] (the manufacturer-and-model phrases the source itself cross-links from this dealer's page — it does not claim these are brands the dealer is authorised for), has_trust_seal}.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"dealer_id":"75149","market":"de"}}]},{"name":"truelancer","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Truelancer.com API scraper — live freelance projects and freelancer profiles from Truelancer.com in clean JSON: title, budget, skills, category, proposals, the client (name on the project page, country, spend), and freelancer ratings/earnings. No login required.","version":"1.1.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/truelancer/v1","spec_available":true,"actions":[{"name":"search","description":"Search live freelance PROJECTS on Truelancer.com by keyword. Returns title, description, budget{type,min,max,currency}, skills[], category, proposal count, posted_at, client signals (client id, country, verified, total spent), and the project url. Search rows carry no client name; `project` returns it.","required_params":[],"optional_params":["query","limit","offset"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search Truelancer projects (title/skills) — e.g. 'logo design', 'wordpress', 'data entry'. Omit to browse the newest projects.","on_invalid":"ignore","example":"logo design","aliases":["q","keyword","search"]},{"name":"limit","type":"integer","required":false,"description":"How many projects to return (1–75). Use `offset` to page.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":75,"aliases":["max_results","count"]},{"name":"offset","type":"integer","required":false,"description":"Pagination offset (0–5000); skip this many results before returning `limit`.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":5000,"aliases":["skip","page_offset"]}],"returns":"projects[]{id, title, description, type, budget{type,min,max,currency}, skills[], category, bids_count, posted_at, client_country, client{...}, url}, total_count, returned, offset","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"design","limit":8}},{"name":"project","description":"Full detail for one Truelancer.com project by URL or slug — everything from `search` plus views, end-date, tags, payment-verified flag, and proposal breakdown (received/active/shortlisted), and the client as the page publishes it (name, id, manager_id, city, country, verified, total spent, jobs posted).","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"The project to fetch: a Truelancer project URL or SEO slug ('freelance-project/<slug>-<id>'). A bare numeric id is not resolvable unauthenticated (the slug is required).","on_invalid":"ignore","example":"https://www.truelancer.com/freelance-project/example-646814","aliases":["project_id","url","seo_url"]}],"returns":"project{...all search fields..., detail{total_views, end_date, tags[], payment_verified, proposals{received,active,shortlisted}}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"https://www.truelancer.com/freelance-project/example-646814"}},{"name":"user","description":"PUBLIC business profile of a Truelancer.com freelancer by handle or profile URL: display name, headline, country, hourly rate, skills, ratings (avg rating, reviews, five-star %, projects delivered, total earnings), membership and availability. Truelancer publishes no email/phone on the profile page.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"The freelancer to fetch: a Truelancer profile handle or profile URL. Returns what the profile page publishes (Truelancer puts no email / phone on it).","on_invalid":"ignore","example":"johnsmith","aliases":["user","user_id","id"]}],"returns":"user{id, username, display_name, tagline, country, hourly_rate, primary_currency, registration_year, membership, skills[], reputation{overall_rating,reviews,five_star_percent,projects_delivered,total_earnings}, availability, profile_url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"johnsmith"}}]},{"name":"trustpilot","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Trustpilot API — company reviews, TrustScore, profile details, review filters, category browsing, and consumer profiles from Trustpilot.com","version":"2.0.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/trustpilot/v1","spec_available":true,"actions":[{"name":"company/reviews","description":"Get a company's Trustpilot reviews and its full profile from trustpilot.com — TrustScore, star rating, total review count, 5-to-1-star rating distribution, business categories, and every review with rating, title, text, date, verified status, likes and the company's reply. Newest first; optionally filter by star rating.","required_params":["company"],"optional_params":["maxReviews","includeCompany","sort","date_posted","rating","verified","with_replies","query","languages","page","locale"],"params":[{"name":"company","type":"string","required":true,"description":"The company's website domain (e.g. gossby.com), its Trustpilot review-page URL, or its Trustpilot page slug.","on_invalid":"reject","example":"gossby.com","aliases":["companyDomain","companyUrl","company_domain","domain"]},{"name":"maxReviews","type":"integer","required":false,"description":"How many reviews to return (1–20000). More reviews take longer.","on_invalid":"reject","default":200,"minimum":1,"maximum":20000},{"name":"sort","type":"enum","required":false,"description":"How to order reviews.","on_invalid":"ignore","allowed_values":[{"value":"most_relevant","label":"Most relevant"},{"value":"recency","label":"Newest first"}],"default":"most_relevant"},{"name":"date_posted","type":"enum","required":false,"description":"Only reviews from this time range.","on_invalid":"ignore","allowed_values":[{"value":"any","label":"Any time"},{"value":"last_12_months","label":"Last 12 months"},{"value":"last_6_months","label":"Last 6 months"},{"value":"last_3_months","label":"Last 3 months"},{"value":"last_30_days","label":"Last 30 days"}],"default":"any","aliases":["date"]},{"name":"rating","type":"string","required":false,"description":"Only reviews with these star ratings. A single value or a comma-separated list, e.g. '5' or '4,5'.","on_invalid":"ignore","example":"4,5","aliases":["stars","starRating"]},{"name":"verified","type":"boolean","required":false,"description":"Only verified reviews. Combining filters can narrow a company to an empty view; that returns ok with an empty reviews list and the company profile.","on_invalid":"ignore","default":false},{"name":"with_replies","type":"boolean","required":false,"description":"Only reviews that have an owner reply.","on_invalid":"ignore","default":false},{"name":"query","type":"string","required":false,"description":"Only reviews matching this keyword/phrase.","on_invalid":"ignore","aliases":["search"]},{"name":"languages","type":"string","required":false,"description":"Only reviews written in this language (ISO code, e.g. 'en', 'de'); 'all' for every language.","on_invalid":"ignore","default":"all","example":"en"},{"name":"includeCompany","type":"boolean","required":false,"description":"Include the company profile alongside the reviews.","on_invalid":"reject","default":true},{"name":"page","type":"integer","required":false,"description":"First page of reviews to return, 20 per page (1–10). Logged-out Trustpilot serves at most 200 reviews per view, so page 10 is the last one.","on_invalid":"reject","default":1,"minimum":1,"maximum":10},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"results[]{company{domain, name, trust_score, stars, number_of_reviews, number_of_reviews_last_12_months, rating_distribution (5★..1★), categories, is_claimed, is_closed, reply_behavior{reply_percentage, average_days_to_reply}, ai_summary}, reviews[]{review_id, rating, title, text, language, published_date, experience_date, is_verified, likes, is_pending, is_flagged, reviewer_name*, reviewer_country, reply_text}, total_reviews, completeness_pct} (*reviewer name/country redacted by default; request include_pii=true for full reviewer data)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"company":"amazon.com","maxReviews":40}},{"name":"company/details","description":"The full Trustpilot company profile WITHOUT reviews (cheaper than company/reviews when you only need the listing) → TrustScore, star rating, total reviews (and last-12-months), 5-to-1-star distribution, category rankings (e.g. #2 of 26 in Bank), contact info (address, phone, website, email), how the business replies to reviews (reply rate + average days), business verification, claimed/closed status, what customers talk about most (AI topic summaries), the AI review summary and the company description. By company domain.","required_params":["company"],"optional_params":["locale"],"params":[{"name":"company","type":"string","required":true,"description":"The company's website domain (e.g. gossby.com), its Trustpilot review-page URL, or its Trustpilot page slug.","on_invalid":"reject","example":"gossby.com","aliases":["companyDomain","companyUrl","company_domain","domain"]},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"company{name, domain, trust_score, stars, number_of_reviews, number_of_reviews_last_12_months, rating_distribution (5★..1★), categories, rankings[]{category, rank, of}, breadcrumb, is_claimed, is_closed, is_collecting_reviews, claimed_date, reply_behavior{reply_percentage, average_days_to_reply, negative_reviews_with_replies, total_negative_reviews}, verification{verified_payment_method, verified_user_identity, verified_by_google}, locations_count, website_url, website_title, contact_email, contact_phone, contact_address, contact_city, contact_country, contact_zip, topics[]{topic, summary}, ai_summary, description}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"lendingclub.com"}},{"name":"category/browse","description":"List the companies in a Trustpilot category (20/page) → each company's name, domain, TrustScore, review count and location. Filter by country, minimum TrustScore and claimed status, and sort by recently-reviewed. Also returns the category's size and subcategories, plus the newest companies and the recently-reviewed companies in that category — all in one call.","required_params":["categoryId"],"optional_params":["page","cursor","locale","sort","country","min_rating","claimed"],"params":[{"name":"categoryId","type":"enum","required":true,"description":"Trustpilot category. Pick from the list (full 2-level taxonomy) — or type any deeper category slug from a trustpilot.com/categories/<slug> URL; those work too.","on_invalid":"ignore","allowed_values":[{"value":"animals_pets","label":"Animals & Pets"},{"value":"animal_health","label":"Animal Health"},{"value":"animal_parks_zoo","label":"Animal Parks & Zoo"},{"value":"cats_dogs","label":"Cats & Dogs"},{"value":"horses_riding","label":"Horses & Riding"},{"value":"pet_services","label":"Pet Services"},{"value":"pet_stores","label":"Pet Stores"},{"value":"beauty_wellbeing","label":"Beauty & Well-being"},{"value":"cosmetics_makeup","label":"Cosmetics & Makeup"},{"value":"hair_care_styling","label":"Hair Care & Styling"},{"value":"personal_care","label":"Personal Care"},{"value":"salons_clinics","label":"Salons & Clinics"},{"value":"tattoos_piercings","label":"Tattoos & Piercings"},{"value":"wellness_spa","label":"Wellness & Spa"},{"value":"yoga_meditation","label":"Yoga & Meditation"},{"value":"business_services","label":"Business Services"},{"value":"administration_services","label":"Administration & Services"},{"value":"associations_centers","label":"Associations & Centers"},{"value":"hr_recruiting","label":"HR & Recruiting"},{"value":"import_export","label":"Import & Export"},{"value":"it_communication","label":"IT & Communication"},{"value":"office_space_supplies","label":"Office Space & Supplies"},{"value":"print_graphic_design","label":"Print & Graphic Design"},{"value":"research_development","label":"Research & Development"},{"value":"sales_marketing","label":"Sales & Marketing"},{"value":"shipping_logistics","label":"Shipping & Logistics"},{"value":"wholesale","label":"Wholesale"},{"value":"construction_manufactoring","label":"Construction & Manufacturing"},{"value":"architects_engineers","label":"Architects & Engineers"},{"value":"building_materials","label":"Building Materials"},{"value":"chemicals_plastic","label":"Chemicals & Plastic"},{"value":"construction_services","label":"Construction Services"},{"value":"contractors_consultants","label":"Contractors & Consultants"},{"value":"factory_equipment","label":"Factory Equipment"},{"value":"garden_landscaping","label":"Garden & Landscaping"},{"value":"industrial_supplies","label":"Industrial Supplies"},{"value":"manufacturing","label":"Manufacturing"},{"value":"production_services","label":"Production Services"},{"value":"tools_equipment","label":"Tools & Equipment"},{"value":"education_training","label":"Education & Training"},{"value":"colleges_universities","label":"Colleges & Universities"},{"value":"courses_classes","label":"Courses & Classes"},{"value":"education_services","label":"Education Services"},{"value":"language_learning","label":"Language Learning"},{"value":"music_theater_classes","label":"Music & Theater Classes"},{"value":"school_high_school","label":"School & High School"},{"value":"specials_schools","label":"Specials Schools"},{"value":"vocational_training","label":"Vocational Training"},{"value":"electronics_technology","label":"Electronics & Technology"},{"value":"appliances_electronics","label":"Appliances & Electronics"},{"value":"audio_visual","label":"Audio & Visual"},{"value":"computers_phones","label":"Computers & Phones"},{"value":"internet_software","label":"Internet & Software"},{"value":"repair_services","label":"Repair & Services"},{"value":"events_entertainment","label":"Events & Entertainment"},{"value":"adult_entertainment","label":"Adult Entertainment"},{"value":"childrens_entertainment","label":"Children's Entertainment"},{"value":"clubbing_nightlife","label":"Clubbing & Nightlife"},{"value":"events_venues","label":"Events & Venues"},{"value":"gambling","label":"Gambling"},{"value":"gaming","label":"Gaming"},{"value":"museums_exibits","label":"Museums & Exhibits"},{"value":"music_movies","label":"Music & Movies"},{"value":"theater_opera","label":"Theater & Opera"},{"value":"wedding_party","label":"Wedding & Party"},{"value":"food_beverages_tobacco","label":"Food, Beverages & Tobacco"},{"value":"agriculture_produce","label":"Agriculture & Produce"},{"value":"asian_grocery_stores","label":"Asian Grocery Stores"},{"value":"bakery_pastry","label":"Bakery & Pastry"},{"value":"beer_wine","label":"Beer & Wine"},{"value":"beverages_liquor","label":"Beverages & Liquor"},{"value":"candy_chocolate","label":"Candy & Chocolate"},{"value":"coffee_tea","label":"Coffee & Tea"},{"value":"food_production","label":"Food Production"},{"value":"fruits_vegetables","label":"Fruits & Vegetables"},{"value":"grocery_stores_markets","label":"Grocery Stores & Markets"},{"value":"lunch_catering","label":"Lunch & Catering"},{"value":"meat_seafood_eggs","label":"Meat, Seafood & Eggs"},{"value":"smoking_tobacco","label":"Smoking & Tobacco"},{"value":"health_medical","label":"Health & Medical"},{"value":"clinics","label":"Clinics"},{"value":"dental_services","label":"Dental Services"},{"value":"diagnostics_testing","label":"Diagnostics & Testing"},{"value":"doctors_surgeons","label":"Doctors & Surgeons"},{"value":"health_equipment","label":"Health Equipment"},{"value":"hospital_emergency","label":"Hospital & Emergency"},{"value":"medical_specialists","label":"Medical Specialists"},{"value":"mental_health","label":"Mental Health"},{"value":"pharmacy_medicine","label":"Pharmacy & Medicine"},{"value":"physical_aids","label":"Physical Aids"},{"value":"pregnancy_children","label":"Pregnancy & Children"},{"value":"therapy_senior_health","label":"Therapy & Senior Health"},{"value":"vision_hearing","label":"Vision & Hearing"},{"value":"hobbies_crafts","label":"Hobbies & Crafts"},{"value":"art_handicraft","label":"Art & Handicraft"},{"value":"astrology_numerology","label":"Astrology & Numerology"},{"value":"fishing_hunting","label":"Fishing & Hunting"},{"value":"hobbies","label":"Hobbies"},{"value":"metal_stone_glass_work","label":"Metal, Stone & Glass Work"},{"value":"music_instruments","label":"Music & Instruments"},{"value":"needlework_knitting","label":"Needlework & Knitting"},{"value":"outdoor_activities","label":"Outdoor Activities"},{"value":"painting_paper","label":"Painting & Paper"},{"value":"home_garden","label":"Home & Garden"},{"value":"bathroom_kitchen","label":"Bathroom & Kitchen"},{"value":"cultural_goods","label":"Cultural Goods"},{"value":"decoration_interior","label":"Decoration & Interior"},{"value":"energy_heating","label":"Energy & Heating"},{"value":"fabric_stationary","label":"Fabric & Stationery"},{"value":"furniture_stores","label":"Furniture Stores"},{"value":"garden_pond","label":"Garden & Pond"},{"value":"home_garden_services","label":"Home & Garden Services"},{"value":"home_goods_stores","label":"Home Goods Stores"},{"value":"home_improvements","label":"Home Improvements"},{"value":"home_services","label":"Home Services"},{"value":"cleaning_service_providers","label":"Cleaning Service Providers"},{"value":"craftsman","label":"Craftsman"},{"value":"house_services","label":"House Services"},{"value":"house_sitting_security","label":"House Sitting & Security"},{"value":"moving_storage","label":"Moving & Storage"},{"value":"plumbing_sanitation","label":"Plumbing & Sanitation"},{"value":"repair_service_providers","label":"Repair Service Providers"},{"value":"legal_services_government","label":"Legal Services & Government"},{"value":"customs_toll","label":"Customs & Toll"},{"value":"government_department","label":"Government Department"},{"value":"law_enforcement","label":"Law Enforcement"},{"value":"lawyers_attorneys","label":"Lawyers & Attorneys"},{"value":"legal_service_providers","label":"Legal Service Providers"},{"value":"libraries_archives","label":"Libraries & Archives"},{"value":"municipal_department","label":"Municipal Department"},{"value":"registration_services","label":"Registration Services"},{"value":"media_publishing","label":"Media & Publishing"},{"value":"books_magazines","label":"Books & Magazines"},{"value":"media_information","label":"Media & Information"},{"value":"photography","label":"Photography"},{"value":"video_sound","label":"Video & Sound"},{"value":"money_insurance","label":"Money & Insurance"},{"value":"accounting_tax","label":"Accounting & Tax"},{"value":"banking_money","label":"Banking & Money"},{"value":"credit_debt_services","label":"Credit & Debt Services"},{"value":"insurance","label":"Insurance"},{"value":"investments_wealth","label":"Investments & Wealth"},{"value":"real_estate","label":"Real Estate"},{"value":"public_local_services","label":"Public & Local Services"},{"value":"employment_career","label":"Employment & Career"},{"value":"funeral_memorial","label":"Funeral & Memorial"},{"value":"housing_associations","label":"Housing Associations"},{"value":"kids_family","label":"Kids & Family"},{"value":"military_veteran","label":"Military & Veteran"},{"value":"nature_environment","label":"Nature & Environment"},{"value":"professional_organizations","label":"Professional Organizations"},{"value":"public_services_welfare","label":"Public Services & Welfare"},{"value":"religious_institutions","label":"Religious Institutions"},{"value":"shelters_homes","label":"Shelters & Homes"},{"value":"waste_management","label":"Waste Management"},{"value":"restaurants_bars","label":"Restaurants & Bars"},{"value":"african_pacific_cuisine","label":"African & Pacific Cuisine"},{"value":"bars_cafes","label":"Bars & Cafes"},{"value":"chinese_korean_cuisine","label":"Chinese & Korean Cuisine"},{"value":"european_cuisine","label":"European Cuisine"},{"value":"general_restaurants","label":"General Restaurants"},{"value":"japanese_cuisine","label":"Japanese Cuisine"},{"value":"mediterranean_cuisine","label":"Mediterranean Cuisine"},{"value":"middle_eastern_cuisine","label":"Middle Eastern Cuisine"},{"value":"north_south_american_cuisine","label":"North & South American Cuisine"},{"value":"southeast_asian_cuisine","label":"Southeast Asian Cuisine"},{"value":"takeaway","label":"Takeaway"},{"value":"vegetarian_diet","label":"Vegetarian & Diet"},{"value":"shopping_fashion","label":"Shopping & Fashion"},{"value":"accessories","label":"Accessories"},{"value":"clothing_underwear","label":"Clothing & Underwear"},{"value":"clothing_rental_repair","label":"Clothing Rental & Repair"},{"value":"costume_wedding","label":"Costume & Wedding"},{"value":"jewelry_watches","label":"Jewelry & Watches"},{"value":"malls_marketplaces","label":"Malls & Marketplaces"},{"value":"sports","label":"Sports"},{"value":"ball_games","label":"Ball Games"},{"value":"bat-and-ball_games","label":"Bat-and-ball Games"},{"value":"bowls_lawn_sports","label":"Bowls & Lawn Sports"},{"value":"dancing_gymnastics","label":"Dancing & Gymnastics"},{"value":"equipment_associations","label":"Equipment & Associations"},{"value":"extreme_sports","label":"Extreme Sports"},{"value":"fitness_weight_lifting","label":"Fitness & Weight Lifting"},{"value":"golf_ultimate","label":"Golf & Ultimate"},{"value":"hockey_ice_skating","label":"Hockey & Ice Skating"},{"value":"martial_arts_wrestling","label":"Martial arts & Wrestling"},{"value":"outdoor_winter_sports","label":"Outdoor & Winter Sports"},{"value":"shooting_target_sports","label":"Shooting & Target Sports"},{"value":"swimming_water_sports","label":"Swimming & Water Sports"},{"value":"tennis_racquet_sports","label":"Tennis & Racquet Sports"},{"value":"travel_vacation","label":"Travel & Vacation"},{"value":"accomodations_lodging","label":"Accommodation & Lodging"},{"value":"activities_tours","label":"Activities & Tours"},{"value":"airlines_air_travel","label":"Airlines & Air Travel"},{"value":"hotels","label":"Hotels"},{"value":"travel_agencies","label":"Travel Agencies"},{"value":"utilities","label":"Utilities"},{"value":"energy_power","label":"Energy & Power"},{"value":"oil_fuel","label":"Oil & Fuel"},{"value":"water_utilities","label":"Water Utilities"},{"value":"vehicles_transportation","label":"Vehicles & Transportation"},{"value":"air_water_transport","label":"Air & Water Transport"},{"value":"airports_parking","label":"Airports & Parking"},{"value":"auto_parts_wheels","label":"Auto Parts & Wheels"},{"value":"bicycles","label":"Bicycles"},{"value":"cars_trucks","label":"Cars & Trucks"},{"value":"motorcycle_powersports","label":"Motorcycle & Powersports"},{"value":"other_vehicles_trailers","label":"Other Vehicles & Trailers"},{"value":"taxis_public_transport","label":"Taxis & Public Transport"},{"value":"vehical_rental","label":"Vehicle Rental"},{"value":"vehicle_repair_fuel","label":"Vehicle Repair & Fuel"}],"example":"electronics_technology","aliases":["category"]},{"name":"sort","type":"enum","required":false,"description":"How to order the companies in a category.","on_invalid":"ignore","allowed_values":[{"value":"recommended","label":"Recommended (default)"},{"value":"latest_review","label":"Recently reviewed first"}],"default":"recommended"},{"name":"country","type":"string","required":false,"description":"Only companies based in this country (ISO-2 code, e.g. 'GB', 'US', 'DE'). Leave empty for all countries.","on_invalid":"ignore","example":"GB"},{"name":"min_rating","type":"enum","required":false,"description":"Only companies with at least this TrustScore.","on_invalid":"ignore","allowed_values":[{"value":"any","label":"Any"},{"value":"3","label":"3+"},{"value":"3.5","label":"3.5+"},{"value":"4","label":"4+"},{"value":"4.5","label":"4.5+"}],"default":"any","aliases":["trustscore"]},{"name":"claimed","type":"boolean","required":false,"description":"Only companies that have claimed their Trustpilot profile.","on_invalid":"ignore","default":false},{"name":"page","type":"integer","required":false,"description":"Page number (1–500; Trustpilot serves at most 500 pages per view).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"companies[]{name, domain, trustScore, numReviews, categories, location} + categoryDetails{displayName, numberOfBusinesses, subcategories[]} + newestCompanies[] + recentlyReviewedCompanies[] + totalHits + totalPages + meta.pagination{page, has_more, next_cursor, total}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"categoryId":"electronics_technology"}},{"name":"category/companies","description":"List the companies in a Trustpilot category (20/page), ranked → each company's name, domain, TrustScore, review count, categories and location. Filter by country, minimum TrustScore and claimed status. Paginate with page.","required_params":["categoryId"],"optional_params":["page","locale","sort","country","min_rating","claimed"],"params":[{"name":"categoryId","type":"string","required":true,"description":"A Trustpilot category id/slug, e.g. 'electronics_technology', 'restaurants_bars' (or a trustpilot.com/categories/<slug> URL).","on_invalid":"reject","example":"electronics_technology","aliases":["category","category_id"]},{"name":"sort","type":"enum","required":false,"description":"How to order the companies in a category.","on_invalid":"ignore","allowed_values":[{"value":"recommended","label":"Recommended (default)"},{"value":"latest_review","label":"Recently reviewed first"}],"default":"recommended"},{"name":"country","type":"string","required":false,"description":"Only companies based in this country (ISO-2 code, e.g. 'GB', 'US', 'DE'). Leave empty for all countries.","on_invalid":"ignore","example":"GB"},{"name":"min_rating","type":"enum","required":false,"description":"Only companies with at least this TrustScore.","on_invalid":"ignore","allowed_values":[{"value":"any","label":"Any"},{"value":"3","label":"3+"},{"value":"3.5","label":"3.5+"},{"value":"4","label":"4+"},{"value":"4.5","label":"4.5+"}],"default":"any","aliases":["trustscore"]},{"name":"claimed","type":"boolean","required":false,"description":"Only companies that have claimed their Trustpilot profile.","on_invalid":"ignore","default":false},{"name":"page","type":"integer","required":false,"description":"Page number (1–500; Trustpilot serves at most 500 pages per view).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"companies[]{name, domain, trustScore, numReviews, categories, location} + categoryDetails + meta.pagination","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"categoryId":"electronics_technology"}},{"name":"category/recently-reviewed","description":"The companies in a Trustpilot category that were reviewed most recently → name, domain, TrustScore, review count and location.","required_params":["categoryId"],"optional_params":["locale"],"params":[{"name":"categoryId","type":"string","required":true,"description":"A Trustpilot category id/slug, e.g. 'electronics_technology', 'restaurants_bars' (or a trustpilot.com/categories/<slug> URL).","on_invalid":"reject","example":"electronics_technology","aliases":["category","category_id"]},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"companies[]{name, domain, trustScore, numReviews, location} + categoryDetails","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"categoryId":"electronics_technology"}},{"name":"category/newest","description":"The newest companies added to a Trustpilot category → name, domain, TrustScore, review count and location.","required_params":["categoryId"],"optional_params":["locale"],"params":[{"name":"categoryId","type":"string","required":true,"description":"A Trustpilot category id/slug, e.g. 'electronics_technology', 'restaurants_bars' (or a trustpilot.com/categories/<slug> URL).","on_invalid":"reject","example":"electronics_technology","aliases":["category","category_id"]},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"companies[]{name, domain, trustScore, numReviews, location} + categoryDetails","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"categoryId":"electronics_technology"}},{"name":"category/details","description":"Details of a Trustpilot category → its display name, the number of businesses in it, and its subcategories.","required_params":["categoryId"],"optional_params":["locale"],"params":[{"name":"categoryId","type":"string","required":true,"description":"A Trustpilot category id/slug, e.g. 'electronics_technology', 'restaurants_bars' (or a trustpilot.com/categories/<slug> URL).","on_invalid":"reject","example":"electronics_technology","aliases":["category","category_id"]},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"categoryDetails{displayName, numberOfBusinesses, subcategories[]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"categoryId":"electronics_technology"}},{"name":"category/search","description":"Search Trustpilot categories by keyword → matching categories with their id and display name (feed a categoryId into category/companies).","required_params":["query"],"optional_params":["locale"],"params":[{"name":"query","type":"string","required":true,"description":"A keyword to find matching Trustpilot categories.","on_invalid":"reject","example":"soft","aliases":["name","q"]},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"categories[]{categoryId, displayName}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"company/search","description":"Search Trustpilot for companies by name (10 matches/page) → each match's name, domain, TrustScore, star rating, review count, categories and location. Filter by minimum TrustScore and minimum review count. Also returns matching categories. A website domain (e.g. delonghi.com) that Trustpilot knows returns that one company as the single match.","required_params":["query"],"optional_params":["page","cursor","min_rating","min_review_count","locale"],"params":[{"name":"query","type":"string","required":true,"description":"The company name/keyword to search for, or its website domain (e.g. 'delonghi.com' → that one company).","on_invalid":"reject","example":"bestbuy","aliases":["name","q"]},{"name":"min_rating","type":"enum","required":false,"description":"Only companies with at least this TrustScore.","on_invalid":"ignore","allowed_values":[{"value":"any","label":"Any"},{"value":"3","label":"3+"},{"value":"4","label":"4+"},{"value":"4.5","label":"4.5+"}],"default":"any","aliases":["trustscore"]},{"name":"min_review_count","type":"enum","required":false,"description":"Only companies with at least this many reviews.","on_invalid":"ignore","allowed_values":[{"value":"any","label":"Any"},{"value":"25","label":"25+"},{"value":"50","label":"50+"},{"value":"100","label":"100+"},{"value":"250","label":"250+"},{"value":"500","label":"500+"}],"default":"any","aliases":["numberOfReviews"]},{"name":"page","type":"integer","required":false,"description":"Page number (1–500; Trustpilot serves at most 500 pages per view).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"matches[]{name, domain, trustScore, stars, numReviews, categories, location, businessUnitId} + categories[] + pagination + meta.pagination{page, has_more, next_cursor, total}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike"}},{"name":"consumer/details","description":"A Trustpilot consumer's public profile → display name, country, number of reviews written, and review statistics. By consumer id.","required_params":["consumer_id"],"optional_params":["locale"],"params":[{"name":"consumer_id","type":"string","required":true,"description":"The Trustpilot consumer id (from a review's consumer, or a trustpilot.com/users/… URL).","on_invalid":"reject","example":"5fafc38b32ed7f0019d27bc5","aliases":["consumerId","userId","user_id"]},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"consumer{displayName*, country, numberOfReviews, verified} + statistics (*name/country redacted by default)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"consumer_id":"5fafc38b32ed7f0019d27bc5"}},{"name":"consumer/reviews","description":"Every review a Trustpilot consumer has written across all companies → each review's company, rating, title, text and date. Paginate with page.","required_params":["consumer_id"],"optional_params":["page","cursor","locale"],"params":[{"name":"consumer_id","type":"string","required":true,"description":"The Trustpilot consumer id (from a review's consumer, or a trustpilot.com/users/… URL).","on_invalid":"reject","example":"5fafc38b32ed7f0019d27bc5","aliases":["consumerId","userId","user_id"]},{"name":"page","type":"integer","required":false,"description":"Page number (1–500; Trustpilot serves at most 500 pages per view).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"reviews[]{companyName, companyDomain, rating, title, text, date, isVerified} + meta.pagination{page, has_more, next_cursor}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"consumer_id":"5fafc38b32ed7f0019d27bc5"}},{"name":"reviewer/profile","description":"Alias of consumer/details + consumer/reviews: a reviewer's profile AND every review they have written. By consumer id.","required_params":["consumer_id"],"optional_params":["page","cursor","locale"],"params":[{"name":"consumer_id","type":"string","required":true,"description":"The Trustpilot consumer id (from a review's consumer, or a trustpilot.com/users/… URL).","on_invalid":"reject","example":"5fafc38b32ed7f0019d27bc5","aliases":["consumerId","userId","user_id"]},{"name":"page","type":"integer","required":false,"description":"Page number (1–500; Trustpilot serves at most 500 pages per view).","on_invalid":"reject","default":1,"minimum":1,"maximum":500},{"name":"cursor","type":"string","required":false,"description":"Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).","on_invalid":"ignore"},{"name":"locale","type":"enum","required":false,"description":"Trustpilot country/locale (the website footer's country selector). en-US is fully served today; other locales are accepted and currently resolve to the en-US view (per-locale routing is being added).","on_invalid":"ignore","allowed_values":[{"value":"da-DK","label":"Denmark"},{"value":"de-AT","label":"Austria"},{"value":"de-CH","label":"Switzerland (DE)"},{"value":"de-DE","label":"Germany"},{"value":"en-AU","label":"Australia"},{"value":"en-CA","label":"Canada"},{"value":"en-GB","label":"United Kingdom"},{"value":"en-IE","label":"Ireland"},{"value":"en-NZ","label":"New Zealand"},{"value":"en-US","label":"United States"},{"value":"es-ES","label":"Spain"},{"value":"fi-FI","label":"Finland"},{"value":"fr-BE","label":"Belgium (FR)"},{"value":"nl-BE","label":"Belgium (NL)"},{"value":"fr-FR","label":"France"},{"value":"it-IT","label":"Italy"},{"value":"ja-JP","label":"Japan"},{"value":"nb-NO","label":"Norway"},{"value":"nl-NL","label":"Netherlands"},{"value":"pl-PL","label":"Poland"},{"value":"pt-BR","label":"Brazil"},{"value":"pt-PT","label":"Portugal"},{"value":"sv-SE","label":"Sweden"}],"default":"en-US","example":"en-US"}],"returns":"profile{displayName*, country, numberOfReviews, verified, stats} + reviews[]{companyName, companyDomain, rating, title, text, date, isVerified} + meta.pagination (*redacted by default)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"consumer_id":"5fafc38b32ed7f0019d27bc5"}}]},{"name":"trustradius","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"TrustRadius API — B2B software reviews, ratings & product profiles from trustradius.com and GetApp","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/trustradius/v1","spec_available":true,"actions":[{"name":"product/reviews","description":"Fetch verified user reviews and ratings for a B2B software product from TrustRadius (up to 639 reviews with full verbatim text, reviewer job title, company industry and size) or GetApp. Filter by public-only or include all review visibility levels.","required_params":["product_slug"],"optional_params":["source","skip","limit","fetch_all","include_non_public","category_path"],"params":[{"name":"product_slug","type":"string","required":true,"description":"Product slug on the source site (the URL segment, e.g. 'slack'). Resolve one from a URL via the product/resolve action.","on_invalid":"reject","example":"slack"},{"name":"source","type":"enum","required":false,"description":"Review platform to fetch from. Defaults to trustradius.com (full pagination, up to 639 reviews). getapp requires category_path and returns a partial page snapshot. capterra and g2 are not currently available.","on_invalid":"ignore","allowed_values":[{"value":"trustradius","label":"TrustRadius — full review fetch (up to 639 reviews)"},{"value":"getapp","label":"GetApp — partial page snapshot"},{"value":"capterra","label":"Capterra — not available (use getapp)"},{"value":"g2","label":"G2 — not available"}],"default":"trustradius","example":"trustradius"},{"name":"skip","type":"integer","required":false,"description":"Number of reviews to skip (pagination offset; TrustRadius skip/limit mode).","on_invalid":"ignore","default":0,"example":0,"minimum":0,"aliases":["offset"]},{"name":"limit","type":"integer","required":false,"description":"Reviews per page (1-100). Omit (or set fetch_all) to pull everything.","on_invalid":"ignore","example":50,"minimum":1,"maximum":100},{"name":"fetch_all","type":"boolean","required":false,"description":"TrustRadius: fetch ALL reviews in one pass (ignores skip/limit).","on_invalid":"ignore","default":false,"example":true},{"name":"include_non_public","type":"boolean","required":false,"description":"Include reviews not marked public (default false = public only).","on_invalid":"ignore","default":false,"example":false},{"name":"category_path","type":"string","required":false,"description":"GetApp-only: the category/product path (e.g. 'collaboration-software/a/slack/reviews/'). Required when source=getapp.","on_invalid":"reject","example":"collaboration-software/a/slack/reviews/"}],"returns":"source, product_slug, reviews[] (title, rating_overall, verbatims, reviewer job_type/company_industry/company_size, …), pagination, pages_fetched, public_only","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"source":"trustradius","product_slug":"slack","fetch_all":true}},{"name":"product/detail","description":"product metadata (name, description, rating, category)","required_params":["product_slug"],"optional_params":["source","category_path"],"params":[{"name":"product_slug","type":"string","required":true,"description":"Product slug on the source site (the URL segment, e.g. 'slack'). Resolve one from a URL via the product/resolve action.","on_invalid":"reject","example":"slack"},{"name":"source","type":"enum","required":false,"description":"Review platform to fetch from. Defaults to trustradius.com (full pagination, up to 639 reviews). getapp requires category_path and returns a partial page snapshot. capterra and g2 are not currently available.","on_invalid":"ignore","allowed_values":[{"value":"trustradius","label":"TrustRadius — full review fetch (up to 639 reviews)"},{"value":"getapp","label":"GetApp — partial page snapshot"},{"value":"capterra","label":"Capterra — not available (use getapp)"},{"value":"g2","label":"G2 — not available"}],"default":"trustradius","example":"trustradius"},{"name":"category_path","type":"string","required":false,"description":"GetApp-only: the category/product path (e.g. 'collaboration-software/a/slack/reviews/'). Required when source=getapp.","on_invalid":"reject","example":"collaboration-software/a/slack/reviews/"}],"returns":"source, product{} — name, slug, description, rating_avg, rating_count, rating_scale_min/max (TrustRadius scores out of 10), category, category_path, url. source=getapp additionally returns vendor, pricing, features and integrations.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"source":"trustradius","product_slug":"slack"}},{"name":"product/resolve","description":"resolve a TrustRadius/GetApp/Capterra/G2 URL → source + slug","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"A TrustRadius / GetApp / Capterra / G2 product URL to parse into {source, product_slug}.","on_invalid":"reject","example":"https://www.trustradius.com/products/slack/reviews"}],"returns":"source, product_slug (plus product_id, category_path, or availability note depending on the platform)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.trustradius.com/products/slack/reviews"}}]},{"name":"turners","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Turners NZ — used vehicles, machinery and auction catalogues","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/turners/v1","spec_available":true,"actions":[{"name":"search","description":"Search Turners' live New Zealand stock across six divisions — cars, trucks & machinery, damaged/end-of-life vehicles, general goods, boats and motorhomes. Every row carries the id, the canonical listing URL, the asking price and the pre-discount price separately, the odometer, the holding branch and the spec. `sale_method` tells you whether the row is a fixed-price car or an auction lot, and auction rows carry the sale's date and venue. All filters are optional; `total_available` is the site's own count for your query, so you can see how much a filter actually narrowed it. 🔴 One query returns at most 110 rows — Turners publishes no paging on its URLs — so use `sort` and tighter filters to reach the rest.","required_params":[],"optional_params":["division","query","make","model","year_from","year_to","price_from","price_to","odometer_from","odometer_to","fuel","body_type","transmission","drive_type","seats","branch","sale_method","discounted_only","ex_lease_only","cga_only","sort","max_results"],"params":[{"name":"division","type":"enum","required":false,"description":"Which Turners marketplace to search. Live totals measured 2026-10-01: cars 2,719 · trucks 374 · damaged 554 · general-goods 1,521 · boats 14 · motorhomes 34.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"trucks","label":"Trucks & Machinery"},{"value":"damaged","label":"Damaged & end-of-life vehicles"},{"value":"general-goods","label":"General goods"},{"value":"boats","label":"Boats & marine"},{"value":"motorhomes","label":"Buses, caravans & motorhomes"}],"default":"cars","example":"cars","aliases":["market","section","category"]},{"name":"query","type":"string","required":false,"description":"Free-text search over the listing, exactly as the site's own search box takes it (`hilux` returned 45 cars). A Turners good number also resolves here, which is how `detail` turns an id into a listing.","on_invalid":"reject","example":"hilux","aliases":["searchfor","q","keyword","search","text"]},{"name":"make","type":"string","required":false,"description":"Manufacturer, as Turners spells it in its own URLs — lower-case, hyphenated: `toyota`, `holden`, `alfa-romeo`, `mercedes-benz`. Measured: `toyota` -> 495 of 2,719 cars.","on_invalid":"reject","example":"toyota","aliases":["brand","manufacturer"]},{"name":"model","type":"string","required":false,"description":"Model name, case-insensitive (`corolla` and `Corolla` both -> 46 cars with make=toyota). Use together with `make`: a model on its own is not how Turners indexes its stock.","on_invalid":"reject","example":"corolla","aliases":["models","model_name"]},{"name":"year_from","type":"integer","required":false,"description":"Earliest model year, inclusive.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100,"aliases":["yearfrom","min_year","year_min"]},{"name":"year_to","type":"integer","required":false,"description":"Latest model year, inclusive. Measured: 2020-2022 -> 819 of 2,715 cars.","on_invalid":"reject","example":2022,"minimum":1900,"maximum":2100,"aliases":["yearto","max_year","year_max"]},{"name":"price_from","type":"integer","required":false,"description":"Lowest asking price in NZD, inclusive.","on_invalid":"reject","example":5000,"minimum":0,"aliases":["pricefrom","min_price","price_min"]},{"name":"price_to","type":"integer","required":false,"description":"Highest asking price in NZD, inclusive. Measured: 5,000-10,000 -> 422 of 2,715 cars.","on_invalid":"reject","example":10000,"minimum":0,"aliases":["priceto","max_price","price_max","budget"]},{"name":"odometer_from","type":"integer","required":false,"description":"Lowest odometer reading in kilometres.","on_invalid":"reject","example":0,"minimum":0,"aliases":["odofrom","km_from","min_km","mileage_from"]},{"name":"odometer_to","type":"integer","required":false,"description":"Highest odometer reading in kilometres. Measured: 0-50,000 -> 282 of 2,715 cars.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["odoto","km_to","max_km","mileage_to"]},{"name":"fuel","type":"string","required":false,"description":"Fuel type, as the site prints it. Measured on the cars division: Petrol 1,495 · Diesel 540 · Hybrid 504 · Electric 89 (of 2,715). `Plugin Hybrid` also appears on listing cards. Not a closed list — other divisions may publish values we have not sampled, so anything you pass reaches the site; a value Turners does not know comes back as 0 rows with a note in `meta.warnings`.","on_invalid":"reject","example":"Hybrid","aliases":["fuels","fuel_type","fueltype"]},{"name":"body_type","type":"string","required":false,"description":"Body style, as the site prints it on the card. Measured: SUV 1,119 and Hatchback 754 of 2,715 cars. Sampled values across divisions include SUV, Hatchback, Sedan, Wagon, Van, Utility, Cab Chassis, Flat Deck, Tipper, Curtainsider, Tractor Unit, Excavator, Forklift and 34 more truck/machinery styles. Not a closed list; an unknown value returns 0 rows with a note in `meta.warnings`. (Turners' own `bodystyles` parameter is ignored upstream and is deliberately NOT offered here.)","on_invalid":"reject","example":"SUV","aliases":["types","bodytype","body","vehicle_type"]},{"name":"transmission","type":"string","required":false,"description":"Measured on the cars division: Automatic 2,596 · Manual 119 (of 2,715 — the two add up to the whole catalogue).","on_invalid":"reject","example":"Automatic","aliases":["trans","gearbox"]},{"name":"drive_type","type":"string","required":false,"description":"Drive configuration as the site prints it: `2 Wheel Drive` or `4 Wheel Drive`. Measured: 4 Wheel Drive -> 900 of 2,715 cars.","on_invalid":"reject","example":"4 Wheel Drive","aliases":["drivetype","drivetrain"]},{"name":"seats","type":"integer","required":false,"description":"Seat count. Measured: 5 -> 2,205 of 2,715 cars.","on_invalid":"reject","example":7,"minimum":1,"maximum":100,"aliases":["seat_count","seating"]},{"name":"branch","type":"string","required":false,"description":"Turners branch holding the vehicle, as the site prints it on the card — a BRANCH name, not a city or region (`locations=Auckland` returns nothing; `Hornby` returned 180). Sampled branches: Avalon Drive, Botany, Christchurch, Dunedin, Hornby, Manukau, Moorhouse Ave, Mount Maunganui, Napier, Nelson, New Plymouth, North Shore, Palmerston North, Penrose - Great South Road, Rotorua, Te Rapa Road, Timaru, Wairakei Rd, Wellington - Porirua, Westgate, Whangarei. Not a closed list; an unknown value returns 0 rows with a note in `meta.warnings`.","on_invalid":"reject","example":"Hornby","aliases":["locations","location","site","yard"]},{"name":"sale_method","type":"enum","required":false,"description":"How the vehicle is being sold. Measured on cars, 2026-10-01: auction 521, buy-now 2,201, which together are the whole catalogue of 2,719.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Live auction lot (521 of 2,719 cars on 2026-10-01)"},{"value":"buy-now","label":"Fixed buy-now price (2,201 of 2,719 cars on 2026-10-01)"},{"value":"tender","label":"Tender — a published method with 0 cars listed on 2026-10-01"},{"value":"online-auction","label":"Online auction — a published method with 0 cars on 2026-10-01"}],"example":"auction","aliases":["salemethods","purchase_method","method","listing_type"]},{"name":"discounted_only","type":"boolean","required":false,"description":"Only vehicles whose price Turners has cut (the card then prints its own `Was $...` figure). Measured: 956 of 2,715 cars.","on_invalid":"reject","default":false,"example":true,"aliases":["isdiscounted","on_special","discounted"]},{"name":"ex_lease_only","type":"boolean","required":false,"description":"Only ex-lease stock. Measured: 727 of 2,715 cars.","on_invalid":"reject","default":false,"example":true,"aliases":["exlease","ex_lease"]},{"name":"cga_only","type":"boolean","required":false,"description":"Only vehicles sold with NZ Consumer Guarantees Act cover. Measured: 2,636 of 2,715 cars, i.e. it does bite but only excludes 79.","on_invalid":"reject","default":false,"example":true,"aliases":["hascga","cga"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Because Turners publishes no paging on its URLs (see `max_results`), sorting is how you reach the other end of a big result set: `price_asc` and `price_desc` on the same query give you both ends.","on_invalid":"reject","allowed_values":[{"value":"featured","label":"Turners' own featured order (the site default)"},{"value":"auction_date","label":"Soonest auction first"},{"value":"odometer_asc","label":"Fewest kilometres first"},{"value":"odometer_desc","label":"Most kilometres first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"},{"value":"discount_desc","label":"Biggest discount first"},{"value":"year_asc","label":"Oldest model year first"},{"value":"year_desc","label":"Newest model year first"},{"value":"location","label":"Branch name A-Z"},{"value":"make_model","label":"Make/model A-Z"},{"value":"newest_listing","label":"Most recently listed first"}],"default":"featured","example":"price_asc","aliases":["sortorder","order","sort_by","sortby"]},{"name":"max_results","type":"integer","required":false,"description":"Rows to return, 1-110. Turners' own page-size dropdown offers 20 and 110 and nothing else, so a value of 20 or below fetches the 20-row page and anything above fetches the 110-row page and trims. 🔴 110 IS A HARD CEILING PER QUERY: Turners does not page over its URLs (measured on nine parameter spellings and two path forms, all returning page one). `total_available` always reports the real size of the result set, so narrow by make, model, year or price band to go deeper.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":110,"aliases":["pagesize","limit","count","page_size","size"]}],"returns":"{results[], total_available, returned, division, page_ceiling} — each result: listing_id, stock_id, url, title, make, model, year, variant, sale_method, price_nzd, was_price_nzd, savings_nzd, is_discounted, price_note, price_conflict, currency, odometer_km, branch, responsible_branch, body_type, transmission, drive_type, fuel_type, engine, seats, registration_status, category, image, image_count, and the sale-channel block: sale_channel, auction_date, auction_location, auction_closes_text, auction_starts_text, tender_start_date, tender_end_date, lot_number, current_bid_nzd, starting_bid_nzd, bid_status, reserve_low_nzd, reserve_high_nzd, reserve_range_text.","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":3},"example_params":{"division":"cars","max_results":20}},{"name":"detail","description":"One Turners listing in full, from the listing page's own data: VIN, the complete odometer HISTORY series Turners holds for the vehicle, WOF / COF / registration expiry dates, origin, factory features, the vehicle's CO2 / fuel-economy / safety star ratings, every photo, the branch with its street address and coordinates, the named consultant with their work email and mobile, and — when the vehicle is an auction lot — the catalogue, lot and lane number, sale date, estimate range and no-reserve flag. Pass `url` from a search row for a single request, or `listing_id` to have Turners resolve it first. One of the two is required: with neither you get MISSING_PARAM. 🔴 COVERAGE: cars and trucks & machinery. Turners still serves damaged vehicles, general goods, boats and motorhomes from an older listing page that publishes no detail payload, so `detail` answers MARKET_UNAVAILABLE for those four and says why; their `search` rows already carry the price or current bid, odometer, spec, branch and sale channel.","required_params":[],"optional_params":["listing_id","url","division"],"params":[{"name":"listing_id","type":"string","required":false,"description":"Turners good number, the 8-digit id on every search row and at the end of every listing URL (e.g. 28450344). Resolved to its listing through Turners' own search, so it costs one extra upstream request; pass `url` instead when you already have it from a search row and want a single request.","on_invalid":"reject","example":"28450344","value_pattern":"\\d{6,12}","aliases":["goodnumber","good_number","id","stock_number"]},{"name":"url","type":"string","required":false,"description":"A full turners.co.nz listing URL, exactly as `search` returns it in `url`. Cheapest way to fetch a detail: one request, no id resolution.","on_invalid":"reject","example":"https://www.turners.co.nz/Cars/Used-Cars-for-Sale/volkswagen/touareg/28450344","value_pattern":"https?://(www\\.)?turners\\.co\\.nz/.+","aliases":["listing_url","link","page_url"]},{"name":"division","type":"enum","required":false,"description":"Which Turners marketplace to search. Live totals measured 2026-10-01: cars 2,719 · trucks 374 · damaged 554 · general-goods 1,521 · boats 14 · motorhomes 34.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"trucks","label":"Trucks & Machinery"},{"value":"damaged","label":"Damaged & end-of-life vehicles"},{"value":"general-goods","label":"General goods"},{"value":"boats","label":"Boats & marine"},{"value":"motorhomes","label":"Buses, caravans & motorhomes"}],"default":"cars","example":"cars","aliases":["market","section","category"]}],"returns":"One listing object: identity, spec, odometer_history[], expiry dates, price_nzd + was_price_nzd + ld_json_price_nzd + price_conflict, auction{}, seller{} with branch address/geo/consultant, features[], description_lines[], images[], ratings{}.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.turners.co.nz/Cars/Used-Cars-for-Sale/volkswagen/touareg/28450344"}},{"name":"auctions","description":"Turners' auction diary for one division: every scheduled sale with its date, start time, name, branch, lot count, live state and the catalogue id you pass to `auction_lots`. The cars diary held 99 scheduled sales on 2026-10-01. Dates and times are returned exactly as Turners prints them (`05 Oct`, `12:00pm`, NZ local time) — nothing here converts a timezone or guesses a year.","required_params":[],"optional_params":["division","max_results"],"params":[{"name":"division","type":"enum","required":false,"description":"Which auction diary to read. Turners publishes a separate schedule per division; the cars diary held 99 scheduled sales on 2026-10-01.","on_invalid":"reject","allowed_values":[{"value":"cars","label":"Cars"},{"value":"trucks","label":"Trucks & Machinery"},{"value":"damaged","label":"Damaged & end-of-life vehicles"},{"value":"general-goods","label":"General goods"}],"default":"cars","example":"cars","aliases":["market","section"]},{"name":"max_results","type":"integer","required":false,"description":"Rows to return, 1-110. Turners' own page-size dropdown offers 20 and 110 and nothing else, so a value of 20 or below fetches the 20-row page and anything above fetches the 110-row page and trims. 🔴 110 IS A HARD CEILING PER QUERY: Turners does not page over its URLs (measured on nine parameter spellings and two path forms, all returning page one). `total_available` always reports the real size of the result set, so narrow by make, model, year or price band to go deeper.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":110,"aliases":["pagesize","limit","count","page_size","size"]}],"returns":"{results[], returned, total_available} — each result: auction_id, name, date_text, start_time_text, branch, lot_count, live_state, division, catalogue_url.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"division":"cars","max_results":20}},{"name":"auction_lots","description":"The catalogue of one scheduled Turners auction: every lot in it, in the same shape `search` returns, including each lot's buy-now price where Turners also offers one. Take `auction_id` from `auctions`. On an in-room auction the lots carry the sale's venue and date rather than a running bid; on an online auction they carry whichever of `current_bid_nzd` or `starting_bid_nzd` Turners is printing, plus `auction_closes_text`.","required_params":["auction_id"],"optional_params":["max_results"],"params":[{"name":"auction_id","type":"string","required":true,"description":"Auction identifier as `auctions` returns it: `<divisionIndex>-<auctionId>`, e.g. `1000-80076`. It is the last path segment of the catalogue URL.","on_invalid":"reject","example":"1000-80076","value_pattern":"\\d{3,6}-\\d{3,8}","aliases":["catalogue_id","sale_id","id"]},{"name":"max_results","type":"integer","required":false,"description":"Rows to return, 1-110. Turners' own page-size dropdown offers 20 and 110 and nothing else, so a value of 20 or below fetches the 20-row page and anything above fetches the 110-row page and trims. 🔴 110 IS A HARD CEILING PER QUERY: Turners does not page over its URLs (measured on nine parameter spellings and two path forms, all returning page one). `total_available` always reports the real size of the result set, so narrow by make, model, year or price band to go deeper.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":110,"aliases":["pagesize","limit","count","page_size","size"]}],"returns":"{results[], total_available, returned, auction_id, auction_name} — rows as in `search`.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":3},"example_params":{"auction_id":"1000-80076"}}]},{"name":"turo","category":{"id":"travel","title":"Travel & Lodging"},"title":"Turo API scraper — search peer-to-peer car rentals & car sharing on turo.com: find cars by location and dates with price/make/type/sort filters, get vehicle specs, pricing calendars and similar cars, plus full host profiles, a host's whole fleet and host reviews — make, model, year, daily price, ratings, trips, photos and location, no account required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/turo/v1","spec_available":true,"actions":[{"name":"search","description":"Search Turo for rentable cars at a location and date range. Filter by make, model, vehicle type (CAR/SUV/MINIVAN/TRUCK/VAN), max price and sort order; paginated (~200 cars/page). Returns the full result page as clean JSON. (If the site serves a bot check the engine retries and, only if it still cannot pass, returns a clean TARGET_BLOCKED — never fabricated data.)","required_params":["location"],"optional_params":["start_date","end_date","start_time","end_time","country","make","model","vehicle_type","max_price","sort","page"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — a US city, address or airport ('Los Angeles, CA, USA', 'Miami, FL', 'LAX airport'). Resolved to coordinates automatically.","on_invalid":"reject","example":"Los Angeles, CA, USA","aliases":["query","city","q"]},{"name":"start_date","type":"string","required":false,"description":"Trip start date (YYYY-MM-DD). Defaults to ~14 days out.","on_invalid":"ignore","example":"2026-11-26","aliases":["startDate","pickup_date"]},{"name":"end_date","type":"string","required":false,"description":"Trip end date (YYYY-MM-DD). Defaults to start + 3 days.","on_invalid":"ignore","example":"2026-11-29","aliases":["endDate","dropoff_date"]},{"name":"start_time","type":"string","required":false,"description":"Pickup time of day (HH:MM, 24h). Default 10:00.","on_invalid":"ignore","default":"10:00","example":"10:00"},{"name":"end_time","type":"string","required":false,"description":"Return time of day (HH:MM, 24h). Default 10:00.","on_invalid":"ignore","default":"10:00","example":"10:00"},{"name":"country","type":"string","required":false,"description":"ISO-2 market country. Default US (Turo's core market).","on_invalid":"ignore","default":"US","example":"US"},{"name":"make","type":"string","required":false,"description":"Filter by car make (e.g. Tesla, BMW, Toyota). See the `makes` action for the full supported list.","on_invalid":"ignore","example":"Tesla"},{"name":"model","type":"string","required":false,"description":"Filter by model (use together with make, e.g. Model 3).","on_invalid":"ignore","example":"Model 3"},{"name":"vehicle_type","type":"enum","required":false,"description":"Filter by body type. One of: CAR, SUV, MINIVAN, TRUCK, VAN, CARGO_VAN, BOX_TRUCK.","on_invalid":"ignore","allowed_values":[{"value":"CAR","label":"Cars"},{"value":"SUV","label":"SUVs"},{"value":"MINIVAN","label":"Minivans"},{"value":"TRUCK","label":"Trucks"},{"value":"VAN","label":"Vans"},{"value":"CARGO_VAN","label":"Cargo vans"},{"value":"BOX_TRUCK","label":"Box trucks"}],"example":"SUV"},{"name":"max_price","type":"number","required":false,"description":"Only cars at or below this average daily price (in the market currency, USD for US).","on_invalid":"ignore","example":150,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Sort order. One of: RELEVANCE (default), PRICE_LOW, PRICE_HIGH, DISTANCE.","on_invalid":"ignore","allowed_values":[{"value":"RELEVANCE","label":"Relevance"},{"value":"PRICE_LOW","label":"Price: low to high"},{"value":"PRICE_HIGH","label":"Price: high to low"},{"value":"DISTANCE","label":"Distance away"}],"default":"RELEVANCE","example":"PRICE_LOW"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page until meta has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"cars[]{vehicle_id, make, model, year, trim, type, transmission, price_per_day{amount,currency}, rating, trip_count, is_all_star_host, image, location{city,state,latitude,longitude}, host{host_id,first_name,is_all_star_host,url}, url} + meta{total_hits, page, has_more, search_location}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"Miami, FL, USA"}},{"name":"vehicle.detail","description":"Full detail for one Turo car: make/model/year/trim, transmission, seats, doors, luggage and fuel/battery specs, the categorized feature list, host card, ratings, and the price calendar. The protected listing card (host card + sub-ratings) rides a Cloudflare-guarded endpoint (best-effort, bounded retry); the specs, feature list and price calendar always come back from the open endpoints.","required_params":["vehicle_id"],"optional_params":["start_date","end_date","start_time","end_time"],"params":[{"name":"vehicle_id","type":"string","required":true,"description":"Turo vehicle/listing id — the number at the end of a car URL (turo.com/.../<vehicle_id>) or `vehicle_id` from search.","on_invalid":"reject","example":"3613768","aliases":["vehicleId","id"]},{"name":"start_date","type":"string","required":false,"description":"Trip start date (YYYY-MM-DD). Defaults to ~14 days out.","on_invalid":"ignore","example":"2026-11-26","aliases":["startDate","pickup_date"]},{"name":"end_date","type":"string","required":false,"description":"Trip end date (YYYY-MM-DD). Defaults to start + 3 days.","on_invalid":"ignore","example":"2026-11-29","aliases":["endDate","dropoff_date"]},{"name":"start_time","type":"string","required":false,"description":"Pickup time of day (HH:MM, 24h). Default 10:00.","on_invalid":"ignore","default":"10:00","example":"10:00"},{"name":"end_time","type":"string","required":false,"description":"Return time of day (HH:MM, 24h). Default 10:00.","on_invalid":"ignore","default":"10:00","example":"10:00"}],"returns":"vehicle{vehicle_id, make, model, year, trim, color, vin, transmission, seats, doors, luggage, fuel_type, battery_range_miles, image, url, description, location, host{...}, ratings{overall, count, categories[]}, number_of_reviews, number_of_trips} + features[]{category, items[]} + price{average_daily, currency} + card_blocked(bool)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"vehicle_id":"3613768"}},{"name":"vehicle.features","description":"Specs + the full categorized feature list for one car (transmission, seats, doors, luggage capacity, fuel type, battery range, and features like Backup camera, All-wheel drive, Apple CarPlay, grouped by category).","required_params":["vehicle_id"],"optional_params":[],"params":[{"name":"vehicle_id","type":"string","required":true,"description":"Turo vehicle/listing id — the number at the end of a car URL (turo.com/.../<vehicle_id>) or `vehicle_id` from search.","on_invalid":"reject","example":"3613768","aliases":["vehicleId","id"]}],"returns":"specs{transmission, seats, doors, luggage, large_luggage, small_luggage, fuel_type, battery_range_miles, fuel_economy} + features[]{category, items[]{label, value}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"vehicle_id":"3613768"}},{"name":"vehicle.pricing","description":"Daily price calendar for one car across a date window: per-day price + day of week. Defaults to the next ~3 months if no window is given.","required_params":["vehicle_id"],"optional_params":["start_date","end_date"],"params":[{"name":"vehicle_id","type":"string","required":true,"description":"Turo vehicle/listing id — the number at the end of a car URL (turo.com/.../<vehicle_id>) or `vehicle_id` from search.","on_invalid":"reject","example":"3613768","aliases":["vehicleId","id"]},{"name":"start_date","type":"string","required":false,"description":"Calendar window start (YYYY-MM-DD). Default: today.","on_invalid":"ignore","example":"2026-11-13"},{"name":"end_date","type":"string","required":false,"description":"Calendar window end (YYYY-MM-DD). Default: ~3 months out.","on_invalid":"ignore","example":"2027-02-10"}],"returns":"currency + days[]{date, day_of_week, price} + price_range{min, max} + average_price","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"vehicle_id":"3613768"}},{"name":"vehicle.similar","description":"Cars similar to a given make/model near a location and dates — a make/model-seeded list of rentable Turo cars (price, rating, host, photo, location), and the most dependable way to get one. Pass make + model + location; vehicle_id is optional (used only to exclude that exact car).","required_params":["make","location"],"optional_params":["model","vehicle_id","start_date","end_date","start_time","end_time","country","max_results"],"params":[{"name":"make","type":"string","required":true,"description":"Car make to seed similar results (e.g. Tesla, BMW).","on_invalid":"reject","example":"Tesla"},{"name":"model","type":"string","required":false,"description":"Model to seed similar results (e.g. Model 3, 5 Series).","on_invalid":"ignore","example":"Model 3"},{"name":"location","type":"string","required":true,"description":"Where to search — a US city, address or airport ('Los Angeles, CA, USA', 'Miami, FL', 'LAX airport'). Resolved to coordinates automatically.","on_invalid":"reject","example":"Los Angeles, CA, USA","aliases":["query","city","q"]},{"name":"start_date","type":"string","required":false,"description":"Trip start date (YYYY-MM-DD). Defaults to ~14 days out.","on_invalid":"ignore","example":"2026-11-26","aliases":["startDate","pickup_date"]},{"name":"end_date","type":"string","required":false,"description":"Trip end date (YYYY-MM-DD). Defaults to start + 3 days.","on_invalid":"ignore","example":"2026-11-29","aliases":["endDate","dropoff_date"]},{"name":"start_time","type":"string","required":false,"description":"Pickup time of day (HH:MM, 24h). Default 10:00.","on_invalid":"ignore","default":"10:00","example":"10:00"},{"name":"end_time","type":"string","required":false,"description":"Return time of day (HH:MM, 24h). Default 10:00.","on_invalid":"ignore","default":"10:00","example":"10:00"},{"name":"country","type":"string","required":false,"description":"ISO-2 market country. Default US (Turo's core market).","on_invalid":"ignore","default":"US","example":"US"},{"name":"vehicle_id","type":"string","required":false,"description":"Optional: a vehicle id to exclude from the results.","on_invalid":"ignore","example":"3613768"},{"name":"max_results","type":"integer","required":false,"description":"How many similar cars to return (1-20). Default 9.","on_invalid":"ignore","default":9,"example":9,"minimum":1,"maximum":20}],"returns":"cars[]{vehicle_id, make, model, year, type, transmission, price_per_day{amount,currency}, rating, image, location{...}, host{...}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"make":"Tesla","model":"Model 3","location":"Miami, FL, USA"}},{"name":"host.profile","description":"Full Turo host (driver) profile: first name, All-Star/Pro status, member-since, response rate & time, ratings from renters and from car owners, rental counts and account verifications (phone/email/ID). Last name only with include_pii=true.","required_params":["host_id"],"optional_params":[],"params":[{"name":"host_id","type":"string","required":true,"description":"Turo host/driver id — the number in a host URL (turo.com/us/en/drivers/<host_id>) or `host.host_id` from a result.","on_invalid":"reject","example":"33962137","aliases":["driverId","driver_id","id"]}],"returns":"host{host_id, first_name, is_all_star_host, is_pro_host, image, url, member_since{month,year}, response_rate, response_time, bio, rating_from_renters, rating_to_hundredth, rentals_from_renters, ratings_from_renters_count, rentals_from_owners, verifications[]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"host_id":"33962137"}},{"name":"host.cars","description":"Every car a Turo host has listed, paginated — make/model/year, daily price, rating, review count, location and photo per car.","required_params":["host_id"],"optional_params":["page"],"params":[{"name":"host_id","type":"string","required":true,"description":"Turo host/driver id — the number in a host URL (turo.com/us/en/drivers/<host_id>) or `host.host_id` from a result.","on_invalid":"reject","example":"33962137","aliases":["driverId","driver_id","id"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page until meta has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"cars[]{vehicle_id, make, model, year, trim, transmission, price_per_day{amount,currency}, rating, review_count, image, location{...}, url} + meta{page, total_pages, has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"host_id":"33962137"}},{"name":"host.reviews","description":"Reviews left for a Turo host by their guests, paginated — star rating, the review text, date and the host's reply. Reviewer first name is kept (public on Turo); last name only with include_pii=true.","required_params":["host_id"],"optional_params":["page","per_page"],"params":[{"name":"host_id","type":"string","required":true,"description":"Turo host/driver id — the number in a host URL (turo.com/us/en/drivers/<host_id>) or `host.host_id` from a result.","on_invalid":"reject","example":"33962137","aliases":["driverId","driver_id","id"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page until meta has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200},{"name":"per_page","type":"integer","required":false,"description":"Reviews per page (1-50). Default 20.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["itemsPerPage"]}],"returns":"reviews[]{rating, text, date, reviewer{first_name, host_id}, host_reply} + meta{page, total_pages, per_page, has_more}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"host_id":"33962137"}},{"name":"location.autocomplete","description":"Resolve a free-text place into Turo search locations (cities and airports) with id, type and coordinates — handy to confirm the place before searching.","required_params":["location"],"optional_params":[],"params":[{"name":"location","type":"string","required":true,"description":"Place text to resolve (city / airport / address).","on_invalid":"reject","example":"Miami","aliases":["query","q","searchTerm"]}],"returns":"results[]{id, label, type, latitude, longitude}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"location":"Los Angeles"}},{"name":"makes","description":"The full list of car makes Turo supports in a market (e.g. Tesla, BMW, Toyota, Ferrari) — useful as the allowed values for the search `make` filter.","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"string","required":false,"description":"ISO-2 market country. Default US (Turo's core market).","on_invalid":"ignore","default":"US","example":"US"}],"returns":"makes[] (string list) + count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US"}}]},{"name":"tweakers","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Tweakers Pricewatch API — Dutch tech price comparison: search, category listings, every shop's price with shipping and total, price history and full specs","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/tweakers/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search in tweakers.net Pricewatch (the Netherlands). Filter by tweakers category id and brand id (both from the facets this action returns), price range and sort. Each row is one product edition with its lowest shop price ('vanaf'), number of shops, half-star rating and review count. Needs `query` OR `category_id` (either one is enough). By default only products that some shop sells right now are counted (`priced_only`); tweakers' own search also counts discontinued and announced products.","required_params":[],"optional_params":["query","category_id","brand_id","min_price","max_price","priced_only","sort","page"],"params":[{"name":"query","type":"string","required":false,"description":"Search words (Dutch or English product names, e.g. `rtx 5070`, `ssd 2tb`, `iphone 17`). Optional when `category_id` is given.","on_invalid":"reject","example":"rtx 5070","aliases":["q","keyword"]},{"name":"category_id","type":"integer","required":false,"description":"Tweakers category id from `category_facets` (e.g. 49 = Videokaarten, 496 = Laptops). An unknown id is refused by tweakers (INVALID_PARAM).","on_invalid":"reject","example":49,"minimum":1,"aliases":["category"]},{"name":"brand_id","type":"integer","required":false,"description":"Tweakers brand id, as returned in `brand_facets` (e.g. 5 = ASUS). An unknown id is refused by tweakers (INVALID_PARAM).","on_invalid":"reject","example":5,"minimum":1,"aliases":["brand"]},{"name":"min_price","type":"number","required":false,"description":"Lowest shop price in EUR (VAT included).","on_invalid":"reject","example":600,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest shop price in EUR (VAT included).","on_invalid":"reject","example":900,"minimum":0,"aliases":["price_max"]},{"name":"priced_only","type":"boolean","required":false,"description":"Count only products that some shop sells right now (true, default) or every product ever listed, including discontinued and announced ones without a price (false). Ignored when `min_price` is given.","on_invalid":"reject","default":true},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"tweakers' relevance order"},{"value":"price_asc","label":"Prijs oplopend — lowest price first"},{"value":"price_desc","label":"Prijs aflopend — highest first"},{"value":"rating","label":"Score — best reviewed first"},{"value":"newest","label":"Verkrijgbaar sinds — newest first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 40 products per page. A page past the last one returns no rows with `page_beyond_last: true`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000}],"returns":"results[]{row_type (product|unsorted), product_id (catalogue rows), unsorted_id (unsorted shop-feed rows: pass to offers), title, url, image, summary (spec line), tested, rating_stars (rounded to half stars), review_count, price_from, price_display, currency=EUR, shop_count, price_status ('Wordt verwacht' when there is no price yet)} + total, page, last_page, has_more, page_beyond_last, category_facets[]{id, name, count}, brand_facets[]{id, name, count}, country=NL","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"rtx 5070"}},{"name":"category","description":"One tweakers Pricewatch category listing (the site's own 'vergelijken' page): every product edition in a category, or in a brand / product family inside it, with its lowest price, number of shops, rating and the two spec columns tweakers shows for that category. Lists what tweakers lists: products with a shop price plus announced ones without a price yet (`price_status: Wordt verwacht`). Filter by brand id and price range; sort by popularity, price, rating or newest.","required_params":["category"],"optional_params":["brand_id","min_price","max_price","sort","page"],"params":[{"name":"category","type":"string","required":true,"description":"Category path as in tweakers' URL: `videokaarten`, `laptops`, `smartphones`, or deeper (a brand or product family, e.g. `consoles/sony/playstation-5-pro_p1573800`), or the full tweakers.net/…/vergelijken/ URL. `product` returns it as `category.path` and `family.path`.","on_invalid":"reject","example":"videokaarten","aliases":["category_path","path","slug"]},{"name":"brand_id","type":"integer","required":false,"description":"Tweakers brand id, as returned in `brand_facets` (e.g. 5 = ASUS). An unknown id is refused by tweakers (INVALID_PARAM).","on_invalid":"reject","example":5,"minimum":1,"aliases":["brand"]},{"name":"min_price","type":"number","required":false,"description":"Lowest shop price in EUR (VAT included).","on_invalid":"reject","example":600,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest shop price in EUR (VAT included).","on_invalid":"reject","example":900,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"popularity","label":"Populariteit — tweakers' default"},{"value":"price_asc","label":"Prijs oplopend"},{"value":"price_desc","label":"Prijs aflopend"},{"value":"rating","label":"Score — best reviewed first"},{"value":"newest","label":"Verkrijgbaar sinds — newest first"}],"default":"popularity"},{"name":"page","type":"integer","required":false,"description":"Result page, 40 products per page. A page past the last one returns no rows with `page_beyond_last: true`.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"results[]{row_type, product_id, unsorted_id, title, url, image, summary, tested, rating_stars, review_count, price_from, price_display, currency=EUR, shop_count, price_status, shown_specs[]{label, value}} + category, title, total, page, last_page, has_more, page_beyond_last, spec_columns[], brand_facets[]{id, name, count}, country=NL","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"videokaarten"}},{"name":"product","description":"One Pricewatch product page: title, brand, images, EAN and SKU codes, category and product family (pass `category.path` / `family.path` to `category`), the lowest and highest shop price, the number of offers, the exact review score and review count, how many users want / have it, the headline specs and whether Tweakers' lab tested it. The lowest price is checked against the offer table. Use `offers` for every shop, `specs` for the full sheet, `price_history` for the chart.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Tweakers product id (the 'Tweakers ID' of one product edition, digits only): the `product_id` of a `search` or `category` row, also the number in a product URL tweakers.net/pricewatch/<id>/…. Provide product_id OR url.","on_invalid":"reject","example":"2158394","aliases":["id","edition_id"]},{"name":"url","type":"string","required":false,"description":"A tweakers.net Pricewatch product URL; alternative to product_id.","on_invalid":"reject","example":"https://tweakers.net/pricewatch/2158394/asus-prime-geforce-rtx-5070-ti-16gb-gddr7-oc-edition.html","aliases":["product_url"]}],"returns":"product{product_id, title, brand, brand_url, url, summary, image, images[], ean[], sku[], category{name, path, url}, category_path[]{name, url}, family{id, name, path, url}, lowest_price, highest_price, offer_count, refurbished_offer_count, currency=EUR, price_mismatch, status, rating, rating_header, review_count, want_count, have_count, tested, editorial_review_url, spec_highlights[]{label, value}, price_history_url} + country=NL","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"2158394"}},{"name":"offers","description":"Every shop selling one product in the Netherlands, in Pricewatch's order (cheapest TOTAL first — price plus shipping plus payment cost): the shop (id, name, slogan or the marketplace seller, half-star rating and review count), the price, and tweakers' own cost breakdown for that shop — shipping line and amount, payment method and its cost, and the total. Delivery promise text per shop. Refurbished offers come apart in `refurbished[]`. The whole table comes in one call. Takes a catalogue `product_id` (or `url`), or the `unsorted_id` of an unsorted search row.","required_params":[],"optional_params":["product_id","url","unsorted_id"],"params":[{"name":"product_id","type":"string","required":false,"description":"Tweakers product id (the 'Tweakers ID' of one product edition, digits only): the `product_id` of a `search` or `category` row, also the number in a product URL tweakers.net/pricewatch/<id>/…. Provide product_id OR url.","on_invalid":"reject","example":"2158394","aliases":["id","edition_id"]},{"name":"url","type":"string","required":false,"description":"A tweakers.net Pricewatch product URL; alternative to product_id.","on_invalid":"reject","example":"https://tweakers.net/pricewatch/2158394/asus-prime-geforce-rtx-5070-ti-16gb-gddr7-oc-edition.html","aliases":["product_url"]},{"name":"unsorted_id","type":"string","required":false,"description":"Id of an 'unsorted' row (`row_type: unsorted` in search / category): a shop-feed item tweakers lists with prices before it is added to its catalogue. Only `offers` accepts it; such items have no spec sheet or price chart.","on_invalid":"reject","example":"51965374","aliases":["unsorted"]}],"returns":"product{product_id, unsorted_id, title, url, lowest_price, highest_price, offer_count, currency=EUR, price_mismatch} + offers[]{position, condition, seller{id, name, tagline, marketplace_seller, rating_stars, review_count, reviews_url}, price, price_display, currency, shipping_cost, shipping_label, shipping_display, payment_method, payment_cost, total_price, total_mismatch, cost_breakdown[]{label, amount, display}, delivery_text, delivery_indicator} + refurbished[] (same shape) + count + country=NL","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"2158394"}},{"name":"specs","description":"The full specification sheet of one product (Specificaties), grouped as tweakers groups it, in tweakers' own Dutch wording; yes/no specs are true / false. Includes the 'Meer informatie' group (category, brand, series, EAN, SKU, maker link).","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Tweakers product id (the 'Tweakers ID' of one product edition, digits only): the `product_id` of a `search` or `category` row, also the number in a product URL tweakers.net/pricewatch/<id>/…. Provide product_id OR url.","on_invalid":"reject","example":"2158394","aliases":["id","edition_id"]},{"name":"url","type":"string","required":false,"description":"A tweakers.net Pricewatch product URL; alternative to product_id.","on_invalid":"reject","example":"https://tweakers.net/pricewatch/2158394/asus-prime-geforce-rtx-5070-ti-16gb-gddr7-oc-edition.html","aliases":["product_url"]}],"returns":"product{product_id, url} + groups[]{group, specs[]{label, value, url}} + specs[]{group, label, value, url} + highlights[]{label, value} + count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"2158394"}},{"name":"price_history","description":"Daily price history of one product on Pricewatch (the price chart): the lowest shop price and the average shop price for every day tweakers recorded, from the day it was listed, plus tweakers' own chart markers (e.g. lowest price in 6 months). The chart is daily; its last point is the last completed day.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Tweakers product id (the 'Tweakers ID' of one product edition, digits only): the `product_id` of a `search` or `category` row, also the number in a product URL tweakers.net/pricewatch/<id>/…. Provide product_id OR url.","on_invalid":"reject","example":"2158394","aliases":["id","edition_id"]},{"name":"url","type":"string","required":false,"description":"A tweakers.net Pricewatch product URL; alternative to product_id.","on_invalid":"reject","example":"https://tweakers.net/pricewatch/2158394/asus-prime-geforce-rtx-5070-ti-16gb-gddr7-oc-edition.html","aliases":["product_url"]}],"returns":"product{product_id, url} + points[]{date, lowest_price, average_price} + count + first_date + last_date + all_time_lowest{price, date} + markers[]{label, price} + currency=EUR + country=NL","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"2158394"}}]},{"name":"twitch","category":{"id":"social","title":"Social Media"},"title":"Twitch API scraper — channel, live stream, VOD, clip, search and directory data: channel profile (id, display name, description, follower count, partner/affiliate status, profile image), live stream status (viewer count, game/category, title, started-at), a streamer's past broadcasts (VODs) and top clips, channel and category/game search, the top live games with viewer counts, and the top live streams site-wide — all from Twitch's public GraphQL, no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/twitch/v1","spec_available":true,"actions":[{"name":"channel","description":"Full channel/user profile by login: id, display name, description, created-at, profile and banner image, follower count, partner/affiliate/staff flags, and the current live stream (title, viewer count, game/category, started-at) if live.","required_params":["login"],"optional_params":[],"params":[{"name":"login","type":"string","required":true,"description":"Twitch channel login name — the handle in twitch.tv/<login> (e.g. 'shroud', 'pokimane', 'xqc'). Case-insensitive.","on_invalid":"reject","example":"shroud","aliases":["channel","user","username"]}],"returns":"channel{id, login, display_name, description, created_at, profile_image, banner_image, follower_count, is_partner, is_affiliate, is_live, stream{...}, url}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"login":"shroud"}},{"name":"stream","description":"Live status of a channel: whether it is live right now and, if so, the stream id, title, viewer count, game/category, started-at timestamp and a 1080p thumbnail. Returns is_live=false (honest-empty) for an offline channel.","required_params":["login"],"optional_params":[],"params":[{"name":"login","type":"string","required":true,"description":"Twitch channel login name — the handle in twitch.tv/<login> (e.g. 'shroud', 'pokimane', 'xqc'). Case-insensitive.","on_invalid":"reject","example":"shroud","aliases":["channel","user","username"]}],"returns":"{login, display_name, is_live, stream{id, title, viewer_count, started_at, game{...}, thumbnail}}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"login":"shroud"}},{"name":"videos","description":"A channel's past broadcasts / VODs (most recent first), up to 100 in one page: id, title, duration, view count, published-at, game/category and thumbnail. Note: Twitch integrity-gates pagination beyond the first page for keyless access.","required_params":["login"],"optional_params":["limit","type","sort"],"params":[{"name":"login","type":"string","required":true,"description":"Twitch channel login name — the handle in twitch.tv/<login> (e.g. 'shroud', 'pokimane', 'xqc'). Case-insensitive.","on_invalid":"reject","example":"shroud","aliases":["channel","user","username"]},{"name":"limit","type":"integer","required":false,"description":"How many VODs to return (1-100, single page).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"type","type":"enum","required":false,"description":"Which kind of videos: ARCHIVE (past broadcasts, default), HIGHLIGHT, UPLOAD or ALL.","on_invalid":"ignore","allowed_values":[{"value":"ARCHIVE","label":"Past broadcasts"},{"value":"HIGHLIGHT","label":"Highlights"},{"value":"UPLOAD","label":"Uploads"},{"value":"ALL","label":"All types"}],"default":"ARCHIVE","example":"ARCHIVE"},{"name":"sort","type":"enum","required":false,"description":"Order: TIME (newest first, default) or VIEWS (most viewed).","on_invalid":"ignore","allowed_values":[{"value":"TIME","label":"Newest first"},{"value":"VIEWS","label":"Most viewed"}],"default":"TIME","example":"TIME"}],"returns":"videos[]{id, title, duration_seconds, view_count, published_at, game{...}, thumbnail, url} + meta{has_more}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"login":"pokimane","limit":5}},{"name":"clips","description":"Top clips of a channel, ranked by views, up to 100 in one page: id, slug, title, view count, created-at, duration, game/category, the clip creator and the clip URL. Filter the time window with `period`. Pagination beyond page one is integrity-gated.","required_params":["login"],"optional_params":["limit","period"],"params":[{"name":"login","type":"string","required":true,"description":"Twitch channel login name — the handle in twitch.tv/<login> (e.g. 'shroud', 'pokimane', 'xqc'). Case-insensitive.","on_invalid":"reject","example":"shroud","aliases":["channel","user","username"]},{"name":"limit","type":"integer","required":false,"description":"How many clips to return (1-100).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"period","type":"enum","required":false,"description":"Time window for top clips: LAST_DAY, LAST_WEEK (default), LAST_MONTH or ALL_TIME.","on_invalid":"ignore","allowed_values":[{"value":"LAST_DAY","label":"Last 24 hours"},{"value":"LAST_WEEK","label":"Last 7 days"},{"value":"LAST_MONTH","label":"Last 30 days"},{"value":"ALL_TIME","label":"All time"}],"default":"LAST_WEEK","example":"LAST_WEEK"}],"returns":"clips[]{id, slug, title, view_count, created_at, duration_seconds, game{...}, clipper, url} + meta{has_more}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"login":"xqc","limit":5,"period":"ALL_TIME"}},{"name":"search_channels","description":"Search Twitch channels by name/keyword. Returns matching channels with id, login, display name, description, follower count, partner/affiliate flags and live status (viewer count + game when live).","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search term.","on_invalid":"reject","example":"valorant","aliases":["q","text","term"]},{"name":"limit","type":"integer","required":false,"description":"Max channels to return (1-30).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":30}],"returns":"channels[]{id, login, display_name, description, follower_count, is_partner, is_live, viewer_count, game{...}, url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ninja","limit":5}},{"name":"search_categories","description":"Search Twitch games/categories by name. Returns matching categories with id, name, display name, current live viewer count and box-art image.","required_params":["query"],"optional_params":["limit"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text search term.","on_invalid":"reject","example":"valorant","aliases":["q","text","term"]},{"name":"limit","type":"integer","required":false,"description":"Max categories to return (1-30).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":30}],"returns":"categories[]{id, name, display_name, viewer_count, box_art, url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"valorant","limit":5}},{"name":"top_games","description":"The top games/categories on Twitch right now, ranked by live viewers: id, name, display name, current viewer count, content tags and box-art image. Up to 30.","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"How many top games to return (1-30).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":30}],"returns":"games[]{id, name, display_name, viewer_count, tags[], box_art, url}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":5}},{"name":"top_streams","description":"The top live streams on Twitch right now, ranked by viewers: stream id, title, viewer count, started-at, the broadcasting channel (login, display name) and the game/category. Up to 30.","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"How many top streams to return (1-30).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":30}],"returns":"streams[]{id, title, viewer_count, started_at, channel{login, display_name}, game{...}, thumbnail, url}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":5}},{"name":"game","description":"Game/category detail by name plus its top live streams: category id, display name, total live viewers, description, avatar — and the top channels (up to 30) currently streaming it, each with title, viewer count and broadcaster.","required_params":["name"],"optional_params":["limit"],"params":[{"name":"name","type":"string","required":true,"description":"Exact game/category name as Twitch lists it (e.g. 'VALORANT', 'Just Chatting', 'Counter-Strike'). Use search_categories to resolve a fuzzy name first.","on_invalid":"reject","example":"VALORANT","aliases":["game","category","q"]},{"name":"limit","type":"integer","required":false,"description":"How many of the game's top live streams to return (1-30).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":30}],"returns":"game{id, name, display_name, viewer_count, description, avatar} + streams[]{id, title, viewer_count, channel{login, display_name}, url}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"VALORANT","limit":5}},{"name":"schedule","description":"A channel's stream schedule: the next upcoming stream (start, title, category) plus the channel's recurring weekly schedule segments — each with start/end time, title, cancelled flag and the planned game/category. Returns honest-empty when the channel has not published a schedule.","required_params":["login"],"optional_params":[],"params":[{"name":"login","type":"string","required":true,"description":"Twitch channel login name — the handle in twitch.tv/<login> (e.g. 'shroud', 'pokimane', 'xqc'). Case-insensitive.","on_invalid":"reject","example":"shroud","aliases":["channel","user","username"]}],"returns":"{login, display_name, schedule_id, next_segment{start_at, title, categories[]}, segments[]{id, start_at, end_at, title, is_cancelled, categories[]{id, name, box_art}}}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"login":"lirik"}},{"name":"game_clips","description":"Top clips for a whole game/category (site-wide, across all channels), ranked by views, up to 100 in one page: id, slug, title, view count, created-at, duration, the broadcaster the clip is from, the clip creator and the URL. Filter the time window with `period`. Pagination beyond page one is integrity-gated.","required_params":["name"],"optional_params":["limit","period"],"params":[{"name":"name","type":"string","required":true,"description":"Exact game/category name as Twitch lists it (e.g. 'VALORANT', 'Just Chatting', 'Counter-Strike'). Use search_categories to resolve a fuzzy name first.","on_invalid":"reject","example":"VALORANT","aliases":["game","category","q"]},{"name":"limit","type":"integer","required":false,"description":"How many clips to return (1-100).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"period","type":"enum","required":false,"description":"Time window for top clips: LAST_DAY, LAST_WEEK (default), LAST_MONTH or ALL_TIME.","on_invalid":"ignore","allowed_values":[{"value":"LAST_DAY","label":"Last 24 hours"},{"value":"LAST_WEEK","label":"Last 7 days"},{"value":"LAST_MONTH","label":"Last 30 days"},{"value":"ALL_TIME","label":"All time"}],"default":"LAST_WEEK","example":"LAST_WEEK"}],"returns":"clips[]{id, slug, title, view_count, created_at, duration_seconds, broadcaster{login, display_name}, clipper, game{...}, url} + meta{has_more}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"VALORANT","limit":5,"period":"ALL_TIME"}},{"name":"game_videos","description":"Top past broadcasts / VODs for a whole game/category (site-wide, across all channels), up to 100 in one page: id, title, duration, view count, published-at, the owning channel and a thumbnail. Order by views (default) or newest. Pagination beyond page one is integrity-gated.","required_params":["name"],"optional_params":["limit","sort"],"params":[{"name":"name","type":"string","required":true,"description":"Exact game/category name as Twitch lists it (e.g. 'VALORANT', 'Just Chatting', 'Counter-Strike'). Use search_categories to resolve a fuzzy name first.","on_invalid":"reject","example":"VALORANT","aliases":["game","category","q"]},{"name":"limit","type":"integer","required":false,"description":"How many VODs to return (1-100).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Order: VIEWS (most viewed, default) or TIME (newest first).","on_invalid":"ignore","allowed_values":[{"value":"VIEWS","label":"Most viewed"},{"value":"TIME","label":"Newest first"}],"default":"VIEWS","example":"VIEWS"}],"returns":"videos[]{id, title, duration_seconds, view_count, published_at, owner{login, display_name}, game{...}, thumbnail, url} + meta{has_more}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"Just Chatting","limit":5}},{"name":"team","description":"A Twitch team profile by name plus its member channels: team id, name, display name, description, logo/banner image — and the member channels (up to 100), each with login, display name, partner/affiliate status and current live status (viewer count + game when live).","required_params":["name"],"optional_params":["limit"],"params":[{"name":"name","type":"string","required":true,"description":"Twitch team name/slug (lowercase, as in the team page URL twitch.tv/team/<name> — e.g. 'tsm', 'fnatic', 'cloud9').","on_invalid":"reject","example":"tsm","aliases":["team","slug"]},{"name":"limit","type":"integer","required":false,"description":"Max member channels to return (1-100).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":100}],"returns":"team{id, name, display_name, description, logo, banner} + members[]{login, display_name, is_partner, is_live, viewer_count, game{...}, url}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"tsm","limit":5}}]},{"name":"twitter","category":{"id":"social","title":"Social Media"},"title":"Twitter / X Data API — profiles, tweets, replies, media, likes, tweet detail + replies, search (top/latest/people/media), followers/following, list timelines. Account-pool backed: no official API key, no quota.","version":"0.2.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/twitter/v1","spec_available":true,"actions":[{"name":"profile","description":"User profile by @username — name, bio, followers, following, tweet/like counts, verified, created date, location, website, avatar/banner.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"The @handle (with or without @).","on_invalid":"reject","example":"nasa"}],"returns":"user{user_id, name, username, description, followers, following, tweets, likes, media_count, verified, created_at, location, website, profile_image, profile_banner, pinned_tweet_ids, url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nasa"}},{"name":"user_by_id","description":"User profile by numeric user_id (same fields as profile).","required_params":["user_id"],"optional_params":[],"params":[{"name":"user_id","type":"string","required":true,"description":"Numeric user id.","on_invalid":"reject","example":"11348282"}],"returns":"user{...} (same shape as profile)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"user_id":"11348282"}},{"name":"user_tweets","description":"A user's tweets — full text, engagement (likes/retweets/replies/quotes/views), media, quoted/retweeted, with cursor pagination.","required_params":["username"],"optional_params":["user_id","limit","cursor"],"params":[{"name":"username","type":"string","required":false,"description":"@handle (resolved to id) — or pass user_id.","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric user id (skips the handle lookup).","on_invalid":"reject","example":"11348282"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"tweets[]{tweet_id,text,created_at,likes,retweets,replies,quotes,views,media[],hashtags,mentions,urls,quoted,retweeted,author,url} + next_cursor + user_id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nasa","limit":10}},{"name":"user_replies","description":"A user's tweets AND replies (timeline incl. replies). Each reply also carries reply_to_text (the parent tweet's text, ≤280 chars) + reply_to_author so a reply is interpretable without a second call — resolved from the conversation already in the response.","required_params":["username"],"optional_params":["user_id","limit","cursor"],"params":[{"name":"username","type":"string","required":false,"description":"@handle — or pass user_id.","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric user id.","on_invalid":"reject","example":"11348282"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"tweets[]{tweet_id,text,reply_to_tweet_id,reply_to_user,reply_to_text,reply_to_author,quoted,media[],author,url,…} + next_cursor + user_id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nasa","limit":10}},{"name":"user_media","description":"A user's media tweets — photos & videos (with video_url + duration), engagement, pagination.","required_params":["username"],"optional_params":["user_id","limit","cursor"],"params":[{"name":"username","type":"string","required":false,"description":"@handle — or pass user_id.","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric user id.","on_invalid":"reject","example":"11348282"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"tweets[]{...,media[]{type,url,video_url,duration_ms,alt}} + next_cursor","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nasa","limit":10}},{"name":"user_likes","description":"Tweets a user has liked (if the account exposes likes).","required_params":["username"],"optional_params":["user_id","limit","cursor"],"params":[{"name":"username","type":"string","required":false,"description":"@handle — or pass user_id.","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric user id.","on_invalid":"reject","example":"11348282"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"tweets[]{...} + next_cursor","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nasa"}},{"name":"tweet","description":"A single tweet by id — full text, engagement, media, quoted/retweeted, author.","required_params":["tweet_id"],"optional_params":[],"params":[{"name":"tweet_id","type":"string","required":true,"description":"The tweet (status) id.","on_invalid":"reject","example":"1860324374516560355"}],"returns":"tweet{tweet_id,text,created_at,likes,retweets,replies,quotes,views,media[],quoted,retweeted,author,url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"tweet_id":"20"}},{"name":"tweet_replies","description":"A tweet PLUS its replies/comments (threaded conversation) with DEEP cursor pagination.","required_params":["tweet_id"],"optional_params":["limit","cursor"],"params":[{"name":"tweet_id","type":"string","required":true,"description":"The tweet id to load replies for.","on_invalid":"reject","example":"1860324374516560355"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":40,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"tweets[]{...} (focal tweet first, then replies) + next_cursor","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"tweet_id":"20","limit":10}},{"name":"search","description":"Search tweets or people. product=Top|Latest|People|Media. Supports X search operators in the query. Cursor pagination.","required_params":["query"],"optional_params":["product","limit","cursor"],"params":[{"name":"query","type":"string","required":true,"description":"Search text (supports operators like from:, since:, filter:media).","on_invalid":"reject","example":"nasa artemis"},{"name":"product","type":"enum","required":false,"description":"Result type.","on_invalid":"ignore","allowed_values":[{"value":"Top","label":"Top"},{"value":"Latest","label":"Latest / recent"},{"value":"People","label":"People / users"},{"value":"Media","label":"Media"}],"default":"Top"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"tweets[] (or users[] when product=People) + next_cursor + product","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"openai","limit":10}},{"name":"followers","description":"A user's followers (each a full user object), paginated.","required_params":["username"],"optional_params":["user_id","limit","cursor"],"params":[{"name":"username","type":"string","required":false,"description":"@handle — or pass user_id.","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric user id.","on_invalid":"reject","example":"11348282"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"users[]{user_id,name,username,description,followers,...} + next_cursor","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nasa","limit":10}},{"name":"following","description":"Accounts a user follows (each a full user object), paginated.","required_params":["username"],"optional_params":["user_id","limit","cursor"],"params":[{"name":"username","type":"string","required":false,"description":"@handle — or pass user_id.","on_invalid":"reject","example":"nasa"},{"name":"user_id","type":"string","required":false,"description":"Numeric user id.","on_invalid":"reject","example":"11348282"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"users[]{...} + next_cursor","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"nasa","limit":10}},{"name":"list_tweets","description":"Latest tweets from a Twitter List by id, paginated.","required_params":["list_id"],"optional_params":["limit","cursor"],"params":[{"name":"list_id","type":"string","required":true,"description":"The List id — the digits in x.com/i/lists/<id>. A list id that no longer exists returns NOT_FOUND (X answers such ids with an empty timeline object, not an error).","on_invalid":"reject","example":"1011591069782499328"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"tweets[]{...} + next_cursor","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"list_id":"1011591069782499328","limit":10}},{"name":"trends","description":"Current trending topics on X / Twitter (the Explore feed) — each with its name, location/category context, post-volume, and a search URL.","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":40,"minimum":1,"maximum":100}],"returns":"trends[]{name, category, description, url}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":10}},{"name":"community_search","description":"Search posts across X Communities by keyword — returns matching community tweets (same rich tweet shape as search).","required_params":["query"],"optional_params":["product","limit","cursor"],"params":[{"name":"query","type":"string","required":true,"description":"Keywords to search within X Communities.","on_invalid":"reject","example":"python"},{"name":"product","type":"string","required":false,"description":"Latest (chronological) or Top (relevance).","on_invalid":"reject","allowed_values":[{"value":"Top","label":"Top"},{"value":"Latest","label":"Latest"}],"example":"Latest"},{"name":"limit","type":"integer","required":false,"description":"Max items to return.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from a previous response's next_cursor.","on_invalid":"ignore"}],"returns":"tweets[]{...} + next_cursor","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"artificial intelligence","limit":10}}]},{"name":"udemy","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Udemy API scraper — search courses by keyword, then pull course detail, live pricing, ratings, paginated student reviews and the full curriculum (chapters + lectures) for any Udemy course by URL, slug or id, plus discovery: browse every course by an instructor and walk the live category taxonomy. Returns title, headline, instructors, rating, subscriber count, level, language, what-you'll-learn, requirements, price/discount and the complete lecture outline. No API key required.","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/udemy/v1","spec_available":true,"actions":[{"name":"search","description":"Search Udemy courses by keyword (any topic, e.g. 'python', 'excel', 'machine learning'). Returns a paginated list of course cards — id, title, headline, instructors, rating, review count, level, duration, language — most-relevant first. Feed a result's course_id into detail / pricing / reviews / curriculum. Page with `page`; meta.has_more / meta.total_count tell you how many.","required_params":["query"],"optional_params":["page","page_size"],"params":[{"name":"query","type":"string","required":true,"description":"The keyword(s) to search Udemy courses for (a topic, skill, tool or course title — e.g. 'python', 'excel formulas', 'aws certified').","on_invalid":"reject","example":"python","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Page number (results are paginated). Page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Results per page (1-24, default 12).","on_invalid":"ignore","default":12,"example":12,"minimum":1,"maximum":24}],"returns":"results[]{course_id, title, headline, url, image, rating, num_reviews, num_lectures, instructional_level, video_length, locale, is_free, instructors[]{id, name}} + meta{page, has_more, next_page, total_count}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"python"}},{"name":"detail","description":"Full course card for a Udemy course by URL, slug or id: title, headline, instructors, rating, review count, subscriber count, level, language, duration, price, category, description, what-you'll-learn, requirements and target audience.","required_params":[],"optional_params":["course_id","slug","url"],"params":[{"name":"course_id","type":"string","required":false,"description":"The Udemy course to look up — its numeric id (the number in /course/<slug>/ → api id), its slug, or a full Udemy course URL (https://www.udemy.com/course/the-complete-python-bootcamp/). A URL/slug is resolved to the course automatically.","on_invalid":"reject","example":"567828","aliases":["slug","url","course_url"]}],"returns":"course{course_id, title, headline, url, image, rating, num_reviews, num_subscribers, num_lectures, instructional_level, content_info, video_length, locale, price{price_string, amount, currency, is_paid}, instructors[]{id, name, job_title, url}, category, subcategory, description, what_you_will_learn[], requirements[], target_audience[]}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"course_id":"567828"}},{"name":"pricing","description":"Live price, list price and discount price for one or many Udemy courses by id (comma-separated). Fast, lightweight — use it to track current/sale pricing.","required_params":["course_ids"],"optional_params":[],"params":[{"name":"course_ids","type":"string","required":true,"description":"One or more numeric Udemy course ids, comma-separated (up to 50). Get ids from the detail action.","on_invalid":"reject","example":"567828,6873227","aliases":["course_id"]}],"returns":"prices[]{course_id, price{amount, currency, price_string}, list_price{...}, discount_price{...}}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"course_ids":"567828"}},{"name":"reviews","description":"Paginated public student reviews for a course by id: star rating, review text, date and the instructor's reply. Page with `page` — meta.has_more / meta.review_count tell you how many.","required_params":["course_id"],"optional_params":["page","page_size"],"params":[{"name":"course_id","type":"string","required":true,"description":"Numeric Udemy course id to pull reviews for (from the detail action).","on_invalid":"reject","example":"567828"},{"name":"page","type":"integer","required":false,"description":"Page number (results are paginated). Page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-100, default 10).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":100}],"returns":"reviews[]{review_id, author, rating, content, created, modified, instructor_reply} + meta{page, has_more, next_page, review_count}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":1},"example_params":{"course_id":"567828"}},{"name":"curriculum","description":"The course outline by id: chapters and lectures in order, with title, position, lecture asset type and whether the lecture is a free preview. Paginated.","required_params":["course_id"],"optional_params":["page","page_size"],"params":[{"name":"course_id","type":"string","required":true,"description":"Numeric Udemy course id (from the detail action).","on_invalid":"reject","example":"567828"},{"name":"page","type":"integer","required":false,"description":"Page number (results are paginated). Page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Items per page (1-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"items[]{type(chapter|lecture), id, title, index, description, asset_type, is_free} + meta{page, has_more, next_page, item_count}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"course_id":"567828"}},{"name":"by_instructor","description":"Browse every course published by a Udemy instructor, by their numeric instructor id. Returns a paginated list of course cards (id, title, rating, price, level, instructors) — use it to discover courses to feed into detail/pricing/reviews/curriculum. Get the instructor id from any course's instructors[] (detail action).","required_params":["instructor_id"],"optional_params":["page","page_size"],"params":[{"name":"instructor_id","type":"string","required":true,"description":"Numeric Udemy instructor id (the id in a course's instructors[].id, available from the detail action).","on_invalid":"reject","example":"9685726","aliases":["user_id"]},{"name":"page","type":"integer","required":false,"description":"Page number (results are paginated). Page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"page_size","type":"integer","required":false,"description":"Items per page (1-100, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"courses[]{course_id, title, headline, url, image, rating, num_reviews, num_subscribers, num_lectures, instructional_level, content_info, price{...}, instructors[]{id, name, job_title, url}} + meta{page, has_more, next_page, course_count}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":1},"example_params":{"instructor_id":"9685726"}},{"name":"categories","description":"The live Udemy category taxonomy (Development, Business, IT & Software, Design, …) with ids, titles and slugs. Pass a category_id to drill into its subcategories. Use this to map the Udemy catalogue structure.","required_params":[],"optional_params":["category_id"],"params":[{"name":"category_id","type":"string","required":false,"description":"Optional. A category id (from this action) to list its subcategories instead of the top-level categories.","on_invalid":"ignore","example":"288"}],"returns":"categories[]{id, title, slug, type, url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"288"}}]},{"name":"ulta","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Ulta Beauty API — browse or keyword-search the ulta.com (US) beauty catalogue and pull one product in full: every shade/size variant with its own price and stock and Ulta's own sku, the complete image and video gallery, brand, availability, rating and top customer reviews inline — no API key, account or cookie required","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/ulta/v1","spec_available":true,"actions":[{"name":"search","description":"Find products on ulta.com (US). Browse a `category` — `/shop/makeup/face/foundation`, `/shop/hair/shampoo-conditioner/shampoo`, `/shop/skin-care/moisturizers` — for the precise, fully pageable result set with Ulta's own total, or give a free-text `query` ('mascara', 'vitamin c serum', 'dyson airwrap') to let Ulta's own type-ahead decide which category answers it. Every product comes back with Ulta's own product id and sku, the name, brand, image, list and sale price (a range when the shades differ), the star rating and review count, the shade/size count and Ulta's badges and promo text. Narrow with `brand`, `min_rating`, `sort` and any facet Ulta publishes for that category; the live facet vocabulary comes back WITH counts in every category response, so a filter value is never a guess.","required_params":[],"optional_params":["query","category","page","max_results","sort","brand","min_rating","filters","sku_prices"],"params":[{"name":"query","type":"string","required":false,"description":"A beauty keyword — a product type, a brand, or a brand + product ('mascara', 'vitamin c serum', 'dyson airwrap', 'MAC lipstick'). This runs Ulta's OWN type-ahead and then browses the category Ulta suggests for that keyword, which is what a shopper gets when they type it into ulta.com's search box. Provide `query` OR `category` (a category is the more precise input, and the only one that guarantees paging over a full result set). IMPORTANT, so you can plan around it: ulta.com's own keyword results page is rendered entirely in the browser and the request behind it is not addressable, so this API does NOT claim to reproduce Ulta's keyword ranking. When the type-ahead maps the keyword to a category (measured: 9 of 12 common keywords do) you get that category's full, pageable result set and `meta.search_mode='keyword_to_category'`. When the keyword is a BRAND ('clinique', 'drunk elephant', 'mac cosmetics', 'the ordinary') the type-ahead resolves it to the brand's own ulta.com/brand/<slug> page and you get that brand's FULL, pageable, fully-priced catalogue across every department with `meta.search_mode='brand'` — one call, all fields present (list_price, sale_price, rating, review_count). When the keyword is neither (Ulta has no category and no brand for it) you get Ulta's own top-result cards and `meta.search_mode='keyword_top_results'` — a handful of products, each priced for its OWN sku (`price`, `list_price`, `sale_price`, `sku_price`; counted in `meta.coverage.top_result_pricing`) while `rating` and `review_count` stay null because Ulta's type-ahead does not publish them. A long product name that the type-ahead matches nothing for is retried with trailing words dropped (at least half the words kept), and only the products containing every kept word are returned, with `meta.search_mode='keyword_top_results_relaxed'` and `meta.relaxed_query` saying which words were dropped — near matches, never presented as exact. A keyword Ulta carries nothing for at all (e.g. a brand it does not stock) returns an honest empty. Either way `suggestions` comes back so you can see what Ulta matched and browse a suggested category directly on the next call.","on_invalid":"reject","example":"vitamin c serum","aliases":["q","keyword","search","text"]},{"name":"category","type":"string","required":false,"description":"An ulta.com category to browse, as the path from a ulta.com/shop/... URL — `/shop/makeup/face/foundation`, `/shop/hair/shampoo-conditioner/shampoo`, `/shop/skin-care/moisturizers`, `/shop/fragrance/womens-fragrance`. A full https://www.ulta.com/shop/... URL and a leading-slash-free form are both accepted. This is the precise mode: real total, real paging, live filter vocabulary with counts, and sorting. The authoritative list of every category Ulta publishes is its own sitemap, https://www.ulta.com/sitemap/shop.xml (275 entries at the time of writing) — a path that is not a real category returns NOT_FOUND rather than an empty grid, so a typo can never look like an out-of-stock category.","on_invalid":"reject","example":"/shop/makeup/face/foundation","aliases":["category_path","path","c"]},{"name":"page","type":"integer","required":false,"description":"Which page of the category to return (1-based). Ulta's own page size is 64 products and is not adjustable, so page 2 is products 65-128. Page until `meta.pagination.has_more` is false. Paging applies to category browsing (including keyword searches that resolved to a category); the type-ahead's top results are a single short page.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-384). Ulta serves 64 per upstream page, so asking for more than 64 fetches additional pages — each one is a further megabyte-class request against Ulta, so ask for what you will use. Values above the category's own total simply return the total.","on_invalid":"ignore","default":64,"minimum":1,"maximum":384,"aliases":["limit","max"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering, using Ulta's own sort vocabulary. Omit for Ulta's default, which IS `best_sellers` — passing `best_sellers` explicitly is measured to return the identical order, and this API tells you so in `meta.filters` rather than pretending it re-sorted anything. `price_asc`, `price_desc`, `new_arrivals` and `top_rated` all measurably change the result order.","on_invalid":"reject","allowed_values":[{"value":"best_sellers","label":"Ulta's best sellers — this is also the default order, so it changes nothing when applied on its own"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"new_arrivals","label":"Newest first"},{"value":"top_rated","label":"Highest customer rating first"}],"example":"price_asc","aliases":["order","sort_by"]},{"name":"brand","type":"string","required":false,"description":"Keep only products from one brand, using Ulta's own brand spelling. The brands that actually exist in the category you are browsing come back in `facets.filters` (group `BRAND`) with a product count each, so this never has to be a guess — take the value from there. Ulta matches the brand exactly, and the filtered `meta.pagination.total_results` is measured to equal the count Ulta declared for that brand.","on_invalid":"ignore","example":"MAC"},{"name":"min_rating","type":"integer","required":false,"description":"Keep only products rated at least this many stars (1-5), using Ulta's own rating filter. Verified to bite: on Foundation, `4` narrows 225 products to the 184 Ulta itself declares for that band.","on_invalid":"ignore","example":4,"minimum":1,"maximum":5,"aliases":["rating","rating_min"]},{"name":"filters","type":"object","required":false,"description":"Any other Ulta facet, as {facet parameter: value} taken VERBATIM from `facets.filters` in a previous response — e.g. {\"finish\": \"matte\"}, {\"price\": \"25-75\"}, {\"special offer\": \"sale\"}, {\"skin type\": \"dry\"}, {\"preference\": \"cruelty free\"}. The available facets are per-category (Foundation has Form/Finish/Coverage/Skin Type/SPF, Shampoo has different ones), which is why they are published as live data rather than a fixed enum. Each facet value in `facets.filters` carries the count Ulta declares for it, and applying it is measured to return exactly that count. A comma-separated `key=value` string is accepted too. Values you invent are passed to Ulta as-is and will simply match nothing.","on_invalid":"ignore","example":{"finish":"matte","price":"25-75"}},{"name":"sku_prices","type":"enum","required":false,"description":"Whether to fill `sku_price` on range cards. Ulta's grid tile prints only the price RANGE across a product's sizes/shades ('$12.00 - $58.00'), and the card's sku is often NOT the cheapest one (Redken All Soft card sku 2580410 is the 10.1 oz at $31 while the range starts at $12). With `auto` each range card's own sku is priced from the same module Ulta's swatch fires; `none` skips that. The same applies to `keyword_top_results` cards (Ulta's type-ahead publishes no price), where `auto` prices each card's own sku within the request's time budget.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Default. On every card whose tile shows a price RANGE, fetch the price of that card's own sku (one small upstream request per range card, capped at 96); on type-ahead top-result cards, which carry no price at all, fetch each card's own sku price the same way"},{"value":"none","label":"Do not fetch. Range cards keep sku_price null; single-price cards still carry it; type-ahead top-result cards stay unpriced"}],"default":"auto","example":"auto"}],"returns":"products[]{product_id, sku_id, url, name, brand, image, image_alt, list_price, list_price_max, sale_price, sale_price_max, price, currency, on_sale, discount_amount, rating, review_count, variant_label, badge, badge_tags[], promo_text, additional_offers_text, sponsored, limited_stock, price_is_range, sku_price, sku_price_source, in_stock} + (price is the LOWEST variant price when price_is_range; sku_price is the card sku's OWN price — read off the tile when it prints one price, fetched per sku when it prints a range (sku_price_source 'tile' / 'sku_pricing'); null only when not measured (sku_prices='none', the fan-out cap, or Ulta returned no price for that sku), counted in meta.coverage.sku_pricing (category/brand modes) or meta.coverage.top_result_pricing (type-ahead modes); in_stock is always null — Ulta's grid publishes no availability, use /price per sku) + category{path, url, title, result_count, page, page_size} (when a category answered) + suggestions[]{label, type, url, product_id, sku_id} (when you searched by keyword — what Ulta's own type-ahead matched, so the next call can browse a suggested category directly) + facets{sort[]{value,label}, filters[]{group_id, title, select, param, values[]{value,label,count,disabled}}} (category mode; the values are Ulta's own and each one is measured to narrow the result set to exactly the count it declares). meta.search_mode says which route answered — `category` (you browsed one), `keyword_to_category` (Ulta's type-ahead mapped your keyword to a category and it was browsed), `brand` (the keyword is a brand and its full priced ulta.com/brand/<slug> catalogue was browsed) or `keyword_top_results` (Ulta had no category or brand for the keyword, so these are its own top-result cards, each priced for its own sku) or `keyword_top_results_relaxed` (the full keyword matched nothing, so it was retried with trailing words dropped and only cards containing every kept word were returned — meta.relaxed_query{original_query, used_query, dropped_words, type_ahead_cards, kept_cards} says exactly what was dropped). meta.pagination{page, per_page, total_results, returned, has_more, next_page} and meta.filters{applied, ignored, notes} carry the counts and say exactly which parameters were sent to Ulta. HONEST LIMITS: a `keyword_top_results` card has rating and review_count NULL because Ulta's type-ahead does not publish them (the same product through `product_detail`, or through its category, has both); its price fields are that card sku's OWN price (price_is_range false, sku_price_source 'sku_pricing'), and a card whose price could not be fetched inside the time budget stays null and is counted in meta.coverage.top_result_pricing. Search cards never carry variants, description, ingredients or per-shade stock; `product_detail` is where those live. Ulta publishes no barcode/UPC and no shipping weight anywhere.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":2,"per":64,"min":3},"example_params":{"category":"/shop/makeup/face/foundation","max_results":20}},{"name":"price","description":"Re-check ONE variant's price and stock, cheaply. Give it the product_id and the sku_id you already hold and it returns the current price, the regular price, whether that variant is in stock, and nothing else — no description, images, ingredients, variants or reviews. Built for refreshing a catalogue you already have rather than discovering products: it reads the same small module Ulta's own shade swatch fires, so it costs a fraction of a full product_detail. Note that sku_id is REQUIRED, because Ulta stocks and prices every shade and size separately — a product can be on sale and buyable in one size while another is sold out, so there is no single product-level answer.","required_params":["product_id","sku_id"],"optional_params":["url"],"params":[{"name":"product_id","type":"string","required":true,"description":"Ulta's own product id, exactly as `search` returns it — e.g. `pimprod2057355`. Required here: the price module is scoped to a product and one of its skus.","on_invalid":"reject","example":"pimprod2057355","aliases":["id","pid"]},{"name":"sku_id","type":"string","required":true,"description":"Ulta's numeric sku for ONE variant (shade or size). REQUIRED, and not a formality: Ulta stocks and prices every shade and size separately, so a product can be on sale and buyable in one shade while another is sold out. There is no product-level price to fall back on. Use `product_detail` for the whole matrix.","on_invalid":"reject","example":"2651970","aliases":["sku","variant_id"]},{"name":"url","type":"string","required":false,"description":"A full ulta.com product URL — an alternative to `product_id`. The `?sku=` suffix is honoured if present.","on_invalid":"ignore","example":"https://www.ulta.com/p/double-wear-stay-in-place-longwear-matte-foundation-pimprod2057355?sku=2651970","aliases":["product_url"]}],"returns":"product_id, sku_id, variant_label, current_price, regular_price, currency, on_sale, in_stock. An unknown sku returns NOT_FOUND rather than the product's default variant — Ulta silently substitutes it, and that substitution is checked and rejected. current_price is what a shopper pays now and regular_price is the struck-through price; when Ulta prints only one price they are equal. in_stock is null (never false) when Ulta states nothing — silence is not an out-of-stock claim. regular_price_max / current_price_max appear only when Ulta prints a range for that sku.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"pimprod2057355","sku_id":"2651970"}},{"name":"product_detail","description":"Get one Ulta Beauty product in full, by Ulta's product id or by its ulta.com URL — brand, name, the marketing copy in both plain text and its original Markdown, the full ingredient list, how-to-use, size, category path, list and sale price, availability, star rating and question count, the complete image AND video gallery with dimensions, Ulta's merchandising highlights and active promotions, one row per shade/size variant carrying that variant's OWN sku, price, sale price, stock flag, swatch and product images, and the customer reviews inline with the rating histogram, the recommended ratio, the most helpful positive and negative review, and the reviewer-reported attribute rollups. One call, everything the product page shows.","required_params":[],"optional_params":["product_id","sku_id","url","reviews","variant_prices"],"params":[{"name":"product_id","type":"string","required":false,"description":"Ulta's own product id, exactly as `search` returns it — e.g. `pimprod2057355`. Ulta also uses `xlsImpprod…`, `mkt…`, `gwp…`, `VP…` and `fs…` prefixes; all are accepted verbatim. This alone is enough: the slug in an Ulta product URL is decorative and the id resolves the product on its own. Provide `product_id`, or a product `url`.","on_invalid":"reject","example":"pimprod2057355","aliases":["id","pid"]},{"name":"sku_id","type":"string","required":false,"description":"Optional variant selector — Ulta's numeric sku for ONE shade/size, exactly as search returns it. product_id is the primary key that resolves the product; the sku only decides which variant Ulta treats as selected (and therefore which shade's price, images and 'selected' flag appear at the top level). Every variant of the product is returned whichever sku you pass, and a sku Ulta does not recognise simply falls back to the default variant — so a search-returned sku is always accepted and never causes an error. Omit it for Ulta's default variant.","on_invalid":"reject","example":"2651970","aliases":["sku","variant_id"]},{"name":"url","type":"string","required":false,"description":"A full ulta.com product URL — an alternative to `product_id`. The `?sku=` suffix is honoured if present.","on_invalid":"ignore","example":"https://www.ulta.com/p/double-wear-stay-in-place-longwear-matte-foundation-pimprod2057355?sku=2651970","aliases":["product_url"]},{"name":"variant_prices","type":"enum","required":false,"description":"How hard to work for the per-variant price matrix. This knob exists because of a real Ulta behaviour: an ulta.com product page prices ONLY the shade or size it has selected — the other swatches carry no price at all — so every additional variant price is a separate (small) request. `auto`, the default, fetches all of them when the product has 12 or fewer variants, which covers every size/format set (a 4-size perfume really is $37/$110/$145/$180 and a 5-size moisturiser $20/$35/$42/$50/$66, so those must never be guessed). On a big shade set it samples 3 shades spread across the range; measured across four products with 26-71 shades, every sampled shade of a given product had the identical price, so if the 3 agree it stops there and tells you in `product.price_note` — and if they disagree it fetches the rest. `all` always fetches every variant (capped at 60). `none` skips it. A variant whose price was NOT measured is null and `price_measured` is false; the product price is never copied down onto it. `meta.coverage.variant_pricing` reports exactly what was fetched.","on_invalid":"reject","allowed_values":[{"value":"auto","label":"Default. Fetch every variant's own price when the product has 12 or fewer variants (this is every size/format set measured); on a larger set, sample 3 variants across the range and fetch the rest only if those 3 disagree"},{"value":"all","label":"Fetch every variant's own price, up to 60 variants. Costs one extra small upstream request per variant"},{"value":"none","label":"Do not fetch any variant prices. Only the variant Ulta's page has selected carries a price; the rest are null"}],"default":"auto","example":"auto","aliases":["per_variant_prices"]},{"name":"reviews","type":"integer","required":false,"description":"How many written reviews to inline with the product (0-25; 25 is the review host's own per-page ceiling, established by bisection — 100 is rejected by it). Set 0 to skip the review call entirely: the rating, the review count and the two most-helpful reviews still come from the product page itself, so you lose the review list, the rating histogram and the reviewer-reported attribute rollups, and save one upstream request.","on_invalid":"ignore","default":8,"example":8,"minimum":0,"maximum":25,"aliases":["review_limit","max_reviews"]}],"returns":"product{product_id, sku_id, url, canonical_url, name, brand, brand_url, category, category_path[]{label,url}, list_price, list_price_max, sale_price, sale_price_max, price, currency, on_sale, discount_amount, in_stock, availability, coming_soon, rating, review_count, question_count, summary, description, description_markdown, ingredients, usage, restrictions, prop65_warning, highlights[]{group,label,description}, size, size_label, variant_type, variant_label, variant_count_label, variant_count, variants[]{sku_id, product_id, name, description, list_price, list_price_max, sale_price, sale_price_max, price, price_measured, currency, on_sale, in_stock, unavailable, disabled, out_of_stock_label, selected, image, swatch_image, texture_image, url, tags[]}, price_note, images[]{url, media_type, alt, name, video_url, width, height, format}, image, image_count, video_count, promotions[], subscription_eligible, seller, meta_title, meta_description, reviews{source, page_id, average_rating, rating_count, review_count, native_review_count, syndicated_review_count, recommended_ratio, rating_histogram{1..5}, total_available, returned, most_helpful_positive, most_helpful_negative, attributes[]{key,name,type,values[]{label,count}}, items[]{review_id, rating, headline, comment, nickname, location, created_at, updated_at, helpful_votes, not_helpful_votes, verified_buyer, staff_reviewer, media[]}}}. meta.coverage counts how many of THIS product's variants carry a price and a stock flag, so you can see the completeness of the rows you were given instead of trusting an average. FIELD NOTES: prices come in pairs — `list_price` and `list_price_max` are equal when the product has one price and differ when its shades do (Ulta prints '$38.50 - $55.00' on 46% of catalogue tiles). An ulta.com product page prices ONLY the variant it has selected, so the other variants' prices are fetched separately — see `variant_prices`, `variants[].price_measured` and `product.price_note`. A variant price is always that variant's own and is NEVER copied down from the product. `in_stock` on a variant is a BOOLEAN because Ulta publishes no per-variant quantity anywhere — null means Ulta said nothing, never zero. `rating_count` counts every rating Ulta shows, `native_review_count` how many were written on ulta.com and `syndicated_review_count` how many came from the brand's own site. HONEST LIMITS — WHAT ULTA DOES NOT PUBLISH, so you can plan around it: no barcode, UPC or EAN; no shipping weight and no package dimensions (`size` is the product's own volume, e.g. '1.0 oz', not a shipping weight); no per-store or per-variant stock counts; and no separate specification table — what a spec sheet would hold is in `description`, `ingredients`, `usage`, `size` and `highlights`.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"pimprod2057355","reviews":5,"variant_prices":"none"}}]},{"name":"unieuro","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Unieuro API — search Italy's largest electronics retailer and read products with EUR prices, the EU Omnibus prior price, suggested price, club price, online stock, delivery windows, specs, reviews, store pickup and the store directory","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/unieuro/v1","spec_available":true,"actions":[{"name":"search","description":"Search unieuro.it by keyword with the site's own brand, price (EUR), in-stock, promotion, free-delivery and rating filters and its price sorts. Each row: code, EAN, brand, title, URL, image, the price you pay now, the manufacturer's suggested price, the EU Omnibus prior price ('Prezzo precedente') when shown, the struck-through price, the Unieuro Club price, promotion, online stock status, home-delivery and store-pickup windows with costs, rating and category path. The source serves the first 1000 hits of a query.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search words (Italian works best).","on_invalid":"reject","example":"lavatrice","aliases":["q","keyword","keywords","term"]},{"name":"category","type":"string","required":false,"description":"Optional: keep only this category (a code from the categories action or a row's category_code, e.g. C2102).","on_invalid":"reject","example":"C2102","aliases":["category_code"]},{"name":"brand","type":"string","required":false,"description":"Brand exactly as the site lists it (case-insensitive: Samsung, Apple, Smeg, LG). An unknown brand gives an empty result (the source does not fall back to everything).","on_invalid":"reject","example":"Samsung","aliases":["manufacturer"]},{"name":"min_price","type":"number","required":false,"description":"Lowest current price in EUR (applied to the price you pay now, VAT included).","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest current price in EUR (applied to the price you pay now, VAT included).","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_max"]},{"name":"in_stock","type":"boolean","required":false,"description":"Only products the site marks available to buy online now ('Disponibili').","on_invalid":"reject","default":false,"aliases":["only_in_stock","available"]},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products in a running promotion ('In promozione').","on_invalid":"reject","default":false,"aliases":["promo","discounted"]},{"name":"free_delivery","type":"boolean","required":false,"description":"Only products with free home delivery.","on_invalid":"reject","default":false},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose Unieuro customer rating is at least this many stars (1-5).","on_invalid":"reject","example":4,"minimum":1,"maximum":5},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the orders the site itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (the site's default order)"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Results page, 1-based. The source serves only the first 1000 hits of any query (page × limit ≤ 1000); narrow with filters to reach further.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["page_size","per_page","size"]}],"returns":"results[]{code, url_code, ean, manufacturer_part_number, title, brand, url, image, currency (EUR), price (pay now), recommended_retail_price (manufacturer's suggested price, 'Prezzo consigliato'), omnibus_prior_price (EU Omnibus 'Prezzo precedente': lowest price of the 30 days before the promotion; null when not shown), omnibus_applies, crossed_out_price, discount_percent, club_price (Unieuro Club card price, not the public price), club_only_promotion, installment_amount, on_promotion, promotion_title, promotion_days_left, in_stock, stock_status (inStock|lowStock|outOfStock), free_delivery, home_delivery{from, to, cost, cost_text}, store_pickup{from, to, cost, cost_text}, rating, category, category_code, category_path[]{code, name}, energy_class, new_product, preorder, key_features{}} + total, pages, page, limit, has_more, page_capped, sort, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"lavatrice","limit":24}},{"name":"category","description":"List one unieuro.it category by its code (C2102 = iPhone, C21 = Smartphones and phones) or its page URL, optionally narrowed by words, with the same filters and sorts as search.","required_params":[],"optional_params":[],"params":[{"name":"category","type":"string","required":false,"description":"Category code from the categories action or a row's category_code / category_path[].code. One of category or url.","on_invalid":"reject","example":"C2102","aliases":["category_code","code"]},{"name":"url","type":"string","required":false,"description":"A unieuro.it category page URL (resolved through the category tree; costs one extra request).","on_invalid":"reject","example":"https://www.unieuro.it/online/Telefonia-e-Smartphone/Smartphone-e-Cellulari/iPhone","aliases":["category_url","link"]},{"name":"query","type":"string","required":false,"description":"Optional words to narrow the category.","on_invalid":"reject","example":"128GB","aliases":["q","keyword"]},{"name":"brand","type":"string","required":false,"description":"Brand exactly as the site lists it (case-insensitive: Samsung, Apple, Smeg, LG). An unknown brand gives an empty result (the source does not fall back to everything).","on_invalid":"reject","example":"Samsung","aliases":["manufacturer"]},{"name":"min_price","type":"number","required":false,"description":"Lowest current price in EUR (applied to the price you pay now, VAT included).","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest current price in EUR (applied to the price you pay now, VAT included).","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_max"]},{"name":"in_stock","type":"boolean","required":false,"description":"Only products the site marks available to buy online now ('Disponibili').","on_invalid":"reject","default":false,"aliases":["only_in_stock","available"]},{"name":"on_promotion","type":"boolean","required":false,"description":"Only products in a running promotion ('In promozione').","on_invalid":"reject","default":false,"aliases":["promo","discounted"]},{"name":"free_delivery","type":"boolean","required":false,"description":"Only products with free home delivery.","on_invalid":"reject","default":false},{"name":"min_rating","type":"integer","required":false,"description":"Only products whose Unieuro customer rating is at least this many stars (1-5).","on_invalid":"reject","example":4,"minimum":1,"maximum":5},{"name":"sort","type":"enum","required":false,"description":"Result order. Only the orders the site itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (the site's default order)"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Results page, 1-based. The source serves only the first 1000 hits of any query (page × limit ≤ 1000); narrow with filters to reach further.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Products per page, 1-100.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["page_size","per_page","size"]}],"returns":"results[]{code, url_code, ean, manufacturer_part_number, title, brand, url, image, currency (EUR), price (pay now), recommended_retail_price (manufacturer's suggested price, 'Prezzo consigliato'), omnibus_prior_price (EU Omnibus 'Prezzo precedente': lowest price of the 30 days before the promotion; null when not shown), omnibus_applies, crossed_out_price, discount_percent, club_price (Unieuro Club card price, not the public price), club_only_promotion, installment_amount, on_promotion, promotion_title, promotion_days_left, in_stock, stock_status (inStock|lowStock|outOfStock), free_delivery, home_delivery{from, to, cost, cost_text}, store_pickup{from, to, cost, cost_text}, rating, category, category_code, category_path[]{code, name}, energy_class, new_product, preorder, key_features{}} + total, pages, page, limit, has_more, page_capped, sort, category{code, level}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"C2102","sort":"price_asc","limit":24}},{"name":"product","description":"Full product record: price you pay now, suggested price, EU Omnibus prior price with its label, struck-through price with the site's note, discount, promotion and its end date, price validity dates, live online stock level and status, home-delivery and store-pickup windows and costs, instalment amount, loyalty points, rating, description, specifications (grouped, with units), images, videos, category path and the optional services (installation, warranty, WEEE pickup) with prices.","required_params":[],"optional_params":[],"params":[{"name":"code","type":"string","required":false,"description":"Unieuro product code exactly as a search row's `code` returns it (e.g. APLIPHONE15128; a few codes contain + or /), or its `url_code`, or pass `url`. For reviews use `code`: the review provider knows only that form.","on_invalid":"reject","example":"APLIPHONE15128","aliases":["sku","product_code","id"]},{"name":"url","type":"string","required":false,"description":"A unieuro.it product page URL (…-pid<CODE>).","on_invalid":"reject","example":"https://www.unieuro.it/online/iPhone/iPhone-15-128GB-Nero-pidAPLIPHONE15128","aliases":["product_url","link"]}],"returns":"product{code, url_code, ean, title, name, brand, url, currency, price, recommended_retail_price, original_price, original_price_label, omnibus_prior_price, omnibus_prior_price_label, omnibus_applies, crossed_out_price, crossed_out_price_note, discount_amount, discount_percent, is_discounted, club_only_promotion, installment_amount, loyalty_points, promotion{name, title, ends}, price_valid_from, price_valid_to, in_stock, stock_status, stock_level, purchasable, home_delivery{cost, from, to}, store_pickup{cost, from, to}, free_shipping, only_home_delivery, only_store_pickup, preorder, new_product, rating, summary, description, specifications[]{group, name, value, unit}, images[], videos[], category{code, name}, category_path[]{code, name, url}, services[]{code, name, price, mandatory, warranty}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"code":"APLIPHONE15128"}},{"name":"reviews","description":"Customer reviews of one product as published by the site's review provider, newest first, optionally one star rating or one language. Includes reviews the provider syndicates from other retailers for the same product — each row says which retailer it came from; locale=it_IT keeps the Italian reviews.","required_params":[],"optional_params":[],"params":[{"name":"code","type":"string","required":false,"description":"Unieuro product code exactly as a search row's `code` returns it (e.g. APLIPHONE15128; a few codes contain + or /), or its `url_code`, or pass `url`. For reviews use `code`: the review provider knows only that form.","on_invalid":"reject","example":"APLIPHONE15128","aliases":["sku","product_code","id"]},{"name":"url","type":"string","required":false,"description":"A unieuro.it product page URL (…-pid<CODE>).","on_invalid":"reject","example":"https://www.unieuro.it/online/iPhone/iPhone-15-128GB-Nero-pidAPLIPHONE15128","aliases":["product_url","link"]},{"name":"rating","type":"integer","required":false,"description":"Only reviews with exactly this many stars (1-5).","on_invalid":"reject","example":5,"minimum":1,"maximum":5,"aliases":["stars"]},{"name":"locale","type":"string","required":false,"description":"Only reviews written in this locale (it_IT, en_GB, el_GR …).","on_invalid":"reject","example":"it_IT","value_pattern":"[a-z]{2}_[A-Z]{2}"},{"name":"page","type":"integer","required":false,"description":"Reviews page, 1-based.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["page_size","per_page"]}],"returns":"reviews[]{review_id, rating, body, author (display name), date, locale, source_merchant, syndicated, product_title_at_source, attribute_ratings{}, helpful_votes, verified, purchase_date, url} + total, pages, page, limit, has_more, own_reviews_on_page","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"code":"APLIPHONE15128","limit":10}},{"name":"store_availability","description":"Can this product be collected at this store, and when: the store-pickup answer and date window the product page shows after choosing a store. One product, one store per call.","required_params":[],"optional_params":[],"params":[{"name":"code","type":"string","required":false,"description":"Unieuro product code exactly as a search row's `code` returns it (e.g. APLIPHONE15128; a few codes contain + or /), or its `url_code`, or pass `url`. For reviews use `code`: the review provider knows only that form.","on_invalid":"reject","example":"APLIPHONE15128","aliases":["sku","product_code","id"]},{"name":"url","type":"string","required":false,"description":"A unieuro.it product page URL (…-pid<CODE>).","on_invalid":"reject","example":"https://www.unieuro.it/online/iPhone/iPhone-15-128GB-Nero-pidAPLIPHONE15128","aliases":["product_url","link"]},{"name":"store_id","type":"string","required":true,"description":"The store's `store_id` from the stores action (13 digits). Not the short store_code.","on_invalid":"reject","example":"8796095186936","value_pattern":"\\d{10,16}","aliases":["store"]}],"returns":"code, store_id, available, pickup_from, pickup_to, store_verified (false: the source answers 'not available' to an id it does not know as well)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"code":"APLIPHONE15128","store_id":"8796095186936"}},{"name":"stores","description":"Unieuro's store directory: id, code, name, address, city, province, region, coordinates, phone, opening hours, special openings and in-store services. With latitude/longitude it returns the stores within radius_km sorted by distance; without, the whole network, optionally narrowed by city, province or region.","required_params":[],"optional_params":[],"params":[{"name":"latitude","type":"number","required":false,"description":"Centre point latitude (with longitude).","on_invalid":"reject","example":45.46,"minimum":-90,"maximum":90,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Centre point longitude (with latitude).","on_invalid":"reject","example":9.19,"minimum":-180,"maximum":180,"aliases":["lon","lng"]},{"name":"radius_km","type":"integer","required":false,"description":"Search radius around the point, km.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":1500,"aliases":["range"]},{"name":"city","type":"string","required":false,"description":"Keep stores whose city contains this text (accent/case-insensitive).","on_invalid":"reject","example":"Milano"},{"name":"province","type":"string","required":false,"description":"Keep stores in this province (two-letter sigla: MI, RM, TO).","on_invalid":"reject","example":"MI","aliases":["district"]},{"name":"region","type":"string","required":false,"description":"Keep stores whose region contains this text.","on_invalid":"reject","example":"Lombardia"}],"returns":"stores[]{store_id, store_code, name, address, address_extra, postal_code, city, province, region, phone, email, latitude, longitude, distance_km, opening_hours[]{day, hours}, special_openings, services[], pickup_point, url} + total, total_unfiltered","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"latitude":45.46,"longitude":9.19,"radius_km":20}},{"name":"categories","description":"The full category tree, flattened: code (feed it to category / search), name, parent, level, readable path and page URL. Optional text match.","required_params":[],"optional_params":[],"params":[{"name":"match","type":"string","required":false,"description":"Keep categories whose name or path contains this text.","on_invalid":"reject","example":"lavatric","aliases":["q","query"]}],"returns":"categories[]{category_code, name, parent_code, level, path, url} + total, total_unfiltered","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"match":"lavatric"}}]},{"name":"upwork","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"Upwork job-board API — live freelance jobs from upwork.com in clean JSON: title, full brief, fixed or hourly budget, required skills, experience level, project length, posting timestamp, proposal count, and the client's country, spend, hire count and rating. Search with Upwork's own filters or pull one job in full. No login required.","version":"1.2.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/upwork/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Upwork jobs by keyword and Upwork's own filters — category and subcategory, contract type, experience level, project length, weekly workload, client location, how many people the client has hired, client timezone — plus a posted-within-N-hours cut. Returns title, full description, budget, skills, posting timestamp and coarse client signals for each job, with the total match count.","required_params":[],"optional_params":["query","limit","offset","category","subcategory","job_type","experience_level","duration","workload","client_location","client_hires","timezone","skill_uid","sort","posted_within_hours"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword to search job titles and descriptions. Omit it to browse the whole open board (109k+ jobs) newest-first.","on_invalid":"ignore","example":"python scraping","aliases":["q","keyword","search"]},{"name":"limit","type":"integer","required":false,"description":"How many jobs to return (1–200). Upwork serves 50 per page, so anything over 50 costs extra page fetches.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":200,"aliases":["max_results","count"]},{"name":"offset","type":"integer","required":false,"description":"Skip this many results before returning `limit` (0–5000).","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":5000,"aliases":["skip"]},{"name":"category","type":"string","required":false,"description":"Only jobs in this Upwork category: its name ('Web, Mobile & Software Dev', 'Design & Creative') or its uid. Comma-separated for several (either matches). Call `filters` for all names and uids.","on_invalid":"ignore","example":"Web, Mobile & Software Dev","aliases":["category_uid","category2_uid"]},{"name":"subcategory","type":"string","required":false,"description":"Only jobs in this Upwork subcategory: its name or uid. Comma-separated for several. Call `filters` for the list (each category's `subcategories`).","on_invalid":"ignore","example":"Web Development","aliases":["subcategory_uid","subcategory2_uid"]},{"name":"job_type","type":"string","required":false,"description":"Contract type. Accepts both, comma-separated.","on_invalid":"ignore","allowed_values":[{"value":"hourly","label":"hourly"},{"value":"fixed","label":"fixed"}],"example":"hourly","aliases":["type"]},{"name":"experience_level","type":"string","required":false,"description":"Experience level the buyer asked for. Comma-separated for several.","on_invalid":"ignore","allowed_values":[{"value":"entry","label":"entry"},{"value":"intermediate","label":"intermediate"},{"value":"expert","label":"expert"}],"example":"expert","aliases":["level","contractor_tier"]},{"name":"duration","type":"string","required":false,"description":"Project length: week = less than a month, month = 1–3 months, semester = 3–6 months, ongoing = more than 6 months. The spelled-out labels ('1_to_3_months', 'more_than_6_months') are accepted too.","on_invalid":"ignore","allowed_values":[{"value":"week","label":"Less than 1 month"},{"value":"month","label":"1 to 3 months"},{"value":"semester","label":"3 to 6 months"},{"value":"ongoing","label":"More than 6 months"}],"example":"month","aliases":["duration_v3"]},{"name":"workload","type":"string","required":false,"description":"Hours per week: as_needed (under 30) or full_time (30+).","on_invalid":"ignore","allowed_values":[{"value":"as_needed","label":"Less than 30 hrs/week"},{"value":"full_time","label":"30+ hrs/week"}],"example":"full_time"},{"name":"client_location","type":"string","required":false,"description":"Where the CLIENT is: a country ('Germany'), a region ('Europe') or a sub-region ('Northern Europe'). Comma-separated for several. Call `filters` for the exact 263 accepted values.","on_invalid":"ignore","example":"United Kingdom","aliases":["location","country"]},{"name":"client_hires","type":"string","required":false,"description":"How many freelancers this client has ever hired: 0 (never hired), 1-9, or 10- (ten or more).","on_invalid":"ignore","allowed_values":[{"value":"0","label":"No hires yet"},{"value":"1-9","label":"1 to 9 hires"},{"value":"10-","label":"10 or more hires"}],"example":"10-"},{"name":"timezone","type":"string","required":false,"description":"Client timezone, as an IANA name. Call `filters` for the 72 values Upwork accepts.","on_invalid":"ignore","example":"America/Los_Angeles"},{"name":"skill_uid","type":"string","required":false,"description":"Require a specific Upwork SKILL, by its numeric uid. Take the uid from any job's `skills_detail[].uid` in a previous response — Upwork publishes no skill directory to a logged-out visitor, so that is where the values come from. Comma-separated for several.","on_invalid":"ignore","example":"996364628025274386","aliases":["ontology_skill_uid","skill"]},{"name":"sort","type":"string","required":false,"description":"Result order. `newest` sorts by posting time.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"newest","label":"newest"}],"default":"relevance","example":"newest","aliases":["sort_by","order"]},{"name":"posted_within_hours","type":"integer","required":false,"description":"Only jobs posted in the last N hours. Upwork gives a logged-out visitor no posted-date filter, so this one is applied by us: the search is forced to newest-first and paging stops at the first job older than the window. `filtered_out` in the response says how many rows the cut removed.","on_invalid":"ignore","example":24,"minimum":1,"maximum":2160,"aliases":["posted_within","max_age_hours"]}],"returns":"jobs[]{id, cipher_id, url, title, description, job_type, budget{type,amount|min|max,currency,weekly}, experience_level, duration_label, workload, skills[], skills_detail[]{name,uid}, posted_at, posted_at_epoch, published_at, renewed_at, freelancers_to_hire, is_premium, is_enterprise, client{payment_verified,country,total_spent,total_reviews,rating}}, total_count, returned, offset, filtered_out","cacheable":true,"cache_ttl_seconds":180,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"python","limit":10}},{"name":"job","description":"Everything Upwork publishes about one job: the full brief, budget (fixed amount or hourly range), category and occupation, skills with mandatory/nice-to-have weighting, experience level, project length in weeks, freelancer requirements (countries, languages, minimum job-success score and hours), how many people have applied, been interviewed and been hired, and the client's history — country, city, timezone, total spend, jobs posted, hires, hours billed, review count, rating and member-since date. Plus Upwork's own list of similar jobs. Note that Upwork withholds a minority of listed jobs from anyone who is not signed in; those return NOT_FOUND. `search` already carries the full brief, budget, skills and posting time for every job, so this endpoint is for the ones you shortlist.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"The job: its cipher id ('~02…' as `search` returns in `cipher_id`), a full Upwork job URL, or the bare numeric id.","on_invalid":"ignore","example":"~021967158918616440889","aliases":["job_id","cipher_id","url"]}],"returns":"job{...all search fields..., category, category_group, occupation, skills_detail[]{name,group,relevance}, duration_weeks, budget_hidden, positions_to_hire, is_contract_to_hire, proposals{total_applicants,total_hired,interviewing,invitations_sent,last_client_activity}, requirements{countries,languages,min_job_success_score,min_hours_worked,rising_talent_only}, client{payment_verified,country,city,timezone,total_spent (0 when the client has no contracts yet),total_hires,hours_billed,reviews,rating,member_since,industry,company_size; total_jobs_posted and open_jobs are always null: Upwork shows them only to signed-in users}, similar_jobs[]}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"~022103052334483241712"}},{"name":"filters","description":"The exact filter vocabulary Upwork's own job search ships — every accepted client location (263 countries, regions and sub-regions), timezone (72), contract type, experience level, project length, workload and client-hire band. Read straight off the live search page, so it cannot drift from what `search` accepts.","required_params":[],"optional_params":[],"params":[],"returns":"filters{category[]{uid,label,subcategories[]{uid,label}}, client_location[]{value,label,type,region}, timezone[], job_type[], experience_level[], duration[], workload[], client_hires[], sort[]}, source","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"url-resolver","category":{"id":"utilities","title":"Utilities & AI"},"title":"URL Resolver API — follow redirect chains, strip tracking parameters, detect affiliate networks and identify marketplace products","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/url-resolver/v1","spec_available":true,"actions":[{"name":"resolve","description":"Follow the redirect chain to the final URL (hop-by-hop, every status observable).","required_params":["url"],"optional_params":["max_hops"],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL to resolve — short links (bit.ly, amzn.to, t.co), affiliate links, ad redirect URLs, or regular canonical URLs. Only http/https is accepted.","on_invalid":"reject","example":"https://bit.ly/3xYexample"},{"name":"max_hops","type":"integer","required":false,"description":"Maximum redirects to follow (1–10).","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":10}],"returns":"final_url, redirect_chain[] (url/status/host/resolved_ips/location), status_codes[], final_domain, hop_count, content_type, is_short_link, redirect_loop","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"http://github.com"}},{"name":"normalize","description":"Resolve then strip tracking params (utm_*/fbclid/gclid…) → canonical URL.","required_params":["url"],"optional_params":["follow"],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL to resolve — short links (bit.ly, amzn.to, t.co), affiliate links, ad redirect URLs, or regular canonical URLs. Only http/https is accepted.","on_invalid":"reject","example":"https://bit.ly/3xYexample"},{"name":"follow","type":"boolean","required":false,"description":"Follow redirects to the final URL before analysing (default true). false = analyse the URL exactly as given (no network).","on_invalid":"reject","default":true,"example":true}],"returns":"canonical_url, cleaned_url, stripped_tracking_params[], detected_platform, page_title","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.example.com/?utm_source=a&fbclid=b&id=42","follow":false}},{"name":"detect_affiliate","description":"Detect the affiliate network/params/merchant across the whole redirect chain, incl. first-party brand programs (influencer/seller deeplinks).","required_params":["url"],"optional_params":["follow"],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL to resolve — short links (bit.ly, amzn.to, t.co), affiliate links, ad redirect URLs, or regular canonical URLs. Only http/https is accepted.","on_invalid":"reject","example":"https://bit.ly/3xYexample"},{"name":"follow","type":"boolean","required":false,"description":"Follow redirects to the final URL before analysing (default true). false = analyse the URL exactly as given (no network).","on_invalid":"reject","default":true,"example":true}],"returns":"is_affiliate, affiliate_type (network|first_party), affiliate_network, affiliate_params, merchant_hint, all_networks[], first_party_signals[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.amazon.com/dp/B08N5WRWNW?tag=myaff-20","follow":false}},{"name":"product_hint","description":"Identify marketplace + product-id + the ReefAPI engine that can fetch the product.","required_params":["url"],"optional_params":["follow"],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL to resolve — short links (bit.ly, amzn.to, t.co), affiliate links, ad redirect URLs, or regular canonical URLs. Only http/https is accepted.","on_invalid":"reject","example":"https://bit.ly/3xYexample"},{"name":"follow","type":"boolean","required":false,"description":"Follow redirects to the final URL before analysing (default true). false = analyse the URL exactly as given (no network).","on_invalid":"reject","default":true,"example":true}],"returns":"final_domain, marketplace, possible_product_id, engine_hint, is_product_url","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.amazon.com/dp/B08N5WRWNW","follow":false}},{"name":"preview","description":"Link unfurl: OpenGraph + Twitter-card title/description/image/favicon (Slack/Discord style).","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL to resolve — short links (bit.ly, amzn.to, t.co), affiliate links, ad redirect URLs, or regular canonical URLs. Only http/https is accepted.","on_invalid":"reject","example":"https://bit.ly/3xYexample"},{"name":"max_hops","type":"integer","required":false,"description":"Maximum redirects to follow (1–10).","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":10}],"returns":"title, description, image, site_name, type, card, favicon, has_opengraph","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.example.com/"}},{"name":"safety","description":"Heuristic URL-risk flags (ip-host, non-https, punycode, userinfo, high-abuse TLD, long/multi-shortener chain, cross-domain) + risk level/score.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL to resolve — short links (bit.ly, amzn.to, t.co), affiliate links, ad redirect URLs, or regular canonical URLs. Only http/https is accepted.","on_invalid":"reject","example":"https://bit.ly/3xYexample"},{"name":"max_hops","type":"integer","required":false,"description":"Maximum redirects to follow (1–10).","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":10}],"returns":"risk_level, risk_score, flags[], domain_changed, final_is_https, threat_intel","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.amazon.com/dp/B08N5WRWNW"}},{"name":"full","description":"One call: resolve + normalize + detect_affiliate + product_hint + preview + safety.","required_params":["url"],"optional_params":["max_hops"],"params":[{"name":"url","type":"string","required":true,"description":"Any http(s) URL to resolve — short links (bit.ly, amzn.to, t.co), affiliate links, ad redirect URLs, or regular canonical URLs. Only http/https is accepted.","on_invalid":"reject","example":"https://bit.ly/3xYexample"},{"name":"max_hops","type":"integer","required":false,"description":"Maximum redirects to follow (1–10).","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":10}],"returns":"resolve + canonical + affiliate + product + preview + safety blocks, merged","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.amazon.com/dp/B08N5WRWNW?tag=aff-20&utm_source=x"}},{"name":"batch","description":"Resolve up to 50 URLs concurrently in one call — each URL is validated and resolved independently.","required_params":["urls"],"optional_params":[],"params":[{"name":"urls","type":"array","required":true,"description":"List of http(s) URLs to resolve in one call (max 50); each URL is validated and resolved independently.","on_invalid":"reject","example":["https://bit.ly/a","https://amzn.to/b"]}],"returns":"results[] (one resolve block per input, with ok/error), count, ok_count","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"urls":["http://github.com","https://www.example.com/?utm_source=z"]}}]},{"name":"username-osint","category":{"id":"social","title":"Social Media"},"title":"Username Search API — find every public account for a username across 3000+ sites: check a username (or Steam ID/URL) and get each platform where it exists plus the public profile link (GitHub, Instagram, TikTok, Reddit, Discord, Telegram, Twitch, YouTube and thousands more)","version":"2.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/username-osint/v1","spec_available":true,"actions":[{"name":"username","description":"Find every public account for a username across 3000+ sites (powered by the Maigret OSINT engine) → for each site where the account exists: the platform + the public profile link. Also accepts a Steam numeric ID or profile URL (steamcommunity.com/profiles/...). Scan the top-N most-popular sites (default 300), filter by tag (gaming/social/coding/…), or deep-scan to extract linked identifiers.","required_params":["username"],"optional_params":["top","tags","sites","deep"],"params":[{"name":"username","type":"string","required":true,"description":"The public username/handle to check across the platform stable-set. A public handle, NOT an email or phone. Letters, digits, . _ - only.","on_invalid":"reject","example":"torvalds","aliases":["user","handle","u"]},{"name":"top","type":"integer","required":false,"description":"How many of the most-popular sites to scan (20-500). More sites = broader coverage but slower. Default 300 (~15s).","on_invalid":"ignore","default":300,"example":300},{"name":"tags","type":"array","required":false,"description":"Restrict the scan to Maigret site tags (e.g. gaming, social, coding, photo, music, forum, finance, us, ru). Comma-separated. Default = all.","on_invalid":"ignore","example":"gaming,social","aliases":["categories"]},{"name":"sites","type":"array","required":false,"description":"Restrict the scan to these exact platform names (case-insensitive). Default = the full stable-set for the input type. Unknown names ignored.","on_invalid":"ignore","example":"GitHub,Telegram","aliases":["platforms"]},{"name":"deep","type":"boolean","required":false,"description":"Parse found profiles to extract linked identifiers (other usernames, ids, names) for pivoting. Slower. Default false.","on_invalid":"ignore","default":false,"example":false}],"returns":"input_type, query, results[]{platform, category, status, profile_url?}, summary{platforms_checked, platforms_found, found_platforms[], category_distribution, status_counts}, sites_scanned, linked_identifiers?","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"username":"torvalds","top":30}}]},{"name":"uzum","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Uzum Market API scraper — uzum.uz, Uzbekistan's largest marketplace: keyword search, category and seller listings, full product cards (every SKU's price, struck price, Uzum Nasiya instalment, stock and delivery), customer reviews with seller replies, and seller profiles. Prices in UZS.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/uzum/v1","spec_available":true,"actions":[{"name":"search","description":"Search Uzum Market by keyword, optionally inside a category, one seller's shop or a price range, with the site's sorts. Needs query or shop_id (shop_id alone lists a seller's catalogue).","required_params":[],"optional_params":["query","category_id","shop_id","min_price","max_price","sort","language","page","limit"],"params":[{"name":"query","type":"string","required":false,"description":"Search words in Russian, Uzbek or Latin (brand names work: 'iphone 15'). Required unless shop_id is given.","on_invalid":"reject","example":"кроссовки","aliases":["q","keyword","text"]},{"name":"category_id","type":"integer","required":false,"description":"Optional Uzum category id (the number at the end of a uzum.uz/ru/category/… URL, category.id of a product, or the categories action), e.g. 12690 = smartphones.","on_invalid":"reject","example":12690,"aliases":["category"]},{"name":"shop_id","type":"integer","required":false,"description":"Optional: only this seller's products (seller.shop_id from product or seller). An unknown id returns an empty list.","on_invalid":"reject","example":47944,"aliases":["seller_id"]},{"name":"min_price","type":"integer","required":false,"description":"Optional lower price bound in UZS (whole sum), inclusive. The source filters on the product's price; a row shows one colour group, so a few rows can sit just outside the range.","on_invalid":"reject","example":1000000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Optional upper price bound in UZS (whole sum), inclusive (same product-level caveat as min_price).","on_invalid":"reject","example":5000000,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Order of results, the site's own sorts. The site sorts by its own product price, while a row shows one colour group's price, so price sorts are approximate per row.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the site's default order"},{"value":"orders","label":"most ordered first"},{"value":"rating","label":"best rated first"},{"value":"newest","label":"newest first"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"dearest first"}],"default":"relevance","example":"orders"},{"name":"language","type":"enum","required":false,"description":"Language of titles and texts. It also changes search matching and ranking.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"uz","label":"Uzbek (Latin)"}],"default":"ru","example":"ru","aliases":["lang"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). The source stops near result 10 000; a page starting past result 9 900 is refused.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (the source's own maximum).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":100}],"returns":"results[{position, product_id, sku_group_id (one colour/variant group of the product; a product can fill several rows), default_sku_id, card_type, title, url, image, images[], price_uzs (this group's selling price, whole sum), old_price_uzs (struck price, only when higher), discount_percent (computed), installment_monthly_uzs (Uzum Nasiya monthly payment, not the price), installment_text, currency, rating, review_count, single_sku, is_adult, delivery_date_text, stock_type (FBO = Uzum warehouse, FBS = seller's warehouse, DBS = seller delivers), is_sponsored (paid placement), badges[]}], count, page, limit, total_results (the source's own figure), has_more, last_page, query, corrected_query, applied_filters, sort_applied, language","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"кроссовки","limit":20}},{"name":"category","description":"List one Uzum Market category with the site's sorts, an optional keyword, seller and price range.","required_params":["category_id"],"optional_params":["query","shop_id","min_price","max_price","sort","language","page","limit"],"params":[{"name":"category_id","type":"integer","required":true,"description":"Uzum category id (the number at the end of a uzum.uz/ru/category/… URL, category.id of a product, or the categories action), e.g. 12690 = smartphones.","on_invalid":"reject","example":12690,"aliases":["category"]},{"name":"query","type":"string","required":false,"description":"Optional keyword inside the category.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","text"]},{"name":"shop_id","type":"integer","required":false,"description":"Optional: only this seller's products (seller.shop_id from product or seller). An unknown id returns an empty list.","on_invalid":"reject","example":47944,"aliases":["seller_id"]},{"name":"min_price","type":"integer","required":false,"description":"Optional lower price bound in UZS (whole sum), inclusive. The source filters on the product's price; a row shows one colour group, so a few rows can sit just outside the range.","on_invalid":"reject","example":1000000,"minimum":0},{"name":"max_price","type":"integer","required":false,"description":"Optional upper price bound in UZS (whole sum), inclusive (same product-level caveat as min_price).","on_invalid":"reject","example":5000000,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Order of results, the site's own sorts. The site sorts by its own product price, while a row shows one colour group's price, so price sorts are approximate per row.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the site's default order"},{"value":"orders","label":"most ordered first"},{"value":"rating","label":"best rated first"},{"value":"newest","label":"newest first"},{"value":"price_asc","label":"cheapest first"},{"value":"price_desc","label":"dearest first"}],"default":"relevance","example":"orders"},{"name":"language","type":"enum","required":false,"description":"Language of titles and texts. It also changes search matching and ranking.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"uz","label":"Uzbek (Latin)"}],"default":"ru","example":"ru","aliases":["lang"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). The source stops near result 10 000; a page starting past result 9 900 is refused.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (the source's own maximum).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":100}],"returns":"results[{position, product_id, sku_group_id (one colour/variant group of the product; a product can fill several rows), default_sku_id, card_type, title, url, image, images[], price_uzs (this group's selling price, whole sum), old_price_uzs (struck price, only when higher), discount_percent (computed), installment_monthly_uzs (Uzum Nasiya monthly payment, not the price), installment_text, currency, rating, review_count, single_sku, is_adult, delivery_date_text, stock_type (FBO = Uzum warehouse, FBS = seller's warehouse, DBS = seller delivers), is_sponsored (paid placement), badges[]}], count, page, limit, total_results (the source's own figure), has_more, last_page, query, corrected_query, applied_filters, sort_applied, language, category{id, name, parent{id, name}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":12690,"sort":"orders","limit":20}},{"name":"product","description":"One full Uzum Market product card by product id or URL: title, brand, description, highlights, properties, category path, every SKU with its options, price, struck price, Uzum Nasiya monthly payment, available quantity, warehouse type and delivery date, plus rating, review count, order count and the seller with its legal name.","required_params":[],"optional_params":["product_id","url","language"],"params":[{"name":"product_id","type":"integer","required":false,"description":"Uzum product id: product_id from any search/category row (the number at the end of a uzum.uz/ru/product/… URL).","on_invalid":"reject","example":1248575,"aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Alternatively a uzum.uz product URL.","on_invalid":"reject","example":"https://uzum.uz/ru/product/smartfon-iphone-15-1248575","aliases":["product_url"]},{"name":"language","type":"enum","required":false,"description":"Language of titles and texts. It also changes search matching and ranking.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"uz","label":"Uzbek (Latin)"}],"default":"ru","example":"ru","aliases":["lang"]}],"returns":"product{product_id, title, url, brand, category{id, name}, breadcrumbs[{id, name}], price_uzs (lowest SKU price), price_max_uzs, price_min_in_stock_uzs, old_price_uzs, discount_percent, currency, available_quantity, in_stock, orders_quantity (the source rounds it down once large), orders_quantity_is_lower_bound, rating, review_count, review_photo_count, description, short_description, highlights[], properties[{name, value, filter_id, value_id}], options[{id, name, type, values[{id, name, code}]}], skus[{sku_id, seller_sku, options[{name, value, value_code, value_id}], price_uzs, old_price_uzs, discount_percent, installment_monthly_uzs, installment_text, available_quantity, in_stock, stock_type, warehouse, delivery_days, delivery_date, delivery_text, vat_rate, vat_amount_uzs, discount_ends_at, image}], sku_count, images[], video_url, badges[], warranty_months, is_original, seller{shop_id, name, short_name, shop_url_slug, url, is_official, rating, review_count, orders_quantity, avatar, seller_account_id, legal_records[{name, value}]}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":146320}},{"name":"reviews","description":"Customer reviews of one Uzum Market product, paged in the site's own order: star rating, packaging and delivery ratings, text, pros, cons, the buyer's display name (null when posted anonymously), date, the options bought, photos, likes and the seller's reply.","required_params":["product_id"],"optional_params":["page","limit"],"params":[{"name":"product_id","type":"integer","required":true,"description":"Uzum product id (product_id from search/category/product).","on_invalid":"reject","example":1659259,"aliases":["id"]},{"name":"page","type":"integer","required":false,"description":"Review page (1-based).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-100.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100}],"returns":"reviews[{review_id, product_id, rating, packaging_rating, delivery_rating, text, pros, cons, author, is_anonymous, created_at, edited, options_bought[{name, value}], photos[], like_count, dislike_count, seller_reply{text, created_at, shop_name}}], count, page, limit, has_more, product_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":1659259,"limit":20}},{"name":"seller","description":"A seller's (shop's) public profile on Uzum Market: name, description, rating, review and order counts, official flag, registration date, legal name and records. List its products with search shop_id=<shop_id>.","required_params":["shop"],"optional_params":["language"],"params":[{"name":"shop","type":"string","required":true,"description":"The shop's URL name (seller.shop_url_slug of a product, the part after /shop/ in uzum.uz/ru/shop/<name>) or the whole shop URL. The numeric shop id is not accepted by the source here.","on_invalid":"reject","example":"macintoshuz","aliases":["shop_url","slug","seller"]},{"name":"language","type":"enum","required":false,"description":"Language of titles and texts. It also changes search matching and ranking.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"uz","label":"Uzbek (Latin)"}],"default":"ru","example":"ru","aliases":["lang"]}],"returns":"seller{shop_id, name, shop_url_slug, url, description, rating, review_count, orders_quantity, is_official, registered_at, avatar, banner, seller_account_id, legal_name, legal_records[{name, value}], registration_number, contacts[], has_charity_products}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"shop":"macintoshuz"}},{"name":"categories","description":"Uzum Market's category tree (about 4 100 categories) as a flat list with parent ids, to find a category_id for category or search.","required_params":[],"optional_params":["parent_id","language"],"params":[{"name":"parent_id","type":"integer","required":false,"description":"Optional: only the direct children of this category id.","on_invalid":"reject","example":10014},{"name":"language","type":"enum","required":false,"description":"Language of titles and texts. It also changes search matching and ranking.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"uz","label":"Uzbek (Latin)"}],"default":"ru","example":"ru","aliases":["lang"]}],"returns":"categories[{category_id, name, parent_id, is_adult}], count, parent_id, language","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"parent_id":10044}}]},{"name":"v2ex","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"V2EX API scraper — live topics with full post bodies, complete reply threads, member profiles, the 1364-node taxonomy, and full-text search across every V2EX topic since 2010. China's biggest developer/tech community (v2ex.com) in clean JSON. No login, no token, no China exit required.","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/v2ex/v1","spec_available":true,"actions":[{"name":"search","description":"Full-text search across EVERY V2EX topic since 2010 (title + body + replies) — the historical archive the site's own JSON API does not expose. Filter by node, date range and sort by recency or relevance; each hit returns the full post body, author handle, node, reply count and markup-free match snippets.","required_params":["q"],"optional_params":["match","sort","order","node","since","until","limit","offset","resolve_nodes"],"params":[{"name":"q","type":"string","required":true,"description":"Full-text search term, Chinese or English — e.g. '爬虫' (web scraping, 12.8k topics), '求推荐' (asking for a recommendation, 28.2k), '外包' (outsourcing, 20.4k), '数据采集' (data collection), 'API 接口'. Searches title + body + replies of every V2EX topic since 2010. Quotes are NOT sent upstream (the index rejects them with a 503) — quoting a term switches on exact-phrase matching instead, same as match=phrase.","on_invalid":"ignore","example":"爬虫","aliases":["query","keyword","search","term"]},{"name":"match","type":"enum","required":false,"description":"How strictly a hit must match a multi-word query. The index does not insist on every token (measured: only 6 of 30 rows returned for '树莓派 教程' contained 教程), so 'all' and 'phrase' narrow the returned rows here and report how many were dropped in `filtered_out`. 'phrase' matches the query as a literal substring, spaces included.","on_invalid":"ignore","allowed_values":[{"value":"any","label":"Keep every hit the index returns. It does not insist on all query tokens, so a multi-word query can return topics containing only one of the words. Default."},{"value":"all","label":"Only keep hits whose title or body contains EVERY whitespace-separated query token."},{"value":"phrase","label":"Only keep hits containing the query as an exact substring (what a quoted search would do — sov2ex itself answers 503 to a quoted query, so this is done client-side)."}],"default":"any","example":"all","aliases":["match_mode"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering field.","on_invalid":"ignore","allowed_values":[{"value":"created","label":"Newest topics first (chronological — best for monitoring/lead feeds)"},{"value":"sumup","label":"Best match first (relevance score over title + body + replies)"}],"default":"created","example":"created","aliases":["sort_by","order_by"]},{"name":"order","type":"enum","required":false,"description":"Sort direction. With sort=created, 'desc' gives the freshest topics first and 'asc' walks the archive from 2010 forward.","on_invalid":"ignore","allowed_values":[{"value":"desc","label":"Descending — newest first for sort=created, highest score first for sort=sumup"},{"value":"asc","label":"Ascending — oldest first"}],"default":"desc","example":"desc","aliases":["direction"]},{"name":"node","type":"string","required":false,"description":"Restrict the search to one node slug (e.g. 'jobs' cut a 20,456-hit '外包' search to 2,478 — the filter genuinely bites).","on_invalid":"ignore","example":"jobs","aliases":["node_name","in_node"]},{"name":"since","type":"string","required":false,"description":"Only topics created on/after this date. Accepts 'YYYY-MM-DD', an ISO timestamp, or epoch seconds (milliseconds are converted).","on_invalid":"ignore","example":"2026-01-01","aliases":["gte","from_date","after"]},{"name":"until","type":"string","required":false,"description":"Only topics created on/before this date. Same formats as `since`.","on_invalid":"ignore","example":"2026-08-01","aliases":["lte","to_date","before"]},{"name":"limit","type":"integer","required":false,"description":"How many topics to return (1–50, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":50,"aliases":["max_results","count","size"]},{"name":"offset","type":"integer","required":false,"description":"Pagination offset. The index caps the window at offset + limit ≤ 1000; deeper paging is refused upstream, so narrow the query with `node`/`since`/`until` instead of paging past it.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":999,"aliases":["from","skip"]},{"name":"resolve_nodes","type":"boolean","required":false,"description":"The search index stores numeric node ids only. When true (default) the engine attaches the node slug/title from a 24h-cached copy of the node directory; set false to skip that lookup entirely.","on_invalid":"ignore","default":true,"example":true,"aliases":["with_node_names"]}],"returns":"topics[]{id, title, content, url, node{id,name,title,title_en,url}, author{username,url}, reply_count, created_at, created_at_iso, match_snippets[], score}, total_matches_upstream, returned, offset, filtered_out, query","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"爬虫","limit":10}},{"name":"node_topics","description":"The newest topics of one V2EX node (sub-forum) with the COMPLETE post body — a live freshness feed for a niche: 'jobs' for hiring posts, 'outsourcing' for project leads, 'qna' for buying-intent questions, 'programmer' for developer chatter. Returns the node's own metadata (topic count, subscriber count) alongside.","required_params":["node_name"],"optional_params":["limit"],"params":[{"name":"node_name","type":"string","required":true,"description":"V2EX node (sub-forum) slug — e.g. 'qna' (问与答, 240k topics), 'programmer' (程序员, 72k), 'jobs' (酷工作, 60k), 'outsourcing' (外包, 7.5k), 'create', 'career', 'python'. Use the `nodes` action to browse or search all 1364 node slugs.","on_invalid":"ignore","example":"programmer","aliases":["node","name","slug"]},{"name":"limit","type":"integer","required":false,"description":"How many topics to return (1–10, default 10).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":10,"aliases":["max_results","count","size"]}],"returns":"node{id,name,title,title_en,url,topic_count,subscriber_count,parent_node}, topics[]{id, title, content, url, node, author{id,username,url,tagline}, reply_count, created_at, created_at_iso, last_touched_at, last_reply_by}, returned","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"node_name":"qna"}},{"name":"latest","description":"The newest topics across the WHOLE of V2EX (all nodes), each with its full post body — a single-call firehose of what the Chinese dev community is posting right now (typically ~47 topics, the freshest usually minutes old).","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"How many topics to return (1–50, default 50).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":50,"aliases":["max_results","count","size"]}],"returns":"topics[]{id, title, content, url, node, author, reply_count, created_at, created_at_iso, last_touched_at}, returned","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":20}},{"name":"hot","description":"Today's most-discussed V2EX topics with full bodies — the site's own hot list, ordered by the traction the community itself gave them.","required_params":[],"optional_params":["limit"],"params":[{"name":"limit","type":"integer","required":false,"description":"How many topics to return (1–20, default 20).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":20,"aliases":["max_results","count","size"]}],"returns":"topics[]{id, title, content, url, node, author, reply_count, created_at, created_at_iso}, returned","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"limit":20}},{"name":"topic","description":"One V2EX topic by id or URL: the full post body plus the COMPLETE reply thread (every reply, in order, with author handle and timestamp) — the discussion is where the buying intent, the tool recommendations and the salary numbers actually live.","required_params":["id"],"optional_params":["with_replies","replies_limit"],"params":[{"name":"id","type":"string","required":true,"description":"The topic to fetch: a numeric topic id (1236386) or a topic URL (https://www.v2ex.com/t/1236386#reply7).","on_invalid":"ignore","example":"1236386","aliases":["topic_id","url","topic"]},{"name":"with_replies","type":"boolean","required":false,"description":"Also fetch the discussion thread (one extra upstream call). The reply endpoint returns EVERY reply in one shot — verified 204/204 on a 204-reply topic — so nothing is silently truncated upstream.","on_invalid":"ignore","default":true,"example":true,"aliases":["replies","include_replies"]},{"name":"replies_limit","type":"integer","required":false,"description":"Cap on returned replies (1–1000, default 100). `reply_count` always reports the true total, so truncation is visible.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":1000,"aliases":["max_replies"]}],"returns":"topic{id, title, content, url, node, author, reply_count, created_at, created_at_iso, last_touched_at}, replies[]{id, content, author, created_at, created_at_iso}, replies_returned, replies_total, replies_truncated, replies_match_counter","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1236386"}},{"name":"user_topics","description":"The newest topics posted by one V2EX member, with full bodies — follow a recruiter, a vendor or a prolific poster without watching every node.","required_params":["username"],"optional_params":["limit"],"params":[{"name":"username","type":"string","required":true,"description":"V2EX member handle (case-sensitive, e.g. 'Livid'). A numeric member id also works.","on_invalid":"ignore","example":"Livid","aliases":["user","member","handle"]},{"name":"limit","type":"integer","required":false,"description":"How many topics to return (1–10, default 10).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":10,"aliases":["max_results","count","size"]}],"returns":"author{id,username,url,tagline}, topics[]{id, title, content, url, node, reply_count, created_at, created_at_iso}, returned","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"Livid"}},{"name":"member","description":"Public profile of a V2EX member by handle or id: tagline, bio, website, github/twitter handle, self-typed location, join date and PRO status. Only what the member published themselves — the API exposes no e-mail, phone or real name.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"V2EX member handle (case-sensitive, e.g. 'Livid'). A numeric member id also works.","on_invalid":"ignore","example":"Livid","aliases":["user","member","handle"]}],"returns":"member{id, username, url, tagline, bio, website, github, twitter, location, avatar, joined_at, joined_at_iso, is_pro}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"Livid"}},{"name":"nodes","description":"The V2EX node taxonomy — all 1364 sub-forums with slug, Chinese and English title, topic count, subscriber count and parent node. Pass `name` for one node, or `query` to search the directory (matches slug, Chinese title and English title). This is how you find the `node_name` for `node_topics` and the `node` filter for `search`.","required_params":[],"optional_params":["name","query","limit"],"params":[{"name":"name","type":"string","required":false,"description":"Fetch exactly one node by slug (cheapest call — ~650 bytes instead of the full directory).","on_invalid":"ignore","example":"qna","aliases":["node_name","slug"]},{"name":"query","type":"string","required":false,"description":"Search the node directory by slug or title (Chinese or English), e.g. 'python', '工作', 'job'.","on_invalid":"ignore","example":"python","aliases":["q","search"]},{"name":"limit","type":"integer","required":false,"description":"How many nodes to return (1–1400, default 200).","on_invalid":"ignore","default":200,"example":200,"minimum":1,"maximum":1400,"aliases":["max_results","count","size"]}],"returns":"nodes[]{id, name, title, title_en, url, topic_count, subscriber_count, parent_node, aliases[]}, returned, total_nodes","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"python"}}]},{"name":"validate","category":{"id":"utilities","title":"Utilities & AI"},"title":"Validation API — validate EU VAT numbers (VIES), IBAN bank accounts (offline) and email addresses (syntax + MX + disposable) in one call","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/validate/v1","spec_available":true,"actions":[{"name":"vat","description":"Validate an EU VAT number via VIES → validity + registered company name & address.","required_params":["vat_number"],"optional_params":["country"],"params":[{"name":"vat_number","type":"string","required":true,"description":"The VAT number to validate against EU VIES. Either a full VAT incl. the 2-letter country prefix (e.g. 'IE6388047V', 'DE811569869') or just the digits when you also pass `country`. Spaces/dots/dashes are ignored.","on_invalid":"reject","example":"IE6388047V","aliases":["vat","vatNumber","number","vat_id"]},{"name":"country","type":"string","required":false,"description":"ISO-3166 / VIES country code for the VAT number (e.g. DE, FR, IE, NL). Optional if `vat_number` already starts with the prefix. VIES uses EL for Greece and XI for Northern Ireland; GR/GB are accepted and mapped.","on_invalid":"ignore","example":"IE","aliases":["country_code","countryCode","cc"]}],"returns":"valid, format_valid, query, vat_number, full_vat_number, country_code, company_name, company_address, request_date, request_identifier, consultation_number, source ('vies')","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"vat_number":"IE6388047V"}},{"name":"iban","description":"Validate + parse an IBAN offline (ISO 13616 mod-97) → country, BBAN, bank/branch/account. Optional enrich=true adds BIC + bank name/city (openiban.com, proxied).","required_params":["iban"],"optional_params":["enrich"],"params":[{"name":"iban","type":"string","required":true,"description":"The IBAN to validate + parse (offline, ISO 13616 mod-97). Spaces and dashes are ignored; case-insensitive. Returns country, check-digits, BBAN, bank/branch/account, and the checksum math.","on_invalid":"reject","example":"DE89370400440532013000","aliases":["iban_number","account","number"]},{"name":"enrich","type":"boolean","required":false,"description":"If true and the IBAN is valid, also fetch BIC + bank name/city from openiban.com (free, proxied). Bank-directory coverage is openiban's supported set (proven live: DE/NL/LU/LI; AT/BE/CH listed but their directory may miss codes). Never changes the validity verdict — the mod-97 result is ours, offline. Default false keeps iban 100% offline.","on_invalid":"ignore","default":false,"example":false,"aliases":["bic","bank_data"]}],"returns":"valid, iban, formatted, country_code, country_name, check_digits, bban, bank_code, branch_code, account_number, national_check, sepa, checksum{}, reason, bank{bic,name,zip,city} + enrich{attempted,source,bank_found} (enrich=true only)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"iban":"DE89 3704 0044 0532 0130 00"}},{"name":"email","description":"Validate an email: syntax + live MX + disposable-domain + role-account flags.","required_params":["email"],"optional_params":["check_mx"],"params":[{"name":"email","type":"string","required":true,"description":"The email address to validate: RFC-5322-pragmatic syntax + live MX lookup (DNS-over-HTTPS) + disposable-domain + role-account detection.","on_invalid":"reject","example":"jane.doe@google.com","aliases":["address","mail","email_address"]},{"name":"check_mx","type":"boolean","required":false,"description":"Whether to perform the live MX/DNS lookup (default true). Set false for a pure offline syntax+disposable check (no network, faster).","on_invalid":"ignore","default":true,"example":true}],"returns":"valid, email, syntax_valid, local_part, domain, has_mx, mx_records[], is_disposable, is_role_account, is_free_provider, did_you_mean, deliverable, score (0-100), reason","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"email":"jane.doe@google.com"}},{"name":"batch","description":"Validate up to 100 mixed items ({type:vat|iban|email,value}) in one call.","required_params":["items"],"optional_params":["check_mx"],"params":[{"name":"items","type":"array","required":true,"description":"Up to 100 mixed validation items. Each is an object {type: vat|iban|email, value: <string>} (vat items may also carry a `country`). Each item is validated independently — a bad entry yields valid:false, it never fails the whole batch.","on_invalid":"reject","example":[{"type":"iban","value":"DE89370400440532013000"},{"type":"email","value":"info@stripe.com"},{"type":"vat","value":"IE6388047V"}],"aliases":["inputs","batch","data"]},{"name":"check_mx","type":"boolean","required":false,"description":"Whether to perform the live MX/DNS lookup (default true). Set false for a pure offline syntax+disposable check (no network, faster).","on_invalid":"ignore","default":true,"example":true}],"returns":"count, valid_count, results[] (each tagged with its type + the same record the single-action would return)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"items":[{"type":"iban","value":"DE89370400440532013000"},{"type":"email","value":"test@mailinator.com","check_mx":false},{"type":"iban","value":"bad"}]}}]},{"name":"vatan","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Vatan Bilgisayar API scraper — search vatanbilgisayar.com (Turkish electronics) and read full product records: TRY price with the Web'e Özel and basket ('sepette') prices kept apart, struck price, instalments, availability, rating, specifications, variants, images, store stock across Vatan's shops and the deal lists. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/vatan/v1","spec_available":true,"actions":[{"name":"search","description":"Search vatanbilgisayar.com by keyword or browse a category, 24 products per page: slug, product code, title, images, the online price in TRY with the struck price, the Web'e Özel price and the basket-only ('sepette') price kept apart, the card's rating, colour options and deal notes. Filter by brand, price range and in-stock, sort the way the site does, page through results. Keywords Vatan redirects to a category are followed with the filters kept. The response lists the categories, brands and price bands available.","required_params":[],"optional_params":["query","category","brand","page","sort","min_price","max_price","in_stock_only","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"What to look for on vatanbilgisayar.com — a Turkish keyword ('kulaklık', 'robot süpürge'), a brand or a model. Optional when `category` is given.","on_invalid":"reject","example":"kulaklık","aliases":["q","keyword","text"]},{"name":"category","type":"string","required":false,"description":"Browse a Vatan category instead of searching: its URL or path ('notebook', '/apple/cep-telefonu-modelleri/'), as returned in `filters.categories[].path`.","on_invalid":"reject","example":"notebook","aliases":["category_url","category_path"]},{"name":"brand","type":"string","required":false,"description":"Only this brand: the `brand` value from `filters.brands` (e.g. 'jbl', 'lenovo').","on_invalid":"reject","example":"jbl","aliases":["brand_slug"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Vatan pages hold 24 products.","on_invalid":"ignore","default":1,"minimum":1,"maximum":300},{"name":"sort","type":"enum","required":false,"description":"Result order — only the orderings vatanbilgisayar.com itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Vatan's recommended order"},{"value":"best_selling","label":"Best sellers first"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"most_reviewed","label":"Most reviewed first"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"}],"default":"relevance"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in TRY.","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in TRY.","on_invalid":"reject","minimum":0},{"name":"in_stock_only","type":"boolean","required":false,"description":"true: only products Vatan lists as in stock (the site's own 'Stoktakiler' filter).","on_invalid":"ignore","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no product on the page contains a word of the query, results is empty and fallback_results_dropped counts the dropped products. true returns them apart, in fallback_results.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, slug (use with product/detail), product_code (Vatan's code, often the MPN), title, url, image, images[], price (TRY — the online price; the Web'e Özel price when one applies), currency, regular_price (the big price on a Web'e Özel product), price_label, price_note, was_price (struck price), discount_percent, discount_amount, basket_price (a 'Sepette' price applied only in the basket — NOT the price), basket_price_label, rating_rounded (the card's 1-decimal score, null when unrated; exact rating in product/detail), lowest_price_note, web_exclusive_badge, color_options, color_options_out_of_stock, is_outlet, badge_images[]}, count, page, page_size (24), total_results (the site's own count), total_pages, page_notice, sort, query, category, brand, redirected_to (the listing a keyword was redirected to), keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[] (only with include_fallback_results=true), filters{categories[]{name, path, count}, brands[]{name, brand, count}, price_bands[]{label, path, count}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"kulaklık"}},{"name":"product/detail","description":"The full Vatan product record by numeric id, URL or slug: title, brand, product code and MPN, online price in TRY with the Web'e Özel, struck and basket-only prices kept apart, interest-free instalments, availability (including 'out of stock online'), free shipping, rating and review count, image gallery, breadcrumb, key attributes and the full specification table, description, colour/capacity variants with their ids, and the page's review sample.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Vatan product: its numeric id (141004, `product_id` in suggest and detail), its product URL, or the URL slug every search row returns in `slug`.","on_invalid":"reject","example":"141004","aliases":["id","url","slug"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, product_code, mpn, title, brand, color, url, slug, group_id, price, currency, regular_price, price_label, price_note, was_price, discount_percent, discount_amount, basket_price, basket_price_label, schema_org_price, installment{months, monthly_amount, same_as_cash_price}, installment_from_monthly, lowest_price_note, summary, availability (in_stock | out_of_stock | out_of_stock_online | pre_order | null), free_shipping, rating, review_count, rating_scale, schema_org_reviews[]{rating, author (site-masked), title, text, date} (the page's structured sample, not the newest), images[], breadcrumb[]{name, url}, category_path[], key_attributes[]{name, value}, specifications[]{group, name, value}, description, variants[]{product_id, url, label, image}, is_outlet}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"141004"}},{"name":"product/stores","description":"Which Vatan stores hold a product right now: every store with stock, its city, address, phone, coordinates, opening hours, whether it is a hyperstore, and the stock number Vatan publishes. Accepts the numeric id, URL or slug.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"A Vatan product: its numeric id (141004, `product_id` in suggest and detail), its product URL, or the URL slug every search row returns in `slug`.","on_invalid":"reject","example":"141004","aliases":["id","url","slug"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"stores[]{store_id, name, city, address, phone, latitude, longitude, opening_hours, is_hyperstore, stock, image}, count, cities[], product_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"141004"}},{"name":"search/suggest","description":"Vatan's own search-box list for a partial keyword: the matching products with numeric id, title, price, URL, image and category, plus the suggested categories.","required_params":["query"],"optional_params":["limit","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far (at least 2 characters).","on_invalid":"reject","example":"robot süpürge","aliases":["q","term","keyword"]},{"name":"limit","type":"integer","required":false,"description":"How many products to return (the site's list can hold several hundred).","on_invalid":"ignore","default":50,"minimum":1,"maximum":500},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"products[]{product_id, title, price, currency, url, image, category, brand_group}, products_total, categories[]{name, path}, query","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"robot süpürge"}},{"name":"deals","description":"Vatan's deal lists as product rows: Fırsat Ürünler, Web'e Özel prices or Outlet items, with the same fields, sorting and paging as search.","required_params":[],"optional_params":["type","page","sort","max_rotations"],"params":[{"name":"type","type":"enum","required":false,"description":"Which Vatan deal list.","on_invalid":"reject","allowed_values":[{"value":"firsat","label":"Fırsat Ürünler — Vatan's deal products"},{"value":"web_ozel","label":"Web'e Özel — online-only prices"},{"value":"outlet","label":"Outlet — outlet (open-box / display) items"}],"default":"firsat"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Vatan pages hold 24 products.","on_invalid":"ignore","default":1,"minimum":1,"maximum":300},{"name":"sort","type":"enum","required":false,"description":"Result order — only the orderings vatanbilgisayar.com itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Vatan's recommended order"},{"value":"best_selling","label":"Best sellers first"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"most_reviewed","label":"Most reviewed first"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"}],"default":"relevance"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, slug (use with product/detail), product_code (Vatan's code, often the MPN), title, url, image, images[], price (TRY — the online price; the Web'e Özel price when one applies), currency, regular_price (the big price on a Web'e Özel product), price_label, price_note, was_price (struck price), discount_percent, discount_amount, basket_price (a 'Sepette' price applied only in the basket — NOT the price), basket_price_label, rating_rounded (the card's 1-decimal score, null when unrated; exact rating in product/detail), lowest_price_note, web_exclusive_badge, color_options, color_options_out_of_stock, is_outlet, badge_images[]}, count, page, page_size (24), total_results (the site's own count), total_pages, page_notice, sort, query, category, brand, redirected_to (the listing a keyword was redirected to), keyword_matches_on_page, fallback_results_dropped, fallback_total, fallback_results[] (only with include_fallback_results=true), filters{categories[]{name, path, count}, brands[]{name, brand, count}, price_bands[]{label, path, count}}, type","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"firsat"}}]},{"name":"vatera","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Vatera HU auctions and marketplace","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/vatera/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Hungarian Vatera listings by keyword. Pages 1–2 are qualified; auction and fixed prices are separate.","required_params":["query"],"optional_params":["page"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword searched by the source in listing titles.","on_invalid":"reject","example":"lego","aliases":["q"]},{"name":"page","type":"integer","required":false,"description":"Qualified source page: 1 or 2. Each call returns one page; promoted listings may recur.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":2}],"returns":"items with ids, titles, URLs, HUF auction/fixed prices, published seller, image, condition and location; page, last_page, has_more and page_clamped. total is null unless the source explicitly reports no results.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"lego","page":1}},{"name":"detail","description":"Resolve a public Vatera listing id from search into full seller description and listing details.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Numeric search result id or public Vatera listing URL.","on_invalid":"reject","example":"3517947509","aliases":["product_id","url"]}],"returns":"Listing identity, full description, separate HUF auction/fixed prices, quantity, condition, expiration flag, dates, images, attributes and published seller. gtin is optional/null when not published.","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"3517947509"}}]},{"name":"vestiaire","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Vestiaire Collective API scraper — the luxury resale marketplace (vestiairecollective.com): search for-sale and sold second-hand designer listings in 23 buyer countries with the price that country pays, read a full listing (seller price vs buyer fee, price drop, condition, measurements, seller type and sales history, shipping), browse a seller's listings and autocomplete. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/vestiaire/v1","spec_available":true,"actions":[{"name":"search","description":"Search Vestiaire Collective listings by keyword and/or brand, model and category, for sale or sold, with the site's own sorts and filters (department, condition, colour, material, seller badge, Direct Shipping, price range, listed after). Each row: product id and url, name, brand, model, category, condition, size, colours, the price a buyer in that country pays with the original price and price-drop %, sold flag, likes, listing date, seller id and badge, the item's country, local-delivery and Direct Shipping flags, and images. A query with no genuine match returns empty (padding counted in fallback_results_dropped); the site's own spelling correction is reported.","required_params":[],"optional_params":["country","currency","language","query","include_fallback_results","status","sort","gender","condition","brand_id","model_id","category_id","color_id","material_id","seller_badge","direct_shipping","price_min","price_max","listed_after","page","page_size","include_facets"],"params":[{"name":"country","type":"enum","required":false,"description":"Buyer country (ISO-2; 'uk' accepted for gb). Prices include Vestiaire's buyer fee for delivery to this country, and the currency and language follow it. Default us.","on_invalid":"reject","allowed_values":[{"value":"us","label":"US (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"fr","label":"FR (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"it","label":"IT (EUR)"},{"value":"es","label":"ES (EUR)"},{"value":"nl","label":"NL (EUR)"},{"value":"be","label":"BE (EUR)"},{"value":"at","label":"AT (EUR)"},{"value":"ie","label":"IE (EUR)"},{"value":"pt","label":"PT (EUR)"},{"value":"gr","label":"GR (EUR)"},{"value":"fi","label":"FI (EUR)"},{"value":"ch","label":"CH (CHF)"},{"value":"se","label":"SE (SEK)"},{"value":"dk","label":"DK (DKK)"},{"value":"pl","label":"PL (PLN)"},{"value":"hk","label":"HK (HKD)"},{"value":"sg","label":"SG (SGD)"},{"value":"au","label":"AU (AUD)"},{"value":"ca","label":"CA (CAD)"},{"value":"jp","label":"JP (JPY)"},{"value":"kr","label":"KR (KRW)"}],"default":"us","example":"fr"},{"name":"currency","type":"enum","required":false,"description":"Override the country's currency with one of the 13 currencies Vestiaire prices in.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"EUR"},{"value":"USD","label":"USD"},{"value":"GBP","label":"GBP"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"AUD","label":"AUD"},{"value":"CAD","label":"CAD"},{"value":"PLN","label":"PLN"},{"value":"CHF","label":"CHF"},{"value":"SEK","label":"SEK"},{"value":"DKK","label":"DKK"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"}],"example":"EUR"},{"name":"language","type":"enum","required":false,"description":"Language of names, categories, conditions and URLs; the keyword search follows it. Default: the country's language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"nl","label":"Dutch"},{"value":"sv","label":"Swedish"},{"value":"ko","label":"Korean"},{"value":"zh","label":"Chinese (traditional)"}],"example":"fr"},{"name":"query","type":"string","required":false,"description":"Keyword (brand, model, item). Optional when a brand, model, category or seller filter is given.","on_invalid":"reject","example":"hermes birkin","aliases":["q","keyword"]},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When a query matches nothing, Vestiaire pads the page with unrelated listings. They are dropped by default (fallback_results_dropped counts them); true returns them apart in fallback_results.","on_invalid":"reject","default":false},{"name":"status","type":"enum","required":false,"description":"For-sale listings, sold listings (price research) or both.","on_invalid":"reject","allowed_values":[{"value":"available","label":"For sale"},{"value":"sold","label":"Sold listings"},{"value":"all","label":"Both"}],"default":"available","example":"sold"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"Newest"},{"value":"price_asc","label":"Price low→high"},{"value":"price_desc","label":"Price high→low"}],"default":"relevance","example":"price_asc"},{"name":"gender","type":"enum","required":false,"description":"Department.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All"},{"value":"women","label":"Women"},{"value":"men","label":"Men"},{"value":"kids","label":"Kids"}],"default":"all","example":"women"},{"name":"condition","type":"enum","required":false,"description":"Item condition.","on_invalid":"reject","allowed_values":[{"value":"never_worn_with_tag","label":"Never worn, with tag"},{"value":"never_worn","label":"Never worn"},{"value":"very_good","label":"Very good condition"},{"value":"good","label":"Good condition"},{"value":"fair","label":"Fair condition"}],"example":"never_worn"},{"name":"brand_id","type":"string","required":false,"description":"Vestiaire brand id (rows and suggest return brand_id; 50 = Chanel).","on_invalid":"reject","example":"50"},{"name":"model_id","type":"string","required":false,"description":"Vestiaire model id (rows return model_id; 7597 = Chanel Timeless/Classique).","on_invalid":"reject","example":"7597"},{"name":"category_id","type":"string","required":false,"description":"Top category id, per department: women 2 clothing, 3 shoes, 5 bags, 6 accessories, 63 jewellery; men's ids differ (12 clothing, 13 shoes …). Rows return base_category_id; include_facets lists them with their department.","on_invalid":"reject","example":"5"},{"name":"color_id","type":"string","required":false,"description":"Colour id (14 black, 1 white …; include_facets lists them).","on_invalid":"reject","example":"14"},{"name":"material_id","type":"string","required":false,"description":"Material id (3 leather, 2 cotton …; include_facets lists them).","on_invalid":"reject","example":"3"},{"name":"seller_badge","type":"enum","required":false,"description":"Only listings from sellers with this Vestiaire badge.","on_invalid":"reject","allowed_values":[{"value":"expert","label":"Expert sellers"},{"value":"trusted","label":"Trusted sellers"}],"example":"expert"},{"name":"direct_shipping","type":"boolean","required":false,"description":"Only listings eligible for Direct Shipping (sent by the seller straight to the buyer).","on_invalid":"reject","default":false},{"name":"price_min","type":"number","required":false,"description":"Minimum price in the response currency.","on_invalid":"reject","example":500},{"name":"price_max","type":"number","required":false,"description":"Maximum price in the response currency.","on_invalid":"reject","example":2000},{"name":"listed_after","type":"string","required":false,"description":"Only listings created on or after this date (YYYY-MM-DD, UTC).","on_invalid":"reject","example":"2026-09-01"},{"name":"page","type":"integer","required":false,"description":"1-based page. Vestiaire serves results up to offset 1000.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":201},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (up to 200).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":200},{"name":"include_facets","type":"boolean","required":false,"description":"Also return facet counts (brands, categories, colours, conditions, item countries, seller badges, materials, price ranges, sold) with their ids.","on_invalid":"reject","default":false}],"returns":"results[]{product_id, url, name, brand, brand_id, model, model_id, gender, base_category, base_category_id, category, category_id, condition, condition_id, size, color, colors[], price, currency, original_price, price_drop_percent, sold, likes, listed_at, seller_id, seller_first_name, seller_badge, seller_is_official_store, item_country_code, local_delivery, direct_shipping, duty_free, editor_picks[], description, image, images[]}, count, total_results, total_is_capped, page, page_size, has_more, status, sort, country, currency, language, facets (include_facets), query, corrected_query, keyword_matches_on_page, fallback_results_dropped","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"us","query":"chanel bag"}},{"name":"product/detail","description":"One Vestiaire Collective listing in full, by product id or URL, priced for a buyer country: name, brand, model, category path, condition, colour, material, size, measurements, the seller's description, price with seller price vs buyer fee (and whether the fee includes authentication), the flat fees listed apart, original price and price drop, negotiable, sold with sold date, reserved, Direct Shipping, likes, listing date, the seller (username, private or professional, country, badges, items listed and sold, last-6-months sales history) and shipping to that country (ships from, dispatch delay, buyable), plus every image.","required_params":[],"optional_params":["country","currency","language","product_id","url"],"params":[{"name":"country","type":"enum","required":false,"description":"Buyer country (ISO-2; 'uk' accepted for gb). Prices include Vestiaire's buyer fee for delivery to this country, and the currency and language follow it. Default us.","on_invalid":"reject","allowed_values":[{"value":"us","label":"US (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"fr","label":"FR (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"it","label":"IT (EUR)"},{"value":"es","label":"ES (EUR)"},{"value":"nl","label":"NL (EUR)"},{"value":"be","label":"BE (EUR)"},{"value":"at","label":"AT (EUR)"},{"value":"ie","label":"IE (EUR)"},{"value":"pt","label":"PT (EUR)"},{"value":"gr","label":"GR (EUR)"},{"value":"fi","label":"FI (EUR)"},{"value":"ch","label":"CH (CHF)"},{"value":"se","label":"SE (SEK)"},{"value":"dk","label":"DK (DKK)"},{"value":"pl","label":"PL (PLN)"},{"value":"hk","label":"HK (HKD)"},{"value":"sg","label":"SG (SGD)"},{"value":"au","label":"AU (AUD)"},{"value":"ca","label":"CA (CAD)"},{"value":"jp","label":"JP (JPY)"},{"value":"kr","label":"KR (KRW)"}],"default":"us","example":"fr"},{"name":"currency","type":"enum","required":false,"description":"Override the country's currency with one of the 13 currencies Vestiaire prices in.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"EUR"},{"value":"USD","label":"USD"},{"value":"GBP","label":"GBP"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"AUD","label":"AUD"},{"value":"CAD","label":"CAD"},{"value":"PLN","label":"PLN"},{"value":"CHF","label":"CHF"},{"value":"SEK","label":"SEK"},{"value":"DKK","label":"DKK"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"}],"example":"EUR"},{"name":"language","type":"enum","required":false,"description":"Language of names, categories, conditions and URLs; the keyword search follows it. Default: the country's language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"nl","label":"Dutch"},{"value":"sv","label":"Swedish"},{"value":"ko","label":"Korean"},{"value":"zh","label":"Chinese (traditional)"}],"example":"fr"},{"name":"product_id","type":"string","required":false,"description":"Vestiaire product id (the number before .shtml in a product URL; rows return product_id).","on_invalid":"reject","example":"71015602","aliases":["id","listing_id"]},{"name":"url","type":"string","required":false,"description":"A vestiairecollective.com product URL instead of product_id.","on_invalid":"reject","example":"https://us.vestiairecollective.com/women-clothing/jackets/chanel/black-viscose-la-petite-veste-noire-chanel-jacket-71015602.shtml","aliases":["product_url"]}],"returns":"product{product_id, url, name, brand, brand_id, model, model_id, gender, base_category, category, category_id, subcategory, breadcrumb[{name,url}], condition, color, material, size, size_standard, measurements[{name,value}], measurement_unit, watch_mechanism, watch_strap_material, packaging[], description, original_description, original_description_language, price, currency, original_price, price_drop_percent, seller_original_price, price_breakdown{seller_price, buyer_fee, buyer_fee_percent, buyer_fee_includes_authentication}, flat_buyer_fees[{type,amount,currency,description}], duties_and_taxes, negotiable, sold, sold_at, reserved, available, local, direct_shipping, consignment, prohibited, likes, listed_at, tags[], seller{id, username, first_name, type, segment, country_code, country, badges[], rating_badge, items_listed, items_sold, on_vacation, sales_history{sold, shipped_within_7_days, cancelled, period_start, period_end}}, shipping{ships_from, destination_country, dispatch_within_days, dispatch_day, buyable, prohibited, prohibited_reason, cost_min, cost_max, cost_currency}, images[], image}, country, currency, language","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"us","product_id":"71015602"}},{"name":"seller/listings","description":"One seller's Vestiaire Collective listings (for sale, sold or both) with the same row fields, sorts and filters as search. Use status=sold for a seller's sales record.","required_params":["seller_id"],"optional_params":["country","currency","language","query","status","sort","gender","condition","brand_id","model_id","category_id","color_id","material_id","seller_badge","direct_shipping","price_min","price_max","listed_after","page","page_size","include_facets"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Vestiaire seller id (search rows and product/detail return it).","on_invalid":"reject","example":"35936252"},{"name":"country","type":"enum","required":false,"description":"Buyer country (ISO-2; 'uk' accepted for gb). Prices include Vestiaire's buyer fee for delivery to this country, and the currency and language follow it. Default us.","on_invalid":"reject","allowed_values":[{"value":"us","label":"US (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"fr","label":"FR (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"it","label":"IT (EUR)"},{"value":"es","label":"ES (EUR)"},{"value":"nl","label":"NL (EUR)"},{"value":"be","label":"BE (EUR)"},{"value":"at","label":"AT (EUR)"},{"value":"ie","label":"IE (EUR)"},{"value":"pt","label":"PT (EUR)"},{"value":"gr","label":"GR (EUR)"},{"value":"fi","label":"FI (EUR)"},{"value":"ch","label":"CH (CHF)"},{"value":"se","label":"SE (SEK)"},{"value":"dk","label":"DK (DKK)"},{"value":"pl","label":"PL (PLN)"},{"value":"hk","label":"HK (HKD)"},{"value":"sg","label":"SG (SGD)"},{"value":"au","label":"AU (AUD)"},{"value":"ca","label":"CA (CAD)"},{"value":"jp","label":"JP (JPY)"},{"value":"kr","label":"KR (KRW)"}],"default":"us","example":"fr"},{"name":"currency","type":"enum","required":false,"description":"Override the country's currency with one of the 13 currencies Vestiaire prices in.","on_invalid":"reject","allowed_values":[{"value":"EUR","label":"EUR"},{"value":"USD","label":"USD"},{"value":"GBP","label":"GBP"},{"value":"HKD","label":"HKD"},{"value":"SGD","label":"SGD"},{"value":"AUD","label":"AUD"},{"value":"CAD","label":"CAD"},{"value":"PLN","label":"PLN"},{"value":"CHF","label":"CHF"},{"value":"SEK","label":"SEK"},{"value":"DKK","label":"DKK"},{"value":"JPY","label":"JPY"},{"value":"KRW","label":"KRW"}],"example":"EUR"},{"name":"language","type":"enum","required":false,"description":"Language of names, categories, conditions and URLs; the keyword search follows it. Default: the country's language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"nl","label":"Dutch"},{"value":"sv","label":"Swedish"},{"value":"ko","label":"Korean"},{"value":"zh","label":"Chinese (traditional)"}],"example":"fr"},{"name":"query","type":"string","required":false,"description":"Keyword (brand, model, item). Optional when a brand, model, category or seller filter is given.","on_invalid":"reject","example":"hermes birkin","aliases":["q","keyword"]},{"name":"status","type":"enum","required":false,"description":"For-sale listings, sold listings (price research) or both.","on_invalid":"reject","allowed_values":[{"value":"available","label":"For sale"},{"value":"sold","label":"Sold listings"},{"value":"all","label":"Both"}],"default":"available","example":"sold"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"newest","label":"Newest"},{"value":"price_asc","label":"Price low→high"},{"value":"price_desc","label":"Price high→low"}],"default":"relevance","example":"price_asc"},{"name":"gender","type":"enum","required":false,"description":"Department.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All"},{"value":"women","label":"Women"},{"value":"men","label":"Men"},{"value":"kids","label":"Kids"}],"default":"all","example":"women"},{"name":"condition","type":"enum","required":false,"description":"Item condition.","on_invalid":"reject","allowed_values":[{"value":"never_worn_with_tag","label":"Never worn, with tag"},{"value":"never_worn","label":"Never worn"},{"value":"very_good","label":"Very good condition"},{"value":"good","label":"Good condition"},{"value":"fair","label":"Fair condition"}],"example":"never_worn"},{"name":"brand_id","type":"string","required":false,"description":"Vestiaire brand id (rows and suggest return brand_id; 50 = Chanel).","on_invalid":"reject","example":"50"},{"name":"model_id","type":"string","required":false,"description":"Vestiaire model id (rows return model_id; 7597 = Chanel Timeless/Classique).","on_invalid":"reject","example":"7597"},{"name":"category_id","type":"string","required":false,"description":"Top category id, per department: women 2 clothing, 3 shoes, 5 bags, 6 accessories, 63 jewellery; men's ids differ (12 clothing, 13 shoes …). Rows return base_category_id; include_facets lists them with their department.","on_invalid":"reject","example":"5"},{"name":"color_id","type":"string","required":false,"description":"Colour id (14 black, 1 white …; include_facets lists them).","on_invalid":"reject","example":"14"},{"name":"material_id","type":"string","required":false,"description":"Material id (3 leather, 2 cotton …; include_facets lists them).","on_invalid":"reject","example":"3"},{"name":"seller_badge","type":"enum","required":false,"description":"Only listings from sellers with this Vestiaire badge.","on_invalid":"reject","allowed_values":[{"value":"expert","label":"Expert sellers"},{"value":"trusted","label":"Trusted sellers"}],"example":"expert"},{"name":"direct_shipping","type":"boolean","required":false,"description":"Only listings eligible for Direct Shipping (sent by the seller straight to the buyer).","on_invalid":"reject","default":false},{"name":"price_min","type":"number","required":false,"description":"Minimum price in the response currency.","on_invalid":"reject","example":500},{"name":"price_max","type":"number","required":false,"description":"Maximum price in the response currency.","on_invalid":"reject","example":2000},{"name":"listed_after","type":"string","required":false,"description":"Only listings created on or after this date (YYYY-MM-DD, UTC).","on_invalid":"reject","example":"2026-09-01"},{"name":"page","type":"integer","required":false,"description":"1-based page. Vestiaire serves results up to offset 1000.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":201},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (up to 200).","on_invalid":"reject","default":48,"example":48,"minimum":1,"maximum":200},{"name":"include_facets","type":"boolean","required":false,"description":"Also return facet counts (brands, categories, colours, conditions, item countries, seller badges, materials, price ranges, sold) with their ids.","on_invalid":"reject","default":false}],"returns":"results[]{product_id, url, name, brand, brand_id, model, model_id, gender, base_category, base_category_id, category, category_id, condition, condition_id, size, color, colors[], price, currency, original_price, price_drop_percent, sold, likes, listed_at, seller_id, seller_first_name, seller_badge, seller_is_official_store, item_country_code, local_delivery, direct_shipping, duty_free, editor_picks[], description, image, images[]}, count, total_results, total_is_capped, page, page_size, has_more, status, sort, country, currency, language, facets (include_facets), seller_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"35936252"}},{"name":"suggest","description":"Vestiaire Collective autocomplete for a partial keyword: matching brands with their brand_id and URL, and the phrase suggestions the search box shows.","required_params":["query"],"optional_params":["country","language","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Partial keyword.","on_invalid":"reject","example":"chan","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Buyer country (ISO-2; 'uk' accepted for gb). Prices include Vestiaire's buyer fee for delivery to this country, and the currency and language follow it. Default us.","on_invalid":"reject","allowed_values":[{"value":"us","label":"US (USD)"},{"value":"gb","label":"GB (GBP)"},{"value":"fr","label":"FR (EUR)"},{"value":"de","label":"DE (EUR)"},{"value":"it","label":"IT (EUR)"},{"value":"es","label":"ES (EUR)"},{"value":"nl","label":"NL (EUR)"},{"value":"be","label":"BE (EUR)"},{"value":"at","label":"AT (EUR)"},{"value":"ie","label":"IE (EUR)"},{"value":"pt","label":"PT (EUR)"},{"value":"gr","label":"GR (EUR)"},{"value":"fi","label":"FI (EUR)"},{"value":"ch","label":"CH (CHF)"},{"value":"se","label":"SE (SEK)"},{"value":"dk","label":"DK (DKK)"},{"value":"pl","label":"PL (PLN)"},{"value":"hk","label":"HK (HKD)"},{"value":"sg","label":"SG (SGD)"},{"value":"au","label":"AU (AUD)"},{"value":"ca","label":"CA (CAD)"},{"value":"jp","label":"JP (JPY)"},{"value":"kr","label":"KR (KRW)"}],"default":"us","example":"fr"},{"name":"language","type":"enum","required":false,"description":"Language of names, categories, conditions and URLs; the keyword search follows it. Default: the country's language.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"fr","label":"French"},{"value":"de","label":"German"},{"value":"it","label":"Italian"},{"value":"es","label":"Spanish"},{"value":"nl","label":"Dutch"},{"value":"sv","label":"Swedish"},{"value":"ko","label":"Korean"},{"value":"zh","label":"Chinese (traditional)"}],"example":"fr"},{"name":"limit","type":"integer","required":false,"description":"Maximum brands and maximum phrase suggestions.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":20}],"returns":"brands[{brand_id, name, url}], suggestions[{text}], count, query, country, language","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"us","query":"chan"}}]},{"name":"vinted","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Vinted API — second-hand fashion listings, item detail & seller profiles across 20 European Vinted sites","version":"1.3.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/vinted/v1","spec_available":true,"actions":[{"name":"catalog_search","description":"keyword + filter search (brand/size/condition/category/color/material/price)","required_params":[],"optional_params":["query","search_text","filters","brand_ids","size_ids","status_ids","catalog_ids","color_ids","material_ids","price_from","price_to","currency","order","per_page","page","tld"],"params":[{"name":"query","type":"string","required":false,"description":"What to search for (item keywords). Give query and/or at least one *_ids/price filter.","on_invalid":"reject","example":"nike hoodie","aliases":["search_text"]},{"name":"order","type":"enum","required":false,"description":"Result ordering (the 4 Vinted UI orders, all live-verified; unknown values are ignored upstream).","on_invalid":"ignore","allowed_values":[{"value":"newest_first","label":"Newest first"},{"value":"relevance","label":"Relevance"},{"value":"price_low_to_high","label":"Price: low to high"},{"value":"price_high_to_low","label":"Price: high to low"}],"default":"newest_first"},{"name":"brand_ids","type":"array","required":false,"description":"Only these brands — numeric ids from the brand_search action (e.g. brand_search 'nike' → id).","on_invalid":"ignore","example":[14]},{"name":"catalog_ids","type":"array","required":false,"description":"Only these categories — ids from the categories action.","on_invalid":"ignore","example":[2050]},{"name":"size_ids","type":"array","required":false,"description":"Only these sizes — ids from the sizes action.","on_invalid":"ignore","example":[207]},{"name":"status_ids","type":"array","required":false,"description":"Only these conditions — ids from the conditions action.","on_invalid":"ignore","example":[6]},{"name":"color_ids","type":"array","required":false,"description":"Only these colors — ids from the colors action.","on_invalid":"ignore","example":[1]},{"name":"material_ids","type":"array","required":false,"description":"Only these materials — ids from the catalog_filters action.","on_invalid":"ignore"},{"name":"price_from","type":"number","required":false,"description":"Only items at or above this price.","on_invalid":"ignore","example":10,"minimum":0},{"name":"price_to","type":"number","required":false,"description":"Only items at or below this price.","on_invalid":"ignore","example":20,"minimum":0},{"name":"currency","type":"string","required":false,"description":"Currency code for price_from/price_to (defaults to the site's own currency).","on_invalid":"ignore","example":"EUR"},{"name":"filters","type":"object","required":false,"description":"Raw Vinted filter object (advanced — overrides all the individual *_ids/price params).","on_invalid":"ignore"},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3… — Vinted serves at most ~960 results per filter combination; narrow filters to go deeper).","on_invalid":"ignore","default":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1–96; Vinted caps larger values at 96).","on_invalid":"ignore","default":20,"minimum":1,"maximum":96}],"returns":"items[]{id, title, brand, brand_id, size, price{amount, currency}, url, url_full, photos, condition, seller{id, profile_url_full}} + pagination{current_page, total_pages, total_entries} (meta.pagination for paging). url is the site-relative path (/items/<id>-slug); url_full is the absolute link on the searched domain. seller.profile_url is null on this action (the listing page does not publish it); seller.profile_url_full is the absolute member page (https://www.vinted.<tld>/member/<id>). No listing time on this action: the catalog page does not publish one (uploaded_ts is null, listed in meta.warnings) and Vinted has no 'posted within' filter. For 'only recent listings' use order=newest_first and read uploaded_at from item_detail (or seller_items) for the rows you keep.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"nike","tld":"fr","per_page":20}},{"name":"item_detail","description":"Full Vinted item detail — title, price, photos, description, size, color, condition, material, category and a seller summary.","required_params":[],"optional_params":["id","item_id","url","path","tld"],"params":[{"name":"id","type":"string","required":false,"description":"Vinted item ID — the digits in the item URL (…/items/<id>-slug). Provide id OR url (one of the two is required).","on_invalid":"reject","example":"9134483984","aliases":["item_id"]},{"name":"url","type":"string","required":false,"description":"Full item URL — alternative to id.","on_invalid":"reject","example":"https://www.vinted.fr/items/9134483984","aliases":["path"]},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"item{id, url, title, description, brand, brand_id, category, catalog_id, color, size, material, price, availability, condition, is_reserved, is_hidden, can_buy, instant_buy, reservation, status_label, photos[], breadcrumbs[]{title, url, url_full}, url_full, attributes[]{key, label, value}, seller{id, login*, rating, feedback_count, item_count, profile_url*, rating_scale, rating_5, profile_url_full}} (* redacted unless include_pii). seller.rating is Vinted's 0-1 reputation (rating_scale=1); rating_5 = rating x 5, one decimal = the stars the profile page shows. breadcrumbs[].url is site-relative; url_full is absolute. uploaded_ts (epoch seconds) / uploaded_at (ISO-8601 UTC) = when the listing's photos were uploaded (Vinted's own photo timestamp on the seller's wardrobe row). Usually the publish time (matched the page's 'Added ... ago' label on 17 of 18 checked listings); EARLIER than publishing when the seller kept the listing as a draft first. Found when the listing is among the seller's 96 newest items, else null with a meta.warnings note; attributes[] upload_date keeps the site's relative label.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"9801094900"}},{"name":"seller","description":"seller profile (login/rating/item_count/feedback breakdown) — PII redactable","required_params":["id"],"optional_params":["user_id","seller_id","tld"],"params":[{"name":"id","type":"string","required":true,"description":"Vinted user ID — take it from catalog_search items[].seller.id or from a member URL (vinted.fr/member/<id>).","on_invalid":"reject","example":"52590768","aliases":["user_id","seller_id"]},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"seller{id, login*, rating, rating_scale, rating_5, feedback_count, positive/neutral/negative_feedback_count, item_count, city*, country_code, profile_url*, profile_url_full} (* redacted unless include_pii). rating is Vinted's feedback reputation on a 0-1 scale (rating_scale=1, e.g. 0.94); rating_5 = rating x 5 to one decimal = the stars the profile page shows (0.94 -> 4.7). profile_url is Vinted's own link (/member/<id>-<login>); profile_url_full is the member page's canonical (https://www.vinted.<tld>/member/<id>).","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"52590768"}},{"name":"seller_items","description":"a seller's wardrobe items","required_params":["id"],"optional_params":["user_id","seller_id","page","per_page","tld"],"params":[{"name":"id","type":"string","required":true,"description":"Vinted user ID — take it from catalog_search items[].seller.id or from a member URL (vinted.fr/member/<id>).","on_invalid":"reject","example":"52590768","aliases":["user_id","seller_id"]},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3… — Vinted serves at most ~960 results per filter combination; narrow filters to go deeper).","on_invalid":"ignore","default":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1–96; Vinted caps larger values at 96).","on_invalid":"ignore","default":20,"minimum":1,"maximum":96}],"returns":"items[]{id, title, url, price, price_with_discount, total_item_price, service_fee, brand, size, condition, is_reserved, is_closed, is_hidden, is_draft, is_processing, item_closing_action, transaction_permitted, is_heavy_bulky, stats_visible, favourite_count, view_count, promoted, uploaded_ts, uploaded_at, photos[], seller{id, login*, business, profile_url*, profile_url_full}, url_full} + pagination (meta.pagination for paging). uploaded_ts = Vinted's photo upload timestamp of the listing (epoch seconds; usually the publish time, earlier if the listing sat as a draft); uploaded_at = the same instant as ISO-8601 UTC. Status flags come straight from the source; a field the source omits is null.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"52590768"}},{"name":"seller_feedback","description":"feedback left for a seller (text/rating/reviewer)","required_params":["id"],"optional_params":["user_id","seller_id","page","per_page","tld"],"params":[{"name":"id","type":"string","required":true,"description":"Vinted user ID — take it from catalog_search items[].seller.id or from a member URL (vinted.fr/member/<id>).","on_invalid":"reject","example":"52590768","aliases":["user_id","seller_id"]},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3… — Vinted serves at most ~960 results per filter combination; narrow filters to go deeper).","on_invalid":"ignore","default":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1–96; Vinted caps larger values at 96).","on_invalid":"ignore","default":20,"minimum":1,"maximum":96}],"returns":"feedback[]{id, feedback, rating, rating_scale, created_at_ts, item_id, system_feedback, reviewer{id, login*}} + pagination (* redacted unless include_pii; meta.pagination for paging). rating is the review's stars, 1-5 (rating_scale=5) — a different scale from the seller's 0-1 reputation.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"52590768"}},{"name":"brand_search","description":"resolve a brand name -> brand_id (+ item/favourite counts)","required_params":[],"optional_params":["query","search_text","page","per_page","tld"],"params":[{"name":"query","type":"string","required":false,"description":"Brand name (or part of it) to look up (empty = the default brand list).","on_invalid":"reject","example":"nike","aliases":["search_text"]},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3… — Vinted serves at most ~960 results per filter combination; narrow filters to go deeper).","on_invalid":"ignore","default":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1–96; Vinted caps larger values at 96).","on_invalid":"ignore","default":20,"minimum":1,"maximum":96}],"returns":"brands[]{id, title, item_count, favourite_count} + pagination — feed the id into catalog_search brand_ids","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike","tld":"fr"}},{"name":"autocomplete","description":"search typeahead — partial query -> ranked Vinted search suggestions (localized per site)","required_params":["query"],"optional_params":["search_text","q","tld"],"params":[{"name":"query","type":"string","required":true,"description":"Partial search text to complete (e.g. 'nik' -> 'nike homme', 'nike enfant'). Returns the localized suggestions for the chosen tld.","on_invalid":"reject","example":"nik","aliases":["search_text","q"]},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"suggestions[]{title, score} — feed a title back into catalog_search query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"nike","tld":"fr"}},{"name":"similar","description":"items similar to a given item (items/{id}/more)","required_params":["id"],"optional_params":["item_id","content_source","tld"],"params":[{"name":"id","type":"string","required":true,"description":"Vinted item ID to find lookalikes for.","on_invalid":"reject","example":"9134483984","aliases":["item_id"]},{"name":"content_source","type":"string","required":false,"description":"Upstream recommendation source (advanced) — leave at the default.","on_invalid":"ignore","default":"similar_items"},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"items[] (catalog item shape, + url_full and seller.profile_url_full) similar to the given item — status flags, view_count, uploaded_ts, seller login and seller.profile_url are not in the source feed (null, listed in meta.warnings); seller.profile_url_full is the absolute member page built from seller.id","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"9801094900"}},{"name":"catalog_filters","description":"dynamic facets (size/brand/status/color/price/material + option ids) for a query/category","required_params":[],"optional_params":["query","search_text","catalog_ids","tld"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword whose facets you want (optional — empty = global).","on_invalid":"reject","example":"hoodie","aliases":["search_text"]},{"name":"catalog_ids","type":"array","required":false,"description":"Narrow facets to these category ids (from the categories action).","on_invalid":"ignore"},{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"filters[] — every facet (size/brand/condition/color/price/material) with its selectable option ids for the given query/category","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"hoodie"}},{"name":"categories","description":"Full Vinted category tree — id, title, code, URL and child categories for the selected country site.","required_params":[],"optional_params":["tld"],"params":[{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"categories[]{id, title, code, url, url_full, children[]} — ids feed catalog_search catalog_ids; url is site-relative (/catalog/<id>-<slug>), url_full is absolute on the chosen tld","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"tld":"fr"}},{"name":"colors","description":"color enum (id/title/hex/code)","required_params":[],"optional_params":["tld"],"params":[{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"colors[]{id, title, hex, code} — ids feed catalog_search color_ids","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"tld":"fr"}},{"name":"conditions","description":"item-condition enum (status id/title)","required_params":[],"optional_params":["tld"],"params":[{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"conditions[]{id, title} — ids feed catalog_search status_ids","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"countries","description":"country enum (id/iso/currency)","required_params":[],"optional_params":["tld"],"params":[{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"countries[]{id, iso, currency}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"sizes","description":"size groups + size ids","required_params":[],"optional_params":["tld"],"params":[{"name":"tld","type":"enum","required":false,"description":"Which Vinted site to query (sets currency and local listings).","on_invalid":"reject","allowed_values":[{"value":"fr","label":"vinted.fr — France (EUR)"},{"value":"de","label":"vinted.de — Germany (EUR)"},{"value":"es","label":"vinted.es — Spain (EUR)"},{"value":"it","label":"vinted.it — Italy (EUR)"},{"value":"nl","label":"vinted.nl — Netherlands (EUR)"},{"value":"be","label":"vinted.be — Belgium (EUR)"},{"value":"lt","label":"vinted.lt — Lithuania (EUR)"},{"value":"lu","label":"vinted.lu — Luxembourg (EUR)"},{"value":"at","label":"vinted.at — Austria (EUR)"},{"value":"pt","label":"vinted.pt — Portugal (EUR)"},{"value":"sk","label":"vinted.sk — Slovakia (EUR)"},{"value":"fi","label":"vinted.fi — Finland (EUR)"},{"value":"co.uk","label":"vinted.co.uk — United Kingdom (GBP)"},{"value":"pl","label":"vinted.pl — Poland (PLN)"},{"value":"cz","label":"vinted.cz — Czechia (CZK)"},{"value":"se","label":"vinted.se — Sweden (SEK)"},{"value":"ro","label":"vinted.ro — Romania (RON)"},{"value":"hu","label":"vinted.hu — Hungary (HUF)"},{"value":"dk","label":"vinted.dk — Denmark (DKK)"},{"value":"com","label":"vinted.com — United States (USD)"}],"default":"fr"}],"returns":"size_groups[]{id, title, sizes[]{id, title}} — ids feed catalog_search size_ids","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"vinterior","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Vinterior — vintage, antique & design furniture marketplace (UK)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/vinterior/v1","spec_available":true,"actions":[{"name":"search","description":"Search Vinterior's 438,968 live vintage, antique and design pieces — furniture, lighting, art, decor, textiles and garden — sold by vetted dealers in the UK and 36 other countries. Filters are the source's own: free text, the category tree, period, decade, style, material, colour, designer, maker, condition group, the country the piece ships from, furniture features, seller, GBP price, sale and free-UK-delivery flags, and width / height / depth in centimetres. Every row carries its own price in GBP (list and sale), measured dimensions, period and decade, maker and designer, where it ships from and who sells it. `total` is the source's exact count and every row of it is reachable by paging.","required_params":[],"optional_params":["query","category","period","decade","style","material","color","designer","brand","condition","ships_from","feature","seller","min_price","max_price","on_sale","free_uk_delivery","professional_seller","min_width","max_width","min_height","max_height","min_depth","max_depth","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Free text. Matched the way the site's own search matches it: category names first, then product type, title, designer, brand, material, colour, style, decade and SKU, with typo tolerance.","on_invalid":"reject","example":"mid century teak sideboard","aliases":["q","keywords","search"]},{"name":"category","type":"array","required":false,"description":"Category, as the source's own label path ('Furniture > Storage > Sideboards'), any single level of it that is unique ('Sideboards', 'Lighting'), or the lower-case slug form the categories action returns ('furniture/storage/sideboards'). 266 paths across 9 roots (Furniture 134,340 · Art 106,824 · Home Decor 106,339 · Lighting 64,412 · Textiles · Home Fixtures · Garden Decor · Garden Furniture · Garden Lighting). Several are OR-ed. A parent includes its children.","on_invalid":"reject","example":["Furniture > Storage > Sideboards"],"aliases":["categories","category_path"]},{"name":"period","type":"array","required":false,"description":"Period, the source's own 6 values: Mid 20th Century 132,164 · Late 20th Century 87,819 · 19th Century 65,150 · Early 20th Century 64,873 · 21st Century 20,830 · 18th Century and Earlier 14,697.","on_invalid":"reject","allowed_values":[{"value":"18th Century and Earlier","label":"18th Century and Earlier"},{"value":"19th Century","label":"19th Century"},{"value":"Early 20th Century","label":"Early 20th Century"},{"value":"Mid 20th Century","label":"Mid 20th Century"},{"value":"Late 20th Century","label":"Late 20th Century"},{"value":"21st Century","label":"21st Century"}],"example":["Mid 20th Century"]},{"name":"decade","type":"array","required":false,"description":"Decade of manufacture as the source writes it: '1960s' 62,737, '1800s' 61,184, '1970s' 55,234, '1950s' 38,474 … down to '1500s'. Note the source groups the whole 19th century as '1800s'.","on_invalid":"reject","example":["1960s"],"value_pattern":"\\d{3,4}s"},{"name":"style","type":"array","required":false,"description":"Style, the source's own 34 values (Mid Century Modern 42,118, Scandinavian Modern 23,449, Art Deco 11,960, Victorian 14,409, French Antiques 16,210 …). A listing can carry several.","on_invalid":"reject","allowed_values":[{"value":"Vintage","label":"Vintage"},{"value":"Antique","label":"Antique"},{"value":"Mid Century Modern","label":"Mid Century Modern"},{"value":"Contemporary","label":"Contemporary"},{"value":"Traditional","label":"Traditional"},{"value":"Scandinavian Modern","label":"Scandinavian Modern"},{"value":"Oriental","label":"Oriental"},{"value":"Modernist","label":"Modernist"},{"value":"French Antiques","label":"French Antiques"},{"value":"Victorian","label":"Victorian"},{"value":"Boho","label":"Boho"},{"value":"Art Deco","label":"Art Deco"},{"value":"Minimalist","label":"Minimalist"},{"value":"Upcycled","label":"Upcycled"},{"value":"Retro","label":"Retro"},{"value":"Art Nouveau","label":"Art Nouveau"},{"value":"Italian Antiques","label":"Italian Antiques"},{"value":"African","label":"African"},{"value":"Georgian","label":"Georgian"},{"value":"British Antiques","label":"British Antiques"},{"value":"Edwardian","label":"Edwardian"},{"value":"Rustic","label":"Rustic"},{"value":"Industrial","label":"Industrial"},{"value":"Postmodern","label":"Postmodern"},{"value":"Gothic","label":"Gothic"},{"value":"Chinese Antiques","label":"Chinese Antiques"},{"value":"Shabby Chic","label":"Shabby Chic"},{"value":"Bauhaus","label":"Bauhaus"},{"value":"Dutch Antiques","label":"Dutch Antiques"},{"value":"Danish Antiques","label":"Danish Antiques"},{"value":"Neoclassical","label":"Neoclassical"},{"value":"Swedish Antiques","label":"Swedish Antiques"},{"value":"Campaign","label":"Campaign"},{"value":"Hollywood Regency","label":"Hollywood Regency"}],"example":["Mid Century Modern"],"aliases":["vibe"]},{"name":"material","type":"array","required":false,"description":"Main material, one of the source's 106 values (Teak 9,598, Oak 15,669, Walnut 9,530, Rosewood, Murano Glass 8,119, Brass 25,598, Marble, Leather 8,358 …). Case-insensitive; call facets with facet=material for the full list with counts.","on_invalid":"reject","example":["Teak"]},{"name":"color","type":"array","required":false,"description":"Colour, the source's own 34 values.","on_invalid":"reject","allowed_values":[{"value":"Multicolor","label":"Multicolor"},{"value":"Brown","label":"Brown"},{"value":"Mahogany","label":"Mahogany"},{"value":"Black","label":"Black"},{"value":"White","label":"White"},{"value":"Gold","label":"Gold"},{"value":"Walnut","label":"Walnut"},{"value":"Blue","label":"Blue"},{"value":"Brass","label":"Brass"},{"value":"Silver","label":"Silver"},{"value":"Beige","label":"Beige"},{"value":"Oak","label":"Oak"},{"value":"Grey","label":"Grey"},{"value":"Transparent","label":"Transparent"},{"value":"Green","label":"Green"},{"value":"Red","label":"Red"},{"value":"Bronze","label":"Bronze"},{"value":"Yellow","label":"Yellow"},{"value":"Cream","label":"Cream"},{"value":"Pink","label":"Pink"},{"value":"Orange","label":"Orange"},{"value":"Chrome","label":"Chrome"},{"value":"Tan","label":"Tan"},{"value":"Ivory","label":"Ivory"},{"value":"Copper","label":"Copper"},{"value":"Purple","label":"Purple"},{"value":"Stone","label":"Stone"},{"value":"Turquoise","label":"Turquoise"},{"value":"Teal","label":"Teal"},{"value":"Coral","label":"Coral"},{"value":"Olive","label":"Olive"},{"value":"Indigo","label":"Indigo"},{"value":"Salmon","label":"Salmon"},{"value":"Lime","label":"Lime"}],"example":["Brown"],"aliases":["colour"]},{"name":"designer","type":"array","required":false,"description":"Designer exactly as the source names them ('Hans J Wegner', 'Arne Jacobsen', 'Poul Henningsen', 'Marcel Breuer', 'Slim Aarons' …), 3,742 names. Case-insensitive. An unknown name is INVALID_PARAM, with the closest names the source does carry.","on_invalid":"reject","example":["Arne Jacobsen"]},{"name":"brand","type":"array","required":false,"description":"Maker / brand as the source names it ('Ercol', 'G Plan', 'Thonet', 'Fritz Hansen', 'Louis Poulsen', 'Venini' …), 454 names.","on_invalid":"reject","example":["Ercol"],"aliases":["maker","manufacturer"]},{"name":"condition","type":"array","required":false,"description":"The source's age/condition group. The finer WEAR condition (Good, Excellent …) is on the listing page only — see detail.","on_invalid":"reject","allowed_values":[{"value":"Used","label":"Used — 388,046"},{"value":"Refurbished","label":"Refurbished — 38,761"},{"value":"New","label":"New — 11,428"}],"example":["Used"]},{"name":"ships_from","type":"array","required":false,"description":"Country the piece ships FROM, as the source names it: United Kingdom 196,790 · France 43,223 · Italy 42,986 · Netherlands 24,758 · Germany 23,457 · Belgium 20,408 · Denmark 11,851 and 30 more. This is where the piece is, not a delivery destination.","on_invalid":"reject","example":["United Kingdom"],"aliases":["country"]},{"name":"feature","type":"array","required":false,"description":"Furniture features, the source's own 13 values.","on_invalid":"reject","allowed_values":[{"value":"Nesting","label":"Nesting"},{"value":"Extendable","label":"Extendable"},{"value":"Drop Leaf","label":"Drop Leaf"},{"value":"Swivel","label":"Swivel"},{"value":"With Footstool","label":"With Footstool"},{"value":"Game & Card Table","label":"Game & Card Table"},{"value":"Folding","label":"Folding"},{"value":"Stackable","label":"Stackable"},{"value":"Modular","label":"Modular"},{"value":"Reclining","label":"Reclining"},{"value":"Tilt Top","label":"Tilt Top"},{"value":"Mirror Included","label":"Mirror Included"},{"value":"Sofa Bed","label":"Sofa Bed"}],"example":["Extendable"]},{"name":"seller","type":"string","required":false,"description":"Only this seller's listings, by the seller slug a row carries in seller.slug (e.g. 'ibonstudija').","on_invalid":"reject","example":"ibonstudija","aliases":["seller_slug"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in GBP — the price a buyer pays today (the sale price when there is one). GBP is the source's only native currency.","on_invalid":"reject","example":200,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in GBP.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"true = only discounted pieces (64,664 of 438,968).","on_invalid":"reject","example":true},{"name":"free_uk_delivery","type":"boolean","required":false,"description":"true = only pieces with free UK delivery (44,564).","on_invalid":"reject","example":true},{"name":"professional_seller","type":"boolean","required":false,"description":"true = professional dealers only (429,087); false = the private sellers (9,881).","on_invalid":"reject","example":true},{"name":"min_width","type":"number","required":false,"description":"Minimum width in CENTIMETRES.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_width","type":"number","required":false,"description":"Maximum width in CENTIMETRES.","on_invalid":"reject","example":220,"minimum":0},{"name":"min_height","type":"number","required":false,"description":"Minimum height in CENTIMETRES.","on_invalid":"reject","example":50,"minimum":0},{"name":"max_height","type":"number","required":false,"description":"Maximum height in CENTIMETRES.","on_invalid":"reject","example":120,"minimum":0},{"name":"min_depth","type":"number","required":false,"description":"Minimum depth in CENTIMETRES.","on_invalid":"reject","example":30,"minimum":0},{"name":"max_depth","type":"number","required":false,"description":"Maximum depth in CENTIMETRES.","on_invalid":"reject","example":60,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Order of results. Prices sort on the price a buyer pays today, in GBP.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's own ranking"},{"value":"newest","label":"Newest listed first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"}],"default":"relevance","example":"relevance"},{"name":"page","type":"integer","required":false,"description":"1-based page. Paging is unwindowed: every row of the result is reachable, and a page past the end comes back EMPTY rather than repeating the last one (measured: 438,968 rows at 48 per page end on page 9,146; pages 9,147 and 20,000 are empty). `has_more` says when to stop.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["per_page","limit","max_results"]}],"returns":"{total, page, page_size, pages, has_more, sort, query, listings[{id, sku, url, title, currency, price_gbp, list_price_gbp, sale_price_gbp, on_sale, discount_pct, category{path, slug, level1..level4}, product_type, condition, period, decade, styles[], designer, brand, material, color, country_of_origin, dimensions_cm{width, height, depth}, features[], shape, set_of, number_of_seats/drawers/doors/shelves, art{movements, subjects, signed_by_artist}, certificate_of_authenticity, professionally_refurbished/reupholstered/cleaned, image, published_at, can_be_added_to_basket, free_uk_delivery, free_london_delivery, ships_from{city, country}, seller{name, slug, url, is_professional}}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"sideboard","period":["Mid 20th Century"],"ships_from":["United Kingdom"],"max_price":3000,"page_size":24}},{"name":"detail","description":"One live listing in full, from its own page: the full description, the seller's condition report and extra measurements, the wear condition, the price stored and the price printed (GBP), whether the price includes UK import taxes, period, decade, origin, maker, designer, material, dimensions, every photo, the fixed UK delivery price and the Greater London quote, the seller's estimated delivery time and collection option, and the seller card (name, professional or private, rating, review count and star breakdown, sales count, selling since, location) with the latest reviews.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"The listing, as the `id` a search row carries (7 digits, e.g. 1043739), its 8-digit SKU (75625378), or the full vinterior.co listing URL. Only LIVE listings resolve: a sold or withdrawn piece answers NOT_FOUND.","on_invalid":"reject","example":"1043739","aliases":["listing_id","sku","url"]}],"returns":"{listing{…every search field…, description, condition_report, additional_dimensions, price_shown, price_shown_gbp, list_price_shown, ld_json_price, price_includes_import_taxes, wear_condition, manufactured, size_class, images[], image_count, has_video, listed_at, available, sold, breadcrumbs[], location{text, country_code, in_london}, delivery{uk_fixed_price_label, uk_fixed_price_gbp, greater_london{…}, delivered_by, free_uk_delivery, local_pickup, estimated_delivery_time, free_collection_available}, seller{name, slug, url, storefront_url, kind, seller_type, rating, reviews_count, rating_breakdown, sales_count, selling_since, located_in, ships_from, in_uk, on_holiday}, seller_reviews[{rating, date, item_reviewed, text, buyer_first_name}]}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"1043739"}},{"name":"delivery","description":"The delivery price of one live listing to ONE destination — any of the 23 the listing page offers: the 12 UK regions, eight European countries, the United States, rest of Europe and rest of the world — in GBP, exactly as the page itself resolves it: the destination's own quote, else the listing's fixed UK price for UK mainland regions, else 'Request a quote'. The answer says which.","required_params":["id","destination"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"The listing, as the `id` a search row carries (7 digits, e.g. 1043739), its 8-digit SKU (75625378), or the full vinterior.co listing URL. Only LIVE listings resolve: a sold or withdrawn piece answers NOT_FOUND.","on_invalid":"reject","example":"1043739","aliases":["listing_id","sku","url"]},{"name":"destination","type":"enum","required":true,"description":"Where the piece would be delivered — ONE of the 23 destinations the listing page's own selector offers (the 12 UK regions, Belgium, France, Germany, Hungary, Republic of Ireland, Italy, Netherlands, Spain, United States, Rest of Continental Europe, Rest of the world). One call prices one destination; for several, make one call each. The answer is stamped with its destination and never depends on where the API call is made from.","on_invalid":"reject","allowed_values":[{"value":"United Kingdom - Greater London","label":"UK - Greater London"},{"value":"United Kingdom - Northern Ireland","label":"UK - Northern Ireland"},{"value":"United Kingdom - Scotland","label":"UK - Scotland"},{"value":"United Kingdom - Wales","label":"UK - Wales"},{"value":"United Kingdom - North East","label":"UK - North East"},{"value":"United Kingdom - North West","label":"UK - North West"},{"value":"United Kingdom - Yorkshire and the Humber","label":"UK - Yorkshire and the Humber"},{"value":"United Kingdom - West Midlands","label":"UK - West Midlands"},{"value":"United Kingdom - East Midlands","label":"UK - East Midlands"},{"value":"United Kingdom - South West","label":"UK - South West"},{"value":"United Kingdom - South East","label":"UK - South East"},{"value":"United Kingdom - East of England","label":"UK - East of England"},{"value":"Belgium","label":"Belgium"},{"value":"France","label":"France"},{"value":"Germany","label":"Germany"},{"value":"Hungary","label":"Hungary"},{"value":"Republic of Ireland","label":"Republic of Ireland"},{"value":"Italy","label":"Italy"},{"value":"Netherlands","label":"Netherlands"},{"value":"Spain","label":"Spain"},{"value":"United States","label":"United States"},{"value":"Rest of Continental Europe","label":"Rest of Continental Europe"},{"value":"Rest of the world","label":"Rest of the world"}],"example":"United Kingdom - Greater London","aliases":["ship_to"]}],"returns":"{listing{id, sku, url, title, price_gbp, ships_from}, currency, destination, destination_label, price_gbp, price_label, is_free, quote_on_request, source, delivery_on_day_of_choice, uk_fixed_price_read}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"1043739","destination":"United Kingdom - Greater London"}},{"name":"facets","description":"Counts per value for any of the source's facets — category, period, decade, style, designer, brand, material, colour, condition, ships-from country, seller city, features, shape, set size, seats — over the whole catalogue or under the same filters search takes, plus GBP price and dimension statistics.","required_params":["facet"],"optional_params":["max_values","query","category","period","decade","style","material","color","designer","brand","condition","ships_from","feature","seller","min_price","max_price","on_sale","free_uk_delivery","professional_seller","min_width","max_width","min_height","max_height","min_depth","max_depth"],"params":[{"name":"facet","type":"array","required":true,"description":"Which facet counts to return. Several at once cost one call.","on_invalid":"reject","allowed_values":[{"value":"category","label":"category_paths"},{"value":"category_level1","label":"category_hierarchy.lvl0"},{"value":"category_level2","label":"category_hierarchy.lvl1"},{"value":"category_level3","label":"category_hierarchy.lvl2"},{"value":"period","label":"period_name"},{"value":"decade","label":"year_of_manufacture"},{"value":"style","label":"vibe_names"},{"value":"designer","label":"designed_by_name"},{"value":"brand","label":"brand_name"},{"value":"material","label":"main_material_name"},{"value":"color","label":"color_name"},{"value":"condition","label":"age_group_name"},{"value":"ships_from","label":"country_from_address"},{"value":"city","label":"address_city"},{"value":"feature","label":"feature_names"},{"value":"shape","label":"shape_name"},{"value":"seating_shape","label":"seating_shape_names"},{"value":"set_of","label":"set_of"},{"value":"number_of_seats","label":"number_of_seats"}],"example":["period","designer","material"],"aliases":["facets"]},{"name":"max_values","type":"integer","required":false,"description":"Values per facet, most frequent first (1-250).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":250},{"name":"query","type":"string","required":false,"description":"Free text. Matched the way the site's own search matches it: category names first, then product type, title, designer, brand, material, colour, style, decade and SKU, with typo tolerance.","on_invalid":"reject","example":"mid century teak sideboard","aliases":["q","keywords","search"]},{"name":"category","type":"array","required":false,"description":"Category, as the source's own label path ('Furniture > Storage > Sideboards'), any single level of it that is unique ('Sideboards', 'Lighting'), or the lower-case slug form the categories action returns ('furniture/storage/sideboards'). 266 paths across 9 roots (Furniture 134,340 · Art 106,824 · Home Decor 106,339 · Lighting 64,412 · Textiles · Home Fixtures · Garden Decor · Garden Furniture · Garden Lighting). Several are OR-ed. A parent includes its children.","on_invalid":"reject","example":["Furniture > Storage > Sideboards"],"aliases":["categories","category_path"]},{"name":"period","type":"array","required":false,"description":"Period, the source's own 6 values: Mid 20th Century 132,164 · Late 20th Century 87,819 · 19th Century 65,150 · Early 20th Century 64,873 · 21st Century 20,830 · 18th Century and Earlier 14,697.","on_invalid":"reject","allowed_values":[{"value":"18th Century and Earlier","label":"18th Century and Earlier"},{"value":"19th Century","label":"19th Century"},{"value":"Early 20th Century","label":"Early 20th Century"},{"value":"Mid 20th Century","label":"Mid 20th Century"},{"value":"Late 20th Century","label":"Late 20th Century"},{"value":"21st Century","label":"21st Century"}],"example":["Mid 20th Century"]},{"name":"decade","type":"array","required":false,"description":"Decade of manufacture as the source writes it: '1960s' 62,737, '1800s' 61,184, '1970s' 55,234, '1950s' 38,474 … down to '1500s'. Note the source groups the whole 19th century as '1800s'.","on_invalid":"reject","example":["1960s"],"value_pattern":"\\d{3,4}s"},{"name":"style","type":"array","required":false,"description":"Style, the source's own 34 values (Mid Century Modern 42,118, Scandinavian Modern 23,449, Art Deco 11,960, Victorian 14,409, French Antiques 16,210 …). A listing can carry several.","on_invalid":"reject","allowed_values":[{"value":"Vintage","label":"Vintage"},{"value":"Antique","label":"Antique"},{"value":"Mid Century Modern","label":"Mid Century Modern"},{"value":"Contemporary","label":"Contemporary"},{"value":"Traditional","label":"Traditional"},{"value":"Scandinavian Modern","label":"Scandinavian Modern"},{"value":"Oriental","label":"Oriental"},{"value":"Modernist","label":"Modernist"},{"value":"French Antiques","label":"French Antiques"},{"value":"Victorian","label":"Victorian"},{"value":"Boho","label":"Boho"},{"value":"Art Deco","label":"Art Deco"},{"value":"Minimalist","label":"Minimalist"},{"value":"Upcycled","label":"Upcycled"},{"value":"Retro","label":"Retro"},{"value":"Art Nouveau","label":"Art Nouveau"},{"value":"Italian Antiques","label":"Italian Antiques"},{"value":"African","label":"African"},{"value":"Georgian","label":"Georgian"},{"value":"British Antiques","label":"British Antiques"},{"value":"Edwardian","label":"Edwardian"},{"value":"Rustic","label":"Rustic"},{"value":"Industrial","label":"Industrial"},{"value":"Postmodern","label":"Postmodern"},{"value":"Gothic","label":"Gothic"},{"value":"Chinese Antiques","label":"Chinese Antiques"},{"value":"Shabby Chic","label":"Shabby Chic"},{"value":"Bauhaus","label":"Bauhaus"},{"value":"Dutch Antiques","label":"Dutch Antiques"},{"value":"Danish Antiques","label":"Danish Antiques"},{"value":"Neoclassical","label":"Neoclassical"},{"value":"Swedish Antiques","label":"Swedish Antiques"},{"value":"Campaign","label":"Campaign"},{"value":"Hollywood Regency","label":"Hollywood Regency"}],"example":["Mid Century Modern"],"aliases":["vibe"]},{"name":"material","type":"array","required":false,"description":"Main material, one of the source's 106 values (Teak 9,598, Oak 15,669, Walnut 9,530, Rosewood, Murano Glass 8,119, Brass 25,598, Marble, Leather 8,358 …). Case-insensitive; call facets with facet=material for the full list with counts.","on_invalid":"reject","example":["Teak"]},{"name":"color","type":"array","required":false,"description":"Colour, the source's own 34 values.","on_invalid":"reject","allowed_values":[{"value":"Multicolor","label":"Multicolor"},{"value":"Brown","label":"Brown"},{"value":"Mahogany","label":"Mahogany"},{"value":"Black","label":"Black"},{"value":"White","label":"White"},{"value":"Gold","label":"Gold"},{"value":"Walnut","label":"Walnut"},{"value":"Blue","label":"Blue"},{"value":"Brass","label":"Brass"},{"value":"Silver","label":"Silver"},{"value":"Beige","label":"Beige"},{"value":"Oak","label":"Oak"},{"value":"Grey","label":"Grey"},{"value":"Transparent","label":"Transparent"},{"value":"Green","label":"Green"},{"value":"Red","label":"Red"},{"value":"Bronze","label":"Bronze"},{"value":"Yellow","label":"Yellow"},{"value":"Cream","label":"Cream"},{"value":"Pink","label":"Pink"},{"value":"Orange","label":"Orange"},{"value":"Chrome","label":"Chrome"},{"value":"Tan","label":"Tan"},{"value":"Ivory","label":"Ivory"},{"value":"Copper","label":"Copper"},{"value":"Purple","label":"Purple"},{"value":"Stone","label":"Stone"},{"value":"Turquoise","label":"Turquoise"},{"value":"Teal","label":"Teal"},{"value":"Coral","label":"Coral"},{"value":"Olive","label":"Olive"},{"value":"Indigo","label":"Indigo"},{"value":"Salmon","label":"Salmon"},{"value":"Lime","label":"Lime"}],"example":["Brown"],"aliases":["colour"]},{"name":"designer","type":"array","required":false,"description":"Designer exactly as the source names them ('Hans J Wegner', 'Arne Jacobsen', 'Poul Henningsen', 'Marcel Breuer', 'Slim Aarons' …), 3,742 names. Case-insensitive. An unknown name is INVALID_PARAM, with the closest names the source does carry.","on_invalid":"reject","example":["Arne Jacobsen"]},{"name":"brand","type":"array","required":false,"description":"Maker / brand as the source names it ('Ercol', 'G Plan', 'Thonet', 'Fritz Hansen', 'Louis Poulsen', 'Venini' …), 454 names.","on_invalid":"reject","example":["Ercol"],"aliases":["maker","manufacturer"]},{"name":"condition","type":"array","required":false,"description":"The source's age/condition group. The finer WEAR condition (Good, Excellent …) is on the listing page only — see detail.","on_invalid":"reject","allowed_values":[{"value":"Used","label":"Used — 388,046"},{"value":"Refurbished","label":"Refurbished — 38,761"},{"value":"New","label":"New — 11,428"}],"example":["Used"]},{"name":"ships_from","type":"array","required":false,"description":"Country the piece ships FROM, as the source names it: United Kingdom 196,790 · France 43,223 · Italy 42,986 · Netherlands 24,758 · Germany 23,457 · Belgium 20,408 · Denmark 11,851 and 30 more. This is where the piece is, not a delivery destination.","on_invalid":"reject","example":["United Kingdom"],"aliases":["country"]},{"name":"feature","type":"array","required":false,"description":"Furniture features, the source's own 13 values.","on_invalid":"reject","allowed_values":[{"value":"Nesting","label":"Nesting"},{"value":"Extendable","label":"Extendable"},{"value":"Drop Leaf","label":"Drop Leaf"},{"value":"Swivel","label":"Swivel"},{"value":"With Footstool","label":"With Footstool"},{"value":"Game & Card Table","label":"Game & Card Table"},{"value":"Folding","label":"Folding"},{"value":"Stackable","label":"Stackable"},{"value":"Modular","label":"Modular"},{"value":"Reclining","label":"Reclining"},{"value":"Tilt Top","label":"Tilt Top"},{"value":"Mirror Included","label":"Mirror Included"},{"value":"Sofa Bed","label":"Sofa Bed"}],"example":["Extendable"]},{"name":"seller","type":"string","required":false,"description":"Only this seller's listings, by the seller slug a row carries in seller.slug (e.g. 'ibonstudija').","on_invalid":"reject","example":"ibonstudija","aliases":["seller_slug"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price in GBP — the price a buyer pays today (the sale price when there is one). GBP is the source's only native currency.","on_invalid":"reject","example":200,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in GBP.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["price_max"]},{"name":"on_sale","type":"boolean","required":false,"description":"true = only discounted pieces (64,664 of 438,968).","on_invalid":"reject","example":true},{"name":"free_uk_delivery","type":"boolean","required":false,"description":"true = only pieces with free UK delivery (44,564).","on_invalid":"reject","example":true},{"name":"professional_seller","type":"boolean","required":false,"description":"true = professional dealers only (429,087); false = the private sellers (9,881).","on_invalid":"reject","example":true},{"name":"min_width","type":"number","required":false,"description":"Minimum width in CENTIMETRES.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_width","type":"number","required":false,"description":"Maximum width in CENTIMETRES.","on_invalid":"reject","example":220,"minimum":0},{"name":"min_height","type":"number","required":false,"description":"Minimum height in CENTIMETRES.","on_invalid":"reject","example":50,"minimum":0},{"name":"max_height","type":"number","required":false,"description":"Maximum height in CENTIMETRES.","on_invalid":"reject","example":120,"minimum":0},{"name":"min_depth","type":"number","required":false,"description":"Minimum depth in CENTIMETRES.","on_invalid":"reject","example":30,"minimum":0},{"name":"max_depth","type":"number","required":false,"description":"Maximum depth in CENTIMETRES.","on_invalid":"reject","example":60,"minimum":0}],"returns":"{total, facets{<name>[{value, count}]}, distinct{<name>: n}, statistics{price_gbp{min, max, avg}, width_cm{…}, height_cm{…}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"facet":["period","designer","material"],"category":["Furniture > Seating"]}},{"name":"categories","description":"The source's own category tree (9 roots, 266 paths) with the live number of listings in each, the label path that search's `category` accepts and a slug.","required_params":[],"optional_params":["root"],"params":[{"name":"root","type":"string","required":false,"description":"Only this root's subtree, by label or slug ('Lighting', 'home-decor').","on_invalid":"reject","example":"Lighting"}],"returns":"{total_paths, categories[{name, path, slug, level, count, children[…]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"root":"Lighting"}},{"name":"suggest","description":"Search suggestions from the site's own suggestion index (14,869 phrases), with how popular each phrase is, how many listings it finds and its main category.","required_params":["query"],"optional_params":["page_size"],"params":[{"name":"query","type":"string","required":true,"description":"What the user has typed so far.","on_invalid":"reject","example":"sideb","aliases":["q","prefix"]},{"name":"page_size","type":"integer","required":false,"description":"Suggestions to return, 1-50.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"{query, total, suggestions[{query, popularity, listings, top_category, categories[]}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"sideb","page_size":10}},{"name":"seller","description":"One seller's live inventory: how many pieces they list, where they ship from, whether they are a professional dealer, the split of their stock by category and period, and a page of their listings (newest first by default).","required_params":["id"],"optional_params":["sort","page","page_size"],"params":[{"name":"id","type":"string","required":true,"description":"The seller slug a listing row carries in seller.slug ('ibonstudija'), or the vinterior.co/sellers/… URL.","on_invalid":"reject","example":"ibonstudija","aliases":["seller","slug","seller_slug","url"]},{"name":"sort","type":"enum","required":false,"description":"Order of the listings.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's own ranking"},{"value":"newest","label":"Newest listed first"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Dearest first"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"1-based page. Paging is unwindowed: every row of the result is reachable, and a page past the end comes back EMPTY rather than repeating the last one (measured: 438,968 rows at 48 per page end on page 9,146; pages 9,147 and 20,000 are empty). `has_more` says when to stop.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page, 1-100.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["per_page","limit","max_results"]}],"returns":"{seller{name, slug, url, is_professional, ships_from{city, country}, live_listings, categories[{value, count}], periods[{value, count}], price_gbp{min, max, avg}}, page, page_size, pages, has_more, listings[…]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"ibonstudija","page_size":20}}]},{"name":"vivino","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Vivino API — live wine data scraper for the world's largest wine database and marketplace: wine search by grape, region, country, vintage, price and rating band; the wine record with its rating, rating count, per-vintage ratings, grape composition, food pairings and taste structure; the merchants selling it and their prices; and the published reviews — no API key, no login","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/vivino/v1","spec_available":true,"actions":[{"name":"search","description":"Search Vivino's wine database. Filters by free text, grape, region, country of origin, wine type, vintage year, price band and rating band, and every filter here was measured to change the result count. Returns the vintage id and the wine id, the rating Vivino prints on the card AND the all-vintages pool beside it, the region/winery/style, and the cheapest live merchant offer.","required_params":[],"optional_params":["query","market","currency","wine_type","country_codes","grape_ids","region_ids","wine_style_ids","winery_ids","food_ids","years","min_rating","min_ratings_count","price_min","price_max","natural_only","discount_only","order_by","order","page","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Free text: a wine name, a producer, a grape or a region ('catena zapata', 'barolo', 'malbec', 'grower champagne').","on_invalid":"reject","example":"malbec","aliases":["q","search_term"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"},{"name":"currency","type":"string","required":false,"description":"ISO currency for the prices, e.g. USD, EUR, GBP, JPY. Defaults to the market's own currency (us -> USD, de -> EUR).","on_invalid":"ignore","example":"USD"},{"name":"wine_type","type":"enum","required":false,"description":"Wine type. Repeatable (comma-separated).","on_invalid":"reject","allowed_values":[{"value":"red","label":"Red"},{"value":"white","label":"White"},{"value":"sparkling","label":"Sparkling"},{"value":"rose","label":"Rose"},{"value":"dessert","label":"Dessert"},{"value":"fortified","label":"Fortified"}],"example":"red"},{"name":"country_codes","type":"array","required":false,"description":"Country of ORIGIN of the wine, ISO-2 (ar, fr, it, es). This is the wine's origin, not the storefront — use `market` for the storefront.","on_invalid":"ignore","example":"ar","aliases":["country","countries"]},{"name":"grape_ids","type":"array","required":false,"description":"Grape ids from the `grapes` action (9 = Malbec).","on_invalid":"ignore","example":"9"},{"name":"region_ids","type":"array","required":false,"description":"Region ids (454 = Mendoza). From a search result's region.id or the `region/detail` action.","on_invalid":"ignore","example":"454"},{"name":"wine_style_ids","type":"array","required":false,"description":"Style ids from the `wine_styles` action.","on_invalid":"ignore","example":"895"},{"name":"winery_ids","type":"array","required":false,"description":"Winery ids. REFINES a search — the source rejects it as the only filter, so pass it with a query or another filter.","on_invalid":"ignore","example":"1437"},{"name":"food_ids","type":"array","required":false,"description":"Food-pairing ids from the `foods` action (4 = Beef).","on_invalid":"ignore","example":"4"},{"name":"years","type":"array","required":false,"description":"Vintage year(s), e.g. 2019.","on_invalid":"ignore","example":"2019","aliases":["vintage_years"]},{"name":"min_rating","type":"number","required":false,"description":"Lowest acceptable rating, 1-5.","on_invalid":"ignore","example":4.2,"minimum":1,"maximum":5},{"name":"min_ratings_count","type":"integer","required":false,"description":"Only wines with at least this many ratings. REFINES only.","on_invalid":"ignore","example":1000,"minimum":1},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the requested currency.","on_invalid":"ignore","example":20,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the requested currency.","on_invalid":"ignore","example":80,"minimum":0},{"name":"natural_only","type":"boolean","required":false,"description":"Only natural wines.","on_invalid":"ignore","default":false},{"name":"discount_only","type":"boolean","required":false,"description":"Only wines currently discounted.","on_invalid":"ignore","default":false},{"name":"order_by","type":"enum","required":false,"description":"Sort order. Measured to reorder the result set, not merely be echoed back.","on_invalid":"reject","allowed_values":[{"value":"ratings_average","label":"Rating, high to low"},{"value":"ratings_count","label":"Number of ratings, high to low"},{"value":"price","label":"Price, low to high"},{"value":"discount_percent","label":"Biggest discount first"},{"value":"relevance","label":"Relevance to the query"},{"value":"best_picks","label":"Vivino's own pick order"}],"example":"ratings_average"},{"name":"order","type":"enum","required":false,"description":"Sort direction. Defaults to desc, except order_by=price which defaults to asc.","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Descending"},{"value":"asc","label":"Ascending"}]},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page, 1-50. The source refuses more than 50 (HTTP 400).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"records_matched, wines[]{vintage_id, wine_id, name, year, url, wine_type, rating, ratings_count, wine_rating, wine_ratings_count, region, country, winery, style, taste, best_price, prices[]}. NOTE: `rating`/`ratings_count` are the figures Vivino prints on the card, which for a vintage it has not yet rated on its own are the WINE-level pool (measured on 16 of 18 rows). `wine/detail` returns the vintage's own numbers.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"barolo","per_page":10}},{"name":"wine/detail","description":"One VINTAGE in full: the vintage's own rating, rating count and review count (and the flag saying whether Vivino rates this vintage on its own), the wine-level pool beside it, the ratings histogram, the global/country/region/winery ranks, the grape composition in percent, food pairings, the crowd taste structure, both published alcohol figures, the drinking window and the critic scores.","required_params":["vintage_id"],"optional_params":["market","include_taste"],"params":[{"name":"vintage_id","type":"integer","required":false,"description":"The VINTAGE to read — one specific year of one wine. Accepts the numeric vintage id from search, or a vivino.com wine URL. Vintage, not wine: the same wine rates and prices differently per year.","on_invalid":"reject","example":150304508,"aliases":["id","url"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"},{"name":"include_taste","type":"boolean","required":false,"description":"Fetch the crowd taste structure and flavour groups. Vivino serves these on a separate route, so this costs one extra upstream request; set false to skip it.","on_invalid":"ignore","default":true}],"returns":"A vintage record: vintage_rating, vintage_ratings_count, vintage_reviews_count, vintage_rating_status, wine_rating, wine_ratings_count, ratings_distribution, ranking, grapes, grape_composition[]{grape_id,name,percent}, food_pairings, taste{structure,flavors}, alcohol_percent_wine, alcohol_percent_vintage, closure, drinking_window, critic_reviews[], region, country, winery, style.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"vintage_id":2459253}},{"name":"wine/vintages","description":"Every year of the same wine with that year's OWN rating, rating count and review count. This is the row a collector compares, and it is the honest answer to 'is the 2019 better than the 2018' — the search card cannot answer it.","required_params":["vintage_id"],"optional_params":["market"],"params":[{"name":"vintage_id","type":"integer","required":false,"description":"The VINTAGE to read — one specific year of one wine. Accepts the numeric vintage id from search, or a vivino.com wine URL. Vintage, not wine: the same wine rates and prices differently per year.","on_invalid":"reject","example":150304508,"aliases":["id","url"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"}],"returns":"wine_id, wine_name, wine_rating, wine_ratings_count, vintages[]{vintage_id, year, rating, ratings_count, reviews_count, rating_status, url} newest year first.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"vintage_id":2459253}},{"name":"wine/prices","description":"The marketplace half: every merchant Vivino lists for one vintage, with its price, bottle size, discount and link. Also the median, cheapest and dearest offer. The merchant set is per storefront — the US and DE markets share none.","required_params":["vintage_id"],"optional_params":["market","currency"],"params":[{"name":"vintage_id","type":"integer","required":false,"description":"The VINTAGE to read — one specific year of one wine. Accepts the numeric vintage id from search, or a vivino.com wine URL. Vintage, not wine: the same wine rates and prices differently per year.","on_invalid":"reject","example":150304508,"aliases":["id","url"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"},{"name":"currency","type":"string","required":false,"description":"ISO currency for the prices, e.g. USD, EUR, GBP, JPY. Defaults to the market's own currency (us -> USD, de -> EUR).","on_invalid":"ignore","example":"USD"}],"returns":"vintage_id, market_country, market_state, currency, median_price, min_price, max_price, best_price, offers[]{merchant{id,name,country,state,shipping_note}, price{amount,currency,discounted_from,discount_percent_source,discount_percent_computed,bottle_volume_ml,bottle_type,url}}. Current prices only — Vivino does not publish price history on the logged-out surface.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"vintage_id":2459253}},{"name":"wine/reviews","description":"The published reviews for a wine, newest first, with the star rating, the note and the reviewer Vivino shows on the page. Pass `year` to read one vintage's reviews.","required_params":["wine_id"],"optional_params":["year","market","page","per_page"],"params":[{"name":"wine_id","type":"integer","required":false,"description":"The WINE (all vintages pooled). Accepts the numeric wine id from search or a vivino.com wine URL.","on_invalid":"reject","example":1869,"aliases":["id","url"]},{"name":"year","type":"integer","required":false,"description":"Restrict to one vintage year.","on_invalid":"ignore","example":2017},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"},{"name":"page","type":"integer","required":false,"description":"1-based page number.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Reviews per page, 1-50. Asking for more returns 50.","on_invalid":"ignore","default":25,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"wine_id, reviews[]{review_id, rating, note, language, created_at, reviewer{id,alias,handle,profile_url,is_featured,is_premium}, vintage_id, vintage_year}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"wine_id":82199,"per_page":10}},{"name":"wine/highlights","description":"The badges and ranks Vivino awards a vintage: global rank, rank within its country, its region and its winery, plus the critic scores behind them.","required_params":["vintage_id"],"optional_params":["market"],"params":[{"name":"vintage_id","type":"integer","required":false,"description":"The VINTAGE to read — one specific year of one wine. Accepts the numeric vintage id from search, or a vivino.com wine URL. Vintage, not wine: the same wine rates and prices differently per year.","on_invalid":"reject","example":150304508,"aliases":["id","url"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"}],"returns":"vintage_id, ranking{global,country,region,winery}{rank,out_of,description}, highlights[]{type,message}.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"vintage_id":2459253}},{"name":"wines/batch","description":"Up to 50 vintages in ONE call — how a catalogue of thousands is refreshed without spending a call per wine. `full=false` returns the identity and rating block at about a fifth of the bytes.","required_params":["vintage_ids"],"optional_params":["market","full"],"params":[{"name":"vintage_ids","type":"array","required":true,"description":"Vintage ids, up to 50 per call.","on_invalid":"reject","example":"150304508,164942636","aliases":["ids"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"},{"name":"full","type":"boolean","required":false,"description":"true = the complete vintage record; false = identity, year and ratings only, about 5x smaller.","on_invalid":"ignore","default":true}],"returns":"wines[] in the same shape as wine/detail (full=true) or an identity+rating row (full=false), plus requested/returned counts and missing_ids[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"vintage_ids":[2459253,2459252]}},{"name":"winery/wines","description":"A winery's catalogue: every wine it makes, with the wine-level rating and the best-rated vintage of each.","required_params":["winery_id"],"optional_params":["market"],"params":[{"name":"winery_id","type":"integer","required":true,"description":"Winery id, from any search result's winery.id.","on_invalid":"reject","example":1437,"aliases":["id"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"}],"returns":"winery_id, wines[]{wine_id, name, url, wine_type, wine_rating, wine_ratings_count, region, country, style, best_vintage_id, best_vintage_year}.","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"winery_id":11472}},{"name":"region/detail","description":"One wine region: its country, parent and sub-regions, its top grapes and how many wines and wineries Vivino holds for it.","required_params":["region_id"],"optional_params":["market"],"params":[{"name":"region_id","type":"integer","required":true,"description":"Region id (454 = Mendoza).","on_invalid":"reject","example":454,"aliases":["id"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"}],"returns":"region_id, name, country, parent_region_id, description, wines_count, wineries_count, ratings_count, ratings_average, sub_regions[], top_grapes[].","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"region_id":504}},{"name":"grapes","description":"The grape enum behind `grape_ids` — 2229 grape varieties with the id, the name and how many wines Vivino holds for each.","required_params":[],"optional_params":["query","market","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Filter the list by name, case-insensitive.","on_invalid":"ignore","example":"malbec","aliases":["q"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"},{"name":"per_page","type":"integer","required":false,"description":"Results per page, 1-50. The source refuses more than 50 (HTTP 400).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"grapes[]{id, name, seo_name, wines_count, parent_grape_id}.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"nebbiolo"}},{"name":"foods","description":"The food-pairing enum behind `food_ids` — the 23 pairings Vivino uses.","required_params":[],"optional_params":["market"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"}],"returns":"foods[]{id, name, seo_name}.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"us"}},{"name":"wine_styles","description":"The style enum behind `wine_style_ids` — 747 regional styles such as 'Argentinian Mendoza Malbec'.","required_params":[],"optional_params":["query","market","per_page"],"params":[{"name":"query","type":"string","required":false,"description":"Filter the list by name, case-insensitive.","on_invalid":"ignore","example":"barolo","aliases":["q"]},{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"},{"name":"per_page","type":"integer","required":false,"description":"Results per page, 1-50. The source refuses more than 50 (HTTP 400).","on_invalid":"ignore","default":25,"example":25,"minimum":1,"maximum":50,"aliases":["limit"]}],"returns":"wine_styles[]{id, name, regional_name, varietal_name, seo_name}.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"barolo"}},{"name":"countries","description":"The country enum behind `country_codes` — 253 countries with how many wines and wineries Vivino holds for each, and their most used grapes.","required_params":[],"optional_params":["market"],"params":[{"name":"market","type":"enum","required":false,"description":"Which Vivino storefront to read. This changes the answer: the US and DE storefronts returned 1740 vs 740 matches for the same search and share ZERO merchants (measured 2026-09-23). Prices and availability are per storefront.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States storefront"},{"value":"de","label":"Germany / EU storefront"}],"default":"us","example":"us"}],"returns":"countries[]{code, name, wines_count, wineries_count, regions_count, top_grapes[]}.","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"market":"us"}}]},{"name":"voila","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Voilà groceries","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/voila/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Voilà online grocery catalogue (CAD). Voilà serves Ontario and Quebec; prices and range follow the delivery region of the postal code you pass.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Search text, up to 100 characters.","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Products requested per page, 1-48. The source can return fewer (duplicate rows across its groups are dropped).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page of the same call (same query, filters and location).","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the facets[id=brands] list of a previous answer.","on_invalid":"reject","example":"Lactantia"},{"name":"postal_code","type":"string","required":false,"description":"Delivery postal code. Voilà sets prices and assortment from the region of this postal code (the first three characters are enough). Without it the answer uses the region the site assigns to a visitor without a location and says store_defaulted=true.","on_invalid":"reject","example":"H2Y 1C6"},{"name":"latitude","type":"number","required":false,"description":"Optional delivery latitude (with longitude), passed to the site; it does not choose the region.","on_invalid":"reject","example":45.5017},{"name":"longitude","type":"number","required":false,"description":"Optional delivery longitude (with latitude).","on_invalid":"reject","example":-73.5673}],"returns":"Products with CAD shelf price, unit price, promotions, availability, brand, pack size, image and url; facets; next_cursor; location (region used, store_defaulted).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","limit":24}},{"name":"category","description":"Browse one Voilà category by its id from categories.","required_params":["category_id"],"optional_params":[],"params":[{"name":"category_id","type":"string","required":true,"description":"Category UUID from the categories action.","on_invalid":"reject","example":"9d083199-36dc-42b2-8793-6bd1cfe5823d"},{"name":"limit","type":"integer","required":false,"description":"Products requested per page, 1-48. The source can return fewer (duplicate rows across its groups are dropped).","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":48},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page of the same call (same query, filters and location).","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Source ordering.","on_invalid":"reject","allowed_values":[{"value":"favorite","label":"favorite"},{"value":"priceAscending","label":"priceAscending"},{"value":"priceDescending","label":"priceDescending"},{"value":"pricePerAscending","label":"pricePerAscending"},{"value":"pricePerDescending","label":"pricePerDescending"}],"default":"favorite","example":"priceAscending"},{"name":"brand","type":"string","required":false,"description":"Exact brand value from the facets[id=brands] list of a previous answer.","on_invalid":"reject","example":"Lactantia"},{"name":"postal_code","type":"string","required":false,"description":"Delivery postal code. Voilà sets prices and assortment from the region of this postal code (the first three characters are enough). Without it the answer uses the region the site assigns to a visitor without a location and says store_defaulted=true.","on_invalid":"reject","example":"H2Y 1C6"},{"name":"latitude","type":"number","required":false,"description":"Optional delivery latitude (with longitude), passed to the site; it does not choose the region.","on_invalid":"reject","example":45.5017},{"name":"longitude","type":"number","required":false,"description":"Optional delivery longitude (with latitude).","on_invalid":"reject","example":-73.5673}],"returns":"Same product rows as search, plus the source category product count.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category_id":"9d083199-36dc-42b2-8793-6bd1cfe5823d"}},{"name":"product","description":"Full Voilà product sheet: description, ingredients, allergens, nutrition table, every label field, all images, promotions with terms.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"Product id from search (`id`), or a voila.ca product URL.","on_invalid":"reject","example":"243255EA","aliases":["product_id","url"]},{"name":"postal_code","type":"string","required":false,"description":"Delivery postal code. Voilà sets prices and assortment from the region of this postal code (the first three characters are enough). Without it the answer uses the region the site assigns to a visitor without a location and says store_defaulted=true.","on_invalid":"reject","example":"H2Y 1C6"},{"name":"latitude","type":"number","required":false,"description":"Optional delivery latitude (with longitude), passed to the site; it does not choose the region.","on_invalid":"reject","example":45.5017},{"name":"longitude","type":"number","required":false,"description":"Optional delivery longitude (with latitude).","on_invalid":"reject","example":-73.5673}],"returns":"The search row fields plus description, fields, ingredients, allergens, nutrition, breadcrumbs, images and gtin (only when the label prints an EAN).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"243255EA"}},{"name":"categories","description":"Voilà category tree (top level and one child level) with the ids the category action takes.","required_params":[],"optional_params":[],"params":[],"returns":"Category tree: id, name, retailer_category_id, children.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{}}]},{"name":"vtex","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"VTEX Store API — products, SKUs, EAN barcodes, seller prices and stock from any public VTEX store (Latin America's leading e-commerce platform)","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/vtex/v1","spec_available":true,"actions":[{"name":"search","description":"Search or browse any VTEX store's catalog: keyword, category, brand, price range and sort, with every SKU's EAN, each seller's sale/list price, stock flag and the exact total result count.","required_params":["store"],"optional_params":["query","category_id","brand_id","min_price","max_price","sort","page","page_size","sales_channel","search_api"],"params":[{"name":"store","type":"string","required":true,"description":"The VTEX store's public domain or any URL on it (e.g. www.chedraui.com.mx, https://www.plazavea.com.pe/leche). Works for any store running on VTEX whose public catalog API is open. IP addresses, ports and internal hostnames are rejected.","on_invalid":"reject","example":"www.chedraui.com.mx"},{"name":"query","type":"string","required":false,"description":"Full-text search term in the store's language (e.g. leche, dipirona, zapatillas). Omit to browse a category or brand.","on_invalid":"reject","example":"leche","aliases":["q","keyword"]},{"name":"category_id","type":"string","required":false,"description":"Category filter: the category path of ids exactly as the categories action and search rows return it in `category_path_ids` (e.g. /1/105/10501/), or a single top-level department id (e.g. 1). Catalog search only.","on_invalid":"reject","example":"/1/105/10501/"},{"name":"brand_id","type":"integer","required":false,"description":"Brand filter by VTEX brand id (from search rows' `brand_id` or the brands action). An unknown id returns an honest empty result. Catalog search only.","on_invalid":"reject","example":813,"minimum":1},{"name":"min_price","type":"number","required":false,"description":"Lowest selling price, in the store's currency.","on_invalid":"reject","example":10,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest selling price, in the store's currency.","on_invalid":"reject","example":50,"minimum":0},{"name":"sort","type":"enum","required":false,"description":"Result order. Intelligent Search supports relevance, price_asc and price_desc only; it ranks a multi-SKU product by the store's own price key, which can differ from the row's `price`.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (store default)"},{"value":"price_asc","label":"Price: low to high"},{"value":"price_desc","label":"Price: high to low"},{"value":"top_sellers","label":"Best sellers"},{"value":"newest","label":"Newest releases"},{"value":"best_discount","label":"Biggest discount"},{"value":"name_asc","label":"Name A–Z"},{"value":"name_desc","label":"Name Z–A"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3…). VTEX serves only the first 2,550 rows of any one search; narrow the query with filters to go deeper.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":128},{"name":"page_size","type":"integer","required":false,"description":"Products per page (1–50).","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":50},{"name":"sales_channel","type":"integer","required":false,"description":"VTEX sales channel (trade policy) id. Omit for the store's default channel (1). A channel can change the assortment; a channel the store does not expose is rejected.","on_invalid":"reject","example":1,"minimum":1,"maximum":99},{"name":"search_api","type":"enum","required":false,"description":"Which VTEX search to use. 'catalog' (default) supports every filter and sort and returns the exact total. 'intelligent_search' is the store's newer relevance search and also returns the cash/PIX `spot_price`; it supports query, price range and price sort only.","on_invalid":"reject","allowed_values":[{"value":"catalog","label":"Catalog search (all filters)"},{"value":"intelligent_search","label":"Intelligent Search (relevance + spot price)"}],"default":"catalog"}],"returns":"products[]{product_id, name, brand, brand_id, link_text, url, category_path, category_path_ids, categories[], release_date, description, specifications{}, clusters[], price, list_price, spot_price, currency, in_stock, discount_pct, items[]{sku_id, name, ean, ref_id, measurement_unit, unit_multiplier, variations{}, images[], sellers[]{seller_id, seller_name, is_default, price, list_price, price_without_discount, spot_price, available_quantity, stock_quantity_capped, in_stock, installments_best{}, price_valid_until, promotions[]}}} + meta.total / page / has_more / last_page","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store":"www.chedraui.com.mx","query":"leche","page_size":10}},{"name":"product","description":"Full detail of one VTEX product by product id, slug/URL, SKU id or EAN: every SKU with EAN and variations, every seller's offer (sale, list and pre-discount price, stock, best interest-free instalment), specifications, categories and images.","required_params":["store"],"optional_params":["product_id","link_text","sku_id","ean","sales_channel"],"params":[{"name":"store","type":"string","required":true,"description":"The VTEX store's public domain or any URL on it (e.g. www.chedraui.com.mx, https://www.plazavea.com.pe/leche). Works for any store running on VTEX whose public catalog API is open. IP addresses, ports and internal hostnames are rejected.","on_invalid":"reject","example":"www.chedraui.com.mx"},{"name":"product_id","type":"string","required":false,"description":"VTEX product id, exactly as search rows return it in `product_id`.","on_invalid":"reject","example":"3855683"},{"name":"link_text","type":"string","required":false,"description":"Product slug (`link_text` in search rows) or the full product page URL (…/<slug>/p).","on_invalid":"reject","example":"leche-bove-leche-con-cafe-organica-330ml-3855683","aliases":["slug"]},{"name":"sku_id","type":"string","required":false,"description":"VTEX SKU id (`items[].sku_id`).","on_invalid":"reject","example":"3855683"},{"name":"ean","type":"string","required":false,"description":"EAN / GTIN barcode of one SKU.","on_invalid":"reject","example":"7501639313538","aliases":["gtin","barcode"]},{"name":"sales_channel","type":"integer","required":false,"description":"VTEX sales channel (trade policy) id. Omit for the store's default channel (1). A channel can change the assortment; a channel the store does not expose is rejected.","on_invalid":"reject","example":1,"minimum":1,"maximum":99}],"returns":"product{product_id, name, brand, brand_id, link_text, url, category_path, category_path_ids, categories[], release_date, description, specifications{}, clusters[], price, list_price, spot_price, currency, in_stock, discount_pct, items[]{sku_id, name, ean, ref_id, measurement_unit, unit_multiplier, variations{}, images[], sellers[]{seller_id, seller_name, is_default, price, list_price, price_without_discount, spot_price, available_quantity, stock_quantity_capped, in_stock, installments_best{}, price_valid_until, promotions[]}}} — pass exactly one of product_id, link_text, sku_id, ean","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"store":"www.chedraui.com.mx"}},{"name":"products","description":"Up to 50 VTEX products in ONE upstream request, by product ids or by EAN barcodes — same full shape as product, plus the list of ids/EANs the store did not return.","required_params":["store"],"optional_params":["product_ids","eans","sales_channel"],"params":[{"name":"store","type":"string","required":true,"description":"The VTEX store's public domain or any URL on it (e.g. www.chedraui.com.mx, https://www.plazavea.com.pe/leche). Works for any store running on VTEX whose public catalog API is open. IP addresses, ports and internal hostnames are rejected.","on_invalid":"reject","example":"www.chedraui.com.mx"},{"name":"product_ids","type":"array","required":false,"description":"Up to 50 VTEX product ids, comma-separated or a list — fetched in ONE upstream request.","on_invalid":"reject","example":"3855683,3104239"},{"name":"eans","type":"array","required":false,"description":"Up to 50 EAN / GTIN barcodes, comma-separated or a list — fetched in ONE upstream request.","on_invalid":"reject","example":"7501639313538,7501020565937"},{"name":"sales_channel","type":"integer","required":false,"description":"VTEX sales channel (trade policy) id. Omit for the store's default channel (1). A channel can change the assortment; a channel the store does not expose is rejected.","on_invalid":"reject","example":1,"minimum":1,"maximum":99}],"returns":"products[]{product_id, name, brand, brand_id, link_text, url, category_path, category_path_ids, categories[], release_date, description, specifications{}, clusters[], price, list_price, spot_price, currency, in_stock, discount_pct, items[]{sku_id, name, ean, ref_id, measurement_unit, unit_multiplier, variations{}, images[], sellers[]{seller_id, seller_name, is_default, price, list_price, price_without_discount, spot_price, available_quantity, stock_quantity_capped, in_stock, installments_best{}, price_valid_until, promotions[]}}} + not_found[] — pass product_ids OR eans","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store":"www.chedraui.com.mx"}},{"name":"categories","description":"The store's category tree, flattened: id, name, depth, parent, full name path and the id path you pass to search as category_id.","required_params":["store"],"optional_params":["depth"],"params":[{"name":"store","type":"string","required":true,"description":"The VTEX store's public domain or any URL on it (e.g. www.chedraui.com.mx, https://www.plazavea.com.pe/leche). Works for any store running on VTEX whose public catalog API is open. IP addresses, ports and internal hostnames are rejected.","on_invalid":"reject","example":"www.chedraui.com.mx"},{"name":"depth","type":"integer","required":false,"description":"How many category levels to return (1 = departments only).","on_invalid":"reject","default":2,"example":2,"minimum":1,"maximum":5}],"returns":"categories[]{id, name, depth, parent_id, path, category_path_ids, has_children, url}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"store":"www.olimpica.com","depth":1}},{"name":"facets","description":"Filter vocabulary and counts for a search term: departments, categories (with ids and counts), brands with counts, price ranges and specification filters.","required_params":["store","query"],"optional_params":[],"params":[{"name":"store","type":"string","required":true,"description":"The VTEX store's public domain or any URL on it (e.g. www.chedraui.com.mx, https://www.plazavea.com.pe/leche). Works for any store running on VTEX whose public catalog API is open. IP addresses, ports and internal hostnames are rejected.","on_invalid":"reject","example":"www.chedraui.com.mx"},{"name":"query","type":"string","required":true,"description":"Search term to compute the facets for.","on_invalid":"reject","example":"leche","aliases":["q","keyword"]}],"returns":"departments[]{name, count}, categories[]{id, name, depth, count}, brands[]{name, count}, price_ranges[]{name, slug, count}, specifications[]{name, values[]{name, count}}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"store":"www.chedraui.com.mx","query":"leche"}},{"name":"brands","description":"Every brand registered in the store with its VTEX brand id (the id search accepts as brand_id), optionally filtered by name.","required_params":["store"],"optional_params":["name_contains","page","limit"],"params":[{"name":"store","type":"string","required":true,"description":"The VTEX store's public domain or any URL on it (e.g. www.chedraui.com.mx, https://www.plazavea.com.pe/leche). Works for any store running on VTEX whose public catalog API is open. IP addresses, ports and internal hostnames are rejected.","on_invalid":"reject","example":"www.chedraui.com.mx"},{"name":"name_contains","type":"string","required":false,"description":"Only brands whose name contains this text (case- and accent-insensitive).","on_invalid":"reject","example":"lala"},{"name":"page","type":"integer","required":false,"description":"Page number (1, 2, 3…).","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Brands per page (1–1000).","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":1000}],"returns":"brands[]{id, name, is_active} + meta.total","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store":"www.chedraui.com.mx"}},{"name":"store_info","description":"Confirms a domain is a VTEX store and returns its currency, locale, country, time zone, default sales channel, total catalog size and which search APIs are open.","required_params":["store"],"optional_params":["sales_channel"],"params":[{"name":"store","type":"string","required":true,"description":"The VTEX store's public domain or any URL on it (e.g. www.chedraui.com.mx, https://www.plazavea.com.pe/leche). Works for any store running on VTEX whose public catalog API is open. IP addresses, ports and internal hostnames are rejected.","on_invalid":"reject","example":"www.chedraui.com.mx"},{"name":"sales_channel","type":"integer","required":false,"description":"VTEX sales channel (trade policy) id. Omit for the store's default channel (1). A channel can change the assortment; a channel the store does not expose is rejected.","on_invalid":"reject","example":1,"minimum":1,"maximum":99}],"returns":"platform, store, currency, currency_symbol, culture, country, time_zone, sales_channel{id, name}, catalog_api_open, total_products, intelligent_search_open","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"store":"www.farmacity.com"}}]},{"name":"vuln-intel","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Vulnerability & Dependency Intelligence API — OSV.dev package vulnerability lookup, GitHub Advisory (GHSA) search, CVE/GHSA detail with CVSS and EPSS scores, CISA Known Exploited Vulnerabilities (KEV) catalog, and batch scanning","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/vuln-intel/v1","spec_available":true,"actions":[{"name":"package_vulns","description":"All known vulnerabilities affecting a package (by name+ecosystem, optionally pinned to an installed version) OR a git commit — via OSV.dev. The dependency-audit core.","required_params":["package","ecosystem"],"optional_params":["version","commit"],"params":[{"name":"package","type":"string","required":true,"description":"Package name as published in its registry (npm 'lodash', PyPI 'django', Maven 'group:artifact' e.g. 'org.apache.logging.log4j:log4j-core', Go import path). Required unless you pass `commit` instead.","on_invalid":"reject","example":"org.apache.logging.log4j:log4j-core","aliases":["name","pkg"]},{"name":"ecosystem","type":"enum","required":true,"description":"Package ecosystem / registry. Case-insensitive; common aliases map (cargo->crates.io, pip/python->PyPI is via the 'pypi' key, composer->Packagist). Required with `package` (omit when querying by `commit`).","on_invalid":"reject","allowed_values":[{"value":"alpine","label":"-> OSV 'Alpine'"},{"value":"android","label":"-> OSV 'Android'"},{"value":"bitnami","label":"-> OSV 'Bitnami'"},{"value":"cargo","label":"-> OSV 'crates.io'"},{"value":"composer","label":"-> OSV 'Packagist'"},{"value":"crates.io","label":"-> OSV 'crates.io'"},{"value":"debian","label":"-> OSV 'Debian'"},{"value":"githubactions","label":"-> OSV 'GitHub Actions'"},{"value":"go","label":"-> OSV 'Go'"},{"value":"hex","label":"-> OSV 'Hex'"},{"value":"maven","label":"-> OSV 'Maven'"},{"value":"npm","label":"-> OSV 'npm'"},{"value":"nuget","label":"-> OSV 'NuGet'"},{"value":"packagist","label":"-> OSV 'Packagist'"},{"value":"pub","label":"-> OSV 'Pub'"},{"value":"pypi","label":"-> OSV 'PyPI'"},{"value":"rubygems","label":"-> OSV 'RubyGems'"},{"value":"swifturl","label":"-> OSV 'SwiftURL'"},{"value":"ubuntu","label":"-> OSV 'Ubuntu'"}],"example":"Maven"},{"name":"version","type":"string","required":false,"description":"Exact installed version to test (e.g. '2.14.1', '4.17.15'). Omit to return ALL known vulnerabilities for the package across every version.","on_invalid":"ignore","example":"2.14.1"},{"name":"commit","type":"string","required":false,"description":"Git commit hash to query instead of package+version+ecosystem (OSV resolves which vulns affect that exact source revision).","on_invalid":"ignore","example":"6879efc2c1596d11a6a6ad296f80063b558d5e0f"}],"returns":"package, ecosystem, version, vuln_count, severity_summary{by_severity:{critical,high,moderate,low,unknown}, highest_severity, total} (per-package rollup, no extra hop), vulnerabilities[] (id, aliases, cve_ids, summary, severity_label, cvss_vector/score, fixed_versions, affected[] ranges, references); meta.record_count = vuln_count, meta.highest_severity","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"package":"org.apache.logging.log4j:log4j-core","ecosystem":"Maven","version":"2.14.1"}},{"name":"vuln_detail","description":"Full detail for one vulnerability by OSV id, GHSA id, or CVE id. OSV is the base record; if it resolves to a GHSA the response is enriched with GitHub's numeric CVSS base score, EPSS exploitation probability, and CWEs.","required_params":["id"],"optional_params":[],"params":[{"name":"id","type":"string","required":true,"description":"A vulnerability id: OSV id (GHSA-…, PYSEC-…, GO-…, RUSTSEC-…) or a CVE (CVE-2021-44228). CVE ids are resolved via OSV's alias index. Case-insensitive.","on_invalid":"reject","example":"GHSA-jfh8-c2jp-5v3q","aliases":["vuln_id","cve","cve_id","ghsa","ghsa_id"]}],"returns":"vulnerability{} — normalized OSV record (id, aliases, cve_ids, summary, details, cvss_*, affected[], fixed_versions, references, exploit_references[] (PoC/exploit links from refs: exploit-db/packetstorm/metasploit)) plus ghsa{} enrichment (cvss_score, epss_percentage/percentile, cwes) when available","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"GHSA-jfh8-c2jp-5v3q"}},{"name":"advisory_search","description":"Search the GitHub Advisory Database (GHSA) by ecosystem, severity, CVE, free text, type. Cursor-paginated (meta.next_cursor).","required_params":[],"optional_params":["ecosystem","severity","cve_id","query","type","sort","direction","per_page","cursor"],"params":[{"name":"ecosystem","type":"enum","required":false,"description":"Filter advisories by GitHub ecosystem token (note GitHub's spelling: 'pip' for Python, 'rust' for crates, 'actions' for GitHub Actions).","on_invalid":"reject","allowed_values":[{"value":"actions","label":"actions"},{"value":"composer","label":"composer"},{"value":"erlang","label":"erlang"},{"value":"go","label":"go"},{"value":"maven","label":"maven"},{"value":"npm","label":"npm"},{"value":"nuget","label":"nuget"},{"value":"other","label":"other"},{"value":"pip","label":"pip"},{"value":"pub","label":"pub"},{"value":"rubygems","label":"rubygems"},{"value":"rust","label":"rust"},{"value":"swift","label":"swift"}],"example":"pip"},{"name":"severity","type":"enum","required":false,"description":"Filter advisories by qualitative severity.","on_invalid":"reject","allowed_values":[{"value":"low","label":"Low"},{"value":"medium","label":"Medium"},{"value":"high","label":"High"},{"value":"critical","label":"Critical"}],"example":"critical"},{"name":"cve_id","type":"string","required":false,"description":"Return only the advisory(ies) for this exact CVE id.","on_invalid":"ignore","example":"CVE-2021-44228","aliases":["cve"]},{"name":"query","type":"string","required":false,"description":"Free-text search across advisory summary/description.","on_invalid":"ignore","example":"log4j","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"Advisory review state. 'reviewed' (default) = GitHub-curated; 'malware' = malicious-package advisories.","on_invalid":"reject","allowed_values":[{"value":"reviewed","label":"GitHub-reviewed (default)"},{"value":"unreviewed","label":"Not yet reviewed"},{"value":"malware","label":"Malware advisories"}],"example":"reviewed"},{"name":"sort","type":"enum","required":false,"description":"Sort field for the advisory list.","on_invalid":"reject","allowed_values":[{"value":"published","label":"Publish date (default)"},{"value":"updated","label":"Last update"}],"example":"published"},{"name":"direction","type":"enum","required":false,"description":"Sort direction.","on_invalid":"reject","allowed_values":[{"value":"desc","label":"Descending (default)"},{"value":"asc","label":"Ascending"}],"example":"desc"},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 30). Larger values are clamped.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor for the next page of advisories — pass the value from meta.next_cursor. (GHSA paginates by cursor, not page number.)","on_invalid":"ignore","example":"Y3Vyc29yOnYyOpK0…","aliases":["after"]}],"returns":"advisories[] (ghsa_id, cve_id, summary, severity, cvss_score, cwes, vulnerabilities[] affected pkgs, references, published_at); meta has record_count, has_more, next_cursor, rate_limit_remaining","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"ecosystem":"pip","severity":"critical","per_page":5}},{"name":"kev_check","description":"Is a CVE in the CISA Known-Exploited-Vulnerabilities catalog (actively exploited in the wild)? Returns the KEV entry when listed.","required_params":["cve_id"],"optional_params":[],"params":[{"name":"cve_id","type":"string","required":true,"description":"The CVE id to look up in the CISA Known-Exploited-Vulnerabilities catalog. Case-insensitive.","on_invalid":"reject","example":"CVE-2021-44228","aliases":["cve","id"]}],"returns":"cve_id, in_kev (bool), entry{} (vendor_project, product, vulnerability_name, date_added, due_date, required_action, known_ransomware_campaign_use) when listed; catalog_version, catalog_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"cve_id":"CVE-2021-44228"}},{"name":"kev_list","description":"Browse / filter the full CISA KEV catalog by vendor, product, or ransomware flag, with page pagination.","required_params":[],"optional_params":["vendor","product","ransomware","page","per_page"],"params":[{"name":"vendor","type":"string","required":false,"description":"Filter KEV entries by vendor/project (substring, case-insensitive).","on_invalid":"ignore","example":"Microsoft","aliases":["vendor_project"]},{"name":"product","type":"string","required":false,"description":"Filter KEV entries by product (substring, case-insensitive).","on_invalid":"ignore","example":"Windows"},{"name":"ransomware","type":"enum","required":false,"description":"Filter KEV entries by whether the CVE is known-used in ransomware campaigns (CISA's knownRansomwareCampaignUse field).","on_invalid":"reject","allowed_values":[{"value":"Known","label":"Used in ransomware campaigns"},{"value":"Unknown","label":"No known ransomware use"}],"example":"Known"},{"name":"page","type":"integer","required":false,"description":"1-based page number for the KEV list. Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"per_page","type":"integer","required":false,"description":"Results per page (1-100, default 30). Larger values are clamped.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100,"aliases":["page_size"]}],"returns":"entries[] (normalized KEV records), catalog_version, total (after filters), catalog_count (full); meta has record_count, page, per_page, has_more, next_page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"vendor":"Microsoft","per_page":5}},{"name":"exploits","description":"Public exploit / PoC lookup for a CVE via the Exploit-DB (Offensive Security) database (keyless, CVE-indexed). Answers 'is there a weaponized public exploit?' — has_public_exploit + each entry's edb_id, type (remote/local/webapps/dos), platform, verified flag, date_published, and deep links (exploit_db_url + upstream source_url).","required_params":["cve_id"],"optional_params":["verified_only"],"params":[{"name":"cve_id","type":"string","required":true,"description":"The CVE id to look up in the Exploit-DB (Offensive Security) public exploit/PoC database. Case-insensitive. Returns every exploit row whose 'codes' column references this CVE.","on_invalid":"reject","example":"CVE-2021-44228","aliases":["cve","id"]},{"name":"verified_only","type":"boolean","required":false,"description":"If true, return only Exploit-DB entries marked verified (reproduced by the Exploit-DB team). Default false = all entries.","on_invalid":"ignore","default":false,"example":false}],"returns":"cve_id, has_public_exploit (bool), exploit_count, exploits[] (edb_id, description, type, platform, author, date_published, verified, codes[], exploit_db_url, source_url); meta.has_public_exploit, meta.exploitdb_rows","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"cve_id":"CVE-2021-44228"}},{"name":"batch","description":"Bulk-scan up to 100 package/commit queries in one call (OSV querybatch), each hydrated to full vulnerability detail by default.","required_params":["queries"],"optional_params":["hydrate"],"params":[{"name":"queries","type":"array","required":true,"description":"Array of up to 100 query objects. Each is either {package, ecosystem, version?} or {commit}. Returns one result group per query (order preserved), each hydrated to full vulnerability detail.","on_invalid":"reject","example":[{"package":"lodash","ecosystem":"npm","version":"4.17.15"},{"commit":"6879efc2c1596d11a6a6ad296f80063b558d5e0f"}]},{"name":"hydrate","type":"boolean","required":false,"description":"If true (default) each batch hit is expanded to the full normalized vulnerability via OSV /vulns/{id}. Set false for a faster id-only response (returns {id, modified} per hit).","on_invalid":"ignore","default":true,"example":true}],"returns":"results[] (one per input query, order preserved: query, vuln_count, vulnerabilities[]); meta.record_count = total vulns across all queries","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"queries":[{"package":"lodash","ecosystem":"npm","version":"4.17.15"},{"package":"django","ecosystem":"PyPI","version":"3.0.0"}]}}]},{"name":"waitrose","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Waitrose UK Groceries","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/waitrose/v1","spec_available":true,"actions":[{"name":"search","description":"Search the first public UK grocery result window. GTINs and the label sheet require detail. Source sorting and later pages are unavailable.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Grocery search term.","on_invalid":"reject","example":"milk","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Maximum returned products from the first public result window; no later-page traversal.","on_invalid":"reject","default":48,"example":12,"minimum":1,"maximum":48},{"name":"offers_only","type":"boolean","required":false,"description":"Only products with published promotions.","on_invalid":"reject","default":false,"example":true},{"name":"organic","type":"boolean","required":false,"description":"Apply Waitrose Organic filter.","on_invalid":"reject","default":false,"example":true}],"returns":"products, shelf price in GBP, unit price, promotions, separate public myWaitrose prices, availability and source total. First window only; sponsored rows excluded.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","limit":12}},{"name":"category","description":"First public window of a groceries category path.","required_params":["category"],"optional_params":[],"params":[{"name":"category","type":"string","required":true,"description":"Path after /ecom/shop/browse/, beginning groceries/.","on_invalid":"reject","example":"groceries/fresh_and_chilled/milk_butter_and_eggs/milk"},{"name":"limit","type":"integer","required":false,"description":"Maximum returned products from the first public result window; no later-page traversal.","on_invalid":"reject","default":48,"example":12,"minimum":1,"maximum":48}],"returns":"products, total, facets and subcategories, with shelf price, unit price and promotions. First window only; no pagination.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"groceries/fresh_and_chilled/milk_butter_and_eggs/milk"}},{"name":"offers","description":"Public regular offers or the public My Waitrose Offers list. Personal vouchers are account-specific and excluded.","required_params":[],"optional_params":[],"params":[{"name":"kind","type":"enum","required":false,"description":"Regular offers or publicly listed myWaitrose offers.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All offers"},{"value":"member","label":"My Waitrose Offers"}],"default":"all","example":"member"},{"name":"limit","type":"integer","required":false,"description":"Maximum returned products from the first public result window; no later-page traversal.","on_invalid":"reject","default":48,"example":12,"minimum":1,"maximum":48}],"returns":"products and total; shelf price remains separate from member_price/member_program. First window only.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"kind":"member"}},{"name":"detail","description":"Full public product detail. Supply id or url.","required_params":[],"optional_params":[],"params":[{"name":"id","type":"string","required":false,"description":"Composite product id from search; preserve leading zeros.","on_invalid":"reject","example":"053457-26759-26760"},{"name":"url","type":"string","required":false,"description":"HTTPS Waitrose product URL, alternatively to id.","on_invalid":"reject","example":"https://www.waitrose.com/ecom/products/essential-british-free-range-semi-skimmed-milk-4-pints/053457-26759-26760"}],"returns":"One product: shelf price, unit price, public member offers, barcodes as strings, checksum-valid GTINs, availability, ingredients, nutrition, full label, packaging, storage, restrictions and published alcohol/wine facts.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.waitrose.com/ecom/products/essential-british-free-range-semi-skimmed-milk-4-pints/053457-26759-26760"}}]},{"name":"walgreens","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Walgreens API scraper — search walgreens.com, read the full US drugstore product record (shelf price, promotions, UPC/GTIN-14, online and in-store availability, the exact review average, active and inactive ingredients, warnings and shipping restrictions), browse any category with real pagination, and resolve up to 50 product ids in a single call. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/walgreens/v1","spec_available":true,"actions":[{"name":"search","description":"Search walgreens.com by keyword and get up to 72 products with price, promotion, unit price, online and in-store availability, UPC and GTIN-14, brand, size, half-star rating and review count, plus the active and inactive ingredient lists for OTC items. MEASURED LIMIT: this surface publishes ONE page — `?p=2` is silently ignored by Walgreens (same 72 rows, same first product), so `search` returns at most 72 products and reports the source's own total beside them. For the full depth of a shelf use `category/products`, which really pages. When a keyword is itself a Walgreens aisle (for example `toothpaste`), the site redirects to that aisle; the engine follows it into the category listing and `resolved_via` tells you which route answered.","required_params":["query"],"optional_params":["max_results"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword to search, as a shopper would type it (`ibuprofen`, `blood pressure monitor`, `sunscreen spf 50`).","on_invalid":"reject","example":"ibuprofen","aliases":["q","keyword","search"]},{"name":"max_results","type":"integer","required":false,"description":"Trim the answer to the first N products. The surface itself publishes at most 72, so values above 72 are clamped to 72.","on_invalid":"reject","default":72,"example":24,"minimum":1,"maximum":72,"aliases":["limit"]}],"returns":"results[]{product_id, sku_id, title, display_title, url, brand, brand_id, size, product_type, upc, gtin, store_upc, pln, image, image_thumb, currency, price, price_display, price_form, regular_price, regular_price_display, sale_price, sale_price_display, on_sale, source_on_sale_flag, multi_buy{quantity, total, unit_price_implied}, regular_multi_buy, single_unit_price, unit_price, unit_price_unit, price_rule, rating_half_star, rating_display, review_count, in_stock, online_status, store_status, clearance, own_brand, age_restricted, fsa_hsa_eligible, promo_label, coupon_label, coupon_terms, sitewide_offer, active_ingredients[], inactive_ingredients[], category_ids{tier1, tier2, tier3}, same_day_purchase_limit}, query, matched_keyword, total, online_total, in_store_total, returned, page_size_published, has_more_on_source, resolved_via, category_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"ibuprofen","max_results":24}},{"name":"category/products","description":"List the products of one or more Walgreens categories (tier-3 aisle ids, the same ids every product row reports as `category_ids.tier3`) with REAL pagination: up to 100 products per page and up to 15 pages. Several category ids in one call are merged into a single result set by Walgreens. Each row carries the same price, promotion, UPC/GTIN, availability and ingredient fields as `search`. MEASURED CEILING: Walgreens refuses page 16 and above at every page size, so at most 1,500 products of a category are reachable even when it reports more; `last_page`, `page_cap` and `has_more` say exactly where you are.","required_params":["category_id"],"optional_params":["page","page_size"],"params":[{"name":"category_id","type":"array","required":true,"description":"One or more Walgreens tier-3 category ids, e.g. `361471` (Non-Aspirin Pain Relievers) or `360481,360967`. Take them from any product row's `category_ids.tier3`, or from `category.tier3.id` on a product record. Several ids are merged by the source into one list.","on_invalid":"reject","example":"361471","value_pattern":"\\d{3,12}","aliases":["category_ids","id","ids"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Walgreens refuses page 16 and above at every page size (measured), so the usable range is 1-15.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":15,"aliases":["p"]},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-100. 101 and above is refused by the source, so larger values are clamped to 100.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["s","limit","per_page"]}],"returns":"results[] (same row shape as `search`), category_id[], total, online_total, in_store_total, page, page_size, returned, source_pages, last_page, page_cap, has_more, reachable_results, dropped_tiles","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"361471","page":1,"page_size":24}},{"name":"product/detail","description":"The full Walgreens product record by product id or product URL: shelf price and every promotion kept apart, the EXACT review average (the list surfaces only publish a half-star bucket), unit price, employee price labelled as such, UPC and GTIN-14, PLN, online/pickup/same-day availability, FSA-HSA and EBT eligibility, the marketing description, OTC uses and warnings, the active and inactive ingredient groups, shipping weight, pack dimensions and the US states Walgreens will not ship it to, plus the three-level category path. Walgreens does not publish individual review texts on this surface.","required_params":["product_id"],"optional_params":[],"params":[{"name":"product_id","type":"string","required":true,"description":"Walgreens product id as published in `product_id` on any row (`300394826` or `prod6330754`). A full product URL (`https://www.walgreens.com/store/c/.../ID=300394826-product`) is accepted and the id is read out of it.","on_invalid":"reject","example":"300394826","value_pattern":"(?:prod)?\\d{3,15}","aliases":["id","prod_id","url","product_url"]}],"returns":"product{product_id, sku_id, title, display_title, url, brand, brand_id, brand_url, size, product_type, upc, gtin, pln, article_id, image, images[], currency, price, price_display, price_form, regular_price, regular_price_display, sale_price, sale_price_display, on_sale, multi_buy{quantity, total, unit_price_implied}, regular_multi_buy, single_unit_price, unit_price, unit_price_unit, price_rule, employee_price, employee_price_display, rating, rating_display, review_count, in_stock, availability{ship, pickup, same_day_delivery, options[], add_to_cart}, clearance, own_brand, fsa_hsa_eligible, ebt_eligible, age_restricted, description, warnings, ingredients[]{group, types[]{type, items[]}}, offers[]{type, title, description, sub_description, link_text, plu_code, event_code, starts_at, ends_at}, sitewide_offer, shipping{weight_lb, dimensions_in, restricted_states[], message}, category{tier1, tier2, tier3}{id, name, url}, meta_description}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"300394826"}},{"name":"product/batch","description":"The same full product record as `product/detail` for up to 50 product ids in ONE upstream call — the cheapest way to refresh a basket, a price file or a GTIN map. Walgreens answers one record per id (asked 15/25/50 ids, got 15/25/50); ids it does not know are reported in `missing_ids` instead of failing the call.","required_params":["product_ids"],"optional_params":[],"params":[{"name":"product_ids","type":"array","required":true,"description":"1-50 Walgreens product ids, as a list or a comma-separated string: `300394826,prod3933218,prod6330754`. More than 50 is clamped to the first 50 and reported in `meta.warnings`.","on_invalid":"reject","example":"300394826,prod3933218,prod6330754","aliases":["ids","product_id","productIds"]}],"returns":"products[] (same record shape as `product/detail`), requested, returned, missing_ids[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_ids":"300394826,prod3933218,prod6330754"}}]},{"name":"wallapop","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Wallapop API — second-hand listings from Wallapop Spain, Italy and Portugal: search by keyword, place and radius, full listings with reserved/sold status, shipping prices and seller rating, cars search, seller listings, categories and suggestions. No account, no browser.","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/wallapop/v1","spec_available":true,"actions":[{"name":"search","description":"Search Wallapop listings in Spain, Italy or Portugal by keyword or category around a point: listing id, title, description, price in EUR (null when the site shows 0), previous price and discount, category path, city and postal code, distance from the search point, created and modified time, reserved flag, whether the seller ships, refurbished/warranty flags, car and real-estate facts, photos. Filter by radius, price, condition, shipping, category, refurbished and warranty; sort by relevance, newest, closest or price. Paid bumped rows are dropped and counted unless include_sponsored.","required_params":[],"optional_params":["query","country","latitude","longitude","distance_km","category","subcategory","price_min","price_max","condition","shipping_only","refurbished_only","warranty_only","sort","cursor","include_sponsored","country_only","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. Optional when `category` is given.","on_invalid":"reject","example":"bicicleta","aliases":["q","keywords","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Wallapop country: es (Spain), it (Italy) or pt (Portugal). Sets the language of labels and the default search point (Madrid, Rome, Lisbon). Prices are in EUR everywhere.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spain — es.wallapop.com"},{"value":"it","label":"Italy — it.wallapop.com"},{"value":"pt","label":"Portugal — pt.wallapop.com"}],"default":"es","example":"es","aliases":["market"]},{"name":"latitude","type":"number","required":false,"description":"Search point latitude (with longitude). Wallapop ranks and filters by distance from this point; default is the country's capital.","on_invalid":"reject","example":40.4168,"minimum":-90,"maximum":90,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Search point longitude (with latitude).","on_invalid":"reject","example":-3.7038,"minimum":-180,"maximum":180,"aliases":["lon","lng"]},{"name":"distance_km","type":"integer","required":false,"description":"Only listings within this many km of the search point (1-500).","on_invalid":"reject","minimum":1,"maximum":500,"aliases":["radius_km"]},{"name":"category","type":"integer","required":false,"description":"Top-level category id from `categories` (e.g. 17000 bicycles, 24200 electronics, 12465 fashion).","on_invalid":"reject","example":17000,"aliases":["category_id"]},{"name":"subcategory","type":"integer","required":false,"description":"A deeper category id from `categories` (children of `category`); needs `category`.","on_invalid":"reject","example":10213,"aliases":["subcategory_id"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, EUR.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, EUR.","on_invalid":"reject","minimum":0},{"name":"condition","type":"enum","required":false,"description":"Item condition. un_opened / in_box exist for electronics, un_worn for fashion.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New, never used"},{"value":"as_good_as_new","label":"As good as new"},{"value":"good","label":"Good"},{"value":"fair","label":"Fair"},{"value":"has_given_it_all","label":"Has given it all"},{"value":"un_opened","label":"Unopened (electronics)"},{"value":"in_box","label":"In its box (electronics)"},{"value":"un_worn","label":"Unworn, with tags (fashion)"}]},{"name":"shipping_only","type":"boolean","required":false,"description":"Only listings whose seller offers shipping.","on_invalid":"reject","aliases":["is_shippable"]},{"name":"refurbished_only","type":"boolean","required":false,"description":"Only refurbished listings (professional refurbishers).","on_invalid":"reject"},{"name":"warranty_only","type":"boolean","required":false,"description":"Only listings with at least one year of warranty.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (default with a keyword)"},{"value":"newest","label":"Newest first"},{"value":"closest","label":"Closest to the search point (default without a keyword)"},{"value":"price_asc","label":"Lowest price first — zero and placeholder prices come first"},{"value":"price_desc","label":"Highest price first — placeholder prices come first"}]},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous page. When given, the other search parameters are taken from the cursor and ignored.","on_invalid":"reject","aliases":["next_cursor","next_page"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the paid bumped ('destacado') rows the site mixes into relevance results, flagged sponsored:true. Off by default.","on_invalid":"reject","default":false},{"name":"country_only","type":"boolean","required":false,"description":"Drop listings located in another Wallapop country. The site's search is cross-border: from Italy or Portugal, newest and price orders are mostly Spanish listings. Off by default (the site shows them, flagged cross_border); dropped rows are counted in other_country_dropped.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no listing mentions the query (the site sometimes answers nonsense with unrelated rows), the page comes back empty with fallback_results_dropped; true also returns those rows in fallback_results.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, description, url, slug, price (null when 0), currency, price_is_zero, was_price, discount_percent, category_id, category_path[]{id, name}, location{city, postal_code, region, country_code, lat, lon (include_pii only)}, distance_km (from the search point), cross_border (listed in another Wallapop country), text_is_translated (title/description are the site's translation; listing has the original), created_at, modified_at, reserved, shipping_available (seller ships), shipping_eligible_category, is_refurbished, has_warranty, seller_id, seller_is_top_profile, sponsored (injected paid slot), is_bumped, bump_type, vehicle{brand, model, year, version, km, engine, horsepower}, real_estate{operation, type, surface, rooms, bathrooms}, attributes, image, images[], image_count}, count (organic rows), sponsored_dropped, sponsored_count, other_country_count, other_country_dropped, fallback_results_dropped, fallback_results[] (include_fallback_results only), total_results (null: not published), has_more, next_cursor, sort_applied, filters_applied_count, location_country, country, currency, query","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bici","country":"es"}},{"name":"cars/search","description":"Search used cars on Wallapop (Spain, Italy, Portugal) around a point: the listing rows of search plus vehicle{brand, model, year, version, km, engine, horsepower}. Filter by brand, model, year, mileage, fuel, gearbox, body type, private or professional seller, price and radius.","required_params":[],"optional_params":["query","country","latitude","longitude","distance_km","brand","model","year_min","year_max","km_min","km_max","engine","gearbox","body_type","seller_type","price_min","price_max","warranty_only","sort","cursor","include_sponsored","country_only","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword. Optional when `category` is given.","on_invalid":"reject","example":"bicicleta","aliases":["q","keywords","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Wallapop country: es (Spain), it (Italy) or pt (Portugal). Sets the language of labels and the default search point (Madrid, Rome, Lisbon). Prices are in EUR everywhere.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spain — es.wallapop.com"},{"value":"it","label":"Italy — it.wallapop.com"},{"value":"pt","label":"Portugal — pt.wallapop.com"}],"default":"es","example":"es","aliases":["market"]},{"name":"latitude","type":"number","required":false,"description":"Search point latitude (with longitude). Wallapop ranks and filters by distance from this point; default is the country's capital.","on_invalid":"reject","example":40.4168,"minimum":-90,"maximum":90,"aliases":["lat"]},{"name":"longitude","type":"number","required":false,"description":"Search point longitude (with latitude).","on_invalid":"reject","example":-3.7038,"minimum":-180,"maximum":180,"aliases":["lon","lng"]},{"name":"distance_km","type":"integer","required":false,"description":"Only listings within this many km of the search point (1-500).","on_invalid":"reject","minimum":1,"maximum":500,"aliases":["radius_km"]},{"name":"brand","type":"string","required":false,"description":"Car brand as Wallapop lists it (case-insensitive), e.g. Seat, BMW.","on_invalid":"reject","example":"Seat","aliases":["make"]},{"name":"model","type":"string","required":false,"description":"Model of that brand (needs brand).","on_invalid":"reject","example":"Ibiza"},{"name":"year_min","type":"integer","required":false,"description":"Oldest registration year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Newest registration year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"km_min","type":"integer","required":false,"description":"Lowest mileage.","on_invalid":"reject","minimum":0},{"name":"km_max","type":"integer","required":false,"description":"Highest mileage.","on_invalid":"reject","minimum":0},{"name":"engine","type":"enum","required":false,"description":"Fuel / drive.","on_invalid":"reject","allowed_values":[{"value":"gasoline","label":"gasoline"},{"value":"diesel","label":"diesel"},{"value":"electric","label":"electric"},{"value":"hybrid","label":"hybrid"},{"value":"plug_in_hybrid","label":"plug in hybrid"},{"value":"lpg","label":"lpg"},{"value":"cng","label":"cng"},{"value":"other","label":"other"}]},{"name":"gearbox","type":"enum","required":false,"description":"Gearbox.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic"},{"value":"semiautomatic","label":"semiautomatic"}]},{"name":"body_type","type":"enum","required":false,"description":"Body type.","on_invalid":"reject","allowed_values":[{"value":"small","label":"small"},{"value":"coupe","label":"coupe"},{"value":"sedan","label":"sedan"},{"value":"estate","label":"estate"},{"value":"minivan","label":"minivan"},{"value":"suv","label":"suv"},{"value":"van","label":"van"},{"value":"convertible","label":"convertible"},{"value":"pickup","label":"pickup"},{"value":"other","label":"other"}]},{"name":"seller_type","type":"enum","required":false,"description":"Private sellers or professionals.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private seller"},{"value":"professional","label":"Dealer / professional"}]},{"name":"price_min","type":"number","required":false,"description":"Lowest price, EUR.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, EUR.","on_invalid":"reject","minimum":0},{"name":"warranty_only","type":"boolean","required":false,"description":"Only listings with at least one year of warranty.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"Order of results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant (default with a keyword)"},{"value":"newest","label":"Newest first"},{"value":"closest","label":"Closest to the search point (default without a keyword)"},{"value":"price_asc","label":"Lowest price first — zero and placeholder prices come first"},{"value":"price_desc","label":"Highest price first — placeholder prices come first"}]},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous page. When given, the other search parameters are taken from the cursor and ignored.","on_invalid":"reject","aliases":["next_cursor","next_page"]},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the paid bumped ('destacado') rows the site mixes into relevance results, flagged sponsored:true. Off by default.","on_invalid":"reject","default":false},{"name":"country_only","type":"boolean","required":false,"description":"Drop listings located in another Wallapop country. The site's search is cross-border: from Italy or Portugal, newest and price orders are mostly Spanish listings. Off by default (the site shows them, flagged cross_border); dropped rows are counted in other_country_dropped.","on_invalid":"reject","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When no listing mentions the query (the site sometimes answers nonsense with unrelated rows), the page comes back empty with fallback_results_dropped; true also returns those rows in fallback_results.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"results[]{listing_id, title, description, url, slug, price (null when 0), currency, price_is_zero, was_price, discount_percent, category_id, category_path[]{id, name}, location{city, postal_code, region, country_code, lat, lon (include_pii only)}, distance_km (from the search point), cross_border (listed in another Wallapop country), text_is_translated (title/description are the site's translation; listing has the original), created_at, modified_at, reserved, shipping_available (seller ships), shipping_eligible_category, is_refurbished, has_warranty, seller_id, seller_is_top_profile, sponsored (injected paid slot), is_bumped, bump_type, vehicle{brand, model, year, version, km, engine, horsepower}, real_estate{operation, type, surface, rooms, bathrooms}, attributes, image, images[], image_count}, count (organic rows), sponsored_dropped, sponsored_count, other_country_count, other_country_dropped, fallback_results_dropped, fallback_results[] (include_fallback_results only), total_results (null: not published), has_more, next_cursor, sort_applied, filters_applied_count, location_country, country, currency, query","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bicicleta"}},{"name":"listing","description":"The full Wallapop listing by id, slug or URL: title and description as written, status (active, reserved, sold, expired), price, previous price and discount, condition, brand and model, category path, attributes, car or property facts, every photo, city and postal code, last modified, views, favourites and chats, bump flag, shipping availability with each delivery option's price and delivery days, and the seller: type (private, pro, shop), rating on a 5-point scale, review count, sold count, member since, verified; name and business address for PRO and shop sellers.","required_params":["listing_id"],"optional_params":["country","max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"The listing id from a search row (e.g. pzpk03moy9j3), the slug (bicicletas-btwin-paseo-1302091802) or the full listing URL.","on_invalid":"reject","example":"pzpk03moy9j3","aliases":["id","item_id","slug","url"]},{"name":"country","type":"enum","required":false,"description":"Which Wallapop country: es (Spain), it (Italy) or pt (Portugal). Sets the language of labels and the default search point (Madrid, Rome, Lisbon). Prices are in EUR everywhere.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spain — es.wallapop.com"},{"value":"it","label":"Italy — it.wallapop.com"},{"value":"pt","label":"Portugal — pt.wallapop.com"}],"default":"es","example":"es","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{listing_id, slug, title, description, url, status (active|reserved|on_hold|sold|expired), reserved, sold, expired, price (null when 0), currency, price_is_zero, was_price, discount_percent, condition{code, label}, brand, model, size, color, isbn, category_path[]{id, name}, item_type, attributes[]{id, label, value, code}, vehicle{km, year, version, gear_box, engine, horse_power, body_type, doors, seats, …}, real_estate{…}, images[]{url, medium_url, small_url}, image_count, location{city, postal_code, country_code, approximate, lat, lon (PRO/shop or include_pii)}, modified_at, views, favorites, conversations, is_bumped, bump_type, is_refurbished, stock, shipping{shipping_available, shipping_eligible_category, cheapest_shipping_price, delivery_options[]{carrier, method, price, currency, discounted_price}, delivery_days_min, delivery_days_max, is_bulky}, seller{id, type (private|pro|shop), name, profile_url, avatar_url (PRO/shop or include_pii), rating, rating_scale, review_count, sold_count, sales_count, purchases_count, published_count, member_since, verified, is_top_profile, vacation_mode, city, postal_code, shipping_on_time_days, official_store_url, business{description, address, opening_hours, website, lat, lon, has_phone, phone (include_pii)}}, country, detail_source}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"pzpk03moy9j3"}},{"name":"seller_listings","description":"One Wallapop seller's profile and current listings: rating on a 5-point scale with the star breakdown, review, sold, sales and purchase counts, member since, city — and 40 listings per page with id, title, price, previous price, reserved flag, shipping, condition and photos.","required_params":["seller_id"],"optional_params":["country","cursor","max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"The seller id from a search row (seller_id) or a listing (seller.id).","on_invalid":"reject","example":"p8j3ew34x1z9","aliases":["user_id"]},{"name":"country","type":"enum","required":false,"description":"Which Wallapop country: es (Spain), it (Italy) or pt (Portugal). Sets the language of labels and the default search point (Madrid, Rome, Lisbon). Prices are in EUR everywhere.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spain — es.wallapop.com"},{"value":"it","label":"Italy — it.wallapop.com"},{"value":"pt","label":"Portugal — pt.wallapop.com"}],"default":"es","example":"es","aliases":["market"]},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous page of this seller.","on_invalid":"reject","aliases":["next_cursor"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"seller{id, type (private|professional), name, profile_url, avatar_url (professional or include_pii), rating, rating_scale, review_count, review_breakdown_percent{1..5}, sold_count, sales_count, purchases_count, published_count, member_since, is_top_profile, city, postal_code, country_code}, results[]{listing_id, title, description, url, slug, price, currency, price_is_zero, was_price, discount_percent, category_id, reserved, shipping_available, is_refurbished, has_warranty, is_bumped, bump_type, vehicle, real_estate, attributes, image, images[], image_count}, count, has_more, next_cursor","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"p8j3ew34x1z9"}},{"name":"categories","description":"Wallapop's category tree for one country in its language: up to four levels, every node with the id to pass as `category` (top level) or `subcategory` to search.","required_params":[],"optional_params":["country","max_rotations"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Wallapop country: es (Spain), it (Italy) or pt (Portugal). Sets the language of labels and the default search point (Madrid, Rome, Lisbon). Prices are in EUR everywhere.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spain — es.wallapop.com"},{"value":"it","label":"Italy — it.wallapop.com"},{"value":"pt","label":"Portugal — pt.wallapop.com"}],"default":"es","example":"es","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"categories[]{id, name, level, search_param (category|subcategory), vertical (top level: cars|real_estate|consumer_goods), children[]}, count (top level), node_count, country","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"es"}},{"name":"suggest","description":"Wallapop search autocomplete in the country's language: completed keywords for a partial term.","required_params":["query"],"optional_params":["country","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The partial keyword.","on_invalid":"reject","example":"bici","aliases":["q","prefix","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Wallapop country: es (Spain), it (Italy) or pt (Portugal). Sets the language of labels and the default search point (Madrid, Rome, Lisbon). Prices are in EUR everywhere.","on_invalid":"reject","allowed_values":[{"value":"es","label":"Spain — es.wallapop.com"},{"value":"it","label":"Italy — it.wallapop.com"},{"value":"pt","label":"Portugal — pt.wallapop.com"}],"default":"es","example":"es","aliases":["market"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"suggestions[]{keyword, subtitle, kind}, count, query, country","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"bici"}}]},{"name":"walmart","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Walmart API scraper — search Walmart.com products with filters, sort & pagination, full product detail (price, specifications, variants, seller, availability), customer reviews (rating breakdown + review texts), and category/department browse. No account required.","version":"1.3.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/walmart/v1","spec_available":true,"actions":[{"name":"search","description":"Search Walmart.com by keyword → a paginated, sortable list of products with item id, name, current & list price, savings, star rating + review count, availability, seller, category, fulfillment, image and the product link. Narrow with min_price/max_price and sort. 🔴 `brand` IS ALL-OR-NOTHING PER SEARCH, because Walmart publishes it that way: a clothing/shoes/bags/watches grid carries it on every row (measured 549 of 549 rows over 9 such searches — t-shirt 62/62, backpack 72/72, jeans 71/71, sneakers 65/65…), and every other kind of search carries it on no row at all (0 of ~880 rows over 12 searches — laptop, tv, headphones, printer, coffee maker, sofa, dog food, milk, toothpaste, vitamins, lipstick, office chair). On those searches Walmart simply does not put the brand in the listing it publishes, so this API returns null rather than guessing it out of the product name. Read `meta.field_coverage.brand` to see how many rows of YOUR call carried one, and use product_detail when you need brand guaranteed — it carries it for every product, in every category.","required_params":["query"],"optional_params":["sort","page","max_results","min_price","max_price","facet","country"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for on Walmart.com (product keywords, brand, or model).","on_invalid":"reject","example":"laptop","aliases":["q","keyword","search"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"best_match","label":"Best match (default)"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"best_seller","label":"Best selling"},{"value":"rating_high","label":"Top rated"},{"value":"new","label":"New arrivals"}],"default":"best_match","example":"price_low"},{"name":"page","type":"integer","required":false,"description":"Result page (~40-55 products per page; paginate with page += 1). The response's `max_page` is the last page Walmart will serve for the query. Walmart repeats SPONSORED tiles across pages (measured: 12 repeats page1↔page2, 11 of them sponsored); filter on `sponsored == false` for a duplicate-free paginated set.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-400). Walmart serves about 40-55 per page, so asking for more than that fetches the further pages automatically — they are fetched TOGETHER, so 200 results cost roughly the time of one page rather than five. 400 is Walmart's real ceiling: it stops serving products after page 10, measured — note that Walmart's own `max_page` claims 13-14 and is wrong, so do not size a job from it. OMIT IT to get exactly one page, exactly as this action behaves today — `page` on its own is completely unchanged.","on_invalid":"ignore","example":100,"minimum":1,"maximum":400,"aliases":["limit","max"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price to include (USD).","on_invalid":"ignore","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price to include (USD).","on_invalid":"ignore","example":1000,"minimum":0,"aliases":["price_max"]},{"name":"facet","type":"string","required":false,"description":"Advanced: a raw Walmart facet token (e.g. a brand/department filter from a category page) appended to the search as &facet=. Escape hatch for power users; omit for a plain keyword search.","on_invalid":"ignore","example":"brand%3AHP"},{"name":"country","type":"string","required":false,"description":"Market: US (default), Mexico or Canada. Mexico/Canada support search and product_detail only; page 1 only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States"},{"value":"mx","label":"Mexico"},{"value":"ca","label":"Canada"}],"default":"us","example":"mx"}],"returns":"results[]{item_id, name, brand, price, list_price, savings_amount, currency, rating, review_count, availability, availability_display, in_stock, seller, seller_id, category (the department: the top of the card's own category path), category_path[] (full path, names only — same vocabulary as product_detail), badge, fulfillment{methods,earliest_date}, price_range, min_price, max_price (both present only when Walmart publishes a two-ended options range for the card), savings_amount (Walmart's own figure when it publishes one, else list_price - price; null when there is no was-price), image, url, sponsored} + total + count + page + max_page + related_searches. meta.field_coverage{rows, brand, note} reports how many rows of THIS call carried a brand — Walmart publishes it on a whole search grid or on none of it, so 0 there means Walmart omitted it, not that this API dropped it.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":2,"per":1,"min":2},"example_params":{"country":"ca","query":"milk","max_results":3}},{"name":"product_detail","description":"Full product record by Walmart item id (or product URL): name, brand, model, UPC, manufacturer part number, current & list price, availability, seller, average rating + review count, short & long descriptions, the full specification table, product highlights, every variant with its resolved attributes (colour/size/…), the category breadcrumb, return policy, fulfillment and the gallery images.","required_params":[],"optional_params":["item_id","url","country"],"params":[{"name":"item_id","type":"string","required":false,"description":"Walmart item id — the number in a walmart.com/ip/<id> URL, or a search result's `item_id`. Provide item_id OR url.","on_invalid":"reject","example":"20122959141","aliases":["id","product_id","us_item_id"]},{"name":"url","type":"string","required":false,"description":"Full walmart.com product page URL (alternative to item_id; the id is parsed from /ip/<id>).","on_invalid":"ignore","example":"https://www.walmart.com/ip/20122959141","aliases":["product_url"]},{"name":"country","type":"string","required":false,"description":"Market: US (default), Mexico or Canada. Mexico/Canada support search and product_detail only; page 1 only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States"},{"value":"mx","label":"Mexico"},{"value":"ca","label":"Canada"}],"default":"us","example":"mx"}],"returns":"product{item_id, name, brand, model, upc, manufacturer_part_number, type, price, list_price, currency, availability, seller, seller_id, condition, rating, review_count, short_description, long_description, specifications[], highlights[], variants[]{id,usItemId,attributes[],price,availability,url,image}, variant_options[], category_path[], return_policy{}, fulfillment{}, warnings[], images[], url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"item_id":"709326941"}},{"name":"reviews","description":"Customer reviews for a Walmart product by item id (or product URL): the average rating, total review count, recommended-percentage, the 5★→1★ rating distribution and percentages, the most-mentioned aspects, and the review texts (rating, title, body, date, helpful counts, verified-purchase, purchased variant, photos).","required_params":[],"optional_params":["item_id","url","max_results","country"],"params":[{"name":"item_id","type":"string","required":false,"description":"Walmart item id — the number in a walmart.com/ip/<id> URL, or a search result's `item_id`. Provide item_id OR url.","on_invalid":"reject","example":"20122959141","aliases":["id","product_id","us_item_id"]},{"name":"url","type":"string","required":false,"description":"Full walmart.com product page URL (alternative to item_id; the id is parsed from /ip/<id>).","on_invalid":"ignore","example":"https://www.walmart.com/ip/20122959141","aliases":["product_url"]},{"name":"country","type":"string","required":false,"description":"Market: US (default), Mexico or Canada. Mexico/Canada support search and product_detail only; page 1 only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States"},{"value":"mx","label":"Mexico"},{"value":"ca","label":"Canada"}],"default":"us","example":"mx"},{"name":"max_results","type":"integer","required":false,"description":"How many review texts to return (10 per Walmart page, fetched concurrently). The rating distribution is always the full-catalog total. Only `reviews_with_text_count` of the total ratings actually carry text.","on_invalid":"ignore","default":20,"minimum":1,"maximum":100}],"returns":"average_rating + total_review_count + reviews_with_text_count + recommended_percentage + rating_distribution{5,4,3,2,1} + rating_percentages + aspects[] + reviews[]{review_id, rating, title, text, date, helpful_positive, helpful_negative, verified_purchase, recommended, variant[], photos[]}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":20,"min":2},"example_params":{"item_id":"20122959141"}},{"name":"category","description":"Browse a Walmart category / department by its query term (e.g. 'coffee maker', '4k tv') → the same product grid as search, framed as a category browse with the related category searches surfaced. Paginated and sortable.","required_params":["query"],"optional_params":["sort","page","max_results","min_price","max_price","country"],"params":[{"name":"query","type":"string","required":true,"description":"The category/department to browse (a Walmart department name or product-class keyword).","on_invalid":"reject","example":"coffee maker","aliases":["q","category","department"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering.","on_invalid":"ignore","allowed_values":[{"value":"best_match","label":"Best match (default)"},{"value":"price_low","label":"Price: low to high"},{"value":"price_high","label":"Price: high to low"},{"value":"best_seller","label":"Best selling"},{"value":"rating_high","label":"Top rated"},{"value":"new","label":"New arrivals"}],"default":"best_match","example":"price_low"},{"name":"page","type":"integer","required":false,"description":"Result page (~40-55 products per page; paginate with page += 1). The response's `max_page` is the last page Walmart will serve for the query. Walmart repeats SPONSORED tiles across pages (measured: 12 repeats page1↔page2, 11 of them sponsored); filter on `sponsored == false` for a duplicate-free paginated set.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-400). Walmart serves about 40-55 per page, so asking for more than that fetches the further pages automatically — they are fetched TOGETHER, so 200 results cost roughly the time of one page rather than five. 400 is Walmart's real ceiling: it stops serving products after page 10, measured — note that Walmart's own `max_page` claims 13-14 and is wrong, so do not size a job from it. OMIT IT to get exactly one page, exactly as this action behaves today — `page` on its own is completely unchanged.","on_invalid":"ignore","example":100,"minimum":1,"maximum":400,"aliases":["limit","max"]},{"name":"min_price","type":"number","required":false,"description":"Lowest price to include (USD).","on_invalid":"ignore","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price to include (USD).","on_invalid":"ignore","example":1000,"minimum":0,"aliases":["price_max"]},{"name":"country","type":"string","required":false,"description":"Market: US (default), Mexico or Canada. Mexico/Canada support search and product_detail only; page 1 only.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States"},{"value":"mx","label":"Mexico"},{"value":"ca","label":"Canada"}],"default":"us","example":"mx"}],"returns":"results[]{item_id, name, price, rating, review_count, availability, seller, image, url} + total + count + page + max_page + category + related_searches","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"4k tv"}}]},{"name":"watsons-tr","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Watsons Türkiye API scraper — search watsons.com.tr's beauty and personal-care catalogue and read full product records: TRY price, Watsons Club member price and was-price when published, stock level, rating and review breakdown, EAN barcodes, images, breadcrumb, description and reviews. No account, no browser.","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/watsons-tr/v1","spec_available":true,"actions":[{"name":"search","description":"Search watsons.com.tr by keyword, or browse a category, and get one row per product: product code, title, brand, image, price in TRY, Watsons Club member price and was-price when Watsons publishes them, stock status and unit count, rating and review count, EAN barcodes and category path. Filter by brand, price range and in-stock, sort the way the site does, and page through the results. The response also lists the brands, categories and price bands available for the query.","required_params":[],"optional_params":["query","category","page","page_size","sort","brand","in_stock","min_price","max_price","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"What to look for on watsons.com.tr — a Turkish keyword ('şampuan', 'ruj'), a brand ('elseve') or a product name. Optional when `category` is given (then the category is browsed).","on_invalid":"reject","example":"şampuan","aliases":["q","keyword","text"]},{"name":"category","type":"string","required":false,"description":"Watsons category code — the number after /c/ in a category URL (https://www.watsons.com.tr/sac-bakim/sampuanlar/c/212 → 212). A full category URL is also accepted. Every search returns the matching categories with their codes in `filters.categories`.","on_invalid":"reject","example":"212","aliases":["category_code","category_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-100 (the site's default is 28).","on_invalid":"ignore","default":28,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result order — only the orderings watsons.com.tr itself offers.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Watsons' recommended order"},{"value":"price_asc","label":"Price, lowest first"},{"value":"price_desc","label":"Price, highest first"},{"value":"newest","label":"Newest products first"},{"value":"rating","label":"Highest rated first"},{"value":"most_reviewed","label":"Most reviewed first"},{"value":"name_asc","label":"Name A-Z"},{"value":"name_desc","label":"Name Z-A"},{"value":"stock","label":"In-stock products first"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only these brands. One brand or several separated by commas (several = any of them). Use the names returned in `filters.brands`; case does not matter.","on_invalid":"reject","example":"ELSEVE","aliases":["brands"]},{"name":"in_stock","type":"boolean","required":false,"description":"true = only products Watsons shows as in stock.","on_invalid":"ignore","default":false},{"name":"min_price","type":"number","required":false,"description":"Lowest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest price in TRY (inclusive).","on_invalid":"reject","minimum":0},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"results[]{position, product_id (BP_… code), sku, title, brand, range_name, url, image, price (number, TRY; null when Watsons shows no price), price_display, price_type, currency=TRY, was_price (struck-through price, null when none), discount_amount, discount_percent, member_price (Watsons Club price, null when none), member_price_display, prior_price (published 30-day prior price, null when none), stock_status (inStock | lowStock | outOfStock), stock_level (units), in_stock, purchasable, rating (1-5, null with no reviews), review_count, rating_scale (5), category_path[], barcodes[] (EAN), badges[], new_in, promotion, multibuy}, count, page, page_size, total_results, total_pages, sort, redirect_url (set when Watsons sends the keyword to a landing page instead), filters{brands[]{name, value, count}, categories[]{name, code, count}, subcategories[]{name, code, count}, price_bands[]{label, min, max, count}}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"şampuan"}},{"name":"product/detail","description":"The full Watsons Türkiye product record by product code or URL: title, brand, price in TRY with was-price, discount and Watsons Club member price when published, the basket-promotion message, stock status with unit count, rating with review count and per-star breakdown, every image, the category breadcrumb, the description as clean text with its sections, ingredients and usage when the description publishes them, EAN barcodes, supplier, package dimensions and shade/size variants.","required_params":["product_id"],"optional_params":["max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Watsons product code as returned in `product_id` by `search` (BP_153319). The bare number (153319) or a full watsons.com.tr product URL is also accepted.","on_invalid":"reject","example":"BP_153319","aliases":["id","code","sku","url"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"product{product_id, sku, title, brand, brand_id, brand_url, range_name, url, price, price_display, price_type, currency=TRY, was_price, discount_amount, discount_percent, member_price, member_price_display, prior_price, promotion_message (basket-level offer text — NOT applied to price), promotions[]{code, title, description}, multibuy, stock_status, stock_level, in_stock, purchasable, available_for_pickup, max_order_quantity, rating, review_count, rating_scale (5), rating_breakdown{'1'..'5': count}, images[], breadcrumb[]{code, name, url}, category_path[], description, description_sections[]{heading, text}, ingredients (null unless the description has an ingredients section), how_to_use, barcodes[], supplier, dimensions{width, height, depth, unit (null — Watsons publishes no unit)}, variants[]{sku, name, variant_type, price, price_display, price_type, member_price, stock_status, stock_level, in_stock, purchasable, url, barcodes[]}, variant_count, badges[], new_in, age_restricted, updated_at}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"BP_153319"}},{"name":"product/reviews","description":"Written customer reviews of one Watsons Türkiye product, newest first: star rating (1-5), headline, review text, date and the reviewer's display alias when Watsons publishes one. Watsons publishes the text of written reviews only, so this can be far fewer than the product's review_count, which counts every star rating (and can be 0 while the product has ratings).","required_params":["product_id"],"optional_params":["limit","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Watsons product code as returned in `product_id` by `search` (BP_153319). The bare number (153319) or a full watsons.com.tr product URL is also accepted.","on_invalid":"reject","example":"BP_153319","aliases":["id","code","sku","url"]},{"name":"limit","type":"integer","required":false,"description":"How many reviews to return, newest first (1-200, default 20).","on_invalid":"ignore","default":20,"minimum":1,"maximum":200},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"reviews[]{rating, headline, comment, date, reviewer_alias}, count, total_written_reviews (written reviews Watsons publishes — not the star-rating count), rating_scale (5), order ('newest_first')","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"BP_153319","limit":5}},{"name":"search/suggest","description":"Watsons Türkiye's own search-box suggestions for a partial keyword: the suggested search terms and the top matching products with price.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What the shopper has typed so far (at least 2 characters).","on_invalid":"reject","example":"şamp","aliases":["q","term","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-8, default 4 — leave unchanged for typical use).","on_invalid":"ignore","default":4,"minimum":1,"maximum":8}],"returns":"suggestions[] (search terms), products[]{product_id, title, brand (often null here), url, image, price, price_display, currency}, products_total","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"şamp"}}]},{"name":"wayfair","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Wayfair API scraper — wayfair.com, the largest US online home-goods retailer: keyword search and category browse with Wayfair's own facets, the full product record (price, was-price, every colour and size option with its own SKU, stock, images, specifications, dimensions, materials, assembly and warranty), and the review block. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/wayfair/v1","spec_available":true,"actions":[{"name":"search","description":"Search Wayfair by keyword and read the whole result grid. 48 listings per page with price, was-price, sale badge, brand, rating and review count, the selected colour or fabric, the other options with their own product URLs, stock message and delivery promise. Wayfair's own facets can be applied with `filters`.","required_params":["query"],"optional_params":["page","filters","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, e.g. 'velvet accent chair'.","on_invalid":"reject","example":"velvet accent chair","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page. Wayfair serves 48 listings per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"filters","type":"array","required":false,"description":"Wayfair facet selections as '<filter_id>~<option_id>' pairs, e.g. '2470~7175' (Material: Genuine Leather). Several stack as AND. Call the `filters` action for the valid pairs of a category.","on_invalid":"reject","example":["2470~7175"],"aliases":["filter"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry on a different route out when the site paces the request. Higher = slower but more reliable.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":12}],"returns":"results[{position, sku, variant_sku, variant_id, option_id, title, brand, url, price, was_price, currency, sale_label, price_is_from, loyalty_savings, rating, review_count, selected_options[{name, category}], option_count, options[{option_id, name, variant_id, url, image, price (null — see note)}], stock_message, delivery_promise, delivery_method, is_sponsored, is_best_value, images[], marketing_copy}], count, page_kind, page_note, total_results, page, per_page, has_more, query, resolved_url, resolved_category{category_id, name}, filters_applied[], pagination_note, option_price_note","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"sofa"}},{"name":"category/products","description":"Browse one Wayfair category — the same 48-listing grid as search, for a category id. Facets stack with `filters`: Sofas alone is 278,015 listings, Sofas + Genuine Leather + Seats 3 is about 1,170, and the two result sets do not overlap at all on page 1.","required_params":["category"],"optional_params":["page","filters","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"Wayfair category id (e.g. 413892 for Sofas) or any category URL.","on_invalid":"reject","example":"413892","aliases":["category_id","url"]},{"name":"page","type":"integer","required":false,"description":"Result page. Wayfair serves 48 listings per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"filters","type":"array","required":false,"description":"Wayfair facet selections as '<filter_id>~<option_id>' pairs, e.g. '2470~7175' (Material: Genuine Leather). Several stack as AND. Call the `filters` action for the valid pairs of a category.","on_invalid":"reject","example":["2470~7175"],"aliases":["filter"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry on a different route out when the site paces the request. Higher = slower but more reliable.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":12}],"returns":"results[] (same row shape as search), count, page_kind (browse_grid | department_landing), page_note, total_results, page, per_page, has_more, category{category_id, name, url}, filters_applied[], pagination_note, option_price_note","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"category":"413892"}},{"name":"brand/products","description":"Every listing Wayfair publishes for one of its house or partner brands (Mercer41, Latitude Run, AllModern…), by brand id or brand-page URL.","required_params":["brand"],"optional_params":["page","max_rotations"],"params":[{"name":"brand","type":"string","required":true,"description":"Wayfair brand id (e.g. 40128 for Latitude Run) or the brand URL.","on_invalid":"reject","example":"40128","aliases":["brand_id","manufacturer","url"]},{"name":"page","type":"integer","required":false,"description":"Result page. Wayfair serves 48 listings per page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry on a different route out when the site paces the request. Higher = slower but more reliable.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":12}],"returns":"results[] (same row shape as search), count, total_results, page, per_page, has_more, brand{brand_id, name, url}, pagination_note","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"brand":"40128"}},{"name":"filters","description":"Every facet Wayfair offers for a keyword or a category, with the ids needed to build a filtered call: material, colour, size, brand, style, seating capacity, customer rating, availability, assembly, sustainability and the rest — plus the price buckets, the sort options the page offers, and the neighbouring categories.","required_params":[],"optional_params":["query","category","filters","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Facets for a keyword search.","on_invalid":"reject","example":"sofa","aliases":["q","keyword"]},{"name":"category","type":"string","required":false,"description":"Facets for a category id or URL.","on_invalid":"reject","example":"413892","aliases":["category_id"]},{"name":"filters","type":"array","required":false,"description":"Wayfair facet selections as '<filter_id>~<option_id>' pairs, e.g. '2470~7175' (Material: Genuine Leather). Several stack as AND. Call the `filters` action for the valid pairs of a category.","on_invalid":"reject","example":["2470~7175"],"aliases":["filter"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry on a different route out when the site paces the request. Higher = slower but more reliable.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":12}],"returns":"filters[{filter_id, name, group, type, options[{option_id, name, filter, is_selected, description}], buckets[{name, min, max, is_selected}], range{min, max, units}}], filter_count, option_count, sort_options[{sort_id, name}], sort_note, related_categories[{category_id, name, url}], total_results, resolved_url","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"413892"}},{"name":"product/detail","description":"The full Wayfair product record for one SKU (and, when given, one option): title, brand, price and was-price, sale badge, rating and review count, stock, delivery promise, description, the specification table, structured dimensions and weight, assembly, warranty, certifications, breadcrumbs, every image, and every colour / fabric / size option with its own product URL and stock status.","required_params":["sku"],"optional_params":["option_id","max_rotations"],"params":[{"name":"sku","type":"string","required":true,"description":"Wayfair SKU, e.g. W117906390 — or the full product URL.","on_invalid":"reject","example":"W117906390","aliases":["product_id","listing_id","url"]},{"name":"option_id","type":"string","required":false,"description":"One option (colour / fabric / size) of the listing, as published in `option_groups[].options[].option_id`. The price, images and stock all follow the option.","on_invalid":"reject","example":"860513873","aliases":["piid","variant"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry on a different route out when the site paces the request. Higher = slower but more reliable.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":12}],"returns":"product{sku, variant_sku, variant_id, option_id, title, brand, brand_id, brand_url, manufacturer_part_number, url, price, was_price, currency, sale_label, price_is_from, loyalty_savings, rating, review_count, stock_status, stock_message (null on this surface — Wayfair prints the \"N Left in Stock\" line on the grid, not on the product page; `stock_status` is the product page's answer), delivery{promise, method}, listing_status, is_best_value, category{category_id, name, class_id}, breadcrumbs[{name, category_id, url}], description, specifications[{name, value}], assembly[], warranty[], certifications[], dimensions[{name, value}], selected_options[], option_groups[{name, option_category_id, display, selected_option_id, total_options, options[{option_id, name, url, stock_status, image, available_with_current_selection, price (null unless product/options was called)}]}], images[], lead_image, minimum_order_quantity, quantity_per_unit}, option_price_note","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"W117906390"}},{"name":"product/reviews","description":"The review block Wayfair serves on a product page: the star average, the review count, Wayfair's own AI summary of what customers say, the sentiment aspects, and the five most recent reviews with rating, body, date, reviewer and incentive badge. The source serves only those five without an account — `has_more_on_source` says whether more exist.","required_params":["sku"],"optional_params":["option_id","max_rotations"],"params":[{"name":"sku","type":"string","required":true,"description":"Wayfair SKU, e.g. W117906390 — or the full product URL.","on_invalid":"reject","example":"W117906390","aliases":["product_id","listing_id","url"]},{"name":"option_id","type":"string","required":false,"description":"One option (colour / fabric / size) of the listing, as published in `option_groups[].options[].option_id`. The price, images and stock all follow the option.","on_invalid":"reject","example":"860513873","aliases":["piid","variant"]},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry on a different route out when the site paces the request. Higher = slower but more reliable.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":12}],"returns":"sku, title, rating, review_count, summary{text, disclaimer}, aspects[{name, sentiment, phrase}], reviews[{review_id, rating, body, date, author, location, badge, badge_description, locale, options[]}], count, has_more_on_source, reviews_served_by_source","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"W117906390"}},{"name":"product/options","description":"Every option of a listing WITH ITS OWN PRICE. Wayfair prices each colour and size separately — one sofa measured $264.99 / $289.99 / $499.99 / $269.99 across four fabrics — and only the option's own page carries its price, so this action reads them. Costs one upstream page per option, which is why it is priced above `product/detail`.","required_params":["sku"],"optional_params":["max_options","max_rotations"],"params":[{"name":"sku","type":"string","required":true,"description":"Wayfair SKU, e.g. W117906390 — or the full product URL.","on_invalid":"reject","example":"W117906390","aliases":["product_id","listing_id","url"]},{"name":"max_options","type":"integer","required":false,"description":"How many options to price. Each one is a separate page on the source.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":10},{"name":"max_rotations","type":"integer","required":false,"description":"How many times to retry on a different route out when the site paces the request. Higher = slower but more reliable.","on_invalid":"reject","default":6,"example":6,"minimum":1,"maximum":12}],"returns":"sku, title, brand, url, option_groups[{name, option_category_id, selected_option_id, total_options, options[{option_id, name, url, image, stock_status, price, was_price, currency, priced}]}], priced_count, options_total, price_min, price_max, prices_vary, not_priced_reason","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":4},"example_params":{"sku":"W111515578","max_options":2}}]},{"name":"wayke","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Wayke Sweden cash-priced vehicle search and detail","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/wayke/v1","spec_available":true,"actions":[{"name":"search","description":"Search Sweden public vehicle offers with published SEK cash prices","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Native free text q","on_invalid":"reject","example":"volvo","aliases":["q","keyword"]},{"name":"page","type":"integer","required":false,"description":"Qualified native page 1 or 2","on_invalid":"reject","default":1,"minimum":1,"maximum":2},{"name":"max_results","type":"integer","required":false,"description":"Return cap within the source page","on_invalid":"reject","default":12,"minimum":1,"maximum":24,"aliases":["limit"]}],"returns":"results[], count, total_results, page, source_page_size, has_more, excluded_non_cash_count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"volvo","max_results":3}},{"name":"listing","description":"Resolve native vehicle UUID to published Car cash offer and vehicle fields","required_params":[],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":false,"description":"Search listing UUID","on_invalid":"reject","example":"04f795b2-5775-4409-80d5-0c6e0411bbe6","aliases":["id"]},{"name":"url","type":"string","required":false,"description":"Native HTTPS /objekt/ UUID URL alternative","on_invalid":"reject"}],"returns":"listing{listing_id,title,price,currency,images,seller,model_year,mileage_km,vin,registration_number}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":4},"example_params":{"listing_id":"04f795b2-5775-4409-80d5-0c6e0411bbe6"}}]},{"name":"weather-intel","category":{"id":"utilities","title":"Utilities & AI"},"title":"Weather & Hazards API — global weather forecasts (MET Norway), historical weather (ERA5), marine/wave forecasts, geocoding, air quality + pollen (OpenAQ, Open-Meteo CAMS), official European weather alerts (MeteoAlarm) and natural disasters (GDACS)","version":"2.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/weather-intel/v1","spec_available":true,"actions":[{"name":"environment_current","description":"premium combined snapshot: current weather + AQ + active alerts + nearby hazards + risk_summary{level,reasons,confidence} for a coordinate","required_params":["lat","lon"],"optional_params":["units","include","radius_km"],"params":[{"name":"lat","type":"number","required":true,"description":"Latitude in decimal degrees (WGS84), -90..90.","on_invalid":"reject","example":41.0082,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":true,"description":"Longitude in decimal degrees (WGS84), -180..180.","on_invalid":"reject","example":28.9784,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"units","type":"enum","required":false,"description":"Unit system for temperatures, wind speeds and precipitation.","on_invalid":"ignore","allowed_values":[{"value":"metric","label":"Celsius, m/s, mm"},{"value":"imperial","label":"Fahrenheit, mph, inches"}],"default":"metric","example":"metric"},{"name":"include","type":"string","required":false,"description":"Comma-separated blocks to include: weather, air_quality, alerts, hazards. Default: all.","on_invalid":"ignore","example":"weather,air_quality,alerts,hazards"},{"name":"radius_km","type":"number","required":false,"description":"Search radius in km around the point for nearby hazards (1..2000).","on_invalid":"ignore","default":300,"example":300,"minimum":1,"maximum":2000,"aliases":["radius"]}],"returns":"location{lat,lon,country?}, weather{temperature,feels_like,wind,symbol,…}, air_quality{pollutants,aqi_us,aqi_eu,nearest_station_km} | unavailable-with-reason, alerts{active[],coverage_note}, hazards{events[],…}, risk_summary{level,score,reasons[],confidence}, sources{per-source honesty blocks}, attribution[], disclaimer","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":3},"example_params":{"lat":52.52,"lon":13.405}},{"name":"forecast","description":"global point forecast (MET Norway, ~9 days): hourly steps + daily aggregates with normalized weather-code, feels-like, sunrise/sunset/moon","required_params":["lat","lon"],"optional_params":["units","hours","days"],"params":[{"name":"lat","type":"number","required":true,"description":"Latitude in decimal degrees (WGS84), -90..90.","on_invalid":"reject","example":41.0082,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":true,"description":"Longitude in decimal degrees (WGS84), -180..180.","on_invalid":"reject","example":28.9784,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"units","type":"enum","required":false,"description":"Unit system for temperatures, wind speeds and precipitation.","on_invalid":"ignore","allowed_values":[{"value":"metric","label":"Celsius, m/s, mm"},{"value":"imperial","label":"Fahrenheit, mph, inches"}],"default":"metric","example":"metric"},{"name":"hours","type":"integer","required":false,"description":"Number of forecast steps to return (hourly for ~2.5 days, then 6-hourly to ~day 9 — each step carries its timestamp).","on_invalid":"ignore","default":24,"example":24,"minimum":1,"maximum":90},{"name":"days","type":"integer","required":false,"description":"Number of days (1..10).","on_invalid":"ignore","default":7,"example":7,"minimum":1,"maximum":10}],"returns":"current{...}, hourly[]{time,temperature,feels_like,wind,humidity,pressure,cloud,uv,precipitation,symbol{code,condition,intensity}}, daily[]{date,temperature_min/max,precipitation_total,wind_speed_max,symbol,sunrise,sunset,moon}, source{...honesty}, attribution, disclaimer","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"lat":41.0082,"lon":28.9784,"days":3}},{"name":"air_quality","description":"nearest-station air quality (OpenAQ v3): pollutants + computed AQI-US/EAQI-EU + station distance + measurement freshness; honest insufficient_data when no station","required_params":["lat","lon"],"optional_params":["radius_km"],"params":[{"name":"lat","type":"number","required":true,"description":"Latitude in decimal degrees (WGS84), -90..90.","on_invalid":"reject","example":41.0082,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":true,"description":"Longitude in decimal degrees (WGS84), -180..180.","on_invalid":"reject","example":28.9784,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"radius_km","type":"number","required":false,"description":"Search radius in km around the point for monitoring stations (1..25).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":25,"aliases":["radius"]}],"returns":"pollutants{pm25,pm10,o3,no2,so2,co:{value,unit,measured_at,age_hours,station,station_distance_km,provider}}, aqi_us{value,category,dominant_pollutant}, aqi_eu{index,category}, nearest_station_km, stations[], stale_readings_skipped, insufficient_data?, source{...honesty}, attribution, disclaimer","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"lat":51.5072,"lon":-0.1276,"radius_km":25}},{"name":"alerts","description":"official severe-weather warnings for Europe by country or coordinate (EUMETNET MeteoAlarm, 39 member countries). Coordinates outside MeteoAlarm coverage return an empty, honestly-labelled out-of-coverage answer","required_params":[],"optional_params":["country","lat","lon","severity_min","active_only","limit"],"params":[{"name":"country","type":"enum","required":false,"description":"MeteoAlarm member country (slug or ISO2). Alternative to lat/lon. Coverage = Europe (39 members); US/CA alerts are a pending extension.","on_invalid":"reject","allowed_values":[{"value":"andorra","label":"Andorra"},{"value":"austria","label":"Austria"},{"value":"belgium","label":"Belgium"},{"value":"bosnia-herzegovina","label":"Bosnia and Herzegovina"},{"value":"bulgaria","label":"Bulgaria"},{"value":"croatia","label":"Croatia"},{"value":"cyprus","label":"Cyprus"},{"value":"czech-republic","label":"Czechia"},{"value":"denmark","label":"Denmark"},{"value":"estonia","label":"Estonia"},{"value":"finland","label":"Finland"},{"value":"france","label":"France"},{"value":"germany","label":"Germany"},{"value":"greece","label":"Greece"},{"value":"hungary","label":"Hungary"},{"value":"iceland","label":"Iceland"},{"value":"ireland","label":"Ireland"},{"value":"israel","label":"Israel"},{"value":"italy","label":"Italy"},{"value":"latvia","label":"Latvia"},{"value":"lithuania","label":"Lithuania"},{"value":"luxembourg","label":"Luxembourg"},{"value":"malta","label":"Malta"},{"value":"moldova","label":"Moldova"},{"value":"montenegro","label":"Montenegro"},{"value":"netherlands","label":"Netherlands"},{"value":"north-macedonia","label":"North Macedonia"},{"value":"norway","label":"Norway"},{"value":"poland","label":"Poland"},{"value":"portugal","label":"Portugal"},{"value":"romania","label":"Romania"},{"value":"serbia","label":"Republic of Serbia"},{"value":"slovakia","label":"Slovakia"},{"value":"slovenia","label":"Slovenia"},{"value":"spain","label":"Spain"},{"value":"sweden","label":"Sweden"},{"value":"switzerland","label":"Switzerland"},{"value":"ukraine","label":"Ukraine"},{"value":"united-kingdom","label":"United Kingdom"},{"value":"AD","label":"alias of andorra"},{"value":"AT","label":"alias of austria"},{"value":"BA","label":"alias of bosnia-herzegovina"},{"value":"BE","label":"alias of belgium"},{"value":"BG","label":"alias of bulgaria"},{"value":"CH","label":"alias of switzerland"},{"value":"CY","label":"alias of cyprus"},{"value":"CZ","label":"alias of czech-republic"},{"value":"DE","label":"alias of germany"},{"value":"DK","label":"alias of denmark"},{"value":"EE","label":"alias of estonia"},{"value":"ES","label":"alias of spain"},{"value":"FI","label":"alias of finland"},{"value":"FR","label":"alias of france"},{"value":"GB","label":"alias of united-kingdom"},{"value":"GR","label":"alias of greece"},{"value":"HR","label":"alias of croatia"},{"value":"HU","label":"alias of hungary"},{"value":"IE","label":"alias of ireland"},{"value":"IL","label":"alias of israel"},{"value":"IS","label":"alias of iceland"},{"value":"IT","label":"alias of italy"},{"value":"LT","label":"alias of lithuania"},{"value":"LU","label":"alias of luxembourg"},{"value":"LV","label":"alias of latvia"},{"value":"MD","label":"alias of moldova"},{"value":"ME","label":"alias of montenegro"},{"value":"MK","label":"alias of north-macedonia"},{"value":"MT","label":"alias of malta"},{"value":"NL","label":"alias of netherlands"},{"value":"NO","label":"alias of norway"},{"value":"PL","label":"alias of poland"},{"value":"PT","label":"alias of portugal"},{"value":"RO","label":"alias of romania"},{"value":"RS","label":"alias of serbia"},{"value":"SE","label":"alias of sweden"},{"value":"SI","label":"alias of slovenia"},{"value":"SK","label":"alias of slovakia"},{"value":"UA","label":"alias of ukraine"}],"example":"germany"},{"name":"lat","type":"number","required":false,"description":"Latitude (alternative to country) — resolved to a MeteoAlarm member country.","on_invalid":"reject","example":48.2082,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Longitude (alternative to country).","on_invalid":"reject","example":16.3738,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"severity_min","type":"enum","required":false,"description":"Minimum awareness color (MeteoAlarm yellow/orange/red).","on_invalid":"ignore","allowed_values":[{"value":"yellow","label":"include all warnings"},{"value":"orange","label":"orange + red only"},{"value":"red","label":"red only"}],"example":"orange"},{"name":"active_only","type":"boolean","required":false,"description":"Only warnings active NOW (onset<=now<expires). false = full feed.","on_invalid":"ignore","default":true,"example":true},{"name":"limit","type":"integer","required":false,"description":"Maximum records to return (1..200).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":200}],"returns":"alert_source{authority,scope}, country{slug,name}?, alerts[]{event,severity,urgency,certainty,area,onset,expires,headline,instruction,…}, count, coverage, coverage_note, source{...honesty}, attribution, disclaimer","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"germany","active_only":false}},{"name":"hazards_nearby","description":"GDACS multi-hazard events (earthquake/cyclone/flood/volcano/wildfire/drought) within a radius of a coordinate, distance-sorted","required_params":["lat","lon"],"optional_params":["radius_km","days","types","min_alert_level","limit"],"params":[{"name":"lat","type":"number","required":true,"description":"Latitude in decimal degrees (WGS84), -90..90.","on_invalid":"reject","example":41.0082,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":true,"description":"Longitude in decimal degrees (WGS84), -180..180.","on_invalid":"reject","example":28.9784,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"radius_km","type":"number","required":false,"description":"Search radius in km around the point for hazard events (1..5000).","on_invalid":"ignore","default":500,"example":500,"minimum":1,"maximum":5000,"aliases":["radius"]},{"name":"days","type":"integer","required":false,"description":"Number of days (1..365).","on_invalid":"ignore","default":14,"example":14,"minimum":1,"maximum":365},{"name":"types","type":"string","required":false,"description":"Comma-separated disaster types: earthquake, tropical_cyclone, flood, volcano, wildfire, drought (or GDACS codes EQ/TC/FL/VO/WF/DR). Default: all.","on_invalid":"ignore","example":"earthquake,flood","aliases":["type","event_types"]},{"name":"min_alert_level","type":"enum","required":false,"description":"Minimum GDACS alert level to include.","on_invalid":"ignore","allowed_values":[{"value":"green","label":"all events"},{"value":"orange","label":"medium+ severity"},{"value":"red","label":"severe only"}],"default":"green","example":"orange"},{"name":"limit","type":"integer","required":false,"description":"Maximum records to return (1..200).","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":200}],"returns":"events[]{type,name,alert_level,severity,severity_text,distance_km,coordinates,from,to,is_current,country,report_url}, count, window_truncated{per-type honesty when the newest-100 cap was hit}, source{...honesty}, attribution, disclaimer","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"lat":36.2,"lon":140.5,"radius_km":2000,"days":30}},{"name":"disasters","description":"global GDACS disaster events with type/alert-level/date/bbox filters, or a single-event detail via event_id+event_type","required_params":[],"optional_params":["types","min_alert_level","days","bbox","country","limit","event_id","event_type"],"params":[{"name":"types","type":"string","required":false,"description":"Comma-separated disaster types: earthquake, tropical_cyclone, flood, volcano, wildfire, drought (or GDACS codes EQ/TC/FL/VO/WF/DR). Default: all.","on_invalid":"ignore","example":"earthquake,flood","aliases":["type","event_types"]},{"name":"min_alert_level","type":"enum","required":false,"description":"Minimum GDACS alert level to include.","on_invalid":"ignore","allowed_values":[{"value":"green","label":"all events"},{"value":"orange","label":"medium+ severity"},{"value":"red","label":"severe only"}],"default":"green","example":"orange"},{"name":"days","type":"integer","required":false,"description":"Number of days (1..365).","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":365},{"name":"bbox","type":"string","required":false,"description":"Bounding-box filter 'min_lon,min_lat,max_lon,max_lat' applied to event coordinates. Narrows the result set, so a small box over a quiet region legitimately returns zero events - that is an empty answer, not an error. Omit it to see everything the category has.","on_invalid":"ignore","example":"-130,24,-65,50"},{"name":"country","type":"string","required":false,"description":"Filter by GDACS country name or ISO3 (case-insensitive substring).","on_invalid":"reject","example":"Indonesia"},{"name":"limit","type":"integer","required":false,"description":"Maximum records to return (1..300).","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":300},{"name":"event_id","type":"integer","required":false,"description":"GDACS event id — returns the single-event detail (use with event_type code, e.g. EQ).","on_invalid":"ignore","example":1545450},{"name":"event_type","type":"enum","required":false,"description":"GDACS event type code for event_id detail lookups.","on_invalid":"reject","allowed_values":[{"value":"EQ","label":"earthquake"},{"value":"TC","label":"tropical_cyclone"},{"value":"FL","label":"flood"},{"value":"VO","label":"volcano"},{"value":"WF","label":"wildfire"},{"value":"DR","label":"drought"}],"example":"EQ"}],"returns":"events[]{type,name,alert_level,severity,country,coordinates,from,to,is_current,report_url}, count, window_truncated, source{...honesty}, attribution, disclaimer — or event{...full GDACS detail} when event_id","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"days":30}},{"name":"geocode","description":"Place name → coordinates (Open-Meteo Geocoding, GeoNames-backed, free/keyless): turns a city/town/region name into the lat/lon every other weather-intel action needs, with country, region (admin1/2), population, timezone and elevation. Pass 'id' (a GeoNames id from a prior result) for the single canonical record instead of a name search.","required_params":[],"optional_params":["name","id","language","count"],"params":[{"name":"name","type":"string","required":false,"description":"Place name to search for (city, town, region) — at least 2 characters. Returns matching locations with coordinates. Pass 'id' instead to look up a specific GeoNames id.","on_invalid":"ignore","example":"Istanbul","aliases":["q","query","place"]},{"name":"id","type":"integer","required":false,"description":"GeoNames id (from a prior search result's 'id') to fetch the single canonical place record. Alternative to 'name'.","on_invalid":"ignore","example":745044,"aliases":["geoname_id"]},{"name":"language","type":"string","required":false,"description":"Result language (ISO-639-1, e.g. en, de, fr, tr, es). Affects the localized place/country/region names.","on_invalid":"ignore","default":"en","example":"en"},{"name":"count","type":"integer","required":false,"description":"Maximum number of place matches to return (1..100).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"results[]{id,name,lat,lon,country,country_code,admin1,admin2,population,elevation_m,timezone,feature_code,postcodes}, count, query, source{...honesty}, attribution, disclaimer — or result{...} for an id lookup; empty results[] (count 0) when nothing matches (honest, no guess)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"Istanbul","count":3}},{"name":"historical","description":"Historical weather (Open-Meteo Archive / ERA5 reanalysis, 1940→present, free/keyless) for a coordinate and date range: daily aggregates (min/max temp, precipitation, wind, weather-code, sunrise/sunset) and/or hourly variables. The live forecast actions exclude history — this is the long-record companion. Default daily set is returned when neither 'daily' nor 'hourly' is specified.","required_params":["lat","lon","start_date","end_date"],"optional_params":["units","daily","hourly"],"params":[{"name":"lat","type":"number","required":true,"description":"Latitude in decimal degrees (WGS84), -90..90.","on_invalid":"reject","example":41.0082,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":true,"description":"Longitude in decimal degrees (WGS84), -180..180.","on_invalid":"reject","example":28.9784,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"start_date","type":"string","required":true,"description":"Start date (ISO YYYY-MM-DD), 1940-01-01 or later.","on_invalid":"reject","example":"2024-01-01"},{"name":"end_date","type":"string","required":true,"description":"End date (ISO YYYY-MM-DD), on/after start_date. ERA5 archive lags the present by ~5 days.","on_invalid":"reject","example":"2024-01-07"},{"name":"units","type":"enum","required":false,"description":"Unit system for temperatures, wind speeds and precipitation.","on_invalid":"ignore","allowed_values":[{"value":"metric","label":"Celsius, m/s, mm"},{"value":"imperial","label":"Fahrenheit, mph, inches"}],"default":"metric","example":"metric"},{"name":"daily","type":"string","required":false,"description":"Comma-separated DAILY variables (Open-Meteo names), e.g. temperature_2m_max, temperature_2m_min, precipitation_sum, rain_sum, snowfall_sum, weather_code, apparent_temperature_max, wind_speed_10m_max, sunrise, sunset. Default set used if both daily+hourly omitted.","on_invalid":"ignore","example":"temperature_2m_max,temperature_2m_min,precipitation_sum,weather_code,wind_speed_10m_max"},{"name":"hourly","type":"string","required":false,"description":"Comma-separated HOURLY variables (Open-Meteo names), e.g. temperature_2m, relative_humidity_2m, precipitation, wind_speed_10m, pressure_msl, cloud_cover, weather_code. Optional — omit for daily-only.","on_invalid":"ignore","example":"temperature_2m,relative_humidity_2m,precipitation,wind_speed_10m"}],"returns":"location{lat,lon,elevation_m}, range{start_date,end_date}, units, daily[]{time,...requested vars + normalized symbol from weather_code}, daily_units{}, hourly[]{time,...}?, hourly_units{}?, source{...honesty}, attribution, disclaimer","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"lat":41.0082,"lon":28.9784,"start_date":"2024-01-01","end_date":"2024-01-07"}},{"name":"marine","description":"Marine / ocean-wave forecast (Open-Meteo Marine, free/keyless) for a coordinate: significant wave height, period and direction plus swell and wind-wave components — hourly out to several days, plus daily maxima and the current sea state. On land (no marine grid cell) values are honestly null (never fabricated).","required_params":["lat","lon"],"optional_params":["units","forecast_days","hourly","daily","current"],"params":[{"name":"lat","type":"number","required":true,"description":"Latitude in decimal degrees (WGS84), -90..90.","on_invalid":"reject","example":41.0082,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":true,"description":"Longitude in decimal degrees (WGS84), -180..180.","on_invalid":"reject","example":28.9784,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"units","type":"enum","required":false,"description":"Unit system for temperatures, wind speeds and precipitation.","on_invalid":"ignore","allowed_values":[{"value":"metric","label":"Celsius, m/s, mm"},{"value":"imperial","label":"Fahrenheit, mph, inches"}],"default":"metric","example":"metric"},{"name":"forecast_days","type":"integer","required":false,"description":"Number of forecast days for wave data (1..8).","on_invalid":"ignore","default":3,"example":3,"minimum":1,"maximum":8,"aliases":["days"]},{"name":"hourly","type":"string","required":false,"description":"Comma-separated HOURLY wave variables, e.g. wave_height, wave_direction, wave_period, swell_wave_height, swell_wave_direction, swell_wave_period, wind_wave_height, wind_wave_direction. Default set used if omitted.","on_invalid":"ignore","example":"wave_height,wave_direction,wave_period,swell_wave_height"},{"name":"daily","type":"string","required":false,"description":"Comma-separated DAILY wave variables, e.g. wave_height_max, wave_direction_dominant, wave_period_max, swell_wave_height_max.","on_invalid":"ignore","example":"wave_height_max,wave_direction_dominant,wave_period_max"},{"name":"current","type":"boolean","required":false,"description":"Include the current sea state (wave_height, direction, period, swell, wind-wave).","on_invalid":"ignore","default":true,"example":true}],"returns":"location{lat,lon}, units, current{time,wave_height,wave_direction,wave_period,swell_wave_height,wind_wave_height}?, hourly[]{time,...}, hourly_units{}, daily[]{time,...}?, daily_units{}?, on_land_note?, source{...honesty}, attribution, disclaimer","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"lat":54.544,"lon":10.402,"forecast_days":2}},{"name":"air_quality_forecast","description":"Air-quality FORECAST + pollen (Open-Meteo Air-Quality, CAMS-backed, free/keyless) for a coordinate: hourly forecast of PM2.5/PM10/O3/NO2/SO2/CO, the European AQI and US AQI, plus European pollen (alder/birch/grass/olive/ragweed/mugwort). Complements the OpenAQ nearest-station `air_quality` (which is measured, current only) with a forward forecast and pollen — and needs NO API key. Pollen is European-domain only; outside Europe it is honestly null.","required_params":["lat","lon"],"optional_params":["forecast_days","hourly","current"],"params":[{"name":"lat","type":"number","required":true,"description":"Latitude in decimal degrees (WGS84), -90..90.","on_invalid":"reject","example":41.0082,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":true,"description":"Longitude in decimal degrees (WGS84), -180..180.","on_invalid":"reject","example":28.9784,"minimum":-180,"maximum":180,"aliases":["longitude","lng"]},{"name":"forecast_days","type":"integer","required":false,"description":"Number of forecast days for air quality (1..7).","on_invalid":"ignore","default":3,"example":3,"minimum":1,"maximum":7,"aliases":["days"]},{"name":"hourly","type":"string","required":false,"description":"Comma-separated HOURLY variables, e.g. pm2_5, pm10, ozone, nitrogen_dioxide, sulphur_dioxide, carbon_monoxide, european_aqi, us_aqi, uv_index, alder_pollen, birch_pollen, grass_pollen, olive_pollen, ragweed_pollen, mugwort_pollen. Default set used if omitted.","on_invalid":"ignore","example":"pm2_5,pm10,ozone,nitrogen_dioxide,european_aqi,us_aqi,grass_pollen,birch_pollen"},{"name":"current","type":"boolean","required":false,"description":"Include the current-hour AQ + pollen snapshot.","on_invalid":"ignore","default":true,"example":true}],"returns":"location{lat,lon}, current{time,pm2_5,pm10,european_aqi,us_aqi,...pollen}?, hourly[]{time,...}, hourly_units{}, pollen_note, source{...honesty}, attribution, disclaimer","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"lat":52.52,"lon":13.405,"forecast_days":2}}]},{"name":"web-archive","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Web Archive API — historical website snapshots from the Wayback Machine and Common Crawl: capture index, closest snapshot, first/last-seen history and domain-wide captures","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/web-archive/v1","spec_available":true,"actions":[{"name":"snapshots","description":"All Wayback captures for a URL (timestamp, status, mimetype, digest, archival size, snapshot_url), date/status/mime filtered, collapsible, RESUME-KEY PAGINATED.","required_params":["url"],"optional_params":["from","to","limit","collapse","match","status","mime","filter","resume_key"],"params":[{"name":"url","type":"string","required":true,"description":"The URL, host, or path to look up in the archive (e.g. 'github.com', 'github.com/torvalds', 'https://example.com/page'). Scheme optional. Use with match=prefix/domain/host to widen.","on_invalid":"reject","example":"github.com","aliases":["u","domain","site"]},{"name":"from","type":"string","required":false,"description":"Earliest capture to include. ISO date (YYYY-MM-DD) or a Wayback timestamp (YYYYMMDDhhmmss, any 4-14 digit prefix). Inclusive.","on_invalid":"ignore","example":"2010-01-01","aliases":["from_date","since","start"]},{"name":"to","type":"string","required":false,"description":"Latest capture to include. ISO date or Wayback timestamp prefix. Inclusive.","on_invalid":"ignore","example":"2015-12-31","aliases":["to_date","until","end"]},{"name":"limit","type":"integer","required":false,"description":"Max captures to return (1-1000, default 100). Page further with meta.resume_key on the snapshots action.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":1000},{"name":"collapse","type":"enum","required":false,"description":"Deduplicate consecutive captures on a field (CDX 'collapse'). collapse=digest is the change-detection workhorse.","on_invalid":"reject","allowed_values":[{"value":"digest","label":"One row per unique content hash — drops consecutive identical captures (best for 'when did the page actually change?')"},{"value":"timestamp:4","label":"One capture per year (timestamp:6=month, :8=day, :10=hour)"},{"value":"timestamp:6","label":"One capture per month"},{"value":"timestamp:8","label":"One capture per day"},{"value":"timestamp:10","label":"One capture per hour"},{"value":"urlkey","label":"One row per unique URL (best with match=domain/prefix)"},{"value":"original","label":"One row per unique original URL"},{"value":"statuscode","label":"Collapse consecutive identical status codes"},{"value":"mimetype","label":"Collapse consecutive identical mime types"}],"example":"digest"},{"name":"match","type":"enum","required":false,"description":"How to match url: exact | prefix | host | domain. domain_captures forces 'domain'.","on_invalid":"ignore","allowed_values":[{"value":"exact","label":"Only this exact URL (default)"},{"value":"prefix","label":"All URLs under this path prefix (url/path*)"},{"value":"host","label":"All URLs on this exact host"},{"value":"domain","label":"All URLs on this domain AND its subdomains"}],"default":"exact","example":"exact","aliases":["matchType","match_type"]},{"name":"status","type":"string","required":false,"description":"Keep only captures with this HTTP status (e.g. 200, 404, 301). Prefix with '!' to exclude (e.g. '!200').","on_invalid":"ignore","example":"200","aliases":["statuscode","status_code"]},{"name":"mime","type":"string","required":false,"description":"Keep only captures of this MIME type (e.g. text/html, application/pdf, image/png). Prefix with '!' to exclude.","on_invalid":"ignore","example":"text/html","aliases":["mimetype"]},{"name":"filter","type":"string","required":false,"description":"Advanced raw CDX filter expression(s), comma-separated. Format [!]field:regex over urlkey/timestamp/original/mimetype/statuscode/digest/length (e.g. 'original:.*\\.pdf$'). Power-user escape hatch.","on_invalid":"ignore","example":"statuscode:200"},{"name":"resume_key","type":"string","required":false,"description":"Opaque pagination token from meta.resume_key of the previous page; returns the next page of captures.","on_invalid":"ignore"}],"returns":"snapshots[] (timestamp, datetime, original, mimetype, statuscode, digest, length, snapshot_url); meta.record_count + meta.resume_key/has_more","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"github.com","limit":10,"collapse":"digest"}},{"name":"available","description":"Closest single Wayback snapshot to a given date (or the latest). Fast existence check.","required_params":["url"],"optional_params":["timestamp"],"params":[{"name":"url","type":"string","required":true,"description":"The URL, host, or path to look up in the archive (e.g. 'github.com', 'github.com/torvalds', 'https://example.com/page'). Scheme optional. Use with match=prefix/domain/host to widen.","on_invalid":"reject","example":"github.com","aliases":["u","domain","site"]},{"name":"timestamp","type":"string","required":false,"description":"Target date for the closest snapshot. ISO date or Wayback timestamp prefix. Omitted → the most recent capture.","on_invalid":"ignore","example":"20120601","aliases":["ts","date"]}],"returns":"available (bool), closest{timestamp, datetime, status, snapshot_url}, url","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"github.com","timestamp":"20120601"}},{"name":"history","description":"Lifespan + capture cadence for a URL: EXACT first_seen/last_seen + span, plus per-year capture counts and status/mime breakdown — the SEO/due-diligence summary.","required_params":["url"],"optional_params":["from","to","match"],"params":[{"name":"url","type":"string","required":true,"description":"The URL, host, or path to look up in the archive (e.g. 'github.com', 'github.com/torvalds', 'https://example.com/page'). Scheme optional. Use with match=prefix/domain/host to widen.","on_invalid":"reject","example":"github.com","aliases":["u","domain","site"]},{"name":"from","type":"string","required":false,"description":"Earliest capture to include. ISO date (YYYY-MM-DD) or a Wayback timestamp (YYYYMMDDhhmmss, any 4-14 digit prefix). Inclusive.","on_invalid":"ignore","example":"2010-01-01","aliases":["from_date","since","start"]},{"name":"to","type":"string","required":false,"description":"Latest capture to include. ISO date or Wayback timestamp prefix. Inclusive.","on_invalid":"ignore","example":"2015-12-31","aliases":["to_date","until","end"]},{"name":"match","type":"enum","required":false,"description":"How to match url: exact | prefix | host | domain. domain_captures forces 'domain'.","on_invalid":"ignore","allowed_values":[{"value":"exact","label":"Only this exact URL (default)"},{"value":"prefix","label":"All URLs under this path prefix (url/path*)"},{"value":"host","label":"All URLs on this exact host"},{"value":"domain","label":"All URLs on this domain AND its subdomains"}],"default":"exact","example":"exact","aliases":["matchType","match_type"]}],"returns":"first_seen + last_seen (EXACT, pinpoint), first/last_snapshot_url, span_days, years{year:count}, status_codes{code:count}, mime_types{type:count}, sampled_capture_days + sample_capped (years/breakdown are a capture-per-day sample capped at 1000 — first/last_seen are NOT sampled)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"github.com"}},{"name":"domain_captures","description":"All archived URLs under a domain (the domain + its subdomains), one row per unique URL — the 'every page this site ever had' view. Resume-key paginated.","required_params":["url"],"optional_params":["from","to","limit","status","mime","filter","resume_key"],"params":[{"name":"url","type":"string","required":true,"description":"The URL, host, or path to look up in the archive (e.g. 'github.com', 'github.com/torvalds', 'https://example.com/page'). Scheme optional. Use with match=prefix/domain/host to widen.","on_invalid":"reject","example":"github.com","aliases":["u","domain","site"]},{"name":"from","type":"string","required":false,"description":"Earliest capture to include. ISO date (YYYY-MM-DD) or a Wayback timestamp (YYYYMMDDhhmmss, any 4-14 digit prefix). Inclusive.","on_invalid":"ignore","example":"2010-01-01","aliases":["from_date","since","start"]},{"name":"to","type":"string","required":false,"description":"Latest capture to include. ISO date or Wayback timestamp prefix. Inclusive.","on_invalid":"ignore","example":"2015-12-31","aliases":["to_date","until","end"]},{"name":"limit","type":"integer","required":false,"description":"Max captures to return (1-1000, default 100). Page further with meta.resume_key on the snapshots action.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":1000},{"name":"status","type":"string","required":false,"description":"Keep only captures with this HTTP status (e.g. 200, 404, 301). Prefix with '!' to exclude (e.g. '!200').","on_invalid":"ignore","example":"200","aliases":["statuscode","status_code"]},{"name":"mime","type":"string","required":false,"description":"Keep only captures of this MIME type (e.g. text/html, application/pdf, image/png). Prefix with '!' to exclude.","on_invalid":"ignore","example":"text/html","aliases":["mimetype"]},{"name":"filter","type":"string","required":false,"description":"Advanced raw CDX filter expression(s), comma-separated. Format [!]field:regex over urlkey/timestamp/original/mimetype/statuscode/digest/length (e.g. 'original:.*\\.pdf$'). Power-user escape hatch.","on_invalid":"ignore","example":"statuscode:200"},{"name":"resume_key","type":"string","required":false,"description":"Pagination token from the previous page's meta.resume_key.","on_invalid":"ignore"}],"returns":"urls[] (original, urlkey, first/last timestamp+datetime, captures, statuscode, mimetype, snapshot_url); meta.record_count + resume_key/has_more","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"github.com","limit":20}},{"name":"batch","description":"Closest-snapshot existence + capture-count for up to 20 URLs in one call (bulk archival presence — competitor/portfolio sweeps).","required_params":["urls"],"optional_params":["timestamp"],"params":[{"name":"urls","type":"array","required":true,"description":"Up to 20 URLs/hosts to look up at once (JSON array or comma/newline-separated string).","on_invalid":"reject","example":["github.com","python.org"],"aliases":["targets"]},{"name":"timestamp","type":"string","required":false,"description":"Target date for the closest snapshot. ISO date or Wayback timestamp prefix. Omitted → the most recent capture.","on_invalid":"ignore","example":"20120601","aliases":["ts","date"]}],"returns":"results[] (url, archived(bool), closest{timestamp,datetime,snapshot_url,status}); meta.record_count = URLs processed","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"urls":["github.com","python.org"]}},{"name":"cc_search","description":"Common Crawl index lookup for a URL — alternate/broader coverage with richer fields (detected language, encoding, WARC offset/filename). Cross-source corroboration.","required_params":["url"],"optional_params":["collection","match","limit","from","to","filter"],"params":[{"name":"url","type":"string","required":true,"description":"The URL, host, or path to look up in the archive (e.g. 'github.com', 'github.com/torvalds', 'https://example.com/page'). Scheme optional. Use with match=prefix/domain/host to widen.","on_invalid":"reject","example":"github.com","aliases":["u","domain","site"]},{"name":"collection","type":"string","required":false,"description":"Common Crawl index id (e.g. 'CC-MAIN-2026-21'). Omit to use the newest index. List ids via action='cc_indexes'.","on_invalid":"ignore","example":"CC-MAIN-2026-21","aliases":["index","crawl"]},{"name":"match","type":"enum","required":false,"description":"URL match mode for the Common Crawl index query.","on_invalid":"ignore","allowed_values":[{"value":"exact","label":"Only this exact URL (default)"},{"value":"prefix","label":"All URLs under this path prefix"},{"value":"host","label":"All URLs on this exact host"},{"value":"domain","label":"This domain and subdomains"}],"default":"exact","example":"exact","aliases":["matchType","match_type"]},{"name":"limit","type":"integer","required":false,"description":"Max captures to return (1-1000, default 100). Page further with meta.resume_key on the snapshots action.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":1000},{"name":"from","type":"string","required":false,"description":"Earliest capture to include. ISO date (YYYY-MM-DD) or a Wayback timestamp (YYYYMMDDhhmmss, any 4-14 digit prefix). Inclusive.","on_invalid":"ignore","example":"2010-01-01","aliases":["from_date","since","start"]},{"name":"to","type":"string","required":false,"description":"Latest capture to include. ISO date or Wayback timestamp prefix. Inclusive.","on_invalid":"ignore","example":"2015-12-31","aliases":["to_date","until","end"]},{"name":"filter","type":"string","required":false,"description":"Advanced raw CDX filter expression(s), comma-separated. Format [!]field:regex over urlkey/timestamp/original/mimetype/statuscode/digest/length (e.g. 'original:.*\\.pdf$'). Power-user escape hatch.","on_invalid":"ignore","example":"statuscode:200"}],"returns":"records[] (timestamp, datetime, original, mimetype, statuscode, digest, length, languages, encoding, warc_filename, warc_offset); meta.collection","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"github.com","limit":5}},{"name":"cc_indexes","description":"List the available Common Crawl monthly indexes (id, name, date range) — pick a collection for cc_search.","required_params":[],"optional_params":[],"params":[],"returns":"indexes[] (id, name, from, to, cdx_api); meta.record_count = index count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"web-extract","category":{"id":"developer-tools","title":"Developer Tools"},"title":"Web Extract API — any URL to markdown, text, HTML, metadata, links, structured data (JSON-LD), site map, crawl, and deterministic extract. Security-guarded, no-key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/web-extract/v1","spec_available":true,"actions":[{"name":"scrape","description":"Fetch one URL and return its content in the formats you choose (markdown, plain text, cleaned HTML, raw HTML, metadata, links, images, or structured JSON-LD data). Automatically upgrades thin single-page-app pages to a full browser render when needed. Works on any public page — news articles, product pages, documentation, blogs.","required_params":["url"],"optional_params":["formats","render","only_main_content","include_tags","exclude_tags","target_selector"],"params":[{"name":"url","type":"string","required":true,"description":"The page URL to extract. Full URL or bare domain (https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked.","on_invalid":"reject","example":"https://en.wikipedia.org/wiki/Web_scraping","aliases":["link","page"]},{"name":"formats","type":"array","required":false,"description":"Which outputs to return (array or comma-string). Any of: markdown, text, html (cleaned main-content), rawHtml, metadata, links, images, jsonld. Default: markdown+metadata. Unknown values are ignored. For screenshots use the web-capture engine.","on_invalid":"ignore","allowed_values":[{"value":"markdown","label":"markdown"},{"value":"text","label":"text"},{"value":"html","label":"html"},{"value":"rawHtml","label":"rawHtml"},{"value":"metadata","label":"metadata"},{"value":"links","label":"links"},{"value":"images","label":"images"},{"value":"jsonld","label":"jsonld"}],"default":["markdown","metadata"],"example":["markdown","metadata","links"]},{"name":"render","type":"enum","required":false,"description":"When to activate browser rendering for JavaScript-heavy pages. 'auto' (default) detects thin/client-rendered pages and re-fetches them with a real browser automatically — rich server-rendered pages are served instantly without a browser. 'force' always uses a browser; 'never' skips rendering for maximum speed.","on_invalid":"ignore","allowed_values":[{"value":"auto","label":"Render only when the bare body is thin/JS-hydrated (default)"},{"value":"never","label":"Bare fetch only — never render"},{"value":"force","label":"Always render with a browser"}],"default":"auto","example":"auto"},{"name":"only_main_content","type":"boolean","required":false,"description":"Remove navigation bars, headers, footers, and boilerplate — keep only the main article or content body (default true). Turn off to get the full raw page content.","on_invalid":"ignore","default":true,"example":true,"aliases":["onlyMainContent"]},{"name":"include_tags","type":"array","required":false,"description":"CSS selectors to include — only elements matching these selectors are kept in the extracted content, e.g. ['article', 'main', '.post-body'].","on_invalid":"ignore","example":["article","main"],"aliases":["includeTags"]},{"name":"exclude_tags","type":"array","required":false,"description":"CSS selectors to remove before extraction — useful for stripping ads, cookie banners, or sidebar widgets, e.g. ['nav', 'footer', '.ads'].","on_invalid":"ignore","example":["nav","footer",".ads"],"aliases":["excludeTags"]},{"name":"target_selector","type":"string","required":false,"description":"Return only the content inside this CSS selector — e.g. 'article.post' to extract a specific section of the page and ignore everything else.","on_invalid":"ignore","example":"article.post","aliases":["targetSelector"]}],"returns":"final_url, title, metadata{canonical,lang,site_name,author,published_at,og,...}, extraction{method,rendered,confidence,content_chars,render_source}, + each requested format (markdown/text/html/rawHtml/links[]/images[]/jsonld{}). render=auto transparently upgrades thin/SPA pages to a browser render.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://en.wikipedia.org/wiki/Web_scraping","formats":["markdown","metadata"]}},{"name":"map","description":"Discover a site's complete URL surface: reads robots.txt, sitemap.xml (and sitemap indexes), and the homepage's internal links — returns a deduplicated URL list with a page-type label for each (home, pricing, docs, blog, product, legal, contact, about). Use this to index any site or audit its structure.","required_params":["url"],"optional_params":["search","limit","include_subdomains"],"params":[{"name":"url","type":"string","required":true,"description":"The page URL to extract. Full URL or bare domain (https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked.","on_invalid":"reject","example":"https://en.wikipedia.org/wiki/Web_scraping","aliases":["link","page"]},{"name":"search","type":"string","required":false,"description":"Filter discovered links by a URL substring — matched URLs are returned first, e.g. '/blog' to prioritize blog pages or '/docs' for documentation.","on_invalid":"ignore","example":"pricing"},{"name":"limit","type":"integer","required":false,"description":"Max links to return (1-1000, default 200).","on_invalid":"ignore","default":200,"example":100,"minimum":1,"maximum":1000},{"name":"include_subdomains","type":"boolean","required":false,"description":"Include subdomain URLs found in sitemaps (default false).","on_invalid":"ignore","default":false,"example":false,"aliases":["includeSubdomains"]}],"returns":"origin, links[]{url,page_type}, count, page_types{type:count}, sitemaps[], robots_present, sources{sitemap,homepage}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://stripe.com","limit":50}},{"name":"crawl","description":"Crawl a site starting from a seed URL (up to 25 pages): follows internal links breadth-first with configurable depth, include/exclude URL patterns, and returns every visited page in the formats you choose. Ideal for content indexing, site audits, and building knowledge bases from documentation or blog sites.","required_params":["url"],"optional_params":["max_pages","max_depth","same_domain_only","include_patterns","exclude_patterns","formats"],"params":[{"name":"url","type":"string","required":true,"description":"The page URL to extract. Full URL or bare domain (https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked.","on_invalid":"reject","example":"https://en.wikipedia.org/wiki/Web_scraping","aliases":["link","page"]},{"name":"max_pages","type":"integer","required":false,"description":"Maximum number of pages to crawl in one call (1–25, default 10). Increase for deeper site coverage.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":25,"aliases":["limit"]},{"name":"max_depth","type":"integer","required":false,"description":"Max link depth from the seed URL (0-5, default 2).","on_invalid":"ignore","default":2,"example":2,"minimum":0,"maximum":5,"aliases":["maxDepth"]},{"name":"same_domain_only","type":"boolean","required":false,"description":"Only follow links on the seed's registrable domain (default true).","on_invalid":"ignore","default":true,"example":true,"aliases":["sameDomainOnly"]},{"name":"include_patterns","type":"array","required":false,"description":"Regex patterns; only URLs whose path matches are crawled.","on_invalid":"ignore","example":["/blog/.*"],"aliases":["includePaths"]},{"name":"exclude_patterns","type":"array","required":false,"description":"Regex patterns; URLs whose path matches are skipped.","on_invalid":"ignore","example":["/tag/.*"],"aliases":["excludePaths"]},{"name":"formats","type":"array","required":false,"description":"Which outputs to return (array or comma-string). Any of: markdown, text, html (cleaned main-content), rawHtml, metadata, links, images, jsonld. Default: markdown+metadata. Unknown values are ignored. For screenshots use the web-capture engine.","on_invalid":"ignore","allowed_values":[{"value":"markdown","label":"markdown"},{"value":"text","label":"text"},{"value":"html","label":"html"},{"value":"rawHtml","label":"rawHtml"},{"value":"metadata","label":"metadata"},{"value":"links","label":"links"},{"value":"images","label":"images"},{"value":"jsonld","label":"jsonld"}],"default":["markdown","metadata"],"example":["markdown","metadata","links"]}],"returns":"pages[]{url,page_type,...requested formats}, count, stop_reason (complete|max_pages|max_depth), pages_visited","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://example.com","max_pages":2,"max_depth":1}},{"name":"extract","description":"Pull structured data from any public page: returns JSON-LD objects (Product, Article, Organization, etc.), microdata presence, parsed table rows, heading outline, prices, emails, and phone numbers. Supply an optional field-to-path schema to extract specific values directly — great for e-commerce pricing, article metadata, and business listings.","required_params":["url"],"optional_params":["schema","deterministic_only"],"params":[{"name":"url","type":"string","required":true,"description":"The page URL to extract. Full URL or bare domain (https:// assumed). Only http/https; private/internal/metadata targets are SSRF-blocked.","on_invalid":"reject","example":"https://en.wikipedia.org/wiki/Web_scraping","aliases":["link","page"]},{"name":"schema","type":"object","required":false,"description":"Optional field extraction map — a JSON object where each key is your output field name and the value is a dot-path into the page's structured data, e.g. {'price': 'offers.price', 'name': 'name'}.","on_invalid":"ignore","example":{"price":"offers.price","name":"name"}},{"name":"deterministic_only","type":"boolean","required":false,"description":"Use only rule-based extraction (structured data, microdata, tables, headings, prices) — always-on and fully predictable. Default true; set false to opt into AI-assisted free-form extraction when available.","on_invalid":"ignore","default":true,"example":true}],"returns":"final_url, jsonld{objects,types}, has_microdata, has_rdfa, tables[], headings[], prices[], emails[], phones[], schema_result{} (if schema given)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://en.wikipedia.org/wiki/Python_(programming_language)"}},{"name":"batch","description":"Scrape up to 10 URLs concurrently in one call (each SSRF-guarded). Shared formats. Firecrawl /batch-scrape parity (bounded).","required_params":["urls"],"optional_params":["formats","only_main_content","timeout"],"params":[{"name":"urls","type":"array","required":true,"description":"List of page URLs to scrape in one call (max 10); each is independently SSRF-guarded and fetched concurrently.","on_invalid":"reject","example":["https://stripe.com","https://github.com"]},{"name":"formats","type":"array","required":false,"description":"Which outputs to return (array or comma-string). Any of: markdown, text, html (cleaned main-content), rawHtml, metadata, links, images, jsonld. Default: markdown+metadata. Unknown values are ignored. For screenshots use the web-capture engine.","on_invalid":"ignore","allowed_values":[{"value":"markdown","label":"markdown"},{"value":"text","label":"text"},{"value":"html","label":"html"},{"value":"rawHtml","label":"rawHtml"},{"value":"metadata","label":"metadata"},{"value":"links","label":"links"},{"value":"images","label":"images"},{"value":"jsonld","label":"jsonld"}],"default":["markdown","metadata"],"example":["markdown","metadata","links"]},{"name":"only_main_content","type":"boolean","required":false,"description":"Remove navigation bars, headers, footers, and boilerplate — keep only the main article or content body (default true). Turn off to get the full raw page content.","on_invalid":"ignore","default":true,"example":true,"aliases":["onlyMainContent"]},{"name":"timeout","type":"integer","required":false,"description":"Per-URL fetch timeout in seconds (5–60, default 25). Raise it for slow origins; lower it to fail fast on a large batch.","on_invalid":"ignore","default":25,"example":25,"minimum":5,"maximum":60,"aliases":["timeout_seconds"]}],"returns":"results[]{ok,url,final_url,...formats | error}, count, ok_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"urls":["https://example.com","https://en.wikipedia.org/wiki/HTML"]}}]},{"name":"webmotors","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Webmotors API — Brazil's largest car and motorbike marketplace: used-car search with the filters dealers actually use, full listing records with BOTH Brazilian years (ano de fabricação and ano do modelo), the FIPE reference price next to the asking price, the seller, and every photo.","version":"1.0.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/webmotors/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Webmotors stock (carros and motos) by make, model, version, model-year range, price range, mileage range, transmission, fuel, body type, colour, doors, equipment, seller type or location. Returns the full listing row for every hit plus webmotors' own total for the query.","required_params":[],"optional_params":["vehicle_type","make","model","trim","year_min","year_max","price_min","price_max","mileage_min","mileage_max","transmission","fuel","body_type","exterior_color","doors","seller_type","condition","armored","optionals","attributes","final_plate","lifestyle","location","engine_cc_min","engine_cc_max","dealer_id","sort","page","page_size"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"car = carros, bike = motos. Both live in the same index.","on_invalid":"reject","allowed_values":[{"value":"car","label":"car"},{"value":"bike","label":"bike"}],"default":"car","example":"car"},{"name":"make","type":"string","required":false,"description":"Manufacturer as webmotors spells it (see `makes_models`). Case and accents do not matter; VW, GM and the FIPE spellings are read as VOLKSWAGEN / CHEVROLET. A make webmotors does not know is refused (INVALID_PARAM, with the closest makes), never ignored.","on_invalid":"reject","example":"TOYOTA"},{"name":"model","type":"string","required":false,"description":"Model name as webmotors spells it (see `makes_models`); needs `make`. An unknown model is refused (INVALID_PARAM, with the closest models).","on_invalid":"reject","example":"COROLLA"},{"name":"trim","type":"string","required":false,"description":"Version (`versão`) exactly as a search row returns it in `trim`; needs `make` and `model`. An unknown trim is refused (INVALID_PARAM).","on_invalid":"reject","example":"2.0 XEI 16V FLEX 4P AUTOMÁTICO","aliases":["version"]},{"name":"year_min","type":"integer","required":false,"description":"Lowest ANO DO MODELO (model year) to include.","on_invalid":"reject","example":2018,"minimum":1900,"maximum":2100,"aliases":["min_year"]},{"name":"year_max","type":"integer","required":false,"description":"Highest ANO DO MODELO (model year) to include.","on_invalid":"reject","example":2024,"minimum":1900,"maximum":2100,"aliases":["max_year"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest asking price in BRL.","on_invalid":"reject","example":50000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest asking price in BRL.","on_invalid":"reject","example":150000,"minimum":0,"aliases":["max_price"]},{"name":"mileage_min","type":"integer","required":false,"description":"Lowest odometer reading in km.","on_invalid":"reject","example":0,"minimum":0,"aliases":["min_mileage"]},{"name":"mileage_max","type":"integer","required":false,"description":"Highest odometer reading in km.","on_invalid":"reject","example":60000,"minimum":0,"aliases":["max_mileage"]},{"name":"transmission","type":"array","required":false,"description":"One or more gearbox types, webmotors' own labels.","on_invalid":"ignore","allowed_values":[{"value":"Automática","label":"Automática"},{"value":"Manual","label":"Manual"},{"value":"CVT","label":"CVT"},{"value":"Semi-automática","label":"Semi-automática"},{"value":"Automatizada","label":"Automatizada"},{"value":"Automatizada DCT","label":"Automatizada DCT"},{"value":"Automático sequencial","label":"Automático sequencial"},{"value":"Variável","label":"Variável"}],"example":"Automática"},{"name":"fuel","type":"array","required":false,"description":"One or more fuel types, webmotors' own labels (flex = 'Gasolina e álcool').","on_invalid":"ignore","allowed_values":[{"value":"Gasolina e álcool","label":"Gasolina e álcool"},{"value":"Gasolina","label":"Gasolina"},{"value":"Diesel","label":"Diesel"},{"value":"Gasolina e elétrico","label":"Gasolina e elétrico"},{"value":"Álcool","label":"Álcool"},{"value":"Elétrico","label":"Elétrico"},{"value":"Diesel e elétrico","label":"Diesel e elétrico"},{"value":"Gasolina, álcool e gás natural","label":"Gasolina, álcool e gás natural"},{"value":"Gasolina e gás natural","label":"Gasolina e gás natural"},{"value":"Álcool e elétrico","label":"Álcool e elétrico"},{"value":"Gás natural","label":"Gás natural"}],"example":"Gasolina e álcool"},{"name":"body_type","type":"array","required":false,"description":"One or more body styles.","on_invalid":"ignore","allowed_values":[{"value":"Utilitário esportivo","label":"Utilitário esportivo"},{"value":"Hatchback","label":"Hatchback"},{"value":"Sedã","label":"Sedã"},{"value":"Picape","label":"Picape"},{"value":"Minivan","label":"Minivan"},{"value":"Perua/SW","label":"Perua/SW"},{"value":"Cupê","label":"Cupê"},{"value":"Conversível","label":"Conversível"},{"value":"Utilitário","label":"Utilitário"},{"value":"Van/Utilitário","label":"Van/Utilitário"}],"example":"Utilitário esportivo"},{"name":"exterior_color","type":"array","required":false,"description":"One or more exterior colours, webmotors' own labels.","on_invalid":"ignore","example":"Branco","aliases":["color","colour"]},{"name":"doors","type":"array","required":false,"description":"Door counts to include (2, 3, 4).","on_invalid":"ignore","example":"4"},{"name":"seller_type","type":"array","required":false,"description":"dealer = Loja, dealership = Concessionária, private = Pessoa Física.","on_invalid":"ignore","allowed_values":[{"value":"dealer","label":"dealer"},{"value":"dealership","label":"dealership"},{"value":"private","label":"private"}],"example":"dealer"},{"name":"condition","type":"enum","required":false,"description":"new = 0 km, used = seminovos/usados. Omit for both.","on_invalid":"ignore","allowed_values":[{"value":"new","label":"new"},{"value":"used","label":"used"}],"example":"used"},{"name":"armored","type":"boolean","required":false,"description":"true = only armoured (blindado), false = only non-armoured.","on_invalid":"reject","example":false},{"name":"optionals","type":"array","required":false,"description":"Equipment the car must have, webmotors' own labels.","on_invalid":"ignore","example":"Ar condicionado"},{"name":"attributes","type":"array","required":false,"description":"Listing attributes: 'Aceita troca', 'IPVA pago', 'Licenciado', 'Único dono', 'Garantia de fábrica'.","on_invalid":"ignore","example":"Único dono"},{"name":"final_plate","type":"array","required":false,"description":"Licence-plate last-digit groups, used for São Paulo's rodízio rule.","on_invalid":"ignore","example":"1 e 2"},{"name":"lifestyle","type":"string","required":false,"description":"Webmotors' own use-case buckets ('Carros para família', 'SUVs', 'Carros para aplicativos', 'Carros econômicos').","on_invalid":"ignore","example":"SUVs"},{"name":"location","type":"string","required":false,"description":"Webmotors' own state/city slug ('sp', 'sp-sao-paulo', 'pr-curitiba').","on_invalid":"reject","example":"sp-sao-paulo"},{"name":"engine_cc_min","type":"integer","required":false,"description":"Motorbikes only: smallest engine displacement in cc.","on_invalid":"reject","example":300,"minimum":0},{"name":"engine_cc_max","type":"integer","required":false,"description":"Motorbikes only: largest engine displacement in cc.","on_invalid":"reject","example":1000,"minimum":0},{"name":"dealer_id","type":"integer","required":false,"description":"Return only this dealer's stock (`seller.seller_id` from any row).","on_invalid":"reject","example":3848346},{"name":"sort","type":"enum","required":false,"description":"Result order. These five are the only orders webmotors publishes. Note that price_desc opens on unvalidated seller typos in the hundreds of millions of BRL — pair it with price_max.","on_invalid":"ignore","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"year_desc","label":"year_desc"},{"value":"mileage_asc","label":"mileage_asc"}],"default":"relevance","example":"price_asc"},{"name":"page","type":"integer","required":false,"description":"1-based page. `page_total` in the response is the source's own ceiling: it stops serving rows past ~10 000 per query however large `total_results` is, so narrow the filters to reach the rest.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":417},{"name":"page_size","type":"integer","required":false,"description":"Rows per page.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["size"]}],"returns":"listings[]{listing_id, url, title, make, model, trim, year_manufacture, year_model, mileage_km, price, currency, fipe_percent, transmission, body_type, doors, exterior_color, engine_litres, power_hp, traction, armored, has_auction_record, condition, condition_new, attributes, description, images, image_count, seller{seller_id,name,type,type_label,is_dealer,city,state,state_code,neighborhood,street,zip,score}} + total_results, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"make":"TOYOTA","page_size":24}},{"name":"listing","description":"The complete record for one listing, from the URL `search` returns: every specification, all equipment, the full description, every photo, the seller with their CNPJ, address and opening hours, and — unlike the search row — the fuel type and the FIPE reference price alongside the asking price.","required_params":["url"],"optional_params":["include_reference_price","include_phones"],"params":[{"name":"url","type":"string","required":true,"description":"The listing URL, exactly as `search` returns it in `url`. A bare id cannot be resolved: webmotors validates the whole slug against the id.","on_invalid":"reject","example":"https://www.webmotors.com.br/comprar/bmw/x1/20-16v-turbo-activeflex-sdrive20i-4p-automatico/4-portas/2016/70796294","aliases":["listing_url","link"]},{"name":"include_reference_price","type":"boolean","required":false,"description":"Also fetch the FIPE reference price and webmotors' market band (one extra upstream call, ~330 bytes).","on_invalid":"reject","default":true,"example":true},{"name":"include_phones","type":"boolean","required":false,"description":"Also fetch the seller's published phone numbers — the same ones the site's 'ver telefone' control reveals without a login (one extra upstream call, ~110 bytes).","on_invalid":"reject","default":true,"example":true}],"returns":"listing{listing_id, url, title, make, model, trim, year_manufacture, year_model, mileage_km, price, currency, fipe_percent, transmission, body_type, doors, exterior_color, engine_litres, power_hp, traction, armored, has_auction_record, condition, condition_new, attributes, description, images, image_count, seller{seller_id,name,type,type_label,is_dealer,city,state,state_code,neighborhood,street,zip,score}, fuel, optionals, lifestyle, promotions, fipe_code, fipe_price, created_at, seller{cnpj,member_since,opening_hours,phones}, reference_price{...}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.webmotors.com.br/comprar/bmw/x1/20-16v-turbo-activeflex-sdrive20i-4p-automatico/4-portas/2016/70796294"}},{"name":"reference_price","description":"The FIPE reference price for one listing (the Brazilian used-car price index) plus Webmotors' own lowest / average / highest asking price for the same vehicle in that state, each with its own update date. Takes the bare listing id.","required_params":["listing_id"],"optional_params":["vehicle_type"],"params":[{"name":"listing_id","type":"integer","required":true,"description":"Listing id (`listing_id` from `search`). This surface takes the bare id.","on_invalid":"reject","example":70796294,"aliases":["id","unique_id"]},{"name":"vehicle_type","type":"enum","required":false,"description":"car = carros, bike = motos.","on_invalid":"reject","allowed_values":[{"value":"car","label":"car"},{"value":"bike","label":"bike"}],"default":"car","example":"car"}],"returns":"reference_price{make, model, trim, year, fipe_code, fipe_price, fipe_updated_at, market_state, market_lowest_price, market_average_price, market_highest_price, market_updated_at, currency}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":70796294}},{"name":"makes_models","description":"Webmotors' own make → model tree for cars or motorbikes — the exact spellings the `make` and `model` search filters expect.","required_params":[],"optional_params":["vehicle_type","make"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"car = carros, bike = motos.","on_invalid":"reject","allowed_values":[{"value":"car","label":"car"},{"value":"bike","label":"bike"}],"default":"car","example":"car"},{"name":"make","type":"string","required":false,"description":"Return only this manufacturer's models instead of the whole tree.","on_invalid":"reject","example":"TOYOTA"}],"returns":"makes[]{make, models[]}, make_count, model_count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"vehicle_type":"car"}}]},{"name":"wethenew","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Wethenew API — sneakers and streetwear from wethenew.com (Paris resale marketplace): search and collections with every product's from-price, and one product with EVERY EU size's two offers — the marketplace price and Wethenew's own 48-hour express price and stock — plus style code, barcode, brand and model. Prices in the currency of the market you choose (EUR, AED, PLN, SAR). No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/wethenew/v1","spec_available":true,"actions":[{"name":"search","description":"Search Wethenew's catalogue by model, colourway or style code, with brand, model, category, express-delivery, stock and price filters. Each row has the cheapest buyable size and the in-stock EU sizes, in the chosen market's currency.","required_params":["query"],"optional_params":["brand","model","category","express_only","in_stock_only","min_price","max_price","country","language","limit","cursor","sort"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for: a model (dunk low, air jordan 4, samba), a colourway (panda, bred) or a style code (DD1391-100). The source's own full-text search.","on_invalid":"reject","example":"dunk low","aliases":["q","keyword","search"]},{"name":"brand","type":"string","required":false,"description":"Only this brand as the site lists it (Nike, Air Jordan, Adidas, New Balance, ASICS, Salomon …). Case is matched for you against the source's own list; meta.facets.brand shows the values with counts.","on_invalid":"reject","example":"New Balance"},{"name":"model","type":"string","required":false,"description":"Only this model line as the site lists it (Air Jordan 4, Dunk Low, Samba, Gel-Kayano 14, NB 2002R …); meta.facets.model shows the values with counts.","on_invalid":"reject","example":"Air Jordan 4"},{"name":"category","type":"string","required":false,"description":"Streetwear category (Hoodie, T-Shirt, Crewneck, Short …); meta.facets.category shows the values. Sneakers carry no category.","on_invalid":"reject","example":"Hoodie"},{"name":"express_only","type":"boolean","required":false,"description":"Only products Wethenew holds in its own stock with 48-hour delivery.","on_invalid":"reject","default":false,"example":true},{"name":"in_stock_only","type":"boolean","required":false,"description":"true (default, as the site) = only products with a buyable size; false also lists sold-out products.","on_invalid":"reject","default":true,"example":false},{"name":"min_price","type":"number","required":false,"description":"Only products with at least one size priced at or above this amount in the market's currency. The source matches ANY size's price (sold-out sizes included), so a row's price_from can sit outside the range.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Only products with at least one size priced at or below this amount (same basis as min_price).","on_invalid":"reject","example":150,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's relevance order (the only order search supports)"}],"default":"relevance","example":"relevance"},{"name":"country","type":"string","required":false,"description":"The market whose prices you want, two letters (233 markets). AE prices in AED, PL in PLN, SA in SAR, every other market in EUR. Every price in the answer says its currency; the exit network never changes it.","on_invalid":"reject","default":"FR","example":"AE","aliases":["market"]},{"name":"language","type":"enum","required":false,"description":"Language of descriptions and collection titles (product names are not translated by the source).","on_invalid":"reject","allowed_values":[{"value":"EN","label":"English"},{"value":"FR","label":"French"},{"value":"DE","label":"German"},{"value":"ES","label":"Spanish"},{"value":"IT","label":"Italian"},{"value":"NL","label":"Dutch"},{"value":"PL","label":"Polish"},{"value":"AR","label":"Arabic"}],"default":"EN","example":"FR"},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-40 (the site's own page size is 40).","on_invalid":"reject","default":40,"example":20,"minimum":1,"maximum":40,"aliases":["per_page"]},{"name":"cursor","type":"string","required":false,"description":"Next page: pass meta.next_cursor from the previous answer, with the same query, filters and sort.","on_invalid":"reject","example":"eyJsYXN0X2lkIjo...","aliases":["next_cursor","after"]}],"returns":"rows[]: product_id, handle (give it to `product`), url, title, brand, model, product_type, style_code, in_stock, price_from (cheapest BUYABLE size, either offer), price_from_size (EU), price_from_offer (marketplace | express), express_price_from, express_price_from_size, price_min_all_sizes (Shopify's min over every size incl. sold-out — not a buyable price), sizes_in_stock[] (EU), express_sizes_in_stock[], currency, country, image, created_at. meta: total (search only; stops at 1000 → total_capped), in_stock_total (collection), has_more, next_cursor, sort, filters_applied, facets{brand, model, category, availability, express_delivery}[{value, count}], country, currency, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"dunk low","country":"FR"}},{"name":"collection","description":"One collection (a brand, a model line or a theme such as livraison-48h) with the same filters and row shape as `search`, and five sort orders.","required_params":["collection"],"optional_params":["brand","model","category","express_only","in_stock_only","min_price","max_price","country","language","limit","cursor","sort"],"params":[{"name":"collection","type":"string","required":true,"description":"A collection handle as in the site's URLs /collections/<handle>: brands (nike, adidas, new-balance), lines (air-jordan-1, nike-dunk-low, adidas-samba), themes (all-sneakers, livraison-48h, les-best-sellers) — or the full URL.","on_invalid":"reject","example":"air-jordan-4","aliases":["collection_handle"]},{"name":"brand","type":"string","required":false,"description":"Only this brand as the site lists it (Nike, Air Jordan, Adidas, New Balance, ASICS, Salomon …). Case is matched for you against the source's own list; meta.facets.brand shows the values with counts.","on_invalid":"reject","example":"New Balance"},{"name":"model","type":"string","required":false,"description":"Only this model line as the site lists it (Air Jordan 4, Dunk Low, Samba, Gel-Kayano 14, NB 2002R …); meta.facets.model shows the values with counts.","on_invalid":"reject","example":"Air Jordan 4"},{"name":"category","type":"string","required":false,"description":"Streetwear category (Hoodie, T-Shirt, Crewneck, Short …); meta.facets.category shows the values. Sneakers carry no category.","on_invalid":"reject","example":"Hoodie"},{"name":"express_only","type":"boolean","required":false,"description":"Only products Wethenew holds in its own stock with 48-hour delivery.","on_invalid":"reject","default":false,"example":true},{"name":"in_stock_only","type":"boolean","required":false,"description":"true (default, as the site) = only products with a buyable size; false also lists sold-out products.","on_invalid":"reject","default":true,"example":false},{"name":"min_price","type":"number","required":false,"description":"Only products with at least one size priced at or above this amount in the market's currency. The source matches ANY size's price (sold-out sizes included), so a row's price_from can sit outside the range.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Only products with at least one size priced at or below this amount (same basis as min_price).","on_invalid":"reject","example":150,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"default","label":"The collection's own order, as on the site (default)"},{"value":"best_selling","label":"Best-selling first"},{"value":"newest","label":"Most recently added first"},{"value":"price_asc","label":"Lowest price first: the source orders on the lowest price of ANY size, sold-out sizes included (price_min_all_sizes), not on price_from"},{"value":"price_desc","label":"Highest price first (same basis)"}],"default":"default","example":"newest"},{"name":"country","type":"string","required":false,"description":"The market whose prices you want, two letters (233 markets). AE prices in AED, PL in PLN, SA in SAR, every other market in EUR. Every price in the answer says its currency; the exit network never changes it.","on_invalid":"reject","default":"FR","example":"AE","aliases":["market"]},{"name":"language","type":"enum","required":false,"description":"Language of descriptions and collection titles (product names are not translated by the source).","on_invalid":"reject","allowed_values":[{"value":"EN","label":"English"},{"value":"FR","label":"French"},{"value":"DE","label":"German"},{"value":"ES","label":"Spanish"},{"value":"IT","label":"Italian"},{"value":"NL","label":"Dutch"},{"value":"PL","label":"Polish"},{"value":"AR","label":"Arabic"}],"default":"EN","example":"FR"},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-40 (the site's own page size is 40).","on_invalid":"reject","default":40,"example":20,"minimum":1,"maximum":40,"aliases":["per_page"]},{"name":"cursor","type":"string","required":false,"description":"Next page: pass meta.next_cursor from the previous answer, with the same query, filters and sort.","on_invalid":"reject","example":"eyJsYXN0X2lkIjo...","aliases":["next_cursor","after"]}],"returns":"rows[]: product_id, handle (give it to `product`), url, title, brand, model, product_type, style_code, in_stock, price_from (cheapest BUYABLE size, either offer), price_from_size (EU), price_from_offer (marketplace | express), express_price_from, express_price_from_size, price_min_all_sizes (Shopify's min over every size incl. sold-out — not a buyable price), sizes_in_stock[] (EU), express_sizes_in_stock[], currency, country, image, created_at. meta: total (search only; stops at 1000 → total_capped), in_stock_total (collection), has_more, next_cursor, sort, filters_applied, facets{brand, model, category, availability, express_delivery}[{value, count}], country, currency, warnings.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"collection":"air-jordan-4"}},{"name":"product","description":"One product in full: every EU size with its US size, the marketplace offer and the 48-hour express offer (each with price, buyable flag, variant id, barcode; express with its stock count), the cheapest buyable size, style code, brand, model, description, collections and images. Give `handle` (from a row) or `style_code`.","required_params":[],"optional_params":["handle","style_code","country","language"],"params":[{"name":"handle","type":"string","required":false,"description":"The product's `handle` from a search or collection row, as is — or its wethenew.com/products/... URL. Give `handle` or `style_code`.","on_invalid":"reject","example":"air-jordan-4-vivid-sulfur","aliases":["url","slug"]},{"name":"style_code","type":"string","required":false,"description":"A manufacturer style code (AQ9129-101, DD1391-100). The product whose sizes carry exactly this code is returned. Give `handle` or `style_code`.","on_invalid":"reject","example":"AQ9129-101","aliases":["sku"]},{"name":"country","type":"string","required":false,"description":"The market whose prices you want, two letters (233 markets). AE prices in AED, PL in PLN, SA in SAR, every other market in EUR. Every price in the answer says its currency; the exit network never changes it.","on_invalid":"reject","default":"FR","example":"AE","aliases":["market"]},{"name":"language","type":"enum","required":false,"description":"Language of descriptions and collection titles (product names are not translated by the source).","on_invalid":"reject","allowed_values":[{"value":"EN","label":"English"},{"value":"FR","label":"French"},{"value":"DE","label":"German"},{"value":"ES","label":"Spanish"},{"value":"IT","label":"Italian"},{"value":"NL","label":"Dutch"},{"value":"PL","label":"Polish"},{"value":"AR","label":"Arabic"}],"default":"EN","example":"FR"}],"returns":"product{product_id, handle, url, title, brand, model, product_type, style_code, description, express_delivery, available, country, currency, price_from, price_from_size, price_from_offer, express_price_from, express_price_from_size, price_max_in_stock, price_min_all_sizes, price_max_all_sizes (these two include sold-out sizes), sizes_in_stock[], express_sizes_in_stock[], sizes_total, sizes_available, sizes[]{size_eu, size_us, size (letter sizes), available, lowest_price, marketplace{variant_id, price, currency, available, compare_at_price, barcode, variant_title, shopify_available_for_sale}, express{… same …, quantity}}, collections[]{handle, title}, images[], tags[], created_at, updated_at}. meta: availability_rule, flag_conflicts, price_label_mismatch.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"handle":"air-jordan-4-vivid-sulfur"}},{"name":"suggest","description":"The site's own search-as-you-type: matching products (handle, title, brand), collections (handle, title) and query completions.","required_params":["query"],"optional_params":["limit","country","language"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a search (two letters or more).","on_invalid":"reject","example":"jordan 4","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"How many products and collections, 1-10 each.","on_invalid":"reject","default":10,"example":10,"minimum":1,"maximum":10},{"name":"country","type":"string","required":false,"description":"The market whose prices you want, two letters (233 markets). AE prices in AED, PL in PLN, SA in SAR, every other market in EUR. Every price in the answer says its currency; the exit network never changes it.","on_invalid":"reject","default":"FR","example":"AE","aliases":["market"]},{"name":"language","type":"enum","required":false,"description":"Language of descriptions and collection titles (product names are not translated by the source).","on_invalid":"reject","allowed_values":[{"value":"EN","label":"English"},{"value":"FR","label":"French"},{"value":"DE","label":"German"},{"value":"ES","label":"Spanish"},{"value":"IT","label":"Italian"},{"value":"NL","label":"Dutch"},{"value":"PL","label":"Polish"},{"value":"AR","label":"Arabic"}],"default":"EN","example":"FR"}],"returns":"products[]{handle, title, brand}, collections[]{handle, title}, queries[].","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"jordan 4"}}]},{"name":"whatnot","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Whatnot API scraper - the US/UK live-stream shopping marketplace: search products, live and scheduled auction shows, sellers and category tags; full product records with price, condition and seller reputation; live show records with viewer count and start time; every show a seller has coming up. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/whatnot/v1","spec_available":true,"actions":[{"name":"search","description":"Search Whatnot by keyword. Choose the tab with `vertical`: products (buy-it-now and auction listings with price, condition attributes and seller reputation), shows (live and scheduled auction streams with viewer count and start time), users (sellers with rating, followers and items sold), categories (Whatnot's own category tags) or all (Whatnot's mixed 'Top' feed). Whatnot serves roughly 24 rows per query on this surface and reports whether it has more. Whatnot does not publish a running bid for auction items outside the show itself, so no bid field is returned.","required_params":["query"],"optional_params":["vertical"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for on Whatnot - a keyword, brand, card set, player or seller name.","on_invalid":"reject","example":"pokemon","aliases":["q","keyword","keywords","search"]},{"name":"vertical","type":"enum","required":false,"description":"Which Whatnot search tab to read. An unknown value is rejected here because the site would silently answer with the mixed 'all' feed instead.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Whatnot's mixed 'Top' feed: product listings plus category shelves"},{"value":"products","label":"Buy-it-now and auction product listings only"},{"value":"shows","label":"Live and scheduled shows only"},{"value":"users","label":"Sellers and buyers only"},{"value":"categories","label":"Whatnot's own category tags only"}],"default":"all","example":"products","aliases":["type","search_vertical","searchVertical"]}],"returns":"query, vertical, feed_title, results[] {type: product, listing_id, url, title, subtitle, description, price (major units), price_minor (the source's own integer), currency, status, transaction_type, quantity, images[], image, rating (null - Whatnot rates the seller, not the item), review_count (null), seller{username, url, and whichever of user_id, display_name, seller_rating, review_count, follower_count, following_count, sold_count, average_ship_days, is_live, is_verified_seller, is_premier_shop, can_go_live, ships_from_country, profile_image, bio this surface serves}, is_live (search only: the item is in a show running right now)} for products, {type: show, livestream_id, url, title, status (PLAYING = live now, CREATED = scheduled), is_live, start_time, active_viewers (point-in-time), categories[]{tag, label, url}, tags[], thumbnail, trailer_url, stream_service, seller{username, url, and whichever of user_id, display_name, seller_rating, review_count, follower_count, following_count, sold_count, average_ship_days, is_live, is_verified_seller, is_premier_shop, can_go_live, ships_from_country, profile_image, bio this surface serves}, total_watchlist_users (feed only, point-in-time)} for shows, {type: user, …} for users, {type: category, tag, label, url, viewer_count} for categories, count, has_more (Whatnot has further rows that only its in-app feed serves), shelves[] (category tiles the 'all' feed mixes in; never counted as results), spelling_correction, measured_at","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"pokemon","vertical":"products"}},{"name":"product/detail","description":"One Whatnot product listing in full: title, description, price, quantity, condition and the seller's own attributes (set, language, grade, rarity where the category has them), every image, when it was listed, whether offers are accepted, whether it is pinned in a show that is running right now, and the seller's public reputation (rating, reviews, followers, items sold, average ship days). Whatnot does not publish a running bid on the listing page.","required_params":["listing_id"],"optional_params":[],"params":[{"name":"listing_id","type":"string","required":true,"description":"Whatnot listing id - the value after /listing/ in the URL. A full listing URL or the plain numeric id also works.","on_invalid":"reject","example":"TGlzdGluZ05vZGU6MjM2MDA2ODU0Mg==","aliases":["id","url","listing"]}],"returns":"item {type: product, listing_id, url, title, subtitle, description, price (major units), price_minor (the source's own integer), currency, status, transaction_type, quantity, images[], image, rating (null - Whatnot rates the seller, not the item), review_count (null), seller{username, url, and whichever of user_id, display_name, seller_rating, review_count, follower_count, following_count, sold_count, average_ship_days, is_live, is_verified_seller, is_premier_shop, can_go_live, ships_from_country, profile_image, bio this surface serves}, attributes{} (condition, set, language, grade… where the category has them), created_at, discounted_price, discounted_price_minor, active_livestream_id (the show the item is pinned in, when one is running), accepts_offers, auction_end_time (Whatnot's own auction handle; it was unset on every listing measured), view_only, allows_right_of_withdrawal}, page_price (the price Whatnot's own schema.org block prints on the same page), price_disagrees_with_page (true when the two disagree - the number is then reported, never silently picked), measured_at","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"listing_id":"TGlzdGluZ05vZGU6MjM2MDA2ODU0Mg=="}},{"name":"user/profile","description":"One Whatnot seller's public profile: display name, bio, rating and review count, followers, following, items sold, average ship days, verified and Premier Shop status - plus every show they currently have live or scheduled, with start time and viewer count.","required_params":["username"],"optional_params":[],"params":[{"name":"username","type":"string","required":true,"description":"Whatnot username - the name after /user/ in the profile URL. A full profile URL also works.","on_invalid":"reject","example":"collectibletags","aliases":["user","seller","url","id"]}],"returns":"user{type: user, username, url, display_name, user_id, seller_rating, review_count, follower_count, following_count, sold_count, average_ship_days, is_live, is_verified_seller, is_premier_shop, profile_image, bio, can_go_live}, shows[] {type: show, livestream_id, url, title, status (PLAYING = live now, CREATED = scheduled), is_live, start_time, active_viewers (point-in-time), categories[]{tag, label, url}, tags[], thumbnail, trailer_url, stream_service, seller{username, url, and whichever of user_id, display_name, seller_rating, review_count, follower_count, following_count, sold_count, average_ship_days, is_live, is_verified_seller, is_premier_shop, can_go_live, ships_from_country, profile_image, bio this surface serves}, total_watchlist_users (feed only, point-in-time)}, show_count, measured_at","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"username":"collectibletags"}},{"name":"category/shows","description":"The live and scheduled shows of one Whatnot category tag (e.g. pokemon_cards, sneakers, sports_cards), each with its seller, start time, viewer count, categories and tags - the closest thing Whatnot has to a live auction calendar for a collecting niche.","required_params":["tag"],"optional_params":[],"params":[{"name":"tag","type":"string","required":true,"description":"Whatnot category tag - the name after /tag/ in the URL, e.g. pokemon_cards. `search` with vertical=categories finds the tag name for a keyword.","on_invalid":"reject","example":"pokemon_cards","aliases":["category","url","id"]}],"returns":"tag, feed_title, shows[] {type: show, livestream_id, url, title, status (PLAYING = live now, CREATED = scheduled), is_live, start_time, active_viewers (point-in-time), categories[]{tag, label, url}, tags[], thumbnail, trailer_url, stream_service, seller{username, url, and whichever of user_id, display_name, seller_rating, review_count, follower_count, following_count, sold_count, average_ship_days, is_live, is_verified_seller, is_premier_shop, can_go_live, ships_from_country, profile_image, bio this surface serves}, total_watchlist_users (feed only, point-in-time)}, count, has_more, suggested_tags[]{tag, label, url}, measured_at","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"tag":"pokemon_cards"}},{"name":"livestream/detail","description":"One Whatnot show: title, whether it is playing right now or still scheduled, its start time, how many people are watching at this moment, its categories and tags, thumbnail, and the seller running it with their follower and sold counts.","required_params":["livestream_id"],"optional_params":[],"params":[{"name":"livestream_id","type":"string","required":true,"description":"Whatnot show id - the uuid after /live/ in the show URL. A full show URL also works.","on_invalid":"reject","example":"14a5c3bb-c44b-4a98-8432-4e8d97c10f1b","aliases":["id","url","show","stream"]}],"returns":"show {type: show, livestream_id, url, title, status (PLAYING = live now, CREATED = scheduled), is_live, start_time, active_viewers (point-in-time), categories[]{tag, label, url}, tags[], thumbnail, trailer_url, stream_service, seller{username, url, and whichever of user_id, display_name, seller_rating, review_count, follower_count, following_count, sold_count, average_ship_days, is_live, is_verified_seller, is_premier_shop, can_go_live, ships_from_country, profile_image, bio this surface serves}, ships_from_country (show page only)}, pinned_product_id, buyer_shop_enabled, measured_at","cacheable":true,"cache_ttl_seconds":30,"pricing":{"mode":"flat","credits":1},"example_params":{"livestream_id":"14a5c3bb-c44b-4a98-8432-4e8d97c10f1b"}}]},{"name":"whoppah","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Whoppah — design & vintage furniture resale marketplace (NL + EU)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/whoppah/v1","spec_available":true,"actions":[{"name":"search","description":"Search whoppah's 222,006 second-hand design and vintage listings — furniture, lighting, art, decoration, tableware and designer bags, from sellers in 25 countries — with the source's own filters: free text, category, brand, designer, artist, style/period, material, colour, shape, the item's country, condition, wear grade, delivery method, free-shipping destination, showroom models, bidding, trade discount, price, width / height / depth in cm, lot size, minimum discount and seller. `status=sold` turns it into a sold-comparables search: 36,108 sold listings with their final sale price. Every row carries its own price in EUR, previous price, discount, minimum bid, wear grade, dimensions, photos and the seller's id.","required_params":[],"optional_params":["query","language","match","category","brand","designer","artist","style","material","color","country","condition","quality","shipping_method","free_shipping_to","shape","art_size","art_orientation","gender","showroom_model","bidding_allowed","trade_discount","min_price","max_price","min_width","max_width","min_height","max_height","min_depth","max_depth","min_items","max_items","min_discount","seller","status","sort","page","page_size","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Free text. Optional: without it you browse by filters (the whole catalogue is 222,006 listings).","on_invalid":"reject","example":"eames","aliases":["q","keywords","search"]},{"name":"language","type":"enum","required":false,"description":"Storefront language for titles, descriptions, category and attribute names, and the listing URL. Prices, filters and counts are identical in every language. Anything else is refused: the source would silently answer in English.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"es","label":"Spanish"},{"value":"it","label":"Italian"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"match","type":"enum","required":false,"description":"How a `query` is matched. Measured on 'eames': keyword 1,010 rows = its stated total; hybrid stated 1,011 but paged out 1,181 rows, 21 of them repeats. Ignored when there is no query.","on_invalid":"reject","allowed_values":[{"value":"keyword","label":"exact word match — exact total, honest paging"},{"value":"hybrid","label":"the site's default — adds meaning-based matches; total is an estimate and pages can repeat rows"},{"value":"semantic","label":"meaning-based only — the source caps it at 500 rows"}],"default":"keyword","example":"keyword","aliases":["search_type"]},{"name":"category","type":"array","required":false,"description":"Category slug(s), any level: 'furniture', 'lighting', 'dining-chairs', 'pendant-lamps', 'sofas', 'paintings-drawings' … (the facets action lists them with counts). An unknown slug is refused by name, never answered with zero rows.","on_invalid":"reject","example":["dining-chairs"]},{"name":"brand","type":"array","required":false,"description":"Brand slug(s): 'vitra', 'leolux', 'artifort', 'cassina', 'fritz-hansen' …","on_invalid":"reject","example":["vitra"],"aliases":["brands"]},{"name":"designer","type":"array","required":false,"description":"Designer slug(s): 'eames', 'paulin', 'breuer', 'jacobsen', 'panton' …","on_invalid":"reject","example":["eames"],"aliases":["designers"]},{"name":"artist","type":"array","required":false,"description":"Artist slug(s) for art listings: 'andy-warhol', 'corneille', 'herman-brood' …","on_invalid":"reject","example":["andy-warhol"]},{"name":"style","type":"array","required":false,"description":"Style / period slug(s): 'vintage', 'mid-century-modern', 'scandinavian', 'art-deco', 'space-age', 'brutalist', '1970' … (52 values).","on_invalid":"reject","example":["mid-century-modern"],"aliases":["period"]},{"name":"material","type":"array","required":false,"description":"Material slug(s): 'wood', 'metal', 'glass', 'leather', 'rattan', 'murano-glass', 'travertin' … (51 values).","on_invalid":"reject","example":["leather"]},{"name":"color","type":"array","required":false,"description":"Colour slug(s): 'black', 'brown', 'white', 'silver', 'gold', 'beige', 'multi-color', 'blue' … (20 values).","on_invalid":"reject","example":["black"],"aliases":["colour"]},{"name":"country","type":"array","required":false,"description":"Country the item is located in (seller's country), ISO-2.","on_invalid":"reject","allowed_values":[{"value":"NL","label":"NL"},{"value":"FR","label":"FR"},{"value":"BE","label":"BE"},{"value":"DE","label":"DE"},{"value":"IT","label":"IT"},{"value":"CZ","label":"CZ"},{"value":"ES","label":"ES"},{"value":"PL","label":"PL"},{"value":"GB","label":"GB"},{"value":"HU","label":"HU"},{"value":"DK","label":"DK"},{"value":"AT","label":"AT"},{"value":"CH","label":"CH"},{"value":"PT","label":"PT"},{"value":"SI","label":"SI"},{"value":"SK","label":"SK"},{"value":"SE","label":"SE"},{"value":"SG","label":"SG"},{"value":"RO","label":"RO"},{"value":"IE","label":"IE"},{"value":"LU","label":"LU"},{"value":"LT","label":"LT"},{"value":"HR","label":"HR"},{"value":"MC","label":"MC"},{"value":"US","label":"US"}],"example":["NL"],"aliases":["seller_country","ships_from"]},{"name":"condition","type":"array","required":false,"description":"Condition as the seller declared it.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used"},{"value":"new","label":"new"},{"value":"refurbished","label":"refurbished"},{"value":"openbox","label":"openbox"}],"example":["used"]},{"name":"quality","type":"array","required":false,"description":"The source's 3-step wear grade: good · great ('Very good') · perfect ('Excellent').","on_invalid":"reject","allowed_values":[{"value":"good","label":"good"},{"value":"great","label":"great"},{"value":"perfect","label":"perfect"}],"example":["perfect"]},{"name":"shipping_method","type":"array","required":false,"description":"Delivery the seller offers: pickup, courier (furniture courier), parcel (post).","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"pickup"},{"value":"courier","label":"courier"},{"value":"parcel","label":"parcel"}],"example":["parcel"]},{"name":"free_shipping_to","type":"array","required":false,"description":"Destination country (lower-case ISO-2) the seller ships to for free.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"nl"},{"value":"be","label":"be"},{"value":"de","label":"de"},{"value":"fr","label":"fr"},{"value":"it","label":"it"},{"value":"es","label":"es"},{"value":"at","label":"at"},{"value":"cz","label":"cz"},{"value":"dk","label":"dk"},{"value":"hu","label":"hu"},{"value":"lu","label":"lu"},{"value":"mc","label":"mc"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"},{"value":"ro","label":"ro"},{"value":"se","label":"se"},{"value":"si","label":"si"},{"value":"sk","label":"sk"},{"value":"ch","label":"ch"},{"value":"gb","label":"gb"}],"example":["nl"]},{"name":"shape","type":"array","required":false,"description":"Shape (tables, rugs, mirrors).","on_invalid":"reject","allowed_values":[{"value":"rectangle","label":"rectangle"},{"value":"round","label":"round"},{"value":"square","label":"square"},{"value":"other","label":"other"},{"value":"oval","label":"oval"},{"value":"organic","label":"organic"},{"value":"triangle","label":"triangle"}],"example":["round"]},{"name":"art_size","type":"array","required":false,"description":"Size class for art.","on_invalid":"reject","allowed_values":[{"value":"mini","label":"mini"},{"value":"small","label":"small"},{"value":"medium","label":"medium"},{"value":"large","label":"large"},{"value":"x_large","label":"x_large"}],"example":["medium"]},{"name":"art_orientation","type":"array","required":false,"description":"Orientation for art.","on_invalid":"reject","allowed_values":[{"value":"portrait","label":"portrait"},{"value":"landscape","label":"landscape"},{"value":"square","label":"square"}],"example":["portrait"]},{"name":"gender","type":"array","required":false,"description":"For bags and fashion.","on_invalid":"reject","allowed_values":[{"value":"unisex","label":"unisex"},{"value":"women","label":"women"},{"value":"men","label":"men"}],"example":["women"]},{"name":"showroom_model","type":"boolean","required":false,"description":"true = only ex-showroom pieces; false = exclude them.","on_invalid":"reject","example":true},{"name":"bidding_allowed","type":"boolean","required":false,"description":"true = only listings that accept bids; false = buy-now only.","on_invalid":"reject","example":true},{"name":"trade_discount","type":"boolean","required":false,"description":"true = only sellers offering the source's trade (pro buyer) discount.","on_invalid":"reject","example":true},{"name":"min_price","type":"number","required":false,"description":"Lowest buy-now price, EUR.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest buy-now price, EUR.","on_invalid":"reject","example":1500,"minimum":0},{"name":"min_width","type":"number","required":false,"description":"Minimum width, cm.","on_invalid":"reject","example":80,"minimum":0},{"name":"max_width","type":"number","required":false,"description":"Maximum width, cm.","on_invalid":"reject","example":200,"minimum":0},{"name":"min_height","type":"number","required":false,"description":"Minimum height, cm.","on_invalid":"reject","example":40,"minimum":0},{"name":"max_height","type":"number","required":false,"description":"Maximum height, cm.","on_invalid":"reject","example":120,"minimum":0},{"name":"min_depth","type":"number","required":false,"description":"Minimum depth, cm.","on_invalid":"reject","example":40,"minimum":0},{"name":"max_depth","type":"number","required":false,"description":"Maximum depth, cm.","on_invalid":"reject","example":100,"minimum":0},{"name":"min_items","type":"number","required":false,"description":"Minimum lot size (a set of 6 chairs = 6).","on_invalid":"reject","example":2,"minimum":0},{"name":"max_items","type":"number","required":false,"description":"Maximum lot size.","on_invalid":"reject","example":6,"minimum":0},{"name":"min_discount","type":"number","required":false,"description":"Minimum discount the source shows, percent (0-100).","on_invalid":"reject","example":20,"minimum":0,"maximum":100},{"name":"seller","type":"string","required":false,"description":"Only this seller's listings (the `seller_id` UUID a row returns).","on_invalid":"reject","example":"75c7bf38-aca0-426f-b6b8-5965fc4dd141","aliases":["seller_id","merchant"]},{"name":"status","type":"enum","required":false,"description":"Whoppah keeps sold listings searchable with their final sale price — 36,108 of them on 2026-10-14. 'sold' returns only those (sold comparables); 'available' only what can still be bought.","on_invalid":"reject","allowed_values":[{"value":"all","label":"for sale and sold"},{"value":"available","label":"for sale only"},{"value":"sold","label":"sold listings, with their final sale price"}],"default":"all","example":"available"},{"name":"sort","type":"enum","required":false,"description":"The site's own four orderings. Anything else is refused, because the source would silently fall back to relevance.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance (newest first without a query)"},{"value":"newest","label":"newest first"},{"value":"price_asc","label":"price low to high"},{"value":"price_desc","label":"price high to low"}],"default":"relevance","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100, default 24 as on the site). The source itself caps a page at 250.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["limit","per_page"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. This engine returns what the source publishes (seller display name and business name); no masking is applied.","on_invalid":"reject","default":false,"example":false}],"returns":"{total, total_is_exact, page, page_size, pages, has_more, language, match, sort, status, query, filters, listings[{id, identifier, slug, url, title, description, currency, price_eur, previous_price_eur, discount_pct, min_bid_eur, sold, sold_price_eur, on_hold_until, condition, quality, quality_label, number_of_items, dimensions_cm{width, height, depth}, dimension_warnings, shape, gender, is_art, is_curated, is_boosted, is_showroom_model, brand_id, seller_id, image, images[], created_at, updated_at, filter_mismatch?}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"eames","language":"en","page_size":24}},{"name":"detail","description":"One listing in full from whoppah's own API: title and description in the requested language AND the seller's original wording, wear notes, status (for sale / sold, with the final sale price), every price the source keeps (buy-now, previous, new retail, minimum bid, bid count), condition and wear grade, width / height / depth / seat height in cm and weight in kg, lot size, category path, brand / designer / artist / colour / material / style records, the item's city and country, delivery options with the listing's own courier price per destination country, every photo, view and favourite counts, and the seller (name, business name, private or business, rating, reviews, listings and sales counts, member since).","required_params":["id"],"optional_params":["language","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The listing: the `id` (UUID) a search row returns, the listing's slug in any language, or its whoppah.com product URL.","on_invalid":"reject","example":"2eee8387-a209-4fc5-ae19-45c4cf5f7cdd","aliases":["listing_id","product_id","slug","url"]},{"name":"language","type":"enum","required":false,"description":"Storefront language for titles, descriptions, category and attribute names, and the listing URL. Prices, filters and counts are identical in every language. Anything else is refused: the source would silently answer in English.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"es","label":"Spanish"},{"value":"it","label":"Italian"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. This engine returns what the source publishes (seller display name and business name); no masking is applied.","on_invalid":"reject","default":false,"example":false}],"returns":"{listing{id, identifier, slug, url, urls{en..it}, title, original_title, description, original_description, usage_signs, status, sold, price_eur, last_asking_price_eur, previous_price_eur, new_price_eur, min_bid_eur, sold_price_eur, bidding{...}, condition, quality, quality_label, number_of_items, dimensions_cm{width, height, depth, seat_height}, weight_kg, category{path, names, route}, brands[], designers[], artists[], colors[], materials[], styles[], labels[], location{city, country}, delivery{method, two_man_delivery, ground_floor_only, listed_courier_prices[{country, price_eur}], external_methods[]}, seller{id, display_name, name, business_name, kind, rating, reviews_count, listings_count, sales_count, member_since, countries}, images[], view_count, favorite_count, created_at, updated_at}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"2eee8387-a209-4fc5-ae19-45c4cf5f7cdd","language":"en"}},{"name":"shipping","description":"The live delivery quote whoppah's checkout gives for one listing to a destination YOU name — country, and optionally postcode, city and street for the address-priced courier — with each option's price, provider, delivery-day window and whether it is supported. The listing's own per-country courier grid is returned beside the quote with `grid_matches_quote`, because the two disagree for some destinations (measured: DE grid 278 vs quote 182, FR 309 vs 277; NL, BE, AT equal). The quote depends only on the address you pass, never on where the call comes from.","required_params":["id","country"],"optional_params":["postal_code","city","street","language","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The listing: the `id` (UUID) a search row returns, the listing's slug in any language, or its whoppah.com product URL.","on_invalid":"reject","example":"2eee8387-a209-4fc5-ae19-45c4cf5f7cdd","aliases":["listing_id","product_id","slug","url"]},{"name":"country","type":"string","required":true,"description":"Destination country, ISO-2 (NL, DE, FR, BE, GB …).","on_invalid":"reject","example":"DE","aliases":["ship_to","destination","country_code"]},{"name":"postal_code","type":"string","required":false,"description":"Destination postcode. With city and street it prices the address-based courier option, which otherwise answers price_needs: full_address.","on_invalid":"reject","example":"1012AB","aliases":["postcode","zip"]},{"name":"city","type":"string","required":false,"description":"Destination city.","on_invalid":"reject","example":"Amsterdam"},{"name":"street","type":"string","required":false,"description":"Destination street and number.","on_invalid":"reject","example":"Dam 1","aliases":["address","line1"]},{"name":"language","type":"enum","required":false,"description":"Storefront language for titles, descriptions, category and attribute names, and the listing URL. Prices, filters and counts are identical in every language. Anything else is refused: the source would silently answer in English.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"es","label":"Spanish"},{"value":"it","label":"Italian"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. This engine returns what the source publishes (seller display name and business name); no masking is applied.","on_invalid":"reject","default":false,"example":false}],"returns":"{listing_id, identifier, status, destination{country, postal_code, city}, options[{method, provider, price_eur, price_needs, delivery_type, delivery_days_min, delivery_days_max, supported}], listed_courier_price_eur, quoted_courier_price_eur, grid_matches_quote}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"id":"1e657853-67ca-48bc-b084-9d0e539150f2","country":"DE"}},{"name":"similar","description":"The listings whoppah itself shows as related to a given one (same maker, category or style), each with price, previous price, minimum bid, wear grade, sold flag and photo — the 'what else like this is on the market, and at what price' view.","required_params":["id"],"optional_params":["limit","language","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The listing: the `id` (UUID) a search row returns, the listing's slug in any language, or its whoppah.com product URL.","on_invalid":"reject","example":"2eee8387-a209-4fc5-ae19-45c4cf5f7cdd","aliases":["listing_id","product_id","slug","url"]},{"name":"limit","type":"integer","required":false,"description":"How many related listings (1-24).","on_invalid":"reject","default":12,"example":12,"minimum":1,"maximum":24,"aliases":["page_size"]},{"name":"language","type":"enum","required":false,"description":"Storefront language for titles, descriptions, category and attribute names, and the listing URL. Prices, filters and counts are identical in every language. Anything else is refused: the source would silently answer in English.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"es","label":"Spanish"},{"value":"it","label":"Italian"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. This engine returns what the source publishes (seller display name and business name); no masking is applied.","on_invalid":"reject","default":false,"example":false}],"returns":"{listing_id, count, listings[{id, identifier, slug, url, title, price_eur, previous_price_eur, min_bid_eur, sold, sold_price_eur, condition, quality, quality_label, is_designer_item, is_curated, category_path[], image}]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"2eee8387-a209-4fc5-ae19-45c4cf5f7cdd","limit":12}},{"name":"seller","description":"A seller's public profile — display name, business name, private or business, expert-seller badge, rating, review count, live listings and completed sales counts, member since, countries — plus a page of that seller's listings with the same row shape as search (`status` lets you ask for their sold history).","required_params":["id"],"optional_params":["include_listings","status","sort","page","page_size","language","include_pii"],"params":[{"name":"id","type":"string","required":true,"description":"The seller's id (the `seller_id` UUID a row returns).","on_invalid":"reject","example":"75c7bf38-aca0-426f-b6b8-5965fc4dd141","aliases":["seller","seller_id","merchant_id"]},{"name":"include_listings","type":"boolean","required":false,"description":"Also return a page of the seller's listings.","on_invalid":"reject","default":true,"example":true},{"name":"status","type":"enum","required":false,"description":"Which of the seller's listings.","on_invalid":"reject","allowed_values":[{"value":"all","label":"for sale and sold"},{"value":"available","label":"for sale only"},{"value":"sold","label":"sold only"}],"default":"all","example":"all"},{"name":"sort","type":"enum","required":false,"description":"Order of the seller's listings.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"relevance"},{"value":"newest","label":"newest"},{"value":"price_asc","label":"price low to high"},{"value":"price_desc","label":"price high to low"}],"default":"newest","example":"newest"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100000},{"name":"page_size","type":"integer","required":false,"description":"Rows per page (1-100, default 24 as on the site). The source itself caps a page at 250.","on_invalid":"reject","default":24,"example":24,"minimum":1,"maximum":100,"aliases":["limit","per_page"]},{"name":"language","type":"enum","required":false,"description":"Storefront language for titles, descriptions, category and attribute names, and the listing URL. Prices, filters and counts are identical in every language. Anything else is refused: the source would silently answer in English.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"es","label":"Spanish"},{"value":"it","label":"Italian"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. This engine returns what the source publishes (seller display name and business name); no masking is applied.","on_invalid":"reject","default":false,"example":false}],"returns":"{seller{id, display_name, name, business_name, kind, type, expert_seller, rating, reviews_count, listings_count, sales_count, member_since, on_vacation_since, contact_disabled, avatar, countries[]}, listings_total, listings[...search row...]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"id":"75c7bf38-aca0-426f-b6b8-5965fc4dd141","page_size":10}},{"name":"facets","description":"The source's own filter values with its own live counts, for any scope you can search — the whole catalogue, a free-text query, or any combination of the search filters: categories, brands, designers, artists, styles, materials, colours, seller countries, conditions, wear grades, delivery methods, free-shipping destinations, and the price / width / height / depth ranges. This is where the slugs the search filters take come from. The source lists at most the top 100 values of a facet.","required_params":[],"optional_params":["query","language","match","category","brand","designer","artist","style","material","color","country","condition","quality","shipping_method","free_shipping_to","shape","art_size","art_orientation","gender","showroom_model","bidding_allowed","trade_discount","min_price","max_price","min_width","max_width","min_height","max_height","min_depth","max_depth","min_items","max_items","min_discount","seller","status","facet","include_pii"],"params":[{"name":"query","type":"string","required":false,"description":"Optional free text to scope the counts.","on_invalid":"reject","example":"lamp","aliases":["q","keywords"]},{"name":"language","type":"enum","required":false,"description":"Storefront language for titles, descriptions, category and attribute names, and the listing URL. Prices, filters and counts are identical in every language. Anything else is refused: the source would silently answer in English.","on_invalid":"reject","allowed_values":[{"value":"en","label":"English"},{"value":"nl","label":"Dutch"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"es","label":"Spanish"},{"value":"it","label":"Italian"}],"default":"en","example":"en","aliases":["lang","locale"]},{"name":"match","type":"enum","required":false,"description":"How a `query` is matched (see search).","on_invalid":"reject","allowed_values":[{"value":"keyword","label":"exact word match"},{"value":"hybrid","label":"site default"},{"value":"semantic","label":"meaning-based"}],"default":"keyword","example":"keyword","aliases":["search_type"]},{"name":"category","type":"array","required":false,"description":"Category slug(s), any level: 'furniture', 'lighting', 'dining-chairs', 'pendant-lamps', 'sofas', 'paintings-drawings' … (the facets action lists them with counts). An unknown slug is refused by name, never answered with zero rows.","on_invalid":"reject","example":["dining-chairs"]},{"name":"brand","type":"array","required":false,"description":"Brand slug(s): 'vitra', 'leolux', 'artifort', 'cassina', 'fritz-hansen' …","on_invalid":"reject","example":["vitra"],"aliases":["brands"]},{"name":"designer","type":"array","required":false,"description":"Designer slug(s): 'eames', 'paulin', 'breuer', 'jacobsen', 'panton' …","on_invalid":"reject","example":["eames"],"aliases":["designers"]},{"name":"artist","type":"array","required":false,"description":"Artist slug(s) for art listings: 'andy-warhol', 'corneille', 'herman-brood' …","on_invalid":"reject","example":["andy-warhol"]},{"name":"style","type":"array","required":false,"description":"Style / period slug(s): 'vintage', 'mid-century-modern', 'scandinavian', 'art-deco', 'space-age', 'brutalist', '1970' … (52 values).","on_invalid":"reject","example":["mid-century-modern"],"aliases":["period"]},{"name":"material","type":"array","required":false,"description":"Material slug(s): 'wood', 'metal', 'glass', 'leather', 'rattan', 'murano-glass', 'travertin' … (51 values).","on_invalid":"reject","example":["leather"]},{"name":"color","type":"array","required":false,"description":"Colour slug(s): 'black', 'brown', 'white', 'silver', 'gold', 'beige', 'multi-color', 'blue' … (20 values).","on_invalid":"reject","example":["black"],"aliases":["colour"]},{"name":"country","type":"array","required":false,"description":"Country the item is located in (seller's country), ISO-2.","on_invalid":"reject","allowed_values":[{"value":"NL","label":"NL"},{"value":"FR","label":"FR"},{"value":"BE","label":"BE"},{"value":"DE","label":"DE"},{"value":"IT","label":"IT"},{"value":"CZ","label":"CZ"},{"value":"ES","label":"ES"},{"value":"PL","label":"PL"},{"value":"GB","label":"GB"},{"value":"HU","label":"HU"},{"value":"DK","label":"DK"},{"value":"AT","label":"AT"},{"value":"CH","label":"CH"},{"value":"PT","label":"PT"},{"value":"SI","label":"SI"},{"value":"SK","label":"SK"},{"value":"SE","label":"SE"},{"value":"SG","label":"SG"},{"value":"RO","label":"RO"},{"value":"IE","label":"IE"},{"value":"LU","label":"LU"},{"value":"LT","label":"LT"},{"value":"HR","label":"HR"},{"value":"MC","label":"MC"},{"value":"US","label":"US"}],"example":["NL"],"aliases":["seller_country","ships_from"]},{"name":"condition","type":"array","required":false,"description":"Condition as the seller declared it.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used"},{"value":"new","label":"new"},{"value":"refurbished","label":"refurbished"},{"value":"openbox","label":"openbox"}],"example":["used"]},{"name":"quality","type":"array","required":false,"description":"The source's 3-step wear grade: good · great ('Very good') · perfect ('Excellent').","on_invalid":"reject","allowed_values":[{"value":"good","label":"good"},{"value":"great","label":"great"},{"value":"perfect","label":"perfect"}],"example":["perfect"]},{"name":"shipping_method","type":"array","required":false,"description":"Delivery the seller offers: pickup, courier (furniture courier), parcel (post).","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"pickup"},{"value":"courier","label":"courier"},{"value":"parcel","label":"parcel"}],"example":["parcel"]},{"name":"free_shipping_to","type":"array","required":false,"description":"Destination country (lower-case ISO-2) the seller ships to for free.","on_invalid":"reject","allowed_values":[{"value":"nl","label":"nl"},{"value":"be","label":"be"},{"value":"de","label":"de"},{"value":"fr","label":"fr"},{"value":"it","label":"it"},{"value":"es","label":"es"},{"value":"at","label":"at"},{"value":"cz","label":"cz"},{"value":"dk","label":"dk"},{"value":"hu","label":"hu"},{"value":"lu","label":"lu"},{"value":"mc","label":"mc"},{"value":"pl","label":"pl"},{"value":"pt","label":"pt"},{"value":"ro","label":"ro"},{"value":"se","label":"se"},{"value":"si","label":"si"},{"value":"sk","label":"sk"},{"value":"ch","label":"ch"},{"value":"gb","label":"gb"}],"example":["nl"]},{"name":"shape","type":"array","required":false,"description":"Shape (tables, rugs, mirrors).","on_invalid":"reject","allowed_values":[{"value":"rectangle","label":"rectangle"},{"value":"round","label":"round"},{"value":"square","label":"square"},{"value":"other","label":"other"},{"value":"oval","label":"oval"},{"value":"organic","label":"organic"},{"value":"triangle","label":"triangle"}],"example":["round"]},{"name":"art_size","type":"array","required":false,"description":"Size class for art.","on_invalid":"reject","allowed_values":[{"value":"mini","label":"mini"},{"value":"small","label":"small"},{"value":"medium","label":"medium"},{"value":"large","label":"large"},{"value":"x_large","label":"x_large"}],"example":["medium"]},{"name":"art_orientation","type":"array","required":false,"description":"Orientation for art.","on_invalid":"reject","allowed_values":[{"value":"portrait","label":"portrait"},{"value":"landscape","label":"landscape"},{"value":"square","label":"square"}],"example":["portrait"]},{"name":"gender","type":"array","required":false,"description":"For bags and fashion.","on_invalid":"reject","allowed_values":[{"value":"unisex","label":"unisex"},{"value":"women","label":"women"},{"value":"men","label":"men"}],"example":["women"]},{"name":"showroom_model","type":"boolean","required":false,"description":"true = only ex-showroom pieces; false = exclude them.","on_invalid":"reject","example":true},{"name":"bidding_allowed","type":"boolean","required":false,"description":"true = only listings that accept bids; false = buy-now only.","on_invalid":"reject","example":true},{"name":"trade_discount","type":"boolean","required":false,"description":"true = only sellers offering the source's trade (pro buyer) discount.","on_invalid":"reject","example":true},{"name":"min_price","type":"number","required":false,"description":"Lowest buy-now price, EUR.","on_invalid":"reject","example":100,"minimum":0},{"name":"max_price","type":"number","required":false,"description":"Highest buy-now price, EUR.","on_invalid":"reject","example":1500,"minimum":0},{"name":"min_width","type":"number","required":false,"description":"Minimum width, cm.","on_invalid":"reject","example":80,"minimum":0},{"name":"max_width","type":"number","required":false,"description":"Maximum width, cm.","on_invalid":"reject","example":200,"minimum":0},{"name":"min_height","type":"number","required":false,"description":"Minimum height, cm.","on_invalid":"reject","example":40,"minimum":0},{"name":"max_height","type":"number","required":false,"description":"Maximum height, cm.","on_invalid":"reject","example":120,"minimum":0},{"name":"min_depth","type":"number","required":false,"description":"Minimum depth, cm.","on_invalid":"reject","example":40,"minimum":0},{"name":"max_depth","type":"number","required":false,"description":"Maximum depth, cm.","on_invalid":"reject","example":100,"minimum":0},{"name":"min_items","type":"number","required":false,"description":"Minimum lot size (a set of 6 chairs = 6).","on_invalid":"reject","example":2,"minimum":0},{"name":"max_items","type":"number","required":false,"description":"Maximum lot size.","on_invalid":"reject","example":6,"minimum":0},{"name":"min_discount","type":"number","required":false,"description":"Minimum discount the source shows, percent (0-100).","on_invalid":"reject","example":20,"minimum":0,"maximum":100},{"name":"seller","type":"string","required":false,"description":"Only this seller's listings (the `seller_id` UUID a row returns).","on_invalid":"reject","example":"75c7bf38-aca0-426f-b6b8-5965fc4dd141","aliases":["seller_id","merchant"]},{"name":"status","type":"enum","required":false,"description":"Whoppah keeps sold listings searchable with their final sale price — 36,108 of them on 2026-10-14. 'sold' returns only those (sold comparables); 'available' only what can still be bought.","on_invalid":"reject","allowed_values":[{"value":"all","label":"for sale and sold"},{"value":"available","label":"for sale only"},{"value":"sold","label":"sold listings, with their final sale price"}],"default":"all","example":"available"},{"name":"facet","type":"array","required":false,"description":"Return only these facets (keys as the response names them: category, brand, designer, artist, style, material, color, country, condition, quality, shipping_method, free_shipping, price, width, height, depth, …). Omit for all.","on_invalid":"reject","example":["designer","price"],"aliases":["facets"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. This engine returns what the source publishes (seller display name and business name); no masking is applied.","on_invalid":"reject","default":false,"example":false}],"returns":"{total, query, language, facets{<key>: {type, values[{value, label, id, count, selected}] | min, max, unit}}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category":["lighting"],"facet":["brand","designer","price"],"language":"en"}}]},{"name":"wikipedia","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"Wikipedia & Wikidata API — encyclopedia content, knowledge-graph facts and pageview traffic across 360+ languages: summaries, full articles, rendered HTML/wikitext, full-text search, entity facts, category members, cross-language links, edit history, random pages, geosearch, on-this-day and featured-content feed","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/wikipedia/v1","spec_available":true,"actions":[{"name":"summary","description":"page summary: extract, description, thumbnail, coordinates, wikibase QID, urls (lang= any of 360+ editions)","required_params":["title"],"optional_params":["lang"],"params":[{"name":"title","type":"string","required":true,"description":"Exact article title (case-sensitive first letter aside).","on_invalid":"reject","example":"Albert Einstein","aliases":["q","query"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]}],"returns":"summary{} — title, extract, description, thumbnail, coordinates, wikibase_item (QID), content_urls; + attribution","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"title":"Albert Einstein"}},{"name":"page","description":"full article: plain-text body + internal links + image list + categories + external links (content=false → structure only)","required_params":["title"],"optional_params":["lang","content","links_limit","images_limit"],"params":[{"name":"title","type":"string","required":true,"description":"Exact article title (case-sensitive first letter aside).","on_invalid":"reject","example":"Albert Einstein","aliases":["q","query"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"content","type":"boolean","required":false,"description":"false (or 0/no) → return article STRUCTURE only (links/images/categories), skip the plain-text body.","on_invalid":"ignore","default":true,"example":true},{"name":"links_limit","type":"integer","required":false,"description":"Max internal links to return (1-500); clamped.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":500},{"name":"images_limit","type":"integer","required":false,"description":"Max images to return (1-200); clamped.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":200}],"returns":"page{} — title, content (plain text), links[], images[], categories[], external_links[]; + attribution","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"title":"Albert Einstein"}},{"name":"search","description":"full-text search → ranked pages (snippet/pageid/wordcount) + totalhits; enrich= adds extract/thumbnail/QID","required_params":["query"],"optional_params":["lang","limit","offset","enrich"],"params":[{"name":"query","type":"string","required":true,"description":"Full-text search query.","on_invalid":"reject","example":"quantum computing","aliases":["q","title"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"limit","type":"integer","required":false,"description":"Max results (1-50, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"offset","type":"integer","required":false,"description":"Result offset for pagination (0-10000); page with meta/next_offset.","on_invalid":"ignore","default":0,"example":0,"minimum":0,"maximum":10000},{"name":"enrich","type":"boolean","required":false,"description":"If true, hydrate each result with extract + thumbnail + Wikidata QID (extra requests).","on_invalid":"ignore","default":false,"example":true}],"returns":"results[] (title, pageid, snippet, wordcount [+extract/thumbnail/QID if enrich]), total, suggestion, next_offset; + attribution","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"quantum computing"}},{"name":"entity_facts","description":"Wikidata facts for a QID or title: label/description/aliases + resolved human-readable facts{prop:value} + key_facts + identifiers + image/coords","required_params":[],"optional_params":["id","qid","title","query","lang","value_cap"],"params":[{"name":"id","type":"string","required":false,"description":"Wikidata QID (e.g. Q937). Supply this OR `title`/`query` to resolve one.","on_invalid":"reject","example":"Q937","aliases":["qid"]},{"name":"title","type":"string","required":false,"description":"Article/entity title to resolve to a Wikidata QID. Supply this OR `id`.","on_invalid":"reject","example":"Tesla, Inc.","aliases":["query","q"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"value_cap","type":"integer","required":false,"description":"Max values kept per multi-valued Wikidata property (1-200); clamped.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":200}],"returns":"entity{} — label, description, aliases, facts{prop:value}, key_facts, identifiers, image, coords, qid, wikipedia_url; + attribution","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":2},"example_params":{"id":"Q937"}},{"name":"pageviews","description":"daily/monthly traffic for an article over a date range → series + total + average","required_params":["title"],"optional_params":["lang","start","end","days","granularity","access","agent"],"params":[{"name":"title","type":"string","required":true,"description":"Article title to pull traffic for.","on_invalid":"reject","example":"Albert Einstein","aliases":["article","q","query"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"start","type":"string","required":false,"description":"Range start date, YYYYMMDD or YYYY-MM-DD. Supply both start AND end, or use `days` instead.","on_invalid":"reject","example":"20240101"},{"name":"end","type":"string","required":false,"description":"Range end date, YYYYMMDD or YYYY-MM-DD. Supply both start AND end, or use `days` instead.","on_invalid":"reject","example":"20240131"},{"name":"days","type":"integer","required":false,"description":"Look-back window ending today, used when start/end are omitted (1-1000).","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":1000},{"name":"granularity","type":"enum","required":false,"description":"Bucket size. Anything not starting with 'month' is treated as daily.","on_invalid":"ignore","allowed_values":[{"value":"daily","label":"One point per day (default)"},{"value":"monthly","label":"One point per month"}],"default":"daily","example":"daily"},{"name":"access","type":"enum","required":false,"description":"Wikimedia Pageviews access channel (passed through to the REST API).","on_invalid":"ignore","allowed_values":[{"value":"all-access","label":"All access (default)"},{"value":"desktop","label":"Desktop"},{"value":"mobile-app","label":"Mobile app"},{"value":"mobile-web","label":"Mobile web"}],"default":"all-access","example":"all-access"},{"name":"agent","type":"enum","required":false,"description":"Wikimedia Pageviews agent class (passed through to the REST API).","on_invalid":"ignore","allowed_values":[{"value":"all-agents","label":"All agents (default)"},{"value":"user","label":"Human users"},{"value":"spider","label":"Spiders"},{"value":"automated","label":"Automated"}],"default":"all-agents","example":"user"}],"returns":"article, daily[] (date, views), total, average, granularity/start/end; + attribution","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"title":"Albert Einstein","start":"20240101","end":"20240131"}},{"name":"related","description":"pages related to a title; enrich= adds extract/thumbnail","required_params":["title"],"optional_params":["lang","limit","enrich"],"params":[{"name":"title","type":"string","required":true,"description":"Exact article title (case-sensitive first letter aside).","on_invalid":"reject","example":"Albert Einstein","aliases":["q","query"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"limit","type":"integer","required":false,"description":"Max results (1-50, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"enrich","type":"boolean","required":false,"description":"If true, hydrate each result with extract + thumbnail + Wikidata QID (extra requests).","on_invalid":"ignore","default":false,"example":true}],"returns":"source_title, related[] (title, pageid [+extract/thumbnail if enrich]), count; + attribution","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"title":"Albert Einstein"}},{"name":"autocomplete","description":"typeahead title suggestions","required_params":["q"],"optional_params":["lang","limit"],"params":[{"name":"q","type":"string","required":true,"description":"Typeahead prefix to autocomplete.","on_invalid":"reject","example":"Einst","aliases":["query","title"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"limit","type":"integer","required":false,"description":"Max results (1-50, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"query, suggestions[] (title, description, url), count; + attribution","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"Einst"}},{"name":"geosearch","description":"Wikipedia pages near a coordinate or around a title","required_params":[],"optional_params":["lat","lon","coord","title","radius","limit","lang"],"params":[{"name":"lat","type":"number","required":false,"description":"Latitude. Provide lat+lon, OR `coord`, OR `title` for geosearch.","on_invalid":"ignore","example":48.8584,"minimum":-90,"maximum":90},{"name":"lon","type":"number","required":false,"description":"Longitude (pairs with lat).","on_invalid":"ignore","example":2.2945,"minimum":-180,"maximum":180,"aliases":["lng"]},{"name":"coord","type":"string","required":false,"description":"'lat,lon' string — alternative to separate lat/lon params.","on_invalid":"reject","example":"48.8584,2.2945"},{"name":"title","type":"string","required":false,"description":"Find pages near THIS article's coordinates (alternative to lat/lon/coord).","on_invalid":"reject","example":"Eiffel Tower","aliases":["page"]},{"name":"radius","type":"integer","required":false,"description":"Search radius in metres (10-10000); clamped.","on_invalid":"ignore","default":1000,"example":1000,"minimum":10,"maximum":10000},{"name":"limit","type":"integer","required":false,"description":"Max results (1-50, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]}],"returns":"results[] (title, pageid, lat, lon, dist_m), count; + attribution","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"lat":48.8584,"lon":2.2945,"radius":1000}},{"name":"on_this_day","description":"historical events/births/deaths/holidays for a month-day (kind=all|selected|events|births|deaths|holidays)","required_params":[],"optional_params":["month","day","date","kind","limit","lang"],"params":[{"name":"month","type":"integer","required":false,"description":"Month 1-12 (pair with `day`), OR supply `date` instead. Defaults to today.","on_invalid":"ignore","example":3,"minimum":1,"maximum":12},{"name":"day","type":"integer","required":false,"description":"Day-of-month 1-31 (pairs with `month`).","on_invalid":"ignore","example":14,"minimum":1,"maximum":31},{"name":"date","type":"string","required":false,"description":"Date whose month-day is used (MM-DD or YYYY-MM-DD). Alternative to month/day.","on_invalid":"reject","example":"2024-03-14"},{"name":"kind","type":"enum","required":false,"description":"Which on-this-day category. An unknown value falls back to 'all'.","on_invalid":"ignore","allowed_values":[{"value":"all","label":"All categories (default)"},{"value":"selected","label":"Curated selection"},{"value":"events","label":"Events"},{"value":"births","label":"Births"},{"value":"deaths","label":"Deaths"},{"value":"holidays","label":"Holidays"}],"default":"all","example":"selected","aliases":["type"]},{"name":"limit","type":"integer","required":false,"description":"Max results (1-100, default 30); clamped.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":100},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]}],"returns":"date, kind, and the requested blocks (events/births/deaths/holidays/selected)[]; + attribution","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"month":3,"day":14,"kind":"selected"}},{"name":"top_articles","description":"most-viewed articles for a given date (trending)","required_params":[],"optional_params":["date","limit","access","include_special","lang"],"params":[{"name":"date","type":"string","required":false,"description":"Day to rank, YYYY-MM-DD or YYYYMMDD. Defaults to yesterday (today lags).","on_invalid":"reject","example":"2024-01-15"},{"name":"limit","type":"integer","required":false,"description":"Max results (1-1000, default 50); clamped.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":1000},{"name":"access","type":"enum","required":false,"description":"Wikimedia Pageviews access channel (passed through to the REST API).","on_invalid":"ignore","allowed_values":[{"value":"all-access","label":"All access (default)"},{"value":"desktop","label":"Desktop"},{"value":"mobile-app","label":"Mobile app"},{"value":"mobile-web","label":"Mobile web"}],"default":"all-access","example":"all-access"},{"name":"include_special","type":"boolean","required":false,"description":"Keep special pages (Main_Page, Special:Search) in the ranking; default drops them.","on_invalid":"ignore","default":false,"example":false},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]}],"returns":"articles[] (article, rank, views), date; + attribution","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":1},"example_params":{"date":"2024-01-15"}},{"name":"category_members","description":"list the pages, sub-categories or files that belong to a Wikipedia category (cmtype=page|subcat|file); paginate with meta.next/cmcontinue","required_params":["category"],"optional_params":["lang","limit","cmtype","cmcontinue"],"params":[{"name":"category","type":"string","required":true,"description":"Category name, with or without the 'Category:' prefix (e.g. 'Physicists' or 'Category:1879 births').","on_invalid":"reject","example":"Physicists","aliases":["title","q","query"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"limit","type":"integer","required":false,"description":"Max results (1-500, default 20); clamped.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":500},{"name":"cmtype","type":"enum","required":false,"description":"Which kind of category member to list. Unknown values fall back to 'page'.","on_invalid":"ignore","allowed_values":[{"value":"page","label":"Article pages (default)"},{"value":"subcat","label":"Sub-categories"},{"value":"file","label":"Files / media"}],"default":"page","example":"page","aliases":["type"]},{"name":"cmcontinue","type":"string","required":false,"description":"Pagination token from a previous response's meta.next — fetch the next batch.","on_invalid":"reject","example":"page|...|82899850"}],"returns":"category, members[] (title, pageid, ns, type, timestamp), count, next; + attribution","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"Physicists"}},{"name":"langlinks","description":"full cross-language map for a title: every edition's {lang, title, url, langname, autonym} plus a langmap{lang:title} lookup (the page action only returns the count)","required_params":["title"],"optional_params":["lang","limit"],"params":[{"name":"title","type":"string","required":true,"description":"Exact article title to resolve into its full cross-language map.","on_invalid":"reject","example":"Albert Einstein","aliases":["q","query"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"limit","type":"integer","required":false,"description":"Max results (1-500, default 500); clamped.","on_invalid":"ignore","default":500,"example":500,"minimum":1,"maximum":500}],"returns":"title, pageid, langlinks[] (lang, title, url, langname, autonym), langmap{lang:title}, count; + attribution","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"title":"Albert Einstein"}},{"name":"random","description":"one or more random articles; enrich= adds extract/thumbnail/QID","required_params":[],"optional_params":["lang","limit","enrich"],"params":[{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"limit","type":"integer","required":false,"description":"Max results (1-50, default 1); clamped.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":50},{"name":"enrich","type":"boolean","required":false,"description":"If true, hydrate each result with extract + thumbnail + Wikidata QID (extra requests).","on_invalid":"ignore","default":false,"example":true}],"returns":"results[] (title, pageid, ns [+extract/thumbnail/QID if enrich]), count; + attribution","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"lang":"en"}},{"name":"revisions","description":"edit history of an article: revid, parentid, timestamp, user, comment, size, tags; from/to window the range","required_params":["title"],"optional_params":["lang","limit","from","to"],"params":[{"name":"title","type":"string","required":true,"description":"Exact article title (case-sensitive first letter aside).","on_invalid":"reject","example":"Albert Einstein","aliases":["q","query"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"limit","type":"integer","required":false,"description":"Max results (1-500, default 10); clamped.","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":500},{"name":"from","type":"string","required":false,"description":"Window start (ISO timestamp). Returns revisions at/after this point (newest-first). Optional.","on_invalid":"reject","example":"2024-01-01T00:00:00Z"},{"name":"to","type":"string","required":false,"description":"Window end (ISO timestamp). Returns revisions at/before this point. Optional.","on_invalid":"reject","example":"2023-01-01T00:00:00Z"}],"returns":"title, pageid, revisions[] (revid, parentid, timestamp, user, comment, size, minor, tags), count, next; + attribution","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"title":"Albert Einstein"}},{"name":"html","description":"rendered article HTML (REST Parsoid) — or raw wiki markup with format=wikitext","required_params":["title"],"optional_params":["lang","format"],"params":[{"name":"title","type":"string","required":true,"description":"Exact article title (case-sensitive first letter aside).","on_invalid":"reject","example":"Albert Einstein","aliases":["q","query"]},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]},{"name":"format","type":"enum","required":false,"description":"Output flavour: rendered 'html' (default) or raw 'wikitext' source.","on_invalid":"ignore","allowed_values":[{"value":"html","label":"Rendered article HTML via REST Parsoid (default)"},{"value":"wikitext","label":"Raw wiki markup source via Action parse"}],"default":"html","example":"html"}],"returns":"page{} — title, pageid, lang, format (html|wikitext), html|wikitext, length, etag; + attribution","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"title":"Albert Einstein"}},{"name":"featured","description":"Wikimedia featured-content feed for a date: tfa (today's featured article), image-of-the-day, in-the-news, most-read and on-this-day (blocks vary by language/date)","required_params":[],"optional_params":["date","lang"],"params":[{"name":"date","type":"string","required":false,"description":"Day to rank, YYYY-MM-DD or YYYYMMDD. Defaults to yesterday (today lags).","on_invalid":"reject","example":"2024-01-15"},{"name":"lang","type":"string","required":false,"description":"Wikipedia language edition code (en, de, fr, ja, … 360+ editions). Default en.","on_invalid":"reject","default":"en","example":"en","aliases":["language"]}],"returns":"date + present blocks: tfa{}, image{}, news[], mostread{articles[]}, onthisday[]; + attribution","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"date":"2024-03-14"}}]},{"name":"wildberries","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Wildberries API scraper — Russia's largest marketplace plus Kazakhstan, Belarus, Armenia, Kyrgyzstan, Uzbekistan, Tajikistan and Georgia: keyword search, category listings with sorts and filters, full product records with every size's price and stock, price history, reviews, seller records and search suggestions, priced in each country's currency. No account, no browser.","version":"0.1.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/wildberries/v1","spec_available":true,"actions":[{"name":"search","description":"Search Wildberries by keyword in one country: 100 products a page with price and struck price, stock, rating and review count, brand, seller and delivery time, priced for that country. Filter by brand, seller and price; page 1 can also return the site's filter list.","required_params":["query"],"optional_params":["country","page","sort","price_min","price_max","brand_ids","seller_ids","include_filters","include_fallback_results","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, as typed on wildberries.ru (Russian or Latin).","on_invalid":"reject","example":"кроссовки","aliases":["q","keyword"]},{"name":"country","type":"enum","required":false,"description":"Wildberries market. Offers, stock and prices are those for delivery to the country's capital (Moscow, Almaty, Minsk, Yerevan, Bishkek, Tashkent, Dushanbe, Tbilisi), in its currency. Azerbaijan is not available.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russia (RUB)"},{"value":"kz","label":"Kazakhstan (KZT)"},{"value":"by","label":"Belarus (BYN)"},{"value":"am","label":"Armenia (AMD)"},{"value":"kg","label":"Kyrgyzstan (KGS)"},{"value":"uz","label":"Uzbekistan (UZS)"},{"value":"tj","label":"Tajikistan (TJS)"},{"value":"ge","label":"Georgia (GEL)"}],"default":"ru","example":"ru"},{"name":"page","type":"integer","required":false,"description":"Result page, 100 products per page. Wildberries serves 3 pages of a keyword search.","on_invalid":"reject","default":1,"minimum":1,"maximum":3},{"name":"sort","type":"enum","required":false,"description":"Wildberries' own sort orders. On broad keywords Wildberries applies a sort only together with a brand or seller filter; otherwise the answer lists it in ignored_params.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Popular (site default)"},{"value":"rating","label":"By rating"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Newest"},{"value":"best_value","label":"Best value"}],"default":"popular"},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's currency.","on_invalid":"reject","example":1000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's currency.","on_invalid":"reject","example":5000,"minimum":0},{"name":"brand_ids","type":"array","required":false,"description":"Brand ids (up to 20), from `available_filters` or a result row's brand_id.","on_invalid":"reject","example":"671,21","aliases":["brand_id","brands"]},{"name":"seller_ids","type":"array","required":false,"description":"Seller ids to keep (up to 20); -100 is Wildberries itself.","on_invalid":"reject","example":"-100","aliases":["seller_id_filter"]},{"name":"include_filters","type":"boolean","required":false,"description":"Also return the site's filter list (brands, sellers, categories with ids) — one extra request.","on_invalid":"ignore","default":false},{"name":"include_fallback_results","type":"boolean","required":false,"description":"When Wildberries answers a query it cannot match with unrelated products, return them separately in `fallback_results` instead of dropping them.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how hard to retry a request Wildberries rate-limits (1-12; category and seller listings use twice this number). Attempts run in parallel rounds over fresh exits — one while the route answers, widening only while it refuses — and stop after 18 seconds either way.","on_invalid":"ignore","default":10,"minimum":1,"maximum":12}],"returns":"results[{position, product_id, root_id (the product family shared by colour variants), title, brand, brand_id, seller{id, name, rating}, url, image, image_count, price (cheapest size, what the buyer pays: goods price + WB logistics fee), was_price (struck price on the same footing, only when discounted), discount_percent (goods price vs struck goods price), price_max (dearest size, when sizes differ), currency, price_before_logistics, logistics_fee, available, stock_quantity, size_count, colours[], rating, rating_scale, review_count, category_id, parent_category_id, delivery_hours, is_new, review_reward_points, price_source (live: read from the product card; search_index: the product card did not answer, figures from the search index)}], count, page, page_size, total_results, total_pages, has_more, query, query_corrected_to, ranking_source (site|ru_index), unavailable_in_country_dropped, index_only_rows, sort_applied, ignored_params[], applied_filters{}, available_filters[{key, name, values[{id, name}]}] (include_filters), fallback_results_dropped, fallback_results[], sponsored_dropped, page_notice, country{code, name, currency, delivery_city, delivery_zone}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"кроссовки"}},{"name":"category/products","description":"List one Wildberries category in one country with the site's six sort orders and its price and brand filters: 100 products a page with the same fields as search.","required_params":["category"],"optional_params":["country","page","sort","price_min","price_max","brand_ids","seller_ids","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"Category id from `categories`, or a wildberries.ru category URL (https://www.wildberries.ru/catalog/…).","on_invalid":"reject","example":"130017","aliases":["category_id","category_url"]},{"name":"country","type":"enum","required":false,"description":"Wildberries market. Offers, stock and prices are those for delivery to the country's capital (Moscow, Almaty, Minsk, Yerevan, Bishkek, Tashkent, Dushanbe, Tbilisi), in its currency. Azerbaijan is not available.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russia (RUB)"},{"value":"kz","label":"Kazakhstan (KZT)"},{"value":"by","label":"Belarus (BYN)"},{"value":"am","label":"Armenia (AMD)"},{"value":"kg","label":"Kyrgyzstan (KGS)"},{"value":"uz","label":"Uzbekistan (UZS)"},{"value":"tj","label":"Tajikistan (TJS)"},{"value":"ge","label":"Georgia (GEL)"}],"default":"ru","example":"ru"},{"name":"page","type":"integer","required":false,"description":"Result page, 100 products per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Wildberries' own sort orders.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Popular (site default)"},{"value":"rating","label":"By rating"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Newest"},{"value":"best_value","label":"Best value"}],"default":"popular"},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's currency.","on_invalid":"reject","example":1000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's currency.","on_invalid":"reject","example":5000,"minimum":0},{"name":"brand_ids","type":"array","required":false,"description":"Brand ids (up to 20), from `available_filters` or a result row's brand_id.","on_invalid":"reject","example":"671,21","aliases":["brand_id","brands"]},{"name":"seller_ids","type":"array","required":false,"description":"Seller ids to keep (up to 20); -100 is Wildberries itself.","on_invalid":"reject","example":"-100","aliases":["seller_id_filter"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how hard to retry a request Wildberries rate-limits (1-12; category and seller listings use twice this number). Attempts run in parallel rounds over fresh exits — one while the route answers, widening only while it refuses — and stop after 18 seconds either way.","on_invalid":"ignore","default":10,"minimum":1,"maximum":12}],"returns":"results[{position, product_id, root_id (the product family shared by colour variants), title, brand, brand_id, seller{id, name, rating}, url, image, image_count, price (cheapest size, what the buyer pays: goods price + WB logistics fee), was_price (struck price on the same footing, only when discounted), discount_percent (goods price vs struck goods price), price_max (dearest size, when sizes differ), currency, price_before_logistics, logistics_fee, available, stock_quantity, size_count, colours[], rating, rating_scale, review_count, category_id, parent_category_id, delivery_hours, is_new, review_reward_points, price_source (live: read from the product card; search_index: the product card did not answer, figures from the search index)}], count, page, page_size, total_results, total_pages, has_more, category{category_id, name, path[], url}, sort_applied, applied_filters{}, page_notice, country{code, name, currency, delivery_city, delivery_zone}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"130017"}},{"name":"categories","description":"The Wildberries catalogue tree: every category with its id, name, path, parent and whether it can be listed with category/products.","required_params":[],"optional_params":["parent_id","search","max_rotations"],"params":[{"name":"parent_id","type":"integer","required":false,"description":"Only the direct children of this category id.","on_invalid":"reject"},{"name":"search","type":"string","required":false,"description":"Only categories whose name contains this text.","on_invalid":"reject","aliases":["name"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how hard to retry a request Wildberries rate-limits (1-12; category and seller listings use twice this number). Attempts run in parallel rounds over fresh exits — one while the route answers, widening only while it refuses — and stop after 18 seconds either way.","on_invalid":"ignore","default":10,"minimum":1,"maximum":12}],"returns":"categories[{category_id, name, parent_id, depth, path[], url, has_products, child_count}], count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"product/detail","description":"One Wildberries product by article number or URL, for one country: title, brand, seller, every size with its own price, struck price and stock, colour variants with their prices, specifications, description, images, rating and review count, delivery time and the weekly price history.","required_params":[],"optional_params":["product_id","url","country","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"Wildberries article number (the number in a product URL; result rows return it).","on_invalid":"reject","example":"159500775","aliases":["id","nm_id","article"]},{"name":"url","type":"string","required":false,"description":"Alternative to product_id: a Wildberries product URL.","on_invalid":"reject","example":"https://www.wildberries.ru/catalog/159500775/detail.aspx","aliases":["product_url"]},{"name":"country","type":"enum","required":false,"description":"Wildberries market. Offers, stock and prices are those for delivery to the country's capital (Moscow, Almaty, Minsk, Yerevan, Bishkek, Tashkent, Dushanbe, Tbilisi), in its currency. Azerbaijan is not available.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russia (RUB)"},{"value":"kz","label":"Kazakhstan (KZT)"},{"value":"by","label":"Belarus (BYN)"},{"value":"am","label":"Armenia (AMD)"},{"value":"kg","label":"Kyrgyzstan (KGS)"},{"value":"uz","label":"Uzbekistan (UZS)"},{"value":"tj","label":"Tajikistan (TJS)"},{"value":"ge","label":"Georgia (GEL)"}],"default":"ru","example":"ru"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how hard to retry a request Wildberries rate-limits (1-12; category and seller listings use twice this number). Attempts run in parallel rounds over fresh exits — one while the route answers, widening only while it refuses — and stop after 18 seconds either way.","on_invalid":"ignore","default":10,"minimum":1,"maximum":12}],"returns":"product{product_id, root_id, title, brand, brand_id, seller{id, name, rating}, url, images[], has_video, breadcrumb[], category_id, category, parent_category_id, parent_category, description, specifications[{group, name, value}], seller_sku, colour, contents, certificate_verified, gtin (null: not published), price, was_price, discount_percent, price_max, currency, price_before_logistics, logistics_fee, available, stock_quantity, delivery_hours, sizes[{size_id, name, original_name, price, was_price, discount_percent, price_before_logistics, logistics_fee, available, stock_quantity, warehouse_count, delivery_hours}], variants[{product_id, colour, price, was_price, available, stock_quantity, image}], rating, rating_scale, review_count, review_reward_points, price_history[{date, price}], price_history_currency (RUB), sold_in_country (false: no offer for this country, or sold out)}, country{code, name, currency, delivery_city, delivery_zone}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"159500775"}},{"name":"product/reviews","description":"Reviews of one Wildberries product: the full star breakdown and counts, plus the most recent reviews (about 1 000, which is what Wildberries publishes) with stars, date, text, pros and cons, size fit, helpful votes, photos, the seller's answer and the reviewer's display name as Wildberries publishes it.","required_params":[],"optional_params":["product_id","url","page","limit","rating","with","this_variant_only","max_rotations"],"params":[{"name":"product_id","type":"string","required":false,"description":"Wildberries article number (the number in a product URL; result rows return it).","on_invalid":"reject","example":"159500775","aliases":["id","nm_id","article"]},{"name":"url","type":"string","required":false,"description":"Alternative to product_id: a Wildberries product URL.","on_invalid":"reject","example":"https://www.wildberries.ru/catalog/159500775/detail.aspx","aliases":["product_url"]},{"name":"page","type":"integer","required":false,"description":"Review page, 1-based.","on_invalid":"reject","default":1,"minimum":1,"maximum":100},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-200.","on_invalid":"reject","default":50,"minimum":1,"maximum":200},{"name":"rating","type":"array","required":false,"description":"Only reviews with these star ratings (1-5).","on_invalid":"reject","example":"1,2","aliases":["stars"]},{"name":"with","type":"enum","required":false,"description":"Keep only reviews with text or with photos.","on_invalid":"reject","allowed_values":[{"value":"all","label":"All reviews"},{"value":"text","label":"With text"},{"value":"photos","label":"With photos"}],"default":"all"},{"name":"this_variant_only","type":"boolean","required":false,"description":"Wildberries pools reviews across a product's colour variants; true keeps only the reviews written for this product_id.","on_invalid":"ignore","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how hard to retry a request Wildberries rate-limits (1-12; category and seller listings use twice this number). Attempts run in parallel rounds over fresh exits — one while the route answers, widening only while it refuses — and stop after 18 seconds either way.","on_invalid":"ignore","default":10,"minimum":1,"maximum":12}],"returns":"product_id, root_id, rating, rating_scale, rating_breakdown{'1'..'5'}, review_count, reviews_with_text, reviews_with_photos, reviews_with_video, reviews_published, reviews_matching, reviews[{review_id, product_id, rating, date, text, pros, cons, variant_colour, variant_size, size_fit, helpful_count, unhelpful_count, tags[], photo_count, has_video, excluded_from_rating, reviewer_country, reviewer_name, reviewer_id, reviewer_has_photo, seller_answer{text, date}}], count, page, limit, total_pages, page_notice","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.wildberries.ru/catalog/159500775/detail.aspx"}},{"name":"seller/detail","description":"A Wildberries seller's public record: shop name, legal name, trademark, tax id and registration number, and the registered address (companies and individual entrepreneurs).","required_params":["seller_id"],"optional_params":["max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Wildberries seller id (result rows return it as seller.id).","on_invalid":"reject","example":"1334144","aliases":["supplier_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how hard to retry a request Wildberries rate-limits (1-12; category and seller listings use twice this number). Attempts run in parallel rounds over fresh exits — one while the route answers, widening only while it refuses — and stop after 18 seconds either way.","on_invalid":"ignore","default":10,"minimum":1,"maximum":12}],"returns":"seller{seller_id, name, legal_name, trademark, individual_entrepreneur, tax_id, registration_number, kpp, legal_address, email (when Wildberries publishes one), url}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"1334144"}},{"name":"seller/products","description":"One seller's products in one country with the site's sort orders and price and brand filters, 100 a page.","required_params":["seller_id"],"optional_params":["country","page","sort","price_min","price_max","brand_ids","max_rotations"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Wildberries seller id (result rows return it as seller.id).","on_invalid":"reject","example":"1334144","aliases":["supplier_id"]},{"name":"country","type":"enum","required":false,"description":"Wildberries market. Offers, stock and prices are those for delivery to the country's capital (Moscow, Almaty, Minsk, Yerevan, Bishkek, Tashkent, Dushanbe, Tbilisi), in its currency. Azerbaijan is not available.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russia (RUB)"},{"value":"kz","label":"Kazakhstan (KZT)"},{"value":"by","label":"Belarus (BYN)"},{"value":"am","label":"Armenia (AMD)"},{"value":"kg","label":"Kyrgyzstan (KGS)"},{"value":"uz","label":"Uzbekistan (UZS)"},{"value":"tj","label":"Tajikistan (TJS)"},{"value":"ge","label":"Georgia (GEL)"}],"default":"ru","example":"ru"},{"name":"page","type":"integer","required":false,"description":"Result page, 100 products per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Wildberries' own sort orders.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Popular (site default)"},{"value":"rating","label":"By rating"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"newest","label":"Newest"},{"value":"best_value","label":"Best value"}],"default":"popular"},{"name":"price_min","type":"number","required":false,"description":"Lowest price, in the country's currency.","on_invalid":"reject","example":1000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price, in the country's currency.","on_invalid":"reject","example":5000,"minimum":0},{"name":"brand_ids","type":"array","required":false,"description":"Brand ids (up to 20), from `available_filters` or a result row's brand_id.","on_invalid":"reject","example":"671,21","aliases":["brand_id","brands"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how hard to retry a request Wildberries rate-limits (1-12; category and seller listings use twice this number). Attempts run in parallel rounds over fresh exits — one while the route answers, widening only while it refuses — and stop after 18 seconds either way.","on_invalid":"ignore","default":10,"minimum":1,"maximum":12}],"returns":"results[{position, product_id, root_id (the product family shared by colour variants), title, brand, brand_id, seller{id, name, rating}, url, image, image_count, price (cheapest size, what the buyer pays: goods price + WB logistics fee), was_price (struck price on the same footing, only when discounted), discount_percent (goods price vs struck goods price), price_max (dearest size, when sizes differ), currency, price_before_logistics, logistics_fee, available, stock_quantity, size_count, colours[], rating, rating_scale, review_count, category_id, parent_category_id, delivery_hours, is_new, review_reward_points, price_source (live: read from the product card; search_index: the product card did not answer, figures from the search index)}], count, page, page_size, total_results, total_pages, has_more, seller_id, sort_applied, applied_filters{}, page_notice, country{code, name, currency, delivery_city, delivery_zone}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":"1334144"}},{"name":"suggest","description":"Wildberries search suggestions for the beginning of a query.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"The beginning of a search, as typed.","on_invalid":"reject","example":"плат","aliases":["q"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how hard to retry a request Wildberries rate-limits (1-12; category and seller listings use twice this number). Attempts run in parallel rounds over fresh exits — one while the route answers, widening only while it refuses — and stop after 18 seconds either way.","on_invalid":"ignore","default":10,"minimum":1,"maximum":12}],"returns":"query, suggestions[{text, type}], count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"кроссовки"}}]},{"name":"willhaben","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"willhaben API scraper — Austria's largest classifieds site: marketplace search with condition, PayLivery and private/dealer filters, real estate (rent and buy) and cars/motorcycles search, and the full listing record. No account, no browser.","version":"0.1.4","pii_redact_default":false,"mint_reusable":null,"base_path":"/willhaben/v1","spec_available":true,"actions":[{"name":"search","description":"Search willhaben's second-hand marketplace (Kaufen & Verkaufen) by keyword and/or category: price or 'free', condition, PayLivery (willhaben's buyer-protected shipping) and pickup/shipping, location, private or dealer seller, publish/update/expiry dates, images, and flags for top ads, paid highlights and reserved listings. Filter by price, condition, handover, PayLivery, state or district, seller type, seller, attribute values and last 48 hours; sort newest, price or relevance.","required_params":[],"optional_params":["query","category","condition","handover","paylivery","attribute_ids","price_min","price_max","state","area_id","seller_type","seller_id","posted_last_48h","sort","page","limit","include_facets","include_pii","max_rotations"],"params":[{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into willhaben's search box.","on_invalid":"reject","example":"fahrrad"},{"name":"category","type":"string","required":false,"description":"willhaben category id (e.g. 4525 = bikes) or a willhaben category URL ending in -<id>. Ids come back in facets.","on_invalid":"reject","example":"4525"},{"name":"condition","type":"array","required":false,"description":"One or more of new, like_new, refurbished, used, defective, display_item.","on_invalid":"reject","allowed_values":[{"value":"new","label":"new"},{"value":"like_new","label":"like_new"},{"value":"refurbished","label":"refurbished"},{"value":"used","label":"used"},{"value":"defective","label":"defective"},{"value":"display_item","label":"display_item"}]},{"name":"handover","type":"enum","required":false,"description":"Only listings offering pickup, or shipping.","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"Pickup"},{"value":"shipping","label":"Shipping"}]},{"name":"paylivery","type":"boolean","required":false,"description":"Only listings with PayLivery (buyer protection + shipping via willhaben).","on_invalid":"reject"},{"name":"attribute_ids","type":"array","required":false,"description":"willhaben attribute value ids (frame size, colour, size…) from facets.","on_invalid":"reject"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rental sections).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rental sections).","on_invalid":"reject","example":500,"minimum":0},{"name":"state","type":"enum","required":false,"description":"Austrian federal state.","on_invalid":"reject","allowed_values":[{"value":"burgenland","label":"burgenland"},{"value":"kaernten","label":"kaernten"},{"value":"niederoesterreich","label":"niederoesterreich"},{"value":"oberoesterreich","label":"oberoesterreich"},{"value":"salzburg","label":"salzburg"},{"value":"steiermark","label":"steiermark"},{"value":"tirol","label":"tirol"},{"value":"vorarlberg","label":"vorarlberg"},{"value":"wien","label":"wien"}],"example":"wien"},{"name":"area_id","type":"integer","required":false,"description":"willhaben area id for a district or city (e.g. 117223 = Wien 1st district). Returned in facets when include_facets=true. Use instead of state.","on_invalid":"reject"},{"name":"seller_type","type":"enum","required":false,"description":"Private sellers or dealers only.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private seller"},{"value":"dealer","label":"Dealer / company"}]},{"name":"seller_id","type":"integer","required":false,"description":"Only this seller's listings (a listing's seller_id).","on_invalid":"reject"},{"name":"posted_last_48h","type":"boolean","required":false,"description":"Only listings published in the last 48 hours.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"newest, price_asc, price_desc or relevance. Omitted: willhaben's default order (sort_applied says which).","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"relevance","label":"relevance"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Listings per page (1-100). willhaben's own page size is 30.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_facets","type":"boolean","required":false,"description":"Also return willhaben's filter facets for this search (categories, areas, makes, object types, attribute values) with counts and the value to pass back.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Compatibility flag; nothing is hidden either way. Private sellers' names, phone numbers, street addresses and exact coordinates come back wherever willhaben publishes them.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, section, status, is_reserved, price (EUR; 0 only when free; null on request), currency, price_display, is_free, price_on_request, price_is_from, price_not_published, description_preview, postcode, location, district, state, country, address, latitude, longitude (where willhaben publishes them, private sellers included), published_at (UTC; for a re-pushed ad the re-push time), updated_at (UTC; null on real-estate and vehicle rows, which carry no change date — the listing has it), expires_at (UTC), price_before_reduction, price_reduced_at (UTC), advertiser_reference, seller_id, seller_type (private|dealer), seller_name (dealers; private rows carry no name), seller_logo (dealers), images[], image_count, is_top_ad, is_highlighted, is_bumped (willhaben's paid re-push), category_ids[], teaser[], condition, handover[], paylivery}, count, total, page, limit, has_more, sort_applied, breadcrumbs[], facets[] (include_facets)","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"fahrrad"}},{"name":"real_estate/search","description":"Search willhaben real estate - Austria's largest property portal - by property type (apartments and houses to rent or buy, plots, commercial): price or monthly rent, price per m², living area, rooms, floor, property type, new-build projects with their units, address and district, agency or private landlord, images and top-ad flags. Filter by price, living area, rooms, object type (attic flat, maisonette…), state or district, agency, available now, keyword; sort newest, price, area or relevance.","required_params":["property_type"],"optional_params":["query","price_min","price_max","living_area_min","living_area_max","rooms","object_type","available_now","state","area_id","seller_id","posted_last_48h","sort","page","limit","include_facets","include_pii","max_rotations"],"params":[{"name":"property_type","type":"enum","required":true,"description":"rent_apartment, buy_apartment, rent_house, buy_house, plot, commercial_rent or commercial_buy.","on_invalid":"reject","allowed_values":[{"value":"rent_apartment","label":"rent_apartment"},{"value":"buy_apartment","label":"buy_apartment"},{"value":"rent_house","label":"rent_house"},{"value":"buy_house","label":"buy_house"},{"value":"plot","label":"plot"},{"value":"commercial_rent","label":"commercial_rent"},{"value":"commercial_buy","label":"commercial_buy"}],"example":"rent_apartment"},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into willhaben's search box.","on_invalid":"reject","example":"fahrrad"},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rental sections).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rental sections).","on_invalid":"reject","example":500,"minimum":0},{"name":"living_area_min","type":"number","required":false,"description":"Smallest living area, m².","on_invalid":"reject","minimum":0},{"name":"living_area_max","type":"number","required":false,"description":"Largest living area, m².","on_invalid":"reject","minimum":0},{"name":"rooms","type":"array","required":false,"description":"One or more of 1, 2, 3, 4, 5, 6-9, 10+.","on_invalid":"reject","allowed_values":[{"value":"1","label":"1"},{"value":"2","label":"2"},{"value":"3","label":"3"},{"value":"4","label":"4"},{"value":"5","label":"5"},{"value":"6-9","label":"6-9"},{"value":"10+","label":"10+"}]},{"name":"object_type","type":"array","required":false,"description":"One or more willhaben object type ids from the 'Objekttyp' facet (include_facets=true), e.g. 110 = Dachgeschoßwohnung (attic flat), 101 = Maisonette. The ids differ per property_type.","on_invalid":"reject","example":["110"]},{"name":"available_now","type":"boolean","required":false,"description":"Only properties available immediately.","on_invalid":"reject"},{"name":"state","type":"enum","required":false,"description":"Austrian federal state.","on_invalid":"reject","allowed_values":[{"value":"burgenland","label":"burgenland"},{"value":"kaernten","label":"kaernten"},{"value":"niederoesterreich","label":"niederoesterreich"},{"value":"oberoesterreich","label":"oberoesterreich"},{"value":"salzburg","label":"salzburg"},{"value":"steiermark","label":"steiermark"},{"value":"tirol","label":"tirol"},{"value":"vorarlberg","label":"vorarlberg"},{"value":"wien","label":"wien"}],"example":"wien"},{"name":"area_id","type":"integer","required":false,"description":"willhaben area id for a district or city (e.g. 117223 = Wien 1st district). Returned in facets when include_facets=true. Use instead of state.","on_invalid":"reject"},{"name":"seller_id","type":"integer","required":false,"description":"Only this seller's listings (a listing's seller_id).","on_invalid":"reject"},{"name":"posted_last_48h","type":"boolean","required":false,"description":"Only listings published in the last 48 hours.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"newest, price_asc, price_desc, area_asc, area_desc or relevance.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"area_asc","label":"area_asc"},{"value":"area_desc","label":"area_desc"},{"value":"relevance","label":"relevance"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Listings per page (1-100). willhaben's own page size is 30.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_facets","type":"boolean","required":false,"description":"Also return willhaben's filter facets for this search (categories, areas, makes, object types, attribute values) with counts and the value to pass back.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Compatibility flag; nothing is hidden either way. Private sellers' names, phone numbers, street addresses and exact coordinates come back wherever willhaben publishes them.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, section, status, is_reserved, price (EUR; 0 only when free; null on request), currency, price_display, is_free, price_on_request, price_is_from, price_not_published, description_preview, postcode, location, district, state, country, address, latitude, longitude (where willhaben publishes them, private sellers included), published_at (UTC; for a re-pushed ad the re-push time), updated_at (UTC; null on real-estate and vehicle rows, which carry no change date — the listing has it), expires_at (UTC), price_before_reduction, price_reduced_at (UTC), advertiser_reference, seller_id, seller_type (private|dealer), seller_name (dealers; private rows carry no name), seller_logo (dealers), images[], image_count, is_top_ad, is_highlighted, is_bumped (willhaben's paid re-push), category_ids[], teaser[], property{property_type, living_area_m2, usable_area_m2, rooms, floor, floor_surface, rent_per_month, rent_net_per_month, operating_costs_per_month, deposit, agency_fee, monthly_costs_gross, rent_from, purchase_price, price_per_m2, free_area_type, is_project, project_id, virtual_tour_url, unit_title, unit_number, …}, units[]{ad_id, title, url, price, price_display, living_area_m2, rooms, floor}}, count, total, page, limit, has_more, sort_applied, breadcrumbs[], facets[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"property_type":"rent_apartment","state":"wien"}},{"name":"cars/search","description":"Search willhaben used cars and motorcycles: price, the dealer's earlier price and any bonus-only price kept separate, make, model, version, first registration, mileage, power, fuel, transmission, condition, body type, previous owners, warranty and inspection sticker, location, dealer or private seller, images and top-ad flags. Filter by make, price, mileage, year, fuel, transmission, condition, state, seller type; sort by price, mileage, year, newest or relevance.","required_params":[],"optional_params":["vehicle_type","query","make","price_min","price_max","mileage_min","mileage_max","year_min","year_max","fuel","transmission","condition","state","area_id","seller_type","seller_id","posted_last_48h","sort","page","limit","include_facets","include_pii","max_rotations"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"car or motorcycle. The make/fuel/transmission/condition filters apply to cars.","on_invalid":"reject","allowed_values":[{"value":"car","label":"Car"},{"value":"motorcycle","label":"Motorcycle"}],"default":"car"},{"name":"query","type":"string","required":false,"description":"Free-text keyword, as typed into willhaben's search box.","on_invalid":"reject","example":"fahrrad"},{"name":"make","type":"integer","required":false,"description":"willhaben make id (e.g. 1003 = Audi, 1005 = BMW). Ids come back in facets.","on_invalid":"reject","example":1003},{"name":"price_min","type":"number","required":false,"description":"Lowest price in EUR (monthly rent on rental sections).","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in EUR (monthly rent on rental sections).","on_invalid":"reject","example":500,"minimum":0},{"name":"mileage_min","type":"number","required":false,"description":"Lowest mileage, km.","on_invalid":"reject","minimum":0},{"name":"mileage_max","type":"number","required":false,"description":"Highest mileage, km.","on_invalid":"reject","minimum":0},{"name":"year_min","type":"integer","required":false,"description":"Earliest first registration year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest first registration year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"fuel","type":"enum","required":false,"description":"petrol, diesel, electric, gas, hybrid_petrol, hybrid_diesel or hydrogen.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"diesel","label":"diesel"},{"value":"electric","label":"electric"},{"value":"gas","label":"gas"},{"value":"hybrid_petrol","label":"hybrid_petrol"},{"value":"hybrid_diesel","label":"hybrid_diesel"},{"value":"hydrogen","label":"hydrogen"}]},{"name":"transmission","type":"enum","required":false,"description":"automatic or manual.","on_invalid":"reject","allowed_values":[{"value":"automatic","label":"Automatic"},{"value":"manual","label":"Manual"}]},{"name":"condition","type":"enum","required":false,"description":"used, new, year_old, oldtimer, day_registration, accident or demo.","on_invalid":"reject","allowed_values":[{"value":"used","label":"used"},{"value":"new","label":"new"},{"value":"year_old","label":"year_old"},{"value":"oldtimer","label":"oldtimer"},{"value":"day_registration","label":"day_registration"},{"value":"accident","label":"accident"},{"value":"demo","label":"demo"}]},{"name":"state","type":"enum","required":false,"description":"Austrian federal state.","on_invalid":"reject","allowed_values":[{"value":"burgenland","label":"burgenland"},{"value":"kaernten","label":"kaernten"},{"value":"niederoesterreich","label":"niederoesterreich"},{"value":"oberoesterreich","label":"oberoesterreich"},{"value":"salzburg","label":"salzburg"},{"value":"steiermark","label":"steiermark"},{"value":"tirol","label":"tirol"},{"value":"vorarlberg","label":"vorarlberg"},{"value":"wien","label":"wien"}],"example":"wien"},{"name":"area_id","type":"integer","required":false,"description":"willhaben area id for a district or city (e.g. 117223 = Wien 1st district). Returned in facets when include_facets=true. Use instead of state.","on_invalid":"reject"},{"name":"seller_type","type":"enum","required":false,"description":"Private sellers or dealers only.","on_invalid":"reject","allowed_values":[{"value":"private","label":"Private seller"},{"value":"dealer","label":"Dealer / company"}]},{"name":"seller_id","type":"integer","required":false,"description":"Only this seller's listings (a listing's seller_id).","on_invalid":"reject"},{"name":"posted_last_48h","type":"boolean","required":false,"description":"Only listings published in the last 48 hours.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"newest, price_asc, price_desc, mileage_asc, mileage_desc, year_desc, year_asc or relevance.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"newest"},{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"},{"value":"mileage_asc","label":"mileage_asc"},{"value":"mileage_desc","label":"mileage_desc"},{"value":"relevance","label":"relevance"},{"value":"year_desc","label":"year_desc"},{"value":"year_asc","label":"year_asc"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":1000},{"name":"limit","type":"integer","required":false,"description":"Listings per page (1-100). willhaben's own page size is 30.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"include_facets","type":"boolean","required":false,"description":"Also return willhaben's filter facets for this search (categories, areas, makes, object types, attribute values) with counts and the value to pass back.","on_invalid":"reject","default":false},{"name":"include_pii","type":"boolean","required":false,"description":"Compatibility flag; nothing is hidden either way. Private sellers' names, phone numbers, street addresses and exact coordinates come back wherever willhaben publishes them.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, title, url, section, status, is_reserved, price (EUR; 0 only when free; null on request), currency, price_display, is_free, price_on_request, price_is_from, price_not_published, description_preview, postcode, location, district, state, country, address, latitude, longitude (where willhaben publishes them, private sellers included), published_at (UTC; for a re-pushed ad the re-push time), updated_at (UTC; null on real-estate and vehicle rows, which carry no change date — the listing has it), expires_at (UTC), price_before_reduction, price_reduced_at (UTC), advertiser_reference, seller_id, seller_type (private|dealer), seller_name (dealers; private rows carry no name), seller_logo (dealers), images[], image_count, is_top_ad, is_highlighted, is_bumped (willhaben's paid re-push), category_ids[], teaser[], vehicle{make, make_id, model, model_id, model_specification (listing only; rows carry none), year, mileage_km, power_kw, engine_ccm, engine_cylinders, fuel, transmission, condition, body_type, wheel_drive, drive_system, colour, colour_id, doors, seats, emission_standard, battery_capacity_kwh, trailer_load_kg, defects_liability, is_authorised_dealer, previous_owners, warranty, inspection_valid, equipment[], price_before_reduction, price_reduced_at, bonus_finance, bonus_trade_in, price_with_bonus (never published by willhaben — always null), …}}, count, total, page, limit, has_more, sort_applied, breadcrumbs[], facets[]","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"golf"}},{"name":"listing","description":"The full willhaben listing by ad id or URL, in any section: title, price (free, on request and from-prices labelled), description, all images and floor plans, status and reserved flag, condition, pickup/shipping, PayLivery with each shipping option's carrier, price and parcel size, location (postcode, city, district, state), publish/update/expiry dates, breadcrumb, every published attribute, property or vehicle details, top-ad flag, and the seller (dealer company, address and website; for private sellers whatever willhaben shows, such as name and phone).","required_params":["ad_id"],"optional_params":["include_pii","max_rotations"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The willhaben ad id (the digits at the end of a listing URL), or the full listing URL.","on_invalid":"reject","example":"1826650948"},{"name":"include_pii","type":"boolean","required":false,"description":"Compatibility flag; nothing is hidden either way. Private sellers' names, phone numbers, street addresses and exact coordinates come back wherever willhaben publishes them.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{ad_id, uuid, title, url, section, status, is_reserved, price, currency, price_display, is_free, price_on_request, price_is_from, price_not_published, description, text_sections{}, condition, condition_label, handover[], paylivery, delivery_options[]{carrier, price, price_before_discount, parcel_size, parcel_type, max_weight_kg, delivery_days, insurance}, payment_options[], location{postcode, city, municipality, district, state, country, street, latitude, longitude, area_id}, published_at, first_published_at, updated_at, expires_at (all UTC), images[], image_count, floor_plans[], category_id, breadcrumbs[], attribute_groups[]{name, code, values[]}, attributes{}, is_top_ad, is_bumped, advertiser_reference, price_before_reduction, price_reduced_at, property{} | vehicle{}, seller{seller_id, type, name, name_withheld, company, business_address, website, member_since, active_ad_count, profile_image, partner_years, contact_type, chat_enabled, contact_name, phone}} (name_withheld is false and contact_name/phone are present on every gateway call — nothing is masked)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"ad_id":"1826650948"}}]},{"name":"wish","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Wish — cross-border marketplace search, products, shipping & reviews","version":"1.0.1","pii_redact_default":true,"mint_reusable":null,"base_path":"/wish/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search across Wish with price, rating, shipping, deal and merchant-tier filters. Returns the price charged, the strikethrough price where Wish publishes one, rating, review count and merchant id.","required_params":["query"],"optional_params":["market","limit","max_pages","min_price","max_price","min_rating"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for.","on_invalid":"reject","example":"wireless earbuds"},{"name":"market","type":"enum","required":false,"description":"Storefront to price against — it changes the currency, the price and how many variations exist. Wish sets it from the exit and accepts no override, so a rarer market costs extra attempts and GB can come back MARKET_UNAVAILABLE; 'any' is cheapest and reports whichever storefront answered.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States — USD"},{"value":"GB","label":"United Kingdom — GBP"},{"value":"CN","label":"China — CNY (no list prices; see docs)"},{"value":"any","label":"Whichever storefront answers first — cheapest, currency varies"}],"default":"US","example":"US"},{"name":"limit","type":"integer","required":false,"description":"How many products to return (1-150).","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":150},{"name":"max_pages","type":"integer","required":false,"description":"Upstream pages to walk. Wish returns 20-30 usable rows per page, so 150 results needs about 6.","on_invalid":"reject","default":5,"example":3,"minimum":1,"maximum":8},{"name":"min_price","type":"number","required":false,"description":"Lowest price, in the storefront's currency. Applied by this API to the rows it fetched — Wish's search ignores price filters — so raise `max_pages` to widen the net. `filtered_out` reports how many rows it removed.","on_invalid":"reject","example":5},{"name":"max_price","type":"number","required":false,"description":"Highest price, in the storefront's currency. Applied by this API to the rows it fetched, like `min_price`.","on_invalid":"reject","example":25},{"name":"min_rating","type":"enum","required":false,"description":"Only products rated this many stars and up. Applied by this API to the rows it fetched. Products with no reviews have no rating and are excluded.","on_invalid":"reject","allowed_values":[{"value":"4","label":"4 stars & up"},{"value":"3","label":"3 stars & up"},{"value":"2","label":"2 stars & up"},{"value":"1","label":"1 star & up"}],"example":"4"}],"returns":"{query, storefront, currency, total_found, returned, results[], filters_applied, filtered_out, next_offset}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"wireless earbuds","limit":10,"market":"US"}},{"name":"product","description":"Full product record: price, list price, SHIPPING COST and total, every colour/size variation with its own price and stock, merchant, categories, images, description and rating histogram.","required_params":["product_id"],"optional_params":["market","max_variants"],"params":[{"name":"product_id","type":"string","required":true,"description":"Wish product id, or any wish.com product URL.","on_invalid":"reject","example":"63eb5819af90c9111b845906","aliases":["id","url"]},{"name":"market","type":"enum","required":false,"description":"Storefront to price against.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States — USD"},{"value":"GB","label":"United Kingdom — GBP"},{"value":"CN","label":"China — CNY (no list prices; see docs)"},{"value":"any","label":"Whichever storefront answers first — cheapest, currency varies"}],"default":"US","example":"US"},{"name":"max_variants","type":"integer","required":false,"description":"Variations to return. Wish publishes up to several hundred per product; `variant_count` always states the true total.","on_invalid":"reject","default":100,"example":100,"minimum":1,"maximum":400}],"returns":"{product with variants[], merchant{}, categories[], images[]}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"63eb5819af90c9111b845906","market":"US"}},{"name":"reviews","description":"Buyer reviews for a product with the 1-5 star histogram. Each review carries the reviewer's name, short name, id, signup date, locale and country exactly as Wish publishes them.","required_params":["product_id"],"optional_params":["market","limit","offset"],"params":[{"name":"product_id","type":"string","required":true,"description":"Wish product id, or any wish.com product URL.","on_invalid":"reject","example":"6188c90eddcc50d1bcf714c2","aliases":["id","url"]},{"name":"market","type":"enum","required":false,"description":"Storefront. Reviews do not vary by market; 'any' is cheapest.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States — USD"},{"value":"GB","label":"United Kingdom — GBP"},{"value":"CN","label":"China — CNY (no list prices; see docs)"},{"value":"any","label":"Whichever storefront answers first — cheapest, currency varies"}],"default":"any","example":"any"},{"name":"limit","type":"integer","required":false,"description":"How many reviews to return.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"offset","type":"integer","required":false,"description":"Where to start, for paging.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":1000}],"returns":"{product_id, rating, review_count, rating_spread{}, reviews[{review_id, rating, title, comment, date, color, size, variation_id, upvotes, downvotes, photo_count, country, reviewer_name, reviewer_short_name, reviewer_id, reviewer_signup_date, reviewer_locale, reviewer_fb_uid, reviewer_profile_pic, reviewer_review_count, created_at, transaction_id, merchant_id}]}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"6188c90eddcc50d1bcf714c2","limit":5,"market":"any"}},{"name":"similar","description":"The related-products grid Wish shows under a product.","required_params":["product_id"],"optional_params":["market","limit"],"params":[{"name":"product_id","type":"string","required":true,"description":"Wish product id, or any wish.com product URL.","on_invalid":"reject","example":"63eb5819af90c9111b845906","aliases":["id","url"]},{"name":"market","type":"enum","required":false,"description":"Storefront to price against.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States — USD"},{"value":"GB","label":"United Kingdom — GBP"},{"value":"CN","label":"China — CNY (no list prices; see docs)"},{"value":"any","label":"Whichever storefront answers first — cheapest, currency varies"}],"default":"US","example":"US"},{"name":"limit","type":"integer","required":false,"description":"How many related products to return.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":60}],"returns":"{product_id, storefront, currency, returned, results[]}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"63eb5819af90c9111b845906"}},{"name":"merchant","description":"A Wish store's display name, average rating and rating count.","required_params":["merchant_id"],"optional_params":["market"],"params":[{"name":"merchant_id","type":"string","required":true,"description":"Wish merchant id, as returned by `search` (`merchant_id`) or `product` (`merchant.merchant_id`).","on_invalid":"reject","example":"631197b8ccdc7ca831b54df8","aliases":["id"]},{"name":"market","type":"enum","required":false,"description":"Storefront. Store data does not vary by market.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States — USD"},{"value":"GB","label":"United Kingdom — GBP"},{"value":"CN","label":"China — CNY (no list prices; see docs)"},{"value":"any","label":"Whichever storefront answers first — cheapest, currency varies"}],"default":"any","example":"any"}],"returns":"{merchant_id, name, rating, rating_count, store_url}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"merchant_id":"631197b8ccdc7ca831b54df8"}},{"name":"trending","description":"Wish's logged-out home feed — what the site puts in front of a new visitor in the chosen storefront.","required_params":[],"optional_params":["market","limit","offset"],"params":[{"name":"market","type":"enum","required":false,"description":"Storefront to price against.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States — USD"},{"value":"GB","label":"United Kingdom — GBP"},{"value":"CN","label":"China — CNY (no list prices; see docs)"},{"value":"any","label":"Whichever storefront answers first — cheapest, currency varies"}],"default":"US","example":"US"},{"name":"limit","type":"integer","required":false,"description":"How many products to return.","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":100},{"name":"offset","type":"integer","required":false,"description":"Where to start, for paging.","on_invalid":"reject","default":0,"example":0,"minimum":0,"maximum":500}],"returns":"{storefront, currency, returned, results[]}","cacheable":false,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"US"}}]},{"name":"wolt","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Wolt API — restaurants, Wolt Market and shops that deliver to a location, with delivery fee, delivery time, rating and opening status; every menu and grocery catalogue with price, discount, unit price, barcode and live stock; Wolt search across all venues. 30 countries, no account, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/wolt/v1","spec_available":true,"actions":[{"name":"venues","description":"Every venue Wolt lists for a delivery point: restaurants (type=restaurant) or shops (type=retail — Wolt Market dark stores, supermarkets, pharmacies, florists, electronics …). Location is required (lat+lon or a Wolt city slug) and echoed. Filter by product line (grocery, pharmacy …), by Wolt's own cuisine/category filter, price range and open-now; sort the way wolt.com sorts. Rows are paged from Wolt's complete list for that point.","required_params":[],"optional_params":["lat","lon","city","country","type","product_line","category","price_range","open_now","sort","page","limit"],"params":[{"name":"lat","type":"number","required":false,"description":"Delivery point latitude. Required together with `lon` unless `city` is given. Delivery fee, delivery time and which venues appear depend on this point.","on_invalid":"reject","example":60.1699,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Delivery point longitude. Required together with `lat` unless `city` is given.","on_invalid":"reject","example":24.9384,"minimum":-180,"maximum":180,"aliases":["longitude"]},{"name":"city","type":"string","required":false,"description":"Instead of lat/lon: a Wolt city slug (helsinki, berlin, warsaw, tel-aviv, almaty …; the `cities` action lists all). Resolved to Wolt's own city centre point, echoed in `location`.","on_invalid":"reject","example":"helsinki"},{"name":"country","type":"string","required":false,"description":"Only with `city`, when the same city slug exists in two countries (ISO 3166 alpha-2 or alpha-3).","on_invalid":"reject","example":"FI"},{"name":"type","type":"enum","required":false,"description":"Which Wolt list to read. Echoed in the response.","on_invalid":"reject","allowed_values":[{"value":"retail","label":"Shops: Wolt Market, supermarkets, pharmacies …"},{"value":"restaurant","label":"Restaurants"}],"default":"retail","example":"retail","aliases":["venue_type"]},{"name":"product_line","type":"enum","required":false,"description":"Keep only venues of this Wolt product line (type=retail: grocery, pharmacy, florist …).","on_invalid":"reject","allowed_values":[{"value":"restaurant","label":"restaurant"},{"value":"grocery","label":"grocery"},{"value":"pharmacy","label":"pharmacy"},{"value":"pet_supply","label":"pet supply"},{"value":"health_and_beauty","label":"health and beauty"},{"value":"electronics","label":"electronics"},{"value":"toys_games_and_kids","label":"toys games and kids"},{"value":"home_and_diy","label":"home and diy"},{"value":"florist","label":"florist"},{"value":"general_merchandise","label":"general merchandise"}],"example":"grocery"},{"name":"category","type":"string","required":false,"description":"Wolt's own venue filter value for that location (restaurants: pizza, sushi, burgers, vegan …; shops: grocery, pharmacy …). The response lists the values Wolt offers there; an unknown value is rejected with that list.","on_invalid":"reject","example":"pizza","aliases":["cuisine"]},{"name":"price_range","type":"integer","required":false,"description":"Wolt's price level (1 = €, 4 = €€€€).","on_invalid":"reject","example":1,"minimum":1,"maximum":4},{"name":"open_now","type":"boolean","required":false,"description":"true = only venues open now; false = only closed ones.","on_invalid":"reject","example":true},{"name":"sort","type":"enum","required":false,"description":"Row order — Wolt's own sort keys for each venue.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"Wolt's order"},{"value":"distance","label":"Nearest first"},{"value":"rating","label":"Best rated first"},{"value":"delivery_fee","label":"Cheapest delivery first"},{"value":"delivery_time","label":"Fastest delivery first"}],"default":"recommended","example":"distance"},{"name":"page","type":"integer","required":false,"description":"Page of the filtered list; meta.has_more says if there is another.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":200},{"name":"limit","type":"integer","required":false,"description":"Rows per page (1-100).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100}],"returns":"location{lat, lon, source, served, wolt_city, country}, type, venues[]: venue_id, slug, name, product_line, venue_kind (restaurant|store), is_wolt_market, address, country, currency, lat, lon, distance_m, open_now, delivers_to_location, delivery_fee_listed, delivery_fee_listed_text, delivery_estimate_min/max/text, rating_score (0-10), rating_count, price_range, tags[], categories[], promotions[], short_description, image, url. available_filters{category[], product_line[]}; meta: total, page, has_more.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"lat":60.1699,"lon":24.9384,"type":"retail","product_line":"grocery"}},{"name":"search","description":"Wolt's own search for a delivery point — the same results wolt.com shows. target=items searches products and dishes across every venue that delivers there (compare one product's price across shops), target=venues searches venues. Filter by product line, sort by distance, rating, delivery fee or delivery time. Wolt returns at most 200 items or 100 venues per search and publishes no further pages.","required_params":["query"],"optional_params":["lat","lon","city","country","target","product_line","sort","language"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, as typed on wolt.com.","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"lat","type":"number","required":false,"description":"Delivery point latitude. Required together with `lon` unless `city` is given. Delivery fee, delivery time and which venues appear depend on this point.","on_invalid":"reject","example":60.1699,"minimum":-90,"maximum":90,"aliases":["latitude"]},{"name":"lon","type":"number","required":false,"description":"Delivery point longitude. Required together with `lat` unless `city` is given.","on_invalid":"reject","example":24.9384,"minimum":-180,"maximum":180,"aliases":["longitude"]},{"name":"city","type":"string","required":false,"description":"Instead of lat/lon: a Wolt city slug (helsinki, berlin, warsaw, tel-aviv, almaty …; the `cities` action lists all). Resolved to Wolt's own city centre point, echoed in `location`.","on_invalid":"reject","example":"helsinki"},{"name":"country","type":"string","required":false,"description":"Only with `city`, when the same city slug exists in two countries (ISO 3166 alpha-2 or alpha-3).","on_invalid":"reject","example":"FI"},{"name":"target","type":"enum","required":false,"description":"What to search.","on_invalid":"reject","allowed_values":[{"value":"items","label":"Products and dishes across venues"},{"value":"venues","label":"Venues"}],"default":"items","example":"items"},{"name":"product_line","type":"enum","required":false,"description":"Wolt's own product-line filter (grocery = supermarket and Wolt Market products only).","on_invalid":"reject","allowed_values":[{"value":"restaurant","label":"restaurant"},{"value":"grocery","label":"grocery"},{"value":"pharmacy","label":"pharmacy"},{"value":"pet_supply","label":"pet supply"},{"value":"health_and_beauty","label":"health and beauty"},{"value":"electronics","label":"electronics"},{"value":"toys_games_and_kids","label":"toys games and kids"},{"value":"home_and_diy","label":"home and diy"},{"value":"florist","label":"florist"},{"value":"general_merchandise","label":"general merchandise"}],"example":"grocery"},{"name":"sort","type":"enum","required":false,"description":"Wolt's own search sort.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"Wolt's order"},{"value":"distance","label":"Nearest first"},{"value":"rating","label":"Best rated venue first"},{"value":"delivery_fee","label":"Cheapest delivery first"},{"value":"delivery_time","label":"Fastest delivery first"}],"default":"recommended","example":"recommended"},{"name":"language","type":"string","required":false,"description":"Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"location{…}, query, target, items[]: item_id, name, description, price, currency, price_type, sold_by_weight, available, image, product_line, venue_id, venue_slug, venue_name, venue_rating_score, delivery_fee_listed, delivery_estimate_text, url — or venues[] (same shape as the venues action). Pass item_id + venue_slug to `items`.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"milk","lat":60.1699,"lon":24.9384}},{"name":"venue","description":"One venue's record: name, brand, address, coordinates, phone, website, opening hours, delivery hours, base delivery fee, order minimum, service fee rule, bag fee, rating, price level, categories, payment methods, the legal seller (DSA trader block). With lat+lon also whether it is open now and the delivery estimate to that point.","required_params":["venue"],"optional_params":["lat","lon","language"],"params":[{"name":"venue","type":"string","required":true,"description":"Venue slug — a `venues`/`search` row's `slug` or `venue_slug`, as is — or a wolt.com venue URL.","on_invalid":"reject","example":"wolt-market-kamppi","aliases":["venue_slug","slug","url"]},{"name":"lat","type":"number","required":false,"description":"Optional delivery point latitude for the live open status and delivery estimate (with `lon`).","on_invalid":"reject","example":60.1699,"minimum":-90,"maximum":90},{"name":"lon","type":"number","required":false,"description":"Optional delivery point longitude (with `lat`).","on_invalid":"reject","example":24.9384,"minimum":-180,"maximum":180},{"name":"language","type":"string","required":false,"description":"Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"venue{venue_id, slug, name, brand, product_line, secondary_product_line, address, post_code, city, country, currency, timezone, lat, lon, phone, website, description, rating_score, rating_count, price_range, delivery_base_fee, order_minimum, service_fee{min, max, percentage, text}, bag_fee, delivery_methods[], opening_hours[], delivery_hours[], categories[], payment_methods[], seller{…}, url, live{open_now, status_text, next_open, next_close, delivery_estimate{min, max}, for_lat, for_lon}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"venue":"wolt-market-kamppi"}},{"name":"menu","description":"A venue's menu or product catalogue. Restaurants: the full menu with prices and option groups. Shops and Wolt Market (catalogue loaded per category): without `category` the category tree with item counts; with `category` that category's products — price, original price, discount, lowest price of the last 30 days, unit price, barcode (GTIN), live stock count, availability.","required_params":["venue"],"optional_params":["category","page_token","language"],"params":[{"name":"venue","type":"string","required":true,"description":"Venue slug — a `venues`/`search` row's `slug` or `venue_slug`, as is — or a wolt.com venue URL.","on_invalid":"reject","example":"wolt-market-kamppi","aliases":["venue_slug","slug","url"]},{"name":"category","type":"string","required":false,"description":"Category slug from this action's `categories` tree. Needed for shop catalogues (`loading: partial`); optional for restaurants (filters the full menu).","on_invalid":"reject","example":"apples-pears-55","aliases":["category_slug"]},{"name":"page_token","type":"string","required":false,"description":"`meta.next_page_token` of the previous call, as is, for the next page of a large category.","on_invalid":"reject","example":""},{"name":"language","type":"string","required":false,"description":"Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"venue{slug, currency, language, available_languages[], loading (full|partial), lowest_price_interval_days}, categories[]{category_id, slug, name, listed_items, subcategories[]}, items[]: item_id, name, description, price, original_price, discount_pct, discount_valid, lowest_price_30d, currency, unit_info, unit_price, unit_price_per, gtin, stock, available, unavailable_reason, sold_by_weight, price_per_kg, deposit, vat_pct, age_restricted, dietary[], tags[], images[], category_ids[], options[]{name, type, min_choices, max_choices, values[]{name, price}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"venue":"wolt-market-kamppi"}},{"name":"venue_search","description":"Search inside one venue's catalogue (the search box on a Wolt Market or supermarket page): every matching product with price, discount, unit price, barcode and stock.","required_params":["venue","query"],"optional_params":["language"],"params":[{"name":"venue","type":"string","required":true,"description":"Venue slug — a `venues`/`search` row's `slug` or `venue_slug`, as is — or a wolt.com venue URL.","on_invalid":"reject","example":"wolt-market-kamppi","aliases":["venue_slug","slug","url"]},{"name":"query","type":"string","required":true,"description":"Search words.","on_invalid":"reject","example":"milk","aliases":["q","keyword"]},{"name":"language","type":"string","required":false,"description":"Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"venue{slug, currency}, query, items[] (same shape as menu items).","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"venue":"wolt-market-kamppi","query":"coffee"}},{"name":"items","description":"Read products/dishes of one venue by item id — e.g. ids from `search` (item_id + venue_slug) or `menu`. Up to 50 ids in one call (Wolt's own multi-id read). Ids Wolt does not currently sell come back in `not_returned`.","required_params":["venue","item_ids"],"optional_params":["language"],"params":[{"name":"venue","type":"string","required":true,"description":"Venue slug — a `venues`/`search` row's `slug` or `venue_slug`, as is — or a wolt.com venue URL.","on_invalid":"reject","example":"wolt-market-kamppi","aliases":["venue_slug","slug","url"]},{"name":"item_ids","type":"array","required":true,"description":"Wolt item ids (24 hex characters), a list or comma-separated, max 50.","on_invalid":"reject","example":["4660b15711616001d9a48b39"],"aliases":["item_id","ids","id"]},{"name":"language","type":"string","required":false,"description":"Catalogue language. Wolt publishes the venue's own language and machine translations (see `available_languages`).","on_invalid":"reject","default":"en","example":"en","aliases":["lang"]}],"returns":"venue{slug, currency}, items[] (same shape as menu items), not_returned[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"venue":"wolt-market-kamppi","item_ids":["4660b15711616001d9a48b39"]}},{"name":"cities","description":"Every city Wolt operates in, with Wolt's city slug, country and centre coordinates — the values `city` accepts. Filter by country.","required_params":[],"optional_params":["country"],"params":[{"name":"country","type":"string","required":false,"description":"ISO 3166 alpha-2 or alpha-3 country code (FI, DE, PL, IL, KZ …).","on_invalid":"reject","example":"FI"}],"returns":"cities[]: city, name, country, country_iso3, lat, lon, timezone; countries{code: count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"country":"FI"}}]},{"name":"woolworths","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Woolworths API scraper — woolworths.com.au (Australia) supermarket and Everyday Market: search products, read the full product record with shelf price, was-price and special, cup (unit) price, multi-buy offers, per-kg and variable-weight pricing, availability, marketplace seller, ratings and reviews, ingredients, allergens and the nutrition panel; browse categories and the site's specials pages. Prices in AUD. No account, no browser.","version":"0.2.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/woolworths/v1","spec_available":true,"actions":[{"name":"search","description":"Search woolworths.com.au by keyword. Each product comes with its shelf price, was-price and discount when on special, the cup (unit) price, multi-buy offer, per-kg or variable-weight pricing, availability, star rating, badges, and the marketplace seller for Everyday Market items. Sort by price or name, keep only specials, filter by brand. Paid placements are removed unless you ask for them. Prices are woolworths.com.au's online prices (default fulfilment store 1101); for one store's price use product/detail with store_id.","required_params":["query"],"optional_params":["page","page_size","sort","specials_only","brand","include_sponsored","include_ratings","max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it on woolworths.com.au ('milk', 'tim tam', 'dog food').","on_invalid":"reject","example":"chocolate","aliases":["q","keyword","search"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Read `count`, `total_results` and `page_count`.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-36 (Woolworths' own maximum). Sponsored placements are on top of this and removed by default.","on_invalid":"ignore","default":24,"minimum":1,"maximum":36},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Woolworths' own relevance order (default)"},{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"name_asc","label":"Product name A to Z"},{"value":"name_desc","label":"Product name Z to A"}],"default":"relevance"},{"name":"specials_only","type":"boolean","required":false,"description":"true = the site's own 'Specials' toggle: products on a price special AND products with a Buy More Save More multi-buy offer (`multi_buy`). Unavailable products can appear with their price hidden.","on_invalid":"ignore","default":false},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled exactly as in a row's `brand` (case-sensitive: 'Cadbury' works, 'cadbury' returns nothing).","on_invalid":"reject","example":"Cadbury"},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid 'Promoted' placements, which Woolworths puts at fixed positions regardless of your sort; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"include_ratings","type":"boolean","required":false,"description":"true (default) adds each row's star rating and rating count (one extra lightweight lookup for the whole page).","on_invalid":"ignore","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (stockcode, string), title, name, brand, package_size, barcode (EAN/GTIN), url, image, breadcrumb[]{level,id,name}, price (number, AUD — the price woolworths.com.au charges online for an order fulfilled by the store in `store`; per kg when price_per='kg'; null when the product is unavailable), price_display, currency=AUD, original_price (the was-price, only when on special), original_price_display, savings, discount_percent, on_special, half_price, member_price (null — Woolworths published no member price to an anonymous visitor), member_unit_price_text, unit_price, unit_price_measure ('1L', '100G', '1KG', '1EA'), unit_price_text ('$1.65 / 1L'), sold_by ('piece' | 'weight'), price_per ('each' | 'kg'), increment_price, increment_grams, price_min, price_max, price_is_estimate (variable-weight packs), approx_weight_grams, multi_buy{quantity,total_price,price_each,unit_price_text,text} (never subtracted from price), availability ('in_stock' | 'unavailable' | 'not_ranged'), available, in_stock, next_available_date (only when the product cannot be bought now: the date Woolworths expects it back; null when in stock, and never a pick-up slot), max_order_quantity (the most units one order may hold now: the purchase limit, lowered to the store's own quantity when it holds fewer), max_order_quantity_source ('stock' | 'purchase_limit': which of the two set it), purchase_limit (Woolworths' per-product limit), instore_price (Woolworths' separate in-store price for the same store), instore_available, badges[]{type ('label'|'roundel'|'offer'),text,promotion}, promotion_types[], rewards_points_offer, new, online_only, marketplace, seller{type ('retailer'|'marketplace'),name,id,delivery_fee,free_shipping,dispatch_note,delivery_from,delivery_to}, has_variants, sponsored, fulfilment_store_id, rating (0-5), rating_count, review_count, rating_scale (5), rating_distribution{5,4,3,2,1}}, count, total_results, page, page_size, page_count, sponsored_dropped, filters_available{departments[]{id,name,count}, brands[]{name,value,count}}, suggested_query, corrections[], related_terms[], query","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"milk"}},{"name":"product/detail","description":"The full Woolworths product record by stockcode (or product URL): title, brand, barcode, every image, shelf price, was-price and savings, cup price, multi-buy offer, per-kg or variable-weight pricing, availability, star rating with distribution, ingredients, allergens (contains / may contain / free from), dietary claims, Health Star Rating, the nutrition panel, the country-of-origin label, storage and warnings, product specs, variants (Everyday Market) and the seller. Add store_id (or postcode / suburb) for that store's shelf price and whether it stocks the product.","required_params":["product_id"],"optional_params":["store_id","postcode","suburb","state","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Woolworths stockcode (the number every row returns as `product_id`) or a woolworths.com.au product URL.","on_invalid":"reject","example":"888140","aliases":["id","stockcode","url"]},{"name":"store_id","type":"string","required":false,"description":"This product's price and availability at one Woolworths supermarket: its store number from the `stores` action (e.g. '3304' = Woolworths QV, Melbourne). Prices differ by store (Metro stores are often 10-20 % dearer, Tasmania and the NT dearer on some lines, and some specials do not run everywhere). Leave empty for woolworths.com.au's online price. A product the store does not carry comes back with price null and availability 'not_ranged'. The store applied is in `store`.","on_invalid":"reject","example":"3304","aliases":["store"]},{"name":"postcode","type":"string","required":false,"description":"Instead of store_id: a 4-digit Australian postcode. The nearest Woolworths supermarket to it is used and returned in `store`.","on_invalid":"reject","example":"6000"},{"name":"suburb","type":"string","required":false,"description":"Instead of store_id: a suburb or town name; the nearest Woolworths supermarket is used. Add `state` when the name exists in several states.","on_invalid":"reject","example":"Subiaco"},{"name":"state","type":"enum","required":false,"description":"Only with suburb: the state, to tell apart suburbs with the same name.","on_invalid":"reject","allowed_values":[{"value":"NSW","label":"NSW"},{"value":"VIC","label":"VIC"},{"value":"QLD","label":"QLD"},{"value":"WA","label":"WA"},{"value":"SA","label":"SA"},{"value":"TAS","label":"TAS"},{"value":"ACT","label":"ACT"},{"value":"NT","label":"NT"}]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"product{product_id (stockcode, string), title, name, brand, package_size, barcode (EAN/GTIN), url, image, breadcrumb[]{level,id,name}, price (number, AUD — the price woolworths.com.au charges online for an order fulfilled by the store in `store`; per kg when price_per='kg'; null when the product is unavailable), price_display, currency=AUD, original_price (the was-price, only when on special), original_price_display, savings, discount_percent, on_special, half_price, member_price (null — Woolworths published no member price to an anonymous visitor), member_unit_price_text, unit_price, unit_price_measure ('1L', '100G', '1KG', '1EA'), unit_price_text ('$1.65 / 1L'), sold_by ('piece' | 'weight'), price_per ('each' | 'kg'), increment_price, increment_grams, price_min, price_max, price_is_estimate (variable-weight packs), approx_weight_grams, multi_buy{quantity,total_price,price_each,unit_price_text,text} (never subtracted from price), availability ('in_stock' | 'unavailable' | 'not_ranged'), available, in_stock, next_available_date (only when the product cannot be bought now: the date Woolworths expects it back; null when in stock, and never a pick-up slot), max_order_quantity (the most units one order may hold now: the purchase limit, lowered to the store's own quantity when it holds fewer), max_order_quantity_source ('stock' | 'purchase_limit': which of the two set it), purchase_limit (Woolworths' per-product limit), instore_price (Woolworths' separate in-store price for the same store), instore_available, badges[]{type ('label'|'roundel'|'offer'),text,promotion}, promotion_types[], rewards_points_offer, new, online_only, marketplace, seller{type ('retailer'|'marketplace'),name,id,delivery_fee,free_shipping,dispatch_note,delivery_from,delivery_to}, has_variants, sponsored, fulfilment_store_id, rating (0-5), rating_count, review_count, rating_scale (5), rating_distribution{5,4,3,2,1}, images[], primary_aisle{department,aisle}, description, ingredients, allergens{contains[],may_contain[],free_from[]}, dietary[], health_star_rating, storage_instructions, directions, warnings, country_of_origin{label,country,australian_ingredients_percent}, nutrition{serving_size,servings_per_pack,rows[]{name,per_serving,per_100}}, specs{label: value}, variants[]{product_id,title,options,price,original_price,in_stock,available,primary,image}, variant_options[]{name,values[]}, variant_title, bundle_groups[]}, store{store_id, name, address, suburb, state, postcode, distance_km, chosen_by ('default' | 'store_id' | 'postcode' | 'suburb'), near{}} (the store this price is for, as confirmed by Woolworths), product.ranged_at_store (with a store: false = that store does not carry it)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"36066","store_id":"3304"}},{"name":"product/reviews","description":"Customer reviews shown on a Woolworths product page, paged, newest first: star rating, text, reviewer nickname, date, and the source (including reviews syndicated from partner retailers), plus the product's rating summary.","required_params":["product_id"],"optional_params":["page","page_size","sort","max_rotations"],"params":[{"name":"product_id","type":"string","required":true,"description":"Woolworths stockcode (the number every row returns as `product_id`) or a woolworths.com.au product URL.","on_invalid":"reject","example":"888140","aliases":["id","stockcode","url"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Read `count`, `total_results` and `page_count`.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page, 1-50.","on_invalid":"ignore","default":10,"minimum":1,"maximum":50},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"latest","label":"Newest reviews first (default)"},{"value":"highest_rating","label":"Highest star rating first"},{"value":"lowest_rating","label":"Lowest star rating first"}],"default":"latest"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"reviews[]{rating,text,author,date,source,syndicated_from}, total_reviews, page, page_size, has_more, rating, rating_count, review_count, rating_scale, rating_distribution, product_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"36066"}},{"name":"deals","description":"woolworths.com.au's own specials pages: Half Price, Lower Shelf Price, Buy More Save More, Everyday Low Price and Seasonal Price — optionally for one department. Same rows, sorting and brand filter as search. Prices are woolworths.com.au's online prices (default fulfilment store 1101); for one store's price use product/detail with store_id.","required_params":[],"optional_params":["type","department","page","page_size","sort","brand","include_sponsored","include_ratings","max_rotations"],"params":[{"name":"type","type":"enum","required":false,"description":"Which of woolworths.com.au's own specials pages to read.","on_invalid":"reject","allowed_values":[{"value":"half_price","label":"Half Price specials"},{"value":"lower_shelf_price","label":"Lower Shelf Price"},{"value":"buy_more_save_more","label":"Buy More Save More (multi-buy offers)"},{"value":"everyday_low_price","label":"Everyday Low Price"},{"value":"seasonal_price","label":"Seasonal Price"}],"default":"half_price"},{"name":"department","type":"string","required":false,"description":"Optional: only this department's deals — a top-level category id from `categories` (e.g. '1_717445A' Snacks & Confectionery).","on_invalid":"reject","example":"1_717445A"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Read `count`, `total_results` and `page_count`.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-36 (Woolworths' own maximum). Sponsored placements are on top of this and removed by default.","on_invalid":"ignore","default":24,"minimum":1,"maximum":36},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Woolworths' own relevance order (default)"},{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"name_asc","label":"Product name A to Z"},{"value":"name_desc","label":"Product name Z to A"}],"default":"relevance"},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled exactly as in a row's `brand` (case-sensitive: 'Cadbury' works, 'cadbury' returns nothing).","on_invalid":"reject","example":"Cadbury"},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid 'Promoted' placements, which Woolworths puts at fixed positions regardless of your sort; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"include_ratings","type":"boolean","required":false,"description":"true (default) adds each row's star rating and rating count (one extra lightweight lookup for the whole page).","on_invalid":"ignore","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (stockcode, string), title, name, brand, package_size, barcode (EAN/GTIN), url, image, breadcrumb[]{level,id,name}, price (number, AUD — the price woolworths.com.au charges online for an order fulfilled by the store in `store`; per kg when price_per='kg'; null when the product is unavailable), price_display, currency=AUD, original_price (the was-price, only when on special), original_price_display, savings, discount_percent, on_special, half_price, member_price (null — Woolworths published no member price to an anonymous visitor), member_unit_price_text, unit_price, unit_price_measure ('1L', '100G', '1KG', '1EA'), unit_price_text ('$1.65 / 1L'), sold_by ('piece' | 'weight'), price_per ('each' | 'kg'), increment_price, increment_grams, price_min, price_max, price_is_estimate (variable-weight packs), approx_weight_grams, multi_buy{quantity,total_price,price_each,unit_price_text,text} (never subtracted from price), availability ('in_stock' | 'unavailable' | 'not_ranged'), available, in_stock, next_available_date (only when the product cannot be bought now: the date Woolworths expects it back; null when in stock, and never a pick-up slot), max_order_quantity (the most units one order may hold now: the purchase limit, lowered to the store's own quantity when it holds fewer), max_order_quantity_source ('stock' | 'purchase_limit': which of the two set it), purchase_limit (Woolworths' per-product limit), instore_price (Woolworths' separate in-store price for the same store), instore_available, badges[]{type ('label'|'roundel'|'offer'),text,promotion}, promotion_types[], rewards_points_offer, new, online_only, marketplace, seller{type ('retailer'|'marketplace'),name,id,delivery_fee,free_shipping,dispatch_note,delivery_from,delivery_to}, has_variants, sponsored, fulfilment_store_id, rating (0-5), rating_count, review_count, rating_scale (5), rating_distribution{5,4,3,2,1}}, count, total_results, page, page_size, page_count, sponsored_dropped, filters_available{departments[]{id,name,count}, brands[]{name,value,count}}, type, department","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"type":"half_price"}},{"name":"category","description":"Every product in one Woolworths category (any level of the aisle tree), paged, with the same rows, sorting, specials toggle and brand filter as search, plus the category's brand list with counts. Prices are woolworths.com.au's online prices (default fulfilment store 1101); for one store's price use product/detail with store_id.","required_params":["category"],"optional_params":["page","page_size","sort","specials_only","brand","include_sponsored","include_ratings","max_rotations"],"params":[{"name":"category","type":"string","required":true,"description":"A category: its id from `categories` (e.g. '1_6E4F4E4' Dairy, Eggs & Fridge, '1_B7EF010' Cheese) or its woolworths.com.au /shop/browse/… URL.","on_invalid":"reject","example":"1_6E4F4E4","aliases":["category_id","url","path"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Read `count`, `total_results` and `page_count`.","on_invalid":"ignore","default":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Products per page, 1-36 (Woolworths' own maximum). Sponsored placements are on top of this and removed by default.","on_invalid":"ignore","default":24,"minimum":1,"maximum":36},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Woolworths' own relevance order (default)"},{"value":"price_asc","label":"Lowest shelf price first"},{"value":"price_desc","label":"Highest shelf price first"},{"value":"name_asc","label":"Product name A to Z"},{"value":"name_desc","label":"Product name Z to A"}],"default":"relevance"},{"name":"specials_only","type":"boolean","required":false,"description":"true = the site's own 'Specials' toggle: products on a price special AND products with a Buy More Save More multi-buy offer (`multi_buy`). Unavailable products can appear with their price hidden.","on_invalid":"ignore","default":false},{"name":"brand","type":"string","required":false,"description":"Only this brand, spelled exactly as in a row's `brand` (case-sensitive: 'Cadbury' works, 'cadbury' returns nothing).","on_invalid":"reject","example":"Cadbury"},{"name":"include_sponsored","type":"boolean","required":false,"description":"false (default) drops paid 'Promoted' placements, which Woolworths puts at fixed positions regardless of your sort; true keeps them, flagged `sponsored: true`.","on_invalid":"ignore","default":false},{"name":"include_ratings","type":"boolean","required":false,"description":"true (default) adds each row's star rating and rating count (one extra lightweight lookup for the whole page).","on_invalid":"ignore","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"results[]{product_id (stockcode, string), title, name, brand, package_size, barcode (EAN/GTIN), url, image, breadcrumb[]{level,id,name}, price (number, AUD — the price woolworths.com.au charges online for an order fulfilled by the store in `store`; per kg when price_per='kg'; null when the product is unavailable), price_display, currency=AUD, original_price (the was-price, only when on special), original_price_display, savings, discount_percent, on_special, half_price, member_price (null — Woolworths published no member price to an anonymous visitor), member_unit_price_text, unit_price, unit_price_measure ('1L', '100G', '1KG', '1EA'), unit_price_text ('$1.65 / 1L'), sold_by ('piece' | 'weight'), price_per ('each' | 'kg'), increment_price, increment_grams, price_min, price_max, price_is_estimate (variable-weight packs), approx_weight_grams, multi_buy{quantity,total_price,price_each,unit_price_text,text} (never subtracted from price), availability ('in_stock' | 'unavailable' | 'not_ranged'), available, in_stock, next_available_date (only when the product cannot be bought now: the date Woolworths expects it back; null when in stock, and never a pick-up slot), max_order_quantity (the most units one order may hold now: the purchase limit, lowered to the store's own quantity when it holds fewer), max_order_quantity_source ('stock' | 'purchase_limit': which of the two set it), purchase_limit (Woolworths' per-product limit), instore_price (Woolworths' separate in-store price for the same store), instore_available, badges[]{type ('label'|'roundel'|'offer'),text,promotion}, promotion_types[], rewards_points_offer, new, online_only, marketplace, seller{type ('retailer'|'marketplace'),name,id,delivery_fee,free_shipping,dispatch_note,delivery_from,delivery_to}, has_variants, sponsored, fulfilment_store_id, rating (0-5), rating_count, review_count, rating_scale (5), rating_distribution{5,4,3,2,1}}, count, total_results, page, page_size, page_count, sponsored_dropped, filters_available{departments[]{id,name,count}, brands[]{name,value,count}}, category{id,name,url,parents[]}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"1_6E4F4E4"}},{"name":"categories","description":"Woolworths' aisle tree: departments, categories and sub-categories with their ids and URLs, including the Specials groups and the Everyday Market departments.","required_params":[],"optional_params":["depth","max_rotations"],"params":[{"name":"depth","type":"integer","required":false,"description":"How many levels of the category tree to return (1-5, default 2).","on_invalid":"ignore","default":2,"minimum":1,"maximum":5},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"categories[]{id, name, slug, url, is_special, child_count, children[]}, count, depth","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{}},{"name":"suggest","description":"Search-box autocomplete as a Woolworths shopper types.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for, as a shopper would type it on woolworths.com.au ('milk', 'tim tam', 'dog food').","on_invalid":"reject","example":"chocolate","aliases":["q","keyword","search"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"suggestions[], auto_corrected_query, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"milk"}},{"name":"stores","description":"Woolworths supermarkets (including Metro stores) near a postcode or suburb, closest first, with store number, address, coordinates, distance, phone and facilities. Pass a store number as `store_id` to product/detail for that store's price.","required_params":[],"optional_params":["postcode","suburb","state","limit","max_rotations"],"params":[{"name":"postcode","type":"string","required":false,"description":"A 4-digit Australian postcode: Woolworths supermarkets nearest to it, closest first.","on_invalid":"reject","example":"3000"},{"name":"suburb","type":"string","required":false,"description":"Or a suburb / town name instead of a postcode. Add `state` when the name exists in several states.","on_invalid":"reject","example":"Alice Springs"},{"name":"state","type":"enum","required":false,"description":"Only with suburb: the state, to tell apart suburbs with the same name.","on_invalid":"reject","allowed_values":[{"value":"NSW","label":"NSW"},{"value":"VIC","label":"VIC"},{"value":"QLD","label":"QLD"},{"value":"WA","label":"WA"},{"value":"SA","label":"SA"},{"value":"TAS","label":"TAS"},{"value":"ACT","label":"ACT"},{"value":"NT","label":"NT"}]},{"name":"limit","type":"integer","required":false,"description":"How many stores to return, closest first (1-50, default 10).","on_invalid":"ignore","default":10,"minimum":1,"maximum":50},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-6, default 3).","on_invalid":"ignore","default":3,"minimum":1,"maximum":6}],"returns":"stores[]{store_id, name, division, address, suburb, state, postcode, latitude, longitude, phone, distance_km, facilities[]}, count, near{suburb, state, postcode}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"postcode":"3000"}}]},{"name":"worldbank","category":{"id":"finance","title":"Finance & Data"},"title":"World Bank Data API — economic & development indicators (GDP, inflation, population, unemployment) by country and year, multi-country compare, country metadata, indicator search, browse-by-topic and one-call country profiles","version":"1.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/worldbank/v1","spec_available":true,"actions":[{"name":"indicator","description":"time-series for one+ indicators (code or shortcut) across one+ countries/all; date/mrv/mrnev, rank","required_params":["country","indicator"],"optional_params":["date","mrv","mrnev","drop_nulls","rank","per_page","max_pages","frequency","gapfill"],"params":[{"name":"country","type":"string","required":true,"description":"One or more economy codes, separated by ; , or space, or 'all' for every economy. Accepts: ISO 2-letter ('US', 'TR') or 3-letter ('USA', 'CHN') country codes; pass several for a multi-country compare ('US;CN;DE'). World Bank AGGREGATE codes also work as a 'country' here — e.g. WLD (World), EUU (European Union), EMU (Euro area), and income groups HIC/UMC/LMC/LIC, regions ECS/SAS/SSF — to get region/income-group totals. Discover codes via action=country / reference (kind=regions|income_levels).","on_invalid":"reject","example":"US","aliases":["countries","countrycode"]},{"name":"indicator","type":"string","required":true,"description":"One or more World Bank indicator codes OR friendly shortcut aliases (e.g. 'gdp', 'inflation'), separated by ; , or space. Real codes are case-sensitive; shortcut aliases are not. See action=shortcuts.","on_invalid":"reject","example":"NY.GDP.MKTP.CD","aliases":["indicator_code","indicators","code"]},{"name":"date","type":"string","required":false,"description":"Year or year range (e.g. '2020' or '2015:2022'). Omit for all years; combine with mrv/mrnev for recent-values windows instead.","on_invalid":"ignore","example":"2015:2022","aliases":["date_range"]},{"name":"mrv","type":"integer","required":false,"description":"Most-Recent-Values: return only the latest N data points per series.","on_invalid":"ignore","example":5,"minimum":1,"maximum":500},{"name":"mrnev","type":"integer","required":false,"description":"Most-Recent-Non-Empty-Values: latest N NON-null data points per series.","on_invalid":"ignore","example":5,"minimum":1,"maximum":500},{"name":"drop_nulls","type":"boolean","required":false,"description":"Drop observations whose value is null from each series.","on_invalid":"ignore","default":false,"example":true},{"name":"rank","type":"boolean","required":false,"description":"Rank countries by latest value (only when a SINGLE indicator is queried); adds a 'rank' field to each series.","on_invalid":"ignore","default":false,"example":true},{"name":"per_page","type":"integer","required":false,"description":"World Bank API page size for paging through observations.","on_invalid":"ignore","default":1000,"example":1000,"minimum":1,"maximum":20000},{"name":"max_pages","type":"integer","required":false,"description":"Maximum number of observation pages to fetch (caps very large pulls).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50},{"name":"frequency","type":"enum","required":false,"description":"Data frequency for indicators that publish sub-annual series (most WDI indicators are yearly).","on_invalid":"reject","allowed_values":[{"value":"Y","label":"Yearly (default for most indicators)"},{"value":"Q","label":"Quarterly"},{"value":"M","label":"Monthly"}],"example":"Y"},{"name":"gapfill","type":"boolean","required":false,"description":"Carry the last observed value forward to fill gaps (used with mrv).","on_invalid":"ignore","default":false,"example":true}],"returns":"data[] one series per (indicator,country) with series[].{date,value}, latest_value, observations (+ rank when ranked); indicators[], countries[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"US","indicator":"NY.GDP.MKTP.CD","date":"2015:2022"}},{"name":"country","description":"country metadata for codes/all or filtered by region/income_level/lending_type","required_params":["country"],"optional_params":["region","income_level","lending_type","exclude_aggregates","all"],"params":[{"name":"country","type":"string","required":true,"description":"One or more economy codes, separated by ; , or space, or 'all' for every economy. Accepts: ISO 2-letter ('US', 'TR') or 3-letter ('USA', 'CHN') country codes; pass several for a multi-country compare ('US;CN;DE'). World Bank AGGREGATE codes also work as a 'country' here — e.g. WLD (World), EUU (European Union), EMU (Euro area), and income groups HIC/UMC/LMC/LIC, regions ECS/SAS/SSF — to get region/income-group totals. Discover codes via action=country / reference (kind=regions|income_levels).","on_invalid":"reject","example":"US","aliases":["countries","countrycode"]},{"name":"region","type":"string","required":false,"description":"Filter countries by region (matches a region id like 'ECS' or its name); forces an all-countries scan. See reference kind=regions.","on_invalid":"reject","example":"Europe & Central Asia"},{"name":"income_level","type":"string","required":false,"description":"Filter countries by income group (id like 'HIC'/'LIC' or its name); forces an all-countries scan. See reference kind=income_levels.","on_invalid":"reject","example":"HIC","aliases":["income"]},{"name":"lending_type","type":"string","required":false,"description":"Filter countries by lending type (id like 'IBRD'/'IDA' or its name); forces an all-countries scan. See reference kind=lending_types.","on_invalid":"reject","example":"IBRD"},{"name":"exclude_aggregates","type":"boolean","required":false,"description":"Drop World Bank aggregate rows (regions/income groups/WLD) and keep only real economies.","on_invalid":"ignore","default":false,"example":true},{"name":"all","type":"boolean","required":false,"description":"Return metadata for every economy (equivalent to country='all').","on_invalid":"ignore","default":false,"example":true}],"returns":"countries[] with region/income_level/lending_type/capital/lat-long, count (+ filters echo when filtered)","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"US"}},{"name":"search_indicators","description":"local keyword search over the indicator catalog (WDI default; full=all sources)","required_params":["query"],"optional_params":["source","full","topic","limit"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword(s) to match against indicator id + name (all terms must match, case-insensitive).","on_invalid":"reject","example":"gdp growth","aliases":["q","search"]},{"name":"source","type":"string","required":false,"description":"World Bank source/database id to search (default 2 = World Development Indicators). Ignored when full=true.","on_invalid":"ignore","default":"2","example":"2"},{"name":"full","type":"boolean","required":false,"description":"Search the FULL cross-source indicator catalog instead of just WDI.","on_invalid":"ignore","default":false,"example":true},{"name":"topic","type":"string","required":false,"description":"Optional topic filter (matches a topic id or name) layered on top of the keyword search.","on_invalid":"reject","example":"health"},{"name":"limit","type":"integer","required":false,"description":"Maximum number of matching indicators to return.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":500}],"returns":"results[] {id,name,unit,source,topics}, count (total matches), returned, scope","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"gdp growth"}},{"name":"indicator_metadata","description":"definition/source/organization/topics for one+ indicator codes/aliases","required_params":["indicator"],"optional_params":[],"params":[{"name":"indicator","type":"string","required":true,"description":"One or more World Bank indicator codes OR friendly shortcut aliases (e.g. 'gdp', 'inflation'), separated by ; , or space. Real codes are case-sensitive; shortcut aliases are not. See action=shortcuts.","on_invalid":"reject","example":"NY.GDP.MKTP.CD","aliases":["indicator_code","indicators","code"]}],"returns":"indicators[] {id,name,source,source_note,source_organization,topics}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"indicator":"gdp"}},{"name":"country_profile","description":"one-call headline snapshot (most-recent ~10 key metrics) for one+ countries","required_params":["country"],"optional_params":["metrics"],"params":[{"name":"country","type":"string","required":true,"description":"One or more economy codes, separated by ; , or space, or 'all' for every economy. Accepts: ISO 2-letter ('US', 'TR') or 3-letter ('USA', 'CHN') country codes; pass several for a multi-country compare ('US;CN;DE'). World Bank AGGREGATE codes also work as a 'country' here — e.g. WLD (World), EUU (European Union), EMU (Euro area), and income groups HIC/UMC/LMC/LIC, regions ECS/SAS/SSF — to get region/income-group totals. Discover codes via action=country / reference (kind=regions|income_levels).","on_invalid":"reject","example":"US","aliases":["countries","countrycode"]},{"name":"metrics","type":"string","required":false,"description":"Optional comma/semicolon list of shortcut keys or indicator codes to include in the profile. Omit for the default ~10-metric headline set.","on_invalid":"reject","example":"gdp,inflation,population"}],"returns":"profiles[] {country,region,income_level,indicators{metric:{value,date,unit}}}, count, metrics[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"country":"FR"}},{"name":"shortcuts","description":"list the metric->indicator-code map, or metric=<key>&country=<code> to fetch directly","required_params":[],"optional_params":["metric","country","date","mrv","mrnev"],"params":[{"name":"metric","type":"enum","required":false,"description":"A friendly metric key to fetch directly. Omit to LIST the full metric→indicator-code map instead.","on_invalid":"reject","allowed_values":[{"value":"gdp","label":"GDP (current US$) (NY.GDP.MKTP.CD)"},{"value":"gdp_per_capita","label":"GDP per capita (current US$) (NY.GDP.PCAP.CD)"},{"value":"gdp_growth","label":"GDP growth (annual %) (NY.GDP.MKTP.KD.ZG)"},{"value":"gni_per_capita","label":"GNI per capita, Atlas method (current US$) (NY.GNP.PCAP.CD)"},{"value":"inflation","label":"Inflation, consumer prices (annual %) (FP.CPI.TOTL.ZG)"},{"value":"population","label":"Population, total (SP.POP.TOTL)"},{"value":"population_growth","label":"Population growth (annual %) (SP.POP.GROW)"},{"value":"unemployment","label":"Unemployment, total (% of total labor force, ILO) (SL.UEM.TOTL.ZS)"},{"value":"labor_force","label":"Labor force, total (SL.TLF.TOTL.IN)"},{"value":"life_expectancy","label":"Life expectancy at birth, total (years) (SP.DYN.LE00.IN)"},{"value":"poverty","label":"Poverty headcount ratio at $3.00/day (2021 PPP) (%) (SI.POV.DDAY)"},{"value":"exports","label":"Exports of goods and services (current US$) (NE.EXP.GNFS.CD)"},{"value":"imports","label":"Imports of goods and services (current US$) (NE.IMP.GNFS.CD)"},{"value":"fdi","label":"Foreign direct investment, net inflows (current US$) (BX.KLT.DINV.CD.WD)"},{"value":"exchange_rate","label":"Official exchange rate (LCU per US$, period average) (PA.NUS.FCRF)"},{"value":"real_interest_rate","label":"Real interest rate (%) (FR.INR.RINR)"},{"value":"gov_debt","label":"Central government debt, total (% of GDP) (GC.DOD.TOTL.GD.ZS)"},{"value":"co2_per_capita","label":"CO2 emissions excluding LULUCF per capita (t CO2e) (EN.GHG.CO2.PC.CE.AR5)"},{"value":"electricity_access","label":"Access to electricity (% of population) (EG.ELC.ACCS.ZS)"},{"value":"internet_users","label":"Individuals using the Internet (% of population) (IT.NET.USER.ZS)"},{"value":"mobile_subs","label":"Mobile cellular subscriptions (per 100 people) (IT.CEL.SETS.P2)"},{"value":"health_exp_gdp","label":"Current health expenditure (% of GDP) (SH.XPD.CHEX.GD.ZS)"},{"value":"military_exp_gdp","label":"Military expenditure (% of GDP) (MS.MIL.XPND.GD.ZS)"},{"value":"tax_revenue_gdp","label":"Tax revenue (% of GDP) (GC.TAX.TOTL.GD.ZS)"},{"value":"current_account","label":"Current account balance (current US$) (BN.CAB.XOKA.CD)"},{"value":"gross_savings_gdp","label":"Gross savings (% of GDP) (NY.GNS.ICTR.ZS)"},{"value":"agriculture_gdp","label":"Agriculture, forestry & fishing, value added (% GDP) (NV.AGR.TOTL.ZS)"},{"value":"industry_gdp","label":"Industry (incl. construction), value added (% GDP) (NV.IND.TOTL.ZS)"},{"value":"services_gdp","label":"Services, value added (% of GDP) (NV.SRV.TOTL.ZS)"},{"value":"urban_population_pct","label":"Urban population (% of total population) (SP.URB.TOTL.IN.ZS)"},{"value":"trade_gdp","label":"Trade (% of GDP) (NE.TRD.GNFS.ZS)"}],"example":"gdp","aliases":["shortcut"]},{"name":"country","type":"string","required":false,"description":"One or more economy codes, separated by ; , or space, or 'all' for every economy. Accepts: ISO 2-letter ('US', 'TR') or 3-letter ('USA', 'CHN') country codes; pass several for a multi-country compare ('US;CN;DE'). World Bank AGGREGATE codes also work as a 'country' here — e.g. WLD (World), EUU (European Union), EMU (Euro area), and income groups HIC/UMC/LMC/LIC, regions ECS/SAS/SSF — to get region/income-group totals. Discover codes via action=country / reference (kind=regions|income_levels).","on_invalid":"reject","example":"US","aliases":["countries","countrycode"]},{"name":"date","type":"string","required":false,"description":"Year or year range (e.g. '2020' or '2015:2022'). Omit for all years; combine with mrv/mrnev for recent-values windows instead.","on_invalid":"ignore","example":"2015:2022","aliases":["date_range"]},{"name":"mrv","type":"integer","required":false,"description":"Most-Recent-Values: return only the latest N data points per series.","on_invalid":"ignore","example":5,"minimum":1,"maximum":500},{"name":"mrnev","type":"integer","required":false,"description":"Most-Recent-Non-Empty-Values: latest N NON-null data points per series.","on_invalid":"ignore","example":5,"minimum":1,"maximum":500}],"returns":"shortcuts{key:{code,name,unit}} + count when listing; OR the indicator time-series (data[]) when metric=<key>&country=<code>","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"metric":"gdp"}},{"name":"reference","description":"reference lists: regions | income_levels | lending_types | sources | topics","required_params":["kind"],"optional_params":[],"params":[{"name":"kind","type":"enum","required":true,"description":"Which reference list to return.","on_invalid":"reject","allowed_values":[{"value":"regions","label":"World Bank regions"},{"value":"income_levels","label":"Income-level groups"},{"value":"lending_types","label":"Lending-type groups"},{"value":"sources","label":"Data sources/collections"},{"value":"topics","label":"Indicator topics"},{"value":"region","label":"alias of regions"},{"value":"income_level","label":"alias of income_levels"},{"value":"income","label":"alias of income_levels"},{"value":"incomelevel","label":"alias of income_levels"},{"value":"lending_type","label":"alias of lending_types"},{"value":"lendingtype","label":"alias of lending_types"},{"value":"lending","label":"alias of lending_types"},{"value":"source","label":"alias of sources"},{"value":"topic","label":"alias of topics"}],"example":"income_levels","aliases":["type"]}],"returns":"kind, items[] (shape depends on kind: regions/income_levels/lending_types/sources/topics), count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"kind":"income_levels"}},{"name":"topic_indicators","description":"browse every indicator in a World Bank topic (Health, Economy, Climate, etc.) by topic id or name; optional keyword filter","required_params":["topic"],"optional_params":["query","limit","per_page","max_pages"],"params":[{"name":"topic","type":"string","required":true,"description":"A World Bank topic, as its numeric id ('8') OR its name ('health', 'economy', 'climate'). The 21 topics include Agriculture & Rural Development, Economy & Growth, Education, Energy & Mining, Environment, Financial Sector, Health, Infrastructure, Poverty, Public Sector, Science & Technology, Social Protection & Labor, Trade, Urban Development, Gender, Climate Change. List ids/names via action=reference (kind=topics).","on_invalid":"reject","example":"health","aliases":["topic_id","kind"]},{"name":"query","type":"string","required":false,"description":"Optional keyword(s) to narrow the topic's indicator list locally (all terms must match the indicator id or name, case-insensitive). Omit to list every indicator in the topic.","on_invalid":"reject","example":"immunization","aliases":["q"]},{"name":"limit","type":"integer","required":false,"description":"Maximum number of matching indicators to return.","on_invalid":"ignore","default":50,"example":50,"minimum":1,"maximum":500},{"name":"per_page","type":"integer","required":false,"description":"World Bank API page size for paging through observations.","on_invalid":"ignore","default":1000,"example":1000,"minimum":1,"maximum":20000},{"name":"max_pages","type":"integer","required":false,"description":"Maximum number of observation pages to fetch (caps very large pulls).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":50}],"returns":"topic_id, topic, count (total in topic), returned, results[] {id,name,unit,source,topics}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"topic":"health","limit":25}}]},{"name":"worldofbooks","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"World of Books API — live data from wob.com / worldofbooks.com, the UK's largest second-hand bookseller (Coventry; over 100 million books rehomed, ships to 66 countries). Search roughly 8 million used and new books by keyword, ISBN, author, publisher, category, binding, language, publication year, price and condition, then open one edition for every physical COPY on the shelf: World of Books' own grade (New, Like New, Very Good, Good, Well Read), its own price, which warehouse it sits in and whether it can be bought right now. ISBN-10 and ISBN-13 are first-class keys, and up to 20 ISBNs can be looked up in a single call. Two storefronts with separate catalogues and currencies: United Kingdom (GBP) and United States (USD). No login, no API key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/worldofbooks/v1","spec_available":true,"actions":[{"name":"search","description":"Search the World of Books catalogue of one storefront. Free text over title, author, publisher and both ISBNs, plus filters on author, publisher, the store's own three-level category tree, cosmetic condition, binding, language, product type, publication year, price and stock depth, and four sort orders. One row per EDITION (one barcode) carrying the identifiers a book buyer actually keys on — ISBN-13 AND ISBN-10 as separate fields — plus the author, publisher, publication year, binding, language, the full category path, the cheapest live price in that storefront's currency, the list price, which of the five conditions are in stock, a real unit count and the store's own sales rank. Every filter offered here was measured against an unfiltered call in the same run and really changes the result; filters the source accepts and then ignores are not exposed, and the engine re-checks the returned rows against the filter you asked for and reports any disagreement in meta.warnings instead of letting it pass. The result window is 1,000 records per query and the engine says so rather than looping past it.","required_params":["market"],"optional_params":["query","author","publisher","category","condition","format","language","product_type","year_min","year_max","min_price","max_price","min_stock","sort","page","per_page"],"params":[{"name":"market","type":"enum","required":true,"description":"Which World of Books storefront to read. This is NOT a language switch: the two storefronts are two separate catalogues with their own prices, their own stock and their own editions. Measured on 2026-10-08 for ISBN 9781408855652, the UK store published GBP 3.70 over 1,855 units while the US store published USD 3.48 over 875, and a keyword search for 'harry potter' returned the UK 'Philosopher's Stone' on one and the US 'Sorcerer's Stone' on the other. These are the only two storefronts the site publishes (its own hreflang list is en-GB and en-US); the 66 countries World of Books ships to are served from one of them.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom storefront, prices in GBP"},{"value":"us","label":"United States storefront, prices in USD"}],"default":"uk","example":"uk","aliases":["country","store","storefront","locale"]},{"name":"query","type":"string","required":false,"description":"Free-text search over title, author, publisher and both ISBNs. An ISBN works as a query and resolves to exactly one record (measured: 9781408855652 -> 1 hit, and its ISBN-10 1408855658 -> the same 1 hit). Leave it out to browse the whole catalogue with filters only. A query that matches nothing returns an honest empty answer with the source's own total of 0, not an error.","on_invalid":"reject","example":"dune","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,120}","aliases":["q","keyword","keywords","search","term","title"]},{"name":"author","type":"string","required":false,"description":"Keep only this author, matched against the catalogue's own author string, which is normalised and sometimes abbreviated ('Jk Rowling', 'Cgp Books', 'Various'). Use `categories` to read the exact spellings with their counts. Measured on the UK store in one run: 'Jk Rowling' cut 7,173,373 records to 388.","on_invalid":"reject","example":"Stephen King","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,120}","aliases":["authors","writer"]},{"name":"publisher","type":"string","required":false,"description":"Keep only this publisher, as the catalogue spells it — the IMPRINT, not the group: 'Penguin Books Ltd' (309,931 records), 'Hodder Paperbacks', 'Scribner'. The product page itself often names the parent group instead ('Simon & Schuster' for a Scribner title, measured on 8 of 30 products), so use the value this filter and `publisher` in the rows give you. Measured: 'Penguin' cut the UK catalogue to 1,372 records, which is why the exact imprint matters.","on_invalid":"reject","example":"Penguin Books Ltd","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,120}","aliases":["publishers","imprint"]},{"name":"category","type":"string","required":false,"description":"Keep only this branch of World of Books' own three-level category tree. Pass one level exactly as the source writes it: 'Fiction Books', 'Fiction Books > Modern Fiction', or 'Non-Fiction Books > Biography and True Stories > Biography: general'. The depth is taken from the number of ' > ' separators. Measured on the UK store: 'Fiction Books' 1,979,203 records, 'Fiction Books > Modern Fiction' 577,395. `categories` returns the whole tree with its counts.","on_invalid":"reject","example":"Fiction Books > Modern Fiction","value_pattern":"[^\\x00-\\x1f{}|\\\\^`<]{1,160}","aliases":["categories","subject","genre"]},{"name":"condition","type":"enum","required":false,"description":"Keep only editions with at least one copy in this cosmetic grade. These are World of Books' own five grades in its own order, carried verbatim and never remapped. Measured on the UK store against 7,173,373 unfiltered records in the same run: NEW 5,950,961, WELL_READ 1,633,679; the index's facet counts for the same day were VERY_GOOD 7,992,943, NEW 4,766,521, GOOD 1,621,381, WELL_READ 1,495,895, LIKE_NEW 354,420. It filters EDITIONS, not copies: use `detail` to see which copy in which grade carries which price.","on_invalid":"reject","allowed_values":[{"value":"NEW","label":"New — World of Books' own grade"},{"value":"LIKE_NEW","label":"Like New — World of Books' own grade"},{"value":"VERY_GOOD","label":"Very Good — World of Books' own grade"},{"value":"GOOD","label":"Good — World of Books' own grade"},{"value":"WELL_READ","label":"Well Read — World of Books' own grade"}],"example":"LIKE_NEW","aliases":["conditions","grade","quality"]},{"name":"format","type":"enum","required":false,"description":"Binding, in the catalogue's own words. Only these two have a real count on the live index (Paperback 6,006,141, Hardback 1,895,749). Note the vocabulary split: the product page says 'Hardcover' for what the catalogue calls 'Hardback' (measured on 7 of 30 products) — `detail` returns the catalogue word as `format` and the page's word as `format_raw` rather than picking one silently. Measured bite on the UK store: 7,173,373 -> 1,716,351 for Hardback.","on_invalid":"reject","allowed_values":[{"value":"Paperback","label":"paperback (6,006,141 records)"},{"value":"Hardback","label":"hardback (1,895,749). The product page calls the same thing 'Hardcover'; this is the catalogue's own word, the one the filter takes."}],"example":"Hardback","aliases":["binding","binding_type","bookFormat"]},{"name":"language","type":"string","required":false,"description":"Keep only books in this language, as the catalogue names it. English dominates (5,230,100 records) but the non-English shelf is real and measurable: French 16,764, Welsh 10,549, Spanish 6,313, German 4,156, Italian 2,926. Measured bite on the UK store in one run: 'French' cut 7,173,373 records to 37,091. Any other language the index carries is accepted; an unknown one returns an honest 0.","on_invalid":"reject","allowed_values":[{"value":"English","label":"5,230,100 records"},{"value":"French","label":"16,764"},{"value":"Welsh","label":"10,549"},{"value":"Spanish","label":"6,313"},{"value":"German","label":"4,156"},{"value":"Italian","label":"2,926"}],"example":"French","value_pattern":"[A-Za-z][A-Za-z ()-]{1,40}","aliases":["languages","lang"]},{"name":"product_type","type":"enum","required":false,"description":"World of Books is overwhelmingly books, but it also resells discs and games: Book 8,222,289 records, Music 1,351, DVD 785, Games 168 on 2026-10-08. On a non-book the two ISBN keys hold something else — the catalogue puts an EAN or UPC in the ISBN-13 slot and an Amazon ASIN in the ISBN-10 slot — so this engine publishes those as `barcode_ean` and `asin` and leaves `isbn13`/`isbn10` null rather than passing a UPC off as an ISBN.","on_invalid":"reject","allowed_values":[{"value":"Book","label":"printed book (8,222,289 records on 2026-10-08)"},{"value":"DVD","label":"DVD / Blu-Ray (785)"},{"value":"Music","label":"CD / vinyl (1,351)"},{"value":"Games","label":"video game (168)"}],"example":"Book","aliases":["type","media","productType"]},{"name":"year_min","type":"integer","required":false,"description":"Earliest publication year. Measured on the UK store: 7,173,373 records -> 3,974,346 at year_min 2020 and 611,245 for the single year 2024. Beware the source's own edges: the live index's year statistics run from 1 to 9999, so a handful of records carry a junk year — this engine publishes a year only when it is between 1400 and next year and keeps the raw value in `year_published_raw`.","on_invalid":"reject","example":2020,"minimum":1400,"maximum":2027,"aliases":["min_year","from_year","published_after"]},{"name":"year_max","type":"integer","required":false,"description":"Latest publication year, same scale as `year_min`. Use both for a window.","on_invalid":"reject","example":2024,"minimum":1400,"maximum":2027,"aliases":["max_year","to_year","published_before"]},{"name":"min_price","type":"number","required":false,"description":"Lowest from-price, in the storefront's own currency and MAJOR units (20 = GBP 20 on `uk`, USD 20 on `us`). It filters on the cheapest copy of an edition, which is the number `from_price` returns. Measured on the UK store: 65,501 records at min_price 50 out of 6.7 M.","on_invalid":"reject","example":20,"minimum":0,"aliases":["price_min","from_price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest from-price, same units. Measured on the UK store: 533 records at max_price 3 — the catalogue floor sits just under GBP 2 (the index's own price statistics on 2026-10-08: min 1.99, mean 7.92, max 1,050).","on_invalid":"reject","example":3,"minimum":0,"aliases":["price_max","from_price_max"]},{"name":"min_stock","type":"integer","required":false,"description":"Keep only editions with at least this many physical copies on hand. World of Books publishes a real unit count per edition, not an in-stock flag — the measured sample ran from single copies to 1,855 for one Harry Potter printing. Measured bite on the UK store: 790,215 records at min_stock 100.","on_invalid":"reject","example":100,"minimum":1,"aliases":["stock_min","min_quantity"]},{"name":"sort","type":"enum","required":false,"description":"Row order. Only these four exist: the storefront's theme advertises thirteen sort options, but probing every one of them on both storefronts on 2026-10-08 found that only the base ranking and these three have a live index behind them — the other nine answer 'index does not exist'. The missing ones are not offered here rather than failing at call time.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"the store's own ranking (its default)"},{"value":"price_asc","label":"cheapest from-price first"},{"value":"price_desc","label":"most expensive first"},{"value":"title_asc","label":"title A-Z"}],"default":"relevance","example":"price_asc","aliases":["sort_by","order","sorting"]},{"name":"page","type":"integer","required":false,"description":"1-based page. The source's result window is 1,000 records per query, so `page` x `per_page` must stay at or below 1,000 — at 50 per page that is page 20. Going past it is rejected with the exact maximum for your page size, because the source answers an out-of-window page with HTTP 200 and an empty body that looks like a legitimate end-of-results. Narrow with a filter or sort by price to reach deeper stock.","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["p","page_number"]},{"name":"per_page","type":"integer","required":false,"description":"Rows per page, 1-100. Measured payload: 20 rows = 25.6 KB, 100 rows = 118.7 KB.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","hits_per_page","page_size"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: World of Books Group is the only seller, it is a company, and it is returned in full on every response.","on_invalid":"reject","default":false}],"returns":"books[]{isbn13, isbn10, isbn10_derived, barcode_ean, asin, title, full_title, catalogue_title, author, publisher, year_published, year_published_raw, date_published, date_published_raw, format, languages[], product_type, series, genre_code, reading_age, categories[], category_path, category_lvl0, from_price, best_condition_price, list_price, list_price_usd|list_price_gbp (the OTHER market's list price, when the source has it), currency, currency_symbol, price_bands[], available_conditions[], condition_count, in_stock, stock_quantity, stock_level, has_used_copies, has_new_copies, stocked_in_uk, stocked_in_us, sales_rank, review_rating, review_count, image_url, handle, url, product_id, edition_family, market, detail_params{market, handle} (+ director/artist/platform/console/region_code on discs and games)} + seller{} + meta{market, country, currency, total_estimate, total_is_estimate, returned, page, per_page, pages_available, result_window, max_page, has_more, sort, filters_applied{}, filter_check{}, price_range{min,max}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"uk","query":"dune","per_page":20,"sort":"price_asc"}},{"name":"detail","description":"Everything World of Books publishes about one edition on one storefront, read from the product page itself and from the catalogue record behind it. The bibliography is complete: ISBN-13, ISBN-10, title, author, publisher and the publishing group, binding, PAGE COUNT, publication date, language, the full category breadcrumb, the series, the publisher's list price and the description the store prints. Then the part no catalogue page gives you in one object: every physical COPY on the shelf as its own row — World of Books' grade (New, Like New, Very Good, Good, Well Read), that copy's own price, whether it can be bought, which country's warehouse holds it and which supply route it came in on — with a cheapest-price-per-grade summary on top. Each copy's price is cross-checked against the page's own published offer for the same SKU and the agreement is published, and a copy with no price is returned as null rather than as 0.00. Takes the `handle` every search row hands you, or an ISBN-10/ISBN-13.","required_params":["market"],"optional_params":["handle","isbn"],"params":[{"name":"market","type":"enum","required":true,"description":"Which World of Books storefront to read. This is NOT a language switch: the two storefronts are two separate catalogues with their own prices, their own stock and their own editions. Measured on 2026-10-08 for ISBN 9781408855652, the UK store published GBP 3.70 over 1,855 units while the US store published USD 3.48 over 875, and a keyword search for 'harry potter' returned the UK 'Philosopher's Stone' on one and the US 'Sorcerer's Stone' on the other. These are the only two storefronts the site publishes (its own hreflang list is en-GB and en-US); the 66 countries World of Books ships to are served from one of them.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom storefront, prices in GBP"},{"value":"us","label":"United States storefront, prices in USD"}],"default":"uk","example":"uk","aliases":["country","store","storefront","locale"]},{"name":"handle","type":"string","required":false,"description":"The product's own url slug. Every `search` and `isbn` row returns it as `handle` and as a ready-made `detail_params`. Either `handle` or `isbn` is required; `handle` is one request cheaper because it needs no lookup.","on_invalid":"reject","example":"harry-potter-and-the-philosopher-s-stone-book-jk-rowling-9781408855652","value_pattern":"[a-z0-9][a-z0-9._-]{0,180}","aliases":["product_handle","slug","product"]},{"name":"isbn","type":"string","required":false,"description":"An ISBN-13 or an ISBN-10, with or without dashes and spaces. An ISBN-10 is converted arithmetically to the ISBN-13 the catalogue is keyed on (verified live: 1408855658 and 9781408855652 resolve to the same record). A 13-digit non-ISBN barcode is accepted too, which is how a DVD or CD is looked up. The check digit is verified before the call, so a typo is rejected rather than answered with NOT_FOUND. Either `handle` or `isbn` is required.","on_invalid":"reject","example":"9781408855652","value_pattern":"[0-9Xx][0-9Xx -]{8,19}","aliases":["isbn13","isbn10","barcode","ean","gtin"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: World of Books Group is the only seller, it is a company, and it is returned in full on every response.","on_invalid":"reject","default":false}],"returns":"isbn13, isbn10, barcode_ean, asin, title, subtitle, author, publisher, publisher_group, format, format_raw, pages, date_published, year_published, languages[], description, categories[], category_path, breadcrumbs[], series, genre_code, reading_age, images[], image_url, handle, url, product_id, product_type, market, country, currency, list_price, catalogue_from_price, stock_quantity, sales_rank, review_rating, review_count, free_shipping_over, seller{}, copies[]{sku, condition, condition_label, condition_rank, is_new, price, price_minor, currency, price_missing, available, ships_from, ships_from_country, held_in_market, supply_route, supply_route_label, weight_grams, barcode, variant_id, url, page_price, page_availability, page_price_agrees}, summary{copy_count, available_copy_count, conditions_in_stock[], price_by_condition{}, cheapest_price, cheapest_condition, cheapest_sku, price_range{min,max}, copies_held_in_market, copies_held_abroad, supply_routes[]} + meta{placeholder_variants_dropped, page_price_disagreements, catalogue_price_matches_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"market":"uk","handle":"harry-potter-and-the-philosopher-s-stone-book-jk-rowling-9781408855652"}},{"name":"isbn","description":"Look up to 20 ISBNs up in ONE request — the fastest way to price a shelf, a reading list or a whole wishlist against the UK's biggest second-hand bookseller. ISBN-13, ISBN-10 and 13-digit barcodes may be mixed; every ISBN-10 is converted arithmetically to the ISBN-13 the catalogue is keyed on, and every check digit is verified before the call so a typo comes back as a rejected input rather than as a missing book. The answer keeps your order and separates the three outcomes you care about: found, not carried by this storefront, and not a valid ISBN. Each found row is the full catalogue record — title, author, publisher, year, binding, language, categories, the cheapest live price, the list price, which of the five conditions are in stock and how many physical copies there are.","required_params":["market","isbns"],"optional_params":[],"params":[{"name":"market","type":"enum","required":true,"description":"Which World of Books storefront to read. This is NOT a language switch: the two storefronts are two separate catalogues with their own prices, their own stock and their own editions. Measured on 2026-10-08 for ISBN 9781408855652, the UK store published GBP 3.70 over 1,855 units while the US store published USD 3.48 over 875, and a keyword search for 'harry potter' returned the UK 'Philosopher's Stone' on one and the US 'Sorcerer's Stone' on the other. These are the only two storefronts the site publishes (its own hreflang list is en-GB and en-US); the 66 countries World of Books ships to are served from one of them.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom storefront, prices in GBP"},{"value":"us","label":"United States storefront, prices in USD"}],"default":"uk","example":"uk","aliases":["country","store","storefront","locale"]},{"name":"isbns","type":"array","required":true,"description":"Up to 20 ISBNs in ONE call — ISBN-13, ISBN-10 or a 13-digit barcode, mixed freely, with or without dashes. Every ISBN-10 is converted to its ISBN-13 before the lookup. The answer keeps your order, tells you which ISBNs the catalogue does not have, and returns the full catalogue record for the ones it does: title, author, publisher, year, binding, the conditions in stock, the cheapest price in that storefront's currency and the unit count.","on_invalid":"reject","example":["9781408855652","9780441172719","059035342X"],"aliases":["isbn","isbn_list","barcodes","eans"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: World of Books Group is the only seller, it is a company, and it is returned in full on every response.","on_invalid":"reject","default":false}],"returns":"books[]{isbn13, isbn10, isbn10_derived, barcode_ean, asin, title, full_title, catalogue_title, author, publisher, year_published, year_published_raw, date_published, date_published_raw, format, languages[], product_type, series, genre_code, reading_age, categories[], category_path, category_lvl0, from_price, best_condition_price, list_price, list_price_usd|list_price_gbp (the OTHER market's list price, when the source has it), currency, currency_symbol, price_bands[], available_conditions[], condition_count, in_stock, stock_quantity, stock_level, has_used_copies, has_new_copies, stocked_in_uk, stocked_in_us, sales_rank, review_rating, review_count, image_url, handle, url, product_id, edition_family, market, detail_params{market, handle} (+ director/artist/platform/console/region_code on discs and games)}, not_found[]{isbn, lookup_key}, invalid[]{isbn, reason} + meta{market, currency, requested, found, not_found, invalid}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"uk","isbns":["9781408855652","9780441172719"]}},{"name":"categories","description":"The shape of the catalogue in one request: World of Books' own three-level category tree with a record count on every node, plus the top authors, publishers, bindings, languages, product types, cosmetic conditions and price bands, and the live minimum, mean and maximum price. This is the resolver for `search` — it gives you the exact spellings the filters take ('Jk Rowling', 'Penguin Books Ltd', 'Non-Fiction Books > Lifestyle, Cooking and Leisure') so you never have to guess one. Narrow it with `query` or `category` to get the breakdown of a single search or a single branch. One honest caveat, measured and repeated in the response: these counts are index-wide while `search` runs behind the storefront's own hygiene rule, so a facet count is an upper bound on what a search will return (measured the same minute: in-stock facet 8,224,496, search total 7,173,373).","required_params":["market"],"optional_params":["query","category","top"],"params":[{"name":"market","type":"enum","required":true,"description":"Which World of Books storefront to read. This is NOT a language switch: the two storefronts are two separate catalogues with their own prices, their own stock and their own editions. Measured on 2026-10-08 for ISBN 9781408855652, the UK store published GBP 3.70 over 1,855 units while the US store published USD 3.48 over 875, and a keyword search for 'harry potter' returned the UK 'Philosopher's Stone' on one and the US 'Sorcerer's Stone' on the other. These are the only two storefronts the site publishes (its own hreflang list is en-GB and en-US); the 66 countries World of Books ships to are served from one of them.","on_invalid":"reject","allowed_values":[{"value":"uk","label":"United Kingdom storefront, prices in GBP"},{"value":"us","label":"United States storefront, prices in USD"}],"default":"uk","example":"uk","aliases":["country","store","storefront","locale"]},{"name":"query","type":"string","required":false,"description":"Optional. Restrict the counts to the editions matching this text, which turns `categories` into a 'what is this search made of' breakdown — top authors, publishers, bindings, languages and categories for one keyword in one request.","on_invalid":"reject","example":"cookery","value_pattern":"[^\\x00-\\x1f<>{}|\\\\^`]{1,120}","aliases":["q","keyword","search"]},{"name":"category","type":"string","required":false,"description":"Optional. Restrict the counts to one branch of the tree, so you get its sub-categories and its own top authors and publishers rather than the whole catalogue's.","on_invalid":"reject","example":"Fiction Books","value_pattern":"[^\\x00-\\x1f{}|\\\\^`<]{1,160}","aliases":["branch","subject"]},{"name":"top","type":"integer","required":false,"description":"How many values to return per facet (1-100, default 20). The category levels are always returned in full.","on_invalid":"reject","default":20,"example":20,"minimum":1,"maximum":100,"aliases":["limit","max_values"]},{"name":"include_pii","type":"boolean","required":false,"description":"Accepted for gateway compatibility. There is no personal data on this source: World of Books Group is the only seller, it is a company, and it is returned in full on every response.","on_invalid":"reject","default":false}],"returns":"category_tree[]{name, path, count, children[]}, conditions[]{value, label, count}, formats[]{value, count}, languages[]{value, count}, product_types[]{value, count}, authors[]{value, count}, publishers[]{value, count}, price_bands[]{value, count}, years[]{value, count}, price_stats{min, avg, max} + meta{market, currency, total_estimate, counts_are_index_wide}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"market":"uk","top":20}}]},{"name":"worten","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Worten API — search worten.pt and Worten Canarias and read products with price, PVPR / promotion price, every marketplace seller's offer, stock, delivery and store pickup, EAN, specifications and Bazaarvoice reviews","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/worten/v1","spec_available":true,"actions":[{"name":"search","description":"Search Worten (worten.pt or Worten Canarias) by keyword and/or category with the site's own filters: brand, price range, in stock online, on sale, seller (Worten itself, premium marketplace sellers, or one marketplace seller), condition (new / refurbished / outlet, worten.pt), 5 sort orders. Each row: product id, Worten reference (sku), EAN, name, brand, price, original price and its type (recommended retail price vs promotion), discount, stock, the featured offer's seller (Worten or marketplace), number of offers and the next offer's price, delivery price and days, rating and count, promotion window, energy class. Plus the source's total and its facets (category tree with ids, brands, sellers, condition, ratings, delivery time, price range).","required_params":[],"optional_params":["query","site","category_id","category_level","brand","min_price","max_price","in_stock","on_sale","seller","condition","sort","page","page_size"],"params":[{"name":"query","type":"string","required":false,"description":"Search words as typed into the Worten search box. Either `query` or `category_id` (or both) is required.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","keywords","search"]},{"name":"site","type":"enum","required":false,"description":"Which Worten store: pt = worten.pt (Portugal), canarias = canarias.worten.es (Worten Canarias, Spain). Prices follow the store's own price list. worten.es (mainland Spain) no longer sells online and is refused.","on_invalid":"reject","allowed_values":[{"value":"pt","label":"worten.pt (Portugal, EUR)"},{"value":"canarias","label":"canarias.worten.es (Canary Islands, EUR)"}],"default":"pt","aliases":["country","store","domain"]},{"name":"category_id","type":"string","required":false,"description":"Worten category id (26-character id, with or without the CMS- prefix) from facets.categories or a row's category_ids. Without `query` this lists the category.","on_invalid":"reject","example":"01G2Z3083T2F388W2SQ68DSC5P","aliases":["category"]},{"name":"category_level","type":"integer","required":false,"description":"Depth of `category_id` in the category tree (facets.categories report it). Optional: when omitted the engine tries levels 1-4 and stops at the first that has rows (one source call per level).","on_invalid":"reject","minimum":1,"maximum":4},{"name":"brand","type":"string","required":false,"description":"Brand as the facets list it (case-insensitive, e.g. APPLE, SAMSUNG). A brand the store does not carry returns 0 rows.","on_invalid":"reject","example":"APPLE"},{"name":"min_price","type":"number","required":false,"description":"Lowest price in EUR. Portuguese writing is accepted: 1.299,99","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Highest price in EUR.","on_invalid":"reject","example":300,"minimum":0,"aliases":["price_max"]},{"name":"in_stock","type":"boolean","required":false,"description":"Only products available online now.","on_invalid":"reject","aliases":["available"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only products the site marks as on sale.","on_invalid":"reject","aliases":["promotion","discounted"]},{"name":"seller","type":"string","required":false,"description":"worten = sold by Worten itself; premium = the site's premium marketplace sellers; or one marketplace seller's facet value (e.g. cantinho-19663) from facets.other[key=seller_id].","on_invalid":"reject","allowed_values":[{"value":"worten","label":"Sold by Worten"},{"value":"premium","label":"Premium marketplace sellers"}],"example":"worten","value_pattern":"[a-z0-9][a-z0-9-]*-\\d+","aliases":["seller_id"]},{"name":"condition","type":"enum","required":false,"description":"worten.pt only: new, refurbished or outlet.","on_invalid":"reject","allowed_values":[{"value":"new","label":"New"},{"value":"refurbished","label":"Refurbished"},{"value":"outlet","label":"Outlet"}],"aliases":["state","estado"]},{"name":"sort","type":"enum","required":false,"description":"Result order. Note: a sorted listing can report a smaller total than relevance (rows without a value for the sort key drop out).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"price_asc","label":"Lowest price"},{"value":"price_desc","label":"Highest price"},{"value":"rating","label":"Best rated (weighted: high average with many ratings)"},{"value":"discount","label":"Biggest discount"}],"default":"relevance","aliases":["sort_by","order"]},{"name":"page","type":"integer","required":false,"description":"Result page. The source serves the first 1,000 rows of any search: page × page_size must be ≤ 1000 (page 41 at 24 rows, 20 at 48, 83 at 12).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":83},{"name":"page_size","type":"enum","required":false,"description":"Rows per page.","on_invalid":"reject","allowed_values":[{"value":"12","label":"12 rows"},{"value":"24","label":"24 rows"},{"value":"48","label":"48 rows"}],"default":"24","aliases":["limit","per_page"]}],"returns":"results[]{product_id, sku, ean, eans, entity_id, webitem_id, name, brand, url, image, price, original_price, price_type (regular|recommended_retail_price|promotion), discount_pct, currency, in_stock, offer_id, seller{seller_id, name, is_worten, premium, rating, rating_count}, offer_count, second_offer_price, shipping{price, min_days, max_days}, free_delivery_list, rating, rating_count, variant_count, promo_start, promo_end, energy_class, release_date, badges[], tags[], category_ids[]} + total, page, page_size, last_page, has_more, site, facets{categories[]{category_id, label, count, level, children[]}, price_range, other[]{key, label, type, options[]}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone","brand":"APPLE"}},{"name":"product","description":"Full Worten product record: name, brand, model, Worten reference, EAN, description, category, rating and count, the featured offer's price, original price and its type, discount, stock, seller (Worten or marketplace) and delivery / store-pickup options, EVERY seller's offer with its own price, stock, delivery days and cost, the cheapest in-stock offer, warranty and insurance add-ons with prices, energy class, release date, manufacturer, grouped technical specifications and the raw attribute list.","required_params":[],"optional_params":["product_id","sku","ean","site"],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id exactly as a search row returns it (product_id, a uuid). A Worten product URL (ending in the 7-digit reference) is accepted too. Give this, `sku` or `ean`.","on_invalid":"reject","example":"ffffffff-0000-4000-a000-00003c8cc202","aliases":["id","productId","url"]},{"name":"sku","type":"string","required":false,"description":"Worten's product reference exactly as a search row returns it: 5-9 digits (the 'Referência' on the page), or MRKEAN-<ean> for products only marketplace sellers offer.","on_invalid":"reject","example":"7851120","aliases":["reference","ref"]},{"name":"ean","type":"string","required":false,"description":"Barcode (EAN/GTIN, 8-14 digits) as a search row returns it.","on_invalid":"reject","example":"0195949035999","aliases":["gtin","barcode","gtin13"]},{"name":"site","type":"enum","required":false,"description":"Which Worten store: pt = worten.pt (Portugal), canarias = canarias.worten.es (Worten Canarias, Spain). Prices follow the store's own price list. worten.es (mainland Spain) no longer sells online and is refused.","on_invalid":"reject","allowed_values":[{"value":"pt","label":"worten.pt (Portugal, EUR)"},{"value":"canarias","label":"canarias.worten.es (Canary Islands, EUR)"}],"default":"pt","aliases":["country","store","domain"]}],"returns":"{product_id, site, sku, ean, eans, entity_id, webitem_id, name, brand, model, type, url, image, description, rating, rating_count, category{category_id, name, url}, category_ids[], price, original_price, original_price_type, discount_pct, currency, in_stock, seller{...}, seller_type (worten|marketplace), fulfilment[]{type, label, min_days, max_days, free, price, note}, offer_count, cheapest_offer{offer_id, price, seller, seller_type}, offers[]{offer_id, is_featured_offer, seller{seller_id, name, is_worten, premium, rating, rating_count, orders}, seller_type, price, original_price, original_price_type, discount_pct, source_discount_pct, currency, in_stock, fulfilment[], pickup_in_store, tags[], seller_note, source_offer_code}, services[]{group, title, sku, name, price}, energy_class, release_date, manufacturer, badges[], variant_count, specifications[]{group, name, value}, properties{}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"sku":"7851120"}},{"name":"offers","description":"Every offer for one Worten product in one call — Worten's own and each marketplace seller's: price, original price, discount, stock, seller name / rating / order count, delivery days and cost, store pickup — plus the cheapest in-stock offer. Lighter than `product` for price monitoring.","required_params":[],"optional_params":["product_id","sku","ean","site"],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id exactly as a search row returns it (product_id, a uuid). A Worten product URL (ending in the 7-digit reference) is accepted too. Give this, `sku` or `ean`.","on_invalid":"reject","example":"ffffffff-0000-4000-a000-00003c8cc202","aliases":["id","productId","url"]},{"name":"sku","type":"string","required":false,"description":"Worten's product reference exactly as a search row returns it: 5-9 digits (the 'Referência' on the page), or MRKEAN-<ean> for products only marketplace sellers offer.","on_invalid":"reject","example":"7851120","aliases":["reference","ref"]},{"name":"ean","type":"string","required":false,"description":"Barcode (EAN/GTIN, 8-14 digits) as a search row returns it.","on_invalid":"reject","example":"0195949035999","aliases":["gtin","barcode","gtin13"]},{"name":"site","type":"enum","required":false,"description":"Which Worten store: pt = worten.pt (Portugal), canarias = canarias.worten.es (Worten Canarias, Spain). Prices follow the store's own price list. worten.es (mainland Spain) no longer sells online and is refused.","on_invalid":"reject","allowed_values":[{"value":"pt","label":"worten.pt (Portugal, EUR)"},{"value":"canarias","label":"canarias.worten.es (Canary Islands, EUR)"}],"default":"pt","aliases":["country","store","domain"]}],"returns":"offers[]{offer_id, seller{...}, seller_type, price, original_price, original_price_type, discount_pct, source_discount_pct, currency, in_stock, fulfilment[], pickup_in_store, tags[], seller_note, source_offer_code} + product_id, sku, ean, name, offer_count, cheapest_offer","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"8591075"}},{"name":"reviews","description":"Written buyer reviews of a Worten product (the site's Bazaarvoice reviews): stars, title, text, date, nickname, verified-purchaser flag, recommended flag, helpful votes, sub-ratings, photos, brand responses. Plus the rating summary: average, distribution, total submissions and how many are ratings without text. Reviews are shared across a product's variants, as on the site.","required_params":[],"optional_params":["entity_id","product_id","sku","ean","site","sort","rating","page","page_size"],"params":[{"name":"entity_id","type":"string","required":false,"description":"The product's entity_id as a search row or product returns it (digits). Fastest form. `product_id`, `sku` or `ean` also work (one extra lookup).","on_invalid":"reject","example":"1177214513"},{"name":"product_id","type":"string","required":false,"description":"Product id exactly as a search row returns it (product_id, a uuid). A Worten product URL (ending in the 7-digit reference) is accepted too. Give this, `sku` or `ean`.","on_invalid":"reject","example":"ffffffff-0000-4000-a000-00003c8cc202","aliases":["id","productId","url"]},{"name":"sku","type":"string","required":false,"description":"Worten's product reference exactly as a search row returns it: 5-9 digits (the 'Referência' on the page), or MRKEAN-<ean> for products only marketplace sellers offer.","on_invalid":"reject","example":"7851120","aliases":["reference","ref"]},{"name":"ean","type":"string","required":false,"description":"Barcode (EAN/GTIN, 8-14 digits) as a search row returns it.","on_invalid":"reject","example":"0195949035999","aliases":["gtin","barcode","gtin13"]},{"name":"site","type":"enum","required":false,"description":"Which Worten store: pt = worten.pt (Portugal), canarias = canarias.worten.es (Worten Canarias, Spain). Prices follow the store's own price list. worten.es (mainland Spain) no longer sells online and is refused.","on_invalid":"reject","allowed_values":[{"value":"pt","label":"worten.pt (Portugal, EUR)"},{"value":"canarias","label":"canarias.worten.es (Canary Islands, EUR)"}],"default":"pt","aliases":["country","store","domain"]},{"name":"sort","type":"enum","required":false,"description":"Review order.","on_invalid":"reject","allowed_values":[{"value":"newest","label":"Newest"},{"value":"oldest","label":"Oldest"},{"value":"highest","label":"Highest rating"},{"value":"lowest","label":"Lowest rating"},{"value":"most_helpful","label":"Most helpful"}],"default":"newest"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with this many stars.","on_invalid":"reject","minimum":1,"maximum":5,"aliases":["stars"]},{"name":"page","type":"integer","required":false,"description":"Review page.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500},{"name":"page_size","type":"integer","required":false,"description":"Reviews per page (1-100).","on_invalid":"reject","default":20,"minimum":1,"maximum":100,"aliases":["limit"]}],"returns":"reviews[]{review_id, rating, rating_range, title, text, date, author, author_location, verified_purchaser, recommended, helpful_votes, unhelpful_votes, pros, cons, secondary_ratings{}, photos[], brand_responses[], syndicated_from, locale, bv_product_id} + total_reviews, summary{average_rating, total_submissions, ratings_only, recommended, not_recommended, distribution{}}, page, page_size, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"entity_id":"1177214513"}}]},{"name":"x-kom","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"x-kom API — search x-kom.pl, al.to and neonet.pl and read products with PLN shelf, crossed-out, Omnibus 30-day and promo-code prices, store pickup, specs, reviews and the daily hot shot","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/x-kom/v1","spec_available":true,"actions":[{"name":"search","description":"Search x-kom.pl (or al.to / neonet.pl) by keyword with the shop's own category, brand, price range (PLN), availability filters and sorts. Each row: product id, name, brand, producer code, URL, image, category path, the shelf price, crossed-out price, EU Omnibus lowest-30-day price, promo-code price with its code, dates and per-customer limit, availability, outlet condition, badges, rating (x-kom's 1-6 scale and the 5-star figure), review count, instalment offer, key specs. Also returns category and brand facets with counts for the query.","required_params":["query"],"optional_params":["category_id","brand_id","price_min","price_max","only_available","sort","page","limit","site"],"params":[{"name":"query","type":"string","required":true,"description":"Search words as typed into the shop's search box (Polish or brand/model names, e.g. 'iphone 17', 'rtx 5070').","on_invalid":"reject","example":"iphone 17","aliases":["q","keyword","keywords","search"]},{"name":"category_id","type":"string","required":false,"description":"Narrow the search to one category id (from `facets.categories` or the categories action).","on_invalid":"reject","example":"1590","aliases":["category"]},{"name":"brand_id","type":"string","required":false,"description":"Brand (producer) id, e.g. 357 = Apple. The ids come back in `facets.brands` of any search or category call.","on_invalid":"reject","example":"357","aliases":["producer_id","brand"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in PLN. Measured: x-kom applies the price filter to the promo-code price when a code is published (a 3499 zł laptop with a 2599 zł code is inside 2000-3000); each row's `filter_price` is that price.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in PLN (same promo-code rule as price_min).","on_invalid":"reject","example":3000,"minimum":0,"aliases":["max_price"]},{"name":"only_available","type":"boolean","required":false,"description":"Only products the shop marks Available (category 159: 3849 → 3431).","on_invalid":"reject","default":false,"aliases":["in_stock"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Search: the shop's relevance order. Category: lowest price first (the shop's own default)"},{"value":"price_asc","label":"Lowest price first (the promo-code price when a code is published)"},{"value":"price_desc","label":"Highest price first"},{"value":"popularity","label":"Most popular first"},{"value":"rating","label":"Best rated first"},{"value":"name","label":"Product name A-Z"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). `pages` in the answer is the last page; a page past it is refused.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-60 (default 30).","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":60},{"name":"site","type":"enum","required":false,"description":"Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to.","on_invalid":"reject","allowed_values":[{"value":"xkom","label":"x-kom.pl"},{"value":"alto","label":"al.to"},{"value":"neonet","label":"neonet.pl"}],"default":"xkom","aliases":["shop","store"]}],"returns":"results[]{product_id, site, name, title, brand, brand_id, producer_code, url, image, category{id, name, parent_id, parent_name, group_id, group_name}, currency, price, old_price, lowest_price_30d, promo_code{code, price, starts_at, ends_at, customer_limit, active}, code_price, filter_price, price_visible, discount_value, availability_status, is_outlet, outlet_condition, marks[], badges[], rating (1-6 scale), rating_5, review_count, free_shipping, installment{text, zero_percent, min_monthly}, energy_class, key_specs{name: value}, sponsored, variant_group_id, is_gift_card, is_digital} + total, pages, page, limit, has_more, page_past_end, sort, rows_outside_price_range, facets{categories[]{category_id, name, count, group_id, group_name, children[]}, brands[]{brand_id, name, count}}, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"iphone 17","limit":10}},{"name":"category","description":"List one x-kom category (e.g. 159 laptops, 1590 smartphones) with the same brand, price, availability and sort options and the same rows as search, plus sub-category and brand facets. Category ids come from the categories action or from search facets.","required_params":["category_id"],"optional_params":["brand_id","price_min","price_max","only_available","sort","page","limit","site"],"params":[{"name":"category_id","type":"string","required":true,"description":"x-kom category id (e.g. 159 = Laptopy/Notebooki/Ultrabooki). An id the shop does not know answers total 0.","on_invalid":"reject","example":"159","aliases":["category","id"]},{"name":"brand_id","type":"string","required":false,"description":"Brand (producer) id, e.g. 357 = Apple. The ids come back in `facets.brands` of any search or category call.","on_invalid":"reject","example":"357","aliases":["producer_id","brand"]},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in PLN. Measured: x-kom applies the price filter to the promo-code price when a code is published (a 3499 zł laptop with a 2599 zł code is inside 2000-3000); each row's `filter_price` is that price.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Highest price in PLN (same promo-code rule as price_min).","on_invalid":"reject","example":3000,"minimum":0,"aliases":["max_price"]},{"name":"only_available","type":"boolean","required":false,"description":"Only products the shop marks Available (category 159: 3849 → 3431).","on_invalid":"reject","default":false,"aliases":["in_stock"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results.","on_invalid":"reject","allowed_values":[{"value":"default","label":"Search: the shop's relevance order. Category: lowest price first (the shop's own default)"},{"value":"price_asc","label":"Lowest price first (the promo-code price when a code is published)"},{"value":"price_desc","label":"Highest price first"},{"value":"popularity","label":"Most popular first"},{"value":"rating","label":"Best rated first"},{"value":"name","label":"Product name A-Z"}],"default":"default"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). `pages` in the answer is the last page; a page past it is refused.","on_invalid":"reject","default":1,"example":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-60 (default 30).","on_invalid":"reject","default":30,"example":30,"minimum":1,"maximum":60},{"name":"site","type":"enum","required":false,"description":"Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to.","on_invalid":"reject","allowed_values":[{"value":"xkom","label":"x-kom.pl"},{"value":"alto","label":"al.to"},{"value":"neonet","label":"neonet.pl"}],"default":"xkom","aliases":["shop","store"]}],"returns":"results[]{product_id, site, name, title, brand, brand_id, producer_code, url, image, category{id, name, parent_id, parent_name, group_id, group_name}, currency, price, old_price, lowest_price_30d, promo_code{code, price, starts_at, ends_at, customer_limit, active}, code_price, filter_price, price_visible, discount_value, availability_status, is_outlet, outlet_condition, marks[], badges[], rating (1-6 scale), rating_5, review_count, free_shipping, installment{text, zero_percent, min_monthly}, energy_class, key_specs{name: value}, sponsored, variant_group_id, is_gift_card, is_digital} + total, pages, page, limit, has_more, page_past_end, sort, rows_outside_price_range, facets{categories[]{category_id, name, count, group_id, group_name, children[]}, brands[]{brand_id, name, count}}, category_id","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"159","limit":10}},{"name":"product","description":"The full product record by id or URL: every price fact (shelf, crossed-out, Omnibus lowest 30-day with its date, promo code with dates and limit, instalment plans), availability online with the delivery date, pickup availability in each of the shop's stores, shipping options with prices, grouped specifications, variants of the same model with their prices, all images, the description as plain text and review statistics. (x-kom's API publishes no EAN.)","required_params":[],"optional_params":["product_id","url","site"],"params":[{"name":"product_id","type":"string","required":false,"description":"Product id as in search results (`product_id`). Either product_id or url is required.","on_invalid":"reject","example":"1532486","aliases":["id","productId"]},{"name":"url","type":"string","required":false,"description":"A product URL from x-kom.pl, al.to or neonet.pl (the shop is taken from the URL). Either product_id or url is required.","on_invalid":"reject","example":"https://www.x-kom.pl/p/1532486-laptop-15---16-asus-tuf-gaming-f16-i5-14450hx-40gb-512+1tb-win11-165hz-rtx5060.html","aliases":["product_url","link"]},{"name":"site","type":"enum","required":false,"description":"Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to.","on_invalid":"reject","allowed_values":[{"value":"xkom","label":"x-kom.pl"},{"value":"alto","label":"al.to"},{"value":"neonet","label":"neonet.pl"}],"default":"xkom","aliases":["shop","store"]}],"returns":"product{product_id, site, name, title, brand, brand_id, producer_code, url, image, category{id, name, parent_id, parent_name, group_id, group_name}, currency, price, old_price, lowest_price_30d, promo_code{code, price, starts_at, ends_at, customer_limit, active}, code_price, filter_price, price_visible, discount_value, availability_status, is_outlet, outlet_condition, marks[], badges[], rating (1-6 scale), rating_5, review_count, free_shipping, installment{text, zero_percent, min_monthly}, energy_class, key_specs{name: value}, sponsored, variant_group_id, is_gift_card, is_digital, lowest_price_30d_date, description, specs[]{name, values[], unit}, images[], variants[]{dimension, options[]{label, product_id, price, unavailable}}, online_availability{text, delivery_text, delivery_date, last_items}, same_day_delivery, available_in_stores, stores[]{store_id, store, availability, availability_text, pickup_text, pickup_date}, shipping_options[]{method, payment, price, kind}, review_stats{rating, rating_5, review_count, reviews_on_this_variant, confirmed_purchases, histogram_6pt}, installment_plans[], secondary_categories[], gallery_count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"179862"}},{"name":"reviews","description":"Customer reviews of a product: author, date, rating (1-6 and 5-star), title, text, confirmed purchase flag, helpful votes, photos and shop replies. x-kom pools reviews across the variants of a model; every review names the product id it was written on and `this_variant_only` keeps just the asked product.","required_params":["product_id"],"optional_params":["sort","rating","this_variant_only","confirmed_only","page","limit","site"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id (`product_id` from search or product).","on_invalid":"reject","example":"179862","aliases":["id"]},{"name":"sort","type":"enum","required":false,"description":"Order of the reviews.","on_invalid":"reject","allowed_values":[{"value":"helpful","label":"Most helpful first (the shop's default)"},{"value":"newest","label":"Newest first"},{"value":"oldest","label":"Oldest first"},{"value":"rating_desc","label":"Highest rating first"},{"value":"rating_asc","label":"Lowest rating first"}],"default":"helpful"},{"name":"rating","type":"integer","required":false,"description":"Only reviews with this rating on x-kom's 1-6 scale.","on_invalid":"reject","minimum":1,"maximum":6},{"name":"this_variant_only","type":"boolean","required":false,"description":"Only reviews written on this exact product, not on its sibling variants.","on_invalid":"reject","default":false},{"name":"confirmed_only","type":"boolean","required":false,"description":"Only reviews from confirmed purchases.","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"Review page (1-based).","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Reviews per page, 1-50 (default 10).","on_invalid":"reject","default":10,"minimum":1,"maximum":50},{"name":"site","type":"enum","required":false,"description":"Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to.","on_invalid":"reject","allowed_values":[{"value":"xkom","label":"x-kom.pl"},{"value":"alto","label":"al.to"},{"value":"neonet","label":"neonet.pl"}],"default":"xkom","aliases":["shop","store"]}],"returns":"results[]{review_id, product_id, variant{name: value}, author, created_at, rating, rating_5, title, body, confirmed_purchase, votes_up, votes_down, photos[], replies[]{author, is_staff, created_at, body}} + total, pages, page, limit, has_more, stats{average_rating, average_rating_5, this_variant, confirmed_purchases}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"179862","limit":10}},{"name":"hot_shot","description":"The shop's current 'Gorący strzał' (hot shot) deal: the deal price, the regular and Omnibus 30-day price, the saving, how many units the deal has and how many are sold, the per-customer limit, the start and end time, and the product it is for. x-kom runs a new one twice a day.","required_params":[],"optional_params":["site"],"params":[{"name":"site","type":"enum","required":false,"description":"Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to.","on_invalid":"reject","allowed_values":[{"value":"xkom","label":"x-kom.pl"},{"value":"alto","label":"al.to"},{"value":"neonet","label":"neonet.pl"}],"default":"xkom","aliases":["shop","store"]}],"returns":"hot_shot_id, site, name, currency, price, old_price, lowest_price_30d, lowest_price_30d_date, saving, saving_text, quantity_total, quantity_sold, quantity_left, max_per_customer, starts_at, ends_at, is_active, is_suspended, image, product{product_id, name, title, brand, url, image, category, regular_price, old_price, availability_status, rating, review_count, key_specs}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"site":"xkom"}},{"name":"categories","description":"The shop's category tree: without parameters the top-level groups; with group_id the categories in that group with their product counts. Use the ids with category / search.","required_params":[],"optional_params":["group_id","site"],"params":[{"name":"group_id","type":"string","required":false,"description":"Top-level group id (e.g. 2 = Laptopy i komputery).","on_invalid":"reject","example":"2","aliases":["group"]},{"name":"site","type":"enum","required":false,"description":"Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to.","on_invalid":"reject","allowed_values":[{"value":"xkom","label":"x-kom.pl"},{"value":"alto","label":"al.to"},{"value":"neonet","label":"neonet.pl"}],"default":"xkom","aliases":["shop","store"]}],"returns":"results[]{group_id, name} or results[]{category_id, name, product_count, group_id}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"group_id":"2"}}]},{"name":"xe-gr","category":{"id":"real-estate","title":"Real Estate"},"title":"xe.gr Greece property listings","version":"1.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/xe-gr/v1","spec_available":true,"actions":[{"name":"search","description":"Search Greek sale apartments or rental homes, across the default area or in up to 10 named Greek places.","required_params":[],"optional_params":["surface","page","locations"],"params":[{"name":"surface","type":"enum","required":false,"description":"sale_apartments: apartments for sale. rent_athens: rental homes. Without locations these cover all of Greece and the Athens municipality; with locations, surface only selects sale or rent and the places replace that default area.","on_invalid":"reject","allowed_values":[{"value":"sale_apartments","label":"sale_apartments"},{"value":"rent_athens","label":"rent_athens"}],"default":"sale_apartments","example":"rent_athens"},{"name":"locations","type":"array","required":false,"description":"Optional. One place, or up to 10 searched together in one page of results at the same price; more than 10 is rejected because the source would silently ignore the rest. Greek or Latin names of Greek towns and suburbs, or a source place id (ChIJ...). Accepts a list or a comma-separated string. Unknown or ambiguous names return an error, never a wider search. The response lists how each name resolved in locations. The source ranks the requested areas first, then can add neighbouring areas, mostly on the last pages: read each row location.","on_invalid":"reject","example":["Kifisia","Marousi"],"aliases":["location"]},{"name":"page","type":"integer","required":false,"description":"One source page. Pages beyond inventory return the source explicit empty result; no deep coverage guarantee.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":100000}],"returns":"Source listing UUID, canonical URL, title, location, EUR asking amount and basis; separate advertisement/property totals and source pagination; with locations, how each name resolved.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"surface":"rent_athens","page":1}},{"name":"listing","description":"Full public property detail from the complete URL returned by search; UUID alone is not a source resolver.","required_params":["url"],"optional_params":["listing_id"],"params":[{"name":"url","type":"string","required":true,"description":"Complete public xe.gr listing URL returned by search.","on_invalid":"reject","example":"https://www.xe.gr/property/d/poliseis-katoikion/ac5ac64d-16b9-4605-b2a4-49cb06edc5b9/peristeri-lofos-axiwmatikwn-305000-92"},{"name":"listing_id","type":"string","required":false,"description":"Optional search UUID cross-check; not a standalone detail resolver.","on_invalid":"reject","example":"ac5ac64d-16b9-4605-b2a4-49cb06edc5b9"}],"returns":"Primary asking price and source period, full description, media, public address, source property attributes, source seller identity when published, listing availability. GTIN null.","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"url":"https://www.xe.gr/property/d/poliseis-katoikion/ac5ac64d-16b9-4605-b2a4-49cb06edc5b9/peristeri-lofos-axiwmatikwn-305000-92"}}]},{"name":"yad2","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Yad2 API scraper — Israel's #1 classifieds: used and new cars, motorcycles, scooters, trucks and boats; apartments and houses for sale and rent and commercial property; second-hand products from business sellers; and the full listing record. No account, no browser; private sellers' names withheld.","version":"0.1.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/yad2/v1","spec_available":true,"actions":[{"name":"cars/search","description":"Search Yad2 vehicles - cars, motorcycles, scooters, trucks and watercraft: price (placeholder and missing prices labelled), make, model and sub-model with ids, year, hand (owner count), fuel, engine size, area, dealer or private seller with the dealer's name, the dealer's warranty and service commitments, monthly-payment terms, paid promotion tier, tags and photos. Filter by make, model, year, price, mileage, hand, engine size, fuel, gearbox, body family, seats, area, dealers only, with price or photos; sort by price.","required_params":[],"optional_params":["vehicle_type","manufacturer_id","model_id","year_min","year_max","price_min","price_max","mileage_min","mileage_max","hand_min","hand_max","engine_cc_min","engine_cc_max","fuel","gearbox","family_type","seats","area_id","top_area_id","seller_type","only_with_price","only_with_images","sort","page","max_rotations"],"params":[{"name":"vehicle_type","type":"enum","required":false,"description":"car (default), motorcycle, scooter, truck or watercraft. Not every filter exists for every type - yad2 has no make filter for trucks and no mileage filter for watercraft; such a request is rejected, never ignored.","on_invalid":"reject","allowed_values":[{"value":"car","label":"car"},{"value":"motorcycle","label":"motorcycle"},{"value":"scooter","label":"scooter"},{"value":"truck","label":"truck"},{"value":"watercraft","label":"watercraft"}],"default":"car"},{"name":"manufacturer_id","type":"integer","required":false,"description":"yad2 make id (e.g. 19 = Toyota, 18 = Volvo). Every row returns make.id.","on_invalid":"reject","example":19,"minimum":1,"maximum":99999},{"name":"model_id","type":"integer","required":false,"description":"yad2 model id (e.g. 10245 = Toyota Verso). Needs manufacturer_id.","on_invalid":"reject","minimum":1,"maximum":9999999},{"name":"year_min","type":"integer","required":false,"description":"Earliest production year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"year_max","type":"integer","required":false,"description":"Latest production year.","on_invalid":"reject","minimum":1900,"maximum":2100},{"name":"price_min","type":"number","required":false,"description":"Lowest price in ILS (monthly rent for rentals). Listings without a price are left out.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in ILS (monthly rent for rentals). Listings without a price are left out.","on_invalid":"reject","minimum":0},{"name":"mileage_min","type":"number","required":false,"description":"Lowest mileage, km.","on_invalid":"reject","minimum":0},{"name":"mileage_max","type":"number","required":false,"description":"Highest mileage, km.","on_invalid":"reject","minimum":0},{"name":"hand_min","type":"integer","required":false,"description":"Fewest owners ('hand'): 0 = new from the importer, 1 = first hand.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"hand_max","type":"integer","required":false,"description":"Most owners ('hand').","on_invalid":"reject","minimum":0,"maximum":20},{"name":"engine_cc_min","type":"number","required":false,"description":"Smallest engine, cc.","on_invalid":"reject","minimum":0},{"name":"engine_cc_max","type":"number","required":false,"description":"Largest engine, cc.","on_invalid":"reject","minimum":0},{"name":"fuel","type":"array","required":false,"description":"One or more of petrol, diesel, hybrid_petrol, plugin_hybrid_petrol, electric.","on_invalid":"reject","allowed_values":[{"value":"petrol","label":"petrol"},{"value":"diesel","label":"diesel"},{"value":"hybrid_petrol","label":"hybrid_petrol"},{"value":"plugin_hybrid_petrol","label":"plugin_hybrid_petrol"},{"value":"electric","label":"electric"}]},{"name":"gearbox","type":"array","required":false,"description":"manual and/or automatic.","on_invalid":"reject","allowed_values":[{"value":"manual","label":"manual"},{"value":"automatic","label":"automatic"}]},{"name":"family_type","type":"array","required":false,"description":"One or more of mini, family, executive, sport, jeep, pickup, crossover.","on_invalid":"reject","allowed_values":[{"value":"mini","label":"mini"},{"value":"family","label":"family"},{"value":"executive","label":"executive"},{"value":"sport","label":"sport"},{"value":"jeep","label":"jeep"},{"value":"pickup","label":"pickup"},{"value":"crossover","label":"crossover"}]},{"name":"seats","type":"integer","required":false,"description":"Number of seats.","on_invalid":"reject","minimum":1,"maximum":60},{"name":"area_id","type":"integer","required":false,"description":"yad2 area id (e.g. 1 = Tel Aviv area, 9 = Rishon LeZion area). Every row returns its area id; the locations action returns them by name.","on_invalid":"reject","minimum":1,"maximum":999},{"name":"top_area_id","type":"integer","required":false,"description":"yad2 top-area id (e.g. 2 = Center, 25 = North, 100 = Jerusalem district).","on_invalid":"reject","minimum":1,"maximum":999},{"name":"seller_type","type":"enum","required":false,"description":"dealer = dealers and importers only. yad2 has no private-only filter; every row says seller_type.","on_invalid":"reject","allowed_values":[{"value":"dealer","label":"Dealers only"}]},{"name":"only_with_price","type":"boolean","required":false,"description":"Only listings that publish a price.","on_invalid":"reject"},{"name":"only_with_images","type":"boolean","required":false,"description":"Only listings with photos.","on_invalid":"reject"},{"name":"sort","type":"enum","required":false,"description":"price_asc or price_desc. Omitted: yad2's own order (paid tiers first).","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. yad2's own page size: 40 vehicle rows, 40 real-estate rows (20 private + 20 agency), 36 product rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, url, vertical, title, price (ILS), currency, price_not_published, price_placeholder, price_published_raw, vehicle_type, make{id,name,name_en}, model{id,name,name_en}, sub_model{id,name}, year, hand, hand_label, fuel{id,name,name_en}, engine_cc, motorcycle_type, licence_class, special_type, special_model, watercraft_type, area{id,name}, seller_type (dealer|private), dealer{id,name,logo}, promotion_tier, tags[], dealer_commitments[], payment_installments{advance_payment, monthly_payment, number_of_payments, balloon}, trade_in_offered, images[], image_count}, count, total, total_pages, page, has_more, vehicle_type, sort, placeholder_price_dropped","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"manufacturer_id":19}},{"name":"real_estate/search","description":"Search Yad2 real estate - apartments, houses and other property for sale or rent, and commercial property: price or monthly rent, earlier price after a price drop, property type, rooms, size, floor, full address with street, neighbourhood and map coordinates, private or agency with the agency's name, exclusivity, tags and photos. Location by region, city, area, neighbourhood or street id, or a place name resolved through Yad2's own address search. Filter by property type, rooms, price, size, floor, keyword, parking, elevator, balcony, safe room, air conditioning, accessibility, furnished, renovated, price dropped, new from contractor, agencies only.","required_params":["deal_type"],"optional_params":["region","location","city_id","area_id","neighborhood_id","street_id","property_type","rooms_min","rooms_max","price_min","price_max","size_min","size_max","floor_min","floor_max","query","seller_type","features","only_with_price","only_with_images","include_sponsored","page","include_pii","max_rotations"],"params":[{"name":"deal_type","type":"enum","required":true,"description":"sale, rent, commercial (both), commercial_sale or commercial_rent.","on_invalid":"reject","allowed_values":[{"value":"sale","label":"sale"},{"value":"rent","label":"rent"},{"value":"commercial","label":"commercial"},{"value":"commercial_sale","label":"commercial_sale"},{"value":"commercial_rent","label":"commercial_rent"}],"example":"rent"},{"name":"region","type":"integer","required":false,"description":"yad2 region: 1 Center & Sharon, 2 South, 3 Tel Aviv area, 4 Judea, Samaria & Jordan Valley, 5 Northern coast (Haifa), 6 Jerusalem area, 7 North & valleys, 8 Jerusalem. Required unless location is given.","on_invalid":"reject","example":3,"minimum":1,"maximum":8},{"name":"location","type":"string","required":false,"description":"A place name in Hebrew (city, neighbourhood, area or street), resolved with Yad2's own address search; the match used comes back as location_resolved. Replaces region/city/area/neighbourhood/street ids.","on_invalid":"reject","example":"פלורנטין"},{"name":"city_id","type":"string","required":false,"description":"yad2 city id (e.g. 5000 = Tel Aviv-Yafo). Must belong to region.","on_invalid":"reject"},{"name":"area_id","type":"integer","required":false,"description":"yad2 area id (e.g. 1 = Tel Aviv area, 9 = Rishon LeZion area). Every row returns its area id; the locations action returns them by name.","on_invalid":"reject","minimum":1,"maximum":999},{"name":"neighborhood_id","type":"string","required":false,"description":"yad2 neighbourhood id (locations action).","on_invalid":"reject"},{"name":"street_id","type":"string","required":false,"description":"yad2 street id (locations action).","on_invalid":"reject"},{"name":"property_type","type":"array","required":false,"description":"Residential: apartment, garden_apartment, studio_loft, house, rooftop_penthouse, duplex, triplex, semi_detached, housing_unit, vacation, parking, farm, plot, general, residential_building, storage, basement, purchase_group. Commercial: offices, shops, clinics, warehouses, plot, industrial, halls, general, office_building, parking_lot, basement, studio, hotel, coworking.","on_invalid":"reject","allowed_values":[{"value":"apartment","label":"apartment"},{"value":"garden_apartment","label":"garden_apartment"},{"value":"studio_loft","label":"studio_loft"},{"value":"house","label":"house"},{"value":"rooftop_penthouse","label":"rooftop_penthouse"},{"value":"duplex","label":"duplex"},{"value":"housing_unit","label":"housing_unit"},{"value":"vacation","label":"vacation"},{"value":"parking","label":"parking"},{"value":"farm","label":"farm"},{"value":"plot","label":"plot"},{"value":"semi_detached","label":"semi_detached"},{"value":"general","label":"general"},{"value":"residential_building","label":"residential_building"},{"value":"storage","label":"storage"},{"value":"basement","label":"basement"},{"value":"purchase_group","label":"purchase_group"},{"value":"triplex","label":"triplex"},{"value":"offices","label":"offices"},{"value":"shops","label":"shops"},{"value":"clinics","label":"clinics"},{"value":"warehouses","label":"warehouses"},{"value":"industrial","label":"industrial"},{"value":"halls","label":"halls"},{"value":"office_building","label":"office_building"},{"value":"parking_lot","label":"parking_lot"},{"value":"studio","label":"studio"},{"value":"hotel","label":"hotel"},{"value":"coworking","label":"coworking"}]},{"name":"rooms_min","type":"number","required":false,"description":"Fewest rooms (3.5 allowed).","on_invalid":"reject","minimum":0,"maximum":20},{"name":"rooms_max","type":"number","required":false,"description":"Most rooms.","on_invalid":"reject","minimum":0,"maximum":20},{"name":"price_min","type":"number","required":false,"description":"Lowest price in ILS (monthly rent for rentals). Listings without a price are left out.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in ILS (monthly rent for rentals). Listings without a price are left out.","on_invalid":"reject","minimum":0},{"name":"size_min","type":"number","required":false,"description":"Smallest size, m².","on_invalid":"reject","minimum":0},{"name":"size_max","type":"number","required":false,"description":"Largest size, m².","on_invalid":"reject","minimum":0},{"name":"floor_min","type":"integer","required":false,"description":"Lowest floor.","on_invalid":"reject","minimum":-5,"maximum":200},{"name":"floor_max","type":"integer","required":false,"description":"UNAVAILABLE: Yad2 stopped accepting a highest-floor filter on this search (measured 2026-10-04) and rejects the whole request when it is sent. Use floor_min, which still works.","on_invalid":"reject","minimum":-5,"maximum":200},{"name":"query","type":"string","required":false,"description":"UNAVAILABLE: Yad2 stopped accepting free text on this search (measured 2026-10-04) and rejects the whole request when it is sent, whatever the language. Narrow with region/area/city/neighbourhood, property_type and features instead.","on_invalid":"reject","example":"מרפסת שמש"},{"name":"seller_type","type":"enum","required":false,"description":"UNAVAILABLE: Yad2 stopped accepting an agency-only filter on this search (measured 2026-10-04) and rejects the whole request when it is sent. Every row still carries seller_type, so filter it on your side.","on_invalid":"reject","allowed_values":[{"value":"agency","label":"Agencies only"}]},{"name":"features","type":"array","required":false,"description":"One or more of parking, elevator, balcony, shelter (safe room), furnished, renovated. Yad2 stopped accepting air_conditioning, accessible, price_dropped and new_from_contractor (measured 2026-10-04) — it rejects the whole request when one is sent.","on_invalid":"reject","allowed_values":[{"value":"parking","label":"parking"},{"value":"elevator","label":"elevator"},{"value":"balcony","label":"balcony"},{"value":"shelter","label":"shelter"},{"value":"furnished","label":"furnished"},{"value":"renovated","label":"renovated"}]},{"name":"only_with_price","type":"boolean","required":false,"description":"Only listings that publish a price.","on_invalid":"reject"},{"name":"only_with_images","type":"boolean","required":false,"description":"Only listings with photos.","on_invalid":"reject"},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return Yad2's paid 'platinum' placements for this page, apart, under sponsored[].","on_invalid":"reject","default":false},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. yad2's own page size: 40 vehicle rows, 40 real-estate rows (20 private + 20 agency), 36 product rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' and brokers' personal names. Off by default; phone numbers are never returned.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, url, vertical, deal_type, title, price (ILS), currency, price_period (month for rentals), price_not_published, price_placeholder, price_published_raw, price_before_drop, price_dropped, property_type, rooms, size_m2, built_size_m2, property_condition_id, location{region, top_area, area, city, neighborhood, street, house_number, floor, latitude, longitude}, seller_type (private|agency), agency{name,logo}, is_exclusive, promotion_tier, is_sponsored, tags[], images[], video, image_count}, count, total, total_pages, page, has_more, deal_type, private_count, agency_count, sponsored_dropped, sponsored[] (include_sponsored), projects_dropped, location_resolved, placeholder_price_dropped","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"deal_type":"rent","region":3}},{"name":"products/search","description":"Browse Yad2's second-hand products section (business sellers: furniture, electrical appliances, phones, computers, businesses for sale and more) by category and sub-category: price (missing and placeholder prices labelled), condition, city and area, category breadcrumb, dates and photos. Filter by category, sub-category, price and area; sort by price. Yad2 offers no keyword search here.","required_params":[],"optional_params":["category_id","subcategory_id","price_min","price_max","area_id","sort","page","include_pii","max_rotations"],"params":[{"name":"category_id","type":"integer","required":false,"description":"yad2 category: 1 electrical appliances, 2 furniture, 4 musical instruments, 5 cellular, 6 computers, 9 work tools, 11 baby and child, 12 sport, 14 bicycles, 18 fashion, 20 photography, 25 office, 28 business equipment, 32 sanitary, 37 businesses for sale, 38 medical, 39 scooters, 40 stock, 45 home appliances, 49 gardening, 56 industrial, 61 portable housing, 69 events, 71 toys.","on_invalid":"reject","example":2,"minimum":1,"maximum":999},{"name":"subcategory_id","type":"integer","required":false,"description":"yad2 sub-category id (e.g. 14 = tables in furniture). Every row returns subcategory.id. Needs category_id.","on_invalid":"reject","minimum":1,"maximum":99999},{"name":"price_min","type":"number","required":false,"description":"Lowest price in ILS (monthly rent for rentals). Listings without a price are left out.","on_invalid":"reject","minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in ILS (monthly rent for rentals). Listings without a price are left out.","on_invalid":"reject","minimum":0},{"name":"area_id","type":"integer","required":false,"description":"yad2 area id (e.g. 1 = Tel Aviv area, 9 = Rishon LeZion area). Every row returns its area id; the locations action returns them by name.","on_invalid":"reject","minimum":1,"maximum":999},{"name":"sort","type":"enum","required":false,"description":"price_asc or price_desc. Omitted: newest first (yad2's own order).","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"price_asc"},{"value":"price_desc","label":"price_desc"}]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. yad2's own page size: 40 vehicle rows, 40 real-estate rows (20 private + 20 agency), 36 product rows.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":2000},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' and brokers' personal names. Off by default; phone numbers are never returned.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listings[]{ad_id, vertical, title, price, currency, price_not_published, price_placeholder, price_published_raw, category{id,name}, subcategory{id,name}, breadcrumb[], condition, city, area{id,name}, latitude, longitude (business sellers), created_at, bumped_at, seller_type, highlight, images[], image_count}, count, total, total_pages, page, has_more, breadcrumbs[], placeholder_price_dropped","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":2}},{"name":"locations","description":"Yad2's own address search: cities, neighbourhoods, areas and streets matching a Hebrew name, each with the region, area, city, neighbourhood and street ids that real_estate/search and cars/search accept.","required_params":["query"],"optional_params":["max_rotations"],"params":[{"name":"query","type":"string","required":true,"description":"Place name in Hebrew (at least 2 letters).","on_invalid":"reject","example":"חיפה"},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"locations[]{label, kind (city|neighborhood|area|street), kind_label, region_id, top_area_id, area_id, city_id, neighborhood_id, street_id}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"חיפה"}},{"name":"listing","description":"The full Yad2 listing by id or URL, from any section. Vehicles: mileage, gearbox, colour, horse power, seats, doors, body type, ownership and original ownership, test validity and last test mileage, fields the Ministry of Transport verified, equipment list, description, dealer, dates created/updated/bumped/expires. Real estate: price or rent and payments per year, price before a drop, rooms, size, built and garden size, floor of building floors, balconies, parking, entry date, condition, amenities, full address and coordinates, distance to a shelter, agency with licence numbers, description, dates. Products: title, price, category, condition, city, description, photos. Private sellers' names withheld.","required_params":["ad_id"],"optional_params":["vertical","include_pii","max_rotations"],"params":[{"name":"ad_id","type":"string","required":true,"description":"The yad2 listing token (e.g. 'inhp0uq0', the last part of a listing URL) or the full listing URL. Every search row returns it.","on_invalid":"reject","example":"inhp0uq0"},{"name":"vertical","type":"enum","required":false,"description":"Section of the listing, if known (saves lookups). A URL sets it.","on_invalid":"reject","allowed_values":[{"value":"vehicles","label":"Vehicles"},{"value":"real_estate","label":"Real estate"},{"value":"products","label":"Second-hand products"}]},{"name":"include_pii","type":"boolean","required":false,"description":"Return private sellers' and brokers' personal names. Off by default; phone numbers are never returned.","on_invalid":"reject","default":false},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5}],"returns":"listing{ad_id, ad_number, url, vertical, title, price, currency, price_not_published, price_placeholder, price_published_raw, description, images[], image_count, created_at, updated_at, bumped_at, expires_at, seller_type, … vehicle fields (mileage_km, gearbox, color, horse_power, ownership, test_valid_until, verified_by_ministry_of_transport, specification{}, dealer{}) | real-estate fields (deal_type, price_period, price_before_drop, payments_per_year, property_type, rooms, size_m2, amenities[], location{}, seller{name, name_withheld}, agency{name, logo, licence_number, about, brokers[]}) | product fields (category, product_condition_id, city, seller{business_name, contact_name_withheld})}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"ad_id":"inhp0uq0"}}]},{"name":"yahoo-auctions","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Yahoo Auctions Japan and Taiwan: JPY Japanese auctions, TWD Taiwan search and full item detail","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/yahoo-auctions/v1","spec_available":true,"actions":[{"name":"search","description":"Search live Yahoo! Auctions listings by keyword: auction id, title, image, the current price and buy-now price (tax included), bid and watch counts, end time, condition, category path, where it ships from, the shipping fee to your chosen prefecture, and the seller's id and positive rating. Filter by condition, individual/store/flea-market seller, auction or fixed price, price, buy-now price, free shipping, minimum bids, featured, new arrivals, prefecture, brand and category; sort by relevance, ending soon, newest, price, bids or buy-now price. Taiwan: keyword query, listing_format, first two source pages and local return limit; totals include excluded grouped cards.","required_params":["query"],"optional_params":["category_id","sort","page","limit","condition","seller_type","listing_format","price_min","price_max","buy_now_price_min","buy_now_price_max","has_buy_now","free_shipping","min_bids","featured_only","new_arrivals","item_location","shipping_destination","brand_id","exclude_suspected_fakes","max_rotations","country"],"params":[{"name":"query","type":"string","required":true,"description":"Keyword, in Japanese or English (both are matched, e.g. 'nintendo' also finds ニンテンドー).","on_invalid":"reject","example":"ポケモンカード","aliases":["q","keyword","p"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one category (and everything under it).","on_invalid":"reject","example":2084315794,"minimum":0,"aliases":["category","auccat"]},{"name":"sort","type":"enum","required":false,"description":"Order. Only orderings measured to change the results are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Yahoo! Auctions' own ranking (default)"},{"value":"ending_soon","label":"Ending soonest first"},{"value":"newest","label":"Most recently listed first"},{"value":"price_asc","label":"Lowest current price first"},{"value":"price_desc","label":"Highest current price first (topped by 9,999,999-yen placeholders)"},{"value":"most_bids","label":"Most bids first"},{"value":"buy_now_price_asc","label":"Lowest buy-now price first (listings with one)"},{"value":"featured","label":"Paid featured listings first (注目のオークション)"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Yahoo! Auctions serves results up to position 15,000 + limit; deeper pages are rejected. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"condition","type":"array","required":false,"description":"Item condition, Yahoo! Auctions' six grades. Several may be given, comma-separated.","on_invalid":"reject","allowed_values":[{"value":"new","label":"未使用 — unused"},{"value":"like_new","label":"未使用に近い — nearly unused"},{"value":"good","label":"目立った傷や汚れなし — no noticeable scratches or marks"},{"value":"fair","label":"やや傷や汚れあり — some scratches or marks"},{"value":"worn","label":"傷や汚れあり — scratches or marks"},{"value":"poor","label":"全体的に状態が悪い — poor overall condition"}],"example":"like_new","aliases":["item_condition"]},{"name":"seller_type","type":"array","required":false,"description":"Who is selling. Several may be given, comma-separated.","on_invalid":"reject","allowed_values":[{"value":"individual","label":"Private sellers on Yahoo! Auctions"},{"value":"store","label":"Registered stores (ストア)"},{"value":"fleamarket","label":"Yahoo!フリマ fixed-price flea-market listings shown in search"}],"example":"store"},{"name":"listing_format","type":"enum","required":false,"description":"Bidding auctions only, or fixed-price listings only.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Bidding listings (オークション形式)"},{"value":"fixed_price","label":"Fixed-price listings (定額)"}]},{"name":"price_min","type":"integer","required":false,"description":"Lowest current (or sold) price, whole yen, tax included.","on_invalid":"reject","example":5000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest current (or sold) price, whole yen, tax included.","on_invalid":"reject","example":20000,"minimum":0},{"name":"buy_now_price_min","type":"integer","required":false,"description":"Lowest buy-now (即決) price, whole yen. Implies listings that have one.","on_invalid":"reject","minimum":0},{"name":"buy_now_price_max","type":"integer","required":false,"description":"Highest buy-now (即決) price, whole yen.","on_invalid":"reject","minimum":0},{"name":"has_buy_now","type":"boolean","required":false,"description":"Only listings with a buy-now (即決) price.","on_invalid":"reject"},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings with free shipping (送料無料).","on_invalid":"reject"},{"name":"min_bids","type":"integer","required":false,"description":"Only listings with at least this many bids.","on_invalid":"reject","minimum":1},{"name":"featured_only","type":"boolean","required":false,"description":"Only paid featured listings (注目のオークション).","on_invalid":"reject"},{"name":"new_arrivals","type":"boolean","required":false,"description":"Only listings the site marks as new arrivals.","on_invalid":"reject"},{"name":"item_location","type":"string","required":false,"description":"Only listings shipped from these prefectures, by JIS number 1-47 (1 Hokkaido, 13 Tokyo, 23 Aichi, 27 Osaka, 40 Fukuoka), comma-separated.","on_invalid":"reject","example":"13","aliases":["location"]},{"name":"shipping_destination","type":"integer","required":false,"description":"Prefecture (JIS 1-47) the shipping fees are quoted for. Default 13 (Tokyo), as on the site. Fees differ by destination.","on_invalid":"reject","default":13,"example":27,"minimum":1,"maximum":47,"aliases":["destination_prefecture"]},{"name":"brand_id","type":"integer","required":false,"description":"Yahoo! Auctions brand id (every row returns `brand_id`).","on_invalid":"reject","example":102358,"minimum":1},{"name":"exclude_suspected_fakes","type":"boolean","required":false,"description":"Drop listings Yahoo! Auctions flags as suspected counterfeits (the site's default).","on_invalid":"reject","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"country","type":"enum","required":false,"description":"Japan is the default. Taiwan supports search and product/detail only; page1-2, limit1-60 and listing_format are qualified. Other filters/actions remain Japan-only.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan - JPY, existing actions"},{"value":"tw","label":"Taiwan - TWD, search and product/detail"}],"default":"jp","example":"tw","aliases":["market"]}],"returns":"items[]{auction_id, title, url, image, price (number, JPY, tax included - the current bid), buy_now_price (tax included, null when none), buy_now_price_excluding_tax, start_price_excluding_tax, currency, bid_count, watch_count, quantity, is_fixed_price, listing_type (individual|store|fleamarket), condition, condition_code, category{id, name, path[]{id, name}}, brand_id, catalog_id, item_location{code, name}, free_shipping, shipping_fee (to shipping_destination; null when the seller has not fixed one), shipping_fee_type, shipping_fee_timing (fixed|decided_after_sale|cash_on_delivery), buy_now_shipping_fee, seller{id, name (as published - on rows Yahoo prints a mask \"********\"), name_masked, url, positive_percent, is_store, is_best_store, city}, is_featured (paid placement), is_new_arrival, is_appraised, easy_payment, start_time, end_time, rating (null), review_count (null), rating_scale (null)}, count, total_results, page, has_more, filters{}, category_facets[]{id, name, count}, query","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"ポケモンカード","limit":20}},{"name":"sold/search","description":"Sold Yahoo! Auctions listings (落札相場) from roughly the last six months: the price each item actually sold for (tax included), bid count, end date, condition and seller, plus the average, lowest and highest sold price across every match. Search by keyword, category or seller; filter by condition, seller type and price. Japan only; Taiwan returns MARKET_UNAVAILABLE.","required_params":[],"optional_params":["query","category_id","seller_id","sort","page","limit","condition","seller_type","price_min","price_max","exclude_suspected_fakes","max_rotations","country"],"params":[{"name":"query","type":"string","required":false,"description":"Optional keyword to narrow the listing.","on_invalid":"reject","example":"ポケモンカード","aliases":["q","keyword","p"]},{"name":"category_id","type":"integer","required":false,"description":"Restrict to one category (and everything under it).","on_invalid":"reject","example":2084315794,"minimum":0,"aliases":["category","auccat"]},{"name":"seller_id","type":"string","required":false,"description":"Only this seller's sold listings (their sales history).","on_invalid":"reject","example":"z3pLoGidbEW4uPBUi5ZiuYGVtNyJ","aliases":["seller","user_id","auc_user_id"]},{"name":"sort","type":"enum","required":false,"description":"Order of sold listings.","on_invalid":"reject","allowed_values":[{"value":"recently_ended","label":"Most recently ended first (default)"},{"value":"oldest_ended","label":"Oldest first (the index reaches back about six months)"},{"value":"price_asc","label":"Lowest sold price first"},{"value":"price_desc","label":"Highest sold price first"},{"value":"most_bids","label":"Most bids first"},{"value":"fewest_bids","label":"Fewest bids first"}],"default":"recently_ended"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Yahoo! Auctions serves results up to position 15,000 + limit; deeper pages are rejected. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"condition","type":"array","required":false,"description":"Item condition, Yahoo! Auctions' six grades. Several may be given, comma-separated.","on_invalid":"reject","allowed_values":[{"value":"new","label":"未使用 — unused"},{"value":"like_new","label":"未使用に近い — nearly unused"},{"value":"good","label":"目立った傷や汚れなし — no noticeable scratches or marks"},{"value":"fair","label":"やや傷や汚れあり — some scratches or marks"},{"value":"worn","label":"傷や汚れあり — scratches or marks"},{"value":"poor","label":"全体的に状態が悪い — poor overall condition"}],"example":"like_new","aliases":["item_condition"]},{"name":"seller_type","type":"array","required":false,"description":"Who is selling. Several may be given, comma-separated.","on_invalid":"reject","allowed_values":[{"value":"individual","label":"Private sellers on Yahoo! Auctions"},{"value":"store","label":"Registered stores (ストア)"},{"value":"fleamarket","label":"Yahoo!フリマ fixed-price flea-market listings shown in search"}],"example":"store"},{"name":"price_min","type":"integer","required":false,"description":"Lowest current (or sold) price, whole yen, tax included.","on_invalid":"reject","example":5000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest current (or sold) price, whole yen, tax included.","on_invalid":"reject","example":20000,"minimum":0},{"name":"exclude_suspected_fakes","type":"boolean","required":false,"description":"Drop listings Yahoo! Auctions flags as suspected counterfeits (the site's default).","on_invalid":"reject","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"country","type":"enum","required":false,"description":"Japan is the default. Taiwan supports search and product/detail only; page1-2, limit1-60 and listing_format are qualified. Other filters/actions remain Japan-only.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan - JPY, existing actions"},{"value":"tw","label":"Taiwan - TWD, search and product/detail"}],"default":"jp","example":"tw","aliases":["market"]}],"returns":"items[]{sold_price, sold_at, auction_id, title, url, image, price (number, JPY, tax included - the current bid), buy_now_price (tax included, null when none), buy_now_price_excluding_tax, start_price_excluding_tax, currency, bid_count, watch_count, quantity, is_fixed_price, listing_type (individual|store|fleamarket), condition, condition_code, category{id, name, path[]{id, name}}, brand_id, catalog_id, item_location{code, name}, free_shipping, shipping_fee (to shipping_destination; null when the seller has not fixed one), shipping_fee_type, shipping_fee_timing (fixed|decided_after_sale|cash_on_delivery), buy_now_shipping_fee, seller{id, name (as published - on rows Yahoo prints a mask \"********\"), name_masked, url, positive_percent, is_store, is_best_store, city}, is_featured (paid placement), is_new_arrival, is_appraised, easy_payment, start_time, end_time, rating (null), review_count (null), rating_scale (null)}, count, total_results, page, has_more, filters{}, price_statistics{average, min, max, currency, over}, query","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":5},"example_params":{"query":"nintendo switch","limit":20}},{"name":"product/detail","description":"One Yahoo! Auctions auction in full, live or ended: title, full description, every image, the current or final price tax included (with the pre-tax figure and tax rate for stores), start and buy-now price, bids, bidders, watchers, quantity, start/end time and time left, auto-extension, condition, category path, brand, item specifics, the seller (name, positive %, good/bad counts, store and verification badges, prefecture), shipping (who pays, methods and the fee to your chosen prefecture, handling time, anonymous delivery) and the returns policy. Taiwan: published numeric or legacy letter-prefixed listing id or tw.bid.yahoo.com/item URL; full source JSON description, TWD auction/fixed prices and seller.","required_params":["auction_id"],"optional_params":["shipping_destination","max_rotations","country"],"params":[{"name":"auction_id","type":"string","required":true,"description":"Yahoo! Auctions auction id (the code at the end of /jp/auction/<id>, e.g. k1244566600; 8-11 digits, usually with one leading letter). A full auction URL works.","on_invalid":"reject","example":"k1244566600","aliases":["id","item_id","product_id","url"]},{"name":"shipping_destination","type":"integer","required":false,"description":"Prefecture (JIS 1-47) the shipping fees are quoted for. Default 13 (Tokyo), as on the site. Fees differ by destination.","on_invalid":"reject","default":13,"example":27,"minimum":1,"maximum":47,"aliases":["destination_prefecture"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"country","type":"enum","required":false,"description":"Japan is the default. Taiwan supports search and product/detail only; page1-2, limit1-60 and listing_format are qualified. Other filters/actions remain Japan-only.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan - JPY, existing actions"},{"value":"tw","label":"Taiwan - TWD, search and product/detail"}],"default":"jp","example":"tw","aliases":["market"]}],"returns":"item{auction_id, title, url, status (open|closed), is_ended, price (tax included), price_excluding_tax, tax_rate, start_price, buy_now_price, buy_now_price_excluding_tax, currency, bid_count, bidder_count, highest_bidders[]{name, name_masked, rating_summary}, highest_bidder_count, watch_count, quantity, start_time, end_time, time_left_seconds, auto_extension, early_end_allowed, price_negotiable, condition, condition_label, listing_type, description, images[], image, category{id, name, path[]}, brand{id, name, path[]}, product_name, catalog_id, item_specifics{}, gtin (null), seller{id, name, name_masked, url, positive_percent, rating_score, good_count, bad_count, is_store, is_best_store, is_excellent_seller, identity_verified, fast_shipper, location{code, name}}, shipping{paid_by (seller|buyer), free_shipping, destination{code, name}, fee_to_destination, methods[]{name, fee, is_official, anonymous, tracking}, ships_within, ships_from, anonymous_delivery_available, worldwide}, returns{accepted, note}, store_platform, is_featured, questions_answered, rating (null), review_count (null), rating_scale (null)}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":2},"example_params":{"auction_id":"k1244566600"}},{"name":"seller/listings","description":"A Yahoo! Auctions seller's profile and live listings: display name, store or individual, rating total and positive ratio, identity verification, fast-shipper badge and profile message, then the seller's current auctions with the same row fields, filters and sorts as search. Japan only; Taiwan returns MARKET_UNAVAILABLE.","required_params":["seller_id"],"optional_params":["query","sort","page","limit","condition","seller_type","listing_format","price_min","price_max","buy_now_price_min","buy_now_price_max","has_buy_now","free_shipping","min_bids","featured_only","new_arrivals","item_location","shipping_destination","brand_id","exclude_suspected_fakes","max_rotations","country"],"params":[{"name":"seller_id","type":"string","required":true,"description":"Seller id (the code in /seller/<id>). Every row returns it as `seller.id`. A seller page URL works.","on_invalid":"reject","example":"z3pLoGidbEW4uPBUi5ZiuYGVtNyJ","aliases":["seller","user_id","auc_user_id"]},{"name":"query","type":"string","required":false,"description":"Optional keyword to narrow the listing.","on_invalid":"reject","example":"ポケモンカード","aliases":["q","keyword","p"]},{"name":"sort","type":"enum","required":false,"description":"Order. Only orderings measured to change the results are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Yahoo! Auctions' own ranking (default)"},{"value":"ending_soon","label":"Ending soonest first"},{"value":"newest","label":"Most recently listed first"},{"value":"price_asc","label":"Lowest current price first"},{"value":"price_desc","label":"Highest current price first (topped by 9,999,999-yen placeholders)"},{"value":"most_bids","label":"Most bids first"},{"value":"buy_now_price_asc","label":"Lowest buy-now price first (listings with one)"},{"value":"featured","label":"Paid featured listings first (注目のオークション)"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Yahoo! Auctions serves results up to position 15,000 + limit; deeper pages are rejected. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"condition","type":"array","required":false,"description":"Item condition, Yahoo! Auctions' six grades. Several may be given, comma-separated.","on_invalid":"reject","allowed_values":[{"value":"new","label":"未使用 — unused"},{"value":"like_new","label":"未使用に近い — nearly unused"},{"value":"good","label":"目立った傷や汚れなし — no noticeable scratches or marks"},{"value":"fair","label":"やや傷や汚れあり — some scratches or marks"},{"value":"worn","label":"傷や汚れあり — scratches or marks"},{"value":"poor","label":"全体的に状態が悪い — poor overall condition"}],"example":"like_new","aliases":["item_condition"]},{"name":"seller_type","type":"array","required":false,"description":"Who is selling. Several may be given, comma-separated.","on_invalid":"reject","allowed_values":[{"value":"individual","label":"Private sellers on Yahoo! Auctions"},{"value":"store","label":"Registered stores (ストア)"},{"value":"fleamarket","label":"Yahoo!フリマ fixed-price flea-market listings shown in search"}],"example":"store"},{"name":"listing_format","type":"enum","required":false,"description":"Bidding auctions only, or fixed-price listings only.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Bidding listings (オークション形式)"},{"value":"fixed_price","label":"Fixed-price listings (定額)"}]},{"name":"price_min","type":"integer","required":false,"description":"Lowest current (or sold) price, whole yen, tax included.","on_invalid":"reject","example":5000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest current (or sold) price, whole yen, tax included.","on_invalid":"reject","example":20000,"minimum":0},{"name":"buy_now_price_min","type":"integer","required":false,"description":"Lowest buy-now (即決) price, whole yen. Implies listings that have one.","on_invalid":"reject","minimum":0},{"name":"buy_now_price_max","type":"integer","required":false,"description":"Highest buy-now (即決) price, whole yen.","on_invalid":"reject","minimum":0},{"name":"has_buy_now","type":"boolean","required":false,"description":"Only listings with a buy-now (即決) price.","on_invalid":"reject"},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings with free shipping (送料無料).","on_invalid":"reject"},{"name":"min_bids","type":"integer","required":false,"description":"Only listings with at least this many bids.","on_invalid":"reject","minimum":1},{"name":"featured_only","type":"boolean","required":false,"description":"Only paid featured listings (注目のオークション).","on_invalid":"reject"},{"name":"new_arrivals","type":"boolean","required":false,"description":"Only listings the site marks as new arrivals.","on_invalid":"reject"},{"name":"item_location","type":"string","required":false,"description":"Only listings shipped from these prefectures, by JIS number 1-47 (1 Hokkaido, 13 Tokyo, 23 Aichi, 27 Osaka, 40 Fukuoka), comma-separated.","on_invalid":"reject","example":"13","aliases":["location"]},{"name":"shipping_destination","type":"integer","required":false,"description":"Prefecture (JIS 1-47) the shipping fees are quoted for. Default 13 (Tokyo), as on the site. Fees differ by destination.","on_invalid":"reject","default":13,"example":27,"minimum":1,"maximum":47,"aliases":["destination_prefecture"]},{"name":"brand_id","type":"integer","required":false,"description":"Yahoo! Auctions brand id (every row returns `brand_id`).","on_invalid":"reject","example":102358,"minimum":1},{"name":"exclude_suspected_fakes","type":"boolean","required":false,"description":"Drop listings Yahoo! Auctions flags as suspected counterfeits (the site's default).","on_invalid":"reject","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"country","type":"enum","required":false,"description":"Japan is the default. Taiwan supports search and product/detail only; page1-2, limit1-60 and listing_format are qualified. Other filters/actions remain Japan-only.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan - JPY, existing actions"},{"value":"tw","label":"Taiwan - TWD, search and product/detail"}],"default":"jp","example":"tw","aliases":["market"]}],"returns":"seller{id, name, name_masked, url, is_store, store_url, rating_total, positive_percent, identity_verified, fast_shipper, profile_message, icon}, items[]{auction_id, title, url, image, price (number, JPY, tax included - the current bid), buy_now_price (tax included, null when none), buy_now_price_excluding_tax, start_price_excluding_tax, currency, bid_count, watch_count, quantity, is_fixed_price, listing_type (individual|store|fleamarket), condition, condition_code, category{id, name, path[]{id, name}}, brand_id, catalog_id, item_location{code, name}, free_shipping, shipping_fee (to shipping_destination; null when the seller has not fixed one), shipping_fee_type, shipping_fee_timing (fixed|decided_after_sale|cash_on_delivery), buy_now_shipping_fee, seller{id, name (as published - on rows Yahoo prints a mask \"********\"), name_masked, url, positive_percent, is_store, is_best_store, city}, is_featured (paid placement), is_new_arrival, is_appraised, easy_payment, start_time, end_time, rating (null), review_count (null), rating_scale (null)}, count, total_results, page, has_more, filters{}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"seller_id":"z3pLoGidbEW4uPBUi5ZiuYGVtNyJ"}},{"name":"category/products","description":"Browse one Yahoo! Auctions category: the category's name, parent and sub-categories, then its live listings with the same row fields, filters and sorts as search (a keyword is optional). Japan only; Taiwan returns MARKET_UNAVAILABLE.","required_params":["category_id"],"optional_params":["query","sort","page","limit","condition","seller_type","listing_format","price_min","price_max","buy_now_price_min","buy_now_price_max","has_buy_now","free_shipping","min_bids","featured_only","new_arrivals","item_location","shipping_destination","brand_id","exclude_suspected_fakes","max_rotations","country"],"params":[{"name":"category_id","type":"integer","required":true,"description":"Yahoo! Auctions category id (the number in /category/list/<id>/). `categories` walks the tree; every row returns `category.id`.","on_invalid":"reject","example":2084315794,"minimum":1,"aliases":["category","auccat"]},{"name":"query","type":"string","required":false,"description":"Optional keyword to narrow the listing.","on_invalid":"reject","example":"ポケモンカード","aliases":["q","keyword","p"]},{"name":"sort","type":"enum","required":false,"description":"Order. Only orderings measured to change the results are accepted.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Yahoo! Auctions' own ranking (default)"},{"value":"ending_soon","label":"Ending soonest first"},{"value":"newest","label":"Most recently listed first"},{"value":"price_asc","label":"Lowest current price first"},{"value":"price_desc","label":"Highest current price first (topped by 9,999,999-yen placeholders)"},{"value":"most_bids","label":"Most bids first"},{"value":"buy_now_price_asc","label":"Lowest buy-now price first (listings with one)"},{"value":"featured","label":"Paid featured listings first (注目のオークション)"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. Yahoo! Auctions serves results up to position 15,000 + limit; deeper pages are rejected. A page past the end returns an empty list.","on_invalid":"reject","default":1,"minimum":1},{"name":"limit","type":"integer","required":false,"description":"Listings per page, 1-100 (default 50).","on_invalid":"reject","default":50,"minimum":1,"maximum":100,"aliases":["page_size"]},{"name":"condition","type":"array","required":false,"description":"Item condition, Yahoo! Auctions' six grades. Several may be given, comma-separated.","on_invalid":"reject","allowed_values":[{"value":"new","label":"未使用 — unused"},{"value":"like_new","label":"未使用に近い — nearly unused"},{"value":"good","label":"目立った傷や汚れなし — no noticeable scratches or marks"},{"value":"fair","label":"やや傷や汚れあり — some scratches or marks"},{"value":"worn","label":"傷や汚れあり — scratches or marks"},{"value":"poor","label":"全体的に状態が悪い — poor overall condition"}],"example":"like_new","aliases":["item_condition"]},{"name":"seller_type","type":"array","required":false,"description":"Who is selling. Several may be given, comma-separated.","on_invalid":"reject","allowed_values":[{"value":"individual","label":"Private sellers on Yahoo! Auctions"},{"value":"store","label":"Registered stores (ストア)"},{"value":"fleamarket","label":"Yahoo!フリマ fixed-price flea-market listings shown in search"}],"example":"store"},{"name":"listing_format","type":"enum","required":false,"description":"Bidding auctions only, or fixed-price listings only.","on_invalid":"reject","allowed_values":[{"value":"auction","label":"Bidding listings (オークション形式)"},{"value":"fixed_price","label":"Fixed-price listings (定額)"}]},{"name":"price_min","type":"integer","required":false,"description":"Lowest current (or sold) price, whole yen, tax included.","on_invalid":"reject","example":5000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Highest current (or sold) price, whole yen, tax included.","on_invalid":"reject","example":20000,"minimum":0},{"name":"buy_now_price_min","type":"integer","required":false,"description":"Lowest buy-now (即決) price, whole yen. Implies listings that have one.","on_invalid":"reject","minimum":0},{"name":"buy_now_price_max","type":"integer","required":false,"description":"Highest buy-now (即決) price, whole yen.","on_invalid":"reject","minimum":0},{"name":"has_buy_now","type":"boolean","required":false,"description":"Only listings with a buy-now (即決) price.","on_invalid":"reject"},{"name":"free_shipping","type":"boolean","required":false,"description":"Only listings with free shipping (送料無料).","on_invalid":"reject"},{"name":"min_bids","type":"integer","required":false,"description":"Only listings with at least this many bids.","on_invalid":"reject","minimum":1},{"name":"featured_only","type":"boolean","required":false,"description":"Only paid featured listings (注目のオークション).","on_invalid":"reject"},{"name":"new_arrivals","type":"boolean","required":false,"description":"Only listings the site marks as new arrivals.","on_invalid":"reject"},{"name":"item_location","type":"string","required":false,"description":"Only listings shipped from these prefectures, by JIS number 1-47 (1 Hokkaido, 13 Tokyo, 23 Aichi, 27 Osaka, 40 Fukuoka), comma-separated.","on_invalid":"reject","example":"13","aliases":["location"]},{"name":"shipping_destination","type":"integer","required":false,"description":"Prefecture (JIS 1-47) the shipping fees are quoted for. Default 13 (Tokyo), as on the site. Fees differ by destination.","on_invalid":"reject","default":13,"example":27,"minimum":1,"maximum":47,"aliases":["destination_prefecture"]},{"name":"brand_id","type":"integer","required":false,"description":"Yahoo! Auctions brand id (every row returns `brand_id`).","on_invalid":"reject","example":102358,"minimum":1},{"name":"exclude_suspected_fakes","type":"boolean","required":false,"description":"Drop listings Yahoo! Auctions flags as suspected counterfeits (the site's default).","on_invalid":"reject","default":true},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"country","type":"enum","required":false,"description":"Japan is the default. Taiwan supports search and product/detail only; page1-2, limit1-60 and listing_format are qualified. Other filters/actions remain Japan-only.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan - JPY, existing actions"},{"value":"tw","label":"Taiwan - TWD, search and product/detail"}],"default":"jp","example":"tw","aliases":["market"]}],"returns":"category{id, name, is_leaf, open_listing_count}, parent{id, name}, children[]{id, name, is_leaf}, items[]{auction_id, title, url, image, price (number, JPY, tax included - the current bid), buy_now_price (tax included, null when none), buy_now_price_excluding_tax, start_price_excluding_tax, currency, bid_count, watch_count, quantity, is_fixed_price, listing_type (individual|store|fleamarket), condition, condition_code, category{id, name, path[]{id, name}}, brand_id, catalog_id, item_location{code, name}, free_shipping, shipping_fee (to shipping_destination; null when the seller has not fixed one), shipping_fee_type, shipping_fee_timing (fixed|decided_after_sale|cash_on_delivery), buy_now_shipping_fee, seller{id, name (as published - on rows Yahoo prints a mask \"********\"), name_masked, url, positive_percent, is_store, is_best_store, city}, is_featured (paid placement), is_new_arrival, is_appraised, easy_payment, start_time, end_time, rating (null), review_count (null), rating_scale (null)}, count, total_results, page, has_more, filters{}","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":2084315794}},{"name":"categories","description":"The Yahoo! Auctions category tree one level at a time: a category's name, whether it is a leaf, how many live listings it holds, its parent, and its sub-categories with their ids. Japan only; Taiwan returns MARKET_UNAVAILABLE.","required_params":[],"optional_params":["category_id","max_rotations","country"],"params":[{"name":"category_id","type":"integer","required":false,"description":"Category to open; 0 (default) is the top level.","on_invalid":"reject","default":0,"example":25464,"minimum":0,"aliases":["category"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"country","type":"enum","required":false,"description":"Japan is the default. Taiwan supports search and product/detail only; page1-2, limit1-60 and listing_format are qualified. Other filters/actions remain Japan-only.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan - JPY, existing actions"},{"value":"tw","label":"Taiwan - TWD, search and product/detail"}],"default":"jp","example":"tw","aliases":["market"]}],"returns":"category{id, name, is_leaf, open_listing_count}, parent{id, name}, children[]{id, name, is_leaf}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":25464}},{"name":"suggest","description":"Yahoo! Auctions' own keyword suggestions for the start of a search term. Japan only; Taiwan returns MARKET_UNAVAILABLE.","required_params":["query"],"optional_params":["max_rotations","country"],"params":[{"name":"query","type":"string","required":true,"description":"The start of a keyword.","on_invalid":"reject","example":"ポケモン","aliases":["q","keyword"]},{"name":"max_rotations","type":"integer","required":false,"description":"Advanced: how many times to retry a difficult request (1-5).","on_invalid":"ignore","default":3,"minimum":1,"maximum":5},{"name":"country","type":"enum","required":false,"description":"Japan is the default. Taiwan supports search and product/detail only; page1-2, limit1-60 and listing_format are qualified. Other filters/actions remain Japan-only.","on_invalid":"reject","allowed_values":[{"value":"jp","label":"Japan - JPY, existing actions"},{"value":"tw","label":"Taiwan - TWD, search and product/detail"}],"default":"jp","example":"tw","aliases":["market"]}],"returns":"query, suggestions[], count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ポケモンカード"}}]},{"name":"yahoo-japan-search","category":{"id":"search-seo","title":"Search & SEO"},"title":"Yahoo! JAPAN Search API — web results with ads, images, videos, news, realtime posts on X, 知恵袋 Q&A and search suggestions from search.yahoo.co.jp","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/yahoo-japan-search/v1","spec_available":true,"actions":[{"name":"search","description":"The Yahoo! JAPAN web results page (search.yahoo.co.jp) as a person in Japan sees it: organic results with title, URL, displayed URL, snippet, date, sitelinks, star rating and video data; the paid ads above, between and below them; related searches; related questions with Yahoo's AI answers and their sources; and the blocks Yahoo mixes into the page — news, images, videos, 知恵袋 Q&A, posts on X, a knowledge panel, stock and currency answer boxes. 10 results a page; date and language filters. Results are localised to the Japanese city Yahoo places the visitor in, which follows the network exit used for the call and can change between calls (local queries such as hotels or restaurants differ most); there is no location parameter, and search_information.local_area names the area when the page shows a local block. Ad `link` and sitelink links are Yahoo's ad click links (rd.listing.yahoo.co.jp): opening one counts as a paid click; `displayed_url` and `domain` name the advertiser's site.","required_params":["query"],"optional_params":["page","period","language"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Japanese or English, exactly as you would type them into Yahoo! JAPAN (operators such as \"quoted phrase\" and site: are passed through). Full-width letters and digits are normalised.","on_invalid":"reject","example":"富士山","aliases":["q","p","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 10 results per page (1-100).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"period","type":"enum","required":false,"description":"Only pages updated within this period (Yahoo's 最終更新 filter).","on_invalid":"reject","allowed_values":[{"value":"any","label":"any time (default)"},{"value":"hour","label":"past hour"},{"value":"day","label":"past 24 hours"},{"value":"week","label":"past week"},{"value":"month","label":"past month"},{"value":"3months","label":"past 3 months"},{"value":"6months","label":"past 6 months"},{"value":"year","label":"past year"}],"default":"any","aliases":["time","vd"]},{"name":"language","type":"string","required":false,"description":"Only pages in this language, as a 2-letter code (ja, en, ko, zh, fr, de, …; Yahoo's 言語 filter, 36 languages).","on_invalid":"reject","example":"ja","aliases":["lang","hl"]}],"returns":"query, page, total_results (as printed), organic_results[]{position, title, url, displayed_url, breadcrumbs[], site_name, snippet, date, sitelinks[]{title, url, snippet}, rating{value, review_count}, video{duration, source, uploader, upload_date}, thumbnail}, ads[]{position, block (top|middle|bottom), title, snippet, displayed_url, domain, advertiser, link, sitelinks[]}, related_searches[]{query}, explore_queries[], related_questions[]{question, answer, sources[]}, top_stories[], inline_images[], inline_videos[], chiebukuro[], realtime_posts[], knowledge_panel, answer_box, modules[], pagination{current, has_next, last_page_reached}, search_information{exit_country, ads_included, local_area{area, latitude, longitude}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"富士山"}},{"name":"images","description":"Yahoo! JAPAN image search: 20 images a page with the full-size image URL and size, the Yahoo-hosted copy and thumbnail, the page it comes from, the site name and format; plus related searches, the refinement chips and any did-you-mean rewrite. Size, colour, type and period filters.","required_params":["query"],"optional_params":["page","size","color","type","period"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Japanese or English, exactly as you would type them into Yahoo! JAPAN (operators such as \"quoted phrase\" and site: are passed through). Full-width letters and digits are normalised.","on_invalid":"reject","example":"猫","aliases":["q","p","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 20 results per page (1-50).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"size","type":"enum","required":false,"description":"Image size.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any size"},{"value":"large","label":"大 large"},{"value":"medium","label":"中 medium"},{"value":"icon","label":"アイコンサイズ icon"}],"default":"any"},{"name":"color","type":"enum","required":false,"description":"Colour.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any colour"},{"value":"black_and_white","label":"白黒"},{"value":"transparent","label":"透明 transparent background"}],"default":"any","aliases":["colour"]},{"name":"type","type":"enum","required":false,"description":"Image type.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any type"},{"value":"line_drawing","label":"線画 line drawing"},{"value":"animated","label":"GIF animation"}],"default":"any"},{"name":"period","type":"enum","required":false,"description":"Only images found within this period.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any time"},{"value":"day","label":"past 24 hours"},{"value":"week","label":"past week"},{"value":"month","label":"past month"},{"value":"year","label":"past year"}],"default":"any","aliases":["time"]}],"returns":"query, page, total_results, results[]{position, id, title, original, original_width, original_height, image, thumbnail, format, source_url, source, domain, date}, related_searches[], refinements[], spelling, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"猫"}},{"name":"videos","description":"Yahoo! JAPAN video search across YouTube, Dailymotion, niconico and other sites: 20 videos a page with the watch URL, title, site, channel, duration, upload date, description, thumbnail and preview clip. Duration, period, site and HD filters.","required_params":["query"],"optional_params":["page","duration","period","site","hd"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Japanese or English, exactly as you would type them into Yahoo! JAPAN (operators such as \"quoted phrase\" and site: are passed through). Full-width letters and digits are normalised.","on_invalid":"reject","example":"猫","aliases":["q","p","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 20 results per page (1-50).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"duration","type":"enum","required":false,"description":"Video length.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any length"},{"value":"short","label":"under 4 minutes"},{"value":"medium","label":"4 to 20 minutes"},{"value":"long","label":"over 20 minutes"}],"default":"any"},{"name":"period","type":"enum","required":false,"description":"Uploaded within this period.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any time"},{"value":"hour","label":"past hour"},{"value":"day","label":"past 24 hours"},{"value":"week","label":"past week"},{"value":"month","label":"past month"},{"value":"year","label":"past year"}],"default":"any","aliases":["time"]},{"name":"site","type":"enum","required":false,"description":"Only videos from this site.","on_invalid":"reject","allowed_values":[{"value":"any","label":"every site"},{"value":"youtube","label":"YouTube"},{"value":"dailymotion","label":"Dailymotion"},{"value":"niconico","label":"ニコニコ動画"}],"default":"any"},{"name":"hd","type":"boolean","required":false,"description":"Only HD videos (高画質).","on_invalid":"reject","default":false}],"returns":"query, page, total_results, results[]{position, id, title, url, site, source, channel, duration, description, published, thumbnail, preview}, related_searches[], has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"富士山"}},{"name":"news","description":"Yahoo! News (news.yahoo.co.jp) article search, newest first: 50 articles a page with headline, the matching passage, publisher, categories, publish time (Japan time) and article URL. Category filter.","required_params":["query"],"optional_params":["page","category"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Japanese or English, exactly as you would type them into Yahoo! JAPAN (operators such as \"quoted phrase\" and site: are passed through). Full-width letters and digits are normalised.","on_invalid":"reject","example":"日銀","aliases":["q","p","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 50 results per page (1-20).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":20},{"name":"category","type":"enum","required":false,"description":"Only articles in this Yahoo! News category.","on_invalid":"reject","allowed_values":[{"value":"all","label":"every category"},{"value":"domestic","label":"国内 domestic"},{"value":"world","label":"国際 world"},{"value":"business","label":"経済 business"},{"value":"entertainment","label":"エンタメ entertainment"},{"value":"sports","label":"スポーツ sports"},{"value":"it","label":"IT"},{"value":"science","label":"科学 science"},{"value":"life","label":"ライフ life"},{"value":"local","label":"地域 local"}],"default":"all"}],"returns":"query, page, total_results, results[]{position, id, title, url, snippet, source, source_id, categories[], article_type, published_text, published_at, has_video, thumbnail}, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"日銀"}},{"name":"realtime","description":"Yahoo! JAPAN realtime search (リアルタイム検索): public posts on X matching the query, newest first or most popular, with text, author, time, replies / reposts / quotes / likes, hashtags, links and media; Yahoo's featured post and the trending topics it shows beside them. Up to 40 posts on the first call; pass `next_cursor` back for older posts (10 per call, newest-first order only).","required_params":["query"],"optional_params":["sort","media","cursor"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Japanese or English, exactly as you would type them into Yahoo! JAPAN (operators such as \"quoted phrase\" and site: are passed through). Full-width letters and digits are normalised.","on_invalid":"reject","example":"ポケモン","aliases":["q","p","keyword"]},{"name":"sort","type":"enum","required":false,"description":"Order of posts.","on_invalid":"reject","allowed_values":[{"value":"recent","label":"新着順 newest first (pages with cursor)"},{"value":"popular","label":"話題順 most engaging (one page of 40)"}],"default":"recent"},{"name":"media","type":"enum","required":false,"description":"Only posts with media.","on_invalid":"reject","allowed_values":[{"value":"all","label":"every post"},{"value":"image","label":"posts with images"},{"value":"video","label":"posts with videos"}],"default":"all"},{"name":"cursor","type":"string","required":false,"description":"`next_cursor` from the previous call, unchanged, for the next 10 older posts (newest-first order).","on_invalid":"reject","example":""}],"returns":"query, sort, total_results, results[]{id, url, text, date, user{name, screen_name, id, profile_image, badge}, replies, reposts, quotes, likes, hashtags[], links[], media[], in_reply_to, quoted_post_id, possibly_sensitive}, best_post, trending[], next_cursor","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"富士山"}},{"name":"chiebukuro","description":"Yahoo! 知恵袋 (Yahoo! Chiebukuro, Japan's largest Q&A site) question search: 10 questions a page with title, the start of the question, status (open / resolved / voting), posted time, answer count, view count and category path. Status filter and the site's eleven sort orders.","required_params":["query"],"optional_params":["page","status","sort"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Japanese or English, exactly as you would type them into Yahoo! JAPAN (operators such as \"quoted phrase\" and site: are passed through). Full-width letters and digits are normalised.","on_invalid":"reject","example":"確定申告","aliases":["q","p","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 10 results per page (1-100).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"status","type":"enum","required":false,"description":"Question status.","on_invalid":"reject","allowed_values":[{"value":"all","label":"every question"},{"value":"open","label":"回答受付中 open"},{"value":"resolved","label":"解決済み resolved"}],"default":"all"},{"name":"sort","type":"enum","required":false,"description":"Order (the site's own).","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"関連度順"},{"value":"newest","label":"質問日時の新しい順"},{"value":"oldest","label":"質問日時の古い順"},{"value":"updated_newest","label":"更新日時の新しい順"},{"value":"updated_oldest","label":"更新日時の古い順"},{"value":"most_answers","label":"回答数の多い順"},{"value":"fewest_answers","label":"回答数の少ない順"},{"value":"most_views","label":"閲覧数の多い順"},{"value":"fewest_views","label":"閲覧数の少ない順"},{"value":"most_thanks","label":"お礼の多い順"},{"value":"fewest_thanks","label":"お礼の少ない順"}],"default":"relevance"}],"returns":"query, page, total_results, results[]{position, question_id, url, title, snippet, status, status_text, posted, posted_at, answer_count, view_count, category_path[], category_id}, has_more","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"富士山"}},{"name":"suggest","description":"Yahoo! JAPAN search-box suggestions (the autocomplete list) for what has been typed so far, in Japanese or English, kana or kanji.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"What has been typed so far (kana, kanji or latin).","on_invalid":"reject","example":"ふじさ","aliases":["q","p","keyword"]}],"returns":"query, suggestions[]{position, suggestion, kind}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"ふじさ"}}]},{"name":"yahoo-search","category":{"id":"search-seo","title":"Search & SEO"},"title":"Yahoo Search API — web results with ads, People also ask answers, local results, knowledge graph, news, images, videos and suggestions from search.yahoo.com and 36 country sites","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/yahoo-search/v1","spec_available":true,"actions":[{"name":"search","description":"The Yahoo web results page (search.yahoo.com or a country site) as a person sees it: organic results with title, URL, displayed URL, site name, date, snippet, sitelinks and extra paragraphs; the paid ads above and below them with advertiser, landing URL, sitelinks and callouts; People also ask with Yahoo's written answer; local results (rating, reviews, price, type, address, phone, hours, website, menu, coordinates); a knowledge graph card; inline videos (incl. TikTok) and images; top stories; related and trending searches. 7 results a page (Yahoo's own size); `count` up to 35 fetches the following pages too.","required_params":["query"],"optional_params":["country","page","count","time","tld"],"params":[{"name":"query","type":"string","required":true,"description":"What you would type into Yahoo's search box. Operators Yahoo itself understands (\"exact phrase\", site:, -word) are passed through unchanged.","on_invalid":"reject","example":"coinbase alternatives","aliases":["q","p","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Yahoo country site answers (search.yahoo.com, uk.search.yahoo.com, de.search.yahoo.com, …). Results, ads, news and suggestions are that site's own.","on_invalid":"reject","allowed_values":[{"value":"us","label":"search.yahoo.com"},{"value":"uk","label":"uk.search.yahoo.com"},{"value":"ca","label":"ca.search.yahoo.com"},{"value":"ie","label":"ie.search.yahoo.com"},{"value":"in","label":"in.search.yahoo.com"},{"value":"sg","label":"sg.search.yahoo.com"},{"value":"ph","label":"ph.search.yahoo.com"},{"value":"my","label":"malaysia.search.yahoo.com"},{"value":"id","label":"id.search.yahoo.com"},{"value":"vn","label":"vn.search.yahoo.com"},{"value":"tw","label":"tw.search.yahoo.com"},{"value":"hk","label":"hk.search.yahoo.com"},{"value":"za","label":"za.search.yahoo.com"},{"value":"fr","label":"fr.search.yahoo.com"},{"value":"be","label":"be.search.yahoo.com"},{"value":"ch","label":"ch.search.yahoo.com"},{"value":"de","label":"de.search.yahoo.com"},{"value":"at","label":"at.search.yahoo.com"},{"value":"es","label":"es.search.yahoo.com"},{"value":"it","label":"it.search.yahoo.com"},{"value":"nl","label":"nl.search.yahoo.com"},{"value":"se","label":"se.search.yahoo.com"},{"value":"no","label":"no.search.yahoo.com"},{"value":"dk","label":"dk.search.yahoo.com"},{"value":"fi","label":"fi.search.yahoo.com"},{"value":"gr","label":"gr.search.yahoo.com"},{"value":"ro","label":"ro.search.yahoo.com"},{"value":"pl","label":"pl.search.yahoo.com"},{"value":"tr","label":"tr.search.yahoo.com"},{"value":"il","label":"il.search.yahoo.com"},{"value":"br","label":"br.search.yahoo.com"},{"value":"mx","label":"mx.search.yahoo.com"},{"value":"ar","label":"ar.search.yahoo.com"},{"value":"co","label":"co.search.yahoo.com"},{"value":"cl","label":"cl.search.yahoo.com"},{"value":"pe","label":"pe.search.yahoo.com"},{"value":"ve","label":"ve.search.yahoo.com"}],"default":"us","example":"us","value_pattern":"[Gg][Bb]|[Uu][Ss][Aa]","aliases":["gl","vc","market","cc"]},{"name":"page","type":"integer","required":false,"description":"Result page, 7 results a page (Yahoo's own page size).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"count","type":"integer","required":false,"description":"How many organic results to return (1-35). Yahoo prints 7 a page; above 7 the next pages are fetched at the same time (one Yahoo page per 7 results). Ads and the other blocks come from the first page.","on_invalid":"reject","default":7,"example":7,"minimum":1,"maximum":35,"aliases":["num"]},{"name":"time","type":"enum","required":false,"description":"Only pages updated within this period (Yahoo's time filter).","on_invalid":"reject","allowed_values":[{"value":"any","label":"any time"},{"value":"day","label":"past day"},{"value":"week","label":"past week"},{"value":"month","label":"past month"}],"default":"any","value_pattern":"d|w|m|all","aliases":["freshness","btf","time_range"]},{"name":"tld","type":"string","required":false,"description":"Only results from these top-level domains, comma separated (\".gov\", \".edu,.org\", \".co.uk\"). Yahoo's own TLD filter.","on_invalid":"reject","example":".gov","aliases":["vs","domain_filter"]}],"returns":"query, country, page, organic_results[]{position, title, url, displayed_url, domain, site_name, favicon, snippet, date, sitelinks[]{title, url}, extensions[]}, ads[]{position, block (top|bottom), title, url, displayed_url, advertiser, domain, description, sitelinks[], extensions[]}, people_also_ask[]{question, answer, answer_type}, local_results{location, places[]{position, place_id, title, rating, reviews, reviews_source, price, type, address, phone, status, hours, website, menu, thumbnail, gps_coordinates}}, knowledge_graph{title, type, description, image, website, source, facts{}, related[]}, inline_videos[], inline_images[], top_stories[], related_searches[], trending_searches[], total_results, pagination{current, has_next, next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"coinbase alternatives"}},{"name":"news","description":"Yahoo News search (news.search.yahoo.com or a country site): 10 articles a page with headline, URL, publisher, the outlet it ran via, age, snippet and thumbnail. Time window and newest-first.","required_params":["query"],"optional_params":["country","page","time","sort"],"params":[{"name":"query","type":"string","required":true,"description":"What you would type into Yahoo's search box. Operators Yahoo itself understands (\"exact phrase\", site:, -word) are passed through unchanged.","on_invalid":"reject","example":"federal reserve","aliases":["q","p","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Yahoo country site answers (search.yahoo.com, uk.search.yahoo.com, de.search.yahoo.com, …). Results, ads, news and suggestions are that site's own.","on_invalid":"reject","allowed_values":[{"value":"us","label":"search.yahoo.com"},{"value":"uk","label":"uk.search.yahoo.com"},{"value":"ca","label":"ca.search.yahoo.com"},{"value":"ie","label":"ie.search.yahoo.com"},{"value":"in","label":"in.search.yahoo.com"},{"value":"sg","label":"sg.search.yahoo.com"},{"value":"ph","label":"ph.search.yahoo.com"},{"value":"my","label":"malaysia.search.yahoo.com"},{"value":"id","label":"id.search.yahoo.com"},{"value":"vn","label":"vn.search.yahoo.com"},{"value":"tw","label":"tw.search.yahoo.com"},{"value":"hk","label":"hk.search.yahoo.com"},{"value":"za","label":"za.search.yahoo.com"},{"value":"fr","label":"fr.search.yahoo.com"},{"value":"be","label":"be.search.yahoo.com"},{"value":"ch","label":"ch.search.yahoo.com"},{"value":"de","label":"de.search.yahoo.com"},{"value":"at","label":"at.search.yahoo.com"},{"value":"es","label":"es.search.yahoo.com"},{"value":"it","label":"it.search.yahoo.com"},{"value":"nl","label":"nl.search.yahoo.com"},{"value":"se","label":"se.search.yahoo.com"},{"value":"no","label":"no.search.yahoo.com"},{"value":"dk","label":"dk.search.yahoo.com"},{"value":"fi","label":"fi.search.yahoo.com"},{"value":"gr","label":"gr.search.yahoo.com"},{"value":"ro","label":"ro.search.yahoo.com"},{"value":"pl","label":"pl.search.yahoo.com"},{"value":"tr","label":"tr.search.yahoo.com"},{"value":"il","label":"il.search.yahoo.com"},{"value":"br","label":"br.search.yahoo.com"},{"value":"mx","label":"mx.search.yahoo.com"},{"value":"ar","label":"ar.search.yahoo.com"},{"value":"co","label":"co.search.yahoo.com"},{"value":"cl","label":"cl.search.yahoo.com"},{"value":"pe","label":"pe.search.yahoo.com"},{"value":"ve","label":"ve.search.yahoo.com"}],"default":"us","example":"us","value_pattern":"[Gg][Bb]|[Uu][Ss][Aa]","aliases":["gl","vc","market","cc"]},{"name":"page","type":"integer","required":false,"description":"Result page, 10 results a page (Yahoo's own page size).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"time","type":"enum","required":false,"description":"Only articles from this period.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any time"},{"value":"day","label":"past day"},{"value":"week","label":"past week"},{"value":"month","label":"past month"}],"default":"any","value_pattern":"d|w|m|all","aliases":["freshness","btf"]},{"name":"sort","type":"enum","required":false,"description":"Order of articles.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"most relevant (Yahoo default)"},{"value":"date","label":"newest first"}],"default":"relevance"}],"returns":"query, country, page, results[]{position, title, url, domain, source, via, published, snippet, thumbnail}, pagination{current, has_next, next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"federal reserve"}},{"name":"images","description":"Yahoo image search: 60 images a page with the full-size image URL and its width/height, the page it is on, the site and the thumbnail; related searches. Size, colour, type, layout, people, time, usage-rights and SafeSearch filters.","required_params":["query"],"optional_params":["country","page","size","color","type","layout","people","time","license","safesearch"],"params":[{"name":"query","type":"string","required":true,"description":"What you would type into Yahoo's search box. Operators Yahoo itself understands (\"exact phrase\", site:, -word) are passed through unchanged.","on_invalid":"reject","example":"red panda","aliases":["q","p","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Yahoo country site answers (search.yahoo.com, uk.search.yahoo.com, de.search.yahoo.com, …). Results, ads, news and suggestions are that site's own.","on_invalid":"reject","allowed_values":[{"value":"us","label":"search.yahoo.com"},{"value":"uk","label":"uk.search.yahoo.com"},{"value":"ca","label":"ca.search.yahoo.com"},{"value":"ie","label":"ie.search.yahoo.com"},{"value":"in","label":"in.search.yahoo.com"},{"value":"sg","label":"sg.search.yahoo.com"},{"value":"ph","label":"ph.search.yahoo.com"},{"value":"my","label":"malaysia.search.yahoo.com"},{"value":"id","label":"id.search.yahoo.com"},{"value":"vn","label":"vn.search.yahoo.com"},{"value":"tw","label":"tw.search.yahoo.com"},{"value":"hk","label":"hk.search.yahoo.com"},{"value":"za","label":"za.search.yahoo.com"},{"value":"fr","label":"fr.search.yahoo.com"},{"value":"be","label":"be.search.yahoo.com"},{"value":"ch","label":"ch.search.yahoo.com"},{"value":"de","label":"de.search.yahoo.com"},{"value":"at","label":"at.search.yahoo.com"},{"value":"es","label":"es.search.yahoo.com"},{"value":"it","label":"it.search.yahoo.com"},{"value":"nl","label":"nl.search.yahoo.com"},{"value":"se","label":"se.search.yahoo.com"},{"value":"no","label":"no.search.yahoo.com"},{"value":"dk","label":"dk.search.yahoo.com"},{"value":"fi","label":"fi.search.yahoo.com"},{"value":"gr","label":"gr.search.yahoo.com"},{"value":"ro","label":"ro.search.yahoo.com"},{"value":"pl","label":"pl.search.yahoo.com"},{"value":"tr","label":"tr.search.yahoo.com"},{"value":"il","label":"il.search.yahoo.com"},{"value":"br","label":"br.search.yahoo.com"},{"value":"mx","label":"mx.search.yahoo.com"},{"value":"ar","label":"ar.search.yahoo.com"},{"value":"co","label":"co.search.yahoo.com"},{"value":"cl","label":"cl.search.yahoo.com"},{"value":"pe","label":"pe.search.yahoo.com"},{"value":"ve","label":"ve.search.yahoo.com"}],"default":"us","example":"us","value_pattern":"[Gg][Bb]|[Uu][Ss][Aa]","aliases":["gl","vc","market","cc"]},{"name":"page","type":"integer","required":false,"description":"Result page, 60 results a page (Yahoo's own page size).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10},{"name":"size","type":"enum","required":false,"description":"Image size.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"small","label":"small"},{"value":"medium","label":"medium"},{"value":"large","label":"large"},{"value":"extra_large","label":"extra large"}],"default":"any","value_pattern":"wallpaper|all","aliases":["imgsz"]},{"name":"color","type":"enum","required":false,"description":"Colour.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"color","label":"color"},{"value":"black_and_white","label":"black and white"},{"value":"red","label":"red"},{"value":"orange","label":"orange"},{"value":"yellow","label":"yellow"},{"value":"green","label":"green"},{"value":"teal","label":"teal"},{"value":"blue","label":"blue"},{"value":"purple","label":"purple"},{"value":"pink","label":"pink"},{"value":"brown","label":"brown"},{"value":"black","label":"black"},{"value":"gray","label":"gray"},{"value":"white","label":"white"}],"default":"any","value_pattern":"bw|all","aliases":["imgc","colour"]},{"name":"type","type":"enum","required":false,"description":"Image type.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"photo","label":"photo"},{"value":"clipart","label":"clipart"},{"value":"line_drawing","label":"line drawing"},{"value":"gif","label":"gif"},{"value":"transparent","label":"transparent"}],"default":"any","value_pattern":"linedrawing|all","aliases":["imgty"]},{"name":"layout","type":"enum","required":false,"description":"Aspect ratio.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"square","label":"square"},{"value":"wide","label":"wide"},{"value":"tall","label":"tall"}],"default":"any","value_pattern":"all","aliases":["imga","aspect"]},{"name":"people","type":"enum","required":false,"description":"People in the image.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"faces","label":"faces"},{"value":"head_and_shoulders","label":"head and shoulders"},{"value":"no_people","label":"no people"}],"default":"any","value_pattern":"face|portrait|nonportrait|all","aliases":["imgf"]},{"name":"time","type":"enum","required":false,"description":"Found within this period.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"day","label":"day"},{"value":"week","label":"week"},{"value":"month","label":"month"},{"value":"year","label":"year"}],"default":"any","value_pattern":"all","aliases":["imgt"]},{"name":"license","type":"enum","required":false,"description":"Usage rights.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"creative_commons","label":"creative commons"},{"value":"public_domain","label":"public domain"},{"value":"free_to_share_and_use","label":"free to share and use"},{"value":"free_to_share_and_use_commercially","label":"free to share and use commercially"},{"value":"free_to_modify_share_and_use","label":"free to modify share and use"},{"value":"free_to_modify_share_and_use_commercially","label":"free to modify share and use commercially"}],"default":"any","value_pattern":"cc|pd|fsu|fsuc|fmsu|fmsuc|all","aliases":["imgl"]},{"name":"safesearch","type":"enum","required":false,"description":"Yahoo SafeSearch. strict hides adult results (a query that only has adult results then answers NOT_FOUND saying so), off shows them.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"strict"},{"value":"moderate","label":"moderate (Yahoo default)"},{"value":"off","label":"off"}],"default":"moderate","value_pattern":"r|i|p","aliases":["safe","vm"]}],"returns":"query, country, page, results[]{position, title, original, width, height, source_url, source, thumbnail}, related_searches[], pagination{current, has_next, next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"red panda"}},{"name":"videos","description":"Yahoo video search across YouTube, TikTok, Dailymotion, Vimeo, news sites and more: 60 videos a page with watch URL, title, platform, duration, views, age, description and thumbnail. Length, time, resolution, source and SafeSearch filters.","required_params":["query"],"optional_params":["country","page","duration","time","resolution","source","safesearch"],"params":[{"name":"query","type":"string","required":true,"description":"What you would type into Yahoo's search box. Operators Yahoo itself understands (\"exact phrase\", site:, -word) are passed through unchanged.","on_invalid":"reject","example":"golden retriever puppy","aliases":["q","p","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Yahoo country site answers (search.yahoo.com, uk.search.yahoo.com, de.search.yahoo.com, …). Results, ads, news and suggestions are that site's own.","on_invalid":"reject","allowed_values":[{"value":"us","label":"search.yahoo.com"},{"value":"uk","label":"uk.search.yahoo.com"},{"value":"ca","label":"ca.search.yahoo.com"},{"value":"ie","label":"ie.search.yahoo.com"},{"value":"in","label":"in.search.yahoo.com"},{"value":"sg","label":"sg.search.yahoo.com"},{"value":"ph","label":"ph.search.yahoo.com"},{"value":"my","label":"malaysia.search.yahoo.com"},{"value":"id","label":"id.search.yahoo.com"},{"value":"vn","label":"vn.search.yahoo.com"},{"value":"tw","label":"tw.search.yahoo.com"},{"value":"hk","label":"hk.search.yahoo.com"},{"value":"za","label":"za.search.yahoo.com"},{"value":"fr","label":"fr.search.yahoo.com"},{"value":"be","label":"be.search.yahoo.com"},{"value":"ch","label":"ch.search.yahoo.com"},{"value":"de","label":"de.search.yahoo.com"},{"value":"at","label":"at.search.yahoo.com"},{"value":"es","label":"es.search.yahoo.com"},{"value":"it","label":"it.search.yahoo.com"},{"value":"nl","label":"nl.search.yahoo.com"},{"value":"se","label":"se.search.yahoo.com"},{"value":"no","label":"no.search.yahoo.com"},{"value":"dk","label":"dk.search.yahoo.com"},{"value":"fi","label":"fi.search.yahoo.com"},{"value":"gr","label":"gr.search.yahoo.com"},{"value":"ro","label":"ro.search.yahoo.com"},{"value":"pl","label":"pl.search.yahoo.com"},{"value":"tr","label":"tr.search.yahoo.com"},{"value":"il","label":"il.search.yahoo.com"},{"value":"br","label":"br.search.yahoo.com"},{"value":"mx","label":"mx.search.yahoo.com"},{"value":"ar","label":"ar.search.yahoo.com"},{"value":"co","label":"co.search.yahoo.com"},{"value":"cl","label":"cl.search.yahoo.com"},{"value":"pe","label":"pe.search.yahoo.com"},{"value":"ve","label":"ve.search.yahoo.com"}],"default":"us","example":"us","value_pattern":"[Gg][Bb]|[Uu][Ss][Aa]","aliases":["gl","vc","market","cc"]},{"name":"page","type":"integer","required":false,"description":"Result page, 60 results a page (Yahoo's own page size).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10},{"name":"duration","type":"enum","required":false,"description":"Video length.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any length"},{"value":"short","label":"under 5 minutes"},{"value":"medium","label":"5-20 minutes"},{"value":"long","label":"over 20 minutes"}],"default":"any","value_pattern":"all","aliases":["durs"]},{"name":"time","type":"enum","required":false,"description":"Uploaded within this period.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"day","label":"day"},{"value":"week","label":"week"},{"value":"month","label":"month"},{"value":"year","label":"year"}],"default":"any","value_pattern":"all","aliases":["vage"]},{"name":"resolution","type":"enum","required":false,"description":"Minimum resolution.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"360p","label":"360p"},{"value":"480p","label":"480p"},{"value":"720p","label":"720p"},{"value":"1080p","label":"1080p"}],"default":"any","value_pattern":"all","aliases":["vres"]},{"name":"source","type":"enum","required":false,"description":"Only videos from this site.","on_invalid":"reject","allowed_values":[{"value":"any","label":"any"},{"value":"youtube","label":"youtube"},{"value":"dailymotion","label":"dailymotion"},{"value":"vimeo","label":"vimeo"},{"value":"mtv","label":"mtv"},{"value":"cbs","label":"cbs"},{"value":"fox","label":"fox"},{"value":"cnn","label":"cnn"},{"value":"msn","label":"msn"}],"default":"any","value_pattern":"cbsnews|foxnews|all","aliases":["vsite"]},{"name":"safesearch","type":"enum","required":false,"description":"Yahoo SafeSearch. strict hides adult results (a query that only has adult results then answers NOT_FOUND saying so), off shows them.","on_invalid":"reject","allowed_values":[{"value":"strict","label":"strict"},{"value":"moderate","label":"moderate (Yahoo default)"},{"value":"off","label":"off"}],"default":"moderate","value_pattern":"r|i|p","aliases":["safe","vm"]}],"returns":"query, country, page, results[]{position, title, url, platform, duration, views, published, description, thumbnail}, related_searches[], pagination{current, has_next, next_page}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"coinbase alternatives"}},{"name":"suggest","description":"Yahoo search-box suggestions (autocomplete) for what has been typed so far, from the chosen country's own suggestion service.","required_params":["query"],"optional_params":["country"],"params":[{"name":"query","type":"string","required":true,"description":"What has been typed so far.","on_invalid":"reject","example":"best lapt","aliases":["q","p","command"]},{"name":"country","type":"enum","required":false,"description":"Which Yahoo country site answers (search.yahoo.com, uk.search.yahoo.com, de.search.yahoo.com, …). Results, ads, news and suggestions are that site's own.","on_invalid":"reject","allowed_values":[{"value":"us","label":"search.yahoo.com"},{"value":"uk","label":"uk.search.yahoo.com"},{"value":"ca","label":"ca.search.yahoo.com"},{"value":"ie","label":"ie.search.yahoo.com"},{"value":"in","label":"in.search.yahoo.com"},{"value":"sg","label":"sg.search.yahoo.com"},{"value":"ph","label":"ph.search.yahoo.com"},{"value":"my","label":"malaysia.search.yahoo.com"},{"value":"id","label":"id.search.yahoo.com"},{"value":"vn","label":"vn.search.yahoo.com"},{"value":"tw","label":"tw.search.yahoo.com"},{"value":"hk","label":"hk.search.yahoo.com"},{"value":"za","label":"za.search.yahoo.com"},{"value":"fr","label":"fr.search.yahoo.com"},{"value":"be","label":"be.search.yahoo.com"},{"value":"ch","label":"ch.search.yahoo.com"},{"value":"de","label":"de.search.yahoo.com"},{"value":"at","label":"at.search.yahoo.com"},{"value":"es","label":"es.search.yahoo.com"},{"value":"it","label":"it.search.yahoo.com"},{"value":"nl","label":"nl.search.yahoo.com"},{"value":"se","label":"se.search.yahoo.com"},{"value":"no","label":"no.search.yahoo.com"},{"value":"dk","label":"dk.search.yahoo.com"},{"value":"fi","label":"fi.search.yahoo.com"},{"value":"gr","label":"gr.search.yahoo.com"},{"value":"ro","label":"ro.search.yahoo.com"},{"value":"pl","label":"pl.search.yahoo.com"},{"value":"tr","label":"tr.search.yahoo.com"},{"value":"il","label":"il.search.yahoo.com"},{"value":"br","label":"br.search.yahoo.com"},{"value":"mx","label":"mx.search.yahoo.com"},{"value":"ar","label":"ar.search.yahoo.com"},{"value":"co","label":"co.search.yahoo.com"},{"value":"cl","label":"cl.search.yahoo.com"},{"value":"pe","label":"pe.search.yahoo.com"},{"value":"ve","label":"ve.search.yahoo.com"}],"default":"us","example":"us","value_pattern":"[Gg][Bb]|[Uu][Ss][Aa]","aliases":["gl","vc","market","cc"]}],"returns":"query, country, suggestions[]","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"best lapt"}}]},{"name":"yahoo-shopping-jp","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Yahoo! Shopping Japan API — search the whole mall and read any store's item: price, PayPay / store points, stock, delivery, shipping fee, store and item ratings","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/yahoo-shopping-jp/v1","spec_available":true,"actions":[{"name":"search","description":"Search Yahoo!ショッピング (shopping.yahoo.co.jp) across every store by keyword, optionally inside one category, a price range and free shipping only, in one of the site's nine sort orders. Up to 30 items per page (21-30 measured), up to 50 pages (the site's own limit: 1,500 items per query). Each row: item id, title, store, price (tax included), the struck-through price and discount, the point reward (points and %) and the points-adjusted price, tax-excluded price, free-shipping flag, the delivery promise (for Tokyo), stock, used/new, item rating and review count, store rating, brand and category ids.","required_params":["query"],"optional_params":["category_id","min_price","max_price","free_shipping","sort","page"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, Japanese or English (e.g. `iphone`, `ダイソン 掃除機`). Full-width letters are normalised.","on_invalid":"reject","example":"iphone","aliases":["q","keyword","p"]},{"name":"category_id","type":"string","required":false,"description":"Yahoo! Shopping category id (digits) to search inside, as returned in a row's `category_ids` / `category_id` or `product.category_path[].category_id` (38340 = iPhone).","on_invalid":"reject","example":"38340","aliases":["category","cid"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in JPY (tax included).","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in JPY (tax included).","on_invalid":"reject","example":50000,"minimum":0,"aliases":["price_max"]},{"name":"free_shipping","type":"boolean","required":false,"description":"Only items with free shipping (送料無料).","on_invalid":"reject","default":false,"aliases":["free_shipping_only"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own nine).","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"おすすめ順 recommended (default)"},{"value":"recommended_fast","label":"おすすめ順（優先配送優先） recommended, fast delivery first"},{"value":"price_asc","label":"価格が安い順 price low to high"},{"value":"price_desc","label":"価格が高い順 price high to low"},{"value":"total_price_asc","label":"価格+送料が安い順 price + shipping low to high"},{"value":"total_price_desc","label":"価格+送料が高い順 price + shipping high to low"},{"value":"review_count","label":"レビュー件数順 most reviews"},{"value":"review_score","label":"レビュー点数順 best review score"},{"value":"discount","label":"割引率の高い順 biggest discount"}],"default":"recommended"},{"name":"page","type":"integer","required":false,"description":"Result page, 30 items per page, 1-50 (the site serves at most 50 pages per query).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50}],"returns":"results[]{item_id, store_id, item_code, url, title, image, price, currency=JPY, original_price, discount_rate_pct, price_excluding_tax, card_point_rate_pct, card_points, card_points_adjusted_price, immediate_discount, free_shipping, shipping_condition, delivery_text, delivery_type, good_delivery, in_stock, used, pre_order, rating, review_count, brand, brand_id, category_ids[], category_id, catalog_url, variation_image_count, detail_on_lohaco, store{store_id, name, url, rating, rating_count, is_best_store, excellent_store_level}, sponsored} + sponsored[] + total, page, last_page, has_more, query, filters","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"iphone"}},{"name":"product","description":"One store's item page on Yahoo!ショッピング: title, brand, JAN, new/used and condition, the price a buyer pays now (tax included, checked against the page's structured data), tax-excluded, regular, struck-through, sale and premium-member prices, the point reward a logged-out buyer earns (each campaign: store points, PayPay, daily bonus) and the points-adjusted price, the extra points offered with conditions, stock and quantity per variation, shipping fee and free-shipping flag, delivery promise and methods (for Tokyo), orders in the last 3 and 7 days, item rating, review count and distribution, the newest reviews shown on the page, category path, store category path, payment methods, description, images and the store's rating.","required_params":[],"optional_params":["item_id","url"],"params":[{"name":"item_id","type":"string","required":false,"description":"Item id `<store>_<item code>` exactly as a search row's `item_id` returns it. Required unless `url` is given.","on_invalid":"reject","example":"oastation2014_iphonese3a","aliases":["id","itemId"]},{"name":"url","type":"string","required":false,"description":"An item page URL store.shopping.yahoo.co.jp/<store>/<item code>.html (tracking query is ignored).","on_invalid":"reject","example":"https://store.shopping.yahoo.co.jp/oastation2014/iphonese3a.html","aliases":["item_url"]}],"returns":"product{item_id, store_id, item_code, url, title, catch_copy, brand, brand_id, jan, condition, used_condition, price, currency, price_excluding_tax, regular_price, original_price, sale_price, premium_member_price, subscription_price, sale_period, ld_price, price_mismatch, points, point_rate_pct, points_adjusted_price, point_campaigns[]{group, title, points, rate_pct, type, immediate_points}, extra_points_with_conditions, extra_point_rate_with_conditions_pct, availability, in_stock, stock, variations[]{sku_id, options, price, stock{available, quantity, stock_text}, delivery_text}, shipping_fee, free_shipping, shipping_fee_area, shipping_free_condition, delivery_text, good_delivery, shipping_type, delivery_methods[], delivery_area, orders_last_3_days, orders_last_7_days, rating, review_count, rating_distribution_pct{5..1}, reviews_sample[]{review_id, rating, title, text, posted_date, reviewer (masked by the site), variation, helpful_count, image_count}, category_path[]{category_id, name}, category_id, store_category_path[], payment_methods[], description, images[], store{store_id, name, url, rating, rating_count, excellent_store_level, cancel_ratio, is_open, description}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"item_id":"oastation2014_iphonese3a"}}]},{"name":"yandex-maps","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Yandex Maps API — place search, business detail and reviews scraper: name, address, phone, website, rating, review count, categories, coordinates and opening hours from Yandex Maps (yandex.com.tr) across Turkey, Russia and the CIS — plus paginated customer reviews, geo-anchored nearby search and address geocoding, no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/yandex-maps/v1","spec_available":true,"actions":[{"name":"search","description":"Search Yandex Maps for businesses by text/category. Returns up to ~25 orgs with name, address, coordinates, rating, review count, categories, phone, website, social links and opening hours.","required_params":["text"],"optional_params":["city","region_id","ll","z"],"params":[{"name":"text","type":"string","required":true,"description":"What to look for — a business name, brand or category ('kahve', 'eczane', 'Starbucks', 'restaurant').","on_invalid":"reject","example":"kahve","aliases":["query","q"]},{"name":"city","type":"string","required":false,"description":"City to scope the search to. One of: istanbul, ankara, izmir, antalya, bursa, adana, moscow, saint-petersburg, kazan, yekaterinburg, novosibirsk, minsk, almaty, astana, tashkent, baku, tbilisi, yerevan, kyiv. Defaults to istanbul. Any other place: pass ll instead — an unlisted slug is rejected rather than answered from somewhere else.","on_invalid":"ignore","example":"istanbul"},{"name":"region_id","type":"string","required":false,"description":"Advanced escape hatch: Yandex internal region id, for a place the city list does not cover (213=Moscow, 11508=Istanbul, 11503=Ankara). Overrides city. Prefer ll for precision.","on_invalid":"ignore","example":"213"},{"name":"ll","type":"string","required":false,"description":"Map-center bias as 'lon,lat' (NOTE: lon first). Strongly recommended for local results.","on_invalid":"ignore","example":"28.9795,41.0151"},{"name":"z","type":"integer","required":false,"description":"Zoom level 1-21 (higher = tighter local area).","on_invalid":"ignore","default":14,"example":14,"minimum":1,"maximum":21}],"returns":"orgs[]{org_id, name, address, latitude, longitude, url, rating, rating_count, review_count, categories[], phones[], website, social_links[], hours_text, status, seoname}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"text":"kahve","city":"istanbul"}},{"name":"detail","description":"Full business card for one org by org_id (or a Yandex Maps org URL): name, address, coordinates, rating, categories, phones, website, social links, opening hours, features and photo count.","required_params":[],"optional_params":["org_id","url"],"params":[{"name":"org_id","type":"string","required":false,"description":"Yandex Maps org id (the number in /maps/org/<id>/). From a search result's org_id.","on_invalid":"reject","example":"1242233919"},{"name":"url","type":"string","required":false,"description":"Alternatively a full Yandex Maps org URL.","on_invalid":"ignore","example":"https://yandex.com.tr/maps/org/kofemaniya/1242233919/"}],"returns":"org{org_id, name, address, latitude, longitude, rating, rating_count, review_count, categories[], phones[], website, social_links[], hours_text, description, country, locality, street, house, features[], photo_count}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"org_id":"1242233919"}},{"name":"reviews","description":"Paginated public customer reviews for an org: author handle, level, star rating, text, date and the business's reply. 50 reviews per page — page with `page`; meta.total_pages / meta.review_count tell you how many.","required_params":["org_id"],"optional_params":["page"],"params":[{"name":"org_id","type":"string","required":true,"description":"Yandex Maps org id to pull reviews for.","on_invalid":"reject","example":"1242233919"},{"name":"page","type":"integer","required":false,"description":"Review page (50 per page). Page until meta.total_pages.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"reviews[]{review_id, author, author_level, rating, text, date, business_reply, photo_count} + meta{page, total_pages, review_count}","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"per_unit","credits":1,"per":50,"min":1},"example_params":{"org_id":"1242233919"}},{"name":"nearby","description":"Find businesses of a category around a coordinate. Returns geo-anchored orgs (same shape as search) closest to the given 'lon,lat' center.","required_params":["ll","text"],"optional_params":["z"],"params":[{"name":"ll","type":"string","required":true,"description":"Center to search around as 'lon,lat' (lon first).","on_invalid":"reject","example":"28.985,41.036"},{"name":"text","type":"string","required":true,"description":"Category or keyword to find near the center ('eczane', 'atm', 'cafe', 'hastane').","on_invalid":"reject","example":"eczane","aliases":["category","q"]},{"name":"z","type":"integer","required":false,"description":"Zoom (tighter = smaller radius).","on_invalid":"ignore","default":16,"example":16,"minimum":10,"maximum":21}],"returns":"orgs[]{org_id, name, address, latitude, longitude, rating, review_count, categories[], phones[], hours_text} (closest first)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"ll":"28.985,41.036","text":"eczane"}},{"name":"geocode","description":"Geocode an address/place name to coordinates via Yandex. Returns the matched toponym with latitude/longitude and a normalized address. Pass a complete address; Yandex resolves it directly (don't over-qualify a place already named).","required_params":["address"],"optional_params":[],"params":[{"name":"address","type":"string","required":true,"description":"Address or place name to geocode (e.g. 'Taksim Meydanı', 'Red Square Moscow').","on_invalid":"reject","example":"Taksim Meydanı","aliases":["text","q"]}],"returns":"result{name, address, latitude, longitude, type, uri}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"address":"Taksim Meydanı"}}]},{"name":"yandex-market","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Yandex Market API scraper — market.yandex.ru, one of Russia's largest marketplaces: keyword search, category listings, full product cards (current and struck price, stock, specifications, seller with its public legal record) and every seller offering a product, priced for Moscow. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/yandex-market/v1","spec_available":true,"actions":[{"name":"search","description":"Search Yandex Market by keyword: the result grid with the price the buyer pays and the struck price, stock, rating, seller, delivery dates and the promoted-row flag, sorted and price-filtered like the site.","required_params":["query"],"optional_params":["page","sort","price_min","price_max"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed on market.yandex.ru (Russian or Latin).","on_invalid":"reject","example":"casio g-shock","aliases":["q","text","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-30 (the site stops at page 30).","on_invalid":"reject","default":1,"minimum":1,"maximum":30},{"name":"sort","type":"enum","required":false,"description":"Result order — the site's own four sorts.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Popular (site default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating","label":"Highest rating"}],"default":"popular"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in rubles (applied to the price the buyer pays).","on_invalid":"reject","example":5000,"minimum":1},{"name":"price_max","type":"integer","required":false,"description":"Highest price in rubles (applied to the price the buyer pays).","on_invalid":"reject","example":20000,"minimum":1}],"returns":"results[{position, product_id, sku_id, model_id, offer_id, title, url, image, price (what the buyer pays, RUB), was_price (struck price, only when discounted), discount_percent (computed), discount_badge_percent (the site's own badge), price_display (the row's printed price), currency, available, stock_quantity, rating, rating_count, purchase_count, seller{name, shop_id, business_id, supplier_id}, brand_id, category_id, is_express, is_cross_border, sponsored (promoted row, the site's flag), badges[], delivery[{type, date_from, date_to}]}], count, page, total_results (the source's own figure), total_pages, has_more, sort_applied, carousel_rows_dropped, region{id, delivery_point, delivery_point_id}, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"casio g-shock"}},{"name":"category/products","description":"List one Yandex Market category (optionally with a keyword inside it), with the site's sorts and price filter; same row fields as search.","required_params":["category"],"optional_params":["query","page","sort","price_min","price_max"],"params":[{"name":"category","type":"string","required":true,"description":"Category id (the number in a market.yandex.ru category URL, /catalog--<name>/<id>/list) or the category URL itself.","on_invalid":"reject","example":"51960073","aliases":["category_id","nid","category_url"]},{"name":"query","type":"string","required":false,"description":"Optional keyword to search inside the category.","on_invalid":"reject","example":"casio","aliases":["q","text","keyword"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-30 (the site stops at page 30).","on_invalid":"reject","default":1,"minimum":1,"maximum":30},{"name":"sort","type":"enum","required":false,"description":"Result order — the site's own four sorts.","on_invalid":"reject","allowed_values":[{"value":"popular","label":"Popular (site default)"},{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"},{"value":"rating","label":"Highest rating"}],"default":"popular"},{"name":"price_min","type":"integer","required":false,"description":"Lowest price in rubles (applied to the price the buyer pays).","on_invalid":"reject","example":5000,"minimum":1},{"name":"price_max","type":"integer","required":false,"description":"Highest price in rubles (applied to the price the buyer pays).","on_invalid":"reject","example":20000,"minimum":1}],"returns":"results[{position, product_id, sku_id, model_id, offer_id, title, url, image, price (what the buyer pays, RUB), was_price (struck price, only when discounted), discount_percent (computed), discount_badge_percent (the site's own badge), price_display (the row's printed price), currency, available, stock_quantity, rating, rating_count, purchase_count, seller{name, shop_id, business_id, supplier_id}, brand_id, category_id, is_express, is_cross_border, sponsored (promoted row, the site's flag), badges[], delivery[{type, date_from, date_to}]}], count, page, total_results (the source's own figure), total_pages, has_more, sort_applied, carousel_rows_dropped, region{id, delivery_point, delivery_point_id}, category_id, query","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"51960073"}},{"name":"product/detail","description":"One Yandex Market product card by product number or URL: title, brand, category path, images, description, specifications, current and struck price, stock, rating, the selling shop with rating, order count and public legal record, and how many sellers offer it from which price.","required_params":[],"optional_params":["product_id","url"],"params":[{"name":"product_id","type":"string","required":false,"description":"Yandex Market product number — the number at the end of a product URL (/card/<name>/<number>); search rows return it as product_id.","on_invalid":"reject","example":"5043358260","aliases":["id","osku_id","article"]},{"name":"url","type":"string","required":false,"description":"Alternative to product_id: a market.yandex.ru product URL.","on_invalid":"reject","example":"https://market.yandex.ru/card/casio-g-shock-gbm-2100a-4b/5043358260","aliases":["product_url"]}],"returns":"product{product_id, sku_id, model_id, offer_id, title, brand, brand_id, url, category{id, nav_id, name, path[{name, category_id, nav_id, slug}]}, images[], description, specifications[{group, name, value}], price, was_price, discount_percent, discount_display, other_prices[{label, price}], price_ld (the page's ld+json price), currency, available, stock_quantity, rating, rating_count, seller_review_count, badges[], seller{name, business_id, shop_id, supplier_id, rating, rating_count, orders_count, subscribers_count, months_on_market, status, legal_form, legal_name, tax_id, registration_number, is_cross_border}, offers_count, offers_min_price, offers_model_id, alternative_offers[{offer_id, price, delivery_by, delivery_dates, delivery_price, selected}]}, region{id, delivery_point, delivery_point_id}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"5043358260"}},{"name":"product/offers","description":"Every seller offering one Yandex Market product (by model_id): each offer's price and struck price, stock, seller, rating and delivery dates.","required_params":["model_id"],"optional_params":["sku_id"],"params":[{"name":"model_id","type":"string","required":true,"description":"Model id shared by every seller of one product — search rows and product/detail return it as model_id.","on_invalid":"reject","example":"1465114152","aliases":["model"]},{"name":"sku_id","type":"string","required":false,"description":"Optional: narrow the offers to one variant (sku_id from a row or the card).","on_invalid":"reject","example":"4701689562","aliases":["sku"]}],"returns":"offers[{position, product_id, sku_id, model_id, offer_id, title, url, image, price (what the buyer pays, RUB), was_price (struck price, only when discounted), discount_percent (computed), discount_badge_percent (the site's own badge), price_display (the row's printed price), currency, available, stock_quantity, rating, rating_count, purchase_count, seller{name, shop_id, business_id, supplier_id}, brand_id, category_id, is_express, is_cross_border, sponsored (promoted row, the site's flag), badges[], delivery[{type, date_from, date_to}]}], count, total_offers, model_id, sku_id, region{id, delivery_point, delivery_point_id}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"model_id":"1465114152"}}]},{"name":"yandex-search","category":{"id":"search-seo","title":"Search & SEO"},"title":"Yandex Search API — Yandex web results, full SERP (ads, knowledge panel, related searches), Yandex Direct ads, image search, video search, autocomplete and news, by region and language, no account and no API key","version":"1.0.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/yandex-search/v1","spec_available":true,"actions":[{"name":"search","description":"Yandex web search results from Yandex's web index: ranked pages with position, title, URL, snippet, displayed URL and the date Yandex shows, plus Yandex's own total-results estimate. Localise by region (`lr`) and domain, filter by document language (`lang`) and by date (`period`, or `date_from`/`date_to`), and page through results (`page`, 10 per page). Fast and cheap. The order is Yandex's web-index ranking, which is not the same blend as the yandex.ru results page (measured: about a third to a half of the top-10 domains in common). To track positions exactly as people see them on Yandex, use `serp`.","required_params":["q"],"optional_params":["domain","lr","lang","ui_lang","page","period","date_from","date_to"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.","on_invalid":"reject","example":"купить ноутбук","aliases":["text","query","keyword"]},{"name":"domain","type":"enum","required":false,"description":"Which Yandex domain to query. It sets the interface language of the page and the default region; the web index is the same. yandex.ru (Russia, default region Moscow 213), yandex.com (international, 84 = USA), yandex.com.tr (Turkey, 11508 = Istanbul), yandex.kz (162 = Almaty), yandex.by (157 = Minsk), yandex.uz (10335 = Tashkent), ya.ru (= yandex.ru).","on_invalid":"reject","allowed_values":[{"value":"yandex.ru","label":"yandex.ru"},{"value":"yandex.com","label":"yandex.com"},{"value":"yandex.com.tr","label":"yandex.com.tr"},{"value":"yandex.kz","label":"yandex.kz"},{"value":"yandex.by","label":"yandex.by"},{"value":"yandex.uz","label":"yandex.uz"},{"value":"ya.ru","label":"ya.ru"}],"default":"yandex.ru","example":"yandex.ru"},{"name":"lr","type":"integer","required":false,"description":"Yandex region id that results are localised for (213 Moscow, 2 Saint Petersburg, 225 Russia, 11508 Istanbul, 983 Turkey, 162 Almaty, 157 Minsk, 84 USA, 102 UK, 96 Germany). Default: the chosen domain's home region. Every response reports the region Yandex applied in meta.region_id.","on_invalid":"reject","example":213,"minimum":1,"aliases":["region","location","region_id"]},{"name":"lang","type":"enum","required":false,"description":"Only return documents written in this language (Yandex's own language filter). Measured: `Moscow` with lang=en returns English pages, lang=tr Turkish pages.","on_invalid":"reject","allowed_values":[{"value":"ru","label":"Russian"},{"value":"en","label":"English"},{"value":"tr","label":"Turkish"},{"value":"uk","label":"Ukrainian"},{"value":"be","label":"Belarusian"},{"value":"kk","label":"Kazakh"},{"value":"uz","label":"Uzbek"},{"value":"de","label":"German"},{"value":"fr","label":"French"},{"value":"es","label":"Spanish"},{"value":"it","label":"Italian"},{"value":"pl","label":"Polish"}],"example":"en"},{"name":"ui_lang","type":"enum","required":false,"description":"Interface language of the page (affects only the total-results sentence). Default: the domain's own.","on_invalid":"ignore","allowed_values":[{"value":"ru","label":"Russian"},{"value":"en","label":"English"},{"value":"tr","label":"Turkish"},{"value":"uk","label":"Ukrainian"},{"value":"be","label":"Belarusian"},{"value":"kk","label":"Kazakh"}],"example":"en","aliases":["l10n","hl"]},{"name":"page","type":"integer","required":false,"description":"1-based results page, 1-25 (about 10 results a page; Yandex serves at most 25 pages = 250 results per query). A page past the end of a shorter result set comes back ok with no rows and has_next_page=false (meta.page_out_of_range).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":25,"aliases":["p"]},{"name":"period","type":"enum","required":false,"description":"Only documents Yandex dated inside this window (ending today, UTC). Ignored if date_from/date_to is given.","on_invalid":"reject","allowed_values":[{"value":"day","label":"Last 24 hours"},{"value":"week","label":"Last 7 days"},{"value":"two_weeks","label":"Last 14 days"},{"value":"month","label":"Last 31 days"},{"value":"three_months","label":"Last 3 months"},{"value":"half_year","label":"Last 6 months"},{"value":"year","label":"Last 12 months"}],"example":"week","aliases":["time","time_period","freshness"]},{"name":"date_from","type":"string","required":false,"description":"Custom date range start, YYYY-MM-DD (inclusive).","on_invalid":"reject","example":"2026-10-01","value_pattern":"\\d{4}-\\d{2}-\\d{2}"},{"name":"date_to","type":"string","required":false,"description":"Custom date range end, YYYY-MM-DD (inclusive). Default today when only date_from is given.","on_invalid":"reject","example":"2026-10-31","value_pattern":"\\d{4}-\\d{2}-\\d{2}"}],"returns":"query, page, organic_results[]{position,title,url,displayed_url,domain,snippet,date,date_text,favicon,more_from_site}, total_results, total_results_text, has_next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"купить ноутбук","lr":213}},{"name":"serp","description":"The live Yandex results page as a person sees it (mobile layout), for rank tracking: organic results in Yandex's own order with sitelinks, the paid ads placed in the results, the knowledge panel (entity card with description, facts, sources and 'see also' lists), the video block, and 'people also search' related queries. `features` lists every block Yandex placed on the page. Slower than `search` (reads the full mobile page); use `search` when you only need the ranked web results.","required_params":["q"],"optional_params":["lr","page","domain"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.","on_invalid":"reject","example":"рецепт борща","aliases":["text","query","keyword"]},{"name":"lr","type":"integer","required":false,"description":"Yandex region id (213 Moscow, 11508 Istanbul, 162 Almaty, 157 Minsk, 84 USA). Optional: without it Yandex localises to the exit's country. Passing it makes a request take more attempts on average (measured), so expect a few seconds more.","on_invalid":"reject","example":213,"minimum":1,"aliases":["region","location","region_id"]},{"name":"page","type":"integer","required":false,"description":"1-based results page, 1-25 (about 10 results a page; Yandex serves at most 25 pages = 250 results per query). A page past the end of a shorter result set comes back ok with no rows and has_next_page=false (meta.page_out_of_range).","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":25,"aliases":["p"]},{"name":"domain","type":"enum","required":false,"description":"Yandex domain the full results page is read from. The web index is the same on every domain; the domain only changes interface labels. Results follow `lr`, or, without `lr`, the exit's country (reported in meta.region_id).","on_invalid":"reject","allowed_values":[{"value":"yandex.com.tr","label":"yandex.com.tr (default; measured most reachable)"},{"value":"yandex.kz","label":"yandex.kz"},{"value":"yandex.uz","label":"yandex.uz"},{"value":"yandex.by","label":"yandex.by"}],"default":"yandex.com.tr","example":"yandex.com.tr"}],"returns":"query, page, organic_results[]{position,title,url,site_name,displayed_url,domain,snippet,sitelinks[]}, ads[]{position,block_position,title,domain,displayed_url,description,sitelinks[],url (advertiser landing page when Yandex prints it, else null),tracking_url (Yandex click counter: never follow it, it bills the advertiser)}, knowledge_graph{title,subtitle,description,facts[],sources[],see_also[]}, video_results[], related_searches[], features[], has_next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":3},"example_params":{"q":"рецепт борща"}},{"name":"ads","description":"Every Yandex Direct ad Yandex shows for a query (the 'commercial offers' page): ad title, advertiser domain, displayed URL, ad text, sitelinks and the Yandex click-tracking URL. Localise with `lr`. Useful for competitor ad research.","required_params":["q"],"optional_params":["lr","page"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.","on_invalid":"reject","example":"купить ноутбук","aliases":["text","query","keyword"]},{"name":"lr","type":"integer","required":false,"description":"Yandex region id that results are localised for (213 Moscow, 2 Saint Petersburg, 225 Russia, 11508 Istanbul, 983 Turkey, 162 Almaty, 157 Minsk, 84 USA, 102 UK, 96 Germany). Default: the chosen domain's home region. Every response reports the region Yandex applied in meta.region_id.","on_invalid":"reject","example":213,"minimum":1,"aliases":["region","location","region_id"]},{"name":"page","type":"integer","required":false,"description":"1-based page of ads.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":10,"aliases":["p"]}],"returns":"query, ads[]{position,title,domain,displayed_url,description,sitelinks[],tracking_url (Yandex click counter: never follow it), url (always null on this page)}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"купить ноутбук","lr":213}},{"name":"images","description":"Yandex image search: full-size image URL, dimensions, file size, thumbnail, the page the image is on and its title. ~30 images per page. Filter by size, orientation, type, colour, file format and site.","required_params":["q"],"optional_params":["page","size","orientation","type","color","file_type","site","family"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.","on_invalid":"reject","example":"istanbul kedi","aliases":["text","query","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":30,"aliases":["p"]},{"name":"size","type":"enum","required":false,"description":"Image size bucket.","on_invalid":"reject","allowed_values":[{"value":"large","label":"Large"},{"value":"medium","label":"Medium"},{"value":"small","label":"Small"},{"value":"wallpaper","label":"Wallpaper-sized"}],"example":"large"},{"name":"orientation","type":"enum","required":false,"description":"Image orientation.","on_invalid":"reject","allowed_values":[{"value":"horizontal","label":"Landscape"},{"value":"vertical","label":"Portrait"},{"value":"square","label":"Square"}],"example":"horizontal"},{"name":"type","type":"enum","required":false,"description":"Kind of image.","on_invalid":"reject","allowed_values":[{"value":"photo","label":"Photo"},{"value":"clipart","label":"Clip art (white background)"},{"value":"lineart","label":"Line drawing"},{"value":"face","label":"People / faces"},{"value":"demotivator","label":"Demotivator / meme"}],"example":"photo"},{"name":"color","type":"enum","required":false,"description":"Dominant colour (`color` = any colour, `gray` = black & white).","on_invalid":"reject","allowed_values":[{"value":"color","label":"color"},{"value":"gray","label":"gray"},{"value":"red","label":"red"},{"value":"orange","label":"orange"},{"value":"yellow","label":"yellow"},{"value":"cyan","label":"cyan"},{"value":"green","label":"green"},{"value":"blue","label":"blue"},{"value":"violet","label":"violet"},{"value":"white","label":"white"},{"value":"black","label":"black"}],"example":"red"},{"name":"file_type","type":"enum","required":false,"description":"File format.","on_invalid":"reject","allowed_values":[{"value":"jpg","label":"JPEG"},{"value":"png","label":"PNG"},{"value":"gif","label":"GIF animation"}],"example":"png"},{"name":"site","type":"string","required":false,"description":"Only images from this site.","on_invalid":"reject","example":"pinterest.com"},{"name":"family","type":"enum","required":false,"description":"Adult-content filter for images and videos.","on_invalid":"reject","allowed_values":[{"value":"off","label":"No filtering"},{"value":"moderate","label":"Yandex default"},{"value":"strict","label":"Family search"}],"example":"strict","aliases":["safe","safesearch"]}],"returns":"query, page, images[]{position,title,image_url,width,height,file_size_bytes,thumbnail,source_url,source_domain,description,other_sizes,is_gif}, has_next_page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"istanbul kedi"}},{"name":"videos","description":"Yandex video search across YouTube, VK Video, RuTube, OK and others: video title, watch URL, platform, channel, duration, views, publish date, description and thumbnail. ~17 per page.","required_params":["q"],"optional_params":["page","family"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.","on_invalid":"reject","example":"как приготовить борщ","aliases":["text","query","keyword"]},{"name":"page","type":"integer","required":false,"description":"1-based page.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":30,"aliases":["p"]},{"name":"family","type":"enum","required":false,"description":"Adult-content filter for images and videos.","on_invalid":"reject","allowed_values":[{"value":"off","label":"No filtering"},{"value":"moderate","label":"Yandex default"},{"value":"strict","label":"Family search"}],"example":"strict","aliases":["safe","safesearch"]}],"returns":"query, page, videos[]{position,video_id,title,url,platform,channel,duration_seconds,duration,views_text,published,published_at,description,thumbnail,embed_url}, total_results, has_next_page","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"как приготовить борщ"}},{"name":"suggest","description":"Yandex search autocomplete for a partial query, in Yandex's order. Rows that Yandex answers inline (weather and similar facts) carry the fact too. Fast and cheap; good for keyword research in Russian, Turkish and CIS languages.","required_params":["q"],"optional_params":["domain","lr"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.","on_invalid":"reject","example":"погода в","aliases":["text","query","keyword"]},{"name":"domain","type":"enum","required":false,"description":"Which Yandex domain to query. It sets the interface language of the page and the default region; the web index is the same. yandex.ru (Russia, default region Moscow 213), yandex.com (international, 84 = USA), yandex.com.tr (Turkey, 11508 = Istanbul), yandex.kz (162 = Almaty), yandex.by (157 = Minsk), yandex.uz (10335 = Tashkent), ya.ru (= yandex.ru).","on_invalid":"reject","allowed_values":[{"value":"yandex.ru","label":"yandex.ru"},{"value":"yandex.com","label":"yandex.com"},{"value":"yandex.com.tr","label":"yandex.com.tr"},{"value":"yandex.kz","label":"yandex.kz"},{"value":"yandex.by","label":"yandex.by"},{"value":"yandex.uz","label":"yandex.uz"},{"value":"ya.ru","label":"ya.ru"}],"default":"yandex.ru","example":"yandex.ru"},{"name":"lr","type":"integer","required":false,"description":"Yandex region id that results are localised for (213 Moscow, 2 Saint Petersburg, 225 Russia, 11508 Istanbul, 983 Turkey, 162 Almaty, 157 Minsk, 84 USA, 102 UK, 96 Germany). Default: the chosen domain's home region. Every response reports the region Yandex applied in meta.region_id.","on_invalid":"reject","example":213,"minimum":1,"aliases":["region","location","region_id"]}],"returns":"query, suggestions[]{text,type(query|fact),fact_type,fact}, completion","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"погода в"}},{"name":"news","description":"Yandex News search (Yandex News is now served on dzen.ru): story headline, publisher, article URL, snippet, publish time, the story's size and other publishers covering it.","required_params":["q"],"optional_params":["sort"],"params":[{"name":"q","type":"string","required":true,"description":"Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.","on_invalid":"reject","example":"курс рубля","aliases":["text","query","keyword"]},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Most relevant first"},{"value":"date","label":"Newest first"}],"default":"relevance","example":"date"}],"returns":"query, news[]{position,title,url,source,snippet,published_at,time_text,story_url,story_size,more_sources[]}","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"q":"курс рубля"}}]},{"name":"yellowpages","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Yellow Pages API — US local business directory scraper: search businesses by category and city, get full business details (name, phone, address, website, rating, reviews, opening hours, years in business, categories and services) and browse any category in any US city from yellowpages.com, no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/yellowpages/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Yellow Pages business directory by category/keyword and US location. Returns up to 30 businesses per page with name, phone, address, categories, star rating, review count, years in business, a 'From Business' snippet and the detail URL. Paginate with `page`; meta.total_results gives the full match count.","required_params":["search_terms","geo_location_terms"],"optional_params":["page"],"params":[{"name":"search_terms","type":"string","required":true,"description":"What to look for — a business category, service or name ('plumber', 'italian restaurant', 'dentist', 'Joe's Pizza').","on_invalid":"reject","example":"plumber","aliases":["query","q","term"]},{"name":"geo_location_terms","type":"string","required":true,"description":"Where to search — a US 'City, ST', a ZIP code, or a neighborhood ('Austin, TX', '90210', 'Brooklyn, NY').","on_invalid":"reject","example":"Austin, TX","aliases":["location","geo","where"]},{"name":"page","type":"integer","required":false,"description":"Result page (30 businesses per page). Page until meta.total_results is covered.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"businesses[]{name, url, ypid, phone, address, street_address, locality, categories[], rating, review_count, years_in_business, snippet, hours[]} + meta{page, total_results, per_page, has_more, next_page}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"search_terms":"plumber","geo_location_terms":"Austin, TX"}},{"name":"detail","description":"Full business profile from a Yellow Pages detail URL (the `url` of a search result): name, description, full address, geo coordinates, phone, website, email, rating + review count, years in business / founding year, payment methods, languages, opening hours, the list of services offered and recent customer reviews.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"The Yellow Pages business detail (/mip/) URL, taken from a search result's `url` field.","on_invalid":"reject","example":"https://www.yellowpages.com/austin-tx/mip/clarke-kent-plumbing-10674347","aliases":["mip_url","business_url"]}],"returns":"business{name, description, address, latitude, longitude, phone, website, email, rating, review_count, founding_year, years_in_business, payment_accepted, languages, hours[], services[], reviews[]{author, rating, text, date}}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.yellowpages.com/austin-tx/mip/clarke-kent-plumbing-10674347"}},{"name":"category","description":"Browse every business in a Yellow Pages category for a US city — e.g. all restaurants in Chicago, all dentists in Miami. Same business fields as search, paginated. Use this when you want a city-wide category list rather than a keyword search.","required_params":["category","location"],"optional_params":["page"],"params":[{"name":"category","type":"string","required":true,"description":"Category slug as it appears on Yellow Pages ('restaurants', 'dentists', 'auto-repair', 'plumbers').","on_invalid":"reject","example":"restaurants","aliases":["cat"]},{"name":"location","type":"string","required":true,"description":"US city as 'City, ST' (e.g. 'Chicago, IL', 'Miami, FL').","on_invalid":"reject","example":"Chicago, IL","aliases":["city","geo"]},{"name":"page","type":"integer","required":false,"description":"Result page (30 businesses per page). Page until meta.total_results is covered.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100}],"returns":"businesses[]{name, url, ypid, phone, address, categories[], rating, review_count, years_in_business, snippet} + meta{page, total_results, per_page, has_more, next_page}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"restaurants","location":"Chicago, IL"}}]},{"name":"yelp","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Yelp API scraper — business search, reviews, ratings, business data (price, phone, hours, amenities, photos), menus and popular dishes from yelp.com","version":"1.7.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/yelp/v1","spec_available":true,"actions":[{"name":"business/reviews","description":"Fetch all reviews (with full pagination — newest, oldest, highest rated or elite first) plus the complete Yelp business profile — rating, review count, categories, price, phone, address, hours, amenities and photos. Accepts up to 39 businesses per call via their Yelp business ID.","required_params":["encBizIds"],"optional_params":["maxReviews","sortBy","ratings","language","includeDetail","includeNotRecommended","reviewsPerPage"],"params":[{"name":"encBizIds","type":"array","required":true,"description":"One or more Yelp business IDs. For multiple businesses, comma-separate them: id1,id2,id3 (a JSON array also works). Retrieve a business ID from the search or business/url-to-id actions — it is NOT the slug in the yelp.com/biz/ URL.","on_invalid":"reject","example":"gZz9A8k8ORC_xl0aHxtY4w"},{"name":"maxReviews","type":"integer","required":false,"description":"How many reviews to fetch per business (1–10000). More reviews = longer runtime.","on_invalid":"reject","default":20,"minimum":1,"maximum":10000},{"name":"sortBy","type":"enum","required":false,"description":"Review ordering.","on_invalid":"reject","allowed_values":[{"value":"RELEVANCE_DESC","label":"Most relevant (Yelp default)"},{"value":"DATE_DESC","label":"Newest first"},{"value":"DATE_ASC","label":"Oldest first"},{"value":"RATING_DESC","label":"Highest rated first"},{"value":"RATING_ASC","label":"Lowest rated first"},{"value":"ELITES_DESC","label":"Elite reviewers first"}],"default":"DATE_DESC"},{"name":"ratings","type":"array","required":false,"description":"Only reviews with these star ratings, e.g. [1, 2] for negative ones. Default: all (1–5).","on_invalid":"reject","allowed_values":[{"value":1,"label":"1 star"},{"value":2,"label":"2 stars"},{"value":3,"label":"3 stars"},{"value":4,"label":"4 stars"},{"value":5,"label":"5 stars"}],"default":[5,4,3,2,1],"example":[5]},{"name":"language","type":"string","required":false,"description":"Review language code (ISO 639-1, e.g. en, es, fr, de). Yelp returns reviews written in that language.","on_invalid":"ignore","default":"en","example":"en"},{"name":"includeDetail","type":"boolean","required":false,"description":"Include the full business profile (address, phone, coordinates, amenities, hours, photos).","on_invalid":"reject","default":true},{"name":"includeNotRecommended","type":"boolean","required":false,"description":"Also fetch Yelp's 'not recommended' (filtered) reviews.","on_invalid":"reject","default":false},{"name":"reviewsPerPage","type":"integer","required":false,"description":"How many reviews to request per page from Yelp (1–50). Higher values reduce the number of round trips for large harvests.","on_invalid":"ignore","default":30,"minimum":1,"maximum":50}],"returns":"results[]{business{enc_biz_id, name, alias, url, rating, review_count, categories, phone, address, city, state, zip, latitude, longitude, amenities, hours, primary_photo_url}, reviews[]{review_id, rating, text, language, localized_date, created_at, useful_count, reactions, has_owner_reply, photos, reviewer*}} (*reviewer name and country are redacted by default; personal data is included only when you request it)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"encBizIds":["gZz9A8k8ORC_xl0aHxtY4w"],"maxReviews":20}},{"name":"business/details","description":"Get the full Yelp business profile without reviews — name, categories, star rating, review count, price level, phone, full address, coordinates, hours, amenities and photo. Faster and cheaper than business/reviews when you only need the listing. Accepts up to 39 businesses per call via their Yelp business ID.","required_params":["encBizIds"],"optional_params":["includePii"],"params":[{"name":"encBizIds","type":"array","required":true,"description":"Yelp business ID(s). For multiple businesses, comma-separate them: id1,id2,id3 (a JSON array also works; up to 39 per request, fetched concurrently). Retrieve a business ID from the search action or business/url-to-id — it is NOT the slug in the yelp.com/biz/ URL.","on_invalid":"reject","example":"gZz9A8k8ORC_xl0aHxtY4w"}],"returns":"results[]{business{enc_biz_id, name, alias, url, rating, review_count, categories, price_range, phone, address, city, state, zip, latitude, longitude, amenities[]{name,value}, hours, primary_photo_url}, rating_histogram}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"encBizIds":["gZz9A8k8ORC_xl0aHxtY4w"]}},{"name":"search","description":"Search Yelp by keyword or category and location. Returns up to 25 ranked businesses with business ID, name, URL, rating, review count, price, categories, address and photo. Supports recommended, rating, review_count and distance ordering. One page only; pagination and advanced filters are unavailable.","required_params":["term","location"],"optional_params":["limit","sort_by"],"params":[{"name":"term","type":"string","required":true,"description":"What to search for — a keyword, dish, service or category (e.g. 'Pizza', 'coffee shop', 'plumber', 'Mexican').","on_invalid":"reject","example":"Pizza","aliases":["search_term","find_desc","query","q","category"]},{"name":"location","type":"string","required":true,"description":"Where to search. Use a full, exact location like the Yelp site expects — 'San Francisco, CA' or a neighborhood, not just 'San Francisco'.","on_invalid":"reject","example":"San Francisco, CA","aliases":["find_loc","loc"]},{"name":"limit","type":"integer","required":false,"description":"Maximum businesses to return (1-25). One page only.","on_invalid":"reject","default":10,"minimum":1,"maximum":25},{"name":"sort_by","type":"enum","required":false,"description":"Result ordering (Yelp's own search sorts).","on_invalid":"ignore","allowed_values":[{"value":"recommended","label":"Yelp's default best-match ranking"},{"value":"rating","label":"Highest rated first"},{"value":"review_count","label":"Most reviewed first"},{"value":"distance","label":"Nearest to the location first"}],"default":"recommended","aliases":["sortBy"]}],"returns":"results[]{enc_biz_id, name, slug, url, rating, review_count, price, price_level, categories[], address, city, state, neighborhoods[], image} + meta{parse_source, offset, limit}","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"term":"Pizza","location":"San Francisco, CA","limit":10}},{"name":"popular_dishes","description":"Get a restaurant's popular dishes from Yelp — the 'Popular dishes' section shown on the Yelp business page — returning each dish's name and photo. Identify the restaurant by its Yelp business URL, its Yelp business ID (from the search or business details actions), or its Yelp slug. Restaurant pages only; returns an empty list when Yelp shows no popular dishes for that restaurant.","required_params":[],"optional_params":["business_url","business_id","slug","limit"],"params":[{"name":"business_url","type":"string","required":false,"description":"The restaurant's Yelp business page URL (any yelp.com/biz/… link). Provide this OR business_id OR slug.","on_invalid":"ignore","example":"https://www.yelp.com/biz/tonys-pizza-napoletana-san-francisco","aliases":["url"]},{"name":"business_id","type":"string","required":false,"description":"The restaurant's Yelp business ID — as returned by the search or business/details actions (e.g. v1DHGRNCH9247WLYoaoA9A).","on_invalid":"ignore","example":"v1DHGRNCH9247WLYoaoA9A","aliases":["encBizId","enc_biz_id","id"]},{"name":"slug","type":"string","required":false,"description":"The restaurant's Yelp slug (the part after /biz/ in the URL).","on_invalid":"ignore","example":"tonys-pizza-napoletana-san-francisco"},{"name":"limit","type":"integer","required":false,"description":"Max dishes to return (1–50).","on_invalid":"ignore","default":20,"minimum":1,"maximum":50}],"returns":"dishes[]{name, image, photo_id} + count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"business_url":"https://www.yelp.com/biz/tonys-pizza-napoletana-san-francisco"}},{"name":"menus","description":"Get a restaurant's menu from Yelp when Yelp hosts it — returning menu sections with each item's name, description, price and photo. Identify the restaurant by its Yelp business URL, Yelp business ID, or slug. Only menus hosted on Yelp are returned; many restaurants link to an external menu, which Yelp has no structured data for — `menu_available` is false in those cases.","required_params":[],"optional_params":["business_url","business_id","slug"],"params":[{"name":"business_url","type":"string","required":false,"description":"The restaurant's Yelp business page URL (any yelp.com/biz/… link).","on_invalid":"ignore","example":"https://www.yelp.com/biz/the-pizza-shop-by-flour-hoboken","aliases":["url"]},{"name":"business_id","type":"string","required":false,"description":"The restaurant's Yelp business ID (from search or business details).","on_invalid":"ignore","example":"5uUs2b4bQdS3WS8z16LJKw","aliases":["encBizId","enc_biz_id","id"]},{"name":"slug","type":"string","required":false,"description":"The restaurant's Yelp slug (the part after /biz/ in the URL).","on_invalid":"ignore","example":"the-pizza-shop-by-flour-hoboken"}],"returns":"sections[]{section, items[]{name, description, price, image}} + section_count + item_count + menu_available","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"business_url":"https://www.yelp.com/biz/the-pizza-shop-by-flour-hoboken"}},{"name":"business/photos","description":"Get a Yelp business's photos — the images shown on its Yelp page, with captions and categories (food, menu, interior, etc.) where Yelp provides them. Identify the business by its Yelp business URL, Yelp business ID, or slug.","required_params":[],"optional_params":["business_url","business_id","slug","limit"],"params":[{"name":"business_url","type":"string","required":false,"description":"The business's Yelp page URL (any yelp.com/biz/… link). Provide this OR business_id OR slug.","on_invalid":"ignore","example":"https://www.yelp.com/biz/tonys-pizza-napoletana-san-francisco","aliases":["url"]},{"name":"business_id","type":"string","required":false,"description":"The business's Yelp business ID (from the search or business/details actions).","on_invalid":"ignore","example":"mSMZJj2pFvttWLpcDmgrEA","aliases":["encBizId","enc_biz_id","id"]},{"name":"slug","type":"string","required":false,"description":"The business's Yelp slug (the part after /biz/ in the URL).","on_invalid":"ignore","example":"tonys-pizza-napoletana-san-francisco"},{"name":"limit","type":"integer","required":false,"description":"Max photos to return (1–200).","on_invalid":"ignore","default":60,"minimum":1,"maximum":200}],"returns":"photos[]{url, caption, category} + count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"tonys-pizza-napoletana-san-francisco","limit":8}},{"name":"review_highlights","description":"Get a Yelp business's review highlights — the recurring phrases reviewers mention (e.g. 'happy hour', 'great service'), each with a sample snippet from a real review. A fast at-a-glance read on what the business is known for. Identify the business by its Yelp business URL, Yelp business ID, or slug.","required_params":[],"optional_params":["business_url","business_id","slug","limit"],"params":[{"name":"business_url","type":"string","required":false,"description":"The business's Yelp page URL. Provide this OR business_id OR slug.","on_invalid":"ignore","example":"https://www.yelp.com/biz/tonys-pizza-napoletana-san-francisco","aliases":["url"]},{"name":"business_id","type":"string","required":false,"description":"The business's Yelp business ID (from search or business/details).","on_invalid":"ignore","example":"mSMZJj2pFvttWLpcDmgrEA","aliases":["encBizId","enc_biz_id","id"]},{"name":"slug","type":"string","required":false,"description":"The business's Yelp slug (the part after /biz/ in the URL).","on_invalid":"ignore","example":"tonys-pizza-napoletana-san-francisco"},{"name":"limit","type":"integer","required":false,"description":"Max highlights to return (1–30).","on_invalid":"ignore","default":15,"minimum":1,"maximum":30}],"returns":"highlights[]{phrase, snippet} + count","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"slug":"tonys-pizza-napoletana-san-francisco","limit":6}},{"name":"business/url-to-id","description":"Convert any yelp.com/biz/… business page URL into the Yelp business ID used by business/details, business/reviews, popular_dishes and menus.","required_params":["business_url"],"optional_params":[],"params":[{"name":"business_url","type":"string","required":true,"description":"Any yelp.com/biz/… business page URL (any subdomain). Returns that business's Yelp business ID.","on_invalid":"reject","example":"https://www.yelp.com/biz/mancinis-wood-fired-pizza-brooklyn-2","aliases":["url","biz_url"]}],"returns":"{enc_biz_id, name, slug, url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"business_url":"https://www.yelp.com/biz/mancinis-wood-fired-pizza-brooklyn-2"}},{"name":"business/search","description":"Find a Yelp business by name (plus optional location) and return its Yelp business ID, name and Yelp URL. Pass the business ID straight into business/reviews or business/details. No Yelp account required.","required_params":["name"],"optional_params":["location","limit","resolveAll"],"params":[{"name":"name","type":"string","required":true,"description":"Business name to look up on Yelp — e.g. 'Blue Bottle Coffee'.","on_invalid":"reject","example":"Blue Bottle Coffee"},{"name":"location","type":"string","required":false,"description":"City / neighborhood to disambiguate same-named branches (strongly recommended).","on_invalid":"ignore","example":"San Francisco"},{"name":"limit","type":"integer","required":false,"description":"Max ranked candidate matches to return (1–10).","on_invalid":"ignore","default":5,"minimum":1,"maximum":10},{"name":"resolveAll","type":"boolean","required":false,"description":"Resolve the Yelp business ID for every returned candidate (uses more calls). Default: resolve only the top match.","on_invalid":"reject","default":false}],"returns":"results[]{enc_biz_id, name, slug, url, subtitle, name_similarity} (ranked by name match; the top result's business ID is always resolved)","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"name":"Blue Bottle Coffee","location":"San Francisco"}}]},{"name":"yodobashi","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Yodobashi Camera API — Japan's largest electronics retailer: search, prices with Gold Point rewards, stock and delivery date, reviews, per-store stock and bestseller rankings","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/yodobashi/v1","spec_available":true,"actions":[{"name":"search","description":"Search yodobashi.com (ヨドバシ・ドット・コム) by keyword and/or category, optionally narrowed to one maker and a price range, in one of the site's five sort orders. 48 products per page (sponsored listings returned apart in `sponsored[]`, never mixed in) with price (tax included), Gold Point reward (points and %), stock text, the delivery promise, star rating (rounded icon), review count, how many stores hold stock, maker and release date. Needs `query` OR `category` (or both). Discontinued products are hidden unless `include_discontinued` is true, as on the site.","required_params":[],"optional_params":["query","category","maker","min_price","max_price","sort","include_discontinued","page"],"params":[{"name":"query","type":"string","required":false,"description":"Search words, Japanese or English (e.g. `SSD`, `iphone`, `ミラーレス一眼`). Full-width letters are normalised. Required unless `category` is given.","on_invalid":"reject","example":"SSD","aliases":["q","keyword","word"]},{"name":"category","type":"string","required":false,"description":"Yodobashi category path: the numbers of a category URL joined by `/` (yodobashi.com/category/19531/19532/19545/19667/ = 外付けSSD). Search rows return it as `category_path`, `product` as `category_path[].category_path`.","on_invalid":"reject","example":"19531/19532/19545/19667","aliases":["category_path","category_id"]},{"name":"maker","type":"string","required":false,"description":"Yodobashi maker code (10 digits), as returned in `maker_facets[].maker_code` or a row's `maker_code`.","on_invalid":"reject","example":"0000000713","aliases":["maker_code","mkrbrnds","brand_code"]},{"name":"min_price","type":"integer","required":false,"description":"Minimum price in JPY (tax included).","on_invalid":"reject","example":10000,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"integer","required":false,"description":"Maximum price in JPY (tax included).","on_invalid":"reject","example":20000,"minimum":0,"aliases":["price_max"]},{"name":"sort","type":"enum","required":false,"description":"Result order (the site's own five).","on_invalid":"reject","allowed_values":[{"value":"popular","label":"人気順 popularity (default)"},{"value":"newest","label":"新着順 newly added"},{"value":"price_asc","label":"価格（安）順 price low to high"},{"value":"price_desc","label":"価格（高）順 price high to low"},{"value":"release_date","label":"発売日（新）順 newest release"}],"default":"popular"},{"name":"include_discontinued","type":"boolean","required":false,"description":"Also list products no longer sold (販売終了). Off by default, as on the site.","on_invalid":"reject","default":false,"aliases":["discontinued"]},{"name":"page","type":"integer","required":false,"description":"Result page, 48 products per page. A page past the last one answers an empty list.","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":500}],"returns":"results[]{sku, url, title, brand, maker, maker_code, release_date, image, price, currency=JPY, points, point_rate_pct, stock_text, sales_status, delivery_text, delivery_date, rating_approx, review_count, store_stock_count, category, category_path, tags[], sponsored=false} + sponsored[] (same fields, sponsored=true) + total, page, last_page, has_more, maker_facets[]{maker_code, name, count}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"SSD"}},{"name":"product","description":"One yodobashi.com product page: title, brand, maker and maker code, sale start date, price (tax included, checked against the page's structured data), maker's list price or 'open price', Gold Point reward (points, rate %, yen value) and the points-adjusted price, stock text and structured availability, delivery promise and date (for the site's default Tokyo address), how many stores hold stock, rating, review and Q&A counts, number of variations, category path, rank in each category, notes, description, images and the full spec sheet.","required_params":[],"optional_params":["sku","url"],"params":[{"name":"sku","type":"string","required":false,"description":"Yodobashi product number: 18 digits, the `sku` of a search or ranking row (also the number in a product URL yodobashi.com/product/<sku>/). Provide sku OR url.","on_invalid":"reject","example":"100000001005925961","aliases":["product_id","id","item_id"]},{"name":"url","type":"string","required":false,"description":"A yodobashi.com product URL; alternative to sku.","on_invalid":"reject","example":"https://www.yodobashi.com/product/100000001005925961/","aliases":["product_url"]}],"returns":"product{sku, url, title, brand, maker, maker_code, sale_start_date, price, currency=JPY, tax_label, price_mismatch, list_price, list_price_text, points, point_rate_pct, point_value_yen, points_adjusted_price, availability, stock_text, sales_status, delivery_text, delivery_date, delivery_free, delivery_area, store_stock_count, rating, review_count, question_count, variation_count, category_path[]{name, category_path, url}, category_ranks[]{category, rank, streak_text, ranking_category, ranking_url}, notes, description, images[], specs[]{label, value, values[]}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"sku":"100000001005925961"}},{"name":"reviews","description":"Customer reviews of one product, newest first: star rating, full text, reviewer's public nickname, post time, when they bought it, likes, comments and helpful votes. Up to `limit` reviews in one call (all of them when limit ≥ the total).","required_params":[],"optional_params":["sku","url","limit"],"params":[{"name":"sku","type":"string","required":false,"description":"Yodobashi product number: 18 digits, the `sku` of a search or ranking row (also the number in a product URL yodobashi.com/product/<sku>/). Provide sku OR url.","on_invalid":"reject","example":"100000001005925961","aliases":["product_id","id","item_id"]},{"name":"url","type":"string","required":false,"description":"A yodobashi.com product URL; alternative to sku.","on_invalid":"reject","example":"https://www.yodobashi.com/product/100000001005925961/","aliases":["product_url"]},{"name":"limit","type":"integer","required":false,"description":"How many of the newest reviews to return (1-1000).","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":1000}],"returns":"total, count, rating_average (of the returned star ratings), reviews[]{review_id, rating (1-5 or null), text, reviewer, posted_at, purchased_text, review_type, like_count, comment_count, helpful_yes, helpful_no, image}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"100000001005925961","limit":20}},{"name":"store_stock","description":"Stock of one product in every Yodobashi Camera store: store name, prefecture, address, phone, the store's price and points, in-stock flag and text (在庫あり / 残少 / お取り寄せ …), whether it is on display, and when an order can be picked up there.","required_params":[],"optional_params":["sku","url"],"params":[{"name":"sku","type":"string","required":false,"description":"Yodobashi product number: 18 digits, the `sku` of a search or ranking row (also the number in a product URL yodobashi.com/product/<sku>/). Provide sku OR url.","on_invalid":"reject","example":"100000001005925961","aliases":["product_id","id","item_id"]},{"name":"url","type":"string","required":false,"description":"A yodobashi.com product URL; alternative to sku.","on_invalid":"reject","example":"https://www.yodobashi.com/product/100000001005925961/","aliases":["product_url"]}],"returns":"product{sku, url, online_price} + stores[]{store_code, name, prefecture_code, prefecture, address, zip, lat, lng, phone, url, price, points, currency, in_stock, stock_text, on_display, pickup_ready_by, pickup_text, pickup_unavailable_text, business_hours[]{date, open, opens, closes}, shops_in_store[]} + count, in_stock_count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"sku":"100000001005925961"}},{"name":"ranking","description":"Yodobashi's bestseller ranking (ベストセラーランキング) of one category: the top 20 with rank, movement, days in the top 100, price, points, stock, delivery, rating and review count. The category is a path like `19531/19532/19545/19667` (a product's `category_ranks[].ranking_category`, or any `category_path`).","required_params":["category"],"optional_params":[],"params":[{"name":"category","type":"string","required":true,"description":"Category path (numbers joined by `/`) or a yodobashi category / ranking URL.","on_invalid":"reject","example":"19531/19532/19545/19667","aliases":["category_path","ranking_category","url"]}],"returns":"results[]{rank, rank_move, streak_text, sku, url, title, brand, maker, maker_code, release_date, image, price, currency, points, point_rate_pct, stock_text, sales_status, delivery_text, delivery_date, rating_approx, review_count, store_stock_count} + title, category, updated_at","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"category":"19531/19532/19545/19667"}}]},{"name":"youtube","category":{"id":"media","title":"Media, Film & Knowledge"},"title":"YouTube API — search (with filters) videos, channels, playlists and shorts; get video details, comments (top/newest), related videos, channel info and About panel, playlist and channel-uploads listings, and video transcripts/captions","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/youtube/v1","spec_available":true,"actions":[{"name":"search","description":"search videos/channels/playlists/shorts with filters (upload date, duration, sort order, features)","required_params":["query"],"optional_params":["type","limit","continuation","upload_date","duration","sort_by","features"],"params":[{"name":"query","type":"string","required":false,"description":"Search keywords. Provide `query` for a new search, or `continuation` for the next page.","on_invalid":"reject","example":"lofi hip hop","aliases":["q"]},{"name":"type","type":"enum","required":false,"description":"Restrict results to one result kind.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Everything"},{"value":"video","label":"Videos"},{"value":"channel","label":"Channels"},{"value":"playlist","label":"Playlists"},{"value":"movie","label":"Movies"},{"value":"shorts","label":"Shorts"}],"default":"all","example":"video"},{"name":"upload_date","type":"enum","required":false,"description":"Filter by how recently the video was uploaded.","on_invalid":"reject","allowed_values":[{"value":"hour","label":"Last hour"},{"value":"today","label":"Today"},{"value":"week","label":"This week"},{"value":"month","label":"This month"},{"value":"year","label":"This year"}],"example":"week"},{"name":"duration","type":"enum","required":false,"description":"Filter by video length.","on_invalid":"reject","allowed_values":[{"value":"short","label":"Under 4 minutes"},{"value":"medium","label":"4-20 minutes"},{"value":"long","label":"Over 20 minutes"}],"example":"long"},{"name":"sort_by","type":"enum","required":false,"description":"Order the results.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance"},{"value":"date","label":"Upload date (newest)"},{"value":"views","label":"View count"},{"value":"rating","label":"Rating"}],"default":"relevance","example":"date"},{"name":"features","type":"string","required":false,"description":"Comma-separated feature filters: live, 4k, hd, subtitles/cc, creative_commons, 360, hdr, location, purchased, 3d.","on_invalid":"ignore","example":"hd,cc"},{"name":"limit","type":"integer","required":false,"description":"How many items to return (1-200). Paged internally; clamped to range.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":200},{"name":"continuation","type":"string","required":false,"description":"Next-page token from a previous response's `continuation` (provide this instead of the primary id to fetch the next page).","on_invalid":"ignore","example":""}],"returns":"results[] (type-tagged: video/shorts/channel/playlist rows), count, estimated_results, continuation (next-page token), query, type","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"lofi hip hop","type":"video","limit":20}},{"name":"video_detail","description":"video metadata: title/views/likes/date/channel/description (+ duration/keywords/thumbnails/caption-langs best-effort)","required_params":["video_id"],"optional_params":[],"params":[{"name":"video_id","type":"string","required":true,"description":"YouTube video id (11 chars) or any watch/youtu.be/shorts/embed URL.","on_invalid":"reject","example":"dQw4w9WgXcQ","aliases":["videoId","id"]}],"returns":"video record: title, views, likes, published_date, channel{name,channel_id,subscribers}, description, how_this_was_made{altered_or_synthetic,auto_dubbed,label,text}, +length_seconds/keywords/thumbnails/available_captions","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"video_id":"dQw4w9WgXcQ"}},{"name":"video_details","description":"BATCH engagement enrichment — pass up to 50 video_ids in ONE call, get likes + description (+ optional comment_count) per video. Built to enrich channel_videos/channel_shorts lists (which don't carry likes) without one call per video.","required_params":["video_ids"],"optional_params":["include_comment_count"],"params":[{"name":"video_ids","type":"array","required":false,"description":"Up to 50 video ids or watch URLs to enrich in one batch.","on_invalid":"reject","example":["dQw4w9WgXcQ","9bZkp7q19f0"]},{"name":"include_comment_count","type":"boolean","required":false,"description":"Also fetch total comment_count per video (1 extra call/video → higher cost+latency). Default off (likes + description only).","on_invalid":"ignore","default":false}],"returns":"videos[]{video_id, title, views, likes, published_date, description, channel_id, channel_name, how_this_was_made{altered_or_synthetic,auto_dubbed,label,text}, comment_count?} + count + requested + failed[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"per_unit","credits":1,"per":1,"min":1},"example_params":{"video_ids":["dQw4w9WgXcQ","9bZkp7q19f0"]}},{"name":"comments","description":"video comments (text/author/likes/replies), paginated, sortable by top or newest","required_params":["video_id"],"optional_params":["limit","continuation","sort"],"params":[{"name":"video_id","type":"string","required":false,"description":"YouTube video id (11 chars) or any watch/youtu.be/shorts/embed URL.","on_invalid":"reject","example":"dQw4w9WgXcQ","aliases":["videoId","id"]},{"name":"limit","type":"integer","required":false,"description":"How many items to return (1-200). Paged internally; clamped to range.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":200},{"name":"sort","type":"enum","required":false,"description":"Comment ordering (ignored when paging an existing `continuation`).","on_invalid":"reject","allowed_values":[{"value":"top","label":"Top comments"},{"value":"newest","label":"Newest first"}],"default":"top","example":"newest"},{"name":"continuation","type":"string","required":false,"description":"Next-page token from a previous response's `continuation` (provide this instead of the primary id to fetch the next page).","on_invalid":"ignore","example":""}],"returns":"comments[]{text, author, likes, reply_count, published, is_reply}, count, continuation, sort, top_level_count","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"video_id":"dQw4w9WgXcQ","limit":20}},{"name":"channel","description":"channel detail: subs/videoCount/description/links","required_params":["channel_id"],"optional_params":["handle","url"],"params":[{"name":"channel_id","type":"string","required":true,"description":"Channel id (UC…), an @handle, or a channel URL — any one resolves the channel.","on_invalid":"reject","example":"UCX6OQ3DkcsbYNE6H8uQQuVA","aliases":["handle","url","browseId","id"]}],"returns":"channel record: title, channel_id, handle, subscribers, video_count, description, external_links[], avatar","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"channel_id":"UCX6OQ3DkcsbYNE6H8uQQuVA"}},{"name":"transcript","description":"video transcript/captions (timed segments + full text) select any language the video has via 'lang'; format=text|segments","required_params":["video_id"],"optional_params":["lang","format"],"params":[{"name":"video_id","type":"string","required":true,"description":"YouTube video id (11 chars) or any watch/youtu.be/shorts/embed URL.","on_invalid":"reject","example":"dQw4w9WgXcQ","aliases":["videoId","id"]},{"name":"lang","type":"string","required":false,"description":"Preferred caption language code (e.g. en, es, de). Falls back to an available track; see available_languages in the response.","on_invalid":"ignore","default":"en","example":"en","aliases":["language"]},{"name":"format","type":"enum","required":false,"description":"Output shape. 'text' omits the per-cue segments[] array.","on_invalid":"ignore","allowed_values":[{"value":"segments","label":"Timed segments + full text"},{"value":"text","label":"Full text only"}],"default":"segments","example":"segments"}],"returns":"transcript: language, language_code, is_generated, segment_count, duration_ms, text, segments[]{start_ms,dur_ms,text}, available_languages[]","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"video_id":"dQw4w9WgXcQ","lang":"en"}},{"name":"playlist","description":"list a playlist's videos (id/title/channel/duration/position), paginated","required_params":["playlist_id"],"optional_params":["limit","continuation"],"params":[{"name":"playlist_id","type":"string","required":false,"description":"Playlist id (PL…/UU…/OLAK…), a full playlist URL (…?list=…), or a VL… browseId.","on_invalid":"reject","example":"PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI","aliases":["list","url","id"]},{"name":"limit","type":"integer","required":false,"description":"How many items to return (1-200). Paged internally; clamped to range.","on_invalid":"ignore","default":100,"example":100,"minimum":1,"maximum":200},{"name":"continuation","type":"string","required":false,"description":"Next-page token from a previous response's `continuation` (provide this instead of the primary id to fetch the next page).","on_invalid":"ignore","example":""}],"returns":"items[]{video_id, title, channel, channel_id, duration, views, position, thumbnails, url}, count, continuation, playlist_id, playlist_title","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"playlist_id":"PL15B1E77BB5708555","limit":20}},{"name":"channel_videos","description":"a channel's uploads (Videos tab): video_id/title/views/duration, paginated","required_params":["channel_id"],"optional_params":["handle","url","limit","continuation"],"params":[{"name":"channel_id","type":"string","required":true,"description":"Channel id (UC…), an @handle, or a channel URL — any one resolves the channel.","on_invalid":"reject","example":"UCX6OQ3DkcsbYNE6H8uQQuVA","aliases":["handle","url","browseId","id"]},{"name":"limit","type":"integer","required":false,"description":"How many items to return (1-200). Paged internally; clamped to range.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":200},{"name":"continuation","type":"string","required":false,"description":"Next-page token from a previous response's `continuation` (provide this instead of the primary id to fetch the next page).","on_invalid":"ignore","example":""}],"returns":"videos[]{video_id, title, channel, views, published, duration, thumbnails, url}, count, continuation, channel_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"channel_id":"UCX6OQ3DkcsbYNE6H8uQQuVA","limit":20}},{"name":"channel_shorts","description":"a channel's Shorts tab (video_id/title/views/views_int/thumbnails), paginated — the Shorts that the Videos tab (channel_videos) omits; works for shorts-only channels","required_params":["channel_id"],"optional_params":["handle","url","limit","continuation"],"params":[{"name":"channel_id","type":"string","required":true,"description":"Channel id (UC…), an @handle, or a channel URL — any one resolves the channel.","on_invalid":"reject","example":"UCX6OQ3DkcsbYNE6H8uQQuVA","aliases":["handle","url","browseId","id"]},{"name":"limit","type":"integer","required":false,"description":"How many items to return (1-200). Paged internally; clamped to range.","on_invalid":"ignore","default":30,"example":30,"minimum":1,"maximum":200},{"name":"continuation","type":"string","required":false,"description":"Next-page token from a previous response's `continuation` (provide this instead of the primary id to fetch the next page).","on_invalid":"ignore","example":""}],"returns":"shorts[]{video_id, title, views, views_int, thumbnails, url}, count, continuation, channel_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"channel_id":"UCX6OQ3DkcsbYNE6H8uQQuVA","limit":20}},{"name":"related","description":"recommended/related videos for a video_id (from the watch page)","required_params":["video_id"],"optional_params":["limit"],"params":[{"name":"video_id","type":"string","required":true,"description":"YouTube video id (11 chars) or any watch/youtu.be/shorts/embed URL.","on_invalid":"reject","example":"dQw4w9WgXcQ","aliases":["videoId","id"]},{"name":"limit","type":"integer","required":false,"description":"How many items to return (1-200). Paged internally; clamped to range.","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":200}],"returns":"related[]{video_id, title, channel, channel_id, views, published, duration, thumbnails, url}, count, video_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"video_id":"dQw4w9WgXcQ","limit":15}},{"name":"channel_about","description":"full channel About panel: total views, joined date, country, links, description","required_params":["channel_id"],"optional_params":["handle","url"],"params":[{"name":"channel_id","type":"string","required":true,"description":"Channel id (UC…), an @handle, or a channel URL — any one resolves the channel.","on_invalid":"reject","example":"UCX6OQ3DkcsbYNE6H8uQQuVA","aliases":["handle","url","browseId","id"]}],"returns":"channel_id, description, country, joined_date, view_count, video_count, subscribers, canonical_url, links[]{title, link}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"channel_id":"UCX6OQ3DkcsbYNE6H8uQQuVA"}}]},{"name":"yuyu-tei","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Yuyu-tei API — Japanese trading-card prices from 遊々亭 (yuyu-tei.jp): what the shop sells a card for (JPY, stock, sale price, damaged copies) and what it buys it for (買取 price, with the earlier price when it was raised), for 24 games incl. Pokémon, Yu-Gi-Oh!, One Piece, Duel Masters, Weiß Schwarz, Vanguard, Digimon, Union Arena, Gundam; plus each game's set list. No login, no key.","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/yuyu-tei/v1","spec_available":true,"actions":[{"name":"search","description":"Search what yuyu-tei SELLS in one game. Each row is one product (one card printing; damaged copies are their own products) with its price, stock, rarity, set and card number. Give query, set, rarity or card_type. Up to 600 rows a page.","required_params":[],"optional_params":["game","query","set","rarity","card_type","damaged","on_sale_only","in_stock_only","page"],"params":[{"name":"game","type":"enum","required":false,"description":"Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム (Pokémon)"},{"value":"yugioh","label":"遊戯王 OCG (Yu-Gi-Oh!)"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece","label":"ONE PIECEカードゲーム (One Piece)"},{"value":"duel_masters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ (Weiß Schwarz Rose)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカードゲーム (Digimon)"},{"value":"union_arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"battle_spirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"gundam","label":"ガンダムカードゲーム (Gundam Card Game)"},{"value":"hololive","label":"ホロライブOCG (hololive OCG)"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"wixoss","label":"WIXOSS"},{"value":"zx","label":"Z/X -Zillions of enemy X-"},{"value":"precious_memories","label":"プレシャスメモリーズ (Precious Memories)"},{"value":"chaos","label":"ChaosTCG"},{"value":"rebirth","label":"Reバース for you (Rebirth for you)"},{"value":"lycee","label":"Lycee Overture"},{"value":"fire_emblem_cipher","label":"ファイアーエムブレム サイファ (Fire Emblem Cipher)"},{"value":"xross_stars","label":"Xross Stars"},{"value":"gundam_arsenal_base","label":"機動戦士ガンダム アーセナルベース (Gundam Arsenal Base)"},{"value":"eiketsu_taisen","label":"英傑大戦 (Eiketsu Taisen)"}],"default":"pokemon","example":"pokemon","value_pattern":"(?i)(chaos|digi|hocg|poc|ygo|yrd|opc|wsr|gcg|sev|gab|dm|ws|vg|ua|bs|wx|zx|pm|re|lo|fe|xs|ei)"},{"name":"query","type":"string","required":false,"description":"Card name, partial match, as the shop writes it (Japanese; e.g. 'ピカチュウ', 'ルフィ', 'ex'). Give query, set, rarity or card_type (any combination).","on_invalid":"reject","example":"ピカチュウ","aliases":["q","keyword","search_word"]},{"name":"set","type":"string","required":false,"description":"One set code, or several separated by commas (up to 20), as the `sets` action and every row's `set_code` give them (e.g. sv08a = [SV8a] テラスタルフェスex). An unknown code answers INVALID_PARAM.","on_invalid":"reject","example":"sv08a","aliases":["set_code","vers"]},{"name":"rarity","type":"string","required":false,"description":"One rarity exactly as the shop lists it for that game (Pokémon: UR, SAR, SR, AR, RR, R, U, C, PROMO …; Yu-Gi-Oh!: SE, UR, QCSE …). An unknown value answers INVALID_PARAM with the game's list.","on_invalid":"reject","example":"SAR","aliases":["rare"]},{"name":"card_type","type":"string","required":false,"description":"The shop's card-type / colour filter for that game (Pokémon: ポケモン, エネルギー, トレーナーズ; One Piece: colours 赤, 緑 …). An unknown value answers INVALID_PARAM with the game's list. Not available together with damaged=true.","on_invalid":"reject","example":"トレーナーズ","aliases":["type"]},{"name":"damaged","type":"boolean","required":false,"description":"List the shop's damaged copies (傷有り) instead of clean ones. Damaged copies are separate products with their own (lower) price and stock.","on_invalid":"reject","default":false,"example":true,"aliases":["kizu"]},{"name":"on_sale_only","type":"boolean","required":false,"description":"Only products on sale (特価品). Not available together with damaged=true.","on_invalid":"reject","default":false,"example":true,"aliases":["tokka_only"]},{"name":"in_stock_only","type":"boolean","required":false,"description":"Only products in stock (在庫有のみ).","on_invalid":"reject","default":false,"example":true,"aliases":["available","sell_ok_only"]},{"name":"page","type":"integer","required":false,"description":"Page number. The shop pages lists by 600 products; meta.last_page says how many pages there are. A page past the last one answers no rows and past_last_page=true.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500}],"returns":"rows[]: product_id (give it to `card`), card_id (<set code>/<card id>: the same card on the sell and buy side), game, set_code, card_number (as printed on the card), rarity (null when the shop writes '-'), rarity_raw, name (the shop's name; variant notes such as (パラレル) stay in it), url, image, price_jpy, on_sale, regular_price_jpy (the struck-through price on sale items), damaged, in_stock, stock_qty (exact web-shop stock; 0 when sold out), stock_display (what the page prints: 'N 点' up to 10, '◯' = 11 or more, '×' = sold out). meta: page, last_page, has_more, past_last_page, total (exact on the last page only), total_is_exact, page_size (600), filters_applied, rarities_on_page, warnings","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"ピカチュウ","rarity":"SAR"}},{"name":"card","description":"One product yuyu-tei sells, in full: price, stock, set name, the card's attribute table (type, HP, colour, effect text … as the shop prints it) and the large image.","required_params":["product_id"],"optional_params":["game"],"params":[{"name":"product_id","type":"string","required":true,"description":"A list row's `product_id` (<set code>/<card id>, ending in /damage for a damaged copy), or a yuyu-tei card URL such as https://yuyu-tei.jp/sell/poc/card/sv08a/10481.","on_invalid":"reject","example":"sv08a/10481","aliases":["id","url"]},{"name":"game","type":"enum","required":false,"description":"Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム (Pokémon)"},{"value":"yugioh","label":"遊戯王 OCG (Yu-Gi-Oh!)"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece","label":"ONE PIECEカードゲーム (One Piece)"},{"value":"duel_masters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ (Weiß Schwarz Rose)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカードゲーム (Digimon)"},{"value":"union_arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"battle_spirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"gundam","label":"ガンダムカードゲーム (Gundam Card Game)"},{"value":"hololive","label":"ホロライブOCG (hololive OCG)"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"wixoss","label":"WIXOSS"},{"value":"zx","label":"Z/X -Zillions of enemy X-"},{"value":"precious_memories","label":"プレシャスメモリーズ (Precious Memories)"},{"value":"chaos","label":"ChaosTCG"},{"value":"rebirth","label":"Reバース for you (Rebirth for you)"},{"value":"lycee","label":"Lycee Overture"},{"value":"fire_emblem_cipher","label":"ファイアーエムブレム サイファ (Fire Emblem Cipher)"},{"value":"xross_stars","label":"Xross Stars"},{"value":"gundam_arsenal_base","label":"機動戦士ガンダム アーセナルベース (Gundam Arsenal Base)"},{"value":"eiketsu_taisen","label":"英傑大戦 (Eiketsu Taisen)"}],"default":"pokemon","example":"pokemon","value_pattern":"(?i)(chaos|digi|hocg|poc|ygo|yrd|opc|wsr|gcg|sev|gab|dm|ws|vg|ua|bs|wx|zx|pm|re|lo|fe|xs|ei)"}],"returns":"card{product_id (give it to `card`), card_id (<set code>/<card id>: the same card on the sell and buy side), game, set_code, card_number (as printed on the card), rarity (null when the shop writes '-'), rarity_raw, name (the shop's name; variant notes such as (パラレル) stay in it), url, image, price_jpy, on_sale, regular_price_jpy (the struck-through price on sale items), damaged, in_stock, stock_qty (exact web-shop stock; 0 when sold out), stock_display (what the page prints: 'N 点' up to 10, '◯' = 11 or more, '×' = sold out), set_name, name_reading (the kana reading the page adds, when it does), attributes{label: value}, availability (the page's schema.org value), price_mismatch (printed price vs the page's own schema.org price)}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"sv08a/10481"}},{"name":"buy_prices","description":"yuyu-tei's buying-price list (買取): what the shop PAYS for a card, in JPY — never the sale price. Same filters and ids as `search`; the row's card_id is the same card on the sell side.","required_params":[],"optional_params":["game","query","set","rarity","card_type","page"],"params":[{"name":"game","type":"enum","required":false,"description":"Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム (Pokémon)"},{"value":"yugioh","label":"遊戯王 OCG (Yu-Gi-Oh!)"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece","label":"ONE PIECEカードゲーム (One Piece)"},{"value":"duel_masters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ (Weiß Schwarz Rose)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカードゲーム (Digimon)"},{"value":"union_arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"battle_spirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"gundam","label":"ガンダムカードゲーム (Gundam Card Game)"},{"value":"hololive","label":"ホロライブOCG (hololive OCG)"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"wixoss","label":"WIXOSS"},{"value":"zx","label":"Z/X -Zillions of enemy X-"},{"value":"precious_memories","label":"プレシャスメモリーズ (Precious Memories)"},{"value":"chaos","label":"ChaosTCG"},{"value":"rebirth","label":"Reバース for you (Rebirth for you)"},{"value":"lycee","label":"Lycee Overture"},{"value":"fire_emblem_cipher","label":"ファイアーエムブレム サイファ (Fire Emblem Cipher)"},{"value":"xross_stars","label":"Xross Stars"},{"value":"gundam_arsenal_base","label":"機動戦士ガンダム アーセナルベース (Gundam Arsenal Base)"},{"value":"eiketsu_taisen","label":"英傑大戦 (Eiketsu Taisen)"}],"default":"pokemon","example":"pokemon","value_pattern":"(?i)(chaos|digi|hocg|poc|ygo|yrd|opc|wsr|gcg|sev|gab|dm|ws|vg|ua|bs|wx|zx|pm|re|lo|fe|xs|ei)"},{"name":"query","type":"string","required":false,"description":"Card name, partial match, as the shop writes it (Japanese; e.g. 'ピカチュウ', 'ルフィ', 'ex'). Give query, set, rarity or card_type (any combination).","on_invalid":"reject","example":"ピカチュウ","aliases":["q","keyword","search_word"]},{"name":"set","type":"string","required":false,"description":"One set code, or several separated by commas (up to 20), as the `sets` action and every row's `set_code` give them (e.g. sv08a = [SV8a] テラスタルフェスex). An unknown code answers INVALID_PARAM.","on_invalid":"reject","example":"sv08a","aliases":["set_code","vers"]},{"name":"rarity","type":"string","required":false,"description":"One rarity exactly as the shop lists it for that game (Pokémon: UR, SAR, SR, AR, RR, R, U, C, PROMO …; Yu-Gi-Oh!: SE, UR, QCSE …). An unknown value answers INVALID_PARAM with the game's list.","on_invalid":"reject","example":"SAR","aliases":["rare"]},{"name":"card_type","type":"string","required":false,"description":"The shop's card-type / colour filter for that game (Pokémon: ポケモン, エネルギー, トレーナーズ; One Piece: colours 赤, 緑 …). An unknown value answers INVALID_PARAM with the game's list. Not available together with damaged=true.","on_invalid":"reject","example":"トレーナーズ","aliases":["type"]},{"name":"page","type":"integer","required":false,"description":"Page number. The shop pages lists by 600 products; meta.last_page says how many pages there are. A page past the last one answers no rows and past_last_page=true.","on_invalid":"reject","default":1,"example":2,"minimum":1,"maximum":500}],"returns":"rows[]: product_id (give it to `card`), card_id (<set code>/<card id>: the same card on the sell and buy side), game, set_code, card_number (as printed on the card), rarity (null when the shop writes '-'), rarity_raw, name (the shop's name; variant notes such as (パラレル) stay in it), url, image, buy_price_jpy (what the shop PAYS), price_up (the shop flags it PRICE UP), previous_buy_price_jpy (the struck-through earlier buy price on PRICE UP rows). meta: page, last_page, has_more, past_last_page, total (exact on the last page only), total_is_exact, page_size (600), filters_applied, rarities_on_page, warnings","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"ピカチュウ","rarity":"SAR"}},{"name":"buy_card","description":"One card's buying price (買取) in full: buy price, PRICE UP flag with the earlier price, set name and the card's attribute table.","required_params":["product_id"],"optional_params":["game"],"params":[{"name":"product_id","type":"string","required":true,"description":"A row's `card_id` / `product_id` (<set code>/<card id>), or a yuyu-tei buy URL such as https://yuyu-tei.jp/buy/poc/card/sv08a/10481. The sell and buy sides share the id.","on_invalid":"reject","example":"sv08a/10481","aliases":["id","url","card_id"]},{"name":"game","type":"enum","required":false,"description":"Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム (Pokémon)"},{"value":"yugioh","label":"遊戯王 OCG (Yu-Gi-Oh!)"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece","label":"ONE PIECEカードゲーム (One Piece)"},{"value":"duel_masters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ (Weiß Schwarz Rose)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカードゲーム (Digimon)"},{"value":"union_arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"battle_spirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"gundam","label":"ガンダムカードゲーム (Gundam Card Game)"},{"value":"hololive","label":"ホロライブOCG (hololive OCG)"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"wixoss","label":"WIXOSS"},{"value":"zx","label":"Z/X -Zillions of enemy X-"},{"value":"precious_memories","label":"プレシャスメモリーズ (Precious Memories)"},{"value":"chaos","label":"ChaosTCG"},{"value":"rebirth","label":"Reバース for you (Rebirth for you)"},{"value":"lycee","label":"Lycee Overture"},{"value":"fire_emblem_cipher","label":"ファイアーエムブレム サイファ (Fire Emblem Cipher)"},{"value":"xross_stars","label":"Xross Stars"},{"value":"gundam_arsenal_base","label":"機動戦士ガンダム アーセナルベース (Gundam Arsenal Base)"},{"value":"eiketsu_taisen","label":"英傑大戦 (Eiketsu Taisen)"}],"default":"pokemon","example":"pokemon","value_pattern":"(?i)(chaos|digi|hocg|poc|ygo|yrd|opc|wsr|gcg|sev|gab|dm|ws|vg|ua|bs|wx|zx|pm|re|lo|fe|xs|ei)"}],"returns":"card{product_id (give it to `card`), card_id (<set code>/<card id>: the same card on the sell and buy side), game, set_code, card_number (as printed on the card), rarity (null when the shop writes '-'), rarity_raw, name (the shop's name; variant notes such as (パラレル) stay in it), url, image, buy_price_jpy (what the shop PAYS), price_up (the shop flags it PRICE UP), previous_buy_price_jpy (the struck-through earlier buy price on PRICE UP rows), set_name, name_reading, attributes{label: value}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"sv08a/10481"}},{"name":"sets","description":"The set list (収録弾) for one game, in the shop's own order, with the codes `search` and `buy_prices` take as `set`.","required_params":[],"optional_params":["game"],"params":[{"name":"game","type":"enum","required":false,"description":"Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon.","on_invalid":"reject","allowed_values":[{"value":"pokemon","label":"ポケモンカードゲーム (Pokémon)"},{"value":"yugioh","label":"遊戯王 OCG (Yu-Gi-Oh!)"},{"value":"yugioh_rush_duel","label":"遊戯王ラッシュデュエル (Yu-Gi-Oh! Rush Duel)"},{"value":"onepiece","label":"ONE PIECEカードゲーム (One Piece)"},{"value":"duel_masters","label":"デュエルマスターズ (Duel Masters)"},{"value":"weiss_schwarz","label":"ヴァイスシュヴァルツ (Weiß Schwarz)"},{"value":"weiss_schwarz_rose","label":"ヴァイスシュヴァルツロゼ (Weiß Schwarz Rose)"},{"value":"vanguard","label":"ヴァンガード (Cardfight!! Vanguard)"},{"value":"digimon","label":"デジモンカードゲーム (Digimon)"},{"value":"union_arena","label":"ユニオンアリーナ (Union Arena)"},{"value":"battle_spirits","label":"バトルスピリッツ (Battle Spirits)"},{"value":"gundam","label":"ガンダムカードゲーム (Gundam Card Game)"},{"value":"hololive","label":"ホロライブOCG (hololive OCG)"},{"value":"shadowverse_evolve","label":"Shadowverse EVOLVE"},{"value":"wixoss","label":"WIXOSS"},{"value":"zx","label":"Z/X -Zillions of enemy X-"},{"value":"precious_memories","label":"プレシャスメモリーズ (Precious Memories)"},{"value":"chaos","label":"ChaosTCG"},{"value":"rebirth","label":"Reバース for you (Rebirth for you)"},{"value":"lycee","label":"Lycee Overture"},{"value":"fire_emblem_cipher","label":"ファイアーエムブレム サイファ (Fire Emblem Cipher)"},{"value":"xross_stars","label":"Xross Stars"},{"value":"gundam_arsenal_base","label":"機動戦士ガンダム アーセナルベース (Gundam Arsenal Base)"},{"value":"eiketsu_taisen","label":"英傑大戦 (Eiketsu Taisen)"}],"default":"pokemon","example":"pokemon","value_pattern":"(?i)(chaos|digi|hocg|poc|ygo|yrd|opc|wsr|gcg|sev|gab|dm|ws|vg|ua|bs|wx|zx|pm|re|lo|fe|xs|ei)"}],"returns":"rows[]: set_code, name (the shop's label, e.g. '[SV8a] ハイクラスパック テラスタルフェスex'), printed_code (the bracketed code on the label, when there is one). meta: rarities, card_types (the game's own filter values)","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"game":"onepiece"}}]},{"name":"zalando","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Zalando API — EU fashion product search, category browse, product detail, sizes & reviews (zalando.de/.co.uk/.fr + 6 more)","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/zalando/v1","spec_available":true,"actions":[{"name":"search","description":"Search Zalando by keyword — returns product cards with name, brand, SKU, price, color, images and product URL. Filterable by brand, price range and category; paginated.","required_params":["q"],"optional_params":["country","page","category","order","brand","min_price","max_price"],"params":[{"name":"q","type":"string","required":true,"description":"Search keyword.","on_invalid":"reject","example":"nike sneaker","aliases":["query"]},{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"category","type":"string","required":false,"description":"Optional category slug to scope the search to.","on_invalid":"reject","aliases":["path"]},{"name":"order","type":"enum","required":false,"description":"Sort order.","on_invalid":"ignore","allowed_values":[{"value":"popularity","label":"Most popular"},{"value":"price","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"},{"value":"newest","label":"Newest"},{"value":"sale","label":"Sale"}],"example":"price","aliases":["sort"]},{"name":"brand","type":"string","required":false,"description":"Filter by brand (slugified), e.g. nike-sportswear.","on_invalid":"reject","example":"nike"},{"name":"min_price","type":"number","required":false,"description":"Minimum price (store currency).","on_invalid":"ignore","example":50},{"name":"max_price","type":"number","required":false,"description":"Maximum price (store currency).","on_invalid":"ignore","example":200}],"returns":"results[] (name, brand, sku, price, color, images, url), page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"nike","country":"de"}},{"name":"category","description":"Browse Zalando products by category (e.g. herrenschuhe-sneaker) — returns listing cards with name, brand, price and images. Filterable and paginated.","required_params":["category"],"optional_params":["country","page","order","brand","min_price","max_price"],"params":[{"name":"category","type":"string","required":true,"description":"Zalando category slug, e.g. herrenschuhe-sneaker (discover via the categories action).","on_invalid":"reject","example":"herrenschuhe-sneaker","aliases":["path"]},{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"order","type":"enum","required":false,"description":"Sort order.","on_invalid":"ignore","allowed_values":[{"value":"popularity","label":"Most popular"},{"value":"price","label":"Price low to high"},{"value":"price_desc","label":"Price high to low"},{"value":"newest","label":"Newest"},{"value":"sale","label":"Sale"}],"example":"price","aliases":["sort"]},{"name":"brand","type":"string","required":false,"description":"Filter by brand (slugified), e.g. nike-sportswear.","on_invalid":"reject","example":"nike"},{"name":"min_price","type":"number","required":false,"description":"Minimum price (store currency).","on_invalid":"ignore","example":50},{"name":"max_price","type":"number","required":false,"description":"Maximum price (store currency).","on_invalid":"ignore","example":200}],"returns":"results[] listing cards, category, page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"category":"herrenschuhe-sneaker","country":"de"}},{"name":"sale","description":"On-sale / discounted Zalando products — the outlet grid with original price, current price, discount percent (0-100) and discount amount (money off). Scope to a category, otherwise lands on the country's sale/outlet section. Paginated.","required_params":[],"optional_params":["country","category","page","brand","min_price","max_price"],"params":[{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"},{"name":"category","type":"string","required":false,"description":"Optional category slug to limit the sale to (e.g. herrenschuhe-sneaker). Omit for the whole sale section.","on_invalid":"reject","aliases":["path"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"brand","type":"string","required":false,"description":"Filter by brand (slugified), e.g. nike-sportswear.","on_invalid":"reject","example":"nike"},{"name":"min_price","type":"number","required":false,"description":"Minimum price (store currency).","on_invalid":"ignore","example":20},{"name":"max_price","type":"number","required":false,"description":"Maximum price (store currency).","on_invalid":"ignore","example":100}],"returns":"results[] (name, brand, sku, price, original_price, discount_percent (0-100), discount_amount (money off, store currency), on_sale, url), category, page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de"}},{"name":"new_arrivals","description":"Newest Zalando products in a category, sorted newest-first. Scope to a category (e.g. damenschuhe-sneaker), otherwise lands on the country's primary section. Paginated.","required_params":[],"optional_params":["country","category","page","brand","min_price","max_price"],"params":[{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"},{"name":"category","type":"string","required":false,"description":"Optional category slug (e.g. damenschuhe-sneaker). Omit for the country's primary section.","on_invalid":"reject","aliases":["path"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"brand","type":"string","required":false,"description":"Filter by brand (slugified), e.g. nike-sportswear.","on_invalid":"reject","example":"nike"},{"name":"min_price","type":"number","required":false,"description":"Minimum price (store currency).","on_invalid":"ignore","example":20},{"name":"max_price","type":"number","required":false,"description":"Maximum price (store currency).","on_invalid":"ignore","example":200}],"returns":"results[] listing cards (newest first), category, page, total, has_more, next_page","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de"}},{"name":"product","description":"Full Zalando product detail by URL or SKU — name, brand, price, color, gallery images, available sizes, rating and attributes.","required_params":[],"optional_params":["url","sku","country"],"params":[{"name":"url","type":"string","required":false,"description":"Full Zalando product URL (.html). (product needs url OR sku.)","on_invalid":"reject","example":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"},{"name":"sku","type":"string","required":false,"description":"Zalando SKU, e.g. NI112N022-A11 (resolved from url when omitted).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"}],"returns":"product{} — name, brand, sku, price, color, images, sizes, rating, attributes","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html","country":"de"}},{"name":"similar","description":"Products similar to a given Zalando item — pulled from the product page recommendation cards.","required_params":[],"optional_params":["url","sku","country"],"params":[{"name":"url","type":"string","required":false,"description":"Full Zalando product URL (.html). (product needs url OR sku.)","on_invalid":"reject","example":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"},{"name":"sku","type":"string","required":false,"description":"Zalando SKU, e.g. NI112N022-A11 (resolved from url when omitted).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"}],"returns":"results[] related products (name, brand, price, url), sku","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"}},{"name":"variants","description":"All size variants for a Zalando product with in-stock flags — useful for monitoring stock availability.","required_params":[],"optional_params":["url","sku","country"],"params":[{"name":"url","type":"string","required":false,"description":"Full Zalando product URL (.html). (product needs url OR sku.)","on_invalid":"reject","example":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"},{"name":"sku","type":"string","required":false,"description":"Zalando SKU, e.g. NI112N022-A11 (resolved from url when omitted).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"}],"returns":"variants[] {size, sku, in_stock}, sku","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"}},{"name":"brands","description":"Distinct brands present in a given Zalando listing — the brands found across the product cards of the supplied category or keyword search (one listing page, not Zalando's full brand directory). Useful for building brand filter chips for that listing. Pass category or q; defaults to the country's primary section.","required_params":[],"optional_params":["country","category","q","page"],"params":[{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"},{"name":"category","type":"string","required":false,"description":"Category slug to collect brands from (e.g. herrenschuhe-sneaker). Defaults to the country's primary section.","on_invalid":"reject","aliases":["path"]},{"name":"q","type":"string","required":false,"description":"Keyword to collect brands from instead of a category.","on_invalid":"reject","aliases":["query"]},{"name":"page","type":"integer","required":false,"description":"Result page (1-based). Page forward with meta.next_page.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"brands[] {name, slug}, source (category|query), scope","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de"}},{"name":"categories","description":"Top-level Zalando category links for a country, live-discovered from that TLD's own localized homepage navigation — so each country returns its real localized paths (fr: femme/homme/enfant, it: donna/uomo/bambini, es: mujer/hombre, nl: dames/heren, pl: kobiety/mezczyzni …), feed these paths to the category / sale / new_arrivals actions.","required_params":[],"optional_params":["country","gender"],"params":[{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"},{"name":"gender","type":"string","required":false,"description":"Optional gender to filter seeds (e.g. women, men, kids).","on_invalid":"reject"}],"returns":"categories[] {name, path, url}","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de"}},{"name":"filters","description":"Discover which sort and filter options are available for Zalando listings, including price range, brand and sort order.","required_params":[],"optional_params":["country","category","q"],"params":[{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"},{"name":"category","type":"string","required":false,"description":"Category to live-probe sort behaviour against.","on_invalid":"reject","aliases":["path"]},{"name":"q","type":"string","required":false,"description":"Keyword context (optional).","on_invalid":"reject","aliases":["query"]}],"returns":"sort_options[], supported_query_params, live_probe, notes","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"de"}},{"name":"reviews","description":"Customer reviews and overall rating summary for a Zalando product (when reviews are embedded on the product page).","required_params":[],"optional_params":["url","sku","country"],"params":[{"name":"url","type":"string","required":false,"description":"Full Zalando product URL (.html). (product needs url OR sku.)","on_invalid":"reject","example":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"},{"name":"sku","type":"string","required":false,"description":"Zalando SKU, e.g. NI112N022-A11 (resolved from url when omitted).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"}],"returns":"reviews[], rating{average, count}, reviews_count, available","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"}},{"name":"attributes","description":"Product attribute clusters for a Zalando item — material composition, care instructions and other structured attributes from the product page.","required_params":[],"optional_params":["url","sku","country"],"params":[{"name":"url","type":"string","required":false,"description":"Full Zalando product URL (.html). (product needs url OR sku.)","on_invalid":"reject","example":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"},{"name":"sku","type":"string","required":false,"description":"Zalando SKU, e.g. NI112N022-A11 (resolved from url when omitted).","on_invalid":"reject"},{"name":"country","type":"enum","required":false,"description":"Zalando country edition (TLD) — sets language and currency.","on_invalid":"reject","allowed_values":[{"value":"de","label":"Germany"},{"value":"uk","label":"United Kingdom"},{"value":"gb","label":"United Kingdom"},{"value":"fr","label":"France"},{"value":"nl","label":"Netherlands"},{"value":"it","label":"Italy"},{"value":"es","label":"Spain"},{"value":"pl","label":"Poland"}],"default":"de","example":"de"}],"returns":"attribute_categories[] {category_name, attributes[{key,value}]}, available","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html"}}]},{"name":"zalora","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Zalora API scraper — Southeast Asia's largest fashion marketplace (Philippines, Singapore, Malaysia, Indonesia, Hong Kong): keyword product search with Zalora's own brand / category / colour / size / price / rating / discount facets and sorts, full product detail with per-size stock and attributes, customer reviews, and the complete category tree — live prices in PHP/SGD/MYR/IDR/HKD, no API key required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/zalora/v1","spec_available":true,"actions":[{"name":"search","description":"Search one Zalora country storefront by keyword, with the site's own filters (brand, category, colour, size, price range, minimum rating, minimum discount, seller) and sorts. Returns up to 100 products per page with the sale price, the struck-through original, the discount badge, rating, review count, seller, images and the category breadcrumb. Set include_sponsored to also get the promoted rows Zalora shows first.","required_params":["q"],"optional_params":["country","page","limit","sort","price_min","price_max","rating_min","discount_min","color","size","brand_id","category_id","seller_id","include_sponsored"],"params":[{"name":"q","type":"string","required":true,"description":"Search keyword — a product type, brand or description ('summer dress', 'nike air force', 'linen shirt', 'tas wanita').","on_invalid":"reject","example":"summer dress","aliases":["query","keyword"]},{"name":"country","type":"enum","required":false,"description":"Which Zalora country storefront to read. Catalogue, prices and currency differ per country; Taiwan is not served by Zalora any more and is not offered here.","on_invalid":"reject","allowed_values":[{"value":"ph","label":"Philippines — zalora.com.ph (PHP)"},{"value":"sg","label":"Singapore — zalora.sg (SGD)"},{"value":"my","label":"Malaysia — zalora.com.my (MYR)"},{"value":"id","label":"Indonesia — zalora.co.id (IDR)"},{"value":"hk","label":"Hong Kong — zalora.com.hk (HKD)"}],"default":"ph","example":"sg","aliases":["market"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":250},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (the source caps at 100; a larger value is clamped, not rejected).","on_invalid":"ignore","default":40,"example":40,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering — Zalora's own sort options, exactly as the site offers them. Note that Zalora's price sort steers the page rather than strictly ordering it: over 100 rows of the same query the cheapest-first page averaged 858 PHP and the dearest-first page 16 340 PHP, but neither page is monotonic. Sort to bias the results, filter with price_min / price_max to bound them.","on_invalid":"ignore","allowed_values":[{"value":"popularity","label":"Popularity (source default)"},{"value":"top_rated","label":"Top rated first"},{"value":"price_low_to_high","label":"Cheapest first"},{"value":"price_high_to_low","label":"Most expensive first"},{"value":"latest_arrival","label":"Latest arrivals first"},{"value":"discount","label":"Biggest discount first"},{"value":"top_selling","label":"Best selling first"}],"default":"popularity","example":"price_low_to_high"},{"name":"price_min","type":"number","required":false,"description":"Minimum price, in the country's own currency unit (PHP/SGD/MYR/IDR/HKD — see meta.currency). Compared against the price that is actually charged (the sale price when an item is marked down); every returned row is inside the band.","on_invalid":"ignore","example":1000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price, in the country's own currency unit. Every returned row is inside the band; a page may therefore hold fewer rows than `limit` (meta.dropped_out_of_band counts them).","on_invalid":"ignore","example":3000,"minimum":0},{"name":"rating_min","type":"enum","required":false,"description":"Keep only products rated at least this many stars.","on_invalid":"ignore","allowed_values":[{"value":"2","label":"2 stars & up"},{"value":"3","label":"3 stars & up"},{"value":"4","label":"4 stars & up"},{"value":"5","label":"5 stars"}],"example":"4"},{"name":"discount_min","type":"integer","required":false,"description":"Keep only products marked down by at least this percentage.","on_invalid":"ignore","example":30,"minimum":1,"maximum":100},{"name":"color","type":"string","required":false,"description":"Colour facet, lowercase as Zalora publishes it (black, white, blue, beige, red, green, pink, multi…). Comma-separate for several.","on_invalid":"ignore","example":"black","value_pattern":"[A-Za-z ,\\-]{2,60}"},{"name":"size","type":"string","required":false,"description":"Size facet in Zalora's own '<system>_<size>' notation (International_M, US_8, EU_38, AUS_6). Comma-separate for several.","on_invalid":"ignore","example":"International_M","value_pattern":"[A-Za-z0-9_ ,./\\-]{1,60}"},{"name":"brand_id","type":"string","required":false,"description":"Numeric Zalora brand id (the `brand_id` of any product row). Comma-separate for several brands.","on_invalid":"ignore","example":"6777","value_pattern":"[0-9,]{1,80}"},{"name":"category_id","type":"string","required":false,"description":"Numeric Zalora category id — take it from the `categories` action or from a product's `category_ids`.","on_invalid":"ignore","example":"7476","value_pattern":"[0-9,]{1,80}"},{"name":"seller_id","type":"string","required":false,"description":"Numeric seller/store id — lists only that store's products.","on_invalid":"ignore","example":"12487","value_pattern":"[0-9,]{1,80}"},{"name":"include_sponsored","type":"boolean","required":false,"description":"Also return the promoted rows Zalora places at the TOP of its own result page. They are returned first and flagged `sponsored: true`; off by default so organic ranking is clean.","on_invalid":"ignore","default":false,"example":true}],"returns":"products[]{config_sku, name, url, brand, brand_id, price, price_formatted, original_price, original_price_formatted, currency, discount_pct, discount_label, rating, review_count, seller, image_url, images[], category_breadcrumb[], category_ids[], color, label, sponsored} + meta{total, page, has_more, next_page, country, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"q":"dress","country":"ph","limit":10}},{"name":"category","description":"List every product in one Zalora category, without a keyword — the same rows and the same filters/sorts as `search`, driven by a numeric category_id from the `categories` action. Use it to walk a whole department (e.g. all Summer Dresses) rather than to answer a query.","required_params":["category_id"],"optional_params":["country","page","limit","sort","price_min","price_max","rating_min","discount_min","color","size","brand_id","seller_id"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric Zalora category id to list (e.g. 7476 = Summer Dresses on PH). Get ids from the `categories` action.","on_invalid":"reject","example":"7476","value_pattern":"[0-9,]{1,80}"},{"name":"country","type":"enum","required":false,"description":"Which Zalora country storefront to read. Catalogue, prices and currency differ per country; Taiwan is not served by Zalora any more and is not offered here.","on_invalid":"reject","allowed_values":[{"value":"ph","label":"Philippines — zalora.com.ph (PHP)"},{"value":"sg","label":"Singapore — zalora.sg (SGD)"},{"value":"my","label":"Malaysia — zalora.com.my (MYR)"},{"value":"id","label":"Indonesia — zalora.co.id (IDR)"},{"value":"hk","label":"Hong Kong — zalora.com.hk (HKD)"}],"default":"ph","example":"sg","aliases":["market"]},{"name":"page","type":"integer","required":false,"description":"1-based page number. Page forward with meta.next_page until meta.has_more is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":250},{"name":"limit","type":"integer","required":false,"description":"Rows per page, 1-100 (the source caps at 100; a larger value is clamped, not rejected).","on_invalid":"ignore","default":40,"example":40,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering — Zalora's own sort options, exactly as the site offers them. Note that Zalora's price sort steers the page rather than strictly ordering it: over 100 rows of the same query the cheapest-first page averaged 858 PHP and the dearest-first page 16 340 PHP, but neither page is monotonic. Sort to bias the results, filter with price_min / price_max to bound them.","on_invalid":"ignore","allowed_values":[{"value":"popularity","label":"Popularity (source default)"},{"value":"top_rated","label":"Top rated first"},{"value":"price_low_to_high","label":"Cheapest first"},{"value":"price_high_to_low","label":"Most expensive first"},{"value":"latest_arrival","label":"Latest arrivals first"},{"value":"discount","label":"Biggest discount first"},{"value":"top_selling","label":"Best selling first"}],"default":"popularity","example":"price_low_to_high"},{"name":"price_min","type":"number","required":false,"description":"Minimum price, in the country's own currency unit (PHP/SGD/MYR/IDR/HKD — see meta.currency). Compared against the price that is actually charged (the sale price when an item is marked down); every returned row is inside the band.","on_invalid":"ignore","example":1000,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Maximum price, in the country's own currency unit. Every returned row is inside the band; a page may therefore hold fewer rows than `limit` (meta.dropped_out_of_band counts them).","on_invalid":"ignore","example":3000,"minimum":0},{"name":"rating_min","type":"enum","required":false,"description":"Keep only products rated at least this many stars.","on_invalid":"ignore","allowed_values":[{"value":"2","label":"2 stars & up"},{"value":"3","label":"3 stars & up"},{"value":"4","label":"4 stars & up"},{"value":"5","label":"5 stars"}],"example":"4"},{"name":"discount_min","type":"integer","required":false,"description":"Keep only products marked down by at least this percentage.","on_invalid":"ignore","example":30,"minimum":1,"maximum":100},{"name":"color","type":"string","required":false,"description":"Colour facet, lowercase as Zalora publishes it (black, white, blue, beige, red, green, pink, multi…). Comma-separate for several.","on_invalid":"ignore","example":"black","value_pattern":"[A-Za-z ,\\-]{2,60}"},{"name":"size","type":"string","required":false,"description":"Size facet in Zalora's own '<system>_<size>' notation (International_M, US_8, EU_38, AUS_6). Comma-separate for several.","on_invalid":"ignore","example":"International_M","value_pattern":"[A-Za-z0-9_ ,./\\-]{1,60}"},{"name":"brand_id","type":"string","required":false,"description":"Numeric Zalora brand id (the `brand_id` of any product row). Comma-separate for several brands.","on_invalid":"ignore","example":"6777","value_pattern":"[0-9,]{1,80}"},{"name":"seller_id","type":"string","required":false,"description":"Numeric seller/store id — lists only that store's products.","on_invalid":"ignore","example":"12487","value_pattern":"[0-9,]{1,80}"}],"returns":"products[]{…same shape as search…} + meta{total, page, has_more, next_page, country, currency}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"7476"}},{"name":"detail","description":"Full product detail by config_sku, product slug or product URL: sale price, struck original, saving amount, discount badge, brand, seller, rating and review count, the full attribute table (material, care, fit, colour…), every size variant with its own stock count and price, the image gallery, delivery/return terms and the category breadcrumb.","required_params":["config_sku"],"optional_params":["country"],"params":[{"name":"config_sku","type":"string","required":true,"description":"Zalora product handle: the `config_sku` from a search row (AE5AFACBFDC607GS), the product-page slug, or a full product URL (zalora.<tld>/p/<slug>) — all three resolve.","on_invalid":"reject","example":"AE5AFACBFDC607GS","value_pattern":"(?:https?://[^\\s]+|[A-Za-z0-9\\-]{6,120})","aliases":["sku","id","url"]},{"name":"country","type":"enum","required":false,"description":"Which Zalora country storefront to read. Catalogue, prices and currency differ per country; Taiwan is not served by Zalora any more and is not offered here.","on_invalid":"reject","allowed_values":[{"value":"ph","label":"Philippines — zalora.com.ph (PHP)"},{"value":"sg","label":"Singapore — zalora.sg (SGD)"},{"value":"my","label":"Malaysia — zalora.com.my (MYR)"},{"value":"id","label":"Indonesia — zalora.co.id (IDR)"},{"value":"hk","label":"Hong Kong — zalora.com.hk (HKD)"}],"default":"ph","example":"sg","aliases":["market"]}],"returns":"product{config_sku, name, url, brand, price, price_formatted, original_price, currency, discount_pct, saving_amount, rating, review_count, seller, seller_id, description, attributes{}, variants[]{simple_sku, size, quantity, price}, in_stock, total_stock, images[], media[], category_breadcrumb[], return_period_days, tags[]}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"config_sku":"AE5AFACBFDC607GS","country":"ph"}},{"name":"reviews","description":"Customer reviews for one product by config_sku, slug or URL: star rating, review text, the reviewer's own quality tags, the display handle Zalora publishes (already masked at the source) and the aggregate rating / review count / most-mentioned tags.","required_params":["config_sku"],"optional_params":["country","limit","cursor"],"params":[{"name":"config_sku","type":"string","required":true,"description":"Zalora product handle: the `config_sku` from a search row (AE5AFACBFDC607GS), the product-page slug, or a full product URL (zalora.<tld>/p/<slug>) — all three resolve.","on_invalid":"reject","example":"AE5AFACBFDC607GS","value_pattern":"(?:https?://[^\\s]+|[A-Za-z0-9\\-]{6,120})","aliases":["sku","id","url"]},{"name":"country","type":"enum","required":false,"description":"Which Zalora country storefront to read. Catalogue, prices and currency differ per country; Taiwan is not served by Zalora any more and is not offered here.","on_invalid":"reject","allowed_values":[{"value":"ph","label":"Philippines — zalora.com.ph (PHP)"},{"value":"sg","label":"Singapore — zalora.sg (SGD)"},{"value":"my","label":"Malaysia — zalora.com.my (MYR)"},{"value":"id","label":"Indonesia — zalora.co.id (IDR)"},{"value":"hk","label":"Hong Kong — zalora.com.hk (HKD)"}],"default":"ph","example":"sg","aliases":["market"]},{"name":"limit","type":"integer","required":false,"description":"Reviews per page (the source serves them in cursor pages).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":100},{"name":"cursor","type":"string","required":false,"description":"Opaque page cursor — pass back meta.next_cursor from the previous response to get the next page of reviews.","on_invalid":"ignore","example":"2"}],"returns":"reviews[]{review_id, rating, text, author, created_at, tags[], images[]} + statistics{avg_rating, review_count, most_mentioned_tags[]} + meta{has_more, next_cursor, country}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"config_sku":"AE5AFACBFDC607GS","country":"ph"}},{"name":"categories","description":"The whole Zalora category tree for a country (about 1 800 nodes on PH), optionally narrowed to one segment. Each node carries its numeric category_id, name, parent id, segment and url key — this is where the category_id for `search` / `category` comes from.","required_params":[],"optional_params":["country","segment"],"params":[{"name":"country","type":"enum","required":false,"description":"Which Zalora country storefront to read. Catalogue, prices and currency differ per country; Taiwan is not served by Zalora any more and is not offered here.","on_invalid":"reject","allowed_values":[{"value":"ph","label":"Philippines — zalora.com.ph (PHP)"},{"value":"sg","label":"Singapore — zalora.sg (SGD)"},{"value":"my","label":"Malaysia — zalora.com.my (MYR)"},{"value":"id","label":"Indonesia — zalora.co.id (IDR)"},{"value":"hk","label":"Hong Kong — zalora.com.hk (HKD)"}],"default":"ph","example":"sg","aliases":["market"]},{"name":"segment","type":"enum","required":false,"description":"Return only the categories of one Zalora segment. Omit for the whole tree.","on_invalid":"ignore","allowed_values":[{"value":"women","label":"Women"},{"value":"men","label":"Men"},{"value":"kids","label":"Kids"},{"value":"beauty","label":"Beauty"},{"value":"sports","label":"Sports"},{"value":"luxury","label":"Luxury"},{"value":"home","label":"Home"}],"example":"women"}],"returns":"categories[]{category_id, name, segment, parent_id, url_key, image_url} + meta{total, country}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"country":"ph","segment":"women"}}]},{"name":"zappos","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Zappos API — search zappos.com for shoes, boots, sandals, clothing, bags, accessories, eyewear and watches, and pull a full product with every colourway, every size and width, per-variant price, per-variant units in stock, ASIN, UPC, brand, description, measurements, ratings and images — no API key or account required","version":"1.0.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/zappos/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Zappos catalog. Give a `query` ('running shoes', 'hiking boots', 'nike air max', 'womens dresses') and get back 100 products per page, each with Zappos' own product id, style id and colour id, price and list price, discount, units in stock, star rating, review count, badges, the full image set, and the product's OTHER colourways inline. Narrow with brand, colour, gender, size, width, department, category, material, style, feature, occasion, pattern, theme, price bucket and an on-sale switch; sort by price, rating, newest or best sellers. Every filter value your query actually supports — with the number of products behind it — is returned in `filters_available`, so you never have to guess.","required_params":["query"],"optional_params":["max_results","page","sort","brand","color","gender","size","width","category","department","material","style","feature","occasion","pattern","theme","price_range","on_sale","exclude","lean"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for on zappos.com — a category ('running shoes', 'hiking boots', 'womens dresses'), a brand + category ('nike air max', 'ugg slippers'), or a product name. Zappos auto-narrows obvious queries to a department (searching 'running shoes' selects Shoes for you); whatever it decided is reported back in `applied_filters`.","on_invalid":"reject","example":"running shoes","aliases":["q","term","keyword","text","search"]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return (1-400). Zappos paginates 100 per page; asking for more than 100 fetches the following pages automatically, up to four.","on_invalid":"ignore","default":100,"minimum":1,"maximum":400,"aliases":["limit","max","count"]},{"name":"page","type":"integer","required":false,"description":"Which result page to start from (1-based, 100 products per page). Page until `meta.pagination.has_more` is false.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":100},{"name":"sort","type":"enum","required":false,"description":"Result ordering, using Zappos' own six options. Omit for Zappos' relevance ranking. NOTE (measured, not a bug): every ordering other than relevance also DROPS the products that have no value for the sort key — sorting 'hiking boots' by rating takes the result count from 462 to 343, because 119 products have no rating yet. `meta.pagination.total_results` always reports the count for the request you actually made.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"Relevance (Zappos default)"},{"value":"newest","label":"New Arrivals"},{"value":"rating","label":"Customer Rating"},{"value":"best_sellers","label":"Best Sellers"},{"value":"price_low","label":"Price: Low to High"},{"value":"price_high","label":"Price: High to Low"}],"example":"price_low","aliases":["order","sort_by"]},{"name":"brand","type":"string","required":false,"description":"Only this brand, written the way Zappos writes it (Nike, adidas, Merrell, UGG, Dr. Martens). The full brand list for your query, with result counts, comes back in `filters_available.realBrandNameFacet`.","on_invalid":"ignore","example":"Merrell"},{"name":"color","type":"string","required":false,"description":"Only this colour family — Zappos groups colours into about fourteen families (Black, Brown, Gray, White, Blue, Green, Red, Pink, Purple, Tan, Multi, Metallic, Yellow, Orange). Live values in `filters_available.colorFacet`.","on_invalid":"ignore","example":"Black"},{"name":"gender","type":"string","required":false,"description":"Men, Women, Boys or Girls — Zappos' own audience facet. Live values in `filters_available.txAttrFacet_Gender`.","on_invalid":"ignore","example":"Women","aliases":["sex","audience"]},{"name":"size","type":"string","required":false,"description":"Only products available in this size. Zappos uses a different size facet per audience (Men's Shoe Size, Women's Shoe Size, Kids' Shoe Sizes, clothing sizes), so pass the size the way it is printed — '10', '10.5', 'Large', '8 Toddler' — and the engine picks the size facet your query actually offers. Live values are the `filters_available` entries whose label contains 'Size'.","on_invalid":"ignore","example":"10"},{"name":"width","type":"string","required":false,"description":"Only products available in this width — Narrow, Medium, Wide, Extra Wide, Extra-Extra Wide (footwear only). Live values are the `filters_available` entries whose label contains 'Width'.","on_invalid":"ignore","example":"Wide"},{"name":"category","type":"string","required":false,"description":"Zappos' second-level category (Boots, Sneakers & Athletic Shoes, Sandals, Hiking, Dresses, Backpacks…). Live values in `filters_available.zc2`.","on_invalid":"ignore","example":"Boots","aliases":["subcategory"]},{"name":"department","type":"string","required":false,"description":"Zappos' top-level department (Shoes, Clothing, Bags, Accessories, Eyewear, Watches). Live values in `filters_available.zc1`.","on_invalid":"ignore","example":"Shoes","aliases":["dept"]},{"name":"material","type":"string","required":false,"description":"Leather, Suede, Canvas, Mesh, Nylon, Rubber, Synthetic, Textile. Live values in `filters_available.txAttrFacet_Materials`.","on_invalid":"ignore","example":"Leather"},{"name":"style","type":"string","required":false,"description":"Zappos' style facet (Athletic, Bootie, Chukka, Comfort, Duck Boot, Western…). Live values in `filters_available.txAttrFacet_Styles`.","on_invalid":"ignore","example":"Chukka"},{"name":"feature","type":"string","required":false,"description":"A product feature Zappos tags (Waterproof, Arch Support, Insulated, Lightweight, Slip Resistant, Moisture Wicking…). Live values in `filters_available.txAttrFacet_Features`.","on_invalid":"ignore","example":"Waterproof"},{"name":"occasion","type":"string","required":false,"description":"Athletic, Casual, Dress, Outdoor, Work & Duty. Live values in `filters_available.txAttrFacet_Occasion`.","on_invalid":"ignore","example":"Outdoor"},{"name":"pattern","type":"string","required":false,"description":"Camo, Distressed, Logo, Quilted, Solid, Woven… Live values in `filters_available.txAttrFacet_Pattern`.","on_invalid":"ignore","example":"Solid"},{"name":"theme","type":"string","required":false,"description":"Action Sports, Summer, Western, Winter. Live values in `filters_available.txAttrFacet_Theme`.","on_invalid":"ignore","example":"Winter"},{"name":"price_range","type":"string","required":false,"description":"One of Zappos' price buckets — '$50 and Under', '$100 and Under', '$200 and Under', '$200 and Over'. Zappos publishes buckets, not a free min/max range; live values in `filters_available.priceFacet`.","on_invalid":"ignore","example":"$100 and Under","aliases":["price_bucket"]},{"name":"on_sale","type":"boolean","required":false,"description":"Only products Zappos currently marks as on sale.","on_invalid":"ignore","default":false,"aliases":["sale","discounted"]},{"name":"exclude","type":"array","required":false,"description":"Leave heavy parts out of the response. Omit it and the response is exactly as before. `filters_available` is about two thirds of a typical search response and `other_colors` about a fifth; dropping them never removes a price, stock, id or the main `image` of a card. Unknown values are ignored.","on_invalid":"ignore","allowed_values":[{"value":"filters_available","label":"the facet vocabulary (about two thirds of a typical response)"},{"value":"other_colors","label":"each card's sibling colourways"},{"value":"images","label":"each card's full image set (the main `image` stays)"}],"example":"filters_available, images"},{"name":"lean","type":"boolean","required":false,"description":"Shorthand for exclude=filters_available,other_colors,images: the cards' ids, names, prices, stock, ratings and main image, nothing else. 12 'running shoes' cards: 134 KB -> 11 KB.","on_invalid":"ignore","default":false}],"returns":"products[]{product_id, style_id, color_id, name, brand, product_type, color, color_detail, genders[], url, price, original_price, currency, on_sale, percent_off, discount_amount, in_stock, units_available, low_stock, is_new, rating, style_rating, review_count, image, images[]{view, url}, swatch_image, has_fabric_swatch, is_couture, badges[], promo_badges[], other_colors[]{style_id, color_id, color, color_detail, price, original_price, percent_off, units_available, rating, review_count, image, url}} + filters_available{<zappos facet field>: {label, multi_select, values[]{value, label, count, selected, apply_url}}} + search{term, original_term, corrected_from, heading, applied_filters}. meta.pagination{page, per_page, total_results, page_count, returned, has_more, next_page}; meta.filters{applied, ignored}. Honest caveats: `units_available` is Zappos' live stock count for that colourway summed over its sizes — search does NOT break it down per size, which is what `product_detail` is for; `rating` is the product-level star average and `style_rating` the colourway's, and both are 0 (not null) on products with no reviews yet, exactly as Zappos publishes them; `other_colors` is present only when Zappos ships the sibling colourways on the card; `swatch_image` exists only for products with a fabric swatch; a filter whose value your query does not offer is reported in `meta.filters.ignored` and is never silently dropped. `exclude` / `lean` drop the named parts (the keys are then absent, not null).","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"running shoes","max_results":40}},{"name":"price","description":"Refresh the current price and stock of one Zappos product, cheaply. Give the `product_id` (optionally `color_id` or `style_id`) and get back every colourway with its price, list price, discount, in-stock flag and units in stock, plus the requested colourway on top. One request, about half the bytes of `product_detail`. Stock is per COLOURWAY (summed over its sizes); for per-size stock, ASIN and UPC use `product_detail`.","required_params":["product_id"],"optional_params":["color_id","style_id","url"],"params":[{"name":"product_id","type":"string","required":true,"description":"Zappos' own PRODUCT id — the number in a zappos.com/product/<id> URL, the `sku` in their schema.org data, and the `product_id` on every `search` result. Always a string of digits; never hashed, composed or re-derived. A style id is NOT accepted here (Zappos does not serve /product/<styleId>) — pass it as `style_id` instead. You may pass the full product URL in `url` rather than this.","on_invalid":"reject","example":"10020684","aliases":["id","productId","product","sku","asin_product"]},{"name":"color_id","type":"string","required":false,"description":"Which colourway to put in `selected_color`. Zappos' own colour id, exactly as `search` returns it. Omit to get the colourway Zappos shows by default. If the id does not belong to this product the call fails with NOT_FOUND and lists the ids that do — it never quietly returns a different colour.","on_invalid":"ignore","example":"1115616","aliases":["colorId","colour_id"]},{"name":"style_id","type":"string","required":false,"description":"Alternative colour selector: Zappos' STYLE id (their SKU for one colourway of one product), as returned by `search`. Resolved to its colour inside the product payload, so it costs no extra request. Use `color_id` OR `style_id`.","on_invalid":"ignore","example":"6597311","aliases":["styleId","style"]},{"name":"url","type":"string","required":false,"description":"A full zappos.com product URL — an alternative to `product_id` (+ `color_id`). Both the short /product/<id>/color/<id> form and the long /p/<slug>/product/<id>/color/<id> form are accepted.","on_invalid":"ignore","example":"https://www.zappos.com/product/10020684/color/1115616","aliases":["product_url","link"]}],"returns":"product_id, name, brand, url, currency, price, original_price, percent_off, on_sale, in_stock, units_available (all for the selected colourway), selected_color{color_id, style_id, color, url, price, original_price, currency, percent_off, on_sale, in_stock, units_available}, colors[] (same shape, every colourway), any_in_stock, price_min, price_max, color_count, source. Honest caveats: when no colour is asked for, the selected colourway is the one Zappos lists first, which can differ from product_detail's default; a product that is sold out in every colour does not appear in Zappos' search index, so for it (and for a colour the index does not list) the engine reads the product page instead: same answer, source 'product_page', slower.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"10020684"}},{"name":"product_detail","description":"Get one Zappos product in full, by its product id (or its zappos.com URL) — brand, category, gender, the marketing description and every specification bullet, the parsed physical measurements (weight, heel height, shaft, circumference, platform height, bag depth and strap drop where Zappos lists them), size charts, the customer rating with its star histogram and the runs-small / runs-wide / arch-support breakdowns, and the two customer reviews Zappos embeds. Every colourway is returned with its own style id, colour id, price, list price, image set and stock, and the selected colourway is broken down to the SIZE x WIDTH level: one row per purchasable variant with Zappos' stock id, the Amazon ASIN, the manufacturer UPC, that variant's own price and list price, and how many units are in stock right now.","required_params":["product_id"],"optional_params":["color_id","style_id","url","include_all_color_variants"],"params":[{"name":"product_id","type":"string","required":true,"description":"Zappos' own PRODUCT id — the number in a zappos.com/product/<id> URL, the `sku` in their schema.org data, and the `product_id` on every `search` result. Always a string of digits; never hashed, composed or re-derived. A style id is NOT accepted here (Zappos does not serve /product/<styleId>) — pass it as `style_id` instead. You may pass the full product URL in `url` rather than this.","on_invalid":"reject","example":"10020684","aliases":["id","productId","product","sku","asin_product"]},{"name":"color_id","type":"string","required":false,"description":"Which colourway to put in `selected_color`. Zappos' own colour id, exactly as `search` returns it. Omit to get the colourway Zappos shows by default. If the id does not belong to this product the call fails with NOT_FOUND and lists the ids that do — it never quietly returns a different colour.","on_invalid":"ignore","example":"1115616","aliases":["colorId","colour_id"]},{"name":"style_id","type":"string","required":false,"description":"Alternative colour selector: Zappos' STYLE id (their SKU for one colourway of one product), as returned by `search`. Resolved to its colour inside the product payload, so it costs no extra request. Use `color_id` OR `style_id`.","on_invalid":"ignore","example":"6597311","aliases":["styleId","style"]},{"name":"url","type":"string","required":false,"description":"A full zappos.com product URL — an alternative to `product_id` (+ `color_id`). Both the short /product/<id>/color/<id> form and the long /p/<slug>/product/<id>/color/<id> form are accepted.","on_invalid":"ignore","example":"https://www.zappos.com/product/10020684/color/1115616","aliases":["product_url","link"]},{"name":"include_all_color_variants","type":"boolean","required":false,"description":"By default the per-size variant list (stock id, ASIN, UPC, price, units in stock) is returned for the SELECTED colour, and the other colourways come back summarised (price, price range, in-stock flag, variant count). Set true to get the full size grid for EVERY colourway in one response — no extra request, just a much larger payload (a 22-colour sneaker is ~370 variants).","on_invalid":"ignore","default":false,"aliases":["all_variants","full_variants"]}],"returns":"product{product_id, name, full_name, brand, brand_id, brand_url, product_type, category, gender, url, product_url, description, bullets[], measurements{}, size_charts[]{label, url}, breadcrumbs[]{name, url}, video{title, url, embed_url, thumbnail}, rating{average, review_count, histogram_pct, fit_size, fit_width, fit_arch}, fit{size, width, arch}, sample_reviews[]{review_id, rating, text, author, author_byline, date, up_votes, verified_purchase, incentivised, has_media, comfort_rating, look_rating, fit_size, fit_width, fit_arch, also_owns}, color_count, price_min, price_max, currency} + selected_color{color_id, style_id, color, url, price, original_price, percent_off, on_sale, final_sale, badge, image, images[]{view, url}, variant_count, in_stock_variant_count, in_stock, units_available, price_min, price_max, size_axis, widths[], size_ranges[], variants[]{stock_id, asin, upc, size, size_label, size_group, size_system, size_range, size_id, width, width_id, dimensions{}, price, original_price, currency, on_sale, in_stock, units_available, is_placeholder}} + colors[] (the same shape for every colourway; `variants` only on the selected one unless include_all_color_variants=true). Honest caveats: per-variant price IS published and is returned verbatim — it is NOT copied down from the colourway, and where a size genuinely carries no price of its own the field is null rather than filled in; sold-out sizes are still listed, but Zappos replaces their stock id with a synthetic `out_of_stock_…` token and blanks the ASIN/UPC, so those rows come back with `stock_id: null`, `asin: null`, `upc: null` and `is_placeholder: true`; `fit` is null when no customer has rated the fit (Zappos renders its default text at 0%, which we do not pass off as data); `measurements` exists only for the categories Zappos measures (footwear and bags — not clothing, watches or eyewear); `video` and `size_charts` are per-product and usually absent; `sample_reviews` is at most TWO — the most- and least-upvoted — because that is all Zappos embeds in the product page.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"10020684"}}]},{"name":"zara","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Zara API — search the Zara catalogue in 20 country stores and pull a full product: price with discount and currency, every colourway, every size with its own SKU and live stock status, the full-resolution image gallery, fibre composition, care instructions and country of origin — no API key or account required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/zara/v1","spec_available":true,"actions":[{"name":"search","description":"Search the Zara catalogue and get back the products on sale right now — each with Zara's own product id, name, price (with the was-price and discount percentage when it is reduced), currency, availability, colourway with hex code, the other colours it comes in, the product images at full resolution, the department and product family, and the link to the page. Choose the country store with `market` (that is what sets the currency), narrow with section, colour, category or brand, sort by price, and page through the results. Every filter value the query actually supports comes back in `filters_available` with counts, so you never have to guess one.","required_params":["query"],"optional_params":["market","section","group_section","size","brand","color","category","sort","max_results","page"],"params":[{"name":"query","type":"string","required":true,"description":"What to look for — a garment, a material + garment, a product name, even a reference ('linen blazer', 'wide leg jeans', 'wool coat', 'scented candle'). Zara matches its own catalogue; when it cannot match the words it silently falls back to semantic similarity, so always read `match.type` in the response (EXACT = the words matched, SPELL_CHECK_LONG = Zara corrected the spelling, SEMANTIC_FALLBACK = the results are only loosely related).","on_invalid":"reject","example":"linen blazer","aliases":["q","keyword","search","searchTerm","text"]},{"name":"market","type":"enum","required":false,"description":"Which Zara country store to read. This decides the catalogue, the assortment, the prices AND the currency — the same product is USD 35.90 in `us`, EUR 22.95 in `de` and GBP 22.99 in `gb`. Prices do NOT depend on where the request comes from, only on this value, so the same market always returns the same currency.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"br","label":"Brazil (BRL)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"in","label":"India (INR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"au","label":"Australia (AUD)"}],"default":"us","example":"us","aliases":["country","store","region"]},{"name":"section","type":"enum","required":false,"description":"Restrict to one department. Omit for all of them. (Zara accepts other words here and silently ignores them, so only the four that verifiably filter are offered.)","on_invalid":"reject","allowed_values":[{"value":"woman","label":"Women's"},{"value":"man","label":"Men's"},{"value":"kid","label":"Kids'"},{"value":"home","label":"Zara Home"}],"example":"woman","aliases":["department","gender"]},{"name":"group_section","type":"string","required":false,"description":"Narrow to one sub-department INSIDE a section, which is where the kids split lives: `girl`, `boy`, `babygirl`, `babyboy` and whatever else the query supports. Take the value from `filters_available.groupSection`, which returns it with its label and count (`6-14 YEARS | GIRL`). Zara filters this at the source: measured 2026-09-24 on market pt, the girl, boy, babygirl and babyboy arms returned 30 rows each and shared no product between girl and any other arm (boy/babyboy overlap 2, i.e. genuinely unisex items).","on_invalid":"ignore","example":"girl","aliases":["groupsection","sub_section","age_group"]},{"name":"size","type":"string","required":false,"description":"Keep only products offered in one size. Take the value from `filters_available.sizes`, which carries the human label next to it (`6-7 years (122 cm)`). Filtered at the source, like `group_section`. A product matches when that size exists on it, not when it is in stock.","on_invalid":"ignore","example":"67years122cm","aliases":["sizes"]},{"name":"brand","type":"enum","required":false,"description":"Zara's search index is the Inditex index for that store, so a query can return Zara Home and Massimo Dutti products alongside Zara ones (measured: 78% zara, 14% zarahome, 8% massimodutti over 720 rows, and heavily query-dependent — 'candle' is almost entirely Zara Home). Set this to keep only one brand. Zara has no server-side brand filter, so this is applied to the rows after they are fetched: `meta.pagination.total_results` stays Zara's own unfiltered count and `meta.brand_filtered_out` reports how many rows were removed.","on_invalid":"reject","allowed_values":[{"value":"zara","label":"Zara"},{"value":"zarahome","label":"Zara Home"},{"value":"massimodutti","label":"Massimo Dutti"}],"example":"zara"},{"name":"color","type":"string","required":false,"description":"Keep only one colour family. Pass a value from `filters_available.color` (black, beige, blue, brown, grey, green, white, red, pink, purple, orange, yellow, multicolour …) — the exact list a query supports, with counts, comes back in every response so you never have to guess.","on_invalid":"ignore","example":"black","aliases":["colour"]},{"name":"category","type":"string","required":false,"description":"Keep only one catalogue branch, using a value from `filters_available.rootCategories` (catalog01_woman, catalog01_man, catalog01_kid, catalog01_home). This is the SAME cut as `section`, not a finer one, so `section` is the clearer way to ask for it.","on_invalid":"ignore","example":"catalog01_kid","aliases":["root_category"]},{"name":"sort","type":"enum","required":false,"description":"Result ordering. Omit for Zara's own relevance ranking. Price is the only ordering Zara's search supports — it rejects every other sort key outright, so no other option is offered here.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Cheapest first"},{"value":"price_desc","label":"Most expensive first"}],"example":"price_asc","aliases":["order","sort_by"]},{"name":"max_results","type":"integer","required":false,"description":"How many products to return, 1-200. One upstream request whatever you ask for — Zara pages by offset, not by fixed page size.","on_invalid":"ignore","default":40,"example":40,"minimum":1,"maximum":200,"aliases":["limit","max","page_size"]},{"name":"page","type":"integer","required":false,"description":"Which page of results to start from (1-based; a page is `max_results` products). Page until `meta.pagination.has_more` is false. Zara stops serving results a little under 2,000 products deep whatever the query's headline total says.","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":200}],"returns":"results[]{product_id, product_group_id, name, url, brand, brand_id, reference, display_reference, price{amount, currency, raw, exponent, was, discount_pct, discount_label, on_sale, min, max, promotions[], unit_price}, availability, in_stock, section, section_name, family_name, subfamily_name, kind, type, color{product_id, color_id, name, hex, reference, availability}, available_colors[]{name, hex}, additional_color_count, main_color_hex, tags[]{type, label}, image, images[]{url, kind, name, width, height}, image_count, seo{keyword, seo_product_id, discern_product_id}, position} + filters_available{color[], rootCategories[], price_range[]} (each {value, label, count, filter}) + sort_available[] + market{code, store_id, locale, currency, url_base} + match{type, provider, universe}. meta.pagination{page, page_size, total_results, returned, has_more, next_page}. Honest caveats: `price.was` / `discount_pct` / `discount_label` exist only on reduced items (about 1 row in 3.5 when something is on sale, none otherwise) — a missing was-price means the item is not reduced, never that we failed to read it; `price.min`/`max` appear only on the rare product whose colourways are priced differently; `tags` is Zara's own badge (NEW, …) and most products carry none; `additional_color_count` is 0 on single-colour products; `total_results` is Zara's headline count for the query and it is NOT the number you can page through — paginate on `has_more`.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"dress","max_results":20}},{"name":"product_detail","description":"Get one Zara product in full, by its product id or its zara.com URL — the name and the full description, the price with its currency and any discount, the product reference as printed on the label, EVERY colourway it is made in and, inside each one, EVERY size with Zara's own SKU number, that size's own price and whether it is in stock right now. Also the complete image gallery at full resolution, the fibre composition broken down per garment part, care instructions, country of origin and traceability, safety warnings, certified and sustainable material claims, physical measurements where Zara publishes them, the size system, the department and product family, and the date the product first went on sale. Choose the country store with `market` — id, price, currency and stock are all per-market.","required_params":[],"optional_params":["product_id","url","market","include_composition","find_market"],"params":[{"name":"product_id","type":"string","required":false,"description":"Zara's own product id — exactly the `product_id` a search row returns, and the `v1=` value in a zara.com product URL. A digits-only string (9 digits today); it is never a number to be arithmetic on and never has leading zeros stripped. Zara's ids are colour-level: one id is one colourway of a garment. Passing the `product_group_id` instead also works and returns the same group. Provide `product_id` OR `url`.","on_invalid":"reject","example":"579951647","aliases":["id","productId","product","colour_id","color_product_id"]},{"name":"url","type":"string","required":false,"description":"A zara.com product URL, as an alternative to `product_id`. The id is read from the `v1=` parameter, which every link Zara itself publishes carries. A URL without `v1=` cannot be resolved — Zara publishes no lookup from the short `-p<number>` code to a product — and is rejected with that explanation rather than guessed at.","on_invalid":"ignore","example":"https://www.zara.com/us/en/textured-blazer-p04387050.html?v1=579951647","aliases":["product_url","link"]},{"name":"market","type":"enum","required":false,"description":"Which Zara country store to read. This decides the catalogue, the assortment, the prices AND the currency — the same product is USD 35.90 in `us`, EUR 22.95 in `de` and GBP 22.99 in `gb`. Prices do NOT depend on where the request comes from, only on this value, so the same market always returns the same currency.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"br","label":"Brazil (BRL)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"in","label":"India (INR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"au","label":"Australia (AUD)"}],"default":"us","example":"us","aliases":["country","store","region"]},{"name":"include_composition","type":"boolean","required":false,"description":"Include the composition-and-care detail: fibre percentages per garment part, washing/care instructions, country of origin and traceability, safety warnings, certified and sustainable material claims, and (on bags, shoes, candles and similar) physical measurements. Costs one extra upstream request that runs alongside the main one; set false for the fastest possible response.","on_invalid":"ignore","default":true,"aliases":["include_extra_detail","with_composition"]},{"name":"find_market","type":"boolean","required":false,"description":"When the product is not in the market you asked for, look for it in the largest Zara stores and name the ones that have it (`meta.available_in`). Zara's catalogue is per-country, so an id that is missing in one store is very often live in another. Off by default because it costs one extra lookup per store searched; the request has already failed either way and is not charged.","on_invalid":"ignore","default":false}],"returns":"product{product_id, product_group_id, name, url, description, brand, brand_id, reference, display_reference, price{amount, currency, raw, exponent, was, discount_pct, discount_label, on_sale, promotions[], unit_price}, availability, in_stock, sizes_in_stock, state, section, section_name, family_id, family_name, subfamily_id, subfamily_name, kind, type, first_visible_date, size_system, size_guide_available, buyer, flags{}, selected_color, colors[]{product_id, color_id, name, hex, reference, styling_id, availability, price{}, description, sizes[]{sku, size_id, equivalent_size_id, name, short_name, availability, in_stock, reference, price{}, demand, attributes[]}, images[]{url, kind, name, width, height}, videos[], tags[], attributes[]{type, identifier, name, values[], properties{}}, related_product_ids[]}, color_count, sku_count, composition{parts[]{description, components[]{material, percentage}, areas[], microcontents[], reinforcements[]}, exceptions[]}, care[], origin[], warnings[], measurements[], certified_materials[], sustainable_materials[], conformity_declaration[], extra_detail_sections[]{type, lines[]}, seo{keyword, seo_product_id, discern_product_id, breadcrumb[]}}. Honest caveats: `composition` is the structured fibre table and is present on most but not all products (perfume and some accessories have none); `care`, `origin`, `warnings`, `measurements`, `certified_materials` and `sustainable_materials` are per-category — `measurements` is published for bags, shoes and homeware and not for garments, `warnings` for candles, perfume and children's wear — and each is null where Zara publishes nothing, never because the fetch failed; `videos` exists only on the products Zara filmed; `attributes` are Zara's own machine tags, returned verbatim because they have no cross-category meaning; `related_product_ids` are the looks and sets Zara links to the product. `availability` / `in_stock` / `sizes_in_stock` are computed from the per-size stock, because per size is the only granularity Zara publishes here — a product counts as in stock when at least one of its sizes is, and all three are null for a product with no sizes at all. Zara publishes NO ratings, NO reviews, NO stock quantity (only in/out per size) and NO seller — see the source notes; nothing here is invented to fill those gaps.","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"545422590","market":"us"}},{"name":"price","description":"Cheap refresh of ONE Zara product's current price and stock, by product id or zara.com URL: the price with its currency (and the was-price and discount when it is reduced), the colour's availability word and an `in_stock` boolean. One light upstream request instead of the three a full product_detail makes, so use this for daily price/stock monitoring and product_detail only when you need sizes, images or composition. Same ids and the same `market` knob as product_detail.","required_params":[],"optional_params":["product_id","url","market"],"params":[{"name":"product_id","type":"string","required":false,"description":"Zara's own product id — exactly the `product_id` a search row returns, and the `v1=` value in a zara.com product URL. A digits-only string (9 digits today); it is never a number to be arithmetic on and never has leading zeros stripped. Zara's ids are colour-level: one id is one colourway of a garment. Passing the `product_group_id` instead also works and returns the same group. Provide `product_id` OR `url`.","on_invalid":"reject","example":"579951647","aliases":["id","productId","product","colour_id","color_product_id"]},{"name":"url","type":"string","required":false,"description":"A zara.com product URL, as an alternative to `product_id`. The id is read from the `v1=` parameter, which every link Zara itself publishes carries. A URL without `v1=` cannot be resolved — Zara publishes no lookup from the short `-p<number>` code to a product — and is rejected with that explanation rather than guessed at.","on_invalid":"ignore","example":"https://www.zara.com/us/en/textured-blazer-p04387050.html?v1=579951647","aliases":["product_url","link"]},{"name":"market","type":"enum","required":false,"description":"Which Zara country store to read. This decides the catalogue, the assortment, the prices AND the currency — the same product is USD 35.90 in `us`, EUR 22.95 in `de` and GBP 22.99 in `gb`. Prices do NOT depend on where the request comes from, only on this value, so the same market always returns the same currency.","on_invalid":"reject","allowed_values":[{"value":"us","label":"United States (USD)"},{"value":"ca","label":"Canada (CAD)"},{"value":"mx","label":"Mexico (MXN)"},{"value":"br","label":"Brazil (BRL)"},{"value":"gb","label":"United Kingdom (GBP)"},{"value":"ie","label":"Ireland (EUR)"},{"value":"es","label":"Spain (EUR)"},{"value":"pt","label":"Portugal (EUR)"},{"value":"fr","label":"France (EUR)"},{"value":"it","label":"Italy (EUR)"},{"value":"de","label":"Germany (EUR)"},{"value":"nl","label":"Netherlands (EUR)"},{"value":"pl","label":"Poland (PLN)"},{"value":"tr","label":"Turkey (TRY)"},{"value":"ae","label":"United Arab Emirates (AED)"},{"value":"in","label":"India (INR)"},{"value":"jp","label":"Japan (JPY)"},{"value":"kr","label":"South Korea (KRW)"},{"value":"au","label":"Australia (AUD)"}],"default":"us","example":"us","aliases":["country","store","region"]}],"returns":"product{product_id, product_group_id, name, color, reference, url, price{amount, currency, raw, exponent, was, discount_pct, discount_label, on_sale, min, max, promotions[], unit_price}, currency, availability, in_stock}. `availability` is Zara's own colour-level word (in_stock, low_on_stock, out_of_stock, ...); `in_stock` is true when that colour can be bought now (in_stock or low_on_stock). Per-size stock is NOT here: Zara publishes it only on the product payload, so ask product_detail for sizes. `price.was` / `discount_pct` exist only on reduced items.","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"url":"https://www.zara.com/us/en/textured-blazer-p04387050.html?v1=579951647"}}]},{"name":"zepto","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Zepto API — India's 10-minute grocery app: dark-store price, MRP, discount, live stock and full product data per PIN code or GPS point","version":"0.1.2","pii_redact_default":false,"mint_reusable":null,"base_path":"/zepto/v1","spec_available":true,"actions":[{"name":"search","description":"Search Zepto AS SEEN FROM ONE DELIVERY LOCATION (the dark store that serves it): products with selling price, MRP, discount, pack size, live stock count, how many one order may take, the store id, brand, category, rating and a sponsored flag. `query` and a location (`pincode`, or `lat`+`lon`) are required.","required_params":["query"],"optional_params":["pincode","lat","lon","page"],"params":[{"name":"query","type":"string","required":true,"description":"What to search for, as typed in the Zepto search box.","on_invalid":"reject","example":"atta","aliases":["q","keyword","search"]},{"name":"pincode","type":"string","required":false,"description":"6-digit Indian PIN code to shop from. Give `pincode` OR `lat`+`lon` (one is required): Zepto serves every location from one dark store, so the catalogue, prices and stock depend on it. Resolved through Zepto's own place search and accepted only if the place found IS this postal code. Echoed with the address.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"lat","type":"number","required":false,"description":"Delivery latitude (WGS84). Use with `lon` instead of `pincode`.","on_invalid":"reject","example":"19.0176"},{"name":"lon","type":"number","required":false,"description":"Delivery longitude (WGS84). Use with `lat` instead of `pincode`.","on_invalid":"reject","example":"72.8562","aliases":["lng","long"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-10 (the source's own pages, 18-30 rows each, variable). Past the last page the answer is an honest empty.","on_invalid":"reject","default":1,"minimum":1,"maximum":10}],"returns":"query, location{pincode, lat, lon, address, locality, city, state, postal_code}, serviceable, store_id, stores[]{store_id, role, serviceable, night_store}, page, total (the source's product count), has_next, returned, sponsored_rows, repeated_rows, results[]{product_variant_id (-> product.product_variant_id), store_product_id, product_id, name, brand, pack_size, unit_of_measure, weight_grams, price, mrp, discount_percent, discount_amount, currency, inventory, orderable_quantity, max_order_quantity, in_stock, store_id, category, category_id, rating{average, count}, sponsored, repeated_in_results, image, image_count, url, rank}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"query":"atta","pincode":"400020"}},{"name":"product","description":"One Zepto product at one delivery location, by the `product_variant_id` a search row returns (or its zepto.com/pn/<slug>/pvid/<id> URL): whether this dark store carries it, price, MRP, discount, live stock, order cap, pack size, rating, category, description, manufacturer, country of origin, FSSAI licence, shelf life, images.","required_params":["product_variant_id"],"optional_params":["pincode","lat","lon"],"params":[{"name":"product_variant_id","type":"string","required":true,"description":"The `product_variant_id` exactly as a search row returns it, or the product's https://www.zepto.com/pn/<slug>/pvid/<id> URL.","on_invalid":"reject","example":"ae6045b0-0526-4401-8a18-cb55592249e6","aliases":["pvid","variant_id","id","url","product_url"]},{"name":"pincode","type":"string","required":false,"description":"6-digit Indian PIN code to shop from. Give `pincode` OR `lat`+`lon` (one is required): Zepto serves every location from one dark store, so the catalogue, prices and stock depend on it. Resolved through Zepto's own place search and accepted only if the place found IS this postal code. Echoed with the address.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"lat","type":"number","required":false,"description":"Delivery latitude (WGS84). Use with `lon` instead of `pincode`.","on_invalid":"reject","example":"19.0176"},{"name":"lon","type":"number","required":false,"description":"Delivery longitude (WGS84). Use with `lat` instead of `pincode`.","on_invalid":"reject","example":"72.8562","aliases":["lng","long"]}],"returns":"location{...}, serviceable, store_id, product{product_variant_id, store_product_id, product_id, name, brand, pack_size, unit_of_measure, weight_grams, available_at_store, price, mrp, discount_percent, currency, orderable_quantity, max_order_quantity, in_stock, store_id, fallback_store_id, fallback_type, rating{average, count}, category, subcategory, category_id, subcategory_id, description[], manufacturer_name, manufacturer_address, country_of_origin, imported, fssai_license, shelf_life, ingredients, nutritional_info, information{}, images[], url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_variant_id":"ae6045b0-0526-4401-8a18-cb55592249e6","pincode":"400020"}},{"name":"store","description":"Whether Zepto delivers to a location right now: the resolved address and postal code, serviceable yes/no, the dark stores serving it (primary / secondary, night store), whether the store is open or closed and why, the delivery promise in minutes when it is open, and the store's opening hours.","required_params":[],"optional_params":["pincode","lat","lon"],"params":[{"name":"pincode","type":"string","required":false,"description":"6-digit Indian PIN code to shop from. Give `pincode` OR `lat`+`lon` (one is required): Zepto serves every location from one dark store, so the catalogue, prices and stock depend on it. Resolved through Zepto's own place search and accepted only if the place found IS this postal code. Echoed with the address.","on_invalid":"reject","example":"400020","aliases":["pin","pin_code","postal_code","zip"]},{"name":"lat","type":"number","required":false,"description":"Delivery latitude (WGS84). Use with `lon` instead of `pincode`.","on_invalid":"reject","example":"19.0176"},{"name":"lon","type":"number","required":false,"description":"Delivery longitude (WGS84). Use with `lat` instead of `pincode`.","on_invalid":"reject","example":"72.8562","aliases":["lng","long"]}],"returns":"location{pincode, lat, lon, address, locality, city, state, postal_code}, serviceable, store_id, stores[]{store_id, role, serviceable, night_store}, deliverable, status, status_detail, eta_minutes, message, store_open_time, store_close_time","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"pincode":"110001"}}]},{"name":"zillow","category":{"id":"real-estate","title":"Real Estate"},"title":"Zillow API — US real estate data: for-sale, rental and sold listings, full property detail with Zestimate, price/tax history, schools, comps, agents, market trends, walk/transit/bike scores and home-value history","version":"1.6.0","pii_redact_default":true,"mint_reusable":null,"base_path":"/zillow/v1","spec_available":true,"actions":[{"name":"new_listings","description":"New US inventory straight from Zillow's own published feed — the listings that appeared in the last couple of days, refreshed within the hour. Returns identity and location (zpid, canonical url, address as Zillow writes it, region, postal code, country, changed_at); pass a zpid to `property_detail` for price, beds, sqft, status and Zestimate.","required_params":[],"optional_params":["category","region","country","postal_prefix","changed_after","max_results","page"],"params":[{"name":"category","type":"enum","required":false,"description":"Which feed to read.","on_invalid":"reject","allowed_values":[{"value":"for_sale","label":"New for-sale listings (~25k/day, last ~2 days)"},{"value":"sold","label":"Newly sold — fresh comps (~17k/day, last ~3 days)"},{"value":"for_rent","label":"New rentals (~25k/day, last ~2 days)"},{"value":"new_construction","label":"New construction (slower category)"},{"value":"for_sale_by_owner","label":"FSBO — whole category, not just recent"},{"value":"auction","label":"Auction — whole category, not just recent"},{"value":"pending","label":"Pending — whole category, not just recent"},{"value":"other","label":"Other — whole category, not just recent"}],"default":"for_sale","example":"for_sale"},{"name":"region","type":"string","required":false,"description":"Two-letter US state or Canadian province, e.g. TX. Pair with `country` — the codes overlap.","on_invalid":"ignore","example":"TX"},{"name":"country","type":"enum","required":false,"description":"Restrict to one country. The feed mixes both.","on_invalid":"reject","allowed_values":[{"value":"US","label":"United States"},{"value":"CA","label":"Canada"}],"example":"US"},{"name":"postal_prefix","type":"string","required":false,"description":"Match postal codes starting with this, e.g. 787 for the Austin area.","on_invalid":"ignore","example":"787"},{"name":"changed_after","type":"string","required":false,"description":"ISO-8601 instant; keep rows changed strictly after it (e.g. 2026-08-20T00:00:00Z). Use the previous call's `window.newest` to poll incrementally.","on_invalid":"ignore","example":"2026-08-20T00:00:00Z"},{"name":"max_results","type":"integer","required":false,"description":"Rows to return, up to 5000.","on_invalid":"ignore","default":200,"example":200,"minimum":1,"maximum":5000},{"name":"page","type":"integer","required":false,"description":"1-based page over the filtered set.","on_invalid":"ignore","default":1,"example":1,"minimum":1}],"returns":"listings[]{zpid, url, address, region, postal_code, country, changed_at}, category, window{oldest, newest, is_recent_window}, pagination{page, per_page, returned, total_matched, has_more} — MEASURED 2026-08-21: sampling 14 zpids from the for-sale feed and resolving each through property_detail gave days_on_market [0,0,0,0,0,1,1,1,1,2,4] — 10 of 11 at 0-2 days, median 1, five of them day zero, all FOR_SALE. So this is genuinely new inventory. Per category the 50,000-row window covers roughly: for_sale 2 days (~25k/day), sold 3 days (~17k/day, i.e. fresh comps), for_rent 2 days (~25k/day). The smaller categories (for_sale_by_owner, auction, pending, other) are smaller than the window, so their feed is the WHOLE category rather than recent arrivals — `window.is_recent_window` says which you got, per call. ADDRESS is passed through exactly as Zillow writes it and is NOT split into street and city: the slug is `<street>-<City>-<ST>-<zip>` with both halves hyphen-separated, so any split is a guess (a naive one turns '7530-Demona-Dr-Las-Vegas-NV-89123' into street '7530 Demona Dr Las' and city 'Vegas'). `region`, `postal_code` and `country` are parsed from the unambiguous tail and are reliable. COUNTRY MATTERS: Zillow's 'us' feed carries Canada too — 40,943 US to 9,034 CA in one measured leaf — and Canadian provinces are two letters as well, so filtering on `region` alone would serve Ontario as a US state. Filter on `country` when that matters.","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"per_unit","credits":2,"per":500,"min":4},"example_params":{"category":"for_sale","max_results":5}},{"name":"search","description":"Search listings by location (for sale / for rent / recently sold), with structured filters: price, beds, baths, home type, sqft, lot, year built, HOA, days-on-market and keywords. Read `returns` before using status=for_rent (rentals come back as BUILDINGS with a units[] breakdown, not as individual apartments) or status=sold (about a dozen US states publish no sale price at all).","required_params":["location"],"optional_params":["status","max_pages","fetch_all","max_results","price_min","price_max","beds_min","baths_min","home_type","sqft_min","sqft_max","lot_min","lot_max","year_built_min","year_built_max","max_hoa","days_on_max","keywords"],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — city, ZIP, neighborhood or county ('Austin, TX', '78704', 'Brooklyn, NY').","on_invalid":"reject","example":"Austin, TX"},{"name":"status","type":"enum","required":false,"description":"Listing status to search (synonyms rent/rental/recently_sold also accepted).","on_invalid":"ignore","allowed_values":[{"value":"for_sale","label":"For sale"},{"value":"for_rent","label":"For rent"},{"value":"sold","label":"Recently sold"}],"default":"for_sale","example":"for_sale"},{"name":"max_results","type":"integer","required":false,"description":"Stop after this many listings. Caps across pages — a single page (~41 listings) is always returned in full.","on_invalid":"reject","default":1000,"example":100,"minimum":1,"maximum":10000},{"name":"max_pages","type":"integer","required":false,"description":"How many result pages to fetch (~41 listings/page).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20},{"name":"fetch_all","type":"boolean","required":false,"description":"Fetch EVERY listing in the area (returns more than Zillow's standard ~860-result cap). Slower; combine with max_results.","on_invalid":"reject","default":false,"example":false},{"name":"price_min","type":"integer","required":false,"description":"Minimum list price in USD (e.g. 300000).","on_invalid":"ignore","example":300000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum list price in USD (e.g. 700000).","on_invalid":"ignore","example":700000,"minimum":0},{"name":"beds_min","type":"integer","required":false,"description":"Minimum bedrooms (e.g. 3 = 3+ beds).","on_invalid":"ignore","example":3,"minimum":0,"maximum":10,"aliases":["beds"]},{"name":"baths_min","type":"number","required":false,"description":"Minimum bathrooms (e.g. 2 = 2+ baths).","on_invalid":"ignore","example":2,"minimum":0,"maximum":10},{"name":"home_type","type":"string","required":false,"description":"Property type filter — one or several (comma-separated). One of: house, condo, townhouse, multi_family, land, manufactured, apartment (e.g. 'house,condo').","on_invalid":"ignore","example":"house"},{"name":"sqft_min","type":"integer","required":false,"description":"Minimum living area in square feet (e.g. 1500).","on_invalid":"ignore","example":1500,"minimum":0},{"name":"sqft_max","type":"integer","required":false,"description":"Maximum living area in square feet (e.g. 3000).","on_invalid":"ignore","example":3000,"minimum":0},{"name":"lot_min","type":"integer","required":false,"description":"Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).","on_invalid":"ignore","example":5000,"minimum":0},{"name":"lot_max","type":"integer","required":false,"description":"Maximum lot size in square feet.","on_invalid":"ignore","example":43560,"minimum":0},{"name":"year_built_min","type":"integer","required":false,"description":"Earliest year built (e.g. 2010).","on_invalid":"ignore","example":2010,"minimum":1800,"maximum":2030},{"name":"year_built_max","type":"integer","required":false,"description":"Latest year built (e.g. 2024).","on_invalid":"ignore","example":2024,"minimum":1800,"maximum":2030},{"name":"max_hoa","type":"integer","required":false,"description":"Maximum monthly HOA fee in USD (e.g. 100; 0 keeps no-HOA only).","on_invalid":"ignore","example":100,"minimum":0},{"name":"days_on_max","type":"integer","required":false,"description":"Only listings on Zillow at most this many days (e.g. 7 = new this week).","on_invalid":"ignore","example":7,"minimum":1},{"name":"keywords","type":"string","required":false,"description":"Free-text listing keyword filter (e.g. 'pool', 'waterfront', 'guest house').","on_invalid":"ignore","example":"pool"}],"returns":"items[]{zpid, identifier_type, is_building, url, list_price_usd, price_display, status, status_text, property_type, beds, baths, sqft, lot_sqft, zestimate_usd, rent_zestimate_usd, tax_assessed_value_usd, days_on_market, address_line, city, state_code, postal_code, latitude, longitude, photos[]} + count + total_reported + filters_applied. STATUS=FOR_RENT RETURNS BUILDINGS, NOT APARTMENTS. Zillow's rental search publishes one card per apartment community. MEASURED 2026-08-28 across five cities, 41 rows each: 193 of 205 rows were buildings (Austin 41/41, Miami 41/41, Chicago 38/41, Seattle 37/41, Boise 36/41). A building row carries NO beds, baths, sqft, property_type or days_on_market: a building has no single value for any of them and Zillow sends none. It carries instead units[]{beds, rent_from_usd, rent_display, is_room_share} - one entry per floor plan, 493 entries over those same five pages - plus rent_min_usd, rent_max_usd, beds_min, beds_max, units_available, building_name and building_id. Its `zpid` is Zillow's BUILDING KEY, a '<lat>--<lng>' string rather than a property id, so it will not resolve in property_detail; `identifier_type` reads 'building_key' or 'zpid' on every row and `is_building` is the boolean. The remaining ~6% of rental rows are single homes or units and do carry beds, baths, sqft and a price. STATUS=SOLD: THE SALE PRICE IS NOT PUBLISHED IN NON-DISCLOSURE STATES. Twelve US states - AK, ID, KS, LA, MS, MO, MT, NM, ND, TX, UT, WY - keep sale prices off the public record and Zillow shows no price for any listing in them. MEASURED 2026-09-24, 41 rows per metro: priced 41/41 in Columbus OH, Charlotte NC, Phoenix AZ and Denver CO; 0/41 Austin TX, 1/41 Houston TX, 1/41 Salt Lake City UT, 1/41 Jackson MS. There sold_price_usd, list_price_usd and price_display are null and property_detail cannot recover them - the number is not on Zillow in any form, so this API returns null rather than guessing. Each unpriced row carries price_unavailable_reason ('non_disclosure_state' = the number does not exist; 'not_published_by_source' = a disclosure state where this card has none). sold_date, tax_assessed_value_usd and zestimate_usd DO fill (the Zestimate is Zillow's estimate of value, NOT the price paid). meta.fields_not_published repeats all of this, with the affected row count and the split by reason and state, on any response where it applies.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX"}},{"name":"search_by_coordinates","description":"Search listings inside exact map bounds (returns more than the standard ~860-result cap), with the same structured filters as search.","required_params":["map_bounds"],"optional_params":["status","max_pages","fetch_all","max_results","price_min","price_max","beds_min","baths_min","home_type","sqft_min","sqft_max","lot_min","lot_max","year_built_min","year_built_max","max_hoa","days_on_max","keywords"],"params":[{"name":"map_bounds","type":"object","required":true,"description":"Map viewport to search: {west, east, south, north} in decimal degrees.","on_invalid":"reject","example":{"west":-97.78,"east":-97.7,"south":30.24,"north":30.3},"aliases":["bounds"]},{"name":"status","type":"enum","required":false,"description":"Listing status to search (synonyms rent/rental/recently_sold also accepted).","on_invalid":"ignore","allowed_values":[{"value":"for_sale","label":"For sale"},{"value":"for_rent","label":"For rent"},{"value":"sold","label":"Recently sold"}],"default":"for_sale","example":"for_sale"},{"name":"max_results","type":"integer","required":false,"description":"Stop after this many listings. Caps across pages — a single page (~41 listings) is always returned in full.","on_invalid":"reject","default":1000,"example":100,"minimum":1,"maximum":10000},{"name":"max_pages","type":"integer","required":false,"description":"How many result pages to fetch (~41 listings/page).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20},{"name":"fetch_all","type":"boolean","required":false,"description":"Fetch EVERY listing in the area (returns more than Zillow's standard ~860-result cap). Slower; combine with max_results.","on_invalid":"reject","default":false,"example":false},{"name":"price_min","type":"integer","required":false,"description":"Minimum list price in USD (e.g. 300000).","on_invalid":"ignore","example":300000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum list price in USD (e.g. 700000).","on_invalid":"ignore","example":700000,"minimum":0},{"name":"beds_min","type":"integer","required":false,"description":"Minimum bedrooms (e.g. 3 = 3+ beds).","on_invalid":"ignore","example":3,"minimum":0,"maximum":10,"aliases":["beds"]},{"name":"baths_min","type":"number","required":false,"description":"Minimum bathrooms (e.g. 2 = 2+ baths).","on_invalid":"ignore","example":2,"minimum":0,"maximum":10},{"name":"home_type","type":"string","required":false,"description":"Property type filter — one or several (comma-separated). One of: house, condo, townhouse, multi_family, land, manufactured, apartment (e.g. 'house,condo').","on_invalid":"ignore","example":"house"},{"name":"sqft_min","type":"integer","required":false,"description":"Minimum living area in square feet (e.g. 1500).","on_invalid":"ignore","example":1500,"minimum":0},{"name":"sqft_max","type":"integer","required":false,"description":"Maximum living area in square feet (e.g. 3000).","on_invalid":"ignore","example":3000,"minimum":0},{"name":"lot_min","type":"integer","required":false,"description":"Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).","on_invalid":"ignore","example":5000,"minimum":0},{"name":"lot_max","type":"integer","required":false,"description":"Maximum lot size in square feet.","on_invalid":"ignore","example":43560,"minimum":0},{"name":"year_built_min","type":"integer","required":false,"description":"Earliest year built (e.g. 2010).","on_invalid":"ignore","example":2010,"minimum":1800,"maximum":2030},{"name":"year_built_max","type":"integer","required":false,"description":"Latest year built (e.g. 2024).","on_invalid":"ignore","example":2024,"minimum":1800,"maximum":2030},{"name":"max_hoa","type":"integer","required":false,"description":"Maximum monthly HOA fee in USD (e.g. 100; 0 keeps no-HOA only).","on_invalid":"ignore","example":100,"minimum":0},{"name":"days_on_max","type":"integer","required":false,"description":"Only listings on Zillow at most this many days (e.g. 7 = new this week).","on_invalid":"ignore","example":7,"minimum":1},{"name":"keywords","type":"string","required":false,"description":"Free-text listing keyword filter (e.g. 'pool', 'waterfront', 'guest house').","on_invalid":"ignore","example":"pool"}],"returns":"items[] - the same shape, and the same for_rent (buildings, not apartments) and sold (no price in non-disclosure states) caveats, as `search` - plus filters_applied.","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"map_bounds":{"west":-97.78,"east":-97.7,"south":30.24,"north":30.3}}},{"name":"search_by_url","description":"Run any copied Zillow URL: a search URL replays that exact search (with its filters); a property URL routes to the full property detail.","required_params":["url"],"optional_params":[],"params":[{"name":"url","type":"string","required":true,"description":"Any Zillow search or property URL, copied from the browser.","on_invalid":"reject","example":"https://www.zillow.com/austin-tx/rentals/"}],"returns":"items[] (search URL) or listing{...} (property URL)","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.zillow.com/austin-tx/rentals/"}},{"name":"property_detail","description":"Full property record: Zestimate (+history), price & tax history, schools, climate risk, walk/transit/bike scores, listing agent, photos, RESO facts. Batch several with zpids[].","required_params":[],"optional_params":["zpid","zpids","url"],"params":[{"name":"zpid","type":"string","required":false,"description":"Zillow property ID. Provide zpid, zpids OR url.","on_invalid":"reject","example":"29377187"},{"name":"zpids","type":"array","required":false,"description":"Several property IDs in one call (batch).","on_invalid":"reject","example":["29377187","29377188"]},{"name":"url","type":"string","required":false,"description":"Zillow property URL (alternative to zpid).","on_invalid":"reject","example":"https://www.zillow.com/homedetails/29377187_zpid/"}],"returns":"listing{zpid, url, status, property_type, address_line, city, state_code, postal_code, county, latitude, longitude, list_price_usd, price_per_sqft_usd, zestimate_usd, zestimate_history[]{date_ms, value_usd}, rent_zestimate_usd, last_sold_price_usd, last_sold_date, beds, baths, sqft, lot_sqft, year_built, days_on_market, property_tax_rate, hoa_fee_monthly_usd, parcel_id, description, price_history[]{date, price_usd, price_per_sqft_usd, event, source}, tax_history[]{year, tax_paid_usd, assessed_value_usd, tax_increase_rate, value_increase_rate}, schools[]{name, rating, level, grades, type, distance_miles, district_name, enrollment, student_teacher_ratio}, climate_risk{flood, fire, wind, air, heat}, walk_transit_score{...}, listing_agent{agent_name, agent_license, broker_name, mls_id, mls_name}, photos[], nearby_areas{...}, reso_facts{...}} (or items[] for the zpids batch). PRICE & TAX HISTORY, SCHOOLS, CLIMATE RISK AND THE FULL RESO BLOCK ARE FETCHED SEPARATELY. Zillow serves them on a second request rather than on the property page, and this API makes that request for you. It nearly always succeeds; when it does not, meta.fields_not_retrieved names every field that stayed empty for that reason and says the call is worth retrying, so an empty tax_history never has to be guessed at. meta.second_paint is 'ok' when the second request landed. ON A SOLD HOME IN A NON-DISCLOSURE STATE (AK, ID, KS, LA, MS, MO, MT, NM, ND, TX, UT, WY) there is no sale price to return: list_price_usd comes back null (NOT 0) with price_unavailable_reason set to 'non_disclosure_state', and the Sold rows in price_history carry a null price. Verified against Zillow itself 2026-09-24 on nine TX/UT/MS homes: every Sold event in Zillow's own history, back to 2010 and including ones it sources from Public Record, has no price - while three Columbus OH homes carry one on every Sold event back to 1996. Retrying cannot change it. tax_history, schools, zestimate_usd and the property facts fill normally in those states.","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"zpid":"29377187"}},{"name":"comps","description":"Comparable homes near a property (synthesized similar-listing search, scored by distance/beds/sqft).","required_params":[],"optional_params":["zpid","url","radius_deg","max_comps"],"params":[{"name":"zpid","type":"string","required":false,"description":"Zillow property ID — the number in the property URL (…/12345678_zpid/) or `zpid` from a search result.","on_invalid":"reject","example":"29377187"},{"name":"url","type":"string","required":false,"description":"Zillow property URL (alternative to zpid).","on_invalid":"reject","example":"https://www.zillow.com/homedetails/29377187_zpid/"},{"name":"radius_deg","type":"number","required":false,"description":"Search radius in decimal degrees (0.03 ≈ 2 miles).","on_invalid":"reject","default":0.03,"example":0.03,"minimum":0.005,"maximum":0.5},{"name":"max_comps","type":"integer","required":false,"description":"How many comparables to return (1–100).","on_invalid":"reject","default":12,"example":12,"minimum":1,"maximum":100}],"returns":"subject{...} + comps[]{zpid, address_line, list_price_usd, beds, baths, sqft, distance_miles (straight-line from the subject; also echoed as `distance`), latitude, longitude, photos[]} + count + status + radius_deg + method. When the subject is a sold home, the comps are sold homes too - so in a non-disclosure state their prices are null and each such row carries price_unavailable_reason, exactly as in `sold`.","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":2},"example_params":{"zpid":"29377187","max_comps":5}},{"name":"sold","description":"Recently-sold listings (last 12 months) by location or map bounds, with the same structured filters as search. The sale price fills in disclosure states and is genuinely absent in non-disclosure ones - read `returns` before building on it.","required_params":[],"optional_params":["location","map_bounds","max_pages","fetch_all","max_results","price_min","price_max","beds_min","baths_min","home_type","sqft_min","sqft_max","lot_min","lot_max","year_built_min","year_built_max","max_hoa","days_on_max","keywords"],"params":[{"name":"location","type":"string","required":false,"description":"Where to search. Provide location OR map_bounds.","on_invalid":"reject","example":"Austin, TX"},{"name":"map_bounds","type":"object","required":false,"description":"Exact map viewport {west, east, south, north} (alternative to location).","on_invalid":"reject","example":{"west":-97.78,"east":-97.7,"south":30.24,"north":30.3},"aliases":["bounds"]},{"name":"max_pages","type":"integer","required":false,"description":"How many result pages to fetch (~41 listings/page).","on_invalid":"ignore","default":1,"example":1,"minimum":1,"maximum":20},{"name":"fetch_all","type":"boolean","required":false,"description":"Fetch EVERY listing in the area (returns more than Zillow's standard ~860-result cap). Slower; combine with max_results.","on_invalid":"reject","default":false,"example":false},{"name":"price_min","type":"integer","required":false,"description":"Minimum list price in USD (e.g. 300000).","on_invalid":"ignore","example":300000,"minimum":0},{"name":"price_max","type":"integer","required":false,"description":"Maximum list price in USD (e.g. 700000).","on_invalid":"ignore","example":700000,"minimum":0},{"name":"beds_min","type":"integer","required":false,"description":"Minimum bedrooms (e.g. 3 = 3+ beds).","on_invalid":"ignore","example":3,"minimum":0,"maximum":10,"aliases":["beds"]},{"name":"baths_min","type":"number","required":false,"description":"Minimum bathrooms (e.g. 2 = 2+ baths).","on_invalid":"ignore","example":2,"minimum":0,"maximum":10},{"name":"home_type","type":"string","required":false,"description":"Property type filter — one or several (comma-separated). One of: house, condo, townhouse, multi_family, land, manufactured, apartment (e.g. 'house,condo').","on_invalid":"ignore","example":"house"},{"name":"sqft_min","type":"integer","required":false,"description":"Minimum living area in square feet (e.g. 1500).","on_invalid":"ignore","example":1500,"minimum":0},{"name":"sqft_max","type":"integer","required":false,"description":"Maximum living area in square feet (e.g. 3000).","on_invalid":"ignore","example":3000,"minimum":0},{"name":"lot_min","type":"integer","required":false,"description":"Minimum lot size in SQUARE FEET (43560 sqft = 1 acre).","on_invalid":"ignore","example":5000,"minimum":0},{"name":"lot_max","type":"integer","required":false,"description":"Maximum lot size in square feet.","on_invalid":"ignore","example":43560,"minimum":0},{"name":"year_built_min","type":"integer","required":false,"description":"Earliest year built (e.g. 2010).","on_invalid":"ignore","example":2010,"minimum":1800,"maximum":2030},{"name":"year_built_max","type":"integer","required":false,"description":"Latest year built (e.g. 2024).","on_invalid":"ignore","example":2024,"minimum":1800,"maximum":2030},{"name":"max_hoa","type":"integer","required":false,"description":"Maximum monthly HOA fee in USD (e.g. 100; 0 keeps no-HOA only).","on_invalid":"ignore","example":100,"minimum":0},{"name":"days_on_max","type":"integer","required":false,"description":"Only listings on Zillow at most this many days (e.g. 7 = new this week).","on_invalid":"ignore","example":7,"minimum":1},{"name":"keywords","type":"string","required":false,"description":"Free-text listing keyword filter (e.g. 'pool', 'waterfront', 'guest house').","on_invalid":"ignore","example":"pool"}],"returns":"items[]{zpid, url, sold_price_usd, sold_date, list_price_usd, price_display, status (RECENTLY_SOLD), property_type, beds, baths, sqft, lot_sqft, zestimate_usd, tax_assessed_value_usd, address_line, city, state_code, postal_code, latitude, longitude, photos[]} + count + total_reported + filters_applied. WHERE THE SALE PRICE EXISTS AND WHERE IT DOES NOT: twelve US states are non-disclosure markets - AK, ID, KS, LA, MS, MO, MT, NM, ND, TX, UT, WY - where what a home sold for is not a public record, so Zillow publishes no price on any recently-sold listing there. MEASURED 2026-09-24, one page (41 rows) per metro: priced 41/41 in Columbus OH, Charlotte NC, Phoenix AZ and Denver CO; 0/41 Austin TX, 1/41 Houston TX, 1/41 Salt Lake City UT, 1/41 Jackson MS. Verified against Zillow's own property record the same day: on nine TX/UT/MS homes every Sold event in Zillow's price history - back to 2010, including events it sources from Public Record - has a null price, while three Columbus OH homes carry a price on every Sold event back to 1996. So the number does not exist upstream; sold_price_usd, list_price_usd and price_display come back null rather than invented, and property_detail cannot rescue them. EVERY UNPRICED ROW SAYS WHY: price_unavailable_reason is 'non_disclosure_state' (the number does not exist anywhere - do not retry) or 'not_published_by_source' (a disclosure state where this particular card has no price, usually withheld or not yet reported - property_detail may have it), with the long form in price_unavailable_detail. meta.fields_not_published repeats the split with rows_by_reason and rows_by_state. What you DO get everywhere: sold_date, tax_assessed_value_usd and zestimate_usd. The Zestimate is Zillow's own estimate of value and is NOT the price the home changed hands for - do not read it as one.","cacheable":true,"cache_ttl_seconds":10800,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Seattle, WA"}},{"name":"agent","description":"Listing agent + broker attribution for one property (agentInfo).","required_params":[],"optional_params":["zpid","url"],"params":[{"name":"zpid","type":"string","required":false,"description":"Zillow property ID — the number in the property URL (…/12345678_zpid/) or `zpid` from a search result.","on_invalid":"reject","example":"29377187"},{"name":"url","type":"string","required":false,"description":"Zillow property URL (alternative to zpid).","on_invalid":"reject","example":"https://www.zillow.com/homedetails/29377187_zpid/"}],"returns":"agent{agent_name, agent_license, broker_name, co_agent_name, buyer_agent…} + for_property{zpid, address_line, list_price_usd, status} (contact details require include_pii)","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":2},"example_params":{"url":"https://www.zillow.com/homedetails/29377187_zpid/"}},{"name":"agent_profile","description":"An agent's full portfolio: profile info + their for-sale/sold listings + reviews.","required_params":[],"optional_params":["username","profile_url","zuid","url"],"params":[{"name":"username","type":"string","required":false,"description":"Agent's Zillow username (the part after /profile/; e.g. the profile_url a `agents_by_location` row returns). Provide username, profile_url, zuid OR url.","on_invalid":"reject","example":"ericbramlett"},{"name":"profile_url","type":"string","required":false,"description":"Agent profile URL.","on_invalid":"reject","example":"https://www.zillow.com/profile/ericbramlett/","aliases":["url"]},{"name":"zuid","type":"string","required":false,"description":"Advanced: Zillow user ID.","on_invalid":"ignore"}],"returns":"agent{name, business_name, rating_average, review_count, years_experience, specialties[], license_number, license_state, sale_count_all_time, sales_last_12mo, price_range, average_price, photo_url, service_areas[]} + for_sale[] + sold[] + reviews[]{rating, text, date, reviewer}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":3},"example_params":{"profile_url":"https://www.zillow.com/profile/ericbramlett/"}},{"name":"agents_by_location","description":"Real-estate agent directory for a location, with review summaries.","required_params":["location"],"optional_params":[],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — city, ZIP, neighborhood or county ('Austin, TX', '78704', 'Brooklyn, NY').","on_invalid":"reject","example":"Austin, TX"}],"returns":"agents[]{name, subtitle, encoded_zuid, profile_url, rating (0-5), review_count (integer), review_count_text, review_average, is_top_agent, tags[]} + count + location. Pass an agent's profile_url or the last segment of it to `agent_profile` for their sale counts, licence, specialties, listings and reviews - those are on the profile page, not in the directory card.","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX"}},{"name":"autocomplete","description":"Location autocomplete — suggest Zillow regions and addresses for a free-text query (city, ZIP, neighborhood, county or street). Use it to resolve a fuzzy term before searching, or to power a search box.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"Free-text location to autocomplete — a partial city, ZIP, neighborhood, county or street ('Brookl', '787', 'Austin').","on_invalid":"reject","example":"Brookl","aliases":["q","location"]},{"name":"limit","type":"integer","required":false,"description":"Max suggestions to return (1–25).","on_invalid":"ignore","default":10,"example":10,"minimum":1,"maximum":25}],"returns":"suggestions[]{name, type, region_id, latitude, longitude} + count + query","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Austin"}},{"name":"market_trends","description":"Region market metrics: ZHVI home-value index, median sale/list price, inventory, days-to-pending, % sold above list, rent index.","required_params":["location"],"optional_params":[],"params":[{"name":"location","type":"string","required":true,"description":"Where to search — city, ZIP, neighborhood or county ('Austin, TX', '78704', 'Brooklyn, NY').","on_invalid":"reject","example":"Austin, TX"}],"returns":"market{zhvi_usd, median_sale_price_usd, median_list_price_usd, for_sale_inventory, days_to_pending, pct_sold_above_list, rent_zori_usd} + location + region_id + region_type","cacheable":true,"cache_ttl_seconds":43200,"pricing":{"mode":"flat","credits":2},"example_params":{"location":"Austin, TX"}},{"name":"walk_transit_bike","description":"Zillow Walk Score, Transit Score and Bike Score for a property — walkability, public-transit access and bikeability (0-100) with a description for each.","required_params":[],"optional_params":["zpid","url"],"params":[{"name":"zpid","type":"string","required":false,"description":"Zillow property ID — the number in the property URL (…/12345678_zpid/) or `zpid` from a search result.","on_invalid":"reject","example":"29377187"},{"name":"url","type":"string","required":false,"description":"Zillow property URL (alternative to zpid).","on_invalid":"reject","example":"https://www.zillow.com/homedetails/29377187_zpid/"}],"returns":"scores{walk_score, walk_description, transit_score, transit_description, bike_score, bike_description} + zpid","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"zpid":"29377187"}},{"name":"home_value_chart","description":"Zillow home-value history — the Zestimate value-over-time series for a property (monthly home value, up to the last 10 years, with the latest forecast point).","required_params":[],"optional_params":["zpid","url","time_period"],"params":[{"name":"zpid","type":"string","required":false,"description":"Zillow property ID — the number in the property URL (…/12345678_zpid/) or `zpid` from a search result.","on_invalid":"reject","example":"29377187"},{"name":"url","type":"string","required":false,"description":"Zillow property URL (alternative to zpid).","on_invalid":"reject","example":"https://www.zillow.com/homedetails/29377187_zpid/"},{"name":"time_period","type":"enum","required":false,"description":"History window for the home-value chart.","on_invalid":"ignore","allowed_values":[{"value":"1y","label":"Last 1 year"},{"value":"5y","label":"Last 5 years"},{"value":"10y","label":"Last 10 years"}],"default":"10y","example":"10y"}],"returns":"this_home{name, points[]{date_ms, value_usd}, point_count} + series[] + latest_value_usd + earliest_value_usd + time_period + zpid","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"zpid":"29377187"}}]},{"name":"ziprecruiter","category":{"id":"jobs","title":"Jobs & Hiring"},"title":"ZipRecruiter API — live job search, job details & jobs-by-company from ZipRecruiter (ziprecruiter.co.uk / .ie / .de), no login required","version":"2.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/ziprecruiter/v1","spec_available":true,"actions":[{"name":"search","description":"Search live ZipRecruiter job listings by keyword and location, with pagination and an optional remote-only filter. Each result includes the title, company, location, salary (when posted), posting date, a snippet, the on-site job URL and the apply link. Covers the United Kingdom (ziprecruiter.co.uk), Ireland (ziprecruiter.ie) and Germany (ziprecruiter.de).","required_params":["query"],"optional_params":["location","country","page","max_results","remote"],"params":[{"name":"query","type":"string","required":true,"description":"Free-text job keyword: job title or skill — e.g. 'software engineer', 'registered nurse', 'marketing manager'. Matched against the whole posting (title + description), so 'python' finds Python roles.","on_invalid":"reject","example":"software engineer","aliases":["q","keyword","search"]},{"name":"location","type":"string","required":false,"description":"City or region to search in (e.g. 'London', 'Dublin', 'Berlin'). Leave empty to search the whole country.","on_invalid":"ignore","example":"London"},{"name":"country","type":"enum","required":false,"description":"ZipRecruiter country edition to search. gb (United Kingdom), ie (Ireland) and de (Germany) are fully live. us (United States) is not served by this endpoint yet — a us call returns a clear TARGET_BLOCKED rather than an empty list. Other two-letter codes are passed through as-is.","on_invalid":"ignore","allowed_values":[{"value":"gb","label":"United Kingdom (ziprecruiter.co.uk)"},{"value":"ie","label":"Ireland (ziprecruiter.ie)"},{"value":"de","label":"Germany (ziprecruiter.de)"},{"value":"us","label":"United States (ziprecruiter.com) — coming soon"}],"default":"gb","example":"gb"},{"name":"page","type":"integer","required":false,"description":"Result page to start from, beginning at 1 (20 jobs per page). Use this to page through results — it is the single pagination control.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"How many job listings to return, paging internally from `page` (1–200).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":200},{"name":"remote","type":"boolean","required":false,"description":"If true, keep only remote / work-from-home listings. ZipRecruiter's country sites expose no server-side remote filter, so this is applied by matching each listing's title and location (the engine pages further to still fill `max_results`).","on_invalid":"ignore","default":false,"example":true,"aliases":["remote_only"]}],"returns":"jobs[]{job_id, title, company, location, salary{min,max,currency,period}, posted_date, snippet, url, apply_url, sponsored, source}, count, total_estimate, query, location, country","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"software engineer","location":"London","country":"gb","max_results":20}},{"name":"job_detail","description":"Full ZipRecruiter job posting by job ID (or URL): title, company, location, salary range, employment type, remote flag, posting & expiry dates, the full description, an extracted requirements list and the apply link.","required_params":["job_id"],"optional_params":["url","country"],"params":[{"name":"job_id","type":"string","required":true,"description":"ZipRecruiter numeric job ID — the `job_id` returned by the search action (or the number in a ziprecruiter.co.uk/jobs/<id> URL). Provide job_id OR url.","on_invalid":"reject","example":"539514020","aliases":["jobId"]},{"name":"url","type":"string","required":false,"description":"Full ZipRecruiter job URL — alternative to job_id (the ID is extracted automatically).","on_invalid":"ignore","example":"https://www.ziprecruiter.co.uk/jobs/539514020","aliases":["job_url"]},{"name":"country","type":"enum","required":false,"description":"ZipRecruiter country edition to search. gb (United Kingdom), ie (Ireland) and de (Germany) are fully live. us (United States) is not served by this endpoint yet — a us call returns a clear TARGET_BLOCKED rather than an empty list. Other two-letter codes are passed through as-is.","on_invalid":"ignore","allowed_values":[{"value":"gb","label":"United Kingdom (ziprecruiter.co.uk)"},{"value":"ie","label":"Ireland (ziprecruiter.ie)"},{"value":"de","label":"Germany (ziprecruiter.de)"},{"value":"us","label":"United States (ziprecruiter.com) — coming soon"}],"default":"gb","example":"gb"}],"returns":"job{job_id, title, company, location, location_structured, employment_type, salary{min,max,currency,period}, remote, posted_date, valid_through, description, requirements[], apply_url, url, source}","cacheable":true,"cache_ttl_seconds":21600,"pricing":{"mode":"flat","credits":1},"example_params":{"job_id":"539514020"}},{"name":"jobs_by_company","description":"List a specific employer's open jobs on ZipRecruiter. Pass a company name; the engine searches and keeps only listings whose employer matches (ZipRecruiter's country sites have no dedicated company page, so this is a best-effort name match over the search results). Optionally narrow by location.","required_params":["company"],"optional_params":["location","country","page","max_results"],"params":[{"name":"company","type":"string","required":true,"description":"Employer name to list open jobs for (e.g. 'Amazon', 'NHS', 'Deloitte').","on_invalid":"reject","example":"Amazon","aliases":["employer","company_name"]},{"name":"location","type":"string","required":false,"description":"City or region to search in (e.g. 'London', 'Dublin', 'Berlin'). Leave empty to search the whole country.","on_invalid":"ignore","example":"London"},{"name":"country","type":"enum","required":false,"description":"ZipRecruiter country edition to search. gb (United Kingdom), ie (Ireland) and de (Germany) are fully live. us (United States) is not served by this endpoint yet — a us call returns a clear TARGET_BLOCKED rather than an empty list. Other two-letter codes are passed through as-is.","on_invalid":"ignore","allowed_values":[{"value":"gb","label":"United Kingdom (ziprecruiter.co.uk)"},{"value":"ie","label":"Ireland (ziprecruiter.ie)"},{"value":"de","label":"Germany (ziprecruiter.de)"},{"value":"us","label":"United States (ziprecruiter.com) — coming soon"}],"default":"gb","example":"gb"},{"name":"page","type":"integer","required":false,"description":"Result page to start from, beginning at 1 (20 jobs per page). Use this to page through results — it is the single pagination control.","on_invalid":"ignore","default":1,"example":1,"minimum":1},{"name":"max_results","type":"integer","required":false,"description":"How many job listings to return, paging internally from `page` (1–200).","on_invalid":"ignore","default":20,"example":20,"minimum":1,"maximum":200}],"returns":"company, jobs[]{job_id, title, company, location, salary, posted_date, snippet, url, apply_url, sponsored}, count, query, location, country","cacheable":true,"cache_ttl_seconds":1800,"pricing":{"mode":"flat","credits":1},"example_params":{"company":"Amazon"}}]},{"name":"zoll-auktion","category":{"id":"classifieds","title":"Classifieds & Second-hand"},"title":"Zoll-Auktion API scraper - the official German public auction house (Zoll-Auktion.de) of the federal government, the Länder and the municipalities: customs-seized and surplus public property. Search running auctions by keyword, category, price, postcode radius and delivery; full auction records with the absolute closing time, the current or final bid, bid count, next minimum bid, the public-authority seller, collection address and vehicle data; the masked bid history; every auction of one authority. EUR, German. No account, no browser.","version":"0.1.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/zoll-auktion/v1","spec_available":true,"actions":[{"name":"search","description":"Search the running auctions of Zoll-Auktion.de: auction id, title, image, the price the site shows (the start price until somebody bids, the current highest bid afterwards), the number of bids, the countdown, the collection postcode and town and whether the goods can only be collected. Filter by keyword, category, minimum and maximum price, postcode radius and delivery option; sort by closing time, start time or price. Every filter was measured to change the result total. Leaving every parameter out returns the whole catalogue of running auctions.","required_params":[],"optional_params":["query","category_id","sort","page","min_price","max_price","postcode","radius_km","delivery"],"params":[{"name":"query","type":"string","required":false,"description":"Keyword, in German as the listings are written (e.g. 'Fahrrad', 'Rolex', 'Ford'). Optional: leaving it out returns every running auction.","on_invalid":"reject","example":"Ford","aliases":["q","keyword","search"]},{"name":"category_id","type":"array","required":false,"description":"Only auctions in these Zoll-Auktion categories (numbers such as 216 Gebrauchtwagen, 243 Uhren). The `categories` action lists them. Several may be given; the site ORs them.","on_invalid":"reject","example":"216","aliases":["category","categories"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results. Only the orderings the site itself offers are accepted.","on_invalid":"reject","allowed_values":[{"value":"ending_soon","label":"Auctions closing soonest first (the site's default)"},{"value":"ending_last","label":"Auctions closing latest first"},{"value":"newest","label":"Most recently started auctions first"},{"value":"oldest","label":"Longest-running auctions first"},{"value":"price_asc","label":"Cheapest current price first"},{"value":"price_desc","label":"Most expensive current price first"}],"default":"ending_soon","example":"price_desc","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. The site serves a fixed 10 auctions per page. A page past the last one returns an empty list with page_out_of_range: true (the site itself would silently re-serve page 1).","on_invalid":"reject","default":1,"minimum":1,"maximum":10000,"aliases":["pagination"]},{"name":"min_price","type":"number","required":false,"description":"Only auctions whose current price is at least this many euros.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Only auctions whose current price is at most this many euros.","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_max"]},{"name":"postcode","type":"string","required":false,"description":"Five-digit German postcode to search around. Combine with radius_km.","on_invalid":"reject","example":"48167","value_pattern":"\\d{5}","aliases":["zip","plz"]},{"name":"radius_km","type":"enum","required":false,"description":"Search radius in kilometres around `postcode`. Only works together with postcode; the site offers exactly these distances.","on_invalid":"reject","allowed_values":[{"value":"20","label":"20 km around the postcode"},{"value":"50","label":"50 km around the postcode"},{"value":"100","label":"100 km around the postcode"},{"value":"250","label":"250 km around the postcode"},{"value":"500","label":"500 km around the postcode"}],"example":"50","aliases":["radius"]},{"name":"delivery","type":"array","required":false,"description":"Only auctions offering these ways of getting the goods. Several may be given; the site ORs them.","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"Collection in person"},{"value":"germany","label":"Shipping within Germany"},{"value":"eu","label":"Shipping within the EU"},{"value":"europe","label":"Shipping within Europe"}],"example":"germany","aliases":["shipping"]}],"returns":"query, auctions[]{auction_id, title, url, image, image_alt, currency (EUR), price (number), price_display (the site's own string - compare it with price), price_is (start_price|current_bid), current_bid (null until somebody bids), start_price (null once bidding started), bid_count, has_bids, postcode, city, delivery_note, pickup_only, time_left_display, time_left_seconds (minute-rounded, the site's own countdown), end_time (null in a row - only product/detail has the absolute time), rating (null), review_count (null)}, count, total_results, page, total_pages, has_more, page_out_of_range, filters{}","cacheable":true,"cache_ttl_seconds":120,"pricing":{"mode":"flat","credits":1},"example_params":{"sort":"ending_soon"}},{"name":"product/detail","description":"One Zoll-Auktion auction in full, running or already closed: title, description, every image, the absolute start and closing time, the current or final bid with the bid count and the next minimum bid, whether it sold, the number of views, the public-authority seller with its id, the collection address, federal state and case officer, collection/shipping/payment terms, VAT and warranty notes, the category path, and - for vehicles - make, model, first registration, mileage, fuel, transmission, power, colour and emission class.","required_params":["auction_id"],"optional_params":[],"params":[{"name":"auction_id","type":"integer","required":true,"description":"Zoll-Auktion auction id - the number at the end of a product URL (/auktion/produkt/<slug>/980596 -> 980596). A full auction URL works. Every search row returns it.","on_invalid":"reject","example":980596,"minimum":1,"aliases":["id","url","auction","lot_id","product_id","auktionen_id"]}],"returns":"item{auction_id, title, url, charge, status (running|ended), currency, price, price_display, price_is (start_price|current_bid|final_price), current_bid, start_price, final_price, sold, bid_count, has_bids, minimum_bid, minimum_bid_display, end_time, end_time_display, start_time, start_time_display, time_left_display, time_left_seconds, notice, view_count, seller{seller_id, name, url, other_auctions}, location{postcode, city, street, address_extra, state}, contact{name, phone, email}, pickup, shipping, shipping_available, payment_methods[], vat_shown, storage_fee_note, auction_type, consumer_note, vat_note, warranty_note, category_path[]{category_id, name, url}, description, specifications[]{label, value}, vehicle{make, model, body_type, power, first_registration, mileage_km, fuel, next_inspection, transmission, air_conditioning, colour, paint, doors, emission_class}, images[], image, image_count, bid_history_url, rating (null), review_count (null), gtin (null), reserve_price (null - public-law auctions have none)}","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"auction_id":980596}},{"name":"product/bids","description":"The full bid history of one Zoll-Auktion auction, highest first: the amount, when it was placed, when the bidding agent that produced it was set up, and the bidder's masked handle (the site never publishes bidder identities).","required_params":["auction_id"],"optional_params":[],"params":[{"name":"auction_id","type":"integer","required":true,"description":"Zoll-Auktion auction id - the number at the end of a product URL (/auktion/produkt/<slug>/980596 -> 980596). A full auction URL works. Every search row returns it.","on_invalid":"reject","example":980596,"minimum":1,"aliases":["id","url","auction","lot_id","product_id","auktionen_id"]}],"returns":"auction_id, title, url, currency, bids[]{position, bidder, amount, amount_display, time, time_display, agent_activated_at, agent_activated_at_display, is_highest}, count, highest_bid","cacheable":true,"cache_ttl_seconds":60,"pricing":{"mode":"flat","credits":1},"example_params":{"auction_id":980596}},{"name":"seller/auctions","description":"One Zoll-Auktion seller - a customs office, police authority, city or municipality - with its address, website and description, plus its running auctions in the same shape as a search row.","required_params":["seller_id"],"optional_params":["page"],"params":[{"name":"seller_id","type":"integer","required":true,"description":"Zoll-Auktion seller (Anbieter) id - the number at the end of a seller URL (/auktion/anbieter/<slug>/124 -> 124). product/detail returns it for every auction.","on_invalid":"reject","example":124,"minimum":1,"aliases":["id","url","anbieter_id","seller","supplier_id"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based; the seller page shows 10 auctions per page.","on_invalid":"reject","default":1,"minimum":1,"maximum":10000,"aliases":["pagination"]}],"returns":"seller{seller_id, name, url, street, address_extra, postcode, city, homepage, description}, auctions[]{auction_id, title, url, image, image_alt, currency (EUR), price (number), price_display (the site's own string - compare it with price), price_is (start_price|current_bid), current_bid (null until somebody bids), start_price (null once bidding started), bid_count, has_bids, postcode, city, delivery_note, pickup_only, time_left_display, time_left_seconds (minute-rounded, the site's own countdown), end_time (null in a row - only product/detail has the absolute time), rating (null), review_count (null)}, count, total_results, page, total_pages, has_more, page_out_of_range","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"seller_id":124}},{"name":"category/products","description":"Browse the running auctions of one Zoll-Auktion category with the same row fields as search and the same price, postcode-radius and delivery filters and sorts.","required_params":["category_id"],"optional_params":["query","sort","page","min_price","max_price","postcode","radius_km","delivery"],"params":[{"name":"category_id","type":"array","required":false,"description":"Only auctions in these Zoll-Auktion categories (numbers such as 216 Gebrauchtwagen, 243 Uhren). The `categories` action lists them. Several may be given; the site ORs them.","on_invalid":"reject","example":"216","aliases":["category","categories"]},{"name":"query","type":"string","required":false,"description":"Keyword, in German as the listings are written (e.g. 'Fahrrad', 'Rolex', 'Ford'). Optional: leaving it out returns every running auction.","on_invalid":"reject","example":"Ford","aliases":["q","keyword","search"]},{"name":"sort","type":"enum","required":false,"description":"Order of the results. Only the orderings the site itself offers are accepted.","on_invalid":"reject","allowed_values":[{"value":"ending_soon","label":"Auctions closing soonest first (the site's default)"},{"value":"ending_last","label":"Auctions closing latest first"},{"value":"newest","label":"Most recently started auctions first"},{"value":"oldest","label":"Longest-running auctions first"},{"value":"price_asc","label":"Cheapest current price first"},{"value":"price_desc","label":"Most expensive current price first"}],"default":"ending_soon","example":"price_desc","aliases":["order"]},{"name":"page","type":"integer","required":false,"description":"Result page, 1-based. The site serves a fixed 10 auctions per page. A page past the last one returns an empty list with page_out_of_range: true (the site itself would silently re-serve page 1).","on_invalid":"reject","default":1,"minimum":1,"maximum":10000,"aliases":["pagination"]},{"name":"min_price","type":"number","required":false,"description":"Only auctions whose current price is at least this many euros.","on_invalid":"reject","example":100,"minimum":0,"aliases":["price_min"]},{"name":"max_price","type":"number","required":false,"description":"Only auctions whose current price is at most this many euros.","on_invalid":"reject","example":500,"minimum":0,"aliases":["price_max"]},{"name":"postcode","type":"string","required":false,"description":"Five-digit German postcode to search around. Combine with radius_km.","on_invalid":"reject","example":"48167","value_pattern":"\\d{5}","aliases":["zip","plz"]},{"name":"radius_km","type":"enum","required":false,"description":"Search radius in kilometres around `postcode`. Only works together with postcode; the site offers exactly these distances.","on_invalid":"reject","allowed_values":[{"value":"20","label":"20 km around the postcode"},{"value":"50","label":"50 km around the postcode"},{"value":"100","label":"100 km around the postcode"},{"value":"250","label":"250 km around the postcode"},{"value":"500","label":"500 km around the postcode"}],"example":"50","aliases":["radius"]},{"name":"delivery","type":"array","required":false,"description":"Only auctions offering these ways of getting the goods. Several may be given; the site ORs them.","on_invalid":"reject","allowed_values":[{"value":"pickup","label":"Collection in person"},{"value":"germany","label":"Shipping within Germany"},{"value":"eu","label":"Shipping within the EU"},{"value":"europe","label":"Shipping within Europe"}],"example":"germany","aliases":["shipping"]}],"returns":"category_id, auctions[]{auction_id, title, url, image, image_alt, currency (EUR), price (number), price_display (the site's own string - compare it with price), price_is (start_price|current_bid), current_bid (null until somebody bids), start_price (null once bidding started), bid_count, has_bids, postcode, city, delivery_note, pickup_only, time_left_display, time_left_seconds (minute-rounded, the site's own countdown), end_time (null in a row - only product/detail has the absolute time), rating (null), review_count (null)}, count, total_results, page, total_pages, has_more, page_out_of_range, filters{}","cacheable":true,"cache_ttl_seconds":300,"pricing":{"mode":"flat","credits":1},"example_params":{"category_id":"216"}},{"name":"categories","description":"Zoll-Auktion's whole category tree as the site publishes it in its own search sidebar: id, name, parent and whether the category can be filtered on directly.","required_params":[],"optional_params":[],"params":[],"returns":"categories[]{category_id, name, parent_id, level, selectable, url}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{}}]},{"name":"zomato","category":{"id":"reviews","title":"Reputation & Reviews"},"title":"Zomato API — live Indian restaurant data scraper: search a city's restaurants by cuisine, locality or collection, and get the full record with address, coordinates, opening hours, cost-for-two, the dish catalogue and review text — with Zomato's dining and delivery star ratings returned as SEPARATE fields, never blended","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/zomato/v1","spec_available":true,"actions":[{"name":"search","description":"List a city's restaurants, optionally narrowed to one cuisine, locality or curated collection, or to the restaurants that deliver. Returns up to 9 rows — that is the source's own ceiling per listing and it does not page, so breadth comes from varying city/cuisine/locality/collection rather than from a page number. Every row carries `is_promoted`, because on a plain city listing all 9 rows are paid placements.","required_params":["city"],"optional_params":["cuisine","locality","collection","mode"],"params":[{"name":"city","type":"string","required":true,"description":"The Zomato city slug, as it appears in the site's own URLs: 'ncr' (Delhi NCR), 'mumbai', 'bangalore', 'hyderabad', 'chennai', 'kolkata', 'pune', 'jaipur'. Inventory is strictly per city — eight cities measured shared zero restaurants with each other.","on_invalid":"reject","example":"ncr","aliases":["city_slug","location"]},{"name":"cuisine","type":"string","required":false,"description":"Narrow the city to one cuisine, using Zomato's own cuisine slug. Measured to bite: Delhi NCR 25,603 listed → 12,847 north-indian, 9,994 chinese, 4,379 pizza, and every returned row really carried that cuisine (9/9 on each). Common slugs: north-indian, south-indian, chinese, pizza, burger, biryani, desserts, cafe, fast-food, italian, continental, mughlai.","on_invalid":"ignore","example":"north-indian"},{"name":"locality","type":"string","required":false,"description":"Narrow the city to one neighbourhood, using Zomato's locality slug ('saket', 'connaught-place-delhi', 'koramangala'). This changes which restaurants come back (measured: 9 of 9 rows different, and the rows really sat in that area) but the source's own `source_total_results` counter does NOT move for it and stays city-wide.","on_invalid":"ignore","example":"saket"},{"name":"collection","type":"string","required":false,"description":"One of Zomato's curated city collections ('best-cafes', 'breakfast', 'insta-worthy'). These are the cleanest rows on the site: /ncr/best-cafes returned 0 paid placements out of 9, where the plain city listing returned 9 out of 9.","on_invalid":"ignore","example":"best-cafes"},{"name":"mode","type":"enum","required":false,"description":"Which side of Zomato to list. 'delivery' genuinely narrows the city (Delhi NCR 25,603 → 2,107 and every row different). 'dining' is the site's default view — it is accepted for clarity but does not narrow anything, which is why it is the default.","on_invalid":"reject","allowed_values":[{"value":"dining","label":"Dine-out listings (the default view)"},{"value":"delivery","label":"Restaurants that deliver"}],"default":"dining","example":"delivery"}],"returns":"restaurants[]{res_id, name, url, slug, rating_dining, rating_dining_count, rating_delivery, rating_delivery_count, price_for_two_text, price_for_two_inr, price_for_one_text, locality, address, cuisines[], distance, timing, image, is_promoted, is_disabled, rating_count_approximate}, count, promoted_count, organic_count, dropped_tiles, source_total_results, city, listing_url, stop_reason","cacheable":true,"cache_ttl_seconds":600,"pricing":{"mode":"flat","credits":2},"example_params":{"city":"ncr"}},{"name":"restaurant/detail","description":"One full restaurant record by id: address and coordinates, city and postcode, the business phone numbers the page prints, cuisines, opening hours per day, cost-for-two, popular dishes, facility highlights, and the dining and delivery ratings as separate named fields.","required_params":["res_id"],"optional_params":[],"params":[{"name":"res_id","type":"string","required":true,"description":"The numeric Zomato restaurant id, as `search` returns it in `res_id`. A zomato.com URL containing the id is also accepted.","on_invalid":"reject","example":311057,"aliases":["restaurant_id","id"]}],"returns":"restaurant{res_id, name, url, rating_dining, rating_dining_count, rating_delivery, rating_delivery_count, rating_count_approximate, price_for_two_text, price_for_two_inr, cost_notes[], cuisines[], address, locality, city, zipcode, latitude, longitude, phone, phones[], status_text, is_open_now, timing_text, opening_hours[], is_delivery_only, is_permanently_closed, is_temporarily_closed, highlights[], popular_dishes, known_for, payment_accepted, image_menus[], chain_url}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"res_id":311057}},{"name":"restaurant/menu","description":"The restaurant's dish catalogue: every menu, its categories and the dishes in them with name, description and veg/vegan tags. 🔴 Dish PRICES are not returned, because Zomato does not publish them to a logged-out reader — the page sets its own `price_login_blocker` flag and the dish records carry no price key at all (verified from four different exits, including one inside India). `price_inr` is therefore null on every dish and `prices_published` is false, rather than a guessed number.","required_params":["res_id"],"optional_params":[],"params":[{"name":"res_id","type":"string","required":true,"description":"The numeric Zomato restaurant id, as `search` returns it in `res_id`. A zomato.com URL containing the id is also accepted.","on_invalid":"reject","example":311057,"aliases":["restaurant_id","id"]}],"returns":"categories[]{menu, category, items[]{item_id, name, description, price_inr, is_veg, is_vegan, dietary_tags[], is_delivery_enabled, image}}, item_count, menu_count, prices_published, priced_item_count, price_note, res_id","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":3},"example_params":{"res_id":311057}},{"name":"restaurant/reviews","description":"Review text for one restaurant, newest first, 5 per page. Returns at most 25 reviews: page 6 is where Zomato answers 'Please login', measured identically on three restaurants. Each review carries its text, star rating, age, like and comment counts, and the reviewer name and profile link exactly as the public page prints them.","required_params":["res_id"],"optional_params":["max_pages"],"params":[{"name":"res_id","type":"string","required":true,"description":"The numeric Zomato restaurant id, as `search` returns it in `res_id`. A zomato.com URL containing the id is also accepted.","on_invalid":"reject","example":311057,"aliases":["restaurant_id","id"]},{"name":"max_pages","type":"integer","required":false,"description":"How many review pages to walk, 5 reviews each. Capped at 5 because page 6 is where Zomato returns 'Please login' — measured identically on three restaurants, so 25 reviews is the logged-out ceiling.","on_invalid":"ignore","default":5,"example":5,"minimum":1,"maximum":5}],"returns":"reviews[]{review_id, text, rating, timestamp, like_count, comment_count, photo_count, review_url, user_name, user_profile_url, user_id, user_review_count, user_follower_count, rating_type, rating_label, tags[]}, count, pages_fetched, reviews_truncated, source_number_of_pages, stop_reason, res_id","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":3},"example_params":{"res_id":311057,"max_pages":2}},{"name":"locations/search","description":"Turn a place name into the localities Zomato knows, with coordinates — the lookup that tells you what to pass as `locality`.","required_params":["query"],"optional_params":[],"params":[{"name":"query","type":"string","required":true,"description":"A place name to resolve — a neighbourhood, a landmark or a city.","on_invalid":"reject","example":"connaught place","aliases":["q","place","term"]}],"returns":"locations[]{title, subtitle, name, entity_id, entity_type, location_type, latitude, longitude}, count","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"connaught place"}}]},{"name":"zoom-buscape","category":{"id":"ecommerce","title":"E-commerce & Marketplaces"},"title":"Zoom & Buscapé API — Brazilian price comparison: search, every store's offer, cash and instalment prices, price history, reviews","version":"0.1.1","pii_redact_default":false,"mint_reusable":null,"base_path":"/zoom-buscape/v1","spec_available":true,"actions":[{"name":"search","description":"Keyword search on Zoom / Buscapé (Brazil, BRL). Rows are catalogue products (lowest à vista price, instalment plan, number of stores, best store, rating and review count) and single store offers the site has not matched to a product (`row_type: offer`). Filter by price range, category, brand and store; sort by relevance or price. `facets` lists the categories, brands, stores and spec filters of the result. The source's total stops at 10 000 (`total_capped`).","required_params":["query"],"optional_params":["site","sort","page","page_size","price_min","price_max","category_id","brand","seller","auto_category"],"params":[{"name":"query","type":"string","required":true,"description":"Search words, e.g. `geladeira frost free`, `iphone 15`, `tv 55`.","on_invalid":"reject","example":"geladeira frost free","aliases":["q","keyword"]},{"name":"site","type":"enum","required":false,"description":"Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform).","on_invalid":"reject","allowed_values":[{"value":"buscape","label":"Buscapé (buscape.com.br)"},{"value":"zoom","label":"Zoom (zoom.com.br)"}],"default":"buscape"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's relevance"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (1 = first).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Rows asked for per page (the site returns this many or a few fewer: rows it hides, e.g. adult content, are not refilled).","on_invalid":"reject","default":36,"example":36,"minimum":1,"maximum":100,"aliases":["size"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in BRL. The source compares its listing price, which is the à vista price (the row's `price`).","on_invalid":"reject","example":1500,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in BRL.","on_invalid":"reject","example":3000,"minimum":0},{"name":"brand","type":"string","required":false,"description":"Brand name exactly as in `facets.brand[].id` of an earlier call (e.g. `Brastemp`, `Apple`).","on_invalid":"reject","example":"Brastemp"},{"name":"seller","type":"string","required":false,"description":"Store name as in `facets.seller[].id` (the store with the best price).","on_invalid":"reject","example":"Magazine Luiza"},{"name":"category_id","type":"string","required":false,"description":"Narrow to one category id from `facets.category[].id` (8 = Geladeira).","on_invalid":"reject","example":"8","aliases":["category"]},{"name":"auto_category","type":"boolean","required":false,"description":"Let the site narrow the search to the category it thinks you mean (`geladeira` → category 8 Geladeira); the chosen one is in `category_suggestion`.","on_invalid":"reject","default":false}],"returns":"results[]{row_type (product|offer), product_id, offer_id (the id of its own type, other null), title, short_title, url (product rows), clickout_url (offer rows), image, price (à vista, BRL), price_is_from, currency, installments, installment_value, installment_total_price, has_interest, store_count, best_offer{offer_id, seller_id, seller_name}, sellers[]{id, name}, category{category_id, name, slug}, rating, review_count, discount_pct, marketplace, stamps[], popularity_score, position} + count + total + total_capped + pages + page + page_size + has_more + facets{category[], brand[], seller[], marketplace[], price_range{min, max, buckets[]}, attributes[]{name, values[]}} + category_suggestion + query + sort + site","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"query":"geladeira frost free"}},{"name":"category","description":"One Zoom / Buscapé category listing (e.g. 8 = Geladeira, 7 = Celular e Smartphone): the same rows, filters, sort and paging as `search`. Takes the numeric id or the category URL (e.g. https://www.zoom.com.br/geladeira).","required_params":["category_id"],"optional_params":["site","sort","page","page_size","price_min","price_max","brand","seller"],"params":[{"name":"category_id","type":"string","required":true,"description":"Numeric category id (`category.category_id` of a row, `category_path[]` of `product`, a facet), or a category page URL.","on_invalid":"reject","example":"8","aliases":["category","url"]},{"name":"site","type":"enum","required":false,"description":"Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform).","on_invalid":"reject","allowed_values":[{"value":"buscape","label":"Buscapé (buscape.com.br)"},{"value":"zoom","label":"Zoom (zoom.com.br)"}],"default":"buscape"},{"name":"sort","type":"enum","required":false,"description":"Result order.","on_invalid":"reject","allowed_values":[{"value":"relevance","label":"The site's relevance"},{"value":"price_asc","label":"Lowest price first"},{"value":"price_desc","label":"Highest price first"}],"default":"relevance"},{"name":"page","type":"integer","required":false,"description":"Result page (1 = first).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":100},{"name":"page_size","type":"integer","required":false,"description":"Rows asked for per page (the site returns this many or a few fewer: rows it hides, e.g. adult content, are not refilled).","on_invalid":"reject","default":36,"example":36,"minimum":1,"maximum":100,"aliases":["size"]},{"name":"price_min","type":"number","required":false,"description":"Lowest price in BRL. The source compares its listing price, which is the à vista price (the row's `price`).","on_invalid":"reject","example":1500,"minimum":0},{"name":"price_max","type":"number","required":false,"description":"Highest price in BRL.","on_invalid":"reject","example":3000,"minimum":0},{"name":"brand","type":"string","required":false,"description":"Brand name exactly as in `facets.brand[].id` of an earlier call (e.g. `Brastemp`, `Apple`).","on_invalid":"reject","example":"Brastemp"},{"name":"seller","type":"string","required":false,"description":"Store name as in `facets.seller[].id` (the store with the best price).","on_invalid":"reject","example":"Magazine Luiza"}],"returns":"results[]{same row shape as search} + count + total + total_capped + pages + page + page_size + has_more + facets + category{category_id, url} + sort + site","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"category_id":"8"}},{"name":"product","description":"One product on Zoom / Buscapé: title, brand, description, category path, images, the full spec sheet, lowest and highest à vista price, number of offers and stores, the best offer (store, à vista price, instalment plan), the user rating and review count, the popularity rank in its category, the site's tags and the editorial review (pros, cons, summary, author).","required_params":["product_id"],"optional_params":["site"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id: `product_id` of a search / category row, or a product page URL from zoom.com.br / buscape.com.br (resolved to its id).","on_invalid":"reject","example":"12534144","aliases":["id","url"]},{"name":"site","type":"enum","required":false,"description":"Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform).","on_invalid":"reject","allowed_values":[{"value":"buscape","label":"Buscapé (buscape.com.br)"},{"value":"zoom","label":"Zoom (zoom.com.br)"}],"default":"buscape"}],"returns":"product{row_type, product_id, title, url, brand, line, status, created_at, description, category{category_id, name, slug}, category_path[], images[], price_min, price_max, currency, offer_count, store_count, best_offer{offer_id, title, price, installment_total_price, installments, installment_value, condition, seller{id, name, logo, is_marketplace}}, rating, review_count, external_reviews_url, popularity_rank_in_category, tags[], specs[]{group, name, value}, expert_review{title, summary, pros[], cons[], author, rating, date}}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":3},"example_params":{"product_id":"12534144"}},{"name":"offers","description":"Every store's offer for one product: store (id, name, logo, marketplace), offer title, condition (new / used), cross-border, à vista price, instalment plan (number, value, total, with or without interest), discount, stock where the store publishes it. Sort like the site: default, cheapest à vista, priciest, cheapest instalment total, biggest discount. No shipping cost: the site only computes it after a postcode is entered.","required_params":["product_id"],"optional_params":["site","sort","page","page_size"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id: `product_id` of a search / category row, or a product page URL from zoom.com.br / buscape.com.br (resolved to its id).","on_invalid":"reject","example":"12534144","aliases":["id","url"]},{"name":"site","type":"enum","required":false,"description":"Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform).","on_invalid":"reject","allowed_values":[{"value":"buscape","label":"Buscapé (buscape.com.br)"},{"value":"zoom","label":"Zoom (zoom.com.br)"}],"default":"buscape"},{"name":"sort","type":"enum","required":false,"description":"Offer order.","on_invalid":"reject","allowed_values":[{"value":"price_asc","label":"Lowest à vista price first"},{"value":"default","label":"The site's default order"},{"value":"price_desc","label":"Highest à vista price first"},{"value":"installment_total_asc","label":"Lowest instalment total first"},{"value":"discount_desc","label":"Biggest discount first"}],"default":"price_asc"},{"name":"page","type":"integer","required":false,"description":"Offer page (1 = first).","on_invalid":"reject","default":1,"example":1,"minimum":1,"maximum":50},{"name":"page_size","type":"integer","required":false,"description":"Offers per page.","on_invalid":"reject","default":50,"example":50,"minimum":1,"maximum":100}],"returns":"product_id + offers[]{position, offer_id, product_id, sku_id, title, image, seller{id, name, logo, is_marketplace}, condition (new|used), cross_border, price (à vista), currency, installment_total_price, installments, installment_value, has_interest, installment_plans[]{months, value, total}, discount_pct, competitiveness_index, stock, sku_variations[]} + count + total + store_count + page + page_size + has_more + cheapest_price + cheapest_installment_total + best_offer + sort","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"12534144"}},{"name":"offer","description":"One single store offer (`row_type: offer` rows of search / category, or any `offer_id`): title, store, à vista price, list price, instalment plan, image and the site's cashback on it.","required_params":["offer_id"],"optional_params":["site"],"params":[{"name":"offer_id","type":"string","required":true,"description":"`offer_id` of a search / category row with row_type offer, or of an `offers` row.","on_invalid":"reject","example":"1400182309","aliases":["id"]},{"name":"site","type":"enum","required":false,"description":"Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform).","on_invalid":"reject","allowed_values":[{"value":"buscape","label":"Buscapé (buscape.com.br)"},{"value":"zoom","label":"Zoom (zoom.com.br)"}],"default":"buscape"}],"returns":"offer{row_type=offer, offer_id, title, image, seller{id, name, logo, is_marketplace}, price, list_price, currency, installments, installment_value, installment_total_price, installment_plans[], cashback_value, cashback_rate, clickout_url}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"offer_id":"1400182309"}},{"name":"price_history","description":"The site's own price history for one product: the lowest à vista price on every day and which store had it, for the last 40 days or 3 / 6 / 12 months, with the lowest, highest, median and last price of the period. Every point is checked to belong to the requested product. Today's point is the day's lowest so far and can be below the cheapest offer at the moment of the call (measured once in 22).","required_params":["product_id"],"optional_params":["period","site"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id: `product_id` of a search / category row, or a product page URL from zoom.com.br / buscape.com.br (resolved to its id).","on_invalid":"reject","example":"12534144","aliases":["id","url"]},{"name":"period","type":"enum","required":false,"description":"How far back.","on_invalid":"reject","allowed_values":[{"value":"40d","label":"Last 40 days"},{"value":"3m","label":"Last 3 months"},{"value":"6m","label":"Last 6 months"},{"value":"12m","label":"Last 12 months"}],"default":"40d","aliases":["range","time_range"]},{"name":"site","type":"enum","required":false,"description":"Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform).","on_invalid":"reject","allowed_values":[{"value":"buscape","label":"Buscapé (buscape.com.br)"},{"value":"zoom","label":"Zoom (zoom.com.br)"}],"default":"buscape"}],"returns":"product_id + period + currency + points[]{date, price, seller_id} + count + first_date + last_date + lowest{date, price} + highest{date, price} + median + last_price + identity{product_id, points_checked}","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":2},"example_params":{"product_id":"12534144","period":"3m"}},{"name":"reviews","description":"The user-review block of one product: average rating, review count, and the reviews the site shows (up to 10, each with title, text, stars, author first name, date, likes). For most products these are the linked store's reviews (often Amazon's), with the link to all of them in `external_reviews_url`.","required_params":["product_id"],"optional_params":["site"],"params":[{"name":"product_id","type":"string","required":true,"description":"Product id: `product_id` of a search / category row, or a product page URL from zoom.com.br / buscape.com.br (resolved to its id).","on_invalid":"reject","example":"12534144","aliases":["id","url"]},{"name":"site","type":"enum","required":false,"description":"Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform).","on_invalid":"reject","allowed_values":[{"value":"buscape","label":"Buscapé (buscape.com.br)"},{"value":"zoom","label":"Zoom (zoom.com.br)"}],"default":"buscape"}],"returns":"product_id + rating + review_count + external_reviews_url + reviews[]{title, text, rating, author, date, positive, likes, dislikes, from_external_store, offer_id, seller_id} + count","cacheable":true,"cache_ttl_seconds":0,"pricing":{"mode":"flat","credits":1},"example_params":{"product_id":"12534144"}}]},{"name":"zoopla","category":{"id":"real-estate","title":"Real Estate"},"title":"Zoopla API scraper — UK property data: homes for sale and to rent, new-build developments, full property detail (price, beds, baths, receptions, floor area, tenure, EPC, council tax, floorplans, images, coordinates, agent), Land-Registry sold prices by area, per-address sale history and estate-agent branches — no Zoopla account required","version":"1.0.0","pii_redact_default":false,"mint_reusable":null,"base_path":"/zoopla/v1","spec_available":true,"actions":[{"name":"location_search","description":"Resolve a free-text place, postcode or station into the canonical Zoopla area path every other action takes. An unambiguous name returns one match; an ambiguous one ('Richmond', 'Kingston') returns every candidate Zoopla offers.","required_params":["query"],"optional_params":["section"],"params":[{"name":"query","type":"string","required":true,"description":"Town, district, postcode, outcode or station name.","on_invalid":"reject","example":"Clapham, London","aliases":["q","place","text"]},{"name":"section","type":"enum","required":false,"description":"Which Zoopla market to search. The two commercial markets take their own property_type values (offices, retail-premises, industrial-sites, hospitality, land) and carry a floor-area range rather than bedrooms.","on_invalid":"reject","allowed_values":[{"value":"for_sale","label":"Homes for sale"},{"value":"to_rent","label":"Homes to rent"},{"value":"new_homes","label":"New-build homes"},{"value":"commercial_sale","label":"Commercial property for sale"},{"value":"commercial_rent","label":"Commercial property to rent"}],"default":"for_sale","example":"for_sale","aliases":["channel","listing_type"]}],"returns":"matches[] (geo, label, url, exact), count, resolved (the single match when Zoopla resolved the name outright)","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"query":"Clapham, London"}},{"name":"search","description":"Search Zoopla listings in an area — homes for sale, homes to rent, new-build developments, or commercial property for sale or to rent — with the filters the site itself exposes: price band, minimum/maximum beds, minimum baths, property type, floor-area band, search radius, listed-within, free-text keyword, features, sold/auction inclusion and sort order. 25 listings a page.","required_params":["geo"],"optional_params":["section","page","price_min","price_max","beds_min","beds_max","baths_min","floor_area_min","floor_area_max","property_type","radius","added","keywords","features","new_homes","sort","include_sold","auctions_only","furnished_state","price_frequency","student_only","shared_only","bills_included","available_from","max_rotations"],"params":[{"name":"geo","type":"string","required":true,"description":"Where to look: a Zoopla area path ('sw9', 'surrey/richmond', 'london/clapham'), a full Zoopla URL, or just a place name or postcode ('Leeds', 'SW9 9EF'). Zoopla's own slugs are not guessable — Leeds is 'west-yorkshire/leeds' while Liverpool is plain 'liverpool' — so a plain name is resolved for you and the path used comes back as `area` (with `area_resolved_from` set). Use location_search when a name is ambiguous, e.g. Richmond.","on_invalid":"reject","example":"sw9","aliases":["area","location","location_path"]},{"name":"section","type":"enum","required":false,"description":"Which Zoopla market to search. The two commercial markets take their own property_type values (offices, retail-premises, industrial-sites, hospitality, land) and carry a floor-area range rather than bedrooms.","on_invalid":"reject","allowed_values":[{"value":"for_sale","label":"Homes for sale"},{"value":"to_rent","label":"Homes to rent"},{"value":"new_homes","label":"New-build homes"},{"value":"commercial_sale","label":"Commercial property for sale"},{"value":"commercial_rent","label":"Commercial property to rent"}],"default":"for_sale","example":"for_sale","aliases":["channel","listing_type"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Zoopla serves 25 listings a page and stops at page 40 (returned as page_cap); narrow the area or the filters to reach more.","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["pn","page_number"]},{"name":"price_min","type":"integer","required":false,"description":"Minimum price in GBP — the asking price, or the MONTHLY rent when section=to_rent (set price_frequency=per_week to read it as weekly).","on_invalid":"reject","example":400000,"minimum":0,"aliases":["min_price"]},{"name":"price_max","type":"integer","required":false,"description":"Maximum price in GBP, same basis as price_min.","on_invalid":"reject","example":800000,"minimum":0,"aliases":["max_price"]},{"name":"beds_min","type":"integer","required":false,"description":"Minimum bedrooms (2 means 2 or more; 0 includes studios).","on_invalid":"reject","example":2,"minimum":0,"maximum":10,"aliases":["min_beds","bedrooms_min"]},{"name":"beds_max","type":"integer","required":false,"description":"Maximum bedrooms.","on_invalid":"reject","example":4,"minimum":0,"maximum":10,"aliases":["max_beds","bedrooms_max"]},{"name":"baths_min","type":"integer","required":false,"description":"Minimum bathrooms (2 means 2 or more).","on_invalid":"reject","example":2,"minimum":0,"maximum":10,"aliases":["min_baths","bathrooms_min"]},{"name":"floor_area_min","type":"integer","required":false,"description":"Minimum internal floor area in square FEET (Zoopla's own unit on listings; the sold register uses square metres).","on_invalid":"reject","example":800,"minimum":0,"aliases":["min_floor_area","sqft_min"]},{"name":"floor_area_max","type":"integer","required":false,"description":"Maximum internal floor area in square feet.","on_invalid":"reject","example":2000,"minimum":0,"aliases":["max_floor_area","sqft_max"]},{"name":"property_type","type":"enum","required":false,"description":"One property type. The first nine apply to for_sale / to_rent / new_homes; offices, retail-premises, industrial-sites, hospitality and land apply to the two commercial sections. Zoopla takes a single value here — passing two does not union them, so ask for one type per call.","on_invalid":"reject","allowed_values":[{"value":"houses","label":"houses"},{"value":"flats","label":"flats"},{"value":"detached","label":"detached"},{"value":"semi_detached","label":"semi detached"},{"value":"terraced","label":"terraced"},{"value":"bungalows","label":"bungalows"},{"value":"land","label":"land"},{"value":"park_home","label":"park home"},{"value":"farms_land","label":"farms land"},{"value":"offices","label":"offices"},{"value":"retail-premises","label":"retail premises"},{"value":"industrial-sites","label":"industrial sites"},{"value":"hospitality","label":"hospitality"},{"value":"land","label":"land"}],"example":"flats","aliases":["property_types"]},{"name":"radius","type":"enum","required":false,"description":"Widen the search around the area, in miles. Zoopla accepts only these steps.","on_invalid":"reject","allowed_values":[{"value":"0","label":"This area only"},{"value":"0.25","label":"+0.25 miles"},{"value":"0.5","label":"+0.5 miles"},{"value":"1","label":"+1 mile"},{"value":"3","label":"+3 miles"},{"value":"5","label":"+5 miles"},{"value":"10","label":"+10 miles"},{"value":"15","label":"+15 miles"},{"value":"20","label":"+20 miles"},{"value":"30","label":"+30 miles"},{"value":"40","label":"+40 miles"}],"example":"1","aliases":["radius_miles"]},{"name":"added","type":"enum","required":false,"description":"Only listings Zoopla published within this window.","on_invalid":"reject","allowed_values":[{"value":"24_hours","label":"Last 24 hours"},{"value":"3_days","label":"Last 3 days"},{"value":"7_days","label":"Last 7 days"},{"value":"14_days","label":"Last 14 days"},{"value":"30_days","label":"Last 30 days"}],"example":"7_days","aliases":["added_within","listed_within"]},{"name":"keywords","type":"string","required":false,"description":"Free-text term Zoopla matches inside the listing (e.g. 'garden', 'balcony', 'garage'). Max 80 characters.","on_invalid":"reject","example":"garden","aliases":["keyword"]},{"name":"features","type":"array","required":false,"description":"Require these features. Several are combined with AND.","on_invalid":"reject","allowed_values":[{"value":"has_garden","label":"Garden"},{"value":"has_parking_garage","label":"Parking or garage"},{"value":"has_balcony_terrace","label":"Balcony or terrace"},{"value":"has_fireplace","label":"Fireplace"},{"value":"has_porter_security","label":"Porter or security"}],"example":["has_garden"],"aliases":["feature"]},{"name":"new_homes","type":"enum","required":false,"description":"How new-build listings are treated inside a for-sale search.","on_invalid":"reject","allowed_values":[{"value":"include","label":"Include new homes"},{"value":"exclude","label":"Exclude new homes"},{"value":"only","label":"New homes only"}],"example":"exclude"},{"name":"sort","type":"enum","required":false,"description":"Result ordering. These are the only orders Zoopla offers.","on_invalid":"reject","allowed_values":[{"value":"recommended","label":"Zoopla's recommended order"},{"value":"newest_listings","label":"Most recently listed"},{"value":"highest_price","label":"Highest price first"},{"value":"lowest_price","label":"Lowest price first"},{"value":"most_reduced","label":"Biggest price reductions first"}],"default":"recommended","example":"newest_listings","aliases":["results_sort"]},{"name":"include_sold","type":"boolean","required":false,"description":"Also return Sold STC / Under Offer listings (for-sale only).","on_invalid":"reject","default":false,"example":false},{"name":"auctions_only","type":"boolean","required":false,"description":"Only properties going to auction.","on_invalid":"reject","default":false,"example":false},{"name":"furnished_state","type":"enum","required":false,"description":"RENT only: furnishing.","on_invalid":"reject","allowed_values":[{"value":"furnished","label":"Furnished"},{"value":"unfurnished","label":"Unfurnished"},{"value":"part_furnished","label":"Part furnished"}],"example":"furnished","aliases":["furnished"]},{"name":"price_frequency","type":"enum","required":false,"description":"RENT only: how price_min/price_max are read. Rows always come back with both the monthly price and Zoopla's own weekly figure.","on_invalid":"reject","allowed_values":[{"value":"per_month","label":"price_min/price_max are monthly"},{"value":"per_week","label":"price_min/price_max are weekly"}],"example":"per_month"},{"name":"student_only","type":"boolean","required":false,"description":"RENT only: student accommodation.","on_invalid":"reject","default":false,"example":false},{"name":"shared_only","type":"boolean","required":false,"description":"RENT only: shared accommodation / rooms.","on_invalid":"reject","default":false,"example":false},{"name":"bills_included","type":"boolean","required":false,"description":"RENT only: bills included in the rent.","on_invalid":"reject","default":false,"example":false},{"name":"available_from","type":"string","required":false,"description":"RENT only: Zoopla's availability filter (e.g. 'now' or a date).","on_invalid":"ignore","example":"2026-10-01"},{"name":"max_rotations","type":"integer","required":false,"description":"How hard to retry when the site refuses a request.","on_invalid":"ignore","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"listings[] (listing_id, url, title, address, price [always on the basis price_display shows — monthly for a letting], price_display, price_frequency, price_quoted + price_quoted_frequency [the agent's own figure and whether it is per week, per month or per annum], price_per_week, bedrooms, bathrooms, receptions, floor_area_sqft (+ floor_area_sqft_max on commercial), property_type, tenure_tags, status, under_offer, listed_on, available_from, latitude, longitude, images[], agent{}), featured[], count, total_results, total_results_capped, page, page_size, page_cap, has_more, filters_applied, area, area_resolved_from, search_url","cacheable":true,"cache_ttl_seconds":900,"pricing":{"mode":"flat","credits":2},"example_params":{"geo":"sw9"}},{"name":"property_detail","description":"One Zoopla listing in full: price (rent in both frequencies), full description, key features, tenure, service charge, ground rent, council tax band, EPC rating and certificate, floorplans, every image, nearest stations with distances, coordinates, postcode and the marketing agent.","required_params":["listing_id"],"optional_params":["max_rotations"],"params":[{"name":"listing_id","type":"string","required":true,"description":"Zoopla listing id — the digits in a /details/<id>/ URL, or any search row's listing_id. A full Zoopla listing URL also works.","on_invalid":"reject","example":"74328828","aliases":["id","property_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How hard to retry when the site refuses.","on_invalid":"ignore","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"listing{} — price, price_display, price_frequency, price_per_week, price_per_month, description, key_features[], tenure, service_charge, ground_rent, council_tax_band, epc_rating, epc_images[], images[], floorplans[], nearest_stations[], latitude, longitude, postcode, uprn, agent{}","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":2},"example_params":{"listing_id":"74328828"}},{"name":"sold_prices","description":"Zoopla's Land-Registry sold-price register for an area: every recorded address with its UPRN, last sale date and price, bedrooms, bathrooms, receptions, tenure and floor area in square metres. 25 addresses a page, newest sale first.","required_params":["geo"],"optional_params":["page","max_rotations"],"params":[{"name":"geo","type":"string","required":true,"description":"Where to look: a Zoopla area path ('sw9', 'surrey/richmond', 'london/clapham'), a full Zoopla URL, or just a place name or postcode ('Leeds', 'SW9 9EF'). Zoopla's own slugs are not guessable — Leeds is 'west-yorkshire/leeds' while Liverpool is plain 'liverpool' — so a plain name is resolved for you and the path used comes back as `area` (with `area_resolved_from` set). Use location_search when a name is ambiguous, e.g. Richmond.","on_invalid":"reject","example":"sw9","aliases":["area","location","location_path"]},{"name":"page","type":"integer","required":false,"description":"1-based page. Zoopla serves 25 listings a page and stops at page 40 (returned as page_cap); narrow the area or the filters to reach more.","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["pn","page_number"]},{"name":"max_rotations","type":"integer","required":false,"description":"How hard to retry when the site refuses.","on_invalid":"ignore","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"properties[] (uprn, address, postcode, latitude, longitude, last_sold_price, last_sold_date, bedrooms, bathrooms, receptions, property_type, tenure, floor_area_sqm, url), count, total_results, page, page_size, has_more, area, area_resolved_from","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":2},"example_params":{"geo":"sw9"}},{"name":"property_history","description":"One address by UPRN: every sale Zoopla holds from the Land Registry with its price, date and percentage change, plus the property's own past Zoopla listings with their asking prices, photos and floorplans, its EPC rating, tenure and floor area.","required_params":["uprn"],"optional_params":["max_rotations"],"params":[{"name":"uprn","type":"string","required":true,"description":"The UPRN from a sold_prices row (or the digits in a /property/uprn/<uprn>/ URL).","on_invalid":"reject","example":"10091117300","aliases":["id","property_id"]},{"name":"max_rotations","type":"integer","required":false,"description":"How hard to retry when the site refuses.","on_invalid":"ignore","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"property{} — uprn, address, postcode, latitude, longitude, property_type, tenure, bedrooms, bathrooms, receptions, floor_area_sqm, epc_rating, sales[] (date, price, change_pct, change_amount), past_listings[], live_listings[], sold_prices_source","cacheable":true,"cache_ttl_seconds":604800,"pricing":{"mode":"flat","credits":1},"example_params":{"uprn":"10091117300"}},{"name":"agent","description":"One estate-agent branch: address, memberships, opening times, website, its own for-sale and to-rent averages and weeks-on-market, and the properties it currently has listed on Zoopla. A new-homes branch id resolves to the housebuilder's development instead (kind='developer'): its price and bedroom range, its plots and the schools, stations and shops Zoopla lists nearby.","required_params":["branch_id"],"optional_params":["max_rotations"],"params":[{"name":"branch_id","type":"string","required":true,"description":"Zoopla branch id (a search row's agent.branch_id) or a full /find-agents/branch/... URL.","on_invalid":"reject","example":"48920","aliases":["id","branch","branch_url"]},{"name":"max_rotations","type":"integer","required":false,"description":"How hard to retry when the site refuses.","on_invalid":"ignore","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"agent{} — kind ('agency' or 'developer'), branch_id, name, address, postcode, latitude, longitude, website, memberships[], opening_times[], description, stats{for_sale,to_rent: listings, average_price, weeks_on_market}, listings{for_sale[], to_rent[]}; for a developer also development_name, company_name, price_min/max, beds_min/max, points_of_interest[] and listings.new_homes[]","cacheable":true,"cache_ttl_seconds":3600,"pricing":{"mode":"flat","credits":1},"example_params":{"branch_id":"48920"}},{"name":"agent_search","description":"The estate or letting agents covering an area, with each branch's average asking price, average weeks on market and live listing count.","required_params":["geo"],"optional_params":["kind","page","max_rotations"],"params":[{"name":"geo","type":"string","required":true,"description":"Where to look: a Zoopla area path ('sw9', 'surrey/richmond', 'london/clapham'), a full Zoopla URL, or just a place name or postcode ('Leeds', 'SW9 9EF'). Zoopla's own slugs are not guessable — Leeds is 'west-yorkshire/leeds' while Liverpool is plain 'liverpool' — so a plain name is resolved for you and the path used comes back as `area` (with `area_resolved_from` set). Use location_search when a name is ambiguous, e.g. Richmond.","on_invalid":"reject","example":"sw9","aliases":["area","location","location_path"]},{"name":"kind","type":"enum","required":false,"description":"Which kind of agent to list.","on_invalid":"reject","allowed_values":[{"value":"all","label":"Sales and lettings agents"},{"value":"estate","label":"Estate (sales) agents"},{"value":"letting","label":"Letting agents"}],"default":"all","example":"estate"},{"name":"page","type":"integer","required":false,"description":"1-based page. Zoopla serves 25 listings a page and stops at page 40 (returned as page_cap); narrow the area or the filters to reach more.","on_invalid":"reject","default":1,"example":1,"minimum":1,"aliases":["pn","page_number"]},{"name":"max_rotations","type":"integer","required":false,"description":"How hard to retry when the site refuses.","on_invalid":"ignore","default":4,"example":4,"minimum":1,"maximum":8}],"returns":"agents[] (branch_id, name, address, url, logo_url, description, for_sale{listings, average_price, weeks_on_market}, to_rent{...}), count, total_results, page, page_size, page_cap, has_more, area, area_resolved_from","cacheable":true,"cache_ttl_seconds":86400,"pricing":{"mode":"flat","credits":1},"example_params":{"geo":"london"}}]}]}